[
  {
    "path": ".github/ISSUE_TEMPLATE/akshare_report.md",
    "content": "---\nname: AKShare-问题报告\nabout: 反馈 AKShare 接口相关的问题\ntitle: AKShare 接口问题报告\nlabels: bug\nassignees: ''\n\n---\n\n> 由于开源项目维护工作量较大，本 issue 只接受接口报错问题。如有更多问题，推荐加入【财经数据与量化投研】知识社区：https://t.zsxq.com/ZCxUG 。\n\n> 推荐使用 **AKQuant** 进行量化投研：https://akquant.akfamily.xyz\n\n## 重要前提\n\n遇到任何 AKShare 使用问题，请先将您本地的 AKShare 升级到**最新版**，可以通过如下命令升级：\n\n```bash\npip install akshare --upgrade  # Python 版本需要大于等于 3.9\n```\n\n## 如何提交问题\n\n请提交以下相关信息，以更精准的解决问题。**不符合提交规范的 issue 会被关闭！**\n\n1. 请先详细阅读 AKShare 文档中对应接口的使用方式：https://akshare.akfamily.xyz\n2. 请务必将 AKShare 升级到最新版本\n3. 请检查操作系统版本，目前只支持 64 位主流操作系统\n4. 请检查 Python 版本，目前只支持 3.9 以上的版本\n5. 请提交相关接口的名称和相应的调用代码\n6. 接口报错的截图或描述\n7. 期望获得的正确结果\n"
  },
  {
    "path": ".github/workflows/main_dev_check.yml",
    "content": "# main_dev_check\nname: Main and Dev Checks\n\non:\n  push:\n    branches:\n      - main\n      - dev\n  pull_request:\n    branches:\n      - main\n      - dev\n\njobs:\n  build:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        os: [ubuntu-latest, macos-latest, windows-latest]\n        python-version: [\"3.11\", \"3.12\", \"3.13\", \"3.14\"]\n\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v6\n\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@v6\n        with:\n          python-version: ${{ matrix.python-version }}\n\n      - name: Install dependencies\n        run: |\n          python -m pip install --upgrade pip\n          pip install .\n\n      - name: Lint with Ruff\n        run: |\n          pip install ruff\n          ruff format .\n          ruff check . --fix\n          \n\n      - name: Test with pytest\n        run: |\n          pip install pytest\n          pytest\n"
  },
  {
    "path": ".github/workflows/release_and_deploy.yml",
    "content": "# release_and_deploy\nname: Release and Deploy\n\non:\n  push:\n    tags:\n      - 'release-v*.*.*'\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v6\n\n      - name: Set up Python\n        uses: actions/setup-python@v6\n        with:\n          python-version: '3.x'\n\n      - name: Install dependencies\n        run: |\n          python -m pip install --upgrade pip\n          pip install build twine\n\n      - name: Build and publish package\n        env:\n          TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}\n          TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}\n        run: |\n          python -m build\n          twine upload dist/*\n\n      - name: Create GitHub release\n        uses: softprops/action-gh-release@v2\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".gitignore",
    "content": "# --- Python Core ---\n__pycache__/\n*.py[cod]\n*$py.class\nuv.lock\n\n# --- Distribution / Packaging ---\nbuild/\ndist/\n*.egg-info/\n.eggs/\n*.egg\nMANIFEST\n*.tar.gz\n\n# --- Virtual Environments ---\n# Common venv naming conventions\n.env\n.venv\nenv/\nvenv/\nENV/\nenv.bak/\nvenv.bak/\n.venv/\n\n# --- Unit Test / Coverage ---\n.tox/\n.nox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*.cover\n*.py,cover\n.hypothesis/\n.pytest_cache/\nhtmlcov/\n\n# --- Type Checking ---\n.mypy_cache/\n.dmypy.json\ndmypy.json\n\n# --- Jupyter Notebook ---\n.ipynb_checkpoints\n\n# --- IDEs / Editors ---\n# JetBrains (IntelliJ, PyCharm, etc.)\n.idea/\n*.iml\n*.icls\n/_windows/\n/codestyles/\ncolors\n\n# VS Code\n.vscode/\n*.code-workspace\n\n# Vim\n*.swp\n*.swo\n\n# --- OS Generated Files ---\n# macOS\n.DS_Store\n.DS_Store?\n._*\n.Spotlight-V100\n.Trashes\n\n# Windows\nehthumbs.db\nThumbs.db\n\n# --- Project Specific ---\n*.bak\n*.xml\n/data\n/tests/data\n\n# Documentation\ndocs/build/\ndocs/_build/\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "# commit setup\nrepos:\n  - repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v6.0.0\n    hooks:\n      - id: check-yaml\n      - id: check-toml\n      - id: check-json\n      - id: end-of-file-fixer\n      - id: trailing-whitespace\n      - id: check-added-large-files\n        args: ['--maxkb=5000']\n      - id: check-case-conflict\n      - id: detect-private-key\n  - repo: https://github.com/astral-sh/ruff-pre-commit\n    # Ruff version.\n    rev: v0.15.0\n    hooks:\n      # Run the linter.\n      - id: ruff\n        args: [--fix]\n      # Run the formatter.\n      - id: ruff-format\n  - repo: https://github.com/compilerla/conventional-pre-commit\n    rev: v4.3.0\n    hooks:\n      - id: conventional-pre-commit\n        stages: [commit-msg]\n        args: []\n"
  },
  {
    "path": ".readthedocs.yaml",
    "content": "# Read the Docs configuration file\n# https://docs.readthedocs.io/en/stable/config-file/v2.html\n\nversion: 2\n\nbuild:\n  os: ubuntu-24.04\n  tools:\n    python: \"3.13\"\n\nsphinx:\n  configuration: docs/conf.py\n  # fail_on_warning: true\n\npython:\n  install:\n    - requirements: docs/requirements.txt\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participation in our\ncommunity a harassment-free experience for everyone, regardless of age, body\nsize, visible or invisible disability, ethnicity, sex characteristics, gender\nidentity and expression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, caste, color, religion, or sexual\nidentity and orientation.\n\nWe pledge to act and interact in ways that contribute to an open, welcoming,\ndiverse, inclusive, and healthy community.\n\n## Our Standards\n\nExamples of behavior that contributes to a positive environment for our\ncommunity include:\n\n* Demonstrating empathy and kindness toward other people\n* Being respectful of differing opinions, viewpoints, and experiences\n* Giving and gracefully accepting constructive feedback\n* Accepting responsibility and apologizing to those affected by our mistakes,\n  and learning from the experience\n* Focusing on what is best not just for us as individuals, but for the overall\n  community\n\nExamples of unacceptable behavior include:\n\n* The use of sexualized language or imagery, and sexual attention or advances of\n  any kind\n* Trolling, insulting or derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or email address,\n  without their explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n  professional setting\n\n## Enforcement Responsibilities\n\nCommunity leaders are responsible for clarifying and enforcing our standards of\nacceptable behavior and will take appropriate and fair corrective action in\nresponse to any behavior that they deem inappropriate, threatening, offensive,\nor harmful.\n\nCommunity leaders have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions that are\nnot aligned to this Code of Conduct, and will communicate reasons for moderation\ndecisions when appropriate.\n\n## Scope\n\nThis Code of Conduct applies within all community spaces, and also applies when\nan individual is officially representing the community in public spaces.\nExamples of representing our community include using an official email address,\nposting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported to the community leaders responsible for enforcement at @albertandking.\nAll complaints will be reviewed and investigated promptly and fairly.\n\nAll community leaders are obligated to respect the privacy and security of the\nreporter of any incident.\n\n## Enforcement Guidelines\n\nCommunity leaders will follow these Community Impact Guidelines in determining\nthe consequences for any action they deem in violation of this Code of Conduct:\n\n### 1. Correction\n\n**Community Impact**: Use of inappropriate language or other behavior deemed\nunprofessional or unwelcome in the community.\n\n**Consequence**: A private, written warning from community leaders, providing\nclarity around the nature of the violation and an explanation of why the\nbehavior was inappropriate. A public apology may be requested.\n\n### 2. Warning\n\n**Community Impact**: A violation through a single incident or series of\nactions.\n\n**Consequence**: A warning with consequences for continued behavior. No\ninteraction with the people involved, including unsolicited interaction with\nthose enforcing the Code of Conduct, for a specified period of time. This\nincludes avoiding interactions in community spaces as well as external channels\nlike social media. Violating these terms may lead to a temporary or permanent\nban.\n\n### 3. Temporary Ban\n\n**Community Impact**: A serious violation of community standards, including\nsustained inappropriate behavior.\n\n**Consequence**: A temporary ban from any sort of interaction or public\ncommunication with the community for a specified period of time. No public or\nprivate interaction with the people involved, including unsolicited interaction\nwith those enforcing the Code of Conduct, is allowed during this period.\nViolating these terms may lead to a permanent ban.\n\n### 4. Permanent Ban\n\n**Community Impact**: Demonstrating a pattern of violation of community\nstandards, including sustained inappropriate behavior, harassment of an\nindividual, or aggression toward or disparagement of classes of individuals.\n\n**Consequence**: A permanent ban from any sort of public interaction within the\ncommunity.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage],\nversion 2.1, available at\n[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].\n\nCommunity Impact Guidelines were inspired by\n[Mozilla's code of conduct enforcement ladder][Mozilla CoC].\n\nFor answers to common questions about this code of conduct, see the FAQ at\n[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at\n[https://www.contributor-covenant.org/translations][translations].\n\n[homepage]: https://www.contributor-covenant.org\n[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html\n[Mozilla CoC]: https://github.com/mozilla/diversity\n[FAQ]: https://www.contributor-covenant.org/faq\n[translations]: https://www.contributor-covenant.org/translations\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "<!-- omit in toc -->\n# Contributing to AKShare\n\nFirst off, thanks for taking the time to contribute! ❤️\n\nAll types of contributions are encouraged and valued. See the [Table of Contents](#table-of-contents) for different ways to help and details about how this project handles them. Please make sure to read the relevant section before making your contribution. It will make it a lot easier for us maintainers and smooth out the experience for all involved. The community looks forward to your contributions. 🎉\n\n> And if you like the project, but just don't have time to contribute, that's fine. There are other easy ways to support the project and show your appreciation, which we would also be very happy about:\n> - Star the project\n> - Tweet about it\n> - Refer this project in your project's readme\n> - Mention the project at local meetups and tell your friends/colleagues\n\n<!-- omit in toc -->\n## Table of Contents\n\n- [Code of Conduct](#code-of-conduct)\n- [I Have a Question](#i-have-a-question)\n- [I Want To Contribute](#i-want-to-contribute)\n  - [Reporting Bugs](#reporting-bugs)\n  - [Suggesting Enhancements](#suggesting-enhancements)\n  - [Your First Code Contribution](#your-first-code-contribution)\n  - [Improving The Documentation](#improving-the-documentation)\n- [Styleguides](#styleguides)\n  - [Commit Messages](#commit-messages)\n- [Join The Project Team](#join-the-project-team)\n\n\n## Code of Conduct\n\nThis project and everyone participating in it is governed by the\n[AKShare Code of Conduct](https://github.com/akfamily/akshareblob/master/CODE_OF_CONDUCT.md).\nBy participating, you are expected to uphold this code. Please report unacceptable behavior\nto <albertandking@gmail.com>.\n\n\n## I Have a Question\n\n> If you want to ask a question, we assume that you have read the available [Documentation](https://akshare.akfamily.xyz/).\n\nBefore you ask a question, it is best to search for existing [Issues](https://github.com/akfamily/akshare/issues) that might help you. In case you have found a suitable issue and still need clarification, you can write your question in this issue. It is also advisable to search the internet for answers first.\n\nIf you then still feel the need to ask a question and need clarification, we recommend the following:\n\n- Open an [Issue](https://github.com/akfamily/akshare/issues/new).\n- Provide as much context as you can about what you're running into.\n- Provide project and platform versions (nodejs, npm, etc), depending on what seems relevant.\n\nWe will then take care of the issue as soon as possible.\n\n<!--\nYou might want to create a separate issue tag for questions and include it in this description. People should then tag their issues accordingly.\n\nDepending on how large the project is, you may want to outsource the questioning, e.g. to Stack Overflow or Gitter. You may add additional contact and information possibilities:\n- IRC\n- Slack\n- Gitter\n- Stack Overflow tag\n- Blog\n- FAQ\n- Roadmap\n- E-Mail List\n- Forum\n-->\n\n## I Want To Contribute\n\n> ### Legal Notice <!-- omit in toc -->\n> When contributing to this project, you must agree that you have authored 100% of the content, that you have the necessary rights to the content and that the content you contribute may be provided under the project license.\n\n### Reporting Bugs\n\n<!-- omit in toc -->\n#### Before Submitting a Bug Report\n\nA good bug report shouldn't leave others needing to chase you up for more information. Therefore, we ask you to investigate carefully, collect information and describe the issue in detail in your report. Please complete the following steps in advance to help us fix any potential bug as fast as possible.\n\n- Make sure that you are using the latest version.\n- Determine if your bug is really a bug and not an error on your side e.g. using incompatible environment components/versions (Make sure that you have read the [documentation](https://akshare.akfamily.xyz/). If you are looking for support, you might want to check [this section](#i-have-a-question)).\n- To see if other users have experienced (and potentially already solved) the same issue you are having, check if there is not already a bug report existing for your bug or error in the [bug tracker](https://github.com/akfamily/akshareissues?q=label%3Abug).\n- Also make sure to search the internet (including Stack Overflow) to see if users outside of the GitHub community have discussed the issue.\n- Collect information about the bug:\n  - Stack trace (Traceback)\n  - OS, Platform and Version (Windows, Linux, macOS, x86, ARM)\n  - Version of the interpreter, compiler, SDK, runtime environment, package manager, depending on what seems relevant.\n  - Possibly your input and the output\n  - Can you reliably reproduce the issue? And can you also reproduce it with older versions?\n\n<!-- omit in toc -->\n#### How Do I Submit a Good Bug Report?\n\n> You must never report security related issues, vulnerabilities or bugs including sensitive information to the issue tracker, or elsewhere in public. Instead sensitive bugs must be sent by email to <albertandking@gmail.com>.\n<!-- You may add a PGP key to allow the messages to be sent encrypted as well. -->\n\nWe use GitHub issues to track bugs and errors. If you run into an issue with the project:\n\n- Open an [Issue](https://github.com/akfamily/akshare/issues/new). (Since we can't be sure at this point whether it is a bug or not, we ask you not to talk about a bug yet and not to label the issue.)\n- Explain the behavior you would expect and the actual behavior.\n- Please provide as much context as possible and describe the *reproduction steps* that someone else can follow to recreate the issue on their own. This usually includes your code. For good bug reports you should isolate the problem and create a reduced test case.\n- Provide the information you collected in the previous section.\n\nOnce it's filed:\n\n- The project team will label the issue accordingly.\n- A team member will try to reproduce the issue with your provided steps. If there are no reproduction steps or no obvious way to reproduce the issue, the team will ask you for those steps and mark the issue as `needs-repro`. Bugs with the `needs-repro` tag will not be addressed until they are reproduced.\n- If the team is able to reproduce the issue, it will be marked `needs-fix`, as well as possibly other tags (such as `critical`), and the issue will be left to be [implemented by someone](#your-first-code-contribution).\n\n<!-- You might want to create an issue template for bugs and errors that can be used as a guide and that defines the structure of the information to be included. If you do so, reference it here in the description. -->\n\n\n### Suggesting Enhancements\n\nThis section guides you through submitting an enhancement suggestion for akshare, **including completely new features and minor improvements to existing functionality**. Following these guidelines will help maintainers and the community to understand your suggestion and find related suggestions.\n\n<!-- omit in toc -->\n#### Before Submitting an Enhancement\n\n- Make sure that you are using the latest version.\n- Read the [documentation](https://akshare.akfamily.xyz/) carefully and find out if the functionality is already covered, maybe by an individual configuration.\n- Perform a [search](https://github.com/akfamily/akshare/issues) to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one.\n- Find out whether your idea fits with the scope and aims of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Keep in mind that we want features that will be useful to the majority of our users and not just a small subset. If you're just targeting a minority of users, consider writing an add-on/plugin library.\n\n<!-- omit in toc -->\n#### How Do I Submit a Good Enhancement Suggestion?\n\nEnhancement suggestions are tracked as [GitHub issues](https://github.com/akfamily/akshare/issues).\n\n- Use a **clear and descriptive title** for the issue to identify the suggestion.\n- Provide a **step-by-step description of the suggested enhancement** in as many details as possible.\n- **Describe the current behavior** and **explain which behavior you expected to see instead** and why. At this point you can also tell which alternatives do not work for you.\n- You may want to **include screenshots and animated GIFs** which help you demonstrate the steps or point out the part which the suggestion is related to. You can use [this tool](https://www.cockos.com/licecap/) to record GIFs on macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux. <!-- this should only be included if the project has a GUI -->\n- **Explain why this enhancement would be useful** to most akshare users. You may also want to point out the other projects that solved it better and which could serve as inspiration.\n\n<!-- You might want to create an issue template for enhancement suggestions that can be used as a guide and that defines the structure of the information to be included. If you do so, reference it here in the description. -->\n\n### Your First Code Contribution\n<!-- TODO\ninclude Setup of env, IDE and typical getting started instructions?\n\n-->\n\n### Improving The Documentation\n<!-- TODO\nUpdating, improving and correcting the documentation\n\n-->\n\n## Styleguides\n### Commit Messages\n<!-- TODO\n\n-->\n\n## Join The Project Team\n<!-- TODO -->\n\n<!-- omit in toc -->\n## Attribution\nThis guide is based on the **contributing-gen**. [Make your own](https://github.com/bttger/contributing-gen)!\n"
  },
  {
    "path": "Dockerfile",
    "content": "# 使用精简镜像，镜像体积从 1.2G 下降为约 400M，提高启动效率，同时升级到 Python 3.14.x 提高 20% 以上性能\nFROM python:3.14-slim-bullseye\n\n# 升级 pip 到最新版\nRUN pip install --upgrade pip\n\n# 新增 gunicorn 安装，提升并发和并行能力\nRUN pip install --no-cache-dir akshare fastapi uvicorn gunicorn -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com  --upgrade\nRUN pip install --no-cache-dir aktools -i https://pypi.org/simple --upgrade\n\n# 设置工作目录方便启动\nENV APP_HOME=/usr/local/lib/python3.14/site-packages/aktools\nWORKDIR $APP_HOME\n\n# 默认启动 gunicorn 服务\nCMD [\"gunicorn\", \"--bind\", \"0.0.0.0:8080\", \"main:app\", \"-k\", \"uvicorn.workers.UvicornWorker\"]\n"
  },
  {
    "path": "Dockerfile-Jupyter",
    "content": "# 升级到 Python 3.13.x 提高 20% 以上性能\nFROM python:3.14-bullseye\n\n# 设定时区\nENV TZ=Asia/Shanghai\nRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone\n\n# RUN pip install akshare jupyterlab -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com  --upgrade\nRUN pip install --no-cache-dir jupyterlab scikit-learn scipy pandas aktools akshare\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019-2026 Albert King\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "**资源分享**：对于想了解更多财经数据与量化投研的小伙伴，推荐一个专注于财经数据和量化研究的知识社区。\n该社区提供相关文档和视频学习资源，汇集了各类财经数据源和量化投研工具的使用经验。\n有兴趣深入学习的朋友可点此[了解更多](https://t.zsxq.com/ZCxUG)，也推荐大家关注微信公众号【数据科学实战】。\n\n**重磅推荐**：AKQuant 是一款专为 **量化投研 (Quantitative Research)** 打造的高性能量化回测框架。它以 Rust 铸造极速撮合内核，\n以 Python 链接数据与 AI 生态，旨在为量化投资者提供可靠高效的量化投研解决方案。参见[AKQuant](https://github.com/akfamily/akquant)\n\n**工具推荐**：期魔方是一款本地化期货量化分析工具，适合数据分析爱好者使用。无需复杂部署，支持数据分析和机器学习功能，研究功能免费开放。\n如需了解更多信息可访问[期魔方](https://qmfquant.com)。\n\n![AKShare Logo](https://github.com/akfamily/akshare/blob/main/assets/images/akshare_logo.jpg)\n\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/akshare.svg)](https://pypi.org/project/akshare/)\n[![PyPI](https://img.shields.io/pypi/v/akshare.svg)](https://pypi.org/project/akshare/)\n[![PyPI Downloads](https://static.pepy.tech/personalized-badge/akshare?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/akshare)\n[![Documentation Status](https://readthedocs.org/projects/akshare/badge/?version=latest)](https://akshare.readthedocs.io/?badge=latest)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![akshare](https://img.shields.io/badge/Data%20Science-AKShare-green)](https://github.com/akfamily/akshare)\n[![Actions Status](https://github.com/akfamily/akshare/actions/workflows/release_and_deploy.yml/badge.svg)](https://github.com/akfamily/akshare/actions)\n[![MIT Licence](https://img.shields.io/badge/license-MIT-blue)](https://github.com/akfamily/akshare/blob/main/LICENSE)\n[![](https://img.shields.io/github/forks/jindaxiang/akshare)](https://github.com/akfamily/akshare)\n[![](https://img.shields.io/github/stars/jindaxiang/akshare)](https://github.com/akfamily/akshare)\n[![](https://img.shields.io/github/issues/jindaxiang/akshare)](https://github.com/akfamily/akshare)\n[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)\n\n## Overview\n\n[AKShare](https://github.com/akfamily/akshare) requires Python(64 bit) 3.9 or higher and\naims to simplify the process of fetching financial data.\n\n**Write less, get more!**\n\n- Documentation: [中文文档](https://akshare.akfamily.xyz/)\n\n## Installation\n\n### General\n\n```shell\npip install akshare --upgrade\n```\n\n### China\n\n```shell\npip install akshare -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com  --upgrade\n```\n\n### PR\n\nPlease check out [Documentation](https://akshare.akfamily.xyz/contributing.html) if you\nwant to contribute to AKShare\n\n### Docker\n\n#### Pull images\n\n```shell\ndocker pull registry.cn-shanghai.aliyuncs.com/akfamily/aktools:jupyter\n```\n\n#### Run Container\n\n```shell\ndocker run -it registry.cn-shanghai.aliyuncs.com/akfamily/aktools:jupyter python\n```\n\n#### Test\n\n```python\nimport akshare as ak\n\nprint(ak.__version__)\n```\n\n## Usage\n\n### Data\n\nCode:\n\n```python\nimport akshare as ak\n\nstock_zh_a_hist_df = ak.stock_zh_a_hist(symbol=\"000001\", period=\"daily\", start_date=\"20170301\", end_date='20231022', adjust=\"\")\nprint(stock_zh_a_hist_df)\n```\n\nOutput:\n\n```\n      日期          开盘   收盘    最高  ...  振幅   涨跌幅  涨跌额  换手率\n0     2017-03-01   9.49   9.49   9.55  ...  0.84  0.11  0.01  0.21\n1     2017-03-02   9.51   9.43   9.54  ...  1.26 -0.63 -0.06  0.24\n2     2017-03-03   9.41   9.40   9.43  ...  0.74 -0.32 -0.03  0.20\n3     2017-03-06   9.40   9.45   9.46  ...  0.74  0.53  0.05  0.24\n4     2017-03-07   9.44   9.45   9.46  ...  0.63  0.00  0.00  0.17\n          ...    ...    ...    ...  ...   ...   ...   ...   ...\n1610  2023-10-16  11.00  11.01  11.03  ...  0.73  0.09  0.01  0.26\n1611  2023-10-17  11.01  11.02  11.05  ...  0.82  0.09  0.01  0.25\n1612  2023-10-18  10.99  10.95  11.02  ...  1.00 -0.64 -0.07  0.34\n1613  2023-10-19  10.91  10.60  10.92  ...  3.01 -3.20 -0.35  0.61\n1614  2023-10-20  10.55  10.60  10.67  ...  1.51  0.00  0.00  0.27\n[1615 rows x 11 columns]\n```\n\n### Plot\n\nCode:\n\n```python\nimport akshare as ak\nimport mplfinance as mpf  # Please install mplfinance as follows: pip install mplfinance\n\nstock_us_daily_df = ak.stock_us_daily(symbol=\"AAPL\", adjust=\"qfq\")\nstock_us_daily_df = stock_us_daily_df.set_index([\"date\"])\nstock_us_daily_df = stock_us_daily_df[\"2020-04-01\": \"2020-04-29\"]\nmpf.plot(stock_us_daily_df, type=\"candle\", mav=(3, 6, 9), volume=True, show_nontrading=False)\n```\n\nOutput:\n\n![KLine](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/home/AAPL_candle.png)\n\n## Features\n\n- **Easy of use**: Just one line code to fetch the data;\n- **Extensible**: Easy to customize your own code with other application;\n- **Powerful**: Python ecosystem.\n\n## Tutorials\n\n1. [Overview](https://akshare.akfamily.xyz/introduction.html)\n2. [Installation](https://akshare.akfamily.xyz/installation.html)\n3. [Tutorial](https://akshare.akfamily.xyz/tutorial.html)\n4. [Data Dict](https://akshare.akfamily.xyz/data/index.html)\n5. [Subjects](https://akshare.akfamily.xyz/topic/index.html)\n\n## Contribution\n\n[AKShare](https://github.com/akfamily/akshare) is still under developing, feel free to open issues and pull requests:\n\n- Report or fix bugs\n- Require or publish interface\n- Write or fix documentation\n- Add test cases\n\n> Notice: We use [Ruff](https://github.com/astral-sh/ruff) to format the code\n\n## Statement\n\n1. All data provided by [AKShare](https://github.com/akfamily/akshare) is just for academic research purpose;\n2. The data provided by [AKShare](https://github.com/akfamily/akshare) is for reference only and does not constitute any investment proposal;\n3. Any investor based on [AKShare](https://github.com/akfamily/akshare) research should pay more attention to data risk;\n4. [AKShare](https://github.com/akfamily/akshare) will insist on providing open-source financial data;\n5. Based on some uncontrollable factors, some data interfaces in [AKShare](https://github.com/akfamily/akshare) may be removed;\n6. Please follow the relevant open-source protocol used by [AKShare](https://github.com/akfamily/akshare);\n7. Provide HTTP API for the person who uses other program language: [AKTools](https://aktools.readthedocs.io/).\n\n## Show your style\n\nUse the badge in your project's README.md:\n\n```markdown\n[![Data: akshare](https://img.shields.io/badge/Data%20Science-AKShare-green)](https://github.com/akfamily/akshare)\n```\n\nUsing the badge in README.rst:\n\n```\n.. image:: https://img.shields.io/badge/Data%20Science-AKShare-green\n    :target: https://github.com/akfamily/akshare\n```\n\nLooks like this:\n\n[![Data: akshare](https://img.shields.io/badge/Data%20Science-AKShare-green)](https://github.com/akfamily/akshare)\n\n## Citation\n\nPlease use this **bibtex** if you want to cite this repository in your publications:\n\n```markdown\n@misc{akshare,\n    author = {Albert King and Yaojie Zhang},\n    title = {AKShare},\n    year = {2022},\n    publisher = {GitHub},\n    journal = {GitHub repository},\n    howpublished = {\\url{https://github.com/akfamily/akshare}},\n}\n```\n\n## Acknowledgement\n\nSpecial thanks [FuShare](https://github.com/LowinLi/fushare) for the opportunity of learning from the project;\n\nSpecial thanks [TuShare](https://github.com/waditu/tushare) for the opportunity of learning from the project;\n\nThanks for the data provided by [东方财富网站](http://data.eastmoney.com);\n\nThanks for the data provided by [新浪财经网站](https://finance.sina.com.cn);\n\nThanks for the data provided by [金十数据网站](https://www.jin10.com/);\n\nThanks for the data provided by [生意社网站](http://www.100ppi.com/);\n\nThanks for the data provided by [中国银行间市场交易商协会网站](http://www.nafmii.org.cn/);\n\nThanks for the data provided by [99期货网站](http://www.99qh.com/);\n\nThanks for the data provided by [中国外汇交易中心暨全国银行间同业拆借中心网站](http://www.chinamoney.com.cn/chinese/);\n\nThanks for the data provided by [和讯财经网站](http://www.hexun.com/);\n\nThanks for the data provided by [DACHENG-XIU 网站](https://dachxiu.chicagobooth.edu/);\n\nThanks for the data provided by [上海证券交易所网站](http://www.sse.com.cn/assortment/options/price/);\n\nThanks for the data provided by [深证证券交易所网站](http://www.szse.cn/);\n\nThanks for the data provided by [北京证券交易所网站](http://www.bse.cn/);\n\nThanks for the data provided by [中国金融期货交易所网站](http://www.cffex.com.cn/);\n\nThanks for the data provided by [上海期货交易所网站](http://www.shfe.com.cn/);\n\nThanks for the data provided by [大连商品交易所网站](http://www.dce.com.cn/);\n\nThanks for the data provided by [郑州商品交易所网站](http://www.czce.com.cn/);\n\nThanks for the data provided by [上海国际能源交易中心网站](http://www.ine.com.cn/);\n\nThanks for the data provided by [Timeanddate 网站](https://www.timeanddate.com/);\n\nThanks for the data provided by [河北省空气质量预报信息发布系统网站](http://110.249.223.67/publish/);\n\nThanks for the data provided by [Economic Policy Uncertainty 网站](http://www.nanhua.net/nhzc/varietytrend.html);\n\nThanks for the data provided by [申万指数网站](http://www.swsindex.com/idx0120.aspx?columnid=8832);\n\nThanks for the data provided by [真气网网站](https://www.zq12369.com/);\n\nThanks for the data provided by [财富网站](http://www.fortunechina.com/);\n\nThanks for the data provided by [中国证券投资基金业协会网站](http://gs.amac.org.cn/);\n\nThanks for the data provided by [Expatistan 网站](https://www.expatistan.com/cost-of-living);\n\nThanks for the data provided by [北京市碳排放权电子交易平台网站](https://www.bjets.com.cn/article/jyxx/);\n\nThanks for the data provided by [国家金融与发展实验室网站](http://www.nifd.cn/);\n\nThanks for the data provided by [义乌小商品指数网站](http://www.ywindex.com/Home/Product/index/);\n\nThanks for the data provided by [百度迁徙网站](https://qianxi.baidu.com/?from=shoubai#city=0);\n\nThanks for the data provided by [思知网站](https://www.ownthink.com/);\n\nThanks for the data provided by [Currencyscoop 网站](https://currencyscoop.com/);\n\nThanks for the data provided by [新加坡交易所网站](https://www.sgx.com/zh-hans/research-education/derivatives);\n"
  },
  {
    "path": "akshare/__init__.py",
    "content": "\"\"\"\nAKShare 是基于 Python 的开源财经数据接口库，实现对股票、期货、期权、基金、债券、外汇、加密货币等金\n融产品的量价数据，基本面数据和另类数据从数据采集，数据清洗到数据下载的工具，满足金融数据科学\n家，数据科学爱好者在数据获取方面的需求。它的特点是利用 AKShare 获取的是基于可信任数据源\n发布的原始数据，广大数据科学家可以利用原始数据进行再加工，从而得出科学的结论。如果您使用其他编程语言或软件\n请使用 AKTools 来快速搭建 AKShare HTTP API 接口。\n\"\"\"\n\n\"\"\"\n版本更新记录:\n0.1.13\n更新所有基于 fushare 的接口\n0.1.14\n更新 requirements.txt 文件\n0.1.15\n自动安装所需要的 packages\n0.1.16\n修正部分函数命名\n0.1.17\n更新版本号自动管理\n0.1.18\n更新说明文档\n0.1.19\n修正 cot.py 中请求错误\n0.1.20\n修正 __doc__\n0.1.21\n修复 __doc__\n0.1.22\n修复命名和绘图\n0.1.23\n修复错误机制\n0.1.24\n增加奇货可查所有指数数据获取接口\n0.1.25\n修复 qhck 接口\n0.1.26\n修复代码格式问题\n0.1.27\n修复说明格式问题\n0.1.28\n更新说明文档\n0.1.29\n规范说明文档格式\n0.1.30\n规范说明文档格式\n0.1.31\n规范 cot.py 函数说明\n0.1.32\nupdate futures_basis.py\n0.1.33\n增加奇货可查数据三个接口:\nget_qhkc_index, get_qhkc_index_trend, get_qhkc_index_profit_loss\n使用方法请 help(get_qhkc_index) 查看\n0.1.34\n增加奇货可查-资金数据三个接口:\nget_qhkc_fund_position_change, get_qhkc_fund_bs, get_qhkc_fund_position\n使用方法请 help(get_qhkc_fund_position_change) 查看\n0.1.35\n增加奇货可查-工具-外盘比价接口:\nget_qhkc_tool_foreign\n使用方法请 help(get_qhkc_tool_foreign) 查看\n0.1.36\n增加奇货可查-工具-各地区经济数据接口:\nget_qhkc_tool_gdp\n使用方法请 help(get_qhkc_tool_gdp) 查看\n0.1.37\n增加中国银行间市场交易商协会-债券接口\nget_bond_bank\n使用方法请 help(get_bond_bank) 查看\n0.1.38\n修正\n0.1.39\n模块化处理\n0.1.40\n统一接口函数参数 start --> start_day; end --> end_day\n0.1.41\n更新大连商品交易所-苯乙烯-EB品种\n0.1.42\n更新上海期货交易所-上海国际能源交易中心-20号胶-NR品种\n更新上海期货交易所-不锈钢-SS品种\n0.1.43\n修复 example --> qhkc_api.py 函数调用\n0.1.44\n修复 example --> daily_run.py 函数调用\n0.1.45\n修复 akdocker.md 函数接口调用说明和感谢单位\n0.1.46\n修复 akdocker.md 图片显示\n0.1.47\n修复 akdocker.md 增加说明部分\n0.1.48\n更新大连商品交易所-粳米-RR品种\n0.1.49\n增加智道智科-私募指数数据接口\n使用方法请 help(get_zdzk_fund_index) 查看\n0.1.50\n更新 akdocker.md 文件\n0.1.51\n更新官方文档: https://akshare.akfamily.xyz\n0.1.52\n增加量化策略和量化平台板块\n0.1.53\n增加期货品种列表和名词解释\n0.1.54\n修改 AkShare的初衷, 增加管理期货策略指数\n0.1.55\n新增 99 期货库存数据接口\n0.1.56\n修复 99 期货库存数据接口\n0.1.57\n更新 md 文件数据接口\n0.1.58\n更新 md 文件数据接口\n0.1.59\n更新 md 文件数据接口\n0.1.60\n更新 致谢部分, 申明借鉴和引用的 package\n0.1.61\n更新说明文档\n0.1.62\n提供英为财情-股票指数-全球股指与期货指数数据接口\nhttps://cn.investing.com/indices/\n0.1.63\n更新说明文档-致谢英为财情\n0.1.64\n更新 get_country_index 返回格式为日期索引\n0.1.65\n更新 get_country_index 返回格式数据开盘, 收盘, 高, 低为浮点型\n0.1.66\n提供英为财情-股票指数-全球股指与期货指数数据接口\nhttps://cn.investing.com/rates-bonds/\n新增 get_country_bond 返回格式数据开盘, 收盘, 高, 低为浮点型\n0.1.67\n更新说明文档-私募指数数据说明\n0.1.68\n更新说明文档-私募指数数据说明-增加图片\n0.1.69\n更新说明文档-债券说明格式调整\n0.1.70\n更新大商所, 郑商所商品期权数据接口\n0.1.71\n更新大商所, 郑商所, 上期所商品期权数据接口\n0.1.72\n修改大商所, 郑商所, 上期所商品期权数据接口\n增加函数说明\n更新说明文档-期权部分\n0.1.73\n更新说明文档-期权部分\n0.1.74\n更新说明文档格式调整\n0.1.75\n新增外汇接口, 银行间债券市场行情数据接口\n0.1.76\n更新说明文档\n0.1.77\n新增全球期货历史数据查询接口\n0.1.78\n新增全球宏观数据-中国宏观数据\n年度、月度CPI数据, 年度M2数据\n0.1.79\n更新说明文档\n0.1.80\n更新说明文档-刷新\n0.1.81\n新增全球宏观数据-中国宏观数据\n中国年度PPI数据\n中国年度PMI数据\n中国年度GDP数据\n中国年度财新PMI数据\n中国外汇储备数据\n中国电力能源数据\n中国年度非制造业PMI数据\n人民币中间报价汇率\n0.1.82\n新增全球宏观数据-美国宏观数据\n美联储利率决议报告\n美国非农就业人数报告\n美国失业率报告\n美国EIA原油库存报告\n0.1.83\n更新说明文档\n0.1.84\n新增全球宏观数据-美国宏观数据\n美国初请失业金人数报告\n美国核心PCE物价指数年率报告\n美国CPI月率报告\n美联储劳动力市场状况指数报告\n美国ADP就业人数报告\n美国国内生产总值(GDP)报告\n美国原油产量报告\n新增全球宏观数据-欧洲宏观数据\n欧洲央行决议报告\n新增全球宏观数据-机构宏观数据\n全球最大黄金ETF—SPDR Gold Trust持仓报告\n全球最大白银ETF--iShares Silver Trust持仓报告\n欧佩克报告\n0.1.85\n新增期货-仓单有效期接口\n0.1.86\n更新说明文档\n0.1.87\n新增和讯财经-企业社会责任数据接口\n0.1.88\n更新说明文档\n0.1.89\n更新requirements.txt\n0.1.90\n更新setup.py\n0.1.91\n新增和讯财经-中国概念股行情及日频历史数据接口\n0.1.92\n更新说明文档\n0.1.93\n新增交易法门-套利工具-跨期价差(自由价差)数据接口\n0.1.94\n新增生意社-商品与期货-现期图数据接口\n新增西本新干线-指数数据\n0.1.95\n新增新浪财经-期货-实时数据接口\n0.1.96\n修正新浪财经-期货-实时数据接口-返回 current_price 字段为实时数据\n0.1.97\n修正新浪财经-期货-实时数据接口-返回 current_price 和 ask_price 字段为实时数据\n0.1.98\n修正版本更新错误\n0.1.99\n增加自动安装 pillow\n0.2.1\n增加港股当日(时点)行情数据和历史数据(前复权和后复权因子)\n0.2.2\n增加美股当日(时点)行情数据和历史数据(前复权因子)\n0.2.3\n增加金融期权\n0.2.4\n增加加密货币行情接口\n0.2.5\n增加 AKShare 接口导图\n0.2.6\n更新港股数据接口和说明文档\n0.2.7\n更新 qhkc_web 接口注释和说明文档\n0.2.8\n更新说明文档\n0.2.9\n更新A+H股数据实时行情数据和历史行情数据(后复权)\n0.2.10\n更新说明文档\n0.2.11\n更新说明文档\n0.2.12\n增加A股实时行情数据和历史行情数据\n0.2.13\n统一股票接口命名\n0.2.14\n统一股票接口命名, 去除 get\n0.2.15\n增加科创板实时行情数据和历史行情数据\n0.2.16\n增加银保监分局本级行政处罚数据\n0.2.17\n更新说明文档\n0.2.18\n修正银保监分局本级行政处罚数据接口字段命名\n0.2.19\n增加 Nodejs 安装说明\n0.2.20\n增加 Realized Library 接口\n0.2.21\n更新说明文档\n0.2.22\n更新说明文档\n0.2.23\n修正银保监分局本级行政处罚数据接口反扒升级-修改完成\n0.2.24\n增加FF多因子模型数据接口\n0.2.25\n更新说明文档\n0.2.26\n修正期货-实时行情: 接口命名, 字段补充及限制访问速度\n0.2.27\n增加新浪-外盘期货实时行情数据接口\n0.2.28\n修正新浪-外盘期货实时行情数据引入\n更新文档\n0.2.29\n更新文档\n0.2.30\n监管-银保监: 反扒措施在变化, 更新接口\n修正期货-国内-实时行情接口订阅问题\n0.2.31\n修正期货-国内-金融期货实时行情接口订阅问题\n0.2.32\n更新说明文档\n0.2.33\n更新说明文档-期货-外盘\n0.2.34\n新增新浪-指数实时行情和历史行情接口\n0.2.35\n新增新浪-指数和A股实时行情列表获取问题\n0.2.36\n新增腾讯财经-A股分笔行情历史数据\n0.2.37\n新增金十数据-实时监控接口\n0.2.38\n更新说明文档\n0.2.39\n更新说明文档目录结构\n0.2.40\n更新专题板块\n0.2.41\n更新说明文件\n0.2.42\n更新 MindMap\n0.2.43\n重构说明文档-模块化处理, 将 github 说明文档和 docs 在线文档分开处理\n重构私募指数接口\n0.2.44\n增加日出和日落模块\n0.2.45\n增加河北空气指数数据\n0.2.46\n更新 requirements.txt\n0.2.47\n添加初始化文件\n0.2.48\n添加 websocket-client\n0.2.49\n南华期货-南华商品指数\n0.2.50\n修正英为财情-指数板块的成交量显示问题\n0.2.51\n消除部分警告信息\n0.2.52\n基差数据缺失错误提示修正\n0.2.53\n统一南华期货-商品指数历史走势-收益率指数\n新增南华期货-商品指数历史走势-价格指数\n新增南华期货-商品指数历史走势-波动率指数\n0.2.54\n添加 numpy 依赖\n0.2.55\n更新已实现波动率的说明文档\n统一 ff_crr --> article_ff_crr\n0.2.56\n新增经济政策不确定性(EPU)数据接口\n更新说明文档\n修改示例说明\n0.2.57\n修改 air_hebei 接口, 默认返回全部城市\n0.2.58\n新增微博指数\n0.2.59\n增加西本新干线说明文档\n0.2.60\n新增百度指数\n0.2.61\n修正河北空气数据代码\n0.2.62\n新增百度搜索指数\n新增百度资讯指数\n新增百度媒体指数\n0.2.63\n更新指数-legend代码\n0.2.64\nfix pillow>=6.2.0\n0.2.65\n新增谷歌指数\n0.2.66\n修正南华指数URL硬编码问题\n0.2.67\n修正 get_futures_index 函数中上海期货交易所\nCU 出现 cuefp 数据导致指数合成异常的问题\n0.2.68\n降低 Python 版本要求\n0.2.69\n降低python版本要求到 Python3.7.1\n0.2.70\n适配 VNPY 使用\n0.2.71\n交易法门数据接口\n0.2.72\n申万行业一级指数-实时\n0.2.73\n更新纯碱期货数据接口\n0.2.74\n新增AQI空气质量数据接口\n0.2.75\n新增申万一级指数接口\n0.2.76\n统一交易法门登录和数据获取接口\n0.2.77\n清除冗余函数\n0.2.78\nPython 降级\n0.2.79\nPython 降级\n0.2.80\nPython 3.6\n0.2.81\nhtml5lib\n0.2.82\nwebsockets-8.1\n0.2.83\n修复 weibo_index 函数日期格式问题\n0.2.84\n修复 baidu_index 接口\n0.2.85\n临时修复 baidu_index 接口\n0.2.86\nlxml 降级\n0.2.87\nlxml 降级\n更新安装时的错误处理\n0.2.88\npypinyin 降级\n0.2.89\n全国空气质量数据数据格式规范为数值型\n0.2.90\n更新注册仓单的产品参数和异常错误\n0.2.91\n世界五百强公司排名接口\n0.2.92\n更新中国债券市场行情数据接口\n0.2.93\n增加自动测试模型\n0.2.94\n增加私募基金管理人信息公示接口\n0.2.95\n增加中国证券投资基金业协会-信息公示\n0.2.96\n修复交易法门登录验证码\n由于交易法门-数据部分权限缘故, 需要注册后方可使用\n0.2.97\n更新说明文档\n0.2.98\n增加甲醇期权和PTA期权\n0.2.99\n更新外汇数据接口, 规范格式\n0.3.0\n猫眼电影实时票房\n0.3.1\n更新说明文档\n0.3.2\n更新说明文档\n0.3.3\n更新外盘期货行情订阅时, 统一字段名称与网页端一致\n0.3.4\n新增能源-碳排放权数据\n0.3.5\n新增世界各大城市生活成本数据\n0.3.6\n商品现货价格指数\n0.3.7\n修复百度指数日期问题\n0.3.8\n新增中国宏观数据接口和文档说明\n0.3.9\n新增中国宏观杠杆率数据\n0.3.10\n修改金融期权数据接口\n0.3.11\n修复实时票房数据接口\n0.3.12\n新增新浪主力连续接口\n0.3.13\n新增新浪主力连续列表\n0.3.14\n中国倒闭公司名单\n0.3.15\n中国独角兽名单\n中国千里马名单\n0.3.16\n东方财富-机构调研\n0.3.17\n东方财富网-数据中心-特色数据-机构调研\n机构调研统计\n机构调研详细\n0.3.18\n修复自动测试接口\n0.3.19\n修复融资融券字段名匹配问题\n增加东方财富网-数据中心-特色数据-股票质押\n0.3.20\n东方财富网-数据中心-特色数据-股权质押\n东方财富网-数据中心-特色数据-股权质押-股权质押市场概况: https://data.eastmoney.com/gpzy/marketProfile.aspx\n东方财富网-数据中心-特色数据-股权质押-上市公司质押比例: https://data.eastmoney.com/gpzy/pledgeRatio.aspx\n东方财富网-数据中心-特色数据-股权质押-重要股东股权质押明细: https://data.eastmoney.com/gpzy/pledgeDetail.aspx\n东方财富网-数据中心-特色数据-股权质押-质押机构分布统计-证券公司: https://data.eastmoney.com/gpzy/distributeStatistics.aspx\n东方财富网-数据中心-特色数据-股权质押-质押机构分布统计-银行: https://data.eastmoney.com/gpzy/distributeStatistics.aspx\n东方财富网-数据中心-特色数据-股权质押-行业数据: https://data.eastmoney.com/gpzy/industryData.aspx\n0.3.21\n东方财富网-数据中心-特色数据-商誉\n东方财富网-数据中心-特色数据-商誉-A股商誉市场概况: https://data.eastmoney.com/sy/scgk.html\n东方财富网-数据中心-特色数据-商誉-商誉减值预期明细: https://data.eastmoney.com/sy/yqlist.html\n东方财富网-数据中心-特色数据-商誉-个股商誉减值明细: https://data.eastmoney.com/sy/jzlist.html\n东方财富网-数据中心-特色数据-商誉-个股商誉明细: https://data.eastmoney.com/sy/list.html\n东方财富网-数据中心-特色数据-商誉-行业商誉: https://data.eastmoney.com/sy/hylist.html\n0.3.22\n期货规则-交易日历数据表\n更新2020交易日历数据\n0.3.23\n东方财富网-数据中心-特色数据-股票账户统计: https://data.eastmoney.com/cjsj/gpkhsj.html\n0.3.24\n移除-交易法门系列老函数\n因为交易法门网站需要会员登录后访问数据\n0.3.25\n增加-交易法门-工具-套利分析接口\n增加-交易法门-工具-交易规则接口\n0.3.26\n增加-交易法门-数据-农产品-豆油\n增加-交易法门-数据-黑色系-焦煤\n增加-交易法门-工具-持仓分析-期货分析\n增加-交易法门-工具-持仓分析-持仓分析\n0.3.27\n交易法门-说明文档\n0.3.28\n增加-股票指数-股票指数成份股接口\n0.3.29\n增加-股票指数-股票指数成份股接口-代码注释\n0.3.30\n增加-义乌小商品指数\n0.3.31\n修复-银保监分局本级行政处罚数据接口\n接口重命名为: bank_fjcf_table_detail\n0.3.32\n新增-中国电煤价格指数\n0.3.33\n修复-银保监分局本级行政处罚数据接口-20200108新增字段后适应\n0.3.34\n增加-交易法门-工具-期限分析-基差日报\n增加-交易法门-工具-期限分析-基差分析\n增加-交易法门-工具-期限分析-期限结构\n增加-交易法门-工具-期限分析-价格季节性\n0.3.35\n更新说明文档\n0.3.36\n# 交易法门-工具-仓单分析\n增加-交易法门-工具-仓单分析-仓单日报\n增加-交易法门-工具-仓单分析-仓单查询\n增加-交易法门-工具-仓单分析-虚实盘比查询\n# 交易法门-工具-资讯汇总\n增加-交易法门-工具-资讯汇总-研报查询\n增加-交易法门-工具-资讯汇总-交易日历\n# 交易法门-工具-资金分析\n增加-交易法门-工具-资金分析-资金流向\n0.3.37\n更新说明文档\n0.3.38\n修改-交易法门-工具-资金分析-资金流向函数的字段和说明文档\n0.3.39\n金十数据中心-经济指标-央行利率-主要央行利率\n美联储利率决议报告\n欧洲央行决议报告\n新西兰联储决议报告\n中国央行决议报告\n瑞士央行决议报告\n英国央行决议报告\n澳洲联储决议报告\n日本央行决议报告\n俄罗斯央行决议报告\n印度央行决议报告\n巴西央行决议报告\nmacro_euro_gdp_yoy #  金十数据中心-经济指标-欧元区-国民经济运行状况-经济状况-欧元区季度GDP年率报告\nmacro_euro_cpi_mom #  金十数据中心-经济指标-欧元区-国民经济运行状况-物价水平-欧元区CPI月率报告\nmacro_euro_cpi_yoy #  金十数据中心-经济指标-欧元区-国民经济运行状况-物价水平-欧元区CPI年率报告\nmacro_euro_ppi_mom #  金十数据中心-经济指标-欧元区-国民经济运行状况-物价水平-欧元区PPI月率报告\nmacro_euro_retail_sales_mom #  金十数据中心-经济指标-欧元区-国民经济运行状况-物价水平-欧元区零售销售月率报告\nmacro_euro_employment_change_qoq #  金十数据中心-经济指标-欧元区-国民经济运行状况-劳动力市场-欧元区季调后就业人数季率报告\nmacro_euro_unemployment_rate_mom #  金十数据中心-经济指标-欧元区-国民经济运行状况-劳动力市场-欧元区失业率报告\nmacro_euro_trade_balance #  金十数据中心-经济指标-欧元区-贸易状况-欧元区未季调贸易帐报告\nmacro_euro_current_account_mom #  金十数据中心-经济指标-欧元区-贸易状况-欧元区经常帐报告\nmacro_euro_industrial_production_mom #  金十数据中心-经济指标-欧元区-产业指标-欧元区工业产出月率报告\nmacro_euro_manufacturing_pmi #  金十数据中心-经济指标-欧元区-产业指标-欧元区制造业PMI初值报告\nmacro_euro_services_pmi #  金十数据中心-经济指标-欧元区-产业指标-欧元区服务业PMI终值报告\nmacro_euro_zew_economic_sentiment #  金十数据中心-经济指标-欧元区-领先指标-欧元区ZEW经济景气指数报告\nmacro_euro_sentix_investor_confidence #  金十数据中心-经济指标-欧元区-领先指标-欧元区Sentix投资者信心指数报告\n0.3.40\n修复-欧洲央行决议报告\n0.3.41\n增加-东方财富网-经济数据-银行间拆借利率\n0.3.42\n# 中国\nmacro_china_gdp_yearly  # 金十数据中心-经济指标-中国-国民经济运行状况-经济状况-中国GDP年率报告\nmacro_china_cpi_yearly  # 金十数据中心-经济指标-中国-国民经济运行状况-物价水平-中国CPI年率报告\nmacro_china_cpi_monthly  # 金十数据中心-经济指标-中国-国民经济运行状况-物价水平-中国CPI月率报告\nmacro_china_ppi_yearly  # 金十数据中心-经济指标-中国-国民经济运行状况-物价水平-中国PPI年率报告\nmacro_china_exports_yoy  # 金十数据中心-经济指标-中国-贸易状况-以美元计算出口年率报告\nmacro_china_imports_yoy  # 金十数据中心-经济指标-中国-贸易状况-以美元计算进口年率\nmacro_china_trade_balance  # 金十数据中心-经济指标-中国-贸易状况-以美元计算贸易帐(亿美元)\nmacro_china_industrial_production_yoy  # 金十数据中心-经济指标-中国-产业指标-规模以上工业增加值年率\nmacro_china_pmi_yearly  # 金十数据中心-经济指标-中国-产业指标-官方制造业PMI\nmacro_china_cx_pmi_yearly  # 金十数据中心-经济指标-中国-产业指标-财新制造业PMI终值\nmacro_china_cx_services_pmi_yearly  # 金十数据中心-经济指标-中国-产业指标-财新服务业PMI\nmacro_china_non_man_pmi  # 金十数据中心-经济指标-中国-产业指标-中国官方非制造业PMI\nmacro_china_fx_reserves_yearly  # 金十数据中心-经济指标-中国-金融指标-外汇储备(亿美元)\nmacro_china_m2_yearly  # 金十数据中心-经济指标-中国-金融指标-M2货币供应年率\nmacro_china_shibor_all  # 金十数据中心-经济指标-中国-金融指标-上海银行业同业拆借报告\nmacro_china_hk_market_info  # 金十数据中心-经济指标-中国-金融指标-人民币香港银行同业拆息\nmacro_china_daily_energy  # 金十数据中心-经济指标-中国-其他-中国日度沿海六大电库存数据\nmacro_china_rmb  # 金十数据中心-经济指标-中国-其他-中国人民币汇率中间价报告\nmacro_china_market_margin_sz  # 金十数据中心-经济指标-中国-其他-深圳融资融券报告\nmacro_china_market_margin_sh  # 金十数据中心-经济指标-中国-其他-上海融资融券报告\nmacro_china_au_report  # 金十数据中心-经济指标-中国-其他-上海黄金交易所报告\nmacro_china_ctci  # 发改委-中国电煤价格指数-全国综合电煤价格指数\nmacro_china_ctci_detail  # 发改委-中国电煤价格指数-各价区电煤价格指数\nmacro_china_ctci_detail_hist  # 发改委-中国电煤价格指数-历史电煤价格指数\nmacro_china_money_supply  # 中国货币供应量\n# 美国\nmacro_usa_gdp_monthly  # 金十数据中心-经济指标-美国-经济状况-美国GDP\nmacro_usa_cpi_monthly  # 金十数据中心-经济指标-美国-物价水平-美国CPI月率报告\nmacro_usa_core_cpi_monthly  # 金十数据中心-经济指标-美国-物价水平-美国核心CPI月率报告\nmacro_usa_personal_spending  # 金十数据中心-经济指标-美国-物价水平-美国个人支出月率报告\nmacro_usa_retail_sales  # 金十数据中心-经济指标-美国-物价水平-美国零售销售月率报告\nmacro_usa_import_price  # 金十数据中心-经济指标-美国-物价水平-美国进口物价指数报告\nmacro_usa_export_price  # 金十数据中心-经济指标-美国-物价水平-美国出口价格指数报告\nmacro_usa_lmci  # 金十数据中心-经济指标-美国-劳动力市场-LMCI\nmacro_usa_unemployment_rate  # 金十数据中心-经济指标-美国-劳动力市场-失业率-美国失业率报告\nmacro_usa_job_cuts  # 金十数据中心-经济指标-美国-劳动力市场-失业率-美国挑战者企业裁员人数报告\nmacro_usa_non_farm  # 金十数据中心-经济指标-美国-劳动力市场-就业人口-美国非农就业人数报告\nmacro_usa_adp_employment  # 金十数据中心-经济指标-美国-劳动力市场-就业人口-美国ADP就业人数报告\nmacro_usa_core_pce_price  # 金十数据中心-经济指标-美国-劳动力市场-消费者收入与支出-美国核心PCE物价指数年率报告\nmacro_usa_real_consumer_spending  # 金十数据中心-经济指标-美国-劳动力市场-消费者收入与支出-美国实际个人消费支出季率初值报告\nmacro_usa_trade_balance  # 金十数据中心-经济指标-美国-贸易状况-美国贸易帐报告\nmacro_usa_current_account  # 金十数据中心-经济指标-美国-贸易状况-美国经常帐报告\nmacro_usa_rig_count  # 金十数据中心-经济指标-美国-产业指标-制造业-贝克休斯钻井报告\n# 金十数据中心-经济指标-美国-产业指标-制造业-美国个人支出月率报告\nmacro_usa_ppi  # 金十数据中心-经济指标-美国-产业指标-制造业-美国生产者物价指数(PPI)报告\nmacro_usa_core_ppi  # 金十数据中心-经济指标-美国-产业指标-制造业-美国核心生产者物价指数(PPI)报告\nmacro_usa_api_crude_stock  # 金十数据中心-经济指标-美国-产业指标-制造业-美国API原油库存报告\nmacro_usa_pmi  # 金十数据中心-经济指标-美国-产业指标-制造业-美国Markit制造业PMI初值报告\nmacro_usa_ism_pmi  # 金十数据中心-经济指标-美国-产业指标-制造业-美国ISM制造业PMI报告\nmacro_usa_nahb_house_market_index  # 金十数据中心-经济指标-美国-产业指标-房地产-美国NAHB房产市场指数报告\nmacro_usa_house_starts  # 金十数据中心-经济指标-美国-产业指标-房地产-美国新屋开工总数年化报告\nmacro_usa_new_home_sales  # 金十数据中心-经济指标-美国-产业指标-房地产-美国新屋销售总数年化报告\nmacro_usa_building_permits  # 金十数据中心-经济指标-美国-产业指标-房地产-美国营建许可总数报告\nmacro_usa_exist_home_sales  # 金十数据中心-经济指标-美国-产业指标-房地产-美国成屋销售总数年化报告\nmacro_usa_house_price_index  # 金十数据中心-经济指标-美国-产业指标-房地产-美国FHFA房价指数月率报告\nmacro_usa_spcs20 # 金十数据中心-经济指标-美国-产业指标-房地产-美国S&P/CS20座大城市房价指数年率报告\nmacro_usa_pending_home_sales  # 金十数据中心-经济指标-美国-产业指标-房地产-美国成屋签约销售指数月率报告\nmacro_usa_cb_consumer_confidence  # 金十数据中心-经济指标-美国-领先指标-美国谘商会消费者信心指数报告\nmacro_usa_nfib_small_business # 金十数据中心-经济指标-美国-领先指标-美国NFIB小型企业信心指数报告\nmacro_usa_michigan_consumer_sentiment # 金十数据中心-经济指标-美国-领先指标-美国密歇根大学消费者信心指数初值报告\nmacro_usa_eia_crude_rate  # 金十数据中心-经济指标-美国-其他-美国EIA原油库存报告\nmacro_usa_initial_jobless  # 金十数据中心-经济指标-美国-其他-美国初请失业金人数报告\nmacro_usa_crude_inner  # 金十数据中心-经济指标-美国-其他-美国原油产量报告\n0.3.43\n增加-交易法门-数据-黑色系-焦煤\n0.3.44\n更新宏观数据\nmacro_cons_gold_volume  # 全球最大黄金ETF—SPDR Gold Trust持仓报告\nmacro_cons_gold_change  # 全球最大黄金ETF—SPDR Gold Trust持仓报告\nmacro_cons_gold_amount  # 全球最大黄金ETF—SPDR Gold Trust持仓报告\nmacro_cons_silver_volume  # 全球最大白银ETF--iShares Silver Trust持仓报告\nmacro_cons_silver_change  # 全球最大白银ETF--iShares Silver Trust持仓报告\nmacro_cons_silver_amount  # 全球最大白银ETF--iShares Silver Trust持仓报告\nmacro_cons_opec_month  # 欧佩克报告-月度\n0.3.45\n增加中国证券投资基金业协会-信息公示\n# 中国证券投资基金业协会-信息公示-会员信息\namac_member_info # 中国证券投资基金业协会-信息公示-会员信息-会员机构综合查询\n# 中国证券投资基金业协会-信息公示-从业人员信息\namac_person_org_list # 中国证券投资基金业协会-信息公示-从业人员信息-基金从业人员资格注册信息\n# 中国证券投资基金业协会-信息公示-私募基金管理人公示\namac_manager_info # 中国证券投资基金业协会-信息公示-私募基金管理人公示-私募基金管理人综合查询\namac_manager_classify_info # 中国证券投资基金业协会-信息公示-私募基金管理人公示-私募基金管理人分类公示\namac_member_sub_info # 中国证券投资基金业协会-信息公示-私募基金管理人公示-证券公司私募基金子公司管理人信息公示\n# 中国证券投资基金业协会-信息公示-基金产品\namac_fund_info # 中国证券投资基金业协会-信息公示-基金产品-私募基金管理人基金产品\namac_securities_info # 中国证券投资基金业协会-信息公示-基金产品-证券公司集合资管产品公示\namac_aoin_info # 中国证券投资基金业协会-信息公示-基金产品-证券公司直投基金\namac_fund_sub_info # 中国证券投资基金业协会-信息公示-基金产品公示-证券公司私募投资基金\namac_fund_account_info # 中国证券投资基金业协会-信息公示-基金产品公示-基金公司及子公司集合资管产品公示\namac_fund_abs # 中国证券投资基金业协会-信息公示-基金产品公示-资产支持专项计划\namac_futures_info # 中国证券投资基金业协会-信息公示-基金产品公示-期货公司集合资管产品公示\n# 中国证券投资基金业协会-信息公示-诚信信息\namac_manager_cancelled_info # 中国证券投资基金业协会-信息公示-诚信信息-已注销私募基金管理人名单\n0.3.46\n更新-商品期权-菜籽粕期权接口\n修复 get_sector_futures 字段名问题\n0.3.47\n增加-商品期权-郑州商品交易所-期权-历史数据\n0.3.48\n修复 macro_cons_opec_month 接口数据更新问题\n0.3.49\n新增-交易法门-工具-仓单分析-虚实盘比日报接口\n0.3.50\n更新-说明文档\n0.3.51\n修复 macro_cons_opec_month 接口数据更新问题, 统一数据接口跟网页端统一\n修复-百度指数-由用户输入cookie来访问数据及说明文档\n0.3.52\n新增-英为财情-外汇-货币对历史数据\n0.3.53\n修复-macro_usa_rig_count-接口返回数据\n修复-rate_interbank-文档注释\n0.3.54\n新增-事件接口\n新增-事件接口新型冠状病毒-网易\n新增-事件接口新型冠状病毒-丁香园\n0.3.55\n更新-事件接口新型冠状病毒\n0.3.56\n更新-事件接口新型冠状病毒-全国疫情趋势图\n0.3.57\n更新-事件接口新型冠状病毒-分省地区\n一些细节修复\n0.3.58\n新增-财富排行榜(英文版)\n0.3.59\n新增-currency_name_code-接口\n0.3.60\n修复-财富排行榜(英文版)-索引乱序问题\n0.3.61\n修复-事件接口新型冠状病毒-hospital-接口\n0.3.62\n修复-20200203交易日问题\n0.3.63\n修复-事件接口新型冠状病毒-网易接口\n0.3.64\n修复-事件接口新型冠状病毒-丁香园接口\n0.3.65\n修复-calendar.json 问题, 感谢 fxt0706\n0.3.66\n修复-epu_index-加载问题\n0.3.67\n修复-option_commodity-json数据加载问题\n0.3.68\n更名函数 movie_board -> box_office_spot\n0.3.69\n新增-epidemic_baidu\n百度-新型冠状病毒肺炎-疫情实时大数据报告\n0.3.70\n修复-epidemic_dxy-字段问题\n0.3.71\n修复-epidemic_dxy-具体省份字段问题\n0.3.72\n新增-百度迁徙地图接口\n0.3.73\n修复文字表述\n0.3.74\n修复-epidemic_163-数据更新问题\n0.3.75\n修复-epidemic_dxy-图片显示问题\n0.3.76\n新增-stock_zh_index_daily_tx-补充新浪指数的数据缺失问题\n0.3.77\n修复-epidemic_163-数据更新问题\n0.3.78\n新增-bond_china_yield-中国债券信息网-国债及其他债券收益率曲线\n0.3.79\n修改-bond_china_yield-参数\n0.3.80\n新增-基金数据接口\n0.3.81\n新增-基金数据接口-净值\n0.3.82\n新增-小区查询\n新增-相同行程查询\n0.3.83\n新增-交易法门-工具-套利分析-FullCarry\n修改-交易法门-工具-期限分析-基差分析\n0.3.84\n新增-货币对-投机情绪报告\n0.3.85\n修复-epidemic_area_detail-增加下载进度提示\n0.3.86\n修复-epidemic_dxy-完善图片获取\n0.3.87\n新增-债券质押式回购成交明细数据\n新增-细化到地市的疫情历史数据20200123至今\n0.3.88\n新增-交易法门-工具-持仓分析-持仓季节性\n修复-epidemic_163\n0.3.89\n新增-epidemic_163-数据说明接口\n0.3.90\n修复-epidemic_dxy\n0.3.91\n修复-get_receipt-MA数值问题\n0.3.92\n新增-奇货可查接口测试\n0.3.93\n新增-奇货可查接口测试-代码补全\n0.3.94\n修复-epidemic_dxy\n0.3.95\n新增-债券-沪深债券\n新增-债券-沪深可转债\n0.3.96\n修复-baidu_search_index-异常\n0.3.97\n新增-特许经营数据\n0.3.98\n修复-get_receipt-MA数值问题条件判断\n0.3.99\n修复-air_hebei-代码格式\n0.4.1\n修复-pandas-版本降级\n0.4.2\n修复-epidemic_baidu\n0.4.3\n新增-慈善中国\n0.4.4\n新增-epidemic_history-疫情所有历史数据\n0.4.5\n完善-慈善中国-类型注解\n0.4.6\n修复-charity_china_report\n0.4.7\n新增-测试接口\n0.4.8\n修复-epidemic_hist_all\n修复-epidemic_hist_city\n修复-epidemic_hist_province\n0.4.9\n新增-option_cffex_hs300_list_sina\n新增-option_cffex_hs300_spot_sina\n新增-option_cffex_hs300_daily_sina\n新增-option_sse_list_sina\n新增-option_sse_expire_day_sina\n新增-option_sse_codes_sina\n新增-option_sse_spot_price_sina\n新增-option_sse_underlying_spot_price_sina\n新增-option_sse_greeks_sina\n新增-option_sse_minute_sina\n新增-option_sse_daily_sina\n0.4.10\n修复-金十数据websocket接口\n0.4.11\n新增-交易法门-工具-资金分析-资金流向\n新增-交易法门-工具-资金分析-沉淀资金\n新增-交易法门-工具-资金分析-资金季节性\n新增-交易法门-工具-资金分析-成交排名\n0.4.12\n新增-微博舆情报告\n0.4.13\n新增-Python3.8.1支持\n0.4.14\n修复-get_receipt-CZCE问题\n0.4.15\n修复-hf_subscribe_exchange_symbol-在Linux Python 3.8.1 报错问题\n0.4.16\n修复-get_js_dc_current\n0.4.17\n新增-知识图谱\n0.4.18: fix: use tqdm replace print hints\n0.4.19: fix: use tqdm replace print hints in energy_carbon.py and charity_china.py\n0.4.20: add: jyfm_tools_position_structure and jyfm_tools_symbol_handbook\n0.4.21: fix: macro_cons_opec_month print hints\n0.4.22: fix: add tqdm desc\n0.4.23: fix: add tqdm stock_zh_a_spot desc\n0.4.24: fix: add get_us_stock_name to get the u.s. stock name\n0.4.25: fix: upload setup.py file and set automate release and deploy\n0.4.26: fix: bond_spot_quote and docs\n0.4.27: test: automate test\n0.4.28: test: automate test\n0.4.29: feats: add currency interface\n0.4.30: fix: futures_roll_yield.py/get_roll_yield: CUefp error\n0.4.31: format: format currency.py\n0.4.32: fix: bond_china.py\n0.4.33: add: jyfm_tools_futures_arbitrage_matrix for jyfm futures\n0.4.34: fix: get_czce_rank_table history-20171228 format\n0.4.35: fix: get_czce_rank_table history-20071228 format\n0.4.36: fix: macro_cons_opec_month\n0.4.37: add: get_ine_daily to fetch SC and NR data\n0.4.38: add: futures_sgx_daily to fetch futures data from sgx\n0.4.39: refactor: migration.py/covid_19_163 interface\n0.4.40: refactor: migration.py interface\n0.4.41: fix: cot.py get_rank_sum_daily interface\n0.4.42: add: wdbank.py test\n0.4.43: add: wdbank.py dependencies\n0.4.44: add: tool github\n0.4.45: add: fund_public file and docs\n0.4.46: add: macro_china_lpr\n0.4.47: add: stock_em_analyst\n0.4.48: add: stock_comment_em\n0.4.49: add: stock_em_hsgt\n0.4.50: fix: stock_em_sy_yq_list\n0.4.51: add: stock_tfp_em\n0.4.52: fix: migration.py\n0.4.53: fix: futures_hq_sina.py\n0.4.54: add: futures_foreign\n0.4.55: fix: macro_constitute.py\n0.4.56: add: index_vix\n0.4.57: fix: covid-19; desc: delete pic show\n0.4.58: add: qhkc api\n0.4.59: add: jyfm_tools\n0.4.60: fix: covid_19_dxy and cot.py\n0.4.61: fix: cot.py dict keys use strip\n0.4.62: fix: add PG into cons.py map_dict\n0.4.63: add: energy_oil to add energy_oil_hist and energy_oil_detail\n0.4.64: add: futures_em_spot_stock\n0.4.65: add: futures_global_commodity_name_url_map\n0.4.66: fix: fund_em.py timezone transfer\n0.4.67: fix: covid covid_19_area_detail\n0.4.68: fix: marco_usa\n0.4.69: add: futures_cfmmc\n0.4.70: add: covid_19 CSSE 数据接口\n0.4.71: add: argus\n0.4.72: add: stock_zh_tick_163\n0.4.73: add: stock_zh_tick_tx_js\n0.4.74: fix: stock_zh_tick_163 return tips\n0.4.75: fix: nh_index\n0.4.76: add: fred_md\n0.4.77: fix: get_dce_option_daily\n0.4.78: add: internal_flow_history\n0.4.79: add: stock_dxsyl_em\n0.4.80: fix: covid and docs\n0.4.81: add: stock_yjyg_em and stock_yysj_em\n0.4.82: fix: futures_xgx_index\n0.4.83: fix: fortune_500.py\n0.4.84: fix: a and kcb stock return format\n0.4.85: fix: a and kcb stock field\n0.4.86: add: hf_sp_500\n0.4.87: fix: jinshi data update\n0.4.88: fix: macro_china\n0.4.89: fix: macro_other\n0.4.90: fix: stock_zh_a and stock_zh_kcb return adjusted stock price\n0.4.91: add: futures_inventory_em\n0.4.92: fix: adjust hk_stock_sina, us_stock_sina\n0.4.93: fix: air_quality\n0.4.94: fix: air_quality path\n0.4.95: add: js file\n0.4.96: fix: format air interface\n0.4.97: fix: interbank_rate_em.py add need_page parameter to control update content\n0.4.98: add: mplfinance package\n0.4.99: add: fund_em\n0.5.1: fix: add PG to futures list\n0.5.2: fix: air_zhenqi.py rename air_city_dict to air_city_table\n0.5.3: add: add two fields into covid_163\n0.5.4: fix: fix request_fun timeout and error type\n0.5.5: fix: fund_graded_fund_daily_em return fields\n0.5.6: fix: stock_us_sina.py rename columns\n0.5.7: fix: import akshare only load functions\n0.5.8: add: macro_china_money_supply\n0.5.9: add: macro_china_new_house_price, macro_china_enterprise_boom_index, macro_china_national_tax_receipts\n0.5.10: fix: zh_stock_ah_tx\n0.5.11: fix: fund_em return fields\n0.5.12: fix: add date to fund_em daily function\n0.5.13: add: stock_fund\n0.5.14: add: stock_market_fund_flow, stock_sector_fund_flow, stock_individual_fund_flow_rank\n0.5.15: fix: baidu_index\n0.5.16: add: fund_value_estimation_em\n0.5.17: fix: delete macro_euro zero value\n0.5.18: add: stock_financial_abstract, stock_financial_analysis_indicator\n0.5.19: add: stock_add_stock, stock_ipo_info, stock_history_dividend_detail, stock_history_dividend\n0.5.20: add: stock_restricted_shares, stock_circulate_stock_holder\n0.5.21: add: futures_dce_position_rank\n0.5.22: fix: fix futures_dce_position_rank return format\n0.5.23: add: stock_sector_spot, stock_sector_detail\n0.5.24: fix: futures_dce_position_rank\n0.5.25: fix: futures_dce_position_rank return fields\n0.5.26: add: stock_info\n0.5.27: add: stock_hsgt_hold_stock_em\n0.5.28: add: stock_fund_stock_holder, stock_main_stock_holder\n0.5.29: fix: stock_em_sy\n0.5.30: fix: air_zhenqi.py\n0.5.31: fix: add futures_dce_position_rank_other to fix futures_dce_position_rank at 20160104\n0.5.32: fix: futures_dce_position_rank_other return format\n0.5.33: add: zh_bond_cov_sina and set pandas version\n0.5.34: fix: set pandas version > 0.25\n0.5.35: add: bond_cov_comparison and bond_zh_cov\n0.5.36: fix: stock_info_sz_name_code return code format\n0.5.37: add: stock_hold\n0.5.38: fix: futures_dce_position_rank_other exchange symbol and variety\n0.5.39: add: stock_recommend\n0.5.40: fix: stock_recommend output format\n0.5.41: fix: deprecated requests-html module\n0.5.42: fix: reformat investing interface\n0.5.43: fix: qhck interface\n0.5.44: add: LME holding and stock report\n0.5.45: fix: transform the data type of stock_zh_a_spot output\n0.5.46: add: CFTC holding and stock\n0.5.47: fix: fix index_investing_global interface\n0.5.48: fix: fix stock_info_a_code_name interface\n0.5.49: fix: fix stock_zh_a_daily interface\n0.5.50: fix: fix get_roll_yield_bar interface\n0.5.51: add: stock_summary\n0.5.52: fix: fix get_roll_yield_bar interface\n0.5.53: add: add watch_jinshi_quotes interface\n0.5.54: add: add stock_price_js interface\n0.5.55: add: add futures_czce_warehouse_receipt interface\n0.5.56: add: add futures_dce_warehouse_receipt, futures_shfe_warehouse_receipt interface\n0.5.57: fix: fix macro data interface\n0.5.58: add: add stock_qsjy_em interface\n0.5.59: fix: fix fund interface\n0.5.60: fix: add index_bloomberg_billionaires interface\n0.5.61: fix: fix futures_rule interface\n0.5.62: add: add stock_a_pe, stock_a_pb interface\n0.5.63: add: add stock_a_lg_indicator interface\n0.5.64: add: add stock_a_high_low_statistics interface\n0.5.65: add: add stock_a_below_net_asset_statistics interface\n0.5.66: fix: fix stock_zh_a_daily default return unadjusted data\n0.5.67: fix: fix R and MATLAB compatibility issues\n0.5.68: add: add option_commodity_sina interface\n0.5.69: fix: fix option_commodity_sina interface\n0.5.70: merge: merge #4048\n0.5.71: add: add tool_trade_date_hist interface\n0.5.72: add: add fund_etf_category_sina, fund_etf_hist_sina interface\n0.5.73: add: add stock_report_disclosure interface\n0.5.74: add: add stock_zh_a_minute interface\n0.5.75: add: add futures_zh_minute_sina interface\n0.5.76: add: add option_finance_minute_sina interface\n0.5.77: fix: fix currency_hist interface return data format\n0.5.78: add: add hold field in futures_zh_minute_sina interface\n0.5.79: add: add stock_report_fund_hold interface\n0.5.80: fix: fix PG to futures cons file\n0.5.81: add: add stock_zh_index_hist_csindex interface\n0.5.82: fix: fix LU to futures cons file\n0.5.83: fix: fix qhkc broker_positions_process interface\n0.5.84: fix: fix tool_trade_date_hist_sina interface and update calendar.json\n0.5.85: add: add index_stock_hist interface\n0.5.86: fix: fix code format\n0.5.87: fix: fix cot interface\n0.5.88: fix: fix stock_account_statistics_em interface\n0.5.89: add: add macro_china_new_financial_credit interface\n0.5.90: add: add stock_sina_lhb interface\n0.5.91: fix: fix covid for python3.8\n0.5.92: fix: fix futures_daily_bar interface\n0.5.93: add: add macro_china_fx_gold interface\n0.5.94: add: add stock_zh_index_daily_em, bond_cb_jsl interface\n0.5.95: fix: fix get_dce_option_daily interface\n0.5.96: add: add stock_hsgt_hist_em interface\n0.5.97: fix: fix remove mplfinance package in requirements.txt\n0.5.98: add: add stock_hk_eniu_indicator interface\n0.5.99: fix: fix stock_zh_ah_daily interface\n0.6.1: fix: fix stock_zh_ah_daily interface set default value\n0.6.2: fix: fix stock_zh_a_minute interface and add adjust parameter\n0.6.3: fix: fix stock_zh_a_minute interface\n0.6.4: add: add macro_china interface\n0.6.5: add: add macro_china_wbck interface\n0.6.6: fix: fix macro_china_wbck interface\n0.6.7: add: add index_stock_cons_sina interface\n0.6.8: fix: fix option_commodity interface\n0.6.9: fix: fix stock_gpzy_pledge_ratio_em interface\n0.6.10: add: add macro_china_hb, macro_china_gksccz, macro_china_bond_public interface\n0.6.11: fix: fix python version should be 3.7 later\n0.6.12: fix: fix stock_gpzy_distribute_statistics_company_em interface\n0.6.13: add: add stock_us_fundamental interface\n0.6.14: fix: fix stock_us_fundamental interface\n0.6.15: fix: fix macro_china_market_margin_sh interface\n0.6.16: fix: fix stock_us_daily time period and adjust for specific stock\n0.6.17: fix: fix stock_js_weibo_report interface\n0.6.18: fix: fix get_shfe_option_daily interface column name\n0.6.19: fix: fix stock_hk_daily interface to process non-dividend stock\n0.6.20: fix: fix covid_baidu interface\n0.6.21: fix: fix futures_hf_spot interface\n0.6.22: fix: fix stock_zh_index_daily_tx interface\n0.6.23: fix: fix currency_hist interface\n0.6.24: fix: fix stock_zh_kcb_spot interface\n0.6.25: add: add stock_register_kcb interface\n0.6.26: add: add stock_em_sy_list interface\n0.6.27: fix: fix stock_sector_detail interface\n0.6.28: add: add stock_register_cyb interface\n0.6.29: fix: fix stock_zh_a_daily interface\n0.6.30: add: add energy interface\n0.6.31: fix: fix energy interface\n0.6.32: fix: fix docs interface\n0.6.33: fix: fix get_roll_yield_bar interface\n0.6.34: fix: fix currency_investing and futures_inventory_em interface and add index_stock_cons_csindex interface\n0.6.35: fix: fix get_futures_daily interface\n0.6.36: fix: fix stock_info_a_code_name interface\n0.6.37: fix: fix stock_sector_detail interface\n0.6.38: fix: fix get_futures_daily interface\n0.6.39: add: add stock_xgsglb_em interface\n0.6.40: add: add stock_zh_a_new interface\n0.6.41: fix: fix get_ine_daily interface\n0.6.42: add: add bond_futures_deliverable_coupons interface\n0.6.43: fix: fix bond_futures_deliverable_coupons interface\n0.6.44: add: add futures_comex_inventory interface\n0.6.45: add: add macro_china_xfzxx interface\n0.6.46: add: add macro_china_reserve_requirement_ratio interface\n0.6.47: fix: fix franchise_china interface\n0.6.48: fix: fix get_rank_sum interface\n0.6.49: fix: fix get_dce_rank_table interface\n0.6.50: add: add macro_china_hgjck, macro_china_consumer_goods_retail interface\n0.6.51: fix: fix macro_china_hgjck interface\n0.6.52: add: add macro_china_society_electricity interface\n0.6.53: add: add macro_china_society_traffic_volume interface\n0.6.54: add: add macro_china_postal_telecommunicational interface\n0.6.55: add: add macro_china_international_tourism_fx interface\n0.6.56: add: add macro_china_swap_rate interface\n0.6.57: fix: fix stock_sina_lhb_detail_daily interface\n0.6.58: add: add bond_china_close_return interface\n0.6.59: add: add macro_china_passenger_load_factor interface\n0.6.60: fix: fix stock_sina_lhb_ggtj interface\n0.6.61: fix: fix option_czce_hist interface\n0.6.62: fix: fix sunrise_daily interface\n0.6.63: fix: fix get_roll_yield_bar interface\n0.6.64: add: add macro_china_insurance interface\n0.6.65: add: add macro_china_supply_of_money interface\n0.6.66: add: add support for python 3.9.0\n0.6.67: add: add macro_china_foreign_exchange_gold interface\n0.6.68: add: add macro_china_retail_price_index interface\n0.6.69: fix: fix box_office_spot interface\n0.6.70: fix: fix bond_investing_global interface\n0.6.71: fix: fix futures_return_index_nh interface\n0.6.72: fix: fix get_receipt interface\n0.6.73: add: add news_cctv interface\n0.6.74: fix: fix macro and acm interface\n0.6.75: add: add movie_boxoffice interface\n0.6.76: fix: fix remove execjs dependence\n0.6.77: add: add macro_china_real_estate interface\n0.6.78: fix: fix movie_boxoffice interface\n0.6.79: fix: split movie_boxoffice to single interface\n0.6.80: fix: movie_boxoffice interface\n0.6.81: fix: fix stock_report_fund_hold interface\n0.6.82: fix: fix stock_comment_em interface\n0.6.83: add: add crypto_hist and crypto_name_url_table interface\n0.6.84: fix: fix crypto_hist interface\n0.6.85: fix: fix stock_a_pb and stock_a_pe interface\n0.6.86: fix: fix stock_zh_a_minute interface\n0.6.87: fix: remove email interface\n0.6.88: fix: fix get_dce_rank_table interface\n0.6.89: fix: fix get_dce_rank_table interface\n0.6.90: add: add fund_em_rank interface\n0.6.91: fix: fix get_futures_daily interface\n0.6.92: add: add repo_rate_hist interface\n0.6.93: fix: fix stock_report_fund_hold interface\n0.6.94: fix: fix docs interface\n0.6.95: fix: fix macro_china_market_margin_sh interface\n0.6.96: fix: fix stock_zh_a_daily interface\n0.6.97: add: add stock_hsgt_board_rank_em interface\n0.6.98: fix: fix fortune_rank interface\n0.6.99: add: add forbes_rank interface\n0.7.1: fix: fix futures_dce_position_rank interface\n0.7.2: add: add xincaifu_rank interface\n0.7.3: add: add hurun_rank interface\n0.7.4: fix: fix hurun_rank interface\n0.7.5: add: add currency_pair_map interface\n0.7.6: fix: fix stock_jgdy_detail_em interface\n0.7.7: fix: fix stock_info interface\n0.7.8: fix: fix bond_cb_jsl interface\n0.7.9: fix: fix stock_jgdy_detail_em interface\n0.7.10: fix: fix match_main_contract interface\n0.7.11: fix: fix stock_analyst_rank_em and stock_analyst_detail_em interface\n0.7.12: add: add stock_zh_a_cdr_daily interface\n0.7.13: fix: fix stock_zh_a_cdr_daily and stock_zh_a_daily interface\n0.7.14: fix: fix get_receipt interface\n0.7.15: add: add futures_contract_detail interface\n0.7.16: fix: fix futures_zh_spot interface\n0.7.17: del: del zdzk interface\n0.7.18: fix: fix stock_zh_a_daily interface\n0.7.19: fix: fix stock_zh_a_daily interface\n0.7.20: fix: fix stock_jgdy_tj_em interface\n0.7.21: fix: fix zh_stock_kcb_report interface\n0.7.22: fix: fix zh_stock_kcb_report interface\n0.7.23: fix: fix fund_open_fund_info_em interface\n0.7.24: fix: fix futures_spot_price_daily interface\n0.7.25: add: add option_current_em interface\n0.7.26: fix: fix option_current_em interface\n0.7.27: add: add js_news interface\n0.7.28: fix: fix js_news interface\n0.7.29: fix: fix macro_china_market_margin_sh interface\n0.7.30: add: add nlp_answer interface\n0.7.31: fix: fix index_sw interface\n0.7.32: add: add index_cni interface\n0.7.33: add: add more index_cni interface\n0.7.34: add: add stock_dzjy_sctj interface\n0.7.35: add: add stock_dzjy_mrmx interface\n0.7.36: add: add stock_dzjy_mrtj interface\n0.7.37: add: add stock_dzjy_hygtj interface\n0.7.38: add: add stock_dzjy_hyyybtj interface\n0.7.39: add: add stock_dzjy_yybph interface\n0.7.40: fix: fix js_news interface\n0.7.41: add: add stock_yzxdr_em interface\n0.7.42: fix: fix fund_etf_fund_daily_em interface\n0.7.43: fix: fix match_main_contract interface\n0.7.44: fix: fix stock_hk_daily interface\n0.7.45: fix: fix stock_yzxdr_em interface\n0.7.46: fix: fix option_czce_hist interface\n0.7.47: fix: fix bond_zh_cov interface\n0.7.48: fix: fix futures_dce_position_rank interface\n0.7.49: fix: fix stock_us_zh_spot interface\n0.7.50: fix: fix stock_hsgt_stock_statistics_em interface\n0.7.51: fix: fix stock_us_daily interface\n0.7.52: fix: fix stock_sector_fund_flow_rank interface\n0.7.53: fix: fix stock_yzxdr_em interface\n0.7.54: add: add stock_a_code_to_symbol interface\n0.7.55: add: add stock_news_em interface\n0.7.56: fix: fix stock_news_em interface\n0.7.57: fix: fix xlrd support\n0.7.58: fix: fix stock_zh_a_tick_tx_js support\n0.7.59: fix: fix read_excel support\n0.7.60: fix: fix fund_open_fund_daily_em interface\n0.7.61: fix: fix calendar.json interface\n0.7.62: fix: fix QQ group interface\n0.7.63: add: add bond_summary_sse interface\n0.7.64: fix: fix macro_cons_gold_volume interface\n0.7.65: fix: fix fund_value_estimation_em interface\n0.7.66: fix: fix fund_value_estimation_em interface\n0.7.67: fix: fix get_dce_daily interface\n0.7.68: fix: fix stock_zh_index_spot interface\n0.7.69: fix: fix covid_19 interface\n0.7.70: fix: fix get_dce_rank_table interface\n0.7.71: fix: fix stock_us_daily interface\n0.7.72: fix: fix get_ine_daily interface\n0.7.73: add: add macro_china_money_supply interface\n0.7.74: fix: fix stock_zh_a_minute interface\n0.7.75: add: add bond_cash_summary_sse interface\n0.7.76: fix: fix get_rank_sum_daily interface\n0.7.77: fix: fix get_inventory_data interface\n0.7.78: fix: fix futures_inventory_99 interface\n0.7.79: fix: fix stock_a_below_net_asset_statistics interface\n0.7.80: add: add bank_rank_banker interface\n0.7.81: add: add macro_china_stock_market_cap interface\n0.7.82: fix: fix macro_china_stock_market_cap interface\n0.7.83: fix: fix stock_news_em interface\n0.7.84: fix: fix covid_19_dxy interface\n0.7.85: add: add futures_spot_price_previous interface\n0.7.86: add: add fund_em_hk_rank interface\n0.7.87: add: add fund_em_lcx_rank interface\n0.7.88: fix: fix bond_repo_zh_tick interface\n0.7.89: fix: fix stock_hk_daily interface\n0.7.90: fix: fix stock_gpzy_pledge_ratio_em interface\n0.7.91: fix: fix stock_report_disclosure interface\n0.7.92: add: add fund_hk_fund_hist_em interface\n0.7.93: add: add fund_portfolio_hold_em interface\n0.7.94: fix: fix futures_spot_price_previous interface\n0.7.95: add: add covid_19_trace interface\n0.7.96: fix: fix bond_spot_quote interface\n0.7.97: fix: fix bond_spot_deal interface\n0.7.98: fix: fix stock_report_fund_hold interface\n0.7.99: fix: fix stock_zh_a_daily interface\n0.8.1: add: add stock_report_fund_hold_detail interface\n0.8.2: fix: fix option_finance_board interface\n0.8.3: fix: fix stock_zh_a_daily interface\n0.8.4: fix: fix option interface\n0.8.5: fix: fix bond_investing_global interface\n0.8.6: add: add macro_china_shrzgm interface\n0.8.7: add: add stock_zh_a_tick_163_now interface\n0.8.8: fix: fix add PK to CZCE\n0.8.9: add: add futures delivery and spot interface\n0.8.10: fix: fix fund_portfolio_hold_em interface\n0.8.11: add: add futures_to_spot_dce interface\n0.8.12: add: add futures_delivery_shfe interface\n0.8.13: fix: fix stock_us_daily interface\n0.8.14: fix: fix fund_open_fund_rank_em interface\n0.8.15: fix: fix chinese_to_english interface\n0.8.16: fix: fix stock_a_pe interface\n0.8.17: add: add stock_financial_report_sina interface\n0.8.18: fix: fix futures_spot_price_daily interface\n0.8.19: add: add stock_margin_sse interface\n0.8.20: add: add stock_margin_detail_sse interface\n0.8.21: fix: fix stock_szse_summary interface\n0.8.22: fix: fix stock_zh_a_daily interface\n0.8.23: fix: fix covid_19_dxy interface\n0.8.24: fix: fix fund_value_estimation_em interface\n0.8.25: fix: fix stock_zh_index_daily_tx interface\n0.8.26: fix: fix stock_hk_daily interface\n0.8.27: fix: fix get_dce_rank_table interface\n0.8.28: fix: fix stock_analyst_rank_em interface\n0.8.29: add: add fund_rating interface\n0.8.30: add: add fund_manager interface\n0.8.31: fix: fix stock_zh_a_minute interface\n0.8.32: fix: fix get_dce_rank_table interface\n0.8.33: add: add stock_profit_forecast interface\n0.8.34: fix: fix index_investing_global interface\n0.8.35: add: add bond_zh_us_rate interface\n0.8.36: add: add stock_fhps_em interface\n0.8.37: add: add stock_yjkb_em interface\n0.8.38: fix: fix get_czce_daily interface\n0.8.39: add: add stock_board_concept_cons_ths interface\n0.8.40: fix: fix stock_board_concept_cons_ths interface\n0.8.41: fix: fix energy_carbon_bj interface\n0.8.42: fix: fix stock_zh_a_daily interface\n0.8.43: fix: fix stock_yjyg_em interface\n0.8.44: fix: fix stock_comment_em interface\n0.8.45: add: add stock_sse_deal_daily interface\n0.8.46: fix: fix stock_board_concept_cons_ths interface\n0.8.47: add: add stock_board_concept_info_ths interface\n0.8.48: fix: fix fund_rating_sh fund_rating_zs fund_rating_ja interface\n0.8.49: add: add stock_yjbb_em interface\n0.8.50: fix: fix stock_zh_index_spot interface\n0.8.51: fix: fix stock_zh_a_spot interface\n0.8.52: add: add stock_zcfz_em, stock_lrb_em, stock_xjll_em interface\n0.8.53: fix: fix stock_zcfz_em interface\n0.8.54: fix: fix stock_register_kcb interface\n0.8.55: add: add stock_ipo_declare interface\n0.8.56: fix: fix index_bloomberg_billionaires interface\n0.8.57: fix: fix hurun_rank interface\n0.8.58: add: add hurun_rank interface\n0.8.59: fix: fix get_sector_futures interface\n0.8.60: fix: fix currency_hist interface\n0.8.61: fix: fix stock_hsgt_hold_stock_em interface\n0.8.62: fix: fix stock_zh_a_tick_163 interface\n0.8.63: fix: fix futures_zh_daily_sina interface\n0.8.64: fix: fix futures_inventory_em interface\n0.8.65: fix: fix futures_hq_spot_df interface\n0.8.66: fix: fix currency_hist interface\n0.8.67: fix: fix requirements.txt interface\n0.8.68: fix: fix bond_investing_global interface\n0.8.69: fix: fix stock_board_concept_cons_ths interface\n0.8.70: add: add stock_board_concept_index_ths interface\n0.8.71: fix: fix remove obor fold\n0.8.72: fix: fix stock_board_concept_index_ths interface\n0.8.73: add: add stock_board_industry_index_ths interface\n0.8.74: fix: fix test interface\n0.8.75: fix: fix stock_board_industry_index_ths interface\n0.8.76: add: add stock_notice_report interface\n0.8.77: fix: fix rate_interbank interface\n0.8.78: fix: fix stock_board_concept_index_ths interface\n0.8.79: add: add stock_lh_yyb_most, stock_lh_yyb_capital, stock_lh_yyb_control interface\n0.8.80: fix: fix stock_yjkb_em interface\n0.8.81: add: add crypto_bitcoin_hold_report interface\n0.8.82: fix: fix energy_carbon_hb interface\n0.8.83: fix: fix get_czce_daily interface\n0.8.84: fix: fix amac_fund_abs interface\n0.8.85: fix: fix rename amac_person_org_list to amac_person_fund_org_list interface\n0.8.86: add: add amac_person_bond_org_list interface\n0.8.87: add: add stock_fund_flow_concept interface\n0.8.88: add: add stock_fund_flow_industry interface\n0.8.89: add: add stock_fund_flow_individual interface\n0.8.90: add: add stock_fund_flow_big_deal interface\n0.8.91: add: add stock_ggcg_em interface\n0.8.92: fix: fix stock_zh_a_daily interface\n0.8.93: fix: fix bond_spot_deal interface\n0.8.94: fix: fix stock_us_daily interface\n0.8.95: add: add fund_new_found_em interface\n0.8.96: fix: fix get_czce_rank_table interface\n0.8.97: add: add stock_wc_hot_top interface\n0.8.98: add: add index_kq interface\n0.8.99: fix: fix stock_individual_fund_flow_rank interface\n0.9.1: fix: fix stock_profit_forecast interface\n0.9.2: fix: fix get_futures_daily interface\n0.9.3: fix: fix get_futures_daily interface\n0.9.4: fix: fix get_shfe_daily interface\n0.9.5: add: add stock_hot_rank_wc interface\n0.9.6: fix: fix stock_hot_rank_wc interface\n0.9.7: fix: fix stock_hot_rank_wc interface\n0.9.8: fix: fix forbes_rank interface\n0.9.9: fix: fix stock_a_below_net_asset_statistics interface\n0.9.10: fix: fix stock_hot_rank_wc interface\n0.9.11: add: add drewry_wci_index interface\n0.9.12: fix: fix bond_investing_global interface\n0.9.13: fix: fix currency_hist interface\n0.9.14: fix: fix futures_global_commodity_hist interface\n0.9.15: add: add index_kq_fashion interface\n0.9.16: add: add index_eri interface\n0.9.17: fix: fix futures_global_commodity_hist interface\n0.9.18: fix: fix stock_dxsyl_em interface\n0.9.19: add: add stock_market_activity_legu interface\n0.9.20: fix: fix stock_individual_fund_flow_rank interface\n0.9.21: add: add index_cflp_price interface\n0.9.22: add: add index_cflp_volume interface\n0.9.23: fix: fix index_cflp_volume interface\n0.9.24: fix: fix stock_info_sz_name_code interface\n0.9.25: add: add car_gasgoo_sale_rank interface\n0.9.26: fix: fix stock_hk_daily interface\n0.9.27: fix: fix stock_report_fund_hold interface\n0.9.28: add: add stock_average_position_legu interface\n0.9.29: add: add stock_em_qbzf interface\n0.9.30: add: add stock_em_pg interface\n0.9.31: fix: fix index_investing_global interface\n0.9.32: fix: fix bond_investing_global interface\n0.9.33: add: add marco_china_hk interface\n0.9.34: fix: fix get_futures_daily interface\n0.9.35: fix: fix stock_zh_a_daily interface\n0.9.36: fix: fix stock_zh_a_daily hfq and qfq interface\n0.9.37: fix: fix stock_hot_rank_wc interface\n0.9.38: add: add stock_zt_pool_em interface\n0.9.39: fix: fix stock_us_daily interface\n0.9.40: fix: fix bond_cov_comparison interface\n0.9.41: fix: fix stock_zt_pool_previous_em interface\n0.9.42: add: add stock_zt_pool_strong_em interface\n0.9.43: fix: fix stock_zt_pool_strong_em interface\n0.9.44: fix: fix stock_zt_pool_sub_new_em interface\n0.9.45: fix: fix stock_zt_pool_em interface\n0.9.46: fix: fix spot_goods interface\n0.9.47: fix: fix futures_comex_inventory interface\n0.9.48: fix: fix stock_zcfz_em interface\n0.9.49: fix: fix stock_hk_daily interface\n0.9.50: fix: fix futures_spot_stock interface\n0.9.51: fix: fix stock_hk_daily interface\n0.9.52: fix: remove internal_flow_history interface\n0.9.53: add: add stock_zh_a_alerts_cls interface\n0.9.54: fix: fix bond_zh_us_rate interface\n0.9.55: fix: fix index_vix interface\n0.9.56: fix: fix macro_fx_sentiment interface\n0.9.57: fix: fix stock_zh_a_alerts_cls interface\n0.9.58: add: add stock_staq_net_stop interface\n0.9.59: fix: fix covid_19_baidu interface\n0.9.60: fix: fix currency_convert interface\n0.9.61: fix: fix stock_info_sz_name_code interface\n0.9.62: add: add stock_zh_a_gdhs interface\n0.9.63: fix: fix stock_zh_a_gdhs interface\n0.9.64: add: add futures_sina_hold_pos interface\n0.9.65: fix: fix bond_zh_us_rate interface\n0.9.66: fix: fix set urllib3==1.25.11\n0.9.67: fix: fix stock_hsgt_hold_stock_em interface\n0.9.68: fix: fix stock_zh_a_tick_tx interface\n0.9.69: add: add currency_boc_sina interface\n0.9.70: add: add stock_zh_a_hist interface\n0.9.71: fix: fix stock_zh_a_hist interface\n0.9.72: fix: fix stock_zh_a_hist interface\n0.9.73: fix: fix stock_zh_a_tick_tx_js interface\n0.9.74: add: add stock_changes_em interface\n0.9.75: add: add stock_hk_spot_em, stock_hk_hist interface\n0.9.76: add: add stock_us_spot_em, stock_us_hist interface\n0.9.77: fix: fix stock_us_hist interface\n0.9.78: fix: fix rename python file name interface\n0.9.79: add: add crypto_bitcoin_cme interface\n0.9.80: fix: fix futures_display_main_sina interface\n0.9.81: add: add crypto_crix interface\n0.9.82: fix: fix crypto_crix interface\n0.9.83: fix: fix crypto_crix interface\n0.9.84: fix: fix rename futures_hq_spot to futures_foreign_commodity_realtime interface\n0.9.85: fix: fix rate_interbank interface\n0.9.86: add: add fund_aum_em interface\n0.9.87: fix: fix death_company interface\n0.9.88: fix: fix stock_financial_analysis_indicator interface\n0.9.89: fix: fix fund_manager interface\n0.9.90: fix: fix stock_a_below_net_asset_statistics interface\n0.9.91: fix: fix stock_yjbb_em interface\n0.9.92: fix: fix stock_tfp_em interface\n0.9.93: fix: fix stock_zh_a_gdhs interface\n0.9.94: add: add macro_china_qyspjg, macro_china_fdi interface\n0.9.95: fix: fix stock_board_concept_index_ths interface\n0.9.96: fix: fix stock_info_sz_name_code interface\n0.9.97: fix: fix urllib3 version at 1.25.8\n0.9.98: fix: fix js_news interface\n0.9.99: fix: fix news_cctv interface\n1.0.1: add: add macro_usa_phs interface\n1.0.2: fix: fix macro_usa_phs interface\n1.0.3: add: add macro_germany interface\n1.0.4: fix: fix macro_china interface\n1.0.5: add: add macro_china_gyzjz interface\n1.0.6: fix: fix get_receipt interface\n1.0.7: fix: fix get_ine_daily interface\n1.0.8: fix: fix macro_china_cpi interface\n1.0.9: fix: fix stock_zh_a_gdhs interface\n1.0.10: fix: fix stock_zh_a_spot_em interface\n1.0.11: fix: fix stock_board_industry_name_ths interface\n1.0.12: fix: fix macro_china_money_supply interface\n1.0.13: fix: fix rename stock_board_concept_index_ths to stock_board_concept_hist_ths interface\n1.0.14: add: add stock_board_concept_cons_em and stock_board_concept_hist_em interface\n1.0.15: fix: fix stock_hk_hist interface\n1.0.16: fix: fix tool_trade_date_hist_sina interface\n1.0.17: fix: fix calendar.json interface\n1.0.18: fix: fix reformat macro_china_national_tax_receipts, macro_china_hgjck, macro_china_stock_market_cap interface\n1.0.19: fix: fix marco_china_hk interface\n1.0.20: fix: fix bond_zh_hs_cov_daily interface\n1.0.21: fix: fix charity_china interface\n1.0.22: fix: fix stock_xgsglb_em interface\n1.0.23: fix: fix stock_dxsyl_em interface\n1.0.24: fix: fix stock_board_concept_hist_em interface\n1.0.25: fix: fix get_receipt interface\n1.0.26: add: add energy_carbon_domestic interface\n1.0.27: fix: fix get_roll_yield_bar interface\n1.0.28: add: add covid_19_baidu interface\n1.0.29: fix: fix covid_19_baidu interface\n1.0.30: fix: fix option_czce_hist interface\n1.0.31: fix: fix futures_foreign_commodity_realtime interface\n1.0.32: fix: fix covid_19_baidu interface\n1.0.33: fix: fix bond_china_close_return interface\n1.0.34: fix: fix bond_china_close_return interface\n1.0.35: fix: fix bond_cb_jsl interface\n1.0.36: fix: fix stock_hsgt_north_net_flow_in_em interface\n1.0.37: add: add macro_swiss interface\n1.0.38: add: add macro_japan interface\n1.0.39: add: add macro_uk interface\n1.0.40: add: add stock_szse_margin interface\n1.0.41: add: add macro_australia interface\n1.0.42: fix: fix index_stock_hist interface\n1.0.43: fix: fix stock_margin_detail_szse interface\n1.0.44: fix: fix stock_margin_detail_szse interface\n1.0.45: fix: fix option_dce_daily interface and rename interface in option_commodity\n1.0.46: add: add futures_hog_info interface\n1.0.47: fix: fix futures_hog_info interface\n1.0.48: add: add macro_canada interface\n1.0.49: fix: fix stock_individual_fund_flow interface\n1.0.50: fix: fix stock_jgdy_tj_em interface\n1.0.51: add: add sport_olympic_hist interface\n1.0.52: add: add stock_financial_hk interface\n1.0.53: fix: fix tool_trade_date_hist_sina interface\n1.0.54: fix: fix macro_china_gdp_yearly interface\n1.0.55: fix: fix macro_china_freight_index interface\n1.0.56: add: add stock_a_ttm_lyr interface\n1.0.57: add: add stock_a_all_pb interface\n1.0.58: add: add futures_hog_rank interface\n1.0.59: fix: fix futures_zh_daily_sina interface\n1.0.60: fix: fix futures_main_sina interface\n1.0.61: fix: fix stock_a_all_pb interface\n1.0.62: add: add futures_egg_price interface\n1.0.63: fix: fix remove jyfm interface\n1.0.64: fix: fix rename zh_stock_kcb_report to stock_zh_kcb_report_em interface\n1.0.65: fix: fix stock_gpzy_pledge_ratio_detail_em interface\n1.0.66: fix: fix macro_cons_opec_month interface\n1.0.67: fix: fix futures_sgx_daily interface\n1.0.68: fix: remove agoyal_stock_return interface\n1.0.69: fix: remove bank_rank_banker interface\n1.0.70: fix: remove watch_jinshi_quotes interface\n1.0.71: fix: remove watch_argus interface\n1.0.72: fix: fix amac_fund_abs interface\n1.0.73: add: add bond_cash_summary_sse interface\n1.0.74: fix: fix bond_zh_hs_cov_spot interface\n1.0.75: fix: fix bond_futures_deliverable_coupons interface\n1.0.76: fix: fix stock_financial_hk_analysis_indicator_em interface\n1.0.77: fix: fix macro_china_m2_yearly interface\n1.0.78: add: add reits_realtime_em, reits_info_jsl interface\n1.0.79: fix: fix news_cctv interface\n1.0.80: add: add stock_zh_a_hist_min_em, stock_zh_a_hist_pre_min_em interface\n1.0.81: add: add stock_us_hist_min_em, stock_hk_hist_min_em interface\n1.0.82: fix: fix bond_zh_cov interface\n1.0.83: fix: fix macro_china interface\n1.0.84: add: add bond_zh_cov_info interface\n1.0.85: fix: fix stock_report_fund_hold interface\n1.0.86: fix: fix stock_zt_pool_dtgc_em interface\n1.0.87: fix: fix macro_china_swap_rate interface\n1.0.88: fix: fix stock_zh_a_hist_min_em interface\n1.0.89: fix: fix stock_hk_hist_min_em interface\n1.0.90: fix: fix stock_us_hist_min_em interface\n1.0.91: fix: fix stock_zh_a_hist_min_em interface\n1.0.92: fix: fix stock_zh_a_hist interface\n1.0.93: fix: fix stock_hk_hist_min_em interface\n1.0.94: fix: fix stock_zh_a_new interface\n1.0.95: fix: fix stock_zh_a_daily interface\n1.0.96: add: add stock_zh_a_st_em interface\n1.0.97: fix: fix futures_spot_stock interface\n1.0.98: add: add stock_zh_a_new_em interface\n1.0.99: fix: fix stock_hot_rank_wc interface\n1.1.1: add: add index_investing_global_from_url interface\n1.1.2: add: add stock_us_pink_spot_em interface\n1.1.3: add: add stock_us_famous_spot_em interface\n1.1.4: fix: fix stock_average_position_legu interface\n1.1.5: add: add stock_rank_forecast_cninfo interface\n1.1.6: fix: fix futures_zh_minute_sina interface\n1.1.7: fix: fix covid_19_trace interface\n1.1.8: add: add stock_industry_pe_ratio_cninfo interface\n1.1.9: fix: fix stock_price_js interface\n1.1.10: fix: fix stock_hsgt_hold_stock_em interface\n1.1.11: fix: fix stock_fund_flow_concept interface\n1.1.12: fix: fix stock_fund_flow_industry interface\n1.1.13: add: add stock_dividents_cninfo interface\n1.1.14: fix: fix stock_fund_flow_concept interface\n1.1.15: add: add stock_new_gh_cninfo interface\n1.1.16: fix: fix stock_jgdy_detail_em interface\n1.1.17: fix: fix stock_jgdy_tj_em interface\n1.1.18: fix: fix stock_fund_flow_concept and stock_fund_flow_industry interface\n1.1.19: add: add stock_new_ipo_cninfo interface\n1.1.20: fix: fix stock_a_pe interface\n1.1.21 fix: fix setuptools==57.5.0 package\n1.1.22 fix: fix remove demjson package\n1.1.23 fix: fix update urllib3 package\n1.1.24 fix: fix email address\n1.1.25 add: add stock_hold_num_cninfo interface\n1.1.26 fix: fix stock_fund_flow_concept interface\n1.1.27 add: add stock_hold_control_cninfo interface\n1.1.28 fix: fix move project to AKFamily interface\n1.1.29 fix: fix urllib3>=1.25.8 package\n1.1.30 fix: fix stock_zh_index_hist_csindex interface\n1.1.31 add: add stock_hold_management_detail_cninfo interface\n1.1.32 add: add sw_index_representation_spot interface\n1.1.33 fix: fix sw_index_xxx interface\n1.1.34 fix: fix drewry_wci_index interface\n1.1.35 fix: fix fund_etf_category_sina interface\n1.1.36 fix: fix sw_index_daily_indicator interface\n1.1.37 fix: fix drewry_wci_index interface\n1.1.38 add: add futures_comm_info interface\n1.1.39 fix: fix futures_comm_info interface\n1.1.40 fix: fix remove covid_19_history interface\n1.1.41 add: add stock_zh_b_sina interface\n1.1.42 fix: fix stock_zh_a_minute interface\n1.1.43 add: add stock_cg_guarantee_cninfo interface\n1.1.44 fix: fix stock_zh_index_daily interface\n1.1.45 fix: fix stock_zh_index_daily_tx interface\n1.1.46 fix: fix remove watch_jinshi_fx interface\n1.1.47 fix: fix stock_jgdy_tj_em and stock_jgdy_detail_em interface\n1.1.48 fix: fix rename fund_em_portfolio_hold to fund_portfolio_hold_em interface\n1.1.49 fix: fix stock_jgdy_tj_em and stock_jgdy_detail_em interface\n1.1.50 add: add stock_cg_lawsuit_cninfo interface\n1.1.51 fix: fix stock_hot_rank_wc interface\n1.1.52 add: add stock_cg_equity_mortgage_cninfo interface\n1.1.53 fix: fix index_detail_hist_adjust_cni interface\n1.1.54 fix: fix stock_board_concept_hist_ths interface\n1.1.55 fix: fix stock_sina_lhb_ggtj and stock_sina_lhb_jgzz interface\n1.1.56 add: add fund_aum_hist_em interface\n1.1.57 fix: fix stock_sina_lhb_ggtj and stock_sina_lhb_jgzz interface\n1.1.58 add: add bond_treasure_issue_cninfo interface\n1.1.59 add: add bond_local_government_issue_cninfo interface\n1.1.60 add: add bond_corporate_issue_cninfo interface\n1.1.61 add: add bond_cov_issue_cninfo interface\n1.1.62 fix: fix bond_zh_us_rate interface\n1.1.63 add: add bond_cov_stock_issue_cninfo interface\n1.1.64 add: add fund_report_stock_cninfo interface\n1.1.65 fix: fix stock_notice_report interface\n1.1.66 add: add fund_report_industry_allocation_cninfo interface\n1.1.67 fix: fix stock_zh_index_hist_csindex interface\n1.1.68 fix: fix index_stock_cons_csindex interface\n1.1.69 add: add fund_scale_open_sina interface\n1.1.70 add: add fund_scale_close_sina interface\n1.1.71 add: add fund_scale_structured_sina interface\n1.1.72 add: add fund_report_asset_allocation_cninfo interface\n1.1.73 add: add stock_zh_index_value_csindex interface\n1.1.74 fix: fix fund_etf_fund_info_em interface\n1.1.75 add: add index_value_hist_funddb interface\n1.1.76 fix: fix amac_fund_info interface\n1.1.77 fix: fix stock_zh_a_tick_163_now interface\n1.1.78 add: add stock_hsgt_individual_em interface\n1.1.79 fix: fix stock_jgdy_tj_em interface\n1.1.80 add: add support for Python 3.10 interface\n1.1.81 add: add stock_hsgt_individual_detail_em interface\n1.1.82 fix: fix stock_tfp_em interface\n    1. rename stock_em_tfp to stock_tfp_em\n    2. reformat output data type\n1.1.83 add: add stock_ipo_benefit_ths interface\n1.1.84 fix: fix stock_board_industry_index_ths interface\n    1. add start_date and end_date parameters\n1.1.85 fix: fix stock_hsgt_stock_statistics_em interface\n1.1.86 fix: fix stock_hsgt_stock_statistics_em interface\n1.1.87 fix: fix stock_hsgt_hist_em interface\n1.1.88 fix: fix stock_sector_spot interface\n1.1.89 fix: fix stock_sector_detail interface\n1.1.90 fix: fix stock_board_concept_name_ths interface\n1.1.91 fix: fix stock_hsgt_individual_detail_em interface\n1.1.92 add: add stock_rank_cxg_ths interface\n1.1.93 add: add stock_rank_cxd_ths interface\n1.1.94 fix: fix fund_portfolio_hold_em interface\n1.1.95 fix: fix stock_board_concept_hist_ths interface\n1.1.96 add: add bond_zh_hs_cov_min interface\n1.1.97 add: add stock_rank_lxsz_ths interface\n1.1.98 add: add stock_rank_lxxd_ths interface\n1.1.99 add: add stock_rank_cxfl_ths interface\n1.2.1 add: add stock_rank_cxsl_ths interface\n1.2.2 fix: fix zh_subscribe_exchange_symbol interface\n1.2.3 add: add stock_rank_xstp_ths interface\n1.2.4 fix: fix fund_portfolio_hold_em interface\n1.2.5 fix: fix index_stock_hist interface\n1.2.6 add: add stock_rank_xxtp_ths interface\n1.2.7 add: add stock_rank_ljqd_ths interface\n1.2.8 add: add stock_rank_ljqs_ths interface\n1.2.9 fix: fix stock_zh_a_gdhs interface\n1.2.10 fix: fix bond_zh_hs_daily interface\n1.2.11 add: add stock_zh_a_gdhs_detail_em interface\n1.2.12 fix: fix stock_zh_a_gdhs interface\n1.2.13 add: add stock_rank_xzjp_ths interface\n1.2.14 add: add sw_index_second_spot interface\n1.2.15 fix: fix stock_board_industry_name_ths interface\n1.2.16 add: add stock_board_cons_ths interface\n1.2.17 fix: fix amac_fund_info interface\n1.2.18 fix: fix amac interface\n1.2.19 fix: fix amac cons.py interface\n1.2.20 fix: fix stock_zh_a_spot_em interface\n1.2.21 fix: fix stock_zh_a_hist interface\n1.2.22 fix: fix amac_fund_info interface\n1.2.23 add: add video_tv interface\n1.2.24 fix: fix car_gasgoo_sale_rank interface\n1.2.25 fix: fix amac_manager_classify_info interface\n1.2.26 fix: fix amac interface\n1.2.27 add: add online_value_artist interface\n1.2.28 add: add club_rank_game interface\n1.2.29 add: add player_rank_game interface\n1.2.30 add: add business_value_artist interface\n1.2.31 fix: fix stock_zt_pool_em interface\n1.2.32 add: add video_variety_show interface\n1.2.33 add: add fund_fh_em interface\n1.2.34 fix: fix fund_open_fund_info_em interface\n1.2.35 fix: fix fund_open_fund_info_em interface\n1.2.36 add: add stock_info_bj_name_code interface\n1.2.37 fix: fix stock_info_a_code_name interface\n1.2.38 fix: fix futures_foreign_commodity_realtime interface\n1.2.39 fix: fix stock_info_sh_delist interface\n1.2.40 add: add fund_scale_change_em interface\n1.2.41 add: add fund_hold_structure_em interface\n1.2.42 fix: fix fund_manager interface\n1.2.43 fix: fix get_czce_daily interface\n1.2.44 add: add futures_index_cscidx interface\n1.2.45 fix: fix stock_info_a_code_name interface\n1.2.46 add: add stock_board_industry_cons_em interface\n1.2.47 fix: fix covid_19_dxy interface\n1.2.48 fix: fix covid_19_dxy interface\n1.2.49 fix: fix rate_interbank interface\n1.2.50 fix: fix futures_price_index_nh interface\n1.2.51 add: add futures_hq_subscribe_exchange_symbol interface\n1.2.52 fix: fix futures_foreign_commodity_realtime interface\n1.2.53 add: add get_ine_daily interface\n1.2.54 fix: fix bond_zh_hs_cov_min interface\n1.2.55 add: add stock_repurchase_em interface\n1.2.56 fix: fix stock_zh_a_tick_163 interface\n1.2.57 add: add stock_us_hist_fu interface\n1.2.58 fix: fix stock_board_concept_hist_ths interface\n1.2.59 fix: fix macro_china_hk interface\n1.2.60 fix: fix macro_china_hk interface\n1.2.61 fix: fix stock_board_concept_hist_ths interface\n1.2.62 fix: fix stock_dzjy_sctj interface\n1.2.63 add: add spot_hist_sge interface\n1.2.64 add: add spot_silver_benchmark_sge interface\n1.2.65 remove: remove wdbank interface\n1.2.66 add: add spot_golden_benchmark_sge interface\n1.2.67 fix: fix air_quality_hebei interface\n1.2.68 fix: fix stock_financial_hk_analysis_indicator_em interface\n1.2.69 fix: fix get_futures_daily interface\n1.2.70 fix: fix sw_index_spot interface\n1.2.71 add: add sw_index_third_info interface\n1.2.72 add: add sw_index_third_cons interface\n1.2.73 fix: fix sw_index_third_cons interface\n1.2.74 fix: fix macro_australia and macro_canada interface\n1.2.75 fix: fix docs interface\n1.2.76 fix: fix amac_person_fund_org_list interface\n1.2.77 add: add bond_cb_adj_logs_jsl interface\n1.2.78 fix: fix amac_person_fund_org_list interface\n1.2.79 fix: fix amac_person_fund_org_list interface\n1.2.80 fix: fix sw_index_daily interface\n1.2.81 fix: fix stock_us_hist_fu interface\n1.2.82 fix: fix spot_symbol_table_sge interface\n1.2.83 fix: fix macro_bank interface\n1.2.84 fix: fix repo_rate_hist interface\n1.2.85 fix: fix repo_rate_hist interface\n1.2.86 add: add stock_a_pe_and_pb interface\n1.2.87 add: add stock_hk_ggt_components_em interface\n1.2.88 fix: fix futures_nh_index interface\n1.2.89 fix: fix futures_index_cscidx interface\n1.2.90 fix: fix stock_board_industry_index_ths interface\n1.2.91 fix: fix fund_etf_hist_sina interface\n1.2.92 fix: fix futures_zh_spot interface\n1.2.93 fix: fix fund_manager interface\n1.2.94 fix: fix fund_new_found_em interface\n1.2.95 add: add stock_individual_info_em interface\n1.2.96 fix: fix match_main_contract interface\n1.2.97 fix: fix stock_profit_forecast interface\n1.2.98 fix: fix futures_spot_stock interface\n1.2.99 fix: fix PYPI info\n1.3.1 fix: fix option_shfe_daily interface\n1.3.2 fix: remove github interface\n1.3.3 fix: fix stock_em_ztb interface\n1.3.4 fix: fix stock_hsgt_stock_statistics_em interface\n1.3.5 fix: update QQ info\n1.3.6 fix: fix stock_dzjy_sctj interface\n1.3.7 fix: fix stock_hsgt_north_xxxx interface\n1.3.8 fix: fix stock_info_change_name interface\n1.3.9 add: add index_sugar_msweet interface\n1.3.10 fix: fix index_sugar_msweet interface\n1.3.11 fix: fix index_cflp_price interface\n1.3.12 add: add index_inner_quote_sugar_msweet interface\n1.3.13 fix: fix stock_zh_a_tick_163 interface\n1.3.14 fix: fix stock_zh_a_scr_report interface\n1.3.15 fix: fix option_current_em interface\n1.3.16 fix: fix stock_account_statistics_em interface\n1.3.17 fix: fix stock_sse_deal_daily interface\n1.3.18 fix: fix stock_sse_summary interface\n1.3.19 add: add index_stock_cons_weight_csindex interface\n1.3.20 fix: fix index_cni_xx interface\n1.3.21 fix: fix index_detail_hist_adjust_cni interface\n1.3.22 fix: fix hf_sp_500 interface\n1.3.23 fix: fix macro_china_gksccz interface\n1.3.24 fix: fix macro_china_bond_public interface\n1.3.25 fix: fix stock_hk_hist interface\n1.3.26 fix: fix stock_us_spot_em interface\n1.3.27 fix: fix stock_us_hist interface\n1.3.28 fix: fix stock_zh_a_hist interface\n1.3.29 fix: fix update calendar.json to 2022\n1.3.30 fix: fix stock_zh_index_daily_em interface\n1.3.31 fix: fix stock_dzjy_mrmx interface\n1.3.32 fix: fix stock_dzjy_mrtj interface\n1.3.33 fix: fix stock_dzjy_yybph interface\n1.3.34 fix: fix stock_history_dividend interface\n1.3.35 add: add fund_purchase_em interface\n1.3.36 fix: fix futures_inventory_99 interface\n1.3.37 fix: fix stock_financial_analysis_indicator interface\n1.3.38 fix: fix index_value_name_funddb interface\n1.3.39 fix: fix macro_china_hb interface\n1.3.40 add: add stock_gdfx_free_holding_analyse_em interface\n1.3.41 add: add stock_gdfx_free_top_10_em interface\n1.3.42 add: add stock_gdfx_free_holding_detail_em interface\n1.3.43 add: add stock_gdfx_free_holding_change_em interface\n1.3.44 fix: fix stock_board_concept_name_ths interface\n1.3.45 add: add stock_gdfx_holding_change_em interface\n1.3.46 fix: fix futures_main_sina interface\n1.3.47 add: add stock_gdfx_free_holding_statistics_em interface\n1.3.48 add: add stock_gdfx_free_holding_teamwork_em interface\n1.3.49 fix: fix fund_open_fund_info_em interface\n1.3.50 fix: fix stock_notice_report interface\n1.3.51 fix: fix futures_comm_info interface\n1.3.52 fix: fix stock_hsgt_individual_detail_em interface\n1.3.53 fix: fix sw_index_cons interface\n1.3.54 fix: fix stock_em_qbzf interface\n1.3.55 fix: fix futures_comm_info interface\n1.3.56 fix: fix stock_hsgt_board_rank_em interface\n1.3.57 fix: fix futures_main_sina interface\n1.3.58 fix: fix stock_margin_detail_szse interface\n1.3.59 add: add covid_19_risk_area interface\n1.3.60 fix: fix covid_19_risk_area interface\n1.3.61 fix: fix futures_zh_spot interface\n1.3.62 fix: fix option_sse_spot_price_sina interface\n1.3.63 fix: fix option_finance_minute_sina interface\n1.3.64 fix: fix futures_foreign_commodity_realtime interface\n1.3.65 fix: fix option_sse_codes_sina interface\n1.3.66 fix: fix option_commodity_hist_sina interface\n1.3.67 add: add option_lhb_em interface\n1.3.68 fix: fix stock_hsgt_board_rank_em interface\n1.3.69 fix: fix stock_gdfx_free_holding_statistics_em interface\n1.3.70 fix: fix option_sse_spot_price_sina interface\n1.3.71 fix: fix stock_history_dividend_detail interface\n1.3.72 add: add option_value_analysis_em interface\n1.3.73 fix: fix stock_info_sh_delist interface\n1.3.74 fix: fix option_value_analysis_em interface\n1.3.75 add: add option_risk_analysis_em interface\n1.3.76 add: add option_premium_analysis_em interface\n1.3.77 fix: fix sw_index_daily_indicator interface\n1.3.78 fix: fix forbes_rank interface\n1.3.79 add: add dockerfile for aktools interface\n1.3.80 fix: fix dockerfile for aktools interface\n1.3.81 fix: fix release_and_deploy interface\n1.3.82 fix: fix dockerfile interface\n1.3.83 fix: fix dockerfile-jupyter\n1.3.84 fix: fix release_and_deploy\n1.3.85 fix: fix release_and_deploy.yml\n1.3.86 fix: fix master_dev_check.yml\n1.3.87 fix: fix master_dev_check.yml\n1.3.88 fix: fix master_dev_check.yml\n1.3.89 fix: fix master_dev_check.yml\n1.3.90 fix: fix master_dev_check.yml\n1.3.91 fix: fix master_dev_check.yml\n1.3.92 fix: fix docker image of akshare for jupyter and aktools\n1.3.93 fix: fix docs\n1.3.94 fix: fix akdocker.md\n1.3.95 fix: fix covid_19_risk_area interface\n1.3.96 fix: fix bond_china_close_return interface\n1.3.97 fix: fix stock_us_hist interface\n1.3.98 fix: fix stock_hk_hist interface\n1.3.99 fix: fix index_yw interface\n1.4.1 fix: fix index_yw interface\n1.4.2 add: add index_dei_cx interface\n1.4.3 add: add index_ii_cx interface\n1.4.4 add: add index_si_cx interface\n1.4.5 add: add index_pmi_com_cx interface\n1.4.6 add: add index_pmi_man_cx interface\n1.4.7 add: add index_pmi_ser_cx interface\n1.4.8 add: add sport_olympic_winter_hist interface\n1.4.9 fix: fix macro_cnbs interface\n1.4.10 fix: fix get_futures_daily interface\n1.4.11 fix: fix futures_spot_price_previous interface\n1.4.12 add: add stock_hot_rank_em interface\n1.4.13 add: add stock_hot_rank_detail_em interface\n1.4.14 add: add index_bi_cx interface\n1.4.15 add: add stock_hot_rank_detail_realtime_em interface\n1.4.16 fix: fix stock_hot_rank_detail_em interface\n1.4.17 fix: fix stock_hot_rank_wc interface\n1.4.18 fix: fix stock_hot_rank_wc interface\n1.4.19 fix: fix stock_price_js interface\n1.4.20 add: add index_awpr_cx interface\n1.4.21 fix: fix stock_zt_pool_em interface\n1.4.22 fix: fix option_sse_greeks_sina interface\n1.4.23 fix: rename all interface in option_finance_sina.py\n1.4.24 fix: fix stock_em_jgdy_tj interface\n1.4.25 add: add index_ci_cx interface\n1.4.26 fix: fix fund_purchase_em interface\n1.4.27 add: add index_cci_cx interface\n1.4.28 fix: fix stock_info_sz_name_code interface\n1.4.29 fix: fix stock_gdfx_free_holding_statistics_em interface\n1.4.30 add: add index_li_cx interface\n1.4.31 fix: fix docs interface\n1.4.32 add: add index_neaw_cx interface\n1.4.33 fix: fix docs interface\n1.4.34 add: add index_neaw_cx interface\n1.4.35 fix: fix stock_yysj_em interface\n1.4.36 add: add index_nei_cx interface\n1.4.37 add: add index_ti_cx interface\n1.4.38 fix: fix stock_fund_flow_individual interface\n1.4.39 add: add index_zh_a_hist_min_em interface\n1.4.40 add: add index_code_id_map_em interface\n1.4.41 fix: fix stock_hk_ggt_components_em interface\n1.4.42 add: add stock_hot_keyword_em interface\n1.4.43 fix: fix stock_fhps_em interface\n1.4.44 fix: fix stock_dxsyl_em interface\n1.4.45 fix: fix air_quality_rank interface\n1.4.46 fix: fix energy_oil_detail interface\n1.4.47 add: add interface change log\n1.4.48 fix: fix stock_sse_deal_daily interface\n1.4.49 fix: fix stock_sse_deal_daily interface\n1.4.50 add: add stock_hot_rank_detail_realtime_em interface\n1.4.51 add: add stock_hot_keyword_em interface\n1.4.52 add: add stock_hot_rank_latest_em interface\n1.4.53 add: add stock_hot_rank_relate_em interface\n1.4.54 fix: fix stock_hot_rank_relate_em interface\n1.4.55 fix: fix energy_carbon interface\n1.4.56 fix: fix index_detail_hist_cni and index_detail_cni interface\n1.4.57 fix: fix bond_spot_quote interface\n1.4.58 fix: fix stock_zh_kcb_daily interface\n1.4.59 add: add stock_zh_a_hist_163 interface\n1.4.60 fix: fix stock_zh_a_hist_163 interface\n1.4.61 fix: fix get_dce_daily interface\n1.4.62 fix: fix option_finance_board interface\n1.4.63 fix: fix macro_china_swap_rate interface\n1.4.64 fix: fix bond_china_close_return interface\n1.4.65 fix: fix spot_hist_sge interface\n1.4.66 fix: fix stock_gpzy_profile_em interface\n1.4.67 fix: fix crypto_name_url_table interface\n1.4.68 fix: fix crypto_hist interface\n1.4.69 fix: fix crypto_js_spot interface\n1.4.70 add: add stock_lhb_detail_em interface\n1.4.71 add: add stock_lhb_stock_detail_em interface\n1.4.72 add: add stock_lhb_stock_statistic_em interface\n1.4.73 add: add stock_lhb_jgmmtj_em interface\n1.4.74 fix: fix stock_lhb_stock_detail_em interface\n1.4.75 fix: fix stock_lhb_stock_detail_em interface\n1.4.76 add: add stock_lhb_stock_statistic_em interface\n1.4.77 fix: fix stock_hk_ggt_components_em interface\n1.4.78 add: add remove matplotlib module and support cache\n1.4.79 add: add stock_board_industry_hist_min_em interface\n1.4.80 add: add stock_board_concept_hist_min_em interface\n1.4.81 add: add fund_portfolio_change_em interface\n1.4.82 fix: fix stock_a_code_to_symbol interface\n1.4.83 add: add stock_us_code_table_fu interface\n1.4.84 fix: fix fund_portfolio_change_em interface\n1.4.85 add: add fund_portfolio_bond_hold_em interface\n1.4.86 fix: fix rename all interface in fund_aum_em.py\n1.4.87 add: add fund_portfolio_industry_allocation_em interface\n1.4.88 fix: fix fund_new_found_em interface\n1.4.89 fix: fix stock_us_hist interface\n1.4.90 add: add macro_china_bank_financing interface\n1.4.91 fix: fix macro_china_new_financial_credit interface\n1.4.92 add: add stock_lhb_hyyyb_em interface\n1.4.93 add: add macro_china_insurance_income interface\n1.4.94 add: add macro_china_mobile_number interface\n1.4.95 add: add bond_zh_cov_value_analysis interface\n1.4.96 fix: fix stock_sse_deal_daily interface\n1.4.97 fix: fix bond_spot_deal interface\n1.4.98 fix: fix stock_board_industry_hist_em interface\n1.4.99 add: add macro_china_vegetable_basket interface\n1.5.1 add: add macro_china_agricultural_product interface\n1.5.2 add: add macro_china_agricultural_index interface\n1.5.3 add: add macro_china_energy_index interface\n1.5.4 add: add macro_china_commodity_price_index interface\n1.5.5 add: add macro_global_sox_index interface\n1.5.6 add: add macro_china_yw_electronic_index interface\n1.5.7 add: add macro_china_construction_index interface\n1.5.8 add: add macro_china_construction_price_index interface\n1.5.9 fix: fix air_quality_hist interface\n1.5.10 fix: fix stock_gpzy_pledge_ratio_em and stock_gpzy_profile_em interface\n1.5.11 add: add index_bloomberg_billionaires_hist interface\n1.5.12 fix: fix stock_gpzy_pledge_ratio_detail_em interface\n1.5.13 add: add macro_china_lpi_index interface\n1.5.14 add: add macro_china_bdti_index interface\n1.5.15 fix: fix bond_cb_jsl interface\n1.5.16 fix: fix stock_info_sh_delist interface\n1.5.17 add: add macro_china_bsi_index interface\n1.5.18 fix: fix fund_open_fund_rank_em interface\n1.5.19 add: add futures_correlation_nh interface\n1.5.20 add: add futures_board_index_nh interface\n1.5.21 add: add futures_variety_index_nh interface\n1.5.22 fix: fix futures_correlation_nh interface\n1.5.23 fix: fix stock_board_concept_name_em interface\n1.5.24 fix: fix stock_profit_forecast interface\n1.5.25 fix: fix stock_analyst_rank_em and stock_analyst_detail_em interface\n1.5.26 fix: fix stock_comment_em interface\n1.5.27 fix: fix stock_comment_em interface\n1.5.28 fix: fix bond_zh_cov interface\n1.5.29 fix: fix index_zh_a_hist_min_em interface\n1.5.30 fix: fix hurun_rank interface\n1.5.31 fix: fix stock_individual_info_em interface\n1.5.32 add: add stock_comment_detail_zlkp_jgcyd_em interface\n1.5.33 fix: fix fund_fh_em interface\n1.5.34 fix: fix stock_gpzy_industry_data_em interface\n1.5.35 add: add stock_comment_detail_zhpj_lspf_em interface\n1.5.36 add: add stock_comment_detail_scrd_focus_em interface\n1.5.37 add: add stock_comment_detail_scrd_desire_em interface\n1.5.38 add: add stock_comment_detail_scrd_cost_em interface\n1.5.39 add: add stock_comment_detail_scrd_desire_daily_em interface\n1.5.40 fix: fix js_news interface\n1.5.41 fix: fix stock_margin_underlying_info_szse interface\n1.5.42 fix: fix stock_zt_pool_dtgc_em interface\n1.5.43 fix: fix stock_zt_pool_em interface\n1.5.44 fix: fix futures_to_spot_czce interface\n1.5.45 add: add stock_hot_deal_xq interface\n1.5.46 fix: fix stock_yzxdr_em interface\n1.5.47 fix: fix macro_china_lpr interface\n1.5.48 fix: fix futures_return_index_nh interface\n1.5.49 add: add stock_inner_trade_xq interface\n1.5.50 fix: fix covid_19_baidu interface\n1.5.51 fix: fix stock_zh_a_tick_163 interface\n1.5.52 fix: fix stock_ggcg_em interface\n1.5.53 fix: fix stock_zcfz_em interface\n1.5.54 fix: fix stock_lrb_em interface\n1.5.55 add: add stock_balance_sheet_by_report_em interface\n1.5.56 add: add stock_balance_sheet_by_yearly_em interface\n1.5.57 add: add stock_profit_sheet_by_report_em interface\n1.5.58 add: add stock_profit_sheet_by_quarterly_em interface\n1.5.59 add: add stock_profit_sheet_by_yearly_em interface\n1.5.60 fix: fix sw_index_second_spot interface\n1.5.61 add: add stock_cash_flow_sheet_by_report_em interface\n1.5.62 add: add stock_cash_flow_sheet_by_quarterly_em interface\n1.5.63 fix: fix import path problem\n1.5.64 fix: fix stock_cash_flow_sheet_by_yearly_em interface\n1.5.65 fix: fix stock_repurchase_em interface\n1.5.66 fix: fix crypto_hist interface\n1.5.67 add: add test function\n1.5.68 fix: fix test function\n1.5.69 fix: fix setup.py\n1.5.70 fix: fix stock_zh_a_spot interface\n1.5.71 fix: fix import path problem\n1.5.72 add: add news_economic_baidu interface\n1.5.73 fix: fix stock_notice_report interface\n1.5.74 add: add news_trade_notify_suspend_baidu interface\n1.5.75 fix: fix stock_financial_analysis_indicator interface\n1.5.76 add: add news_report_time_baidu interface\n1.5.77 fix: fix remove numpy dependency\n1.5.78 fix: fix stock_szse_summary interface\n1.5.79 add: add stock_szse_area_summary interface\n1.5.80 add: add stock_szse_sector_summary interface\n1.5.81 fix: fix macro_china_gdp_yearly interface\n1.5.82 add: add option_risk_indicator_sse interface\n1.5.83 fix: fix energy_oil_hist, energy_oil_detail interface\n1.5.84 fix: fix stock_three_report_em interface\n1.5.85 fix: fix stock_zh_a_hist interface\n1.5.86 fix: fix stock_us_fundamental interface\n1.5.87 fix: fix stock_tfp_em interface\n1.5.88 fix: fix stock_board_concept_name_ths interface\n1.5.89 fix: fix stock_info_sh_name_code interface\n1.5.90 fix: fix macro_china_bond_public interface\n1.5.91 add: add bond_cb_index_jsl interface\n1.5.92 fix: fix rate_interbank interface\n1.5.93 fix: fix stock_zh_a_hist interface\n1.5.94 add: add bond_cb_redeem_jsl interface\n1.5.95 fix: fix stock_zh_a_hist_163 interface\n1.5.96 fix: fix macro_bank_usa_interest_rate interface\n1.5.97 fix: fix stock_zh_a_hist interface\n1.5.98 fix: fix news_cctv interface\n1.5.99 fix: fix stock_zh_a_hist_163 interface\n1.6.1 fix: fix stock_info_sh_name_code interface\n1.6.2 fix: fix macro_china_cpi interface\n1.6.3 fix: fix stock_info_a_code_name and stock_info_sh_delist interface\n1.6.4 fix: fix stock_info_a_code_name interface\n1.6.5 fix: fix stock_board_cons_ths interface\n1.6.6 fix: fix fund_etf_hist_sina interface\n1.6.7 add: add futures_zh_realtime interface\n1.6.8 fix: fix futures_zh_spot interface\n1.6.9 fix: fix stock_zh_a_spot_em interface\n1.6.10 add: add stock_sh_a_spot_em interface\n1.6.11 add: add stock_sz_a_spot_em interface\n1.6.12 add: add stock_bj_a_spot_em interface\n1.6.13 add: add stock_new_a_spot_em interface\n1.6.14 fix: fix stock_hsgt_board_rank_em interface\n1.6.15 fix: fix bond_zh_cov_info interface\n1.6.16 fix: fix baidu_search_index interface\n1.6.17 fix: fix stock_new_a_spot_em interface\n1.6.18 fix: fix stock_zh_a_spot_em interface\n1.6.19 fix: fix stock_comment_detail_zlkp_jgcyd_em interface\n1.6.20 fix: fix stock_board_industry_name_em and code_id_map_em interface\n1.6.21 fix: fix baidu_search_index interface\n1.6.22 add: add stock_kc_a_spot_em interface\n1.6.23 fix: fix bond_cb_index_jsl interface\n1.6.24 fix: fix bond_cb_index_jsl interface\n1.6.25 fix: fix bond_cb_index_jsl interface\n1.6.26 fix: fix bond_cb_index_jsl interface\n1.6.27 fix: fix currency_boc_sina interface\n1.6.28 add: add currency_boc_safe interface\n1.6.29 fix: fix stock_board_industry_name_em interface\n1.6.30 fix: fix stock_info_a_code_name interface\n1.6.31 fix: fix stock_gdfx_free_holding_detail_em interface\n1.6.32 fix: fix get_czce_daily interface\n1.6.33 fix: fix stock_report_fund_hold_detail interface\n1.6.34 fix: fix fx_spot_quote interface\n1.6.35 fix: fix stock_zh_index_hist_csindex interface\n1.6.36 fix: fix option_finance_board interface\n1.6.37 fix: remove futures_inventory_99 interface\n1.6.38 add: add stock_zygc_ym interface\n1.6.39 fix: fix futures_symbol_mark interface\n1.6.40 add: add stock_mda_ym interface\n1.6.41 add: add futures_inventory_99 interface\n1.6.42 fix: fix stock_balance_sheet_by_yearly_em interface\n1.6.43 fix: fix futures_inventory_99 interface\n1.6.44 fix: fix futures_inventory_em interface\n1.6.45 fix: fix stock_zh_index_hist_csindex interface\n1.6.46 fix: fix fund_open_fund_info_em interface\n1.6.47 fix: fix stock_zh_a_minute interface\n1.6.48 fix: fix stock_report_disclosure interface\n1.6.49 fix: fix stock_zh_a_alerts_cls interface\n1.6.50 add: add stock_industry_category_cninfo interface\n1.6.51 fix: fix stock_analyst_detail_em interface\n1.6.52 fix: fix index_zh_a_hist interface\n1.6.53 fix: fix fx_spot_quote interface\n1.6.54 fix: fix stock_hsgt_hold_stock_em interface\n1.6.55 fix: fix stock_gdfx_free_holding_analyse_em interface\n1.6.56 fix: fix index_zh_a_hist interface\n1.6.57 fix: fix stock_info_sh_name_code interface\n1.6.58 fix: fix stock_gdfx_holding_analyse_em interface\n1.6.59 add: add stock_industry_change_cninfo interface\n1.6.60 add: add stock_telegraph_cls interface\n1.6.61 fix: fix futures_shfe_warehouse_receipt interface\n1.6.62 fix: fix futures_zh_spot interface\n1.6.63 fix: fix fund_portfolio_em and futures_roll_yield interface\n1.6.64 fix: fix index_investing_global interface\n1.6.65 fix: fix bond_cb_redeem_jsl interface\n1.6.66 fix: fix stock_balance_sheet_by_report_em interface\n1.6.67 fix: fix stock_zh_a_alerts_cls interface\n1.6.68 fix: fix stock_zh_a_minute interface\n1.6.69 add: add fund_info_index_em interface\n1.6.70 add: add bond_zh_hs_cov_pre_min interface\n1.6.71 fix: fix bond_zh_hs_cov_pre_min interface\n1.6.72 add: add futures_news_shmet interface\n1.6.73 fix: fix macro_china_rmb interface\n1.6.74 add: add option_cffex_zz1000_list_sina interface\n1.6.75 add: add option_cffex_zz1000_spot_sina interface\n1.6.76 add: add pycryptodomex library\n1.6.77 fix: fix stock_telegraph_cls interface\n1.6.78 fix: fix stock_telegraph_cls interface\n1.6.79 fix: fix fund_rating_all interface\n1.6.80 fix: fix index_investing_global interface\n1.6.81 fix: fix currency_hist interface\n1.6.82 fix: fix option_cffex_hs300_spot_sina interface\n1.6.83 fix: fix option_dce_daily interface\n1.6.84 fix: fix stock_zt_pool_em interface\n1.6.85 fix: fix option_finance_board interface\n1.6.86 fix: fix stock_gpzy_distribute_statistics_bank_em interface\n1.6.87 fix: fix stock_ggcg_em interface\n1.6.88 fix: fix option_cffex_zz1000_spot_sina interface\n1.6.89 fix: fix stock_board_concept_name_ths interface\n1.6.90 fix: fix macro_china_cpi_yearly interface\n1.6.91 fix: fix forbes_rank interface\n1.6.92 fix: fix hurun_rank interface\n1.6.93 fix: fix index_vix interface\n1.6.94 fix: fix macro_china_hk_market_info interface\n1.6.95 fix: fix energy_oil_detail interface\n1.6.96 fix: fix macro_china_bond_public interface\n1.6.97 fix: fix macro_china_real_estate interface\n1.6.98 fix: fix macro_china_real_estate interface\n1.6.99 fix: fix macro_china_fx_gold interface\n1.7.1 fix: fix fund_etf_fund_info_em interface\n1.7.2 fix: fix futures_egg_price_yearly interface\n1.7.3 fix: fix stock_profit_sheet_by_report_em interface\n1.7.4 fix: fix stock_analyst_rank_em interface\n1.7.5 fix: fix fund_fh_em interface\n1.7.6 fix: fix covid_19_risk_area interface\n1.7.7 add: add index_level_one_hist_sw interface\n1.7.8 add: add index_style_index_hist_sw interface\n1.7.9 add: add index_market_representation_hist_sw interface\n1.7.10 fix: fix option_czce_daily interface\n1.7.11 fix: fix bond_cash_summary_sse interface\n1.7.12 fix: fix stock_repurchase_em interface\n1.7.13 fix: fix stock_balance_sheet_by_yearly_em interface\n1.7.14 fix: fix covid_19_risk_area interface\n1.7.15 fix: fix news_economic_baidu interface\n1.7.16 fix: fix crypto_js_spot interface\n1.7.17 fix: fix bond_cb_jsl interface\n1.7.18 fix: fix stock_lhb_jgmmtj_em interface\n1.7.19 fix: fix index_value_name_funddb interface\n1.7.20 fix: fix crypto_js_spot interface\n1.7.21 fix: fix futures_hog_info interface\n1.7.22 add: add index_investing_global_area_index_name_url interface\n1.7.23 fix: fix rename futures_pig_info and futures_pig_rank interface\n1.7.24 fix: fix amac_manager_classify_info interface\n1.7.25 add: add news_trade_notify_dividend_baidu interface\n1.7.26 add: add bond_new_composite_index_cbond interface\n1.7.27 fix: fix stock_qsjy_em interface\n1.7.28 fix: fix stock_info_sh_name_code interface\n1.7.29 fix: fix stock_us_daily interface\n1.7.30 fix: fix bond_cb_index_jsl interface\n1.7.31 fix: fix stock_a_lg_indicator interface\n1.7.32 fix: fix stock_a_ttm_lyr interface\n1.7.33 fix: fix stock_zh_ah_daily interface\n1.7.34 fix: fix bond_cb_jsl interface\n1.7.35 fix: fix stock_market_fund_flow interface\n1.7.36 fix: fix rename branch master to main\n1.7.37 add: add sw_index_first_info interface\n1.7.38 add: add sw_index_second_info interface\n1.7.39 add: add stock_sgt_settlement_exchange_rate_szse interface\n1.7.40 add: add stock_sgt_settlement_exchange_rate_sse interface\n1.7.41 add: add stock_sgt_reference_exchange_rate_sse interface\n1.7.42 add: add stock_sgt_reference_exchange_rate_szse interface\n1.7.43 fix: fix stock_a_all_pb interface\n1.7.44 add: add stock_allotment_cninfo interface\n1.7.45 add: add stock_hk_valuation_baidu interface\n1.7.46 fix: fix stock_hk_valuation_baidu interface\n1.7.47 add: add stock_zh_valuation_baidu interface\n1.7.48 add: add stock_zh_vote_baidu interface\n1.7.49 add: add futures_news_baidu interface\n1.7.50 add: add stock_hot_search_baidu interface\n1.7.51 fix: fix stock_a_lg_indicator interface\n1.7.52 fix: fix stock_sse_summary interface\n1.7.53 add: add stock_buffett_index_lg interface\n1.7.54 fix: fix stock_a_lg_indicator interface\n1.7.55 add: add fx_quote_baidu interface\n1.7.56 fix: fix stock_buffett_index_lg interface\n1.7.57 fix: fix stock_a_high_low_statistics interface\n1.7.58 fix: fix bond_cb_redeem_jsl interface\n1.7.59 fix: fix stock_a_high_low_statistics interface\n1.7.60 fix: fix stock_zh_a_spot_em interface\n1.7.61 add: add option_50etf_qvix interface\n1.7.62 add: add option_300etf_qvix interface\n1.7.63 add: add option_300etf_min_qvix interface\n1.7.64 add: add option_50etf_min_qvix interface\n1.7.65 fix: fix futures_rule interface\n1.7.66 add: add index_realtime_sw interface\n1.7.67 fix: fix xincaifu_rank interface\n1.7.68 fix: fix hurun_rank interface\n1.7.69 add: add index_hist_sw interface\n1.7.70 fix: fix index_hist_sw interface\n1.7.71 add: add support for Python 3.11\n1.7.72 add: add index_min_sw interface\n1.7.73 fix: fix stock_zh_index_daily_tx interface\n1.7.74 fix: fix futures_news_baidu interface\n1.7.75 add: add index_component_sw interface\n1.7.76 fix: fix macro_euro_gdp_yoy interface\n1.7.77 fix: fix index_value_hist_funddb interface\n1.7.78 add: add index_analysis_sw interface\n1.7.79 fix: fix macro_germany interface\n1.7.80 fix: fix stock_a_below_net_asset_statistics interface\n1.7.81 fix: fix macro_swiss_svme interface\n1.7.82 fix: fix index_analysis_daily_sw interface\n1.7.83 fix: fix macro_japan interface\n1.7.84 add: add bond_info_cm interface\n1.7.85 fix: fix stock_board_industry_hist_em interface\n1.7.86 fix: fix bond_info_cm interface\n1.7.87 fix: fix macro_uk interface\n1.7.88 fix: fix stock_news_em interface\n1.7.89 fix: fix stock_zh_index_daily_tx interface\n1.7.90 fix: fix stock_yjbb_em interface\n1.7.91 fix: fix futures_price_index_nh interface\n1.7.92 fix: fix fund_portfolio_hold_em interface\n1.7.93 fix: fix sw_index_third_cons interface\n1.7.94 fix: fix fund_portfolio_hold_em interface\n1.7.95 fix: fix spot_golden_benchmark_sge interface\n1.7.96 fix: fix futures_hog_info interface\n1.7.97 add: add index_hog_spot_price interface\n1.7.98 fix: fix stock_zh_a_gdhs interface\n1.7.99 fix: fix stock_lhb_detail_daily_sina interface\n1.8.1 fix: fix stock_dxsyl_em interface\n1.8.2 fix: fix fund_portfolio_hold_em interface\n1.8.3 fix: fix stock_pg_em interface\n1.8.4 fix: fix macro_china_hgjck interface\n1.8.5 fix: fix stock_a_lg_indicator interface\n1.8.6 fix: fix stock_market_activity_legu interface\n1.8.7 fix: fix stock_a_below_net_asset_statistics interface\n1.8.8 fix: fix macro_china_gdp interface\n1.8.9 fix: fix stock_a_ttm_lyr interface\n1.8.10 fix: fix stock_a_all_pb interface\n1.8.11 fix: fix macro_china_ppi interface\n1.8.12 fix: fix stock_yjyg_em interface\n1.8.13 fix: fix macro_china_new_house_price interface\n1.8.14 add: add stock_board_industry_summary_ths interface\n1.8.15 fix: fix stock_price_js interface\n1.8.16 fix: fix macro_china_swap_rate interface\n1.8.17 fix: fix macro_china_fdi interface\n1.8.18 add: add stock_hsgt_fund_flow_summary_em interface\n1.8.19 fix: fix stock_balance_sheet_by_yearly_em interface\n1.8.20 fix: fix stock_board_concept_hist_em interface\n1.8.21 fix: fix stock_board_concept_hist_em interface\n1.8.22 fix: fix stock_margin_detail_szse interface\n1.8.23 add: add stock_restricted_release_summary_em interface\n1.8.24 fix: fix stock_ipo_benefit_ths interface\n1.8.25 fix: fix stock_circulate_stock_holder interface\n1.8.26 fix: fix bond_china_close_return_map interface\n1.8.27 fix: fix fund_cf_em interface\n1.8.28 fix: fix fund_fh_rank_em interface\n1.8.29 fix: fix baidu_search_index interface\n1.8.30 fix: fix index_value_name_funddb interface\n1.8.31 fix: fix get_dce_daily interface\n1.8.32 fix: fix js_news interface\n1.8.33 fix: fix stock_hot_rank_em interface\n1.8.34 add: add stock_a_gxl_lg interface\n1.8.35 add: add stock_hk_gxl_lg interface\n1.8.36 add: add stock_a_congestion_lg interface\n1.8.37 add: add fund_stock_position_lg interface\n1.8.38 fix: fix macro_cons_gold interface\n1.8.39 add: add stock_board_change_em interface\n1.8.40 add: add fund_balance_position_lg interface\n1.8.41 add: add futures_index_ccidx interface\n1.8.42 add: add get_gfex_daily interface\n1.8.43 add: add stock_ebs_lg interface\n1.8.44 fix: fix stock_info_bj_name_code interface\n1.8.45 fix: fix calendar.json\n1.8.46 fix: fix get_roll_yield_bar interface\n1.8.47 add: add option_cffex_sz50_list_sina interface\n1.8.48 add: add fund_etf_hist_em interface\n1.8.49 fix: fix futures_comm_info interface\n1.8.50 fix: fix stock_us_daily interface\n1.8.51 fix: fix fortune_rank interface\n1.8.52 fix: fix index_value_hist_funddb interface\n1.8.53 fix: fix stock_hot_rank_wc interface\n1.8.54 fix: fix get_roll_yield_bar interface\n1.8.55 fix: fix macro_usa_pmi interface\n1.8.56 fix: fix stock_hk_valuation_baidu interface\n1.8.57 fix: fix stock_szse_summary interface\n1.8.58 fix: fix get_calendar interface\n1.8.59 fix: fix stock_zh_valuation_baidu interface\n1.8.60 fix: fix hurun_rank interface\n1.8.61 fix: fix futures_comm_info interface\n1.8.62 fix: fix stock_board_industry_index_ths interface\n1.8.63 fix: fix stock_cash_flow_sheet_by_report_em interface\n1.8.64 fix: fix stock_ggcg_em interface\n1.8.65 fix: fix get_roll_yield_bar interface\n1.8.66 fix: fix python 3.7.x support\n1.8.67 fix: fix python warning 3.7.x support\n1.8.68 fix: fix stock_individual_fund_flow interface\n1.8.69 fix: fix stock_individual_fund_flow_rank interface\n1.8.70 add: add stock_market_pe_lg interface\n1.8.71 add: add stock_zygc_em interface\n1.8.72 fix: fix drewry_wci_index interface\n1.8.73 add: add stock_zyjs_ths interface\n1.8.74 fix: fix drewry_wci_index interface\n1.8.75 add: add stock_cy_a_spot_em interface\n1.8.76 remove: remove js_news and ws interface\n1.8.77 fix: fix stock_analyst_rank_em interface\n1.8.78 fix: fix stock_profit_forecast interface\n1.8.79 fix: fix stock_hk_valuation_baidu interface\n1.8.80 fix: fix stock_profit_forecast interface\n1.8.81 fix: fix futures_hog_info interface\n1.8.82 fix: fix stock_fund_stock_holder interface\n1.8.83 fix: fix stock_info_sh_name_code interface\n1.8.84 remove: remove stock_zh_a_scr_report interface\n1.8.85 fix: fix stock_info_sh_name_code interface\n1.8.86 fix: fix stock_info_sh_delist interface\n1.8.87 fix: fix stock_info_sz_change_name interface\n1.8.88 fix: fix stock_info_sz_delist interface\n1.8.89 fix: fix sunrise_city_list interface\n1.8.90 fix: fix bond_info_detail_cm interface\n1.8.91 fix: fix sunrise_monthly interface\n1.8.92 fix: fix stock_institute_hold interface\n1.8.93 fix: fix stock_gdfx_holding_detail_em interface\n1.8.94 fix: fix Dockerfile\n1.8.95 fix: fix index_zh_a_hist interface\n1.8.96 fix: fix option_finance_board interface\n1.8.97 fix: fix futures_egg_price_yearly interface\n1.8.98 fix: fix stock_info_sz_delist interface\n1.8.99 add: add futures_news_shmet interface\n1.9.1 fix: fix index_value_name_funddb interface\n1.9.2 fix: fix stock_xgsglb_em interface\n1.9.3 fix: fix fx_quote_baidu interface\n1.9.4 fix: fix drewry_wci_index interface\n1.9.5 fix: fix stock_info_a_code_name interface\n1.9.6 fix: fix futures_hog_info interface\n1.9.7 add: add stock_profit_forecast_ths interface\n1.9.8 fix: fix stock_hk_valuation_baidu interface\n1.9.9 add: add macro_shipping_bci interface\n1.9.10 add: add macro_shipping_bcti interface\n1.9.11 add: add stock_sector_fund_flow_hist interface\n1.9.12 fix: fix stock_hot_rank_wc interface\n1.9.13 fix: fix stock_zh_valuation_baidu interface\n1.9.14 fix: fix option_risk_analysis_em interface\n1.9.15 fix: fix stock_hk_daily interface\n1.9.16 fix: fix stock_financial_abstract interface\n1.9.17 add: add stock_board_industry_spot_em interface\n1.9.18 fix: fix macro_china_market_margin_sh interface\n1.9.19 fix: fix macro_cnbs interface\n1.9.20 fix: fix fund_financial_fund_info_em interface\n1.9.21 fix: fix fund_financial_fund_info_em interface\n1.9.22 fix: fix fund_hk_fund_hist_em interface\n1.9.23 fix: fix bond_cb_redeem_jsl interface\n1.9.24 fix: fix bond_cb_adj_logs_jsl interface\n1.9.25 add: add stock_hk_hot_rank_em interface\n1.9.26 fix: fix bond_cb_jsl interface\n1.9.27 fix: fix fund_exchange_rank_em interface\n1.9.28 fix: fix stock_financial_report_sina interface\n1.9.29 fix: fix stock_a_lg_indicator interface\n1.9.30 fix: fix stock_a_lg_indicator interface\n1.9.31 fix: fix amac_fund_info interface\n1.9.32 fix: fix bank_fjcf_table_detail interface\n1.9.33 add: add stock_hk_main_board_spot_em interface\n1.9.34 fix: fix stock_zh_a_tick_tx_js interface\n1.9.35 fix: fix stock_a_lg_indicator interface\n1.9.36 fix: fix stock_market_pe_lg interface\n1.9.37 fix: fix stock_hk_indicator_eniu interface\n1.9.38 fix: fix stock_a_lg_indicator interface\n1.9.39 fix: fix fund_stock_position_lg interface\n1.9.40 fix: fix stock_profit_forecast_em interface\n1.9.41 fix: fix stock_a_indicator_lg interface\n1.9.42 add: add stock_bid_ask_em interface\n1.9.43 fix: fix stock_a_congestion_lg interface\n1.9.44 fix: fix stock_a_high_low_statistics interface\n1.9.45 add: add stock_fhps_detail_ths interface\n1.9.46 fix: fix stock_a_gxl_lg interface\n1.9.47 fix: fix option_dce_daily interface\n1.9.48 fix: fix index_stock_cons interface\n1.9.49 add: add stock_lhb_yybph_em interface\n1.9.50 fix: fix stock_a_all_pb interface\n1.9.51 fix: fix get_shfe_daily interface\n1.9.52 fix: fix get_shfe_rank_table interface\n1.9.53 fix: fix get_ine_daily interface\n1.9.54 fix: fix stock_board_concept_cons_ths interface\n1.9.55 fix: fix stock_zh_valuation_baidu interface\n1.9.56 fix: fix get_receipt interface\n1.9.57 fix: fix stock_lhb_detail_em interface\n1.9.58 add: add option_gfex_daily interface\n1.9.59 fix: fix stock_hot_search_baidu interface\n1.9.60 add: add stock_hk_fhpx_detail_ths interface\n1.9.61 fix: fix stock_lhb_detail_daily_sina interface\n1.9.62 fix: fix bond_zh_us_rate interface\n1.9.63 fix: fix get_czce_rank_table interface\n1.9.64 fix: fix stock_a_indicator_lg interface\n1.9.65 fix: fix stock_hot_search_baidu interface\n1.9.66 fix: fix match_main_contract interface\n1.9.67 fix: fix futures_zh_daily_sina interface\n1.9.68 fix: fix stock_lh_yyb_capital interface\n1.9.69 fix: fix stock_lh_yyb_capital interface\n1.9.70 fix: fix stock_szse_sector_summary interface\n1.9.71 fix: fix stock_lh_yyb_most interface\n1.9.72 fix: fix fund_manager interface\n1.9.73 add: add bond_zh_cov_info_ths interface\n1.9.74 fix: fix get_shfe_rank_table interface\n1.9.75 fix: fix stock_board_industry_index_ths interface\n1.9.76 fix: fix stock_sector_detail interface\n1.9.77 fix: fix stock_hot_rank_wc interface\n1.9.78 fix: fix macro_usa_gdp_monthly interface\n1.9.79 fix: fix stock_sse_deal_daily interface\n1.9.80 fix: fix futures_spot_price interface\n1.9.81 add: add stock_hk_index_spot_sina interface\n1.9.82 fix: fix currency_boc_safe interface\n1.9.83 add: add stock_concept_fund_flow_hist interface\n1.9.84 fix: fix stock_hk_fhpx_detail_ths interface\n1.9.85 fix: fix option_dce_daily interface\n1.9.86 fix: fix index_kq_fz interface\n1.9.87 add: add option_minute_em interface\n1.9.88 fix: fix setup.py\n1.9.89 fix: fix index_kq_fz interface\n1.9.90 fix: fix stock_sse_deal_daily interface\n1.9.91 add: add stock_financial_abstract_ths interface\n1.9.92 fix: fix article_ff_crr interface\n1.9.93 fix: fix index_level_one_hist_sw interface\n1.9.94 fix: fix stock_a_indicator_lg interface\n1.9.95 fix: fix stock_zh_index_hist_csindex interface\n1.9.96 fix: fix stock_hold_control_cninfo interface\n1.9.97 fix: fix stock_industry_category_cninfo interface\n1.9.98 fix: fix stock_hold_control_cninfo interface\n1.9.99 fix: fix stock_hold_num_cninfo interface\n1.10.1 fix: fix stock_hold_control_cninfo interface\n1.10.2 fix: fix stock_gdfx_holding_detail_em interface\n1.10.3 fix: fix stock_gdfx_holding_analyse_em interface\n1.10.4 fix: fix futures_return_index_nh interface\n1.10.5 fix: fix index_level_one_hist_sw interface\n1.10.6 fix: fix futures_nh_volatility_index interface\n1.10.7 fix: fix option_finance_board interface\n1.10.8 fix: fix futures_volatility_index_nh interface\n1.10.9 fix: fix bond_zh_hs_cov_min interface\n1.10.10 fix: fix stock_zh_a_hist interface\n1.10.11 fix: fix stock_zh_a_hist_pre_min_em interface\n1.10.12 fix: fix bond_cb_adj_logs_jsl interface\n1.10.13 fix: fix stock_share_change_cninfo interface\n1.10.14 fix: fix bond_zh_hs_cov_min interface\n1.10.15 fix: fix bond_zh_hs_cov_pre_min interface\n1.10.16 fix: fix bond_zh_hs_cov_min interface\n1.10.17 fix: fix stock_allotment_cninfo interface\n1.10.18 fix: fix index_yw interface\n1.10.19 fix: fix bond_treasure_issue_cninfo interface\n1.10.20 fix: fix stock_new_gh_cninfo interface\n1.10.21 fix: fix fund_report_stock_cninfo interface\n1.10.22 fix: fix macro_china_cpi_monthly interface\n1.10.23 fix: fix index_kq_fz interface\n1.10.24 fix: fix stock_zh_a_daily interface\n1.10.25 fix: fix index_sugar_msweet interface\n1.10.26 add: add stock_hot_up_em interface\n1.10.27 fix: fix stock_hot_up_em interface\n1.10.28 fix: fix stock_hot_up_em interface\n1.10.29 fix: fix stock_zh_index_daily_em interface\n1.10.30 fix: fix stock_info_sz_name_code interface\n1.10.31 fix: fix zh_subscribe_exchange_symbol interface\n1.10.32 fix: fix get_cffex_daily interface\n1.10.33 fix: fix index_sugar_msweet interface\n1.10.34 fix: fix futures_display_main_sina interface\n1.10.35 add: add get_gfex_receipt interface\n1.10.36 fix: fix stock_sy_profile_em interface\n1.10.37 rem: rem index_stock_hist interface\n1.10.38 fix: fix stock_board_industry_hist_min_em interface\n1.10.39 fix: fix stock_board_concept_hist_min_em interface\n1.10.40 fix: fix futures_news_baidu interface\n1.10.41 add: add fund_lof_hist_em interface\n1.10.42 fix: fix fund_rating_all interface\n1.10.43 rem: rem index_vix interface\n1.10.44 fix: fix get_shfe_rank_table interface\n1.10.45 fix: fix stock_zh_a_minute interface\n1.10.46 fix: fix index_value_hist_funddb interface\n1.10.47 add: add stock_esg_rate_sina interface\n1.10.48 add: add stock_esg_hz_sina interface\n1.10.49 fix: fix stock_hot_rank_em interface\n1.10.50 fix: fix car_energy_sale_cpca interface\n1.10.51 fix: fix fund_money_rank_em interface\n1.10.52 fix: fix stock_financial_hk_report_em interface\n1.10.53 fix: fix index_stock_cons_csindex interface\n1.10.54 fix: fix macro_usa_core_cpi_monthly interface\n1.10.55 fix: fix macro_usa_personal_spending interface\n1.10.56 fix: fix stock_zh_b_daily interface\n1.10.57 fix: fix stock_zh_valuation_baidu interface\n1.10.58 fix: fix fund_etf_hist_em interface\n1.10.59 add: add fund_announcement_personnel_em interface\n1.10.60 add: add macro_usa_cpi_yoy interface\n1.10.61 fix: fix macro_cnbs interface\n1.10.62 fix: fix index_hist_sw interface\n1.10.63 fix: fix stock_esg_hz_sina interface\n1.10.64 fix: fix stock_zh_b_spot interface\n1.10.65 fix: fix macro_china_lpr interface\n1.10.66 fix: fix stock_financial_report_sina interface\n1.10.67 rem: rem futures_egg_price_yearly interface\n1.10.68 fix: fix option_gfex_daily interface\n1.10.69 fix: fix currency_latest interface\n1.10.70 fix: fix stock_zh_a_hist interface\n1.10.71 fix: fix stock_us_hist interface\n1.10.72 fix: fix stock_financial_hk_report_em interface\n1.10.73 add: add stock_irm_cninfo interface\n1.10.74 add: add stock_sns_sseinfo interface\n1.10.75 add: add macro_china_urban_unemployment interface\n1.10.76 fix: fix stock_notice_report interface\n1.10.77 add: add bond_cb_profile_sina interface\n1.10.78 fix: fix get_cffex_rank_table interface\n1.10.79 add: add stock_hold_management_detail_em interface\n1.10.80 fix: fix macro_china_gyzjz interface\n1.10.81 fix: fix stock_bid_ask_em interface\n1.10.82 fix: fix currency_boc_sina interface\n1.10.83 add: add stock_industry_clf_hist_sw interface\n1.10.84 fix: fix stock_us_fundamental interface\n1.10.85 fix: fix stock_hot_rank_wc interface\n1.10.86 add: add stock_gddh_em interface\n1.10.87 add: add stock_zdhtmx_em interface\n1.10.88 add: add stock_research_report_em interface\n1.10.89 add: add stock_share_hold_change_bse interface\n1.10.90 fix: fix futures_comex_inventory interface\n1.10.91 fix: fix stock_share_hold_change_szse interface\n1.10.92 fix: fix stock_individual_fund_flow interface\n1.10.93 add: add stock_ipo_summary_cninfo interface\n1.10.94 add: add macro_china_nbs_nation interface\n1.10.95 fix: fix crypto_bitcoin_cme interface\n1.10.96 fix: fix stock_hk_daily interface\n1.10.97 fix: fix stock_financial_analysis_indicator interface\n1.10.98 fix: fix get_cffex_rank_table interface\n1.10.99 fix: fix crypto_bitcoin_cme interface\n1.11.1 add: add index_us_stock_sina interface\n1.11.2 fix: fix stock_a_below_net_asset_statistics interface\n1.11.3 fix: fix stock_a_high_low_statistics interface\n1.11.4 fix: fix bond_cb_profile_sina interface\n1.11.5 fix: fix macro_china_hk_cpi interface\n1.11.6 fix: fix futures_main_sina interface\n1.11.7 fix: fix get_futures_daily interface\n1.11.8 fix: fix news_economic_baidu interface\n1.11.9 fix: fix currency_boc_safe interface\n1.11.10 fix: fix bond_new_composite_index_cbond interface\n1.11.11 fix: fix spot_hist_sge interface\n1.11.12 fix: fix stock_board_concept_hist_ths interface\n1.11.13 fix: fix futures_comm_info interface\n1.11.14 fix: fix migration_area_baidu interface\n1.11.15 fix: fix stock_dividend_cninfo interface\n1.11.16 fix: fix stock_dividend_cninfo interface\n1.11.17 fix: fix futures_spot_price_daily interface\n1.11.18 fix: fix get_rank_sum_daily interface\n1.11.19 fix: fix drewry_wci_index interface\n1.11.20 fix: fix option_dce_daily interface\n1.11.21 fix: fix get_dce_daily interface\n1.11.22 fix: fix option_dce_daily interface\n1.11.23 fix: fix macro_china_society_traffic_volume interface\n1.11.24 fix: fix macro_china_postal_telecommunicational interface\n1.11.25 fix: fix macro_china_central_bank_balance interface\n1.11.26 fix: fix macro_china_supply_of_money interface\n1.11.27 fix: fix stock_margin_detail_szse interface\n1.11.28 fix: fix stock_margin_detail_szse interface\n1.11.29 fix: fix bond_new_composite_index_cbond interface\n1.11.30 fix: fix stock_zh_a_st_em interface\n1.11.31 fix: fix futures_dce_warehouse_receipt interface\n1.11.32 add: add stock_margin_ratio_pa interface\n1.11.33 add: add stock_intraday_em interface\n1.11.34 add: add stock_board_concept_graph_ths interface\n1.11.35 fix: fix stock_board_concept_hist_ths interface\n1.11.36 add: add stock_fear_greed_funddb interface\n1.11.37 fix: fix index_fear_greed_funddb interface\n1.11.38 fix: fix setup.py interface\n1.11.39 fix: fix index_option_50etf_qvix interface\n1.11.40 fix: fix index_option_300etf_qvix interface\n1.11.41 fix: fix index_weibo_sina interface\n1.11.42 fix: fix stock_gpzy_pledge_ratio_em interface\n1.11.43 fix: fix get_futures_daily interface\n1.11.44 add: add stock_cyq_em interface\n1.11.45 add: add stock_balance_sheet_by_report_delisted_em interface\n1.11.46 add: add akracer support\n1.11.47 add: add akracer 0.0.8 support\n1.11.48 fix: fix installation.md\n1.11.49 add: add aarch64 support\n1.11.50 fix: fix amac_fund_abs support\n1.11.51 fix: fix stock_zh_a_daily interface\n1.11.52 fix: fix fund_scale_change_em interface\n1.11.53 add: add stock_zh_a_hist_tx interface\n1.11.54 fix: fix fund_portfolio_hold_em interface\n1.11.55 fix: fix fund_portfolio_bond_hold_em interface\n1.11.56 fix: fix stock_balance_sheet_by_report_delisted_em interface\n1.11.57 fix: fix stock_zt_pool_em interface\n1.11.58 fix: fix bond_china_close_return interface\n1.11.59 fix: fix fund_portfolio_change_em interface\n1.11.60 fix: fix bond_china_close_return interface\n1.11.61 fix: fix fund_manager_em interface\n1.11.62 fix: fix stock_zt_pool_dtgc_em interface\n1.11.63 fix: fix fund_scale_open_sina interface\n1.11.64 fix: fix futures_settlement_price_sgx interface\n1.11.65 fix: fix futures_index_ccidx interface\n1.11.66 fix: fix fund_scale_structured_sina interface\n1.11.67 fix: fix currency_boc_sina interface\n1.11.68 fix: fix fund_aum_em interface\n1.11.69 add: add futures_gfex_position_rank interface\n1.11.70 fix: fix futures_gfex_position_rank interface\n1.11.71 fix: fix stock_balance_sheet_by_report_em interface\n1.11.72 fix: fix get_rank_sum_daily interface\n1.11.73 fix: fix futures_comex_inventory interface\n1.11.74 fix: fix stock_comment_em interface\n1.11.75 fix: fix futures_comex_inventory interface\n1.11.76 fix: fix option_czce_daily interface\n1.11.77 fix: fix futures_zh_spot interface\n1.11.78 add: add stock_financial_benefit_ths interface\n1.11.79 fix: fix get_receipt interface\n1.11.80 fix: fix stock_cash_flow_sheet_by_report_em interface\n1.11.81 fix: fix stock_gdfx_free_holding_detail_em interface\n1.11.82 fix: fix bond_zh_us_rate interface\n1.11.83 fix: fix stock_zt_pool_strong_em interface\n1.11.84 fix: fix fund_name_em interface\n1.11.85 fix: fix stock_market_activity_legu interface\n1.11.86 fix: fix stock_telegraph_cls interface\n1.11.87 fix: fix futures_board_index_nh interface\n1.11.88 fix: fix macro_china_swap_rate interface\n1.11.89 fix: fix bond_zh_us_rate interface\n1.11.90 fix: fix futures_rule interface\n1.11.91 fix: remove stock_us_fundamental interface\n1.11.92 fix: fix get_gfex_receipt interface\n1.11.93 fix: fix stock_zh_a_hist_pre_min_em interface\n1.11.94 fix: fix index_zh_a_hist_min_em interface\n1.11.95 fix: fix fund_etf_hist_min_em interface\n1.11.96 fix: fix fund_rating_all interface\n1.11.97 add: add stock_zh_a_disclosure_report_cninfo interface\n1.11.98 fix: fix stock_zh_a_disclosure_report_cninfo interface\n1.11.99 fix: fix stock_zh_index_spot interface\n1.12.1 fix: fix futures_comm_info interface\n1.12.2 fix: fix hurun_rank interface\n1.12.3 fix: fix stock_gdfx_free_holding_teamwork_em interface\n1.12.4 fix: fix tool_trade_date_hist_sina interface\n1.12.5 fix: fix stock_zh_a_gdhs interface\n1.12.6 fix: fix fund_open_fund_info_em interface\n1.12.7 fix: fix option_gfex_daily interface\n1.12.8 fix: fix fund_open_fund_info_em interface\n1.12.9 add: add fund_individual_basic_info_xq interface\n1.12.10 fix: fix stock_add_stock interface\n1.12.11 add: add stock_zh_index_spot_em interface\n1.12.12 fix: fix stock_zh_index_daily interface\n1.12.13 fix: fix index_stock_cons_csindex interface\n1.12.14 add: add stock_hk_profit_forecast_et interface\n1.12.15 fix: fix stock_hk_profit_forecast_et interface\n1.12.16 fix: fix stock_hot_follow_xq interface\n1.12.17 fix: fix option_current_em interface\n1.12.18 fix: fix stock_board_industry_index_ths interface\n1.12.19 fix: fix stock_hk_profit_forecast_et interface\n1.12.20 fix: fix futures_inventory_99 interface\n1.12.21 fix: fix stock_hsgt_hold_stock_em interface\n1.12.22 fix: fix stock_hsgt_board_rank_em interface\n1.12.23 fix: fix fund_etf_hist_min_em interface\n1.12.24 fix: fix stock_hk_index_spot_em interface\n1.12.25 fix: fix fund_individual_basic_info_xq interface\n1.12.26 fix: fix index_stock_info interface\n1.12.27 fix: fix stock_hk_fhpx_detail_ths interface\n1.12.28 fix: fix futures_foreign_commodity_realtime interface\n1.12.29 add: add stock_individual_spot_xq interface\n1.12.30 fix: fix futures_settlement_price_sgx interface\n1.12.31 add: add futures_global_em interface\n1.12.32 fix: fix energy_oil_hist interface\n1.12.33 fix: fix futures_global_em interface\n1.12.34 fix: fix repo_rate_hist interface\n1.12.35 fix: fix article_epu_index interface\n1.12.36 fix: fix bond_china_close_return interface\n1.12.37 fix: fix futures_delivery_shfe interface\n1.12.38 fix: fix futures_to_spot_dce interface\n1.12.39 fix: fix futures_gfex_warehouse_receipt interface\n1.12.40 fix: fix futures_to_spot_dce interface\n1.12.41 fix: fix sw_index_third_cons interface\n1.12.42 fix: fix stock_news_em interface\n1.12.43 fix: fix macro_china_market_margin_sh interface\n1.12.44 fix: fix stock_zh_ah_daily interface\n1.12.45 fix: fix stock_individual_spot_xq interface\n1.12.46 fix: fix futures_contract_detail interface\n1.12.47 fix: fix stock_zh_ah_daily interface\n1.12.48 fix: fix option_minute_em interface\n1.12.49 fix: fix stock_dxsyl_em interface\n1.12.50 fix: fix bond_china_close_return interface\n1.12.51 add: add stock_hsgt_fund_min_em interface\n1.12.52 fix: fix stock_rank_cxg_ths interface\n1.12.53 fix: fix stock_rank_xzjp_ths interface\n1.12.54 fix: fix stock_gpzy_pledge_ratio_detail_em interface\n1.12.55 fix: fix stock_us_hist interface\n1.12.56 fix: fix stock_a_indicator_lg interface\n1.12.57 fix: fix bank_fjcf_table_detail interface\n1.12.58 fix: fix stock_ipo_summary_cninfo interface\n1.12.59 fix: fix movie_boxoffice_realtime interface\n1.12.60 fix: fix movie_boxoffice_daily interface\n1.12.61 fix: fix stock_bid_ask_em interface\n1.12.62 fix: fix stock_fund_flow_individual interface\n1.12.63 add: add akqmt interface\n1.12.64 fix: fix stock_board_industry_index_ths interface\n1.12.65 fix: fix futures_foreign_commodity_realtime interface\n1.12.66 fix: fix stock_board_industry_hist_em interface\n1.12.67 fix: fix index_hist_sw interface\n1.12.68 fix: fix option_finance_board interface\n1.12.69 fix: fix futures_hold_pos_sina interface\n1.12.70 fix: fix stock_lhb_detail_daily_sina interface\n1.12.71 fix: fix stock_zh_ah_spot interface\n1.12.72 fix: fix stock_hot_rank_wc interface\n1.12.73 fix: fix stock_individual_spot_xq interface\n1.12.74 add: add futures_contract_info_czce interface\n1.12.75 add: add futures_contract_info_ine interface\n1.12.76 fix: fix bond_zh_hs_spot interface\n1.12.77 fix: fix futures_contract_info_shfe interface\n1.12.78 fix: fix stock_info_sh_delist interface\n1.12.79 fix: fix futures_main_sina interface\n1.12.80 fix: fix get_czce_daily interface\n1.12.81 fix: fix macro_china_bond_public interface\n1.12.82 fix: fix stock_tfp_em interface\n1.12.83 fix: fix stock_sector_fund_flow_rank interface\n1.12.84 fix: fix stock_market_fund_flow interface\n1.12.85 fix: fix stock_sector_fund_flow_summary interface\n1.12.86 fix: fix fund_etf_spot_em interface\n1.12.87 fix: fix fortune_rank interface\n1.12.88 fix: fix fund_etf_spot_em interface\n1.12.89 fix: fix bond_china_yield interface\n1.12.90 fix: fix fund_etf_spot_em interface\n1.12.91 add: add stock_info_global_em interface\n1.12.92 fix: fix fund_etf_hist_min_em interface\n1.12.93 fix: fix bond_debt_nafmii interface\n1.12.94 fix: fix stock_hk_index_daily_em interface\n1.12.95 add: add futures_hog_core interface\n1.12.96 fix: fix stock_bid_ask_em interface\n1.12.97 fix: fix stock_zh_a_hist_min_em interface\n1.12.98 fix: fix bond_zh_cov interface\n1.12.99 fix: fix index_hog_spot_price interface\n1.13.1 fix: fix futures_spot_stock interface\n1.13.2 add: add stock_main_fund_flow interface\n1.13.3 fix: fix stock_main_fund_flow interface\n1.13.4 fix: fix stock_individual_spot_xq interface\n1.13.5 fix: fix stock_main_fund_flow interface\n1.13.6 fix: fix stock_board_concept_name_ths interface\n1.13.7 add: add futures_fees_info interface\n1.13.8 fix: fix fund_etf_hist_em interface\n1.13.9 chore: remove pyarrow deps\n1.13.10 fix: fix news_trade_notify_dividend_baidu interface\n1.13.11 fix: fix option_minute_em interface\n1.13.12 fix: fix stock_zyjs_ths interface\n1.13.13 fix: fix car_market_cpca interface\n1.13.14 fix: fix futures_fees_info interface\n1.13.15 add: add car_market_man_rank_cpca interface\n1.13.16 add: add car_market_cate_cpca interface\n1.13.17 fix: fix stock_zcfz_em interface\n1.13.18 fix: fix macro_china_pmi_yearly interface\n1.13.19 add: add car_market_country_cpca interface\n1.13.20 fix: fix stock_zh_a_disclosure_report_cninfo interface\n1.13.21 fix: fix stock_yjkb_em interface\n1.13.22 fix: fix amac_manager_cancelled_info interface\n1.13.23 add: add macro_usa_cme_merchant_goods_holding interface\n1.13.24 fix: fix futures_spot_sys interface\n1.13.25 fix: fix futures_zh_daily_sina interface\n1.13.26 fix: fix option_sse_minute_sina interface\n1.13.27 add: add stock_esg_msci_sina interface\n1.13.28 fix: fix stock_restricted_release_queue_em interface\n1.13.29 fix: fix stock_esg_msci_sina interface\n1.13.30 fix: fix futures_contract_info_shfe interface\n1.13.31 fix: fix stock_individual_spot_xq interface\n1.13.32 fix: fix futures_contract_info_czce interface\n1.13.33 fix: fix index_realtime_fund_sw interface\n1.13.34 fix: fix bank_fjcf_table_detail interface\n1.13.35 fix: fix stock_margin_szse interface\n1.13.36 fix: fix stock_hsgt_hist_em interface\n1.13.37 fix: fix stock_hk_index_daily_sina interface\n1.13.38 fix: fix stock_market_activity_legu interface\n1.13.39 add: add index_news_sentiment_scope interface\n1.13.40 fix: fix index_fear_greed_funddb interface\n1.13.41 fix: fix stock_sy_hy_em interface\n1.13.42 fix: fix index_fear_greed_funddb interface\n1.13.43 fix: fix stock_account_statistics_em interface\n1.13.44 fix: fix stock_lhb_stock_statistic_em interface\n1.13.45 fix: fix futures_stock_shfe_js interface\n1.13.46 fix: fix futures_stock_shfe_js interface\n1.13.47 fix: fix stock_a_indicator_lg interface\n1.13.48 fix: fix stock_hk_indicator_eniu interface\n1.13.49 fix: fix stock_ipo_summary_cninfo interface\n1.13.50 fix: fix news_cctv interface\n1.13.51 fix: fix stock_market_activity_legu interface\n1.13.52 fix: fix stock_market_pb_lg interface\n1.13.53 fix: fix stock_index_pe_lg interface\n1.13.54 fix: fix stock_tfp_em interface\n1.13.55 fix: fix sunrise_monthly interface\n1.13.56 fix: fix currency_boc_safe interface\n1.13.57 fix: fix stock_a_below_net_asset_statistics interface\n1.13.58 fix: fix stock_lhb_jgmmtj_em interface\n1.13.59 fix: fix stock_lhb_jgstatistic_em interface\n1.13.60 fix: fix stock_zh_a_disclosure_report_cninfo interface\n1.13.61 fix: fix stock_lhb_hyyyb_em interface\n1.13.62 fix: fix index_fear_greed_funddb interface\n1.13.63 fix: fix index_detail_hist_cni interface\n1.13.64 fix: fix stock_lh_yyb_most interface\n1.13.65 fix: fix stock_financial_report_sina interface\n1.13.66 fix: fix stock_lhb_yytj_sina interface\n1.13.67 fix: fix bond_info_cm interface\n1.13.68 fix: fix rate_interbank interface\n1.13.69 fix: fix get_shfe_rank_table interface\n1.13.70 fix: fix stock_irm_cninfo interface\n1.13.71 fix: fix stock_fhps_detail_ths interface\n1.13.72 fix: fix futures_contract_info_shfe interface\n1.13.73 fix: fix futures_shfe_warehouse_receipt interface\n1.13.74 add: add macro_info_ws interface\n1.13.75 add: add spot_price_qh interface\n1.13.76 fix: fix macro_china_lpr interface\n1.13.77 fix: fix stock_news_em interface\n1.13.78 fix: fix futures_gfex_position_rank interface\n1.13.79 fix: fix stock_industry_category_cninfo interface\n1.13.80 fix: fix stock_irm_cninfo interface\n1.13.81 fix: fix futures_dce_position_rank interface\n1.13.82 fix: fix futures_dce_position_rank interface\n1.13.83 fix: fix stock_balance_sheet_by_report_em interface\n1.13.84 fix: fix index_hist_sw interface\n1.13.85 fix: fix stock_news_em interface\n1.13.86 fix: fix futures_foreign_commodity_realtime interface\n1.13.87 fix: fix index_detail_cni interface\n1.13.88 fix: fix index_price_cflp interface\n1.13.89 fix: fix stock_zh_index_daily interface\n1.13.90 fix: fix stock_zh_valuation_baidu interface\n1.13.91 fix: fix stock_buffett_index_lg interface\n1.13.92 fix: fix bond_china_close_return interface\n1.13.93 add: add index_neei_cx interface\n1.13.94 fix: fix stock_share_change_cninfo interface\n1.13.95 fix: fix stock_allotment_cninfo interface\n1.13.96 fix: fix stock_dividend_cninfo interface\n1.13.97 fix: fix fund_portfolio_hold_em interface\n1.13.98 fix: fix stock_financial_analysis_indicator interface\n1.13.99 fix: fix macro_china_swap_rate interface\n1.14.1 fix: fix energy_carbon_hb interface\n1.14.2 fix: fix fund_portfolio_hold_em interface\n1.14.3 fix: fix stock_industry_clf_hist_sw interface\n1.14.4 add: add stock_margin_account_info interface\n1.14.5 fix: fix stock_margin_account_info interface\n1.14.6 fix: fix stock_register_kcb interface\n1.14.7 fix: fix index_stock_info interface\n1.14.8 add: add stock_register_sz interface\n1.14.9 fix: fix bond_zh_hs_spot interface\n1.14.10 fix: fix bond_cov_issue_cninfo interface\n1.14.11 fix: fix bond_treasure_issue_cninfo interface\n1.14.12 fix: fix get_tqdm function\n1.14.13 fix: fix option_minute_em interface\n1.14.14 fix: fix option_shfe_daily interface\n1.14.15 fix: fix energy_carbon_domestic interface\n1.14.16 fix: fix index_hist_sw interface\n1.14.17 fix: fix stock_board_industry_summary_ths interface\n1.14.18 fix: fix currency_pair_map interface\n1.14.19 fix: fix bond_china_close_return interface\n1.14.20 fix: fix option_risk_indicator_sse interface\n1.14.21 fix: fix stock_info_global_cls interface\n1.14.22 fix: fix macro_china_nbs_nation interface\n1.14.23 fix: fix macro_china_nbs_nation interface\n1.14.24 fix: fix macro_china_bond_public interface\n1.14.25 add: add option_comm_info interface\n1.14.26 fix: fix futures_fees_info interface\n1.14.27 fix: fix nlp_ownthink interface\n1.14.28 fix: fix news_trade_notify_dividend_baidu interface\n1.14.29 fix: fix stock_individual_spot_xq interface\n1.14.30 fix: fix stock_us_hist_min_em interface\n1.14.31 fix: fix option_shfe_daily interface\n1.14.32 add: add stock_concept_cons_futu interface\n1.14.33 fix: fix stock_concept_cons_futu interface\n1.14.34 add: add macro_rmb_loan interface\n1.14.35 add: add macro_rmb_deposit interface\n1.14.36 fix: fix option_czce_daily interface\n1.14.37 fix: fix stock_zh_kcb_report_em interface\n1.14.38 fix: fix stock_industry_clf_hist_sw interface\n1.14.39 fix: fix stock_zh_b_daily interface\n1.14.40 fix: fix fund_open_fund_rank_em interface\n1.14.41 fix: fix fund_report_asset_allocation_cninfo interface\n1.14.42 fix: fix stock_new_gh_cninfo interface\n1.14.43 fix: fix stock_share_change_cninfo interface\n1.14.44 fix: fix stock_hk_famous_spot_em interface\n1.14.45 fix: fix option_lhb_em interface\n1.14.46 add: add spot_hog_soozhu interface\n1.14.47 fix: fix spot_hog_soozhu interface\n1.14.48 add: add spot_hog_year_trend_soozhu interface\n1.14.49 fix: fix fortune_rank interface\n1.14.50 add: add spot_hog_lean_price_soozhu interface\n1.14.51 add: add stock_news_main_cx interface\n1.14.52 fix: fix stock_esg_hz_sina interface\n1.14.53 add: add spot_hog_three_way_soozhu interface\n1.14.54 fix: fix stock_individual_info_em interface\n1.14.55 add: add spot_hog_crossbred_soozhu interface\n1.14.56 add: add spot_corn_price_soozhu interface\n1.14.57 add: add spot_soybean_price_soozhu interface\n1.14.58 add: add spot_mixed_feed_soozhu interface\n1.14.59 fix: fix macro_cnbs interface\n1.14.60 fix: fix bond_zh_cov_info_ths interface\n1.14.61 fix: fix stock_fund_flow_individual interface\n1.14.62 fix: fix stock_zt_pool_em interface\n1.14.63 add: add spot_quotations_sge interface\n1.14.64 fix: fix stock_board_industry_spot_em interface\n1.14.65 fix: fix option_dce_daily interface\n1.14.66 fix: fix stock_profit_forecast_ths interface\n1.14.67 fix: fix futures_foreign_commodity_realtime interface\n1.14.68 fix: fix fund_scale_open_sina interface\n1.14.69 fix: fix stock_zygc_ym interface\n1.14.70 fix: fix setup.py\n1.14.71 fix: fix stock_mda_ym interface\n1.14.72 fix: fix fund_etf_hist_min_em interface\n1.14.73 fix: fix stock_gpzy_profile_em interface\n1.14.74 fix: fix stock_gpzy_pledge_ratio_em interface\n1.14.75 fix: fix stock_sy_hy_em interface\n1.14.76 fix: fix stock_sy_em interface\n1.14.77 fix: fix stock_zh_b_daily interface\n1.14.78 fix: fix stock_analyst_rank_em interface\n1.14.79 add: add stock_zcfz_bj_em interface\n1.14.80 fix: fix stock_hot_rank_wc interface\n1.14.81 fix: fix stock_hsgt_hist_em interface\n1.14.82 fix: fix stock_comment_detail_scrd_desire_daily_em interface\n1.14.83 fix: fix stock_comment_detail_zhpj_lspf_em interface\n1.14.84 fix: fix drewry_wci_index interface\n1.14.85 fix: fix stock_profit_forecast_em interface\n1.14.86 fix: fix stock_comment_detail_scrd_focus_em interface\n1.14.87 fix: fix stock_hot_search_baidu interface\n1.14.88 fix: fix stock_hot_rank_relate_em interface\n1.14.89 fix: fix bond_spot_deal interface\n1.14.90 fix: fix stock_board_change_em interface\n1.14.91 fix: fix stock_history_dividend interface\n1.14.92 add: add qdii_a_index_jsl interface\n1.14.93 fix: fix stock_zt_pool_em interface\n1.14.94 fix: fix stock_zt_pool_strong_em interface\n1.14.95 fix: fix stock_zt_pool_sub_new_em interface\n1.14.96 fix: fix stock_zt_pool_sub_new_em interface\n1.14.97 fix: fix stock_profile_cninfo interface\n1.14.98 fix: fix futures_hold_pos_sina interface\n1.14.99 fix: fix stock_a_ttm_lyr interface\n1.15.1 fix: fix stock_a_all_pb interface\n1.15.2 fix: fix stock_index_pe_lg interface\n1.15.3 fix: fix stock_share_change_cninfo interface\n1.15.4 fix: fix stock_allotment_cninfo interface\n1.15.5 fix: fix stock_individual_spot_xq interface\n1.15.6 fix: fix qdii_e_index_jsl interface\n1.15.7 fix: fix index_hist_sw interface\n1.15.8 fix: fix fund_individual_basic_info_xq interface\n1.15.9 fix: fix index_analysis_weekly_sw interface\n1.15.10 add: add volatility_yz_rv indicator\n1.15.11 fix: fix stock_individual_spot_xq interface\n1.15.12 fix: fix stock_shareholder_change_ths interface\n1.15.13 fix: fix stock_inner_trade_xq interface\n1.15.14 fix: fix macro_bank_usa_interest_rate interface\n1.15.15 add: add macro_bank_china_interest_rate interface\n1.15.16 fix: fix macro_bank_usa_interest_rate interface\n1.15.17 fix: fix news_trade_notify_dividend_baidu interface\n1.15.18 fix: fix stock_share_hold_change_sse interface\n1.15.19 fix: fix stock_share_hold_change_szse interface\n1.15.20 fix: fix rv_from_stock_zh_a_hist_min_em interface\n1.15.21 fix: fix get_futures_daily interface\n1.15.22 fix: fix air_quality_hebei interface\n1.15.23 fix: fix stock_sector_fund_flow_summary interface\n1.15.24 fix: fix get_dce_daily interface\n1.15.25 fix: fix stock_news_main_cx interface\n1.15.26 fix: fix option_dce_daily interface\n1.15.27 fix: fix stock_zh_index_spot_em interface\n1.15.28 fix: fix stock_hk_valuation_baidu interface\n1.15.29 fix: fix option_dce_daily interface\n1.15.30 fix: fix fund_etf_category_sina interface\n1.15.31 fix: fix stock_zt_pool_strong_em interface\n1.15.32 fix: fix stock_info_global_cls interface\n1.15.33 add: add stock_value_em interface\n1.15.34 fix: fix fund_open_fund_rank_em interface\n1.15.35 fix: fix futures_spot_price_daily interface\n1.15.36 fix: fix futures_global_em interface\n1.15.37 fix: fix stock_individual_spot_xq interface\n1.15.38 fix: fix futures_contract_info_ine interface\n1.15.39 fix: fix macro_china_new_house_price interface\n1.15.40 fix: fix macro_china_fdi interface\n1.15.41 fix: fix macro_china_fdi interface\n1.15.42 fix: fix get_roll_yield_bar interface\n1.15.43 fix: fix macro_china_urban_unemployment interface\n1.15.44 fix: fix index_detail_hist_adjust_cni interface\n1.15.45 fix: fix stock_jgdy_detail_em interface\n1.15.46 fix: fix fund_etf_fund_info_em interface\n1.15.47 fix: fix stock_individual_spot_xq interface\n1.15.48 fix: fix stock_mda_ym interface\n1.15.49 fix: fix option_dce_daily interface\n1.15.50 fix: fix stock_gpzy_profile_em interface\n1.15.51 fix: fix stock_gpzy_pledge_ratio_em interface\n1.15.52 fix: fix stock_zh_index_hist_csindex interface\n1.15.53 fix: fix futures_inventory_99 interface\n1.15.54 fix: fix stock_sy_profile_em interface\n1.15.55 fix: fix fund_etf_spot_em interface\n1.15.56 fix: fix spot_goods interface\n1.15.57 fix: fix add 2025 trade date\n1.15.58 fix: fix futures_hold_pos_sina interface\n1.15.59 fix: fix stock_sy_hy_em interface\n1.15.60 fix: fix stock_hot_keyword_em interface\n1.15.61 fix: fix stock_zt_pool_strong_em interface\n1.15.62 fix: fix stock_zt_pool_sub_new_em interface\n1.15.63 fix: fix stock_financial_abstract interface\n1.15.64 fix: fix stock_zh_index_value_csindex interface\n1.15.65 fix: fix option_czce_daily interface\n1.15.66 fix: fix fund_etf_dividend_sina interface\n1.15.67 fix: fix stock_hold_change_cninfo interface\n1.15.68 fix: fix stock_research_report_em interface\n1.15.69 fix: fix index_zh_a_hist_min_em interface\n1.15.70 fix: fix stock_research_report_em interface\n1.15.71 fix: fix stock_dzjy_sctj interface\n1.15.72 fix: fix stock_us_spot interface\n1.15.73 fix: fix stock_dzjy_hygtj interface\n1.15.74 fix: fix macro_australia_retail_rate_monthly interface\n1.15.75 feat: add futures_hist_em interface\n1.15.76 fix: fix futures_zh_minute_sina interface\n1.15.77 fix: fix option_czce_daily interface\n1.15.78 fix: fix stock_yzxdr_em interface\n1.15.79 fix: fix stock_new_a_spot_em interface\n1.15.80 fix: fix option_gfex_vol_daily interface\n1.15.81 fix: fix bank_fjcf_table_detail interface\n1.15.82 fix: fix stock_individual_spot_xq interface\n1.15.83 fix: fix stock_szse_sector_summary interface\n1.15.84 fix: fix option_dce_daily interface\n1.15.85 fix: fix stock_gddh_em interface\n1.15.86 fix: fix stock_zdhtmx_em interface\n1.15.87 fix: fix futures_index_ccidx interface\n1.15.88 fix: fix stock_zh_a_spot_em interface\n1.15.89 fix: fix stock_individual_info_em interface\n1.15.90 fix: fix stock_financial_analysis_indicator interface\n1.15.91 fix: fix stock_board_concept_cons_em interface\n1.15.92 fix: fix stock_main_fund_flow interface\n1.15.93 fix: fix fund_etf_spot_em interface\n1.15.94 fix: fix stock_zh_index_spot_em interface\n1.15.95 fix: fix stock_us_spot_em interface\n1.15.96 fix: fix bond_cov_comparison interface\n1.15.97 fix: fix stock_intraday_em interface\n1.15.98 fix: fix stock_board_concept_name_em interface\n1.15.99 fix: fix stock_esg_zd_sina interface\n1.16.1 fix: fix stock_main_fund_flow interface\n1.16.2 fix: fix stock_board_industry_hist_em interface\n1.16.3 fix: fix stock_zh_index_spot_em interface\n1.16.4 fix: fix stock_hk_ggt_components_em interface\n1.16.5 fix: fix stock_sector_fund_flow_rank interface\n1.16.6 fix: fix stock_sgt_reference_exchange_rate_sse interface\n1.16.7 fix: fix fund_lof_hist_em interface\n1.16.8 fix: fix option_czce_daily interface\n1.16.9 fix: fix stock_sse_deal_daily interface\n1.16.10 fix: fix option_risk_analysis_em interface\n1.16.11 fix: fix stock_intraday_em interface\n1.16.12 fix: fix bond_zh_hs_cov_daily interface\n1.16.13 fix: fix futures_inventory_99 interface\n1.16.14 fix: fix stock_info_global_cls interface\n1.16.15 fix: fix stock_board_concept_name_em interface\n1.16.16 fix: fix stock_board_concept_spot_em interface\n1.16.17 fix: fix stock_research_report_em interface\n1.16.18 fix: fix stock_board_concept_spot_em interface\n1.16.19 fix: fix stock_profit_forecast_ths interface\n1.16.20 fix: fix stock_lhb_detail_em interface\n1.16.21 fix: fix stock_hk_index_daily_em interface\n1.16.22 fix: fix fund_money_fund_info_em interface\n1.16.23 fix: fix stock_board_industry_cons_em interface\n1.16.24 fix: fix stock_financial_hk_report_em interface\n1.16.25 fix: fix stock_financial_abstract_ths interface\n1.16.26 add: add stock_hsgt_sh_hk_spot_em interface\n1.16.27 fix: fix futures_global_em interface\n1.16.28 fix: fix futures_global_hist_em interface\n1.16.29 fix: fix futures_global_hist_em interface\n1.16.30 add: add forex_hist_em interface\n1.16.31 add: add index_global_hist_em interface\n1.16.32 fix: fix news_economic_baidu interface\n1.16.33 fix: fix fund_open_fund_daily_em interface\n1.16.34 fix: fix stock_individual_fund_flow_rank interface\n1.16.35 fix: fix futures_global_spot_em interface\n1.16.36 fix: fix stock_intraday_em interface\n1.16.37 fix: fix stock_board_concept_hist_em interface\n1.16.38 fix: fix fund_etf_hist_em interface\n1.16.39 fix: fix option_current_em interface\n1.16.40 add: add stock_individual_basic_info_xq interface\n1.16.41 fix: fix stock_individual_fund_flow_rank interface\n1.16.42 fix: fix stock_concept_fund_flow_hist interface\n1.16.43 fix: fix option_value_analysis_em interface\n1.16.44 fix: fix stock_board_concept_hist_em interface\n1.16.45 fix: fix option_risk_analysis_em interface\n1.16.46 fix: fix stock_hk_index_spot_em interface\n1.16.47 fix: fix stock_hsgt_stock_statistics_em interface\n1.16.48 fix: fix stock_individual_basic_info_xq interface\n1.16.49 fix: fix index_zh_a_hist_min_em interface\n1.16.50 fix: fix futures_inventory_99 interface\n1.16.51 fix: fix stock_individual_basic_info_xq interface\n1.16.52 fix: fix stock_zh_a_spot_em interface\n1.16.53 fix: fix stock_yjbb_em interface\n1.16.54 fix: fix stock_zh_a_spot_em interface\n1.16.55 fix: fix stock_zh_a_spot_em interface\n1.16.56 fix: fix stock_zh_a_daily interface\n1.16.57 fix: fix stock_market_pe_lg interface\n1.16.58 fix: fix stock_zh_a_spot interface\n1.16.59 fix: fix option_czce_hist interface\n1.16.60 fix: fix stock_individual_fund_flow_rank interface\n1.16.61 fix: fix stock_board_concept_index_ths interface\n1.16.62 fix: fix stock_gdfx_free_holding_change_em interface\n1.16.63 fix: fix stock_board_concept_name_ths interface\n1.16.64 add: add reits_hist_em interface\n1.16.65 fix: fix stock_dzjy_yybph interface\n1.16.66 fix: fix macro_cons_silver interface\n1.16.67 fix: fix stock_individual_basic_info_xq interface\n1.16.68 fix: fix option_dce_daily interface\n1.16.69 fix: fix stock_individual_spot_xq interface\n1.16.70 fix: fix stock_zh_ah_spot_em interface\n1.16.71 add: add stock_zh_a_gbjg_em interface\n1.16.72 add: add bond_sh_buy_back_em interface\n1.16.73 fix: fix stock_board_industry_hist_em interface\n1.16.74 fix: fix stock_individual_spot_xq interface\n1.16.75 fix: fix get_qhkc_index interface\n1.16.76 fix: fix spot_quotations_sge interface\n1.16.77 add: add stock_lhb_yyb_detail_em interface\n1.16.78 fix: fix stock_zh_a_spot_em interface\n1.16.79 fix: fix stock_individual_basic_info_xq interface\n1.16.80 fix: fix stock_zh_a_disclosure_report_cninfo interface\n1.16.81 fix: fix option_shfe_daily interface\n1.16.82 fix: fix index_global_spot_em interface\n1.16.83 fix: fix stock_individual_info_em interface\n1.16.84 fix: fix stock_fhps_detail_ths interface\n1.16.85 fix: fix stock_dividend_cninfo interface\n1.16.86 fix: fix index_yw interface\n1.16.87 fix: fix stock_zygc_em interface\n1.16.88 fix: fix futures_inventory_99 interface\n1.16.89 fix: fix stock_balance_sheet_by_yearly_em interface\n1.16.90 fix: fix stock_hk_company_profile_em interface\n1.16.91 fix: fix stock_sse_deal_daily interface\n1.16.92 fix: fix bond_cb_jsl interface\n1.16.93 fix: fix stock_hsgt_individual_em interface\n1.16.94 fix: fix futures_fees_info interface\n1.16.95 fix: fix option_shfe_daily interface\n1.16.96 fix: fix stock_individual_spot_xq interface\n1.16.97 fix: fix fund_open_fund_info_em interface\n1.16.98 fix: fix fund_open_fund_info_em interface\n1.16.99 fix: fix stock_info_sz_delist interface\n1.17.1 fix: fix stock_gdfx_holding_detail_em interface\n1.17.2 fix: fix stock_ggcg_em interface\n1.17.3 fix: fix stock_hot_search_baidu interface\n1.17.4 fix: fix stock_news_em interface\n1.17.5 fix: fix stock_us_pink_spot_em interface\n1.17.6 fix: fix stock_tfp_em interface\n1.17.7 fix: fix futures_spot_price_daily interface\n1.17.8 fix: fix forex_spot_em interface\n1.17.9 fix: fix stock_zh_ab_comparison_em interface\n1.17.10 fix: fix get_shfe_daily interface\n1.17.11 fix: fix stock_individual_spot_xq interface\n1.17.12 fix: fix get_receipt interface\n1.17.13 fix: fix futures_shfe_warehouse_receipt interface\n1.17.14 fix: fix forex_spot_em interface\n1.17.15 fix: fix stock_comment_em interface\n1.17.16 fix: fix bond_zh_cov interface\n1.17.17 fix: fix stock_hk_spot interface\n1.17.18 fix: fix option_dce_daily interface\n1.17.19 fix: fix futures_spot_price_daily interface\n1.17.20 fix: fix stock_news_em interface\n1.17.21 fix: fix stock_sector_fund_flow_hist interface\n1.17.22 fix: fix stock_individual_spot_xq interface\n1.17.23 fix: fix get_roll_yield interface\n1.17.24 fix: fix futures_inventory_99 interface\n1.17.25 fix: fix get_receipt interface\n1.17.26 fix: fix stock_hot_rank_detail_em interface\n1.17.27 fix: fix index_csindex_all interface\n1.17.28 fix: fix stock_financial_analysis_indicator_em interface\n1.17.29 fix: fix air_quality_watch_point interface\n1.17.30 fix: fix get_receipt interface\n1.17.31 fix: fix index_neei_cx interface\n1.17.32 fix: fix macro_china_shrzgm interface\n1.17.33 fix: fix stock_comment_em interface\n1.17.34 fix: fix option_czce_daily interface\n1.17.35 fix: fix option_dce_daily interface\n1.17.36 fix: fix futures_hist_em interface\n1.17.37 fix: fix stock_zh_index_daily_em interface\n1.17.38 fix: fix futures_inventory_99 interface\n1.17.39 fix: fix bond_zh_cov_value_analysis interface\n1.17.40 fix: fix stock_gdfx_free_holding_change_em interface\n1.17.41 fix: fix stock_info_global_ths interface\n1.17.42 fix: fix reits_realtime_em interface\n1.17.43 fix: fix fund_rating_all interface\n1.17.44 fix: fix stock_individual_spot_xq interface\n1.17.45 fix: fix stock_dxsyl_em interface\n1.17.46 fix: fix stock_financial_us_analysis_indicator_em interface\n1.17.47 fix: fix get_receipt interface\n1.17.48 fix: fix stock_hk_dividend_payout_em interface\n1.17.49 fix: fix option_czce_daily interface\n1.17.50 fix: fix option_current_day_szse interface\n1.17.51 fix: fix fund_manager_em interface\n1.17.52 fix: fix fund_overview_em interface\n1.17.53 fix: fix reits_hist_min_em interface\n1.17.54 fix: fix fund_announcement_dividend_em interface\n1.17.55 fix: fix stock_zh_growth_comparison_em interface\n1.17.56 fix: fix stock_balance_sheet_by_report_delisted_em interface\n1.17.57 fix: fix stock_szse_summary interface\n1.17.58 fix: fix fund_etf_fund_daily_em interface\n1.17.59 fix: fix fx_c_swap_cm interface\n1.17.60 fix: fix stock_intraday_sina interface\n1.17.61 fix: fix stock_individual_spot_xq interface\n1.17.62 fix: fix futures_dce_warehouse_receipt interface\n1.17.63 fix: fix stock_financial_analysis_indicator_em interface\n1.17.64 fix: fix stock_individual_spot_xq interface\n1.17.65 fix: fix futures_dce_warehouse_receipt interface\n1.17.66 fix: fix futures_delivery_czce interface\n1.17.67 fix: fix stock_zh_a_hist_tx interface\n1.17.68 fix: fix option_hist_dce interface\n1.17.69 fix: fix fund_etf_hist_sina interface\n1.17.70 fix: fix macro_stock_finance interface\n1.17.71 fix: fix futures_inventory_99 interface\n1.17.72 fix: fix futures_warehouse_receipt_dce interface\n1.17.73 fix: fix get_receipt interface\n1.17.74 fix: fix futures_dce_position_rank interface\n1.17.75 fix: fix stock_a_ttm_lyr interface\n1.17.76 fix: fix futures_index_ccidx interface\n1.17.77 fix: fix get_dce_daily interface\n1.17.78 fix: fix update python 3.14 support\n1.17.79 fix: fix futures_contract_info_dce interface\n1.17.80 fix: fix futures_contract_detail_em interface\n1.17.81 fix: fix get_receipt interface\n1.17.82 fix: fix stock_notice_report interface\n1.17.83 fix: fix stock_cyq_em interface\n1.17.84 fix: fix stock_individual_spot_xq interface\n1.17.85 fix: fix news_trade_notify_dividend_baidu interface\n1.17.86 fix: fix stock_news_em interface\n1.17.87 fix: fix stock_dividend_cninfo interface\n1.17.88 fix: fix stock_zh_a_minute interface\n1.17.89 fix: fix news_trade_notify_dividend_baidu interface\n1.17.90 fix: fix stock_individual_spot_xq interface\n1.17.91 fix: fix news_economic_baidu interface\n1.17.92 fix: fix currency_boc_sina interface\n1.17.93 fix: fix stock_news_em interface\n1.17.94 fix: fix index_detail_cni interface\n1.17.95 fix: fix stock_info_sh_name_code interface\n1.17.96 fix: fix stock_info_sh_name_code interface\n1.17.97 fix: fix stock_financial_debt_new_ths interface\n1.17.98 fix: fix stock_jgdy_tj_em interface\n1.17.99 fix: fix stock_news_em interface\n1.18.1 fix: fix stock_us_valuation_baidu interface\n1.18.2 fix: fix stock_ipo_declare_em interface\n1.18.3 fix: fix stock_ipo_tutor_em interface\n1.18.4 fix: fix stock_zh_a_daily interface\n1.18.5 fix: fix futures_inventory_99 interface\n1.18.6 fix: fix fund_fee_em interface\n1.18.7 fix: fix stock_us_valuation_baidu interface\n1.18.8 fix: fix stock_zh_valuation_comparison_em interface\n1.18.9 fix: fix fx_quote_baidu interface\n1.18.10 fix: fix futures_comm_info interface\n1.18.11 fix: fix stock_individual_spot_xq interface\n1.18.12 fix: fix news_economic_baidu interface\n1.18.13 fix: fix futures_spot_price_daily interface\n1.18.14 fix: fix fund_etf_scale_szse interface\n1.18.15 fix: fix fund_etf_scale_sse interface\n1.18.16 fix: fix news_economic_baidu interface\n1.18.17 fix: fix stock_individual_spot_xq interface\n1.18.18 fix: fix stock_individual_spot_xq interface\n1.18.19 fix: fix github action\n1.18.20 fix: fix stock_individual_spot_xq interface\n1.18.21 fix: fix get_receipt interface\n1.18.22 fix: fix bond_gb_zh_sina interface\n1.18.23 fix: fix fund_fee_em interface\n1.18.24 fix: fix stock_individual_spot_xq interface\n1.18.25 fix: fix qdii_e_comm_jsl interface\n1.18.26 fix: fix fund_fh_em interface\n1.18.27 fix: fix futures_comm_js interface\n1.18.28 fix: fix futures_spot_price_daily interface\n1.18.29 fix: fix stock_individual_basic_info_xq interface\n1.18.30 fix: fix futures_inventory_99 interface\n1.18.31 fix: fix stock_hk_dividend_payout_em interface\n1.18.32 fix: fix fund_new_found_ths interface\n1.18.33 fix: fix futures_spot_price_daily interface\n1.18.34 fix: fix fund_fh_em interface\n1.18.35 fix: fix stock_ipo_ths interface\n1.18.36 fix: fix stock_zygc_em interface\n1.18.37 fix: fix fund_etf_dividend_sina interface\n1.18.38 fix: fix stock_hk_index_daily_sina interface\n1.18.39 fix: fix stock_hk_daily interface\n1.18.40 fix: fix stock_hk_daily interface\n1.18.41 fix: fix stock_zh_a_minute interface\n1.18.42 fix: fix stock_zh_a_minute interface\n1.18.43 fix: fix stock_financial_abstract_new_ths interface\n1.18.44 fix: fix index_option_50etf_qvix interface\n1.18.45 fix: fix stock_a_high_low_statistics interface\n1.18.46 fix: fix stock_a_all_pb interface\n1.18.47 fix: fix stock_margin_underlying_info_szse interface\n1.18.48 fix: fix stock_individual_spot_xq interface\n1.18.49 fix: fix macro_china_urban_unemployment interface\n1.18.50 fix: fix stock_gpzy_individual_pledge_ratio_detail_em interface\n\"\"\"\n\nfrom akshare._version import __version__\n__author__ = \"AKFamily\"\n\n\"\"\"\n期货结算\n\"\"\"\nfrom akshare.futures.futures_settle import (\n    futures_settle,\n    futures_settle_gfex,\n    futures_settle_ine,\n    futures_settle_czce,\n    futures_settle_cffex,\n    futures_settle_shfe,\n)\n\n\"\"\"\n国债收益率\n\"\"\"\nfrom akshare.bond.bond_gb_sina import bond_gb_zh_sina, bond_gb_us_sina\n\n\"\"\"\nopenctp-合约信息接口\n\"\"\"\nfrom akshare.option.option_contract_info_ctp import option_contract_info_ctp\n\n\"\"\"\n中国外汇交易中心暨全国银行间同业拆借中心-基准-外汇市场-外汇掉期曲线-外汇掉漆 C-Swap 定盘曲线\n\"\"\"\nfrom akshare.fx.fx_c_swap_cm import fx_c_swap_cm\n\n\"\"\"\n上海证券交易所-产品-股票期权-信息披露-当日合约\n\"\"\"\nfrom akshare.option.option_current_sse import option_current_day_sse\n\n\"\"\"\n深圳证券交易所-期权子网-行情数据-当日合约\n\"\"\"\nfrom akshare.option.option_current_szse import option_current_day_szse\n\n\"\"\"\n东方财富-A股-财务分析-主要指标\n\"\"\"\nfrom akshare.stock_fundamental.stock_finance_sina import stock_financial_analysis_indicator_em\n\n\"\"\"\n期权保证金\n\"\"\"\nfrom akshare.option.option_margin import option_margin, option_margin_symbol\n\n\"\"\"\n东方财富-港股-证券资料\n\"\"\"\nfrom akshare.stock.stock_profile_em import stock_hk_company_profile_em, stock_hk_security_profile_em\n\n\"\"\"\n东方财富-港股-核心必读\n\"\"\"\nfrom akshare.stock.stock_profile_em import stock_hk_dividend_payout_em, stock_hk_financial_indicator_em\n\n\"\"\"\n东方财富-港股-行业对比\n\"\"\"\nfrom akshare.stock.stock_hk_comparison_em import (\n    stock_hk_growth_comparison_em,\n    stock_hk_valuation_comparison_em,\n    stock_hk_scale_comparison_em\n)\n\n\"\"\"\n东方财富-行情中心-同行比较\n\"\"\"\nfrom akshare.stock.stock_zh_comparison_em import (stock_zh_growth_comparison_em,\n                                                  stock_zh_valuation_comparison_em,\n                                                  stock_zh_dupont_comparison_em,\n                                                  stock_zh_scale_comparison_em\n                                                  )\n\n\"\"\"\n东方财富网-行情中心-债券市场-质押式回购\n\"\"\"\nfrom akshare.bond.bond_buy_back_em import bond_sh_buy_back_em, bond_sz_buy_back_em, bond_buy_back_hist_em\n\n\"\"\"\n东方财富-A股数据-股本结构\n\"\"\"\nfrom akshare.stock_fundamental.stock_gbjg_em import stock_zh_a_gbjg_em\n\n\"\"\"\n雪球-个股-公司概况-公司简介\n\"\"\"\nfrom akshare.stock_fundamental.stock_basic_info_xq import (\n    stock_individual_basic_info_xq,\n    stock_individual_basic_info_hk_xq,\n    stock_individual_basic_info_us_xq,\n)\n\n\"\"\"\n新浪财经-行情中心-环球市场\n\"\"\"\nfrom akshare.index.index_global_sina import index_global_hist_sina, index_global_name_table\n\n\"\"\"\n东方财富网-行情中心-全球指数\n\"\"\"\nfrom akshare.index.index_global_em import index_global_hist_em, index_global_spot_em\n\n\"\"\"\n东方财富网-行情中心-外汇市场-所有汇率\n\"\"\"\nfrom akshare.forex.forex_em import forex_hist_em, forex_spot_em\n\n\"\"\"\n东方财富网-行情中心-沪深港通\n\"\"\"\nfrom akshare.stock.stock_hsgt_em import stock_zh_ah_spot_em, stock_hsgt_sh_hk_spot_em\n\n\"\"\"\n东方财富-美股-财务分析-三大报表\n\"\"\"\nfrom akshare.stock_fundamental.stock_finance_us_em import (\n    stock_financial_us_report_em,\n    stock_financial_us_analysis_indicator_em,\n)\n\n\"\"\"\n期货行情-内盘-历史行情数据-东财\n\"\"\"\nfrom akshare.futures.futures_hist_em import futures_hist_table_em, futures_hist_em\n\n\"\"\"\n巨潮资讯-数据中心-专题统计-股东股本-股本变动\n\"\"\"\nfrom akshare.stock.stock_hold_control_cninfo import stock_hold_change_cninfo\n\n\"\"\"\n天天基金-基金档案-基金基本概况\n\"\"\"\nfrom akshare.fund.fund_overview_em import fund_overview_em\n\n\"\"\"\n基金费率\n\"\"\"\nfrom akshare.fund.fund_fee_em import fund_fee_em\n\n\"\"\"\n东方财富网-数据中心-估值分析-每日互动-每日互动-估值分析\n\"\"\"\nfrom akshare.stock_feature.stock_value_em import stock_value_em\n\n\"\"\"\n已实现波动率\n\"\"\"\nfrom akshare.cal.rv import volatility_yz_rv, rv_from_futures_zh_minute_sina, rv_from_stock_zh_a_hist_min_em\n\n\"\"\"\nQDII\n\"\"\"\nfrom akshare.qdii.qdii_jsl import qdii_a_index_jsl, qdii_e_index_jsl, qdii_e_comm_jsl\n\n\"\"\"\n财新网-财新数据通\n\"\"\"\nfrom akshare.stock.stock_news_cx import stock_news_main_cx\n\n\"\"\"\n搜猪-生猪大数据-各省均价实时排行榜\n\"\"\"\nfrom akshare.spot.spot_hog_soozhu import (\n    spot_hog_soozhu,\n    spot_hog_year_trend_soozhu,\n    spot_hog_lean_price_soozhu,\n    spot_hog_three_way_soozhu,\n    spot_hog_crossbred_soozhu,\n    spot_corn_price_soozhu,\n    spot_soybean_price_soozhu,\n    spot_mixed_feed_soozhu,\n)\n\n\"\"\"\n知名港股\n\"\"\"\nfrom akshare.stock.stock_hk_famous import stock_hk_famous_spot_em\n\n\"\"\"\n同花顺-数据中心-宏观数据-股票筹资\n\"\"\"\nfrom akshare.economic.macro_finance_ths import macro_stock_finance, macro_rmb_loan, macro_rmb_deposit\n\n\"\"\"\n富途牛牛-主题投资-概念板块-成分股\n\"\"\"\nfrom akshare.stock_feature.stock_concept_futu import stock_concept_cons_futu\n\n\"\"\"\n商品期权手续费\n\"\"\"\nfrom akshare.option.option_comm_qihuo import option_comm_info, option_comm_symbol\n\n\"\"\"\n上海证券交易所-产品-股票期权-每日统计\n\"\"\"\nfrom akshare.option.option_daily_stats_sse_szse import option_daily_stats_sse, option_daily_stats_szse\n\n\"\"\"\n同花顺理财-基金数据-每日净值-ETF\n\"\"\"\nfrom akshare.fund.fund_etf_ths import fund_etf_spot_ths, fund_etf_category_ths\n\n\"\"\"\n东方财富网-数据中心-融资融券-融资融券账户统计-两融账户信息\n\"\"\"\nfrom akshare.stock_feature.stock_margin_em import stock_margin_account_info\n\n\"\"\"\n现货走势\n\"\"\"\nfrom akshare.spot.spot_price_qh import spot_price_qh, spot_price_table_qh\n\n\"\"\"\n华尔街见闻-日历-宏观\n\"\"\"\nfrom akshare.economic.macro_info_ws import macro_info_ws\n\n\"\"\"\n数库-A股新闻情绪指数\n\"\"\"\nfrom akshare.index.index_zh_a_scope import index_news_sentiment_scope\n\n\"\"\"\n申万宏源研究-申万指数-指数发布-基金指数-实时行情\n\"\"\"\nfrom akshare.index.index_research_fund_sw import index_hist_fund_sw, index_realtime_fund_sw\n\n\"\"\"\n东方财富-财经早餐\n\"\"\"\nfrom akshare.stock_feature.stock_info import (\n    stock_info_cjzc_em,\n    stock_info_global_em,\n    stock_info_global_ths,\n    stock_info_global_futu,\n    stock_info_global_sina,\n    stock_info_global_cls,\n)\n\n\"\"\"\n期货交易-参数汇总查询\n\"\"\"\nfrom akshare.futures_derivative.futures_contract_info_shfe import futures_contract_info_shfe\nfrom akshare.futures_derivative.futures_contract_info_dce import futures_contract_info_dce\nfrom akshare.futures_derivative.futures_contract_info_czce import futures_contract_info_czce\nfrom akshare.futures_derivative.futures_contract_info_gfex import futures_contract_info_gfex\nfrom akshare.futures_derivative.futures_contract_info_cffex import futures_contract_info_cffex\nfrom akshare.futures_derivative.futures_contract_info_ine import futures_contract_info_ine\n\n\"\"\"\n上海期货交易所-指定交割仓库-库存周报\n\"\"\"\nfrom akshare.futures.futures_stock_js import futures_stock_shfe_js\n\n\"\"\"\n金十数据-期货手续费\n\"\"\"\nfrom akshare.futures.futures_comm_js import futures_comm_js\n\n\"\"\"\n东方财富-数据中心-沪深港通-市场概括-分时数据\n\"\"\"\nfrom akshare.stock_feature.stock_hsgt_min_em import stock_hsgt_fund_min_em\n\n\"\"\"\n东方财富网-行情中心-期货市场-国际期货\n\"\"\"\nfrom akshare.futures.futures_hf_em import futures_global_spot_em, futures_global_hist_em\n\n\"\"\"\n雪球行情数据\n\"\"\"\nfrom akshare.stock.stock_xq import (\n    stock_individual_spot_xq,\n)\n\n\"\"\"\n港股盈利预测\n\"\"\"\nfrom akshare.stock_fundamental.stock_profit_forecast_hk_etnet import stock_hk_profit_forecast_et\n\n\"\"\"\n巨潮资讯-首页-公告查询-信息披露\n\"\"\"\nfrom akshare.stock_feature.stock_disclosure_cninfo import (\n    stock_zh_a_disclosure_relation_cninfo,\n    stock_zh_a_disclosure_report_cninfo,\n)\n\n\"\"\"\n东财财富-分时数据\n\"\"\"\nfrom akshare.stock.stock_intraday_sina import stock_intraday_sina\n\n\"\"\"\n股票日行情\n\"\"\"\nfrom akshare.stock_feature.stock_hist_tx import stock_zh_a_hist_tx\n\n\"\"\"\n筹码分布\n\"\"\"\nfrom akshare.stock_feature.stock_cyq_em import stock_cyq_em\n\n\"\"\"\n东财财富-分时数据\n\"\"\"\nfrom akshare.stock.stock_intraday_em import stock_intraday_em\n\n\"\"\"\n美股指数行情\n\"\"\"\nfrom akshare.index.index_stock_us_sina import index_us_stock_sina\n\n\"\"\"\n董监高及相关人员持股变动\n\"\"\"\nfrom akshare.stock.stock_share_hold import (\n    stock_share_hold_change_bse,\n    stock_share_hold_change_sse,\n    stock_share_hold_change_szse,\n)\n\n\"\"\"\n东方财富网-数据中心-研究报告-个股研报\n\"\"\"\nfrom akshare.stock_feature.stock_research_report_em import stock_research_report_em\n\n\"\"\"\n东方财富网-数据中心-重大合同-重大合同明细\n\"\"\"\nfrom akshare.stock_feature.stock_zdhtmx_em import stock_zdhtmx_em\n\n\"\"\"\n东方财富网-数据中心-股东大会\n\"\"\"\nfrom akshare.stock_feature.stock_gddh_em import stock_gddh_em\n\n\"\"\"\n东方财富网-数据中心-股市日历\n\"\"\"\nfrom akshare.stock.stock_gsrl_em import stock_gsrl_gsdt_em\n\n\"\"\"\n东方财富网-数据中心-特色数据-高管持股\n\"\"\"\nfrom akshare.stock.stock_hold_control_em import (\n    stock_hold_management_detail_em,\n    stock_hold_management_person_em,\n)\n\n\"\"\"\n新浪财经-债券-可转债\n\"\"\"\nfrom akshare.bond.bond_cb_sina import bond_cb_profile_sina, bond_cb_summary_sina\n\n\"\"\"\n上证e互动\n\"\"\"\nfrom akshare.stock_feature.stock_sns_sseinfo import stock_sns_sseinfo\n\n\"\"\"\n互动易-提问与回答\n\"\"\"\nfrom akshare.stock_feature.stock_irm_cninfo import (\n    stock_irm_cninfo,\n    stock_irm_ans_cninfo,\n)\n\n\"\"\"\n基金公告-分红配送\n\"\"\"\nfrom akshare.fund.fund_announcement_em import fund_announcement_dividend_em\n\n\"\"\"\n基金公告-定期报告\n\"\"\"\nfrom akshare.fund.fund_announcement_em import fund_announcement_report_em\n\n\"\"\"\n基金公告-人事公告\n\"\"\"\nfrom akshare.fund.fund_announcement_em import fund_announcement_personnel_em\n\n\"\"\"\n新浪财经-ESG评级中心\n\"\"\"\nfrom akshare.stock_feature.stock_esg_sina import (\n    stock_esg_msci_sina,\n    stock_esg_rft_sina,\n    stock_esg_rate_sina,\n    stock_esg_zd_sina,\n    stock_esg_hz_sina,\n)\n\n\"\"\"\nLOF 行情数据\n\"\"\"\nfrom akshare.fund.fund_lof_em import (\n    fund_lof_hist_em,\n    fund_lof_spot_em,\n    fund_lof_hist_min_em,\n)\n\n\"\"\"\n同花顺-财务指标-主要指标\n\"\"\"\nfrom akshare.stock_fundamental.stock_finance_ths import (\n    stock_financial_abstract_ths,\n    stock_financial_debt_ths,\n    stock_financial_benefit_ths,\n    stock_financial_cash_ths,\n    stock_financial_abstract_new_ths,\n    stock_financial_debt_new_ths,\n    stock_financial_benefit_new_ths,\n    stock_financial_cash_new_ths,\n    stock_management_change_ths,\n    stock_shareholder_change_ths,\n)\n\n\"\"\"\n港股股票指数数据-新浪-东财\n\"\"\"\nfrom akshare.index.index_stock_hk import (\n    stock_hk_index_spot_sina,\n    stock_hk_index_daily_em,\n    stock_hk_index_spot_em,\n    stock_hk_index_daily_sina,\n)\n\n\"\"\"\n同花顺-数据中心-可转债\n\"\"\"\nfrom akshare.bond.bond_cb_ths import bond_zh_cov_info_ths\n\n\"\"\"\n同花顺-港股-分红派息\n\"\"\"\nfrom akshare.stock.stock_hk_fhpx_ths import stock_hk_fhpx_detail_ths\n\n\"\"\"\n同花顺-分红融资\n\"\"\"\nfrom akshare.stock_feature.stock_fhps_ths import stock_fhps_detail_ths\n\n\"\"\"\n东方财富-行情报价\n\"\"\"\nfrom akshare.stock.stock_ask_bid_em import stock_bid_ask_em\n\n\"\"\"\n同花顺-盈利预测\n\"\"\"\nfrom akshare.stock_fundamental.stock_profit_forecast_ths import (\n    stock_profit_forecast_ths,\n)\n\n\"\"\"\n期货资讯\n\"\"\"\nfrom akshare.futures.futures_news_shmet import futures_news_shmet\n\n\"\"\"\n主营介绍\n\"\"\"\nfrom akshare.stock_fundamental.stock_zyjs_ths import stock_zyjs_ths\n\n\"\"\"\n东方财富-ETF 行情\n\"\"\"\nfrom akshare.fund.fund_etf_em import (\n    fund_etf_hist_em,\n    fund_etf_hist_min_em,\n    fund_etf_spot_em,\n)\n\n\"\"\"\n上海证券交易所-ETF基金份额数据\n\"\"\"\nfrom akshare.fund.fund_etf_sse import fund_etf_scale_sse\n\n\"\"\"\n深圳证券交易所-ETF基金份额数据\n\"\"\"\nfrom akshare.fund.fund_etf_szse import fund_etf_scale_szse\n\n\"\"\"\n乐咕乐股-股债利差\n\"\"\"\nfrom akshare.stock_feature.stock_ebs_lg import stock_ebs_lg\n\n\"\"\"\n乐咕乐股-基金仓位\n\"\"\"\nfrom akshare.fund.fund_position_lg import (\n    fund_stock_position_lg,\n    fund_balance_position_lg,\n    fund_linghuo_position_lg,\n)\n\n\"\"\"\n乐咕乐股-大盘拥挤度\n\"\"\"\nfrom akshare.stock_feature.stock_congestion_lg import stock_a_congestion_lg\n\n\"\"\"\n乐咕乐股-股息率-A 股股息率\n\"\"\"\nfrom akshare.stock_feature.stock_gxl_lg import stock_a_gxl_lg, stock_hk_gxl_lg\n\n\"\"\"\n东方财富-限售解禁股\n\"\"\"\nfrom akshare.stock_fundamental.stock_restricted_em import (\n    stock_restricted_release_stockholder_em,\n    stock_restricted_release_summary_em,\n    stock_restricted_release_detail_em,\n    stock_restricted_release_queue_em,\n)\n\n\"\"\"\n同花顺行业一览表\n\"\"\"\nfrom akshare.stock_feature.stock_board_industry_ths import (\n    stock_board_industry_summary_ths,\n)\n\n\"\"\"\n生猪市场价格指数\n\"\"\"\nfrom akshare.index.index_hog import index_hog_spot_price\n\n\"\"\"\n债券信息查询\n\"\"\"\nfrom akshare.bond.bond_info_cm import (\n    bond_info_detail_cm,\n    bond_info_cm,\n    bond_info_cm_query,\n)\n\n\"\"\"\n申万宏源研究-指数系列\n\"\"\"\nfrom akshare.index.index_research_sw import (\n    index_realtime_sw,\n    index_hist_sw,\n    index_component_sw,\n    index_min_sw,\n    index_analysis_daily_sw,\n    index_analysis_weekly_sw,\n    index_analysis_monthly_sw,\n    index_analysis_week_month_sw,\n)\n\n\"\"\"\n50ETF 期权波动率指数\n\"\"\"\nfrom akshare.index.index_option_qvix import (\n    index_option_50etf_qvix,\n    index_option_300etf_min_qvix,\n    index_option_300etf_qvix,\n    index_option_50etf_min_qvix,\n    index_option_1000index_min_qvix,\n    index_option_1000index_qvix,\n    index_option_100etf_min_qvix,\n    index_option_100etf_qvix,\n    index_option_300index_min_qvix,\n    index_option_300index_qvix,\n    index_option_500etf_min_qvix,\n    index_option_500etf_qvix,\n    index_option_50index_min_qvix,\n    index_option_50index_qvix,\n    index_option_cyb_min_qvix,\n    index_option_cyb_qvix,\n    index_option_kcb_min_qvix,\n    index_option_kcb_qvix,\n)\n\n\"\"\"\n百度股市通-外汇-行情榜单\n\"\"\"\nfrom akshare.fx.fx_quote_baidu import fx_quote_baidu\n\n\"\"\"\n乐估乐股-底部研究-巴菲特指标\n\"\"\"\nfrom akshare.stock_feature.stock_buffett_index_lg import stock_buffett_index_lg\n\n\"\"\"\n百度股市通-热搜股票\n\"\"\"\nfrom akshare.stock.stock_hot_search_baidu import stock_hot_search_baidu\n\n\"\"\"\n百度股市通- A 股或指数-股评-投票\n\"\"\"\nfrom akshare.stock_feature.stock_zh_vote_baidu import stock_zh_vote_baidu\n\n\"\"\"\n百度股市通-A 股-财务报表-估值数据\n\"\"\"\nfrom akshare.stock_feature.stock_zh_valuation_baidu import stock_zh_valuation_baidu\n\n\"\"\"\n百度股市通-港股-财务报表-估值数据\n\"\"\"\nfrom akshare.stock_feature.stock_hk_valuation_baidu import stock_hk_valuation_baidu\n\n\"\"\"\n百度股市通-美股-财务报表-估值数据\n\"\"\"\nfrom akshare.stock_feature.stock_us_valuation_baidu import stock_us_valuation_baidu\n\n\"\"\"\n巨潮资讯-个股-公司概况\n\"\"\"\nfrom akshare.stock.stock_profile_cninfo import stock_profile_cninfo\n\n\"\"\"\n巨潮资讯-个股-上市相关\n\"\"\"\nfrom akshare.stock.stock_ipo_summary_cninfo import stock_ipo_summary_cninfo\n\n\"\"\"\n巨潮资讯-数据浏览器-筹资指标-公司配股实施方案\n\"\"\"\nfrom akshare.stock.stock_allotment_cninfo import stock_allotment_cninfo\n\n\"\"\"\n沪深港股通-参考汇率和结算汇率\n\"\"\"\nfrom akshare.stock_feature.stock_hsgt_exchange_rate import (\n    stock_sgt_reference_exchange_rate_sse,\n    stock_sgt_settlement_exchange_rate_sse,\n    stock_sgt_reference_exchange_rate_szse,\n    stock_sgt_settlement_exchange_rate_szse,\n)\n\n\"\"\"\n中国债券信息网-中债指数-中债指数族系-总指数-综合类指数\n\"\"\"\nfrom akshare.bond.bond_cbond import (\n    bond_new_composite_index_cbond,\n    bond_composite_index_cbond,\n)\n\n\"\"\"\n行业板块\n\"\"\"\nfrom akshare.stock_feature.stock_classify_sina import stock_classify_sina\n\n\"\"\"\n主营构成\n\"\"\"\nfrom akshare.stock_fundamental.stock_zygc import stock_zygc_em\n\n\"\"\"\n人民币汇率中间价\n\"\"\"\nfrom akshare.currency.currency_safe import currency_boc_safe\n\n\"\"\"\n期权-上海证券交易所-风险指标\n\"\"\"\nfrom akshare.option.option_risk_indicator_sse import option_risk_indicator_sse\n\n\"\"\"\n期权-上海证券交易所-当日合约\n\"\"\"\nfrom akshare.option.option_risk_indicator_sse import option_risk_indicator_sse\n\n\"\"\"\n\n全球宏观事件\n\"\"\"\nfrom akshare.news.news_baidu import (\n    news_economic_baidu,\n    news_trade_notify_suspend_baidu,\n    news_report_time_baidu,\n    news_trade_notify_dividend_baidu,\n)\n\n\"\"\"\n东方财富-股票-财务分析\n\"\"\"\nfrom akshare.stock_feature.stock_three_report_em import (\n    stock_balance_sheet_by_report_em,\n    stock_balance_sheet_by_yearly_em,\n    stock_profit_sheet_by_report_em,\n    stock_profit_sheet_by_quarterly_em,\n    stock_profit_sheet_by_yearly_em,\n    stock_cash_flow_sheet_by_report_em,\n    stock_cash_flow_sheet_by_quarterly_em,\n    stock_cash_flow_sheet_by_yearly_em,\n    stock_balance_sheet_by_report_delisted_em,\n    stock_profit_sheet_by_report_delisted_em,\n    stock_cash_flow_sheet_by_report_delisted_em,\n)\n\n\"\"\"\n内部交易\n\"\"\"\nfrom akshare.stock_feature.stock_inner_trade_xq import stock_inner_trade_xq\n\n\"\"\"\n股票热度-雪球\n\"\"\"\nfrom akshare.stock_feature.stock_hot_xq import (\n    stock_hot_deal_xq,\n    stock_hot_follow_xq,\n    stock_hot_tweet_xq,\n)\n\n\"\"\"\n东方财富-股票数据-龙虎榜\n\"\"\"\nfrom akshare.stock_feature.stock_lhb_em import (\n    stock_lhb_hyyyb_em,\n    stock_lhb_detail_em,\n    stock_lhb_stock_detail_em,\n    stock_lhb_jgmmtj_em,\n    stock_lhb_stock_statistic_em,\n    stock_lhb_stock_detail_date_em,\n    stock_lhb_yybph_em,\n    stock_lhb_jgstatistic_em,\n    stock_lhb_traderstatistic_em,\n    stock_lhb_yyb_detail_em,\n)\n\n\"\"\"\n指数行情数据\n\"\"\"\nfrom akshare.index.index_zh_em import (\n    index_zh_a_hist,\n    index_zh_a_hist_min_em,\n    index_code_id_map_em,\n)\n\n\"\"\"\n东方财富个股人气榜-A股\n\"\"\"\nfrom akshare.stock.stock_hot_rank_em import (\n    stock_hot_rank_detail_em,\n    stock_hot_rank_em,\n    stock_hot_rank_detail_realtime_em,\n    stock_hot_rank_relate_em,\n    stock_hot_keyword_em,\n    stock_hot_rank_latest_em,\n)\nfrom akshare.stock.stock_hot_up_em import stock_hot_up_em\n\n\"\"\"\n东方财富个股人气榜-港股\n\"\"\"\nfrom akshare.stock.stock_hk_hot_rank_em import (\n    stock_hk_hot_rank_detail_em,\n    stock_hk_hot_rank_latest_em,\n    stock_hk_hot_rank_detail_realtime_em,\n    stock_hk_hot_rank_em,\n)\n\n\"\"\"\n财新指数\n\"\"\"\nfrom akshare.index.index_cx import (\n    index_pmi_com_cx,\n    index_pmi_man_cx,\n    index_pmi_ser_cx,\n    index_dei_cx,\n    index_ii_cx,\n    index_si_cx,\n    index_fi_cx,\n    index_bi_cx,\n    index_ci_cx,\n    index_awpr_cx,\n    index_cci_cx,\n    index_li_cx,\n    index_neaw_cx,\n    index_nei_cx,\n    index_ti_cx,\n    index_ai_cx,\n    index_neei_cx,\n    index_bei_cx,\n    index_qli_cx,\n)\n\n\"\"\"\n期权折溢价分析\n\"\"\"\nfrom akshare.option.option_premium_analysis_em import (\n    option_premium_analysis_em,\n)\n\n\"\"\"\n期权风险分析\n\"\"\"\nfrom akshare.option.option_risk_analysis_em import option_risk_analysis_em\n\n\"\"\"\n期权价值分析\n\"\"\"\nfrom akshare.option.option_value_analysis_em import option_value_analysis_em\n\n\"\"\"\n期权龙虎榜\n\"\"\"\nfrom akshare.option.option_lhb_em import option_lhb_em\n\n\"\"\"\n东方财富网-数据中心-股东分析\n\"\"\"\nfrom akshare.stock_feature.stock_gdfx_em import (\n    stock_gdfx_holding_analyse_em,\n    stock_gdfx_free_holding_analyse_em,\n    stock_gdfx_free_top_10_em,\n    stock_gdfx_top_10_em,\n    stock_gdfx_free_holding_detail_em,\n    stock_gdfx_holding_detail_em,\n    stock_gdfx_free_holding_change_em,\n    stock_gdfx_holding_change_em,\n    stock_gdfx_free_holding_statistics_em,\n    stock_gdfx_holding_statistics_em,\n    stock_gdfx_free_holding_teamwork_em,\n    stock_gdfx_holding_teamwork_em,\n)\n\n\"\"\"\n中国食糖指数\n\"\"\"\nfrom akshare.index.index_sugar import (\n    index_sugar_msweet,\n    index_inner_quote_sugar_msweet,\n    index_outer_quote_sugar_msweet,\n)\n\n\"\"\"\n东方财富-个股信息\n\"\"\"\nfrom akshare.stock.stock_info_em import stock_individual_info_em\n\n\"\"\"\n上海黄金交易所-数据资讯-行情走势\n\"\"\"\nfrom akshare.spot.spot_sge import (\n    spot_hist_sge,\n    spot_symbol_table_sge,\n    spot_silver_benchmark_sge,\n    spot_golden_benchmark_sge,\n    spot_quotations_sge,\n)\n\n\"\"\"\n股票回购\n\"\"\"\nfrom akshare.stock.stock_repurchase_em import stock_repurchase_em\n\n\"\"\"\n东方财富-行业板块\n\"\"\"\nfrom akshare.stock.stock_board_industry_em import (\n    stock_board_industry_cons_em,\n    stock_board_industry_hist_em,\n    stock_board_industry_hist_min_em,\n    stock_board_industry_name_em,\n    stock_board_industry_spot_em,\n)\n\n\"\"\"\n天天基金网-基金数据-规模变动\n\"\"\"\nfrom akshare.fund.fund_scale_em import (\n    fund_scale_change_em,\n    fund_hold_structure_em,\n)\n\n\"\"\"\n天天基金网-基金数据-分红送配\n\"\"\"\nfrom akshare.fund.fund_fhsp_em import fund_cf_em, fund_fh_rank_em, fund_fh_em\n\n\"\"\"\n艺恩-艺人\n\"\"\"\nfrom akshare.movie.artist_yien import (\n    online_value_artist,\n    business_value_artist,\n)\n\n\"\"\"\n艺恩-视频放映\n\"\"\"\nfrom akshare.movie.video_yien import video_variety_show, video_tv\n\n\"\"\"\n同花顺-数据中心-技术选股\n\"\"\"\nfrom akshare.stock_feature.stock_technology_ths import (\n    stock_rank_cxg_ths,\n    stock_rank_cxd_ths,\n    stock_rank_lxsz_ths,\n    stock_rank_lxxd_ths,\n    stock_rank_cxfl_ths,\n    stock_rank_cxsl_ths,\n    stock_rank_xstp_ths,\n    stock_rank_xxtp_ths,\n    stock_rank_ljqd_ths,\n    stock_rank_ljqs_ths,\n    stock_rank_xzjp_ths,\n)\n\n\"\"\"\n沪深港通持股\n\"\"\"\nfrom akshare.stock_feature.stock_hsgt_em import (\n    stock_hsgt_individual_em,\n    stock_hsgt_individual_detail_em,\n    stock_hsgt_fund_flow_summary_em,\n)\n\n\"\"\"\n基金规模\n\"\"\"\nfrom akshare.fund.fund_scale_sina import (\n    fund_scale_open_sina,\n    fund_scale_close_sina,\n    fund_scale_structured_sina,\n)\n\n\"\"\"\n巨潮资讯-数据中心-专题统计-基金报表\n\"\"\"\nfrom akshare.fund.fund_report_cninfo import (\n    fund_report_stock_cninfo,\n    fund_report_industry_allocation_cninfo,\n    fund_report_asset_allocation_cninfo,\n)\n\n\"\"\"\n巨潮资讯-数据中心-专题统计-债券报表-债券发行\n\"\"\"\nfrom akshare.bond.bond_issue_cninfo import (\n    bond_treasure_issue_cninfo,\n    bond_local_government_issue_cninfo,\n    bond_corporate_issue_cninfo,\n    bond_cov_issue_cninfo,\n    bond_cov_stock_issue_cninfo,\n)\n\n\"\"\"\n巨潮资讯-数据中心-专题统计-公司治理-股权质押\n\"\"\"\nfrom akshare.stock.stock_cg_equity_mortgage import (\n    stock_cg_equity_mortgage_cninfo,\n)\n\n\"\"\"\n巨潮资讯-数据中心-专题统计-公司治理-公司诉讼\n\"\"\"\nfrom akshare.stock.stock_cg_lawsuit import stock_cg_lawsuit_cninfo\n\n\"\"\"\n巨潮资讯-数据中心-专题统计-公司治理-对外担保\n\"\"\"\nfrom akshare.stock.stock_cg_guarantee import stock_cg_guarantee_cninfo\n\n\"\"\"\nB 股\n\"\"\"\nfrom akshare.stock.stock_zh_b_sina import (\n    stock_zh_b_spot,\n    stock_zh_b_daily,\n    stock_zh_b_minute,\n)\n\n\"\"\"\n期货手续费\n\"\"\"\nfrom akshare.futures.futures_comm_qihuo import futures_comm_info\nfrom akshare.futures.futures_comm_ctp import futures_fees_info\n\n\"\"\"\n实际控制人持股变动\n\"\"\"\nfrom akshare.stock.stock_hold_control_cninfo import (\n    stock_hold_control_cninfo,\n    stock_hold_management_detail_cninfo,\n)\n\n\"\"\"\n股东人数及持股集中度\n\"\"\"\nfrom akshare.stock.stock_hold_num_cninfo import stock_hold_num_cninfo\n\n\"\"\"\n新股过会\n\"\"\"\nfrom akshare.stock.stock_new_cninfo import (\n    stock_new_gh_cninfo,\n    stock_new_ipo_cninfo,\n)\n\n\"\"\"\n个股分红\n\"\"\"\nfrom akshare.stock.stock_dividend_cninfo import stock_dividend_cninfo\n\n\"\"\"\n公司股本变动\n\"\"\"\nfrom akshare.stock.stock_share_changes_cninfo import stock_share_change_cninfo\n\n\"\"\"\n行业分类数据\n\"\"\"\nfrom akshare.stock.stock_industry_cninfo import (\n    stock_industry_category_cninfo,\n    stock_industry_change_cninfo,\n)\n\n\"\"\"\n行业市盈率\n\"\"\"\nfrom akshare.stock.stock_industry_pe_cninfo import (\n    stock_industry_pe_ratio_cninfo,\n)\n\n\"\"\"\n申万宏源行业分类数据\n\"\"\"\n\nfrom akshare.stock.stock_industry_sw import stock_industry_clf_hist_sw\n\n\"\"\"\n投资评级\n\"\"\"\nfrom akshare.stock.stock_rank_forecast import stock_rank_forecast_cninfo\n\n\"\"\"\n美股-知名美股\n\"\"\"\nfrom akshare.stock.stock_us_famous import stock_us_famous_spot_em\n\n\"\"\"\n美股-粉单市场\n\"\"\"\nfrom akshare.stock.stock_us_pink import stock_us_pink_spot_em\n\n\"\"\"\nREITs\n\"\"\"\nfrom akshare.reits.reits_basic import reits_realtime_em, reits_hist_em, reits_hist_min_em\n\n\"\"\"\n全部 A 股-等权重市盈率、中位数市盈率\n全部 A 股-等权重、中位数市净率\n\"\"\"\nfrom akshare.stock_feature.stock_ttm_lyr import stock_a_ttm_lyr\nfrom akshare.stock_feature.stock_all_pb import stock_a_all_pb\n\n\"\"\"\n宏观-加拿大\n\"\"\"\nfrom akshare.economic.macro_canada import (\n    macro_canada_cpi_monthly,\n    macro_canada_core_cpi_monthly,\n    macro_canada_bank_rate,\n    macro_canada_core_cpi_yearly,\n    macro_canada_cpi_yearly,\n    macro_canada_gdp_monthly,\n    macro_canada_new_house_rate,\n    macro_canada_retail_rate_monthly,\n    macro_canada_trade,\n    macro_canada_unemployment_rate,\n)\n\n\"\"\"\n猪肉价格信息\n\"\"\"\nfrom akshare.futures_derivative.futures_hog import (\n    futures_hog_core,\n    futures_hog_cost,\n    futures_hog_supply,\n)\n\n\"\"\"\n宏观-澳大利亚\n\"\"\"\nfrom akshare.economic.macro_australia import (\n    macro_australia_bank_rate,\n    macro_australia_unemployment_rate,\n    macro_australia_trade,\n    macro_australia_cpi_quarterly,\n    macro_australia_cpi_yearly,\n    macro_australia_ppi_quarterly,\n    macro_australia_retail_rate_monthly,\n)\n\n\"\"\"\n融资融券-深圳\n\"\"\"\nfrom akshare.stock_feature.stock_margin_szse import (\n    stock_margin_underlying_info_szse,\n    stock_margin_detail_szse,\n    stock_margin_szse,\n)\n\n\"\"\"\n英国-宏观\n\"\"\"\nfrom akshare.economic.macro_uk import (\n    macro_uk_gdp_yearly,\n    macro_uk_gdp_quarterly,\n    macro_uk_retail_yearly,\n    macro_uk_rightmove_monthly,\n    macro_uk_rightmove_yearly,\n    macro_uk_unemployment_rate,\n    macro_uk_halifax_monthly,\n    macro_uk_bank_rate,\n    macro_uk_core_cpi_monthly,\n    macro_uk_core_cpi_yearly,\n    macro_uk_cpi_monthly,\n    macro_uk_cpi_yearly,\n    macro_uk_halifax_yearly,\n    macro_uk_retail_monthly,\n    macro_uk_trade,\n)\n\n\"\"\"\n日本-宏观\n\"\"\"\nfrom akshare.economic.macro_japan import (\n    macro_japan_bank_rate,\n    macro_japan_core_cpi_yearly,\n    macro_japan_cpi_yearly,\n    macro_japan_head_indicator,\n    macro_japan_unemployment_rate,\n)\n\n\"\"\"\n瑞士-宏观\n\"\"\"\nfrom akshare.economic.macro_swiss import (\n    macro_swiss_trade,\n    macro_swiss_svme,\n    macro_swiss_cpi_yearly,\n    macro_swiss_gbd_yearly,\n    macro_swiss_gbd_bank_rate,\n    macro_swiss_gdp_quarterly,\n)\n\n\"\"\"\n东方财富-概念板块\n\"\"\"\nfrom akshare.stock.stock_board_concept_em import (\n    stock_board_concept_cons_em,\n    stock_board_concept_hist_em,\n    stock_board_concept_hist_min_em,\n    stock_board_concept_name_em,\n    stock_board_concept_spot_em,\n)\n\n\"\"\"\n德国-经济指标\n\"\"\"\nfrom akshare.economic.macro_germany import (\n    macro_germany_gdp,\n    macro_germany_ifo,\n    macro_germany_cpi_monthly,\n    macro_germany_retail_sale_monthly,\n    macro_germany_trade_adjusted,\n    macro_germany_retail_sale_yearly,\n    macro_germany_cpi_yearly,\n    macro_germany_zew,\n)\n\n\"\"\"\n基金规模和规模趋势\n\"\"\"\nfrom akshare.fund.fund_aum_em import (\n    fund_aum_em,\n    fund_aum_trend_em,\n    fund_aum_hist_em,\n)\n\n\"\"\"\nCME 比特币成交量\n\"\"\"\nfrom akshare.crypto.crypto_bitcoin_cme import crypto_bitcoin_cme\n\n\"\"\"\n盘口异动\n\"\"\"\nfrom akshare.stock_feature.stock_pankou_em import (\n    stock_changes_em,\n    stock_board_change_em,\n)\n\n\"\"\"\nA 股东方财富\n\"\"\"\nfrom akshare.stock_feature.stock_hist_em import (\n    stock_zh_a_spot_em,\n    stock_bj_a_spot_em,\n    stock_new_a_spot_em,\n    stock_kc_a_spot_em,\n    stock_cy_a_spot_em,\n    stock_sh_a_spot_em,\n    stock_sz_a_spot_em,\n    stock_zh_b_spot_em,\n    stock_zh_ab_comparison_em,\n    stock_zh_a_hist,\n    stock_hk_spot_em,\n    stock_hk_main_board_spot_em,\n    stock_hk_hist,\n    stock_us_spot_em,\n    stock_us_hist,\n    stock_zh_a_hist_min_em,\n    stock_zh_a_hist_pre_min_em,\n    stock_hk_hist_min_em,\n    stock_us_hist_min_em,\n)\n\n\"\"\"\n中行人民币牌价历史数据查询\n\"\"\"\nfrom akshare.currency.currency_china_bank_sina import currency_boc_sina\n\n\"\"\"\n期货持仓\n\"\"\"\nfrom akshare.futures_derivative.futures_cot_sina import futures_hold_pos_sina\n\n\"\"\"\n股东户数\n\"\"\"\nfrom akshare.stock_feature.stock_gdhs import (\n    stock_zh_a_gdhs,\n    stock_zh_a_gdhs_detail_em,\n)\n\n\"\"\"\n两网及退市\n\"\"\"\nfrom akshare.stock.stock_stop import stock_staq_net_stop\n\n\"\"\"\n涨停板行情\n\"\"\"\nfrom akshare.stock_feature.stock_ztb_em import (\n    stock_zt_pool_em,\n    stock_zt_pool_previous_em,\n    stock_zt_pool_dtgc_em,\n    stock_zt_pool_zbgc_em,\n    stock_zt_pool_strong_em,\n    stock_zt_pool_sub_new_em,\n)\n\n\"\"\"\n中国-香港-宏观\n\"\"\"\nfrom akshare.economic.macro_china_hk import (\n    macro_china_hk_cpi,\n    macro_china_hk_cpi_ratio,\n    macro_china_hk_trade_diff_ratio,\n    macro_china_hk_gbp_ratio,\n    macro_china_hk_building_amount,\n    macro_china_hk_building_volume,\n    macro_china_hk_gbp,\n    macro_china_hk_ppi,\n    macro_china_hk_rate_of_unemployment,\n)\n\n\"\"\"\n增发和配股\n\"\"\"\nfrom akshare.stock_feature.stock_zf_pg import stock_qbzf_em, stock_pg_em\n\n\"\"\"\n汽车销量\n\"\"\"\nfrom akshare.other.other_car_gasgoo import car_sale_rank_gasgoo\nfrom akshare.other.other_car_cpca import (\n    car_market_cate_cpca,\n    car_market_fuel_cpca,\n    car_market_segment_cpca,\n    car_market_country_cpca,\n    car_market_man_rank_cpca,\n    car_market_total_cpca,\n)\n\n\"\"\"\n中国公路物流运价、运量指数\n\"\"\"\nfrom akshare.index.index_cflp import index_price_cflp, index_volume_cflp\n\n\"\"\"\n赚钱效应分析\n\"\"\"\nfrom akshare.stock_feature.stock_market_legu import stock_market_activity_legu\n\n\"\"\"\n浙江省排污权交易指数\n\"\"\"\nfrom akshare.index.index_eri import index_eri\n\n\"\"\"\nDrewry 集装箱指数\n\"\"\"\nfrom akshare.index.index_drewry import drewry_wci_index\n\n\"\"\"\n柯桥指数\n\"\"\"\nfrom akshare.index.index_kq_fz import index_kq_fz\nfrom akshare.index.index_kq_ss import index_kq_fashion\n\n\"\"\"\n新发基金\n\"\"\"\nfrom akshare.fund.fund_init_em import fund_new_found_em\nfrom akshare.fund.fund_init_ths import fund_new_found_ths\n\n\"\"\"\n高管持股\n\"\"\"\nfrom akshare.stock_feature.stock_gdzjc_em import stock_ggcg_em\n\n\"\"\"\n同花顺-数据中心-资金流向-概念资金流\n\"\"\"\nfrom akshare.stock_feature.stock_fund_flow import (\n    stock_fund_flow_concept,\n    stock_fund_flow_industry,\n    stock_fund_flow_big_deal,\n    stock_fund_flow_individual,\n)\n\n\"\"\"\n比特币持仓\n\"\"\"\nfrom akshare.crypto.crypto_hold import crypto_bitcoin_hold_report\n\n\"\"\"\n证券交易营业部排行\n\"\"\"\nfrom akshare.stock_feature.stock_lh_yybpm import (\n    stock_lh_yyb_capital,\n    stock_lh_yyb_most,\n    stock_lh_yyb_control,\n)\n\n\"\"\"\n沪深 A 股公告\n\"\"\"\nfrom akshare.stock_fundamental.stock_notice import stock_notice_report\n\n\"\"\"\n首发企业申报\n\"\"\"\nfrom akshare.stock_fundamental.stock_ipo_declare import stock_ipo_declare_em\n\n\"\"\"\n辅导备案信息\n\"\"\"\nfrom akshare.stock_fundamental.stock_ipo_tutor import stock_ipo_tutor_em\n\n\"\"\"\n三大报表\n\"\"\"\nfrom akshare.stock_feature.stock_report_em import (\n    stock_zcfz_em,\n    stock_zcfz_bj_em,\n    stock_lrb_em,\n    stock_xjll_em,\n)\n\n\"\"\"\n业绩报告\n\"\"\"\nfrom akshare.stock_feature.stock_yjbb_em import stock_yjbb_em\n\n\"\"\"\n同花顺-概念板块\n\"\"\"\nfrom akshare.stock_feature.stock_board_concept_ths import (\n    stock_board_concept_info_ths,\n    stock_board_concept_summary_ths,\n    stock_board_concept_index_ths,\n    stock_board_concept_name_ths,\n)\n\n\"\"\"\n同花顺-行业板块\n\"\"\"\nfrom akshare.stock_feature.stock_board_industry_ths import (\n    stock_board_industry_name_ths,\n    stock_board_industry_info_ths,\n    stock_board_industry_index_ths,\n    stock_ipo_benefit_ths,\n    stock_xgsr_ths,\n)\n\n\"\"\"\n分红配送\n\"\"\"\nfrom akshare.stock_feature.stock_fhps_em import stock_fhps_em, stock_fhps_detail_em\n\n\"\"\"\n中美国债收益率\n\"\"\"\nfrom akshare.bond.bond_em import bond_zh_us_rate\n\n\"\"\"\n盈利预测\n\"\"\"\nfrom akshare.stock_fundamental.stock_profit_forecast_em import (\n    stock_profit_forecast_em,\n)\n\n\"\"\"\n基金经理\n\"\"\"\nfrom akshare.fund.fund_manager import fund_manager_em\n\n\"\"\"\n基金评级\n\"\"\"\nfrom akshare.fund.fund_rating import (\n    fund_rating_sh,\n    fund_rating_zs,\n    fund_rating_ja,\n    fund_rating_all,\n)\n\n\"\"\"\n融资融券数据\n\"\"\"\nfrom akshare.stock_feature.stock_margin_sse import (\n    stock_margin_detail_sse,\n    stock_margin_sse,\n    stock_margin_ratio_pa,\n)\n\n\"\"\"\n期货交割和期转现\n\"\"\"\nfrom akshare.futures.futures_to_spot import (\n    futures_to_spot_czce,\n    futures_to_spot_shfe,\n    futures_to_spot_dce,\n    futures_delivery_dce,\n    futures_delivery_shfe,\n    futures_delivery_czce,\n    futures_delivery_match_dce,\n    futures_delivery_match_czce,\n)\n\n\"\"\"\n基金持仓\n\"\"\"\nfrom akshare.fund.fund_portfolio_em import (\n    fund_portfolio_hold_em,\n    fund_portfolio_change_em,\n    fund_portfolio_bond_hold_em,\n    fund_portfolio_industry_allocation_em,\n)\n\n\"\"\"\n债券概览\n\"\"\"\nfrom akshare.bond.bond_summary import (\n    bond_deal_summary_sse,\n    bond_cash_summary_sse,\n)\n\n\"\"\"\n新闻-个股新闻\n\"\"\"\nfrom akshare.news.news_stock import stock_news_em\n\n\"\"\"\n股票数据-一致行动人\n\"\"\"\nfrom akshare.stock_feature.stock_yzxdr_em import stock_yzxdr_em\n\n\"\"\"\n大宗交易\n\"\"\"\nfrom akshare.stock.stock_dzjy_em import (\n    stock_dzjy_sctj,\n    stock_dzjy_mrmx,\n    stock_dzjy_mrtj,\n    stock_dzjy_hygtj,\n    stock_dzjy_yybph,\n    stock_dzjy_hyyybtj,\n)\n\n\"\"\"\n国证指数\n\"\"\"\nfrom akshare.index.index_cni import (\n    index_hist_cni,\n    index_all_cni,\n    index_detail_cni,\n    index_detail_hist_cni,\n    index_detail_hist_adjust_cni,\n)\n\n\"\"\"\n东方财富-期权\n\"\"\"\nfrom akshare.option.option_em import option_current_em\n\n\"\"\"\n科创板报告\n\"\"\"\nfrom akshare.stock.stock_zh_kcb_report import stock_zh_kcb_report_em\n\n\"\"\"\n期货合约详情\n\"\"\"\nfrom akshare.futures.futures_contract_detail import futures_contract_detail, futures_contract_detail_em\n\n\"\"\"\n胡润排行榜\n\"\"\"\nfrom akshare.fortune.fortune_hurun import hurun_rank\n\n\"\"\"\n新财富富豪榜\n\"\"\"\nfrom akshare.fortune.fortune_xincaifu_500 import xincaifu_rank\n\n\"\"\"\n福布斯中国榜单\n\"\"\"\nfrom akshare.fortune.fortune_forbes_500 import forbes_rank\n\n\"\"\"\n回购定盘利率\n\"\"\"\nfrom akshare.rate.repo_rate import repo_rate_hist, repo_rate_query\n\n\"\"\"\n公募基金排行\n\"\"\"\nfrom akshare.fund.fund_rank_em import (\n    fund_exchange_rank_em,\n    fund_money_rank_em,\n    fund_open_fund_rank_em,\n    fund_hk_rank_em,\n    fund_lcx_rank_em,\n)\n\n\"\"\"\n电影票房\n\"\"\"\nfrom akshare.movie.movie_yien import (\n    movie_boxoffice_cinema_daily,\n    movie_boxoffice_cinema_weekly,\n    movie_boxoffice_weekly,\n    movie_boxoffice_daily,\n    movie_boxoffice_monthly,\n    movie_boxoffice_realtime,\n    movie_boxoffice_yearly,\n    movie_boxoffice_yearly_first_week,\n)\n\n\"\"\"\n新闻联播文字稿\n\"\"\"\nfrom akshare.news.news_cctv import news_cctv\n\n\"\"\"\n债券收盘收益率曲线历史数据\n\"\"\"\nfrom akshare.bond.bond_china_money import (\n    bond_china_close_return,\n    macro_china_bond_public,\n    macro_china_swap_rate,\n    bond_china_close_return_map,\n\n)\n\n\"\"\"\nCOMEX黄金-白银库存\n\"\"\"\nfrom akshare.futures.futures_comex_em import futures_comex_inventory\n\n\"\"\"\nA 股-特别标的\n\"\"\"\nfrom akshare.stock.stock_zh_a_special import (\n    stock_zh_a_new,\n    stock_zh_a_st_em,\n    stock_zh_a_new_em,\n    stock_zh_a_stop_em,\n)\n\n\"\"\"\n东方财富-注册制审核\n\"\"\"\nfrom akshare.stock_fundamental.stock_register_em import (\n    stock_register_all_em,\n    stock_register_kcb,\n    stock_register_cyb,\n    stock_register_bj,\n    stock_register_db,\n    stock_register_sh,\n    stock_register_sz\n)\n\n\"\"\"\n东方财富-过会企业信息\n\"\"\"\nfrom akshare.stock_fundamental.stock_ipo_review import stock_ipo_review_em\n\n\"\"\"\n同花顺-新股申购与中签\n\"\"\"\nfrom akshare.stock_fundamental.stock_ipo_ths import (\n    stock_ipo_ths,\n    stock_ipo_hk_ths,\n)\n\n\"\"\"\n新浪财经-龙虎榜\n\"\"\"\nfrom akshare.stock_feature.stock_lhb_sina import (\n    stock_lhb_detail_daily_sina,\n    stock_lhb_ggtj_sina,\n    stock_lhb_jgmx_sina,\n    stock_lhb_jgzz_sina,\n    stock_lhb_yytj_sina,\n)\n\n\"\"\"\n中证指数\n\"\"\"\nfrom akshare.index.index_stock_zh_csindex import (\n    stock_zh_index_hist_csindex,\n    stock_zh_index_value_csindex,\n)\n\n\"\"\"\n股票基金持仓数据\n\"\"\"\nfrom akshare.stock.stock_fund_hold import (\n    stock_report_fund_hold,\n    stock_report_fund_hold_detail,\n)\n\n\"\"\"\n期货分钟数据\n\"\"\"\nfrom akshare.futures.futures_zh_sina import (\n    futures_zh_minute_sina,\n    futures_zh_daily_sina,\n    futures_zh_realtime,\n    futures_symbol_mark,\n    match_main_contract,\n    futures_zh_spot,\n)\n\n\"\"\"\n股票财务报告预约披露\n\"\"\"\nfrom akshare.stock_feature.stock_yjyg_cninfo import stock_report_disclosure\n\n\"\"\"\n基金行情\n\"\"\"\nfrom akshare.fund.fund_etf_sina import (\n    fund_etf_hist_sina,\n    fund_etf_category_sina,\n    fund_etf_dividend_sina,\n)\n\n\"\"\"\n交易日历\n\"\"\"\nfrom akshare.tool.trade_date_hist import tool_trade_date_hist_sina\n\n\"\"\"\ncommodity option\n\"\"\"\nfrom akshare.option.option_commodity_sina import (\n    option_commodity_contract_table_sina,\n    option_commodity_contract_sina,\n    option_commodity_hist_sina,\n)\n\n\"\"\"\nA 股PE和PB\n\"\"\"\nfrom akshare.stock_feature.stock_a_pe_and_pb import (\n    stock_market_pb_lg,\n    stock_index_pb_lg,\n    stock_market_pe_lg,\n    stock_index_pe_lg,\n)\nfrom akshare.stock_feature.stock_a_indicator import (\n    stock_hk_indicator_eniu,\n)\nfrom akshare.stock_feature.stock_a_high_low import stock_a_high_low_statistics\nfrom akshare.stock_feature.stock_a_below_net_asset_statistics import (\n    stock_a_below_net_asset_statistics,\n)\n\n\"\"\"\n彭博亿万富豪指数\n\"\"\"\nfrom akshare.fortune.fortune_bloomberg import (\n    index_bloomberg_billionaires,\n    index_bloomberg_billionaires_hist,\n)\n\n\"\"\"\nstock-券商业绩月报\n\"\"\"\nfrom akshare.stock_feature.stock_qsjy_em import stock_qsjy_em\n\n\"\"\"\nfutures-warehouse-receipt\n\"\"\"\nfrom akshare.futures.futures_warehouse_receipt import (\n    futures_warehouse_receipt_czce,\n    futures_warehouse_receipt_dce,\n    futures_shfe_warehouse_receipt,\n    futures_gfex_warehouse_receipt,\n)\n\n\"\"\"\nstock-js\n\"\"\"\nfrom akshare.stock.stock_us_js import stock_price_js\n\n\"\"\"\nstock-summary\n\"\"\"\nfrom akshare.stock.stock_summary import (\n    stock_sse_summary,\n    stock_szse_summary,\n    stock_sse_deal_daily,\n    stock_szse_area_summary,\n    stock_szse_sector_summary,\n)\n\n\"\"\"\n股票-机构推荐池\n\"\"\"\nfrom akshare.stock_fundamental.stock_recommend import (\n    stock_institute_recommend,\n    stock_institute_recommend_detail,\n)\n\n\"\"\"\n股票-机构持股\n\"\"\"\nfrom akshare.stock_fundamental.stock_hold import (\n    stock_institute_hold_detail,\n    stock_institute_hold,\n)\n\n\"\"\"\nstock-info\n\"\"\"\nfrom akshare.stock.stock_info import (\n    stock_info_sh_delist,\n    stock_info_sz_delist,\n    stock_info_a_code_name,\n    stock_info_sh_name_code,\n    stock_info_bj_name_code,\n    stock_info_sz_name_code,\n    stock_info_sz_change_name,\n    stock_info_change_name,\n)\n\n\"\"\"\nstock-sector\n\"\"\"\nfrom akshare.stock.stock_industry import stock_sector_spot, stock_sector_detail\n\n\"\"\"\nstock-fundamental\n\"\"\"\nfrom akshare.stock_fundamental.stock_finance_sina import (\n    stock_financial_abstract,\n    stock_financial_report_sina,\n    stock_financial_analysis_indicator,\n    stock_add_stock,\n    stock_ipo_info,\n    stock_history_dividend_detail,\n    stock_history_dividend,\n    stock_circulate_stock_holder,\n    stock_restricted_release_queue_sina,\n    stock_fund_stock_holder,\n    stock_main_stock_holder,\n)\n\n\"\"\"\nstock-HK-fundamental\n\"\"\"\nfrom akshare.stock_fundamental.stock_finance_hk_em import (\n    stock_financial_hk_analysis_indicator_em,\n    stock_financial_hk_report_em,\n)\n\n\"\"\"\nstock_fund\n\"\"\"\nfrom akshare.stock.stock_fund_em import (\n    stock_individual_fund_flow,\n    stock_market_fund_flow,\n    stock_sector_fund_flow_rank,\n    stock_individual_fund_flow_rank,\n    stock_sector_fund_flow_summary,\n    stock_sector_fund_flow_hist,\n    stock_concept_fund_flow_hist,\n    stock_main_fund_flow,\n)\n\n\"\"\"\nair-quality\n\"\"\"\nfrom akshare.air.air_zhenqi import (\n    air_quality_hist,\n    air_quality_rank,\n    air_quality_watch_point,\n    air_city_table,\n)\n\n\"\"\"\nhf\n\"\"\"\nfrom akshare.hf.hf_sp500 import hf_sp_500\n\n\"\"\"\nstock_yjyg_em\n\"\"\"\nfrom akshare.stock_feature.stock_yjyg_em import (\n    stock_yjyg_em,\n    stock_yysj_em,\n    stock_yjkb_em,\n)\n\n\"\"\"\nstock\n\"\"\"\nfrom akshare.stock_feature.stock_dxsyl_em import (\n    stock_dxsyl_em,\n    stock_xgsglb_em,\n)\n\n\"\"\"\narticle\n\"\"\"\nfrom akshare.article.fred_md import fred_md, fred_qd\n\n\"\"\"\n中证商品指数\n\"\"\"\nfrom akshare.futures.futures_index_ccidx import futures_index_ccidx\n\n\"\"\"\nfutures_em_spot_stock\n\"\"\"\nfrom akshare.futures.futures_spot_stock_em import futures_spot_stock\n\n\"\"\"\nenergy_oil\n\"\"\"\nfrom akshare.energy.energy_oil_em import energy_oil_detail, energy_oil_hist\n\n\"\"\"\nfutures-foreign\n\"\"\"\nfrom akshare.futures.futures_foreign import (\n    futures_foreign_detail,\n    futures_foreign_hist,\n)\n\n\"\"\"\nstock-em-tfp\n\"\"\"\nfrom akshare.stock_feature.stock_tfp_em import stock_tfp_em\n\n\"\"\"\nstock-em-hsgt\n\"\"\"\nfrom akshare.stock_feature.stock_hsgt_em import (\n    stock_hk_ggt_components_em,\n    stock_hsgt_hold_stock_em,\n    stock_hsgt_hist_em,\n    stock_hsgt_institution_statistics_em,\n    stock_hsgt_stock_statistics_em,\n    stock_hsgt_board_rank_em,\n)\n\n\"\"\"\nstock-em-comment\n\"\"\"\nfrom akshare.stock_feature.stock_comment_em import (\n    stock_comment_em,\n    stock_comment_detail_zlkp_jgcyd_em,\n    stock_comment_detail_scrd_focus_em,\n    stock_comment_detail_zhpj_lspf_em,\n    stock_comment_detail_scrd_desire_em,\n)\n\n\"\"\"\nstock-em-analyst\n\"\"\"\nfrom akshare.stock_feature.stock_analyst_em import (\n    stock_analyst_detail_em,\n    stock_analyst_rank_em,\n)\n\n\"\"\"\n新加坡期货交易所\n\"\"\"\nfrom akshare.futures.futures_settlement_price_sgx import futures_settlement_price_sgx\n\n\"\"\"\ncurrency interface\n\"\"\"\nfrom akshare.currency.currency import (\n    currency_convert,\n    currency_currencies,\n    currency_history,\n    currency_latest,\n    currency_time_series,\n)\n\n\"\"\"\n知识图谱\n\"\"\"\nfrom akshare.nlp.nlp_interface import nlp_ownthink, nlp_answer\n\n\"\"\"\n微博舆情报告\n\"\"\"\nfrom akshare.stock.stock_weibo_nlp import (\n    stock_js_weibo_nlp_time,\n    stock_js_weibo_report,\n)\n\n\"\"\"\n金融期权-新浪\n\"\"\"\nfrom akshare.option.option_finance_sina import (\n    option_cffex_sz50_list_sina,\n    option_cffex_sz50_spot_sina,\n    option_cffex_sz50_daily_sina,\n    option_cffex_hs300_list_sina,\n    option_cffex_hs300_spot_sina,\n    option_cffex_hs300_daily_sina,\n    option_cffex_zz1000_list_sina,\n    option_cffex_zz1000_spot_sina,\n    option_cffex_zz1000_daily_sina,\n    option_sse_list_sina,\n    option_sse_expire_day_sina,\n    option_sse_codes_sina,\n    option_sse_spot_price_sina,\n    option_sse_underlying_spot_price_sina,\n    option_sse_greeks_sina,\n    option_sse_minute_sina,\n    option_sse_daily_sina,\n    option_finance_minute_sina,\n    option_minute_em,\n)\n\n\"\"\"\n债券-沪深债券\n\"\"\"\nfrom akshare.bond.bond_zh_sina import bond_zh_hs_daily, bond_zh_hs_spot\nfrom akshare.bond.bond_zh_cov import (\n    bond_zh_hs_cov_daily,\n    bond_zh_hs_cov_spot,\n    bond_cov_comparison,\n    bond_zh_cov,\n    bond_zh_cov_info,\n    bond_zh_hs_cov_min,\n    bond_zh_hs_cov_pre_min,\n    bond_zh_cov_value_analysis,\n)\nfrom akshare.bond.bond_convert import (\n    bond_cb_jsl,\n    bond_cb_adj_logs_jsl,\n    bond_cb_index_jsl,\n    bond_cb_redeem_jsl,\n)\n\n\"\"\"\n基金数据接口\n\"\"\"\nfrom akshare.fund.fund_em import (\n    fund_open_fund_daily_em,\n    fund_open_fund_info_em,\n    fund_etf_fund_daily_em,\n    fund_etf_fund_info_em,\n    fund_financial_fund_daily_em,\n    fund_financial_fund_info_em,\n    fund_name_em,\n    fund_info_index_em,\n    fund_graded_fund_daily_em,\n    fund_graded_fund_info_em,\n    fund_money_fund_daily_em,\n    fund_money_fund_info_em,\n    fund_value_estimation_em,\n    fund_hk_fund_hist_em,\n    fund_purchase_em,\n)\n\n\"\"\"\n百度迁徙地图接口\n\"\"\"\nfrom akshare.event.migration import (\n    migration_area_baidu,\n    migration_scale_baidu,\n)\n\n\"\"\"\n英为财情-外汇-货币对历史数据\n\"\"\"\nfrom akshare.fx.currency_investing import (\n    currency_pair_map,\n)\n\n\"\"\"\n商品期权-郑州商品交易所-期权-历史数据\n\"\"\"\nfrom akshare.option.option_czce import option_hist_yearly_czce\n\n\"\"\"\n宏观-经济数据-银行间拆借利率\n\"\"\"\nfrom akshare.interest_rate.interbank_rate_em import rate_interbank\n\n\"\"\"\n金十数据中心-外汇情绪\n\"\"\"\nfrom akshare.economic.macro_other import macro_fx_sentiment\n\n\"\"\"\n金十数据中心-经济指标-欧元区\n\"\"\"\nfrom akshare.economic.macro_euro import (\n    macro_euro_gdp_yoy,\n    macro_euro_cpi_mom,\n    macro_euro_cpi_yoy,\n    macro_euro_current_account_mom,\n    macro_euro_employment_change_qoq,\n    macro_euro_industrial_production_mom,\n    macro_euro_manufacturing_pmi,\n    macro_euro_ppi_mom,\n    macro_euro_retail_sales_mom,\n    macro_euro_sentix_investor_confidence,\n    macro_euro_services_pmi,\n    macro_euro_trade_balance,\n    macro_euro_unemployment_rate_mom,\n    macro_euro_zew_economic_sentiment,\n    macro_euro_lme_holding,\n    macro_euro_lme_stock,\n)\n\n\"\"\"\n金十数据中心-经济指标-央行利率-主要央行利率\n\"\"\"\nfrom akshare.economic.macro_bank import (\n    macro_bank_australia_interest_rate,\n    macro_bank_brazil_interest_rate,\n    macro_bank_brazil_interest_rate,\n    macro_bank_china_interest_rate,\n    macro_bank_english_interest_rate,\n    macro_bank_euro_interest_rate,\n    macro_bank_india_interest_rate,\n    macro_bank_japan_interest_rate,\n    macro_bank_newzealand_interest_rate,\n    macro_bank_russia_interest_rate,\n    macro_bank_switzerland_interest_rate,\n    macro_bank_usa_interest_rate,\n)\n\n\"\"\"\n义乌小商品指数\n\"\"\"\nfrom akshare.index.index_yw import index_yw\n\n\"\"\"\n\n股票指数-股票指数-中证指数列表\n\"\"\"\nfrom akshare.index.index_csindex import index_csindex_all\n\n\"\"\"\n\n股票指数-股票指数-成份股\n\"\"\"\nfrom akshare.index.index_cons import (\n    index_stock_info,\n    index_stock_cons,\n    index_stock_cons_sina,\n    index_stock_cons_csindex,\n    index_stock_cons_weight_csindex,\n    stock_a_code_to_symbol,\n)\n\n\"\"\"\n东方财富-股票账户\n\"\"\"\nfrom akshare.stock_feature.stock_account_em import stock_account_statistics_em\n\n\"\"\"\n期货规则\n\"\"\"\nfrom akshare.futures.futures_rule import futures_rule\n\n\"\"\"\n东方财富-商誉专题\n\"\"\"\nfrom akshare.stock_feature.stock_sy_em import (\n    stock_sy_profile_em,\n    stock_sy_yq_em,\n    stock_sy_jz_em,\n    stock_sy_em,\n    stock_sy_hy_em,\n)\n\n\"\"\"\n东方财富-股票质押\n\"\"\"\nfrom akshare.stock_feature.stock_gpzy_em import (\n    stock_gpzy_pledge_ratio_em,\n    stock_gpzy_profile_em,\n    stock_gpzy_distribute_statistics_bank_em,\n    stock_gpzy_distribute_statistics_company_em,\n    stock_gpzy_industry_data_em,\n    stock_gpzy_pledge_ratio_detail_em,\n    stock_gpzy_individual_pledge_ratio_detail_em,\n)\n\n\"\"\"\n东方财富-机构调研\n\"\"\"\nfrom akshare.stock_feature.stock_jgdy_em import (\n    stock_jgdy_tj_em,\n    stock_jgdy_detail_em,\n)\n\n\"\"\"\n新浪主力连续接口\n\"\"\"\nfrom akshare.futures_derivative.futures_index_sina import (\n    futures_main_sina,\n    futures_display_main_sina,\n)\n\n\"\"\"\n中国宏观杠杆率数据\n\"\"\"\nfrom akshare.economic.marco_cnbs import macro_cnbs\n\n\"\"\"\n大宗商品-现货价格指数\n\"\"\"\nfrom akshare.index.index_spot import spot_goods\n\n\"\"\"\n能源-碳排放权\n\"\"\"\nfrom akshare.energy.energy_carbon import (\n    energy_carbon_domestic,\n    energy_carbon_bj,\n    energy_carbon_eu,\n    energy_carbon_gz,\n    energy_carbon_hb,\n    energy_carbon_sz,\n)\n\n\"\"\"\n中国证券投资基金业协会-信息公示\n\"\"\"\nfrom akshare.fund.fund_amac import (\n    amac_manager_info,\n    amac_member_info,\n    amac_member_sub_info,\n    amac_aoin_info,\n    amac_fund_account_info,\n    amac_fund_info,\n    amac_fund_sub_info,\n    amac_futures_info,\n    amac_manager_cancelled_info,\n    amac_securities_info,\n    amac_fund_abs,\n    amac_manager_classify_info,\n    amac_person_fund_org_list,\n    amac_person_bond_org_list,\n)\n\n\"\"\"\n申万行业一级\n\"\"\"\nfrom akshare.index.index_sw import (\n    sw_index_third_cons,\n    sw_index_first_info,\n    sw_index_second_info,\n    sw_index_third_info,\n)\n\n\"\"\"\n经济政策不确定性指数\n\"\"\"\nfrom akshare.article.epu_index import article_epu_index\n\n\"\"\"\n空气-河北\n\"\"\"\nfrom akshare.air.air_hebei import air_quality_hebei\n\n\"\"\"\n日出和日落\n\"\"\"\nfrom akshare.air.sunrise_tad import sunrise_daily, sunrise_monthly\n\n\"\"\"\n新浪-指数实时行情和历史行情\n\"\"\"\nfrom akshare.stock.stock_zh_a_tick_tx import (\n    stock_zh_a_tick_tx_js,\n)\n\n\"\"\"\n新浪-指数实时行情和历史行情\n\"\"\"\nfrom akshare.index.index_stock_zh import (\n    stock_zh_index_daily,\n    stock_zh_index_spot_sina,\n    stock_zh_index_spot_em,\n    stock_zh_index_daily_tx,\n    stock_zh_index_daily_em,\n)\n\n\"\"\"\n外盘期货实时行情\n\"\"\"\nfrom akshare.futures.futures_hq_sina import (\n    futures_foreign_commodity_realtime,\n    futures_foreign_commodity_subscribe_exchange_symbol,\n    futures_hq_subscribe_exchange_symbol,\n)\n\n\"\"\"\nFF多因子数据接口\n\"\"\"\nfrom akshare.article.ff_factor import article_ff_crr\n\n\"\"\"\nRealized Library 接口\n\"\"\"\nfrom akshare.article.risk_rv import (\n    article_oman_rv,\n    article_oman_rv_short,\n    article_rlab_rv,\n)\n\n\"\"\"\n银保监分局本级行政处罚数据\n\"\"\"\nfrom akshare.bank.bank_cbirc_2020 import bank_fjcf_table_detail\n\n\"\"\"\n科创板股票\n\"\"\"\nfrom akshare.stock.stock_zh_kcb_sina import (\n    stock_zh_kcb_spot,\n    stock_zh_kcb_daily,\n)\n\n\"\"\"\nA股\n\"\"\"\nfrom akshare.stock.stock_zh_a_sina import (\n    stock_zh_a_spot,\n    stock_zh_a_daily,\n    stock_zh_a_minute,\n    stock_zh_a_cdr_daily,\n)\n\n\"\"\"\nA+H股\n\"\"\"\nfrom akshare.stock.stock_zh_ah_tx import (\n    stock_zh_ah_spot,\n    stock_zh_ah_daily,\n    stock_zh_ah_name,\n)\n\n\"\"\"\n加密货币\n\"\"\"\nfrom akshare.economic.macro_other import crypto_js_spot\n\n\"\"\"\n金融期权\n\"\"\"\nfrom akshare.option.option_finance import (\n    option_finance_board,\n    option_finance_sse_underlying,\n)\n\n\"\"\"\n新浪-美股实时行情数据和历史行情数据(前复权)\n\"\"\"\nfrom akshare.stock.stock_us_sina import (\n    stock_us_daily,\n    stock_us_spot,\n    get_us_stock_name,\n)\n\n\"\"\"\n新浪-港股实时行情数据和历史数据(前复权和后复权因子)\n\"\"\"\nfrom akshare.stock.stock_hk_sina import stock_hk_daily, stock_hk_spot\n\n\"\"\"\n生意社-商品与期货-现期图数据\n\"\"\"\nfrom akshare.futures_derivative.futures_spot_sys import futures_spot_sys\n\n\"\"\"\n全球宏观-机构宏观\n\"\"\"\nfrom akshare.economic.macro_constitute import (\n    macro_cons_gold,\n    macro_cons_silver,\n    macro_cons_opec_month,\n)\n\n\"\"\"\n全球宏观-美国宏观\n\"\"\"\nfrom akshare.economic.macro_usa import (\n    macro_usa_eia_crude_rate,\n    macro_usa_non_farm,\n    macro_usa_unemployment_rate,\n    macro_usa_adp_employment,\n    macro_usa_core_pce_price,\n    macro_usa_cpi_monthly,\n    macro_usa_cpi_yoy,\n    macro_usa_crude_inner,\n    macro_usa_gdp_monthly,\n    macro_usa_initial_jobless,\n    macro_usa_lmci,\n    macro_usa_api_crude_stock,\n    macro_usa_building_permits,\n    macro_usa_business_inventories,\n    macro_usa_cb_consumer_confidence,\n    macro_usa_core_cpi_monthly,\n    macro_usa_core_ppi,\n    macro_usa_current_account,\n    macro_usa_durable_goods_orders,\n    macro_usa_trade_balance,\n    macro_usa_spcs20,\n    macro_usa_services_pmi,\n    macro_usa_rig_count,\n    macro_usa_retail_sales,\n    macro_usa_real_consumer_spending,\n    macro_usa_ppi,\n    macro_usa_pmi,\n    macro_usa_personal_spending,\n    macro_usa_pending_home_sales,\n    macro_usa_nfib_small_business,\n    macro_usa_new_home_sales,\n    macro_usa_nahb_house_market_index,\n    macro_usa_michigan_consumer_sentiment,\n    macro_usa_exist_home_sales,\n    macro_usa_export_price,\n    macro_usa_factory_orders,\n    macro_usa_house_price_index,\n    macro_usa_house_starts,\n    macro_usa_import_price,\n    macro_usa_industrial_production,\n    macro_usa_ism_non_pmi,\n    macro_usa_ism_pmi,\n    macro_usa_job_cuts,\n    macro_usa_cftc_nc_holding,\n    macro_usa_cftc_c_holding,\n    macro_usa_cftc_merchant_currency_holding,\n    macro_usa_cftc_merchant_goods_holding,\n    macro_usa_cme_merchant_goods_holding,\n    macro_usa_phs,\n)\n\n\"\"\"\n全球宏观-中国宏观\n\"\"\"\nfrom akshare.economic.macro_china import (\n    macro_china_bank_financing,\n    macro_china_insurance_income,\n    macro_china_mobile_number,\n    macro_china_vegetable_basket,\n    macro_china_agricultural_product,\n    macro_china_agricultural_index,\n    macro_china_energy_index,\n    macro_china_commodity_price_index,\n    macro_global_sox_index,\n    macro_china_yw_electronic_index,\n    macro_china_construction_index,\n    macro_china_construction_price_index,\n    macro_china_lpi_index,\n    macro_china_bdti_index,\n    macro_china_bsi_index,\n    macro_china_cpi_monthly,\n    macro_china_cpi_yearly,\n    macro_china_m2_yearly,\n    macro_china_fx_reserves_yearly,\n    macro_china_cx_pmi_yearly,\n    macro_china_pmi_yearly,\n    macro_china_daily_energy,\n    macro_china_non_man_pmi,\n    macro_china_rmb,\n    macro_china_gdp_yearly,\n    macro_china_shrzgm,\n    macro_china_ppi_yearly,\n    macro_china_cx_services_pmi_yearly,\n    macro_china_market_margin_sh,\n    macro_china_market_margin_sz,\n    macro_china_au_report,\n    macro_china_exports_yoy,\n    macro_china_hk_market_info,\n    macro_china_imports_yoy,\n    macro_china_trade_balance,\n    macro_china_shibor_all,\n    macro_china_industrial_production_yoy,\n    macro_china_gyzjz,\n    macro_china_lpr,\n    macro_china_new_house_price,\n    macro_china_enterprise_boom_index,\n    macro_china_national_tax_receipts,\n    macro_china_new_financial_credit,\n    macro_china_fx_gold,\n    macro_china_money_supply,\n    macro_china_stock_market_cap,\n    macro_china_cpi,\n    macro_china_gdp,\n    macro_china_ppi,\n    macro_china_pmi,\n    macro_china_gdzctz,\n    macro_china_hgjck,\n    macro_china_czsr,\n    macro_china_whxd,\n    macro_china_wbck,\n    macro_china_xfzxx,\n    macro_china_reserve_requirement_ratio,\n    macro_china_consumer_goods_retail,\n    macro_china_society_electricity,\n    macro_china_society_traffic_volume,\n    macro_china_postal_telecommunicational,\n    macro_china_international_tourism_fx,\n    macro_china_passenger_load_factor,\n    macro_china_freight_index,\n    macro_china_central_bank_balance,\n    macro_china_insurance,\n    macro_china_supply_of_money,\n    macro_china_foreign_exchange_gold,\n    macro_china_retail_price_index,\n    macro_china_real_estate,\n    macro_china_qyspjg,\n    macro_china_fdi,\n    macro_shipping_bci,\n    macro_shipping_bcti,\n    macro_shipping_bdi,\n    macro_shipping_bpi,\n    macro_china_urban_unemployment,\n)\n\n\"\"\"\n全球宏观-中国宏观-国家统计局\n\"\"\"\nfrom akshare.economic.macro_china_nbs import (\n    macro_china_nbs_nation,\n    macro_china_nbs_region\n)\n\n\"\"\"\n外汇\n\"\"\"\nfrom akshare.fx.fx_quote import fx_pair_quote, fx_spot_quote, fx_swap_quote\n\n\"\"\"\n债券行情\n\"\"\"\nfrom akshare.bond.bond_china import (\n    bond_spot_quote,\n    bond_spot_deal,\n    bond_china_yield,\n)\n\n\"\"\"\n商品期权\n\"\"\"\nfrom akshare.option.option_commodity import (\n    option_hist_dce,\n    option_hist_czce,\n    option_hist_shfe,\n    option_vol_gfex,\n    option_hist_gfex,\n    option_vol_shfe,\n)\n\n\"\"\"\n99期货-期货库存数据\n\"\"\"\nfrom akshare.futures.futures_inventory_99 import futures_inventory_99\n\n\"\"\"\n东方财富-期货库存数据\n\"\"\"\nfrom akshare.futures.futures_inventory_em import futures_inventory_em\n\n\"\"\"\n中国银行间市场交易商协会\n\"\"\"\nfrom akshare.bond.bond_nafmii import bond_debt_nafmii\n\n\"\"\"\n奇货可查-工具模块\n\"\"\"\nfrom akshare.qhkc_web.qhkc_tool import qhkc_tool_foreign, qhkc_tool_gdp\n\n\"\"\"\n奇货可查-指数模块\n\"\"\"\nfrom akshare.qhkc_web.qhkc_index import (\n    get_qhkc_index,\n    get_qhkc_index_trend,\n    get_qhkc_index_profit_loss,\n)\n\n\"\"\"\n奇货可查-资金模块\n\"\"\"\nfrom akshare.qhkc_web.qhkc_fund import (\n    get_qhkc_fund_money_change,\n    get_qhkc_fund_bs,\n    get_qhkc_fund_position,\n)\n\n\"\"\"\n大宗商品现货价格及基差\n\"\"\"\nfrom akshare.futures.futures_basis import (\n    futures_spot_price_daily,\n    futures_spot_price,\n    futures_spot_price_previous,\n)\n\n\"\"\"\n期货持仓成交排名数据\n\"\"\"\nfrom akshare.futures.cot import (\n    get_rank_sum_daily,\n    get_rank_sum,\n    get_shfe_rank_table,\n    get_rank_table_czce,\n    get_dce_rank_table,\n    get_cffex_rank_table,\n    futures_dce_position_rank,\n    futures_dce_position_rank_other,\n    futures_gfex_position_rank,\n)\n\n\"\"\"\n大宗商品期货仓单数据\n\"\"\"\nfrom akshare.futures.receipt import get_receipt\n\n\"\"\"\n大宗商品期货展期收益率数据\n\"\"\"\nfrom akshare.futures.futures_roll_yield import (\n    get_roll_yield_bar,\n    get_roll_yield,\n)\n\n\"\"\"\n交易所日线行情数据\n\"\"\"\nfrom akshare.futures.futures_daily_bar import (\n    get_cffex_daily,\n    get_czce_daily,\n    get_shfe_daily,\n    get_dce_daily,\n    get_futures_daily,\n    get_ine_daily,\n    get_gfex_daily,\n)\n\n\"\"\"\n雪球基金数据\n\"\"\"\nfrom akshare.fund.fund_xq import (\n    fund_individual_basic_info_xq,\n    fund_individual_achievement_xq,\n    fund_individual_analysis_xq,\n    fund_individual_profit_probability_xq,\n    fund_individual_detail_info_xq,\n    fund_individual_detail_hold_xq,\n)\n\n\"\"\"\n异常处理模块\n\"\"\"\nfrom .exceptions import (\n    AkshareException,\n    APIError,\n    DataParsingError,\n    InvalidParameterError,\n    NetworkError,\n    RateLimitError,\n)\n\n\"\"\"\nPro API 设置\n\"\"\"\nfrom akshare.pro.data_pro import pro_api\nfrom akshare.utils.token_process import set_token, get_token\n\n\"\"\"\nAKQMT 设置\n\"\"\"\ntry:\n    from akqmt import xt_api\nexcept ImportError as e:\n    pass\n"
  },
  {
    "path": "akshare/_version.py",
    "content": "__version__ = \"1.18.50\"\n"
  },
  {
    "path": "akshare/air/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/9/30 13:58\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/air/air_hebei.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/25 17:20\nDesc: 河北省空气质量预报信息发布系统\nhttps://110.249.223.67/publish\n每日 17 时发布\n等级划分\n1. 空气污染指数为0－50，空气质量级别为一级，空气质量状况属于优。此时，空气质量令人满意，基本无空气污染，各类人群可正常活动。\n2. 空气污染指数为51－100，空气质量级别为二级，空气质量状况属于良。此时空气质量可接受，但某些污染物可能对极少数异常敏感人群健康有较弱影响，建议极少数异常敏感人群应减少户外活动。\n3. 空气污染指数为101－150，空气质量级别为三级，空气质量状况属于轻度污染。此时，易感人群症状有轻度加剧，健康人群出现刺激症状。建议儿童、老年人及心脏病、呼吸系统疾病患者应减少长时间、高强度的户外锻炼。\n4. 空气污染指数为151－200，空气质量级别为四级，空气质量状况属于中度污染。此时，进一步加剧易感人群症状，可能对健康人群心脏、呼吸系统有影响，建议疾病患者避免长时间、高强度的户外锻练，一般人群适量减少户外运动。\n5. 空气污染指数为201－300，空气质量级别为五级，空气质量状况属于重度污染。此时，心脏病和肺病患者症状显著加剧，运动耐受力降低，健康人群普遍出现症状，建议儿童、老年人和心脏病、肺病患者应停留在室内，停止户外运动，一般人群减少户外运动。\n6. 空气污染指数大于300，空气质量级别为六级，空气质量状况属于严重污染。此时，健康人群运动耐受力降低，有明显强烈症状，提前出现某些疾病，建议儿童、老年人和病人应当留在室内，避免体力消耗，一般人群应避免户外活动。\n发布单位：河北省环境应急与重污染天气预警中心 技术支持：中国科学院大气物理研究所 中科三清科技有限公司\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef air_quality_hebei() -> pd.DataFrame:\n    \"\"\"\n    河北省空气质量预报信息发布系统-空气质量预报, 未来 6 天\n    http://218.11.10.130:8080/#/application/home\n    :return: city = \"\", 返回所有地区的数据; city=\"唐山市\", 返回唐山市的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://218.11.10.130:8080/api/hour/130000.xml\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.content, features=\"xml\")\n    data = []\n    cities = soup.find_all(\"City\")\n    for city in cities:\n        pointers = city.find_all(\"Pointer\")\n        for pointer in pointers:\n            row = {\n                \"City\": city.Name.text if city.Name else None,\n                \"Region\": pointer.Region.text if pointer.Region else None,\n                \"Station\": pointer.Name.text if pointer.Name else None,\n                \"DateTime\": pointer.DataTime.text if pointer.DataTime else None,\n                \"AQI\": pointer.AQI.text if pointer.AQI else None,\n                \"Level\": pointer.Level.text if pointer.Level else None,\n                \"MaxPoll\": pointer.MaxPoll.text if pointer.MaxPoll else None,\n                \"Longitude\": pointer.CLng.text if pointer.CLng else None,\n                \"Latitude\": pointer.CLat.text if pointer.CLat else None,\n            }\n            polls = pointer.find_all(\"Poll\")\n            for poll in polls:\n                poll_name = poll.Name.text if poll.Name else None\n                poll_value = poll.Value.text if poll.Value else None\n                row[f\"{poll_name}_Value\"] = poll_value\n                row[f\"{poll_name}_IAQI\"] = poll.IAQI.text if poll.IAQI else None\n            data.append(row)\n\n    df = pd.DataFrame(data)\n    numeric_columns = [\"AQI\", \"Longitude\", \"Latitude\"] + [\n        col for col in df.columns if col.endswith(\"_Value\") or col.endswith(\"_IAQI\")\n    ]\n    for col in numeric_columns:\n        df[col] = pd.to_numeric(df[col], errors=\"coerce\")\n\n    column_names = {\n        \"City\": \"城市\",\n        \"Region\": \"区域\",\n        \"Station\": \"监测点\",\n        \"DateTime\": \"时间\",\n        \"Level\": \"空气质量等级\",\n        \"MaxPoll\": \"首要污染物\",\n        \"Longitude\": \"经度\",\n        \"Latitude\": \"纬度\",\n        \"SO2_Value\": \"二氧化硫_浓度\",\n        \"SO2_IAQI\": \"二氧化硫_IAQI\",\n        \"CO_Value\": \"一氧化碳_浓度\",\n        \"CO_IAQI\": \"一氧化碳_IAQI\",\n        \"NO2_Value\": \"二氧化氮_浓度\",\n        \"NO2_IAQI\": \"二氧化氮_IAQI\",\n        \"O3-1H_Value\": \"臭氧1小时_浓度\",\n        \"O3-1H_IAQI\": \"臭氧1小时_IAQI\",\n        \"O3-8H_Value\": \"臭氧8小时_浓度\",\n        \"O3-8H_IAQI\": \"臭氧8小时_IAQI\",\n        \"PM2.5_Value\": \"PM2.5_浓度\",\n        \"PM2.5_IAQI\": \"PM2.5_IAQI\",\n        \"PM10_Value\": \"PM10_浓度\",\n        \"PM10_IAQI\": \"PM10_IAQI\",\n    }\n    df = df.rename(columns=column_names)\n    basic_columns = [\n        \"城市\",\n        \"区域\",\n        \"监测点\",\n        \"时间\",\n        \"AQI\",\n        \"空气质量等级\",\n        \"首要污染物\",\n        \"经度\",\n        \"纬度\",\n    ]\n    pollutant_columns = [col for col in df.columns if col not in basic_columns]\n    df = df[basic_columns + sorted(pollutant_columns)]\n    return df\n\n\nif __name__ == \"__main__\":\n    air_quality_hebei_df = air_quality_hebei()\n    print(air_quality_hebei_df)\n"
  },
  {
    "path": "akshare/air/air_zhenqi.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/2 22:40\nDesc: 真气网-空气质量\nhttps://www.zq12369.com/environment.php\n空气质量在线监测分析平台的空气质量数据\nhttps://www.aqistudy.cn/\n\"\"\"\n\nimport json\nimport os\nimport re\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom py_mini_racer import MiniRacer\n\nfrom akshare.utils import demjson\n\n\ndef _get_js_path(name: str = None, module_file: str = None) -> str:\n    \"\"\"\n    获取 JS 文件的路径(从模块所在目录查找)\n    :param name: 文件名\n    :type name: str\n    :param module_file: 模块路径\n    :type module_file: str\n    :return: 路径\n    :rtype: str\n    \"\"\"\n    module_folder = os.path.abspath(os.path.dirname(os.path.dirname(module_file)))\n    module_json_path = os.path.join(module_folder, \"air\", name)\n    return module_json_path\n\n\ndef _get_file_content(file_name: str = \"crypto.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file_name:  JS 文件名\n    :type file_name: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_name = file_name\n    setting_file_path = _get_js_path(setting_file_name, __file__)\n    with open(setting_file_path) as f:\n        file_data = f.read()\n    return file_data\n\n\ndef has_month_data(href):\n    \"\"\"\n    Deal with href node\n    :param href: href\n    :type href: str\n    :return: href result\n    :rtype: str\n    \"\"\"\n    return href and re.compile(\"monthdata.php\").search(href)\n\n\ndef air_city_table() -> pd.DataFrame:\n    \"\"\"\n    真气网-空气质量历史数据查询-全部城市列表\n    https://www.zq12369.com/environment.php?date=2019-06-05&tab=rank&order=DESC&type=DAY#rank\n    :return: 城市映射\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.zq12369.com/environment.php\"\n    date = \"2020-05-01\"\n    temp_df = None\n    if len(date.split(\"-\")) == 3:\n        params = {\n            \"date\": date,\n            \"tab\": \"rank\",\n            \"order\": \"DESC\",\n            \"type\": \"DAY\",\n        }\n        r = requests.get(url, params=params)\n        temp_df = pd.read_html(StringIO(r.text))[1].iloc[1:, :]\n        del temp_df[\"降序\"]\n        temp_df.reset_index(inplace=True)\n        temp_df[\"index\"] = temp_df.index + 1\n        temp_df.columns = [\n            \"序号\",\n            \"省份\",\n            \"城市\",\n            \"AQI\",\n            \"空气质量\",\n            \"PM2.5浓度\",\n            \"首要污染物\",\n        ]\n        temp_df[\"AQI\"] = pd.to_numeric(temp_df[\"AQI\"])\n    return temp_df\n\n\ndef air_quality_watch_point(\n    city: str = \"杭州\", start_date: str = \"20220408\", end_date: str = \"20220409\"\n) -> pd.DataFrame:\n    \"\"\"\n    真气网-监测点空气质量-细化到具体城市的每个监测点\n    指定之间段之间的空气质量数据\n    https://www.zq12369.com/\n    :param city: 调用 ak.air_city_table() 接口获取\n    :type city: str\n    :param start_date: e.g., \"20190327\"\n    :type start_date: str\n    :param end_date: e.g., \"\"20200327\"\"\n    :type end_date: str\n    :return: 指定城市指定日期区间的观测点空气质量\n    :rtype: pandas.DataFrame\n    \"\"\"\n    start_date = \"-\".join([start_date[:4], start_date[4:6], start_date[6:]])\n    end_date = \"-\".join([end_date[:4], end_date[4:6], end_date[6:]])\n    url = \"https://www.zq12369.com/api/zhenqiapi.php\"\n    file_data = _get_file_content(file_name=\"crypto.js\")\n    ctx = MiniRacer()\n    ctx.eval(file_data)\n    method = \"GETCITYPOINTAVG\"\n    city_param = ctx.call(\"encode_param\", city)\n    payload = {\n        \"appId\": \"a01901d3caba1f362d69474674ce477f\",\n        \"method\": ctx.call(\"encode_param\", method),\n        \"city\": city_param,\n        \"startTime\": ctx.call(\"encode_param\", start_date),\n        \"endTime\": ctx.call(\"encode_param\", end_date),\n        \"secret\": ctx.call(\"encode_secret\", method, city_param, start_date, end_date),\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/81.0.4044.122 Safari/537.36\"\n    }\n    r = requests.post(url, data=payload, headers=headers)\n    data_text = r.text\n    data_json = demjson.decode(ctx.call(\"decode_result\", data_text))\n    temp_df = pd.DataFrame(data_json[\"rows\"])\n    return temp_df\n\n\ndef air_quality_hist(\n    city: str = \"杭州\",\n    period: str = \"day\",\n    start_date: str = \"20190327\",\n    end_date: str = \"20200427\",\n) -> pd.DataFrame:\n    \"\"\"\n    真气网-空气历史数据\n    https://www.zq12369.com/\n    :param city: 调用 ak.air_city_table() 接口获取所有城市列表\n    :type city: str\n    :param period: \"hour\": 每小时一个数据, 由于数据量比较大, 下载较慢; \"day\": 每天一个数据; \"month\": 每个月一个数据\n    :type period: str\n    :param start_date: e.g., \"20190327\"\n    :type start_date: str\n    :param end_date: e.g., \"20200327\"\n    :type end_date: str\n    :return: 指定城市和数据频率下在指定时间段内的空气质量数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    start_date = \"-\".join([start_date[:4], start_date[4:6], start_date[6:]])\n    end_date = \"-\".join([end_date[:4], end_date[4:6], end_date[6:]])\n    url = \"https://www.zq12369.com/api/newzhenqiapi.php\"\n    file_data = _get_file_content(file_name=\"outcrypto.js\")\n    ctx = MiniRacer()\n    ctx.eval(file_data)\n    app_id = \"4f0e3a273d547ce6b7147bfa7ceb4b6e\"\n    method = \"CETCITYPERIOD\"\n    timestamp = ctx.eval(\"timestamp = new Date().getTime()\")\n    p_text = json.dumps(\n        {\n            \"city\": city,\n            \"endTime\": f\"{end_date} 23:45:39\",\n            \"startTime\": f\"{start_date} 00:00:00\",\n            \"type\": period.upper(),\n        },\n        ensure_ascii=False,\n        indent=None,\n    ).replace(' \"', '\"')\n    secret = ctx.call(\"hex_md5\", app_id + method + str(timestamp) + \"WEB\" + p_text)\n    payload = {\n        \"appId\": \"4f0e3a273d547ce6b7147bfa7ceb4b6e\",\n        \"method\": \"CETCITYPERIOD\",\n        \"timestamp\": int(timestamp),\n        \"clienttype\": \"WEB\",\n        \"object\": {\n            \"city\": city,\n            \"type\": period.upper(),\n            \"startTime\": f\"{start_date} 00:00:00\",\n            \"endTime\": f\"{end_date} 23:45:39\",\n        },\n        \"secret\": secret,\n    }\n    need = (\n        json.dumps(payload, ensure_ascii=False, indent=None, sort_keys=False)\n        .replace(' \"', '\"')\n        .replace(\"\\\\\", \"\")\n        .replace('p\": ', 'p\":')\n        .replace('t\": ', 't\":')\n    )\n\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)\"\n        \"Chrome/100.0.4896.75 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\"param\": ctx.call(\"encode_param\", need)}\n    r = requests.post(url, data=params, headers=headers)\n    temp_text = ctx.call(\"decryptData\", r.text)\n    data_json = demjson.decode(ctx.call(\"b.decode\", temp_text))\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"][\"rows\"])\n    temp_df.index = temp_df[\"time\"]\n    del temp_df[\"time\"]\n    temp_df = temp_df.astype(float, errors=\"ignore\")\n    return temp_df\n\n\ndef air_quality_rank(date: str = \"\") -> pd.DataFrame:\n    \"\"\"\n    真气网-168 城市 AQI 排行榜\n    https://www.zq12369.com/environment.php?date=2020-03-12&tab=rank&order=DESC&type=DAY#rank\n    :param date: \"\": 当前时刻空气质量排名; \"20200312\": 当日空气质量排名; \"202003\": 当月空气质量排名; \"2019\": 当年空气质量排名;\n    :type date: str\n    :return: 指定 date 类型的空气质量排名数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if len(date) == 4:\n        date = date\n    elif len(date) == 6:\n        date = \"-\".join([date[:4], date[4:6]])\n    elif date == \"\":\n        date = \"实时\"\n    else:\n        date = \"-\".join([date[:4], date[4:6], date[6:]])\n\n    url = \"https://www.zq12369.com/environment.php\"\n\n    if len(date.split(\"-\")) == 3:\n        params = {\n            \"date\": date,\n            \"tab\": \"rank\",\n            \"order\": \"DESC\",\n            \"type\": \"DAY\",\n        }\n        r = requests.get(url, params=params)\n        return pd.read_html(StringIO(r.text))[1].iloc[1:, :]\n    elif len(date.split(\"-\")) == 2:\n        params = {\n            \"month\": date,\n            \"tab\": \"rank\",\n            \"order\": \"DESC\",\n            \"type\": \"MONTH\",\n        }\n        r = requests.get(url, params=params)\n        return pd.read_html(StringIO(r.text))[2].iloc[1:, :]\n    elif len(date.split(\"-\")) == 1 and date != \"实时\":\n        params = {\n            \"year\": date,\n            \"tab\": \"rank\",\n            \"order\": \"DESC\",\n            \"type\": \"YEAR\",\n        }\n        r = requests.get(url, params=params)\n        return pd.read_html(StringIO(r.text))[3].iloc[1:, :]\n    if date == \"实时\":\n        params = {\n            \"tab\": \"rank\",\n            \"order\": \"DESC\",\n            \"type\": \"MONTH\",\n        }\n        r = requests.get(url, params=params)\n        return pd.read_html(StringIO(r.text))[0].iloc[1:, :]\n\n\nif __name__ == \"__main__\":\n    air_city_table_df = air_city_table()\n    print(air_city_table_df)\n\n    air_quality_watch_point_df = air_quality_watch_point(\n        city=\"杭州\", start_date=\"20220408\", end_date=\"20220409\"\n    )\n    print(air_quality_watch_point_df)\n\n    air_quality_hist_df = air_quality_hist(\n        city=\"北京\",\n        period=\"day\",\n        start_date=\"20220801\",\n        end_date=\"20240402\",\n    )\n    print(air_quality_hist_df)\n\n    air_quality_rank_df = air_quality_rank()\n    print(air_quality_rank_df)\n"
  },
  {
    "path": "akshare/air/cons.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/11/25 20:45\nDesc: 空气质量接口配置文件\n\"\"\"\n\ncity_chinese_list = [\n    \"北京\",\n    \"重庆\",\n    \"福州\",\n    \"广州\",\n    \"杭州\",\n    \"昆明\",\n    \"南昌\",\n    \"南京\",\n    \"南宁\",\n    \"南通\",\n    \"宁波\",\n    \"上海\",\n    \"深圳\",\n    \"苏州\",\n    \"徐州\",\n    \"银川\",\n]\n\ncity_english_list = [\n    \"beijing\",\n    \"chongqing\",\n    \"foochow\",\n    \"guangzhou\",\n    \"hangzhou\",\n    \"kunming\",\n    \"nanchang\",\n    \"nanjing\",\n    \"nanning\",\n    \"nantong\",\n    \"ningbo\",\n    \"shanghai\",\n    \"shenzhen\",\n    \"suzhou\",\n    \"xuzhou\",\n    \"yinchuan\",\n]\n\ncity_code_dict = {\n    \"北京\": \"110000\",\n    \"天津\": \"120000\",\n    \"石家庄\": \"130100\",\n    \"唐山\": \"130200\",\n    \"秦皇岛\": \"130300\",\n    \"邯郸\": \"130400\",\n    \"邢台\": \"130500\",\n    \"保定\": \"130600\",\n    \"承德\": \"130800\",\n    \"沧州\": \"130900\",\n    \"廊坊\": \"131000\",\n    \"衡水\": \"131100\",\n    \"张家口\": \"131200\",\n    \"太原\": \"140100\",\n    \"大同\": \"140200\",\n    \"阳泉\": \"140300\",\n    \"长治\": \"140400\",\n    \"晋城\": \"140500\",\n    \"朔州\": \"140600\",\n    \"晋中\": \"140700\",\n    \"运城\": \"140800\",\n    \"忻州\": \"140900\",\n    \"临汾\": \"141000\",\n    \"吕梁\": \"141100\",\n    \"呼和浩特\": \"150100\",\n    \"包头\": \"150200\",\n    \"乌海\": \"150300\",\n    \"赤峰\": \"150400\",\n    \"通辽\": \"150500\",\n    \"鄂尔多斯\": \"150600\",\n    \"呼伦贝尔\": \"150700\",\n    \"巴彦淖尔\": \"150800\",\n    \"乌兰察布\": \"150900\",\n    \"兴安盟\": \"152200\",\n    \"锡林郭勒盟\": \"152500\",\n    \"阿拉善盟\": \"152900\",\n    \"沈阳\": \"210100\",\n    \"大连\": \"210200\",\n    \"瓦房店\": \"210281\",\n    \"鞍山\": \"210300\",\n    \"抚顺\": \"210400\",\n    \"本溪\": \"210500\",\n    \"丹东\": \"210600\",\n    \"锦州\": \"210700\",\n    \"营口\": \"210800\",\n    \"阜新\": \"210900\",\n    \"辽阳\": \"211000\",\n    \"盘锦\": \"211100\",\n    \"铁岭\": \"211200\",\n    \"朝阳\": \"211300\",\n    \"葫芦岛\": \"211400\",\n    \"长春\": \"220100\",\n    \"吉林\": \"220200\",\n    \"四平\": \"220300\",\n    \"辽源\": \"220400\",\n    \"通化\": \"220500\",\n    \"白山\": \"220600\",\n    \"松原\": \"220700\",\n    \"白城\": \"220800\",\n    \"延边州\": \"222400\",\n    \"哈尔滨\": \"230100\",\n    \"齐齐哈尔\": \"230200\",\n    \"鸡西\": \"230300\",\n    \"鹤岗\": \"230400\",\n    \"双鸭山\": \"230500\",\n    \"大庆\": \"230600\",\n    \"伊春\": \"230700\",\n    \"佳木斯\": \"230800\",\n    \"七台河\": \"230900\",\n    \"牡丹江\": \"231000\",\n    \"黑河\": \"231100\",\n    \"绥化\": \"231200\",\n    \"大兴安岭地区\": \"232700\",\n    \"上海\": \"310000\",\n    \"南京\": \"320100\",\n    \"无锡\": \"320200\",\n    \"江阴\": \"320281\",\n    \"宜兴\": \"320282\",\n    \"徐州\": \"320300\",\n    \"常州\": \"320400\",\n    \"溧阳\": \"320481\",\n    \"金坛\": \"320482\",\n    \"苏州\": \"320500\",\n    \"常熟\": \"320581\",\n    \"张家港\": \"320582\",\n    \"昆山\": \"320583\",\n    \"吴江\": \"320584\",\n    \"太仓\": \"320585\",\n    \"南通\": \"320600\",\n    \"海门\": \"320684\",\n    \"连云港\": \"320700\",\n    \"淮安\": \"320800\",\n    \"盐城\": \"320900\",\n    \"扬州\": \"321000\",\n    \"镇江\": \"321100\",\n    \"句容\": \"321183\",\n    \"泰州\": \"321200\",\n    \"宿迁\": \"321300\",\n    \"杭州\": \"330100\",\n    \"富阳\": \"330183\",\n    \"临安\": \"330185\",\n    \"宁波\": \"330200\",\n    \"温州\": \"330300\",\n    \"嘉兴\": \"330400\",\n    \"湖州\": \"330500\",\n    \"诸暨\": \"330681\",\n    \"金华\": \"330700\",\n    \"义乌\": \"330782\",\n    \"衢州\": \"330800\",\n    \"舟山\": \"330900\",\n    \"台州\": \"331000\",\n    \"丽水\": \"331100\",\n    \"绍兴\": \"331300\",\n    \"合肥\": \"340100\",\n    \"芜湖\": \"340200\",\n    \"蚌埠\": \"340300\",\n    \"淮南\": \"340400\",\n    \"马鞍山\": \"340500\",\n    \"淮北\": \"340600\",\n    \"铜陵\": \"340700\",\n    \"安庆\": \"340800\",\n    \"黄山\": \"341000\",\n    \"滁州\": \"341100\",\n    \"阜阳\": \"341200\",\n    \"宿州\": \"341300\",\n    \"六安\": \"341500\",\n    \"亳州\": \"341600\",\n    \"池州\": \"341700\",\n    \"宣城\": \"341800\",\n    \"福州\": \"350100\",\n    \"厦门\": \"350200\",\n    \"莆田\": \"350300\",\n    \"三明\": \"350400\",\n    \"泉州\": \"350500\",\n    \"漳州\": \"350600\",\n    \"南平\": \"350700\",\n    \"龙岩\": \"350800\",\n    \"宁德\": \"350900\",\n    \"南昌\": \"360100\",\n    \"景德镇\": \"360200\",\n    \"萍乡\": \"360300\",\n    \"九江\": \"360400\",\n    \"新余\": \"360500\",\n    \"鹰潭\": \"360600\",\n    \"赣州\": \"360700\",\n    \"吉安\": \"360800\",\n    \"宜春\": \"360900\",\n    \"抚州\": \"361000\",\n    \"上饶\": \"361100\",\n    \"济南\": \"370100\",\n    \"章丘\": \"370181\",\n    \"青岛\": \"370200\",\n    \"胶州\": \"370281\",\n    \"即墨\": \"370282\",\n    \"平度\": \"370283\",\n    \"胶南\": \"370284\",\n    \"莱西\": \"370285\",\n    \"淄博\": \"370300\",\n    \"枣庄\": \"370400\",\n    \"东营\": \"370500\",\n    \"烟台\": \"370600\",\n    \"莱州\": \"370683\",\n    \"蓬莱\": \"370684\",\n    \"招远\": \"370685\",\n    \"潍坊\": \"370700\",\n    \"寿光\": \"370783\",\n    \"济宁\": \"370800\",\n    \"泰安\": \"370900\",\n    \"威海\": \"371000\",\n    \"文登\": \"371081\",\n    \"荣成\": \"371082\",\n    \"乳山\": \"371083\",\n    \"日照\": \"371100\",\n    \"莱芜\": \"371200\",\n    \"临沂\": \"371300\",\n    \"德州\": \"371400\",\n    \"聊城\": \"371500\",\n    \"滨州\": \"371600\",\n    \"菏泽\": \"371700\",\n    \"郑州\": \"410100\",\n    \"开封\": \"410200\",\n    \"洛阳\": \"410300\",\n    \"平顶山\": \"410400\",\n    \"安阳\": \"410500\",\n    \"鹤壁\": \"410600\",\n    \"新乡\": \"410700\",\n    \"焦作\": \"410800\",\n    \"濮阳\": \"410900\",\n    \"许昌\": \"411000\",\n    \"漯河\": \"411100\",\n    \"三门峡\": \"411200\",\n    \"南阳\": \"411300\",\n    \"商丘\": \"411400\",\n    \"信阳\": \"411500\",\n    \"周口\": \"411600\",\n    \"驻马店\": \"411700\",\n    \"武汉\": \"420100\",\n    \"黄石\": \"420200\",\n    \"十堰\": \"420300\",\n    \"宜昌\": \"420500\",\n    \"襄阳\": \"420600\",\n    \"鄂州\": \"420700\",\n    \"荆门\": \"420800\",\n    \"孝感\": \"420900\",\n    \"荆州\": \"421000\",\n    \"黄冈\": \"421100\",\n    \"咸宁\": \"421200\",\n    \"随州\": \"421300\",\n    \"恩施州\": \"422800\",\n    \"长沙\": \"430100\",\n    \"株洲\": \"430200\",\n    \"湘潭\": \"430300\",\n    \"衡阳\": \"430400\",\n    \"邵阳\": \"430500\",\n    \"岳阳\": \"430600\",\n    \"常德\": \"430700\",\n    \"张家界\": \"430800\",\n    \"益阳\": \"430900\",\n    \"郴州\": \"431000\",\n    \"永州\": \"431100\",\n    \"怀化\": \"431200\",\n    \"娄底\": \"431300\",\n    \"湘西州\": \"433100\",\n    \"广州\": \"440100\",\n    \"韶关\": \"440200\",\n    \"深圳\": \"440300\",\n    \"珠海\": \"440400\",\n    \"汕头\": \"440500\",\n    \"佛山\": \"440600\",\n    \"江门\": \"440700\",\n    \"湛江\": \"440800\",\n    \"茂名\": \"440900\",\n    \"肇庆\": \"441200\",\n    \"惠州\": \"441300\",\n    \"梅州\": \"441400\",\n    \"汕尾\": \"441500\",\n    \"河源\": \"441600\",\n    \"阳江\": \"441700\",\n    \"清远\": \"441800\",\n    \"东莞\": \"441900\",\n    \"中山\": \"442000\",\n    \"潮州\": \"445100\",\n    \"揭阳\": \"445200\",\n    \"云浮\": \"445300\",\n    \"南宁\": \"450100\",\n    \"柳州\": \"450200\",\n    \"桂林\": \"450300\",\n    \"梧州\": \"450400\",\n    \"北海\": \"450500\",\n    \"防城港\": \"450600\",\n    \"钦州\": \"450700\",\n    \"贵港\": \"450800\",\n    \"玉林\": \"450900\",\n    \"百色\": \"451000\",\n    \"贺州\": \"451100\",\n    \"河池\": \"451200\",\n    \"来宾\": \"451300\",\n    \"崇左\": \"451400\",\n    \"海口\": \"460100\",\n    \"三亚\": \"460200\",\n    \"重庆\": \"500000\",\n    \"成都\": \"510100\",\n    \"自贡\": \"510300\",\n    \"攀枝花\": \"510400\",\n    \"泸州\": \"510500\",\n    \"德阳\": \"510600\",\n    \"绵阳\": \"510700\",\n    \"广元\": \"510800\",\n    \"遂宁\": \"510900\",\n    \"内江\": \"511000\",\n    \"乐山\": \"511100\",\n    \"南充\": \"511300\",\n    \"眉山\": \"511400\",\n    \"宜宾\": \"511500\",\n    \"广安\": \"511600\",\n    \"达州\": \"511700\",\n    \"雅安\": \"511800\",\n    \"巴中\": \"511900\",\n    \"资阳\": \"512000\",\n    \"阿坝州\": \"513200\",\n    \"甘孜州\": \"513300\",\n    \"凉山州\": \"513400\",\n    \"贵阳\": \"520100\",\n    \"六盘水\": \"520200\",\n    \"遵义\": \"520300\",\n    \"安顺\": \"520400\",\n    \"铜仁地区\": \"522200\",\n    \"黔西南州\": \"522300\",\n    \"毕节\": \"522400\",\n    \"黔东南州\": \"522600\",\n    \"黔南州\": \"522700\",\n    \"昆明\": \"530100\",\n    \"曲靖\": \"530300\",\n    \"玉溪\": \"530400\",\n    \"保山\": \"530500\",\n    \"昭通\": \"530600\",\n    \"丽江\": \"530700\",\n    \"普洱\": \"530800\",\n    \"临沧\": \"530900\",\n    \"红河州\": \"532522\",\n    \"文山州\": \"532621\",\n    \"西双版纳州\": \"532801\",\n    \"大理州\": \"532901\",\n    \"德宏州\": \"533103\",\n    \"怒江州\": \"533300\",\n    \"迪庆州\": \"533421\",\n    \"拉萨\": \"540100\",\n    \"昌都\": \"542100\",\n    \"山南\": \"542200\",\n    \"日喀则\": \"542300\",\n    \"那曲地区\": \"542400\",\n    \"阿里地区\": \"542500\",\n    \"林芝\": \"542600\",\n    \"西安\": \"610100\",\n    \"铜川\": \"610200\",\n    \"宝鸡\": \"610300\",\n    \"咸阳\": \"610400\",\n    \"渭南\": \"610500\",\n    \"延安\": \"610600\",\n    \"汉中\": \"610700\",\n    \"榆林\": \"610800\",\n    \"安康\": \"610900\",\n    \"商洛\": \"611000\",\n    \"兰州\": \"620100\",\n    \"嘉峪关\": \"620200\",\n    \"金昌\": \"620300\",\n    \"白银\": \"620400\",\n    \"天水\": \"620500\",\n    \"武威\": \"620600\",\n    \"张掖\": \"620700\",\n    \"平凉\": \"620800\",\n    \"酒泉\": \"620900\",\n    \"庆阳\": \"621000\",\n    \"定西\": \"621100\",\n    \"陇南\": \"621200\",\n    \"临夏州\": \"622900\",\n    \"甘南州\": \"623000\",\n    \"西宁\": \"630100\",\n    \"海东地区\": \"632100\",\n    \"海北州\": \"632200\",\n    \"黄南州\": \"632300\",\n    \"海南州\": \"632500\",\n    \"果洛州\": \"632600\",\n    \"玉树州\": \"632700\",\n    \"海西州\": \"632800\",\n    \"银川\": \"640100\",\n    \"石嘴山\": \"640200\",\n    \"吴忠\": \"640300\",\n    \"固原\": \"640400\",\n    \"中卫\": \"640500\",\n    \"乌鲁木齐\": \"650100\",\n    \"克拉玛依\": \"650200\",\n    \"吐鲁番地区\": \"652100\",\n    \"哈密地区\": \"652200\",\n    \"昌吉州\": \"652300\",\n    \"博州\": \"652700\",\n    \"库尔勒\": \"652800\",\n    \"阿克苏地区\": \"652900\",\n    \"克州\": \"653000\",\n    \"喀什地区\": \"653100\",\n    \"和田地区\": \"653200\",\n    \"伊犁哈萨克州\": \"654000\",\n    \"塔城地区\": \"654200\",\n    \"阿勒泰地区\": \"654300\",\n    \"石河子\": \"659001\",\n    \"五家渠\": \"659004\",\n}\n"
  },
  {
    "path": "akshare/air/crypto.js",
    "content": "function Base64() {\n  _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\", this.encode = function(a) {\n    var c, d, e, f, g, h, i, b = \"\",\n        j = 0;\n    for (a = _utf8_encode(a); j < a.length;) c = a.charCodeAt(j++), d = a.charCodeAt(j++), e = a.charCodeAt(j++), f = c >> 2, g = (3 & c) << 4 | d >> 4, h = (15 & d) << 2 | e >> 6, i = 63 & e, isNaN(d) ? h = i = 64 : isNaN(e) && (i = 64), b = b + _keyStr.charAt(f) + _keyStr.charAt(g) + _keyStr.charAt(h) + _keyStr.charAt(i);\n    return b\n  }, this.decode = function(a) {\n    var c, d, e, f, g, h, i, b = \"\",\n        j = 0;\n    for (a = a.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\"); j < a.length;) f = _keyStr.indexOf(a.charAt(j++)), g = _keyStr.indexOf(a.charAt(j++)), h = _keyStr.indexOf(a.charAt(j++)), i = _keyStr.indexOf(a.charAt(j++)), c = f << 2 | g >> 4, d = (15 & g) << 4 | h >> 2, e = (3 & h) << 6 | i, b += String.fromCharCode(c), 64 != h && (b += String.fromCharCode(d)), 64 != i && (b += String.fromCharCode(e));\n    return b = _utf8_decode(b)\n  }, _utf8_encode = function(a) {\n    var b, c, d;\n    for (a = a.replace(/\\r\\n/g, \"\\n\"), b = \"\", c = 0; c < a.length; c++) d = a.charCodeAt(c), 128 > d ? b += String.fromCharCode(d) : d > 127 && 2048 > d ? (b += String.fromCharCode(192 | d >> 6), b += String.fromCharCode(128 | 63 & d)) : (b += String.fromCharCode(224 | d >> 12), b += String.fromCharCode(128 | 63 & d >> 6), b += String.fromCharCode(128 | 63 & d));\n    return b\n  }, _utf8_decode = function(a) {\n    for (var b = \"\", c = 0, d = c1 = c2 = 0; c < a.length;) d = a.charCodeAt(c), 128 > d ? (b += String.fromCharCode(d), c++) : d > 191 && 224 > d ? (c2 = a.charCodeAt(c + 1), b += String.fromCharCode((31 & d) << 6 | 63 & c2), c += 2) : (c2 = a.charCodeAt(c + 1), c3 = a.charCodeAt(c + 2), b += String.fromCharCode((15 & d) << 12 | (63 & c2) << 6 | 63 & c3), c += 3);\n    return b\n  }\n}\n\nfunction hex_md5(a) {\n  return binl2hex(core_md5(str2binl(a), a.length * chrsz))\n}\n\nfunction b64_md5(a) {\n  return binl2b64(core_md5(str2binl(a), a.length * chrsz))\n}\n\nfunction str_md5(a) {\n  return binl2str(core_md5(str2binl(a), a.length * chrsz))\n}\n\nfunction hex_hmac_md5(a, b) {\n  return binl2hex(core_hmac_md5(a, b))\n}\n\nfunction b64_hmac_md5(a, b) {\n  return binl2b64(core_hmac_md5(a, b))\n}\n\nfunction str_hmac_md5(a, b) {\n  return binl2str(core_hmac_md5(a, b))\n}\n\nfunction md5_vm_test() {\n  return \"900150983cd24fb0d6963f7d28e17f72\" == hex_md5(\"abc\")\n}\n\nfunction core_md5(a, b) {\n  var c, d, e, f, g, h, i, j, k;\n  for (a[b >> 5] |= 128 << b % 32, a[(b + 64 >>> 9 << 4) + 14] = b, c = 1732584193, d = -271733879, e = -1732584194, f = 271733878, g = 0; g < a.length; g += 16) h = c, i = d, j = e, k = f, c = md5_ff(c, d, e, f, a[g + 0], 7, -680876936), f = md5_ff(f, c, d, e, a[g + 1], 12, -389564586), e = md5_ff(e, f, c, d, a[g + 2], 17, 606105819), d = md5_ff(d, e, f, c, a[g + 3], 22, -1044525330), c = md5_ff(c, d, e, f, a[g + 4], 7, -176418897), f = md5_ff(f, c, d, e, a[g + 5], 12, 1200080426), e = md5_ff(e, f, c, d, a[g + 6], 17, -1473231341), d = md5_ff(d, e, f, c, a[g + 7], 22, -45705983), c = md5_ff(c, d, e, f, a[g + 8], 7, 1770035416), f = md5_ff(f, c, d, e, a[g + 9], 12, -1958414417), e = md5_ff(e, f, c, d, a[g + 10], 17, -42063), d = md5_ff(d, e, f, c, a[g + 11], 22, -1990404162), c = md5_ff(c, d, e, f, a[g + 12], 7, 1804603682), f = md5_ff(f, c, d, e, a[g + 13], 12, -40341101), e = md5_ff(e, f, c, d, a[g + 14], 17, -1502002290), d = md5_ff(d, e, f, c, a[g + 15], 22, 1236535329), c = md5_gg(c, d, e, f, a[g + 1], 5, -165796510), f = md5_gg(f, c, d, e, a[g + 6], 9, -1069501632), e = md5_gg(e, f, c, d, a[g + 11], 14, 643717713), d = md5_gg(d, e, f, c, a[g + 0], 20, -373897302), c = md5_gg(c, d, e, f, a[g + 5], 5, -701558691), f = md5_gg(f, c, d, e, a[g + 10], 9, 38016083), e = md5_gg(e, f, c, d, a[g + 15], 14, -660478335), d = md5_gg(d, e, f, c, a[g + 4], 20, -405537848), c = md5_gg(c, d, e, f, a[g + 9], 5, 568446438), f = md5_gg(f, c, d, e, a[g + 14], 9, -1019803690), e = md5_gg(e, f, c, d, a[g + 3], 14, -187363961), d = md5_gg(d, e, f, c, a[g + 8], 20, 1163531501), c = md5_gg(c, d, e, f, a[g + 13], 5, -1444681467), f = md5_gg(f, c, d, e, a[g + 2], 9, -51403784), e = md5_gg(e, f, c, d, a[g + 7], 14, 1735328473), d = md5_gg(d, e, f, c, a[g + 12], 20, -1926607734), c = md5_hh(c, d, e, f, a[g + 5], 4, -378558), f = md5_hh(f, c, d, e, a[g + 8], 11, -2022574463), e = md5_hh(e, f, c, d, a[g + 11], 16, 1839030562), d = md5_hh(d, e, f, c, a[g + 14], 23, -35309556), c = md5_hh(c, d, e, f, a[g + 1], 4, -1530992060), f = md5_hh(f, c, d, e, a[g + 4], 11, 1272893353), e = md5_hh(e, f, c, d, a[g + 7], 16, -155497632), d = md5_hh(d, e, f, c, a[g + 10], 23, -1094730640), c = md5_hh(c, d, e, f, a[g + 13], 4, 681279174), f = md5_hh(f, c, d, e, a[g + 0], 11, -358537222), e = md5_hh(e, f, c, d, a[g + 3], 16, -722521979), d = md5_hh(d, e, f, c, a[g + 6], 23, 76029189), c = md5_hh(c, d, e, f, a[g + 9], 4, -640364487), f = md5_hh(f, c, d, e, a[g + 12], 11, -421815835), e = md5_hh(e, f, c, d, a[g + 15], 16, 530742520), d = md5_hh(d, e, f, c, a[g + 2], 23, -995338651), c = md5_ii(c, d, e, f, a[g + 0], 6, -198630844), f = md5_ii(f, c, d, e, a[g + 7], 10, 1126891415), e = md5_ii(e, f, c, d, a[g + 14], 15, -1416354905), d = md5_ii(d, e, f, c, a[g + 5], 21, -57434055), c = md5_ii(c, d, e, f, a[g + 12], 6, 1700485571), f = md5_ii(f, c, d, e, a[g + 3], 10, -1894986606), e = md5_ii(e, f, c, d, a[g + 10], 15, -1051523), d = md5_ii(d, e, f, c, a[g + 1], 21, -2054922799), c = md5_ii(c, d, e, f, a[g + 8], 6, 1873313359), f = md5_ii(f, c, d, e, a[g + 15], 10, -30611744), e = md5_ii(e, f, c, d, a[g + 6], 15, -1560198380), d = md5_ii(d, e, f, c, a[g + 13], 21, 1309151649), c = md5_ii(c, d, e, f, a[g + 4], 6, -145523070), f = md5_ii(f, c, d, e, a[g + 11], 10, -1120210379), e = md5_ii(e, f, c, d, a[g + 2], 15, 718787259), d = md5_ii(d, e, f, c, a[g + 9], 21, -343485551), c = safe_add(c, h), d = safe_add(d, i), e = safe_add(e, j), f = safe_add(f, k);\n  return Array(c, d, e, f)\n}\n\nfunction md5_cmn(a, b, c, d, e, f) {\n  return safe_add(bit_rol(safe_add(safe_add(b, a), safe_add(d, f)), e), c)\n}\n\nfunction md5_ff(a, b, c, d, e, f, g) {\n  return md5_cmn(b & c | ~b & d, a, b, e, f, g)\n}\n\nfunction md5_gg(a, b, c, d, e, f, g) {\n  return md5_cmn(b & d | c & ~d, a, b, e, f, g)\n}\n\nfunction md5_hh(a, b, c, d, e, f, g) {\n  return md5_cmn(b ^ c ^ d, a, b, e, f, g)\n}\n\nfunction md5_ii(a, b, c, d, e, f, g) {\n  return md5_cmn(c ^ (b | ~d), a, b, e, f, g)\n}\n\nfunction core_hmac_md5(a, b) {\n  var d, e, f, g, c = str2binl(a);\n  for (c.length > 16 && (c = core_md5(c, a.length * chrsz)), d = Array(16), e = Array(16), f = 0; 16 > f; f++) d[f] = 909522486 ^ c[f], e[f] = 1549556828 ^ c[f];\n  return g = core_md5(d.concat(str2binl(b)), 512 + b.length * chrsz), core_md5(e.concat(g), 640)\n}\n\nfunction safe_add(a, b) {\n  var c = (65535 & a) + (65535 & b),\n      d = (a >> 16) + (b >> 16) + (c >> 16);\n  return d << 16 | 65535 & c\n}\n\nfunction bit_rol(a, b) {\n  return a << b | a >>> 32 - b\n}\n\nfunction str2binl(a) {\n  var d, b = Array(),\n      c = (1 << chrsz) - 1;\n  for (d = 0; d < a.length * chrsz; d += chrsz) b[d >> 5] |= (a.charCodeAt(d / chrsz) & c) << d % 32;\n  return b\n}\n\nfunction binl2str(a) {\n  var d, b = \"\",\n      c = (1 << chrsz) - 1;\n  for (d = 0; d < 32 * a.length; d += chrsz) b += String.fromCharCode(a[d >> 5] >>> d % 32 & c);\n  return b\n}\n\nfunction binl2hex(a) {\n  var d, b = hexcase ? \"0123456789ABCDEF\" : \"0123456789abcdef\",\n      c = \"\";\n  for (d = 0; d < 4 * a.length; d++) c += b.charAt(15 & a[d >> 2] >> 8 * (d % 4) + 4) + b.charAt(15 & a[d >> 2] >> 8 * (d % 4));\n  return c\n}\n\nfunction binl2b64(a) {\n  var d, e, f, b = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",\n      c = \"\";\n  for (d = 0; d < 4 * a.length; d += 3)\n    for (e = (255 & a[d >> 2] >> 8 * (d % 4)) << 16 | (255 & a[d + 1 >> 2] >> 8 * ((d + 1) % 4)) << 8 | 255 & a[d + 2 >> 2] >> 8 * ((d + 2) % 4), f = 0; 4 > f; f++) c += 8 * d + 6 * f > 32 * a.length ? b64pad : b.charAt(63 & e >> 6 * (3 - f));\n  return c\n}\n\nfunction encode_param(a) {\n  var b = new Base64;\n  return b.encode(a)\n}\n\nfunction encode_secret() {\n  var b, a = appId;\n  for (b = 0; b < arguments.length; b++) a += arguments[b];\n  return a = a.replace(/\\s/g, \"\"), hex_md5(a)\n}\n\nfunction decode_result(a) {\n  var b = new Base64;\n  return b.decode(b.decode(b.decode(a)))\n}\nvar hexcase = 0,\n    b64pad = \"\",\n    chrsz = 8,\n    appId = \"a01901d3caba1f362d69474674ce477f\";\n"
  },
  {
    "path": "akshare/air/outcrypto.js",
    "content": "function Base64() {\n  _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\", this.encode = function(a) {\n    var c, d, e, f, g, h, i, b = \"\",\n        j = 0;\n    for (a = _utf8_encode(a); j < a.length;) c = a.charCodeAt(j++), d = a.charCodeAt(j++), e = a.charCodeAt(j++), f = c >> 2, g = (3 & c) << 4 | d >> 4, h = (15 & d) << 2 | e >> 6, i = 63 & e, isNaN(d) ? h = i = 64 : isNaN(e) && (i = 64), b = b + _keyStr.charAt(f) + _keyStr.charAt(g) + _keyStr.charAt(h) + _keyStr.charAt(i);\n    return b\n  }, this.decode = function(a) {\n    var c, d, e, f, g, h, i, b = \"\",\n        j = 0;\n    for (a = a.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\"); j < a.length;) f = _keyStr.indexOf(a.charAt(j++)), g = _keyStr.indexOf(a.charAt(j++)), h = _keyStr.indexOf(a.charAt(j++)), i = _keyStr.indexOf(a.charAt(j++)), c = f << 2 | g >> 4, d = (15 & g) << 4 | h >> 2, e = (3 & h) << 6 | i, b += String.fromCharCode(c), 64 != h && (b += String.fromCharCode(d)), 64 != i && (b += String.fromCharCode(e));\n    return b = _utf8_decode(b)\n  }, _utf8_encode = function(a) {\n    var b, c, d;\n    for (a = a.replace(/\\r\\n/g, \"\\n\"), b = \"\", c = 0; c < a.length; c++) d = a.charCodeAt(c), 128 > d ? b += String.fromCharCode(d) : d > 127 && 2048 > d ? (b += String.fromCharCode(192 | d >> 6), b += String.fromCharCode(128 | 63 & d)) : (b += String.fromCharCode(224 | d >> 12), b += String.fromCharCode(128 | 63 & d >> 6), b += String.fromCharCode(128 | 63 & d));\n    return b\n  }, _utf8_decode = function(a) {\n    for (var b = \"\", c = 0, d = c1 = c2 = 0; c < a.length;) d = a.charCodeAt(c), 128 > d ? (b += String.fromCharCode(d), c++) : d > 191 && 224 > d ? (c2 = a.charCodeAt(c + 1), b += String.fromCharCode((31 & d) << 6 | 63 & c2), c += 2) : (c2 = a.charCodeAt(c + 1), c3 = a.charCodeAt(c + 2), b += String.fromCharCode((15 & d) << 12 | (63 & c2) << 6 | 63 & c3), c += 3);\n    return b\n  }\n}\n\nfunction hex_md5(a) {\n  return binl2hex(core_md5(str2binl(a), a.length * chrsz));\n}\n\nfunction b64_md5(a) {\n  return binl2b64(core_md5(str2binl(a), a.length * chrsz));\n}\n\nfunction str_md5(a) {\n  return binl2str(core_md5(str2binl(a), a.length * chrsz));\n}\n\nfunction hex_hmac_md5(a, b) {\n  return binl2hex(core_hmac_md5(a, b));\n}\n\nfunction b64_hmac_md5(a, b) {\n  return binl2b64(core_hmac_md5(a, b));\n}\n\nfunction str_hmac_md5(a, b) {\n  return binl2str(core_hmac_md5(a, b));\n}\n\nfunction md5_vm_test() {\n  return \"900150983cd24fb0d6963f7d28e17f72\" == hex_md5(\"abc\");\n}\n\nfunction core_md5(a, b) {\n  var c, d, e, f, g, h, i, j, k;\n  for (\n    a[b >> 5] |= 128 << b % 32,\n      a[(((b + 64) >>> 9) << 4) + 14] = b,\n      c = 1732584193,\n      d = -271733879,\n      e = -1732584194,\n      f = 271733878,\n      g = 0;\n    g < a.length;\n    g += 16\n  )\n    (h = c),\n      (i = d),\n      (j = e),\n      (k = f),\n      (c = md5_ff(c, d, e, f, a[g + 0], 7, -680876936)),\n      (f = md5_ff(f, c, d, e, a[g + 1], 12, -389564586)),\n      (e = md5_ff(e, f, c, d, a[g + 2], 17, 606105819)),\n      (d = md5_ff(d, e, f, c, a[g + 3], 22, -1044525330)),\n      (c = md5_ff(c, d, e, f, a[g + 4], 7, -176418897)),\n      (f = md5_ff(f, c, d, e, a[g + 5], 12, 1200080426)),\n      (e = md5_ff(e, f, c, d, a[g + 6], 17, -1473231341)),\n      (d = md5_ff(d, e, f, c, a[g + 7], 22, -45705983)),\n      (c = md5_ff(c, d, e, f, a[g + 8], 7, 1770035416)),\n      (f = md5_ff(f, c, d, e, a[g + 9], 12, -1958414417)),\n      (e = md5_ff(e, f, c, d, a[g + 10], 17, -42063)),\n      (d = md5_ff(d, e, f, c, a[g + 11], 22, -1990404162)),\n      (c = md5_ff(c, d, e, f, a[g + 12], 7, 1804603682)),\n      (f = md5_ff(f, c, d, e, a[g + 13], 12, -40341101)),\n      (e = md5_ff(e, f, c, d, a[g + 14], 17, -1502002290)),\n      (d = md5_ff(d, e, f, c, a[g + 15], 22, 1236535329)),\n      (c = md5_gg(c, d, e, f, a[g + 1], 5, -165796510)),\n      (f = md5_gg(f, c, d, e, a[g + 6], 9, -1069501632)),\n      (e = md5_gg(e, f, c, d, a[g + 11], 14, 643717713)),\n      (d = md5_gg(d, e, f, c, a[g + 0], 20, -373897302)),\n      (c = md5_gg(c, d, e, f, a[g + 5], 5, -701558691)),\n      (f = md5_gg(f, c, d, e, a[g + 10], 9, 38016083)),\n      (e = md5_gg(e, f, c, d, a[g + 15], 14, -660478335)),\n      (d = md5_gg(d, e, f, c, a[g + 4], 20, -405537848)),\n      (c = md5_gg(c, d, e, f, a[g + 9], 5, 568446438)),\n      (f = md5_gg(f, c, d, e, a[g + 14], 9, -1019803690)),\n      (e = md5_gg(e, f, c, d, a[g + 3], 14, -187363961)),\n      (d = md5_gg(d, e, f, c, a[g + 8], 20, 1163531501)),\n      (c = md5_gg(c, d, e, f, a[g + 13], 5, -1444681467)),\n      (f = md5_gg(f, c, d, e, a[g + 2], 9, -51403784)),\n      (e = md5_gg(e, f, c, d, a[g + 7], 14, 1735328473)),\n      (d = md5_gg(d, e, f, c, a[g + 12], 20, -1926607734)),\n      (c = md5_hh(c, d, e, f, a[g + 5], 4, -378558)),\n      (f = md5_hh(f, c, d, e, a[g + 8], 11, -2022574463)),\n      (e = md5_hh(e, f, c, d, a[g + 11], 16, 1839030562)),\n      (d = md5_hh(d, e, f, c, a[g + 14], 23, -35309556)),\n      (c = md5_hh(c, d, e, f, a[g + 1], 4, -1530992060)),\n      (f = md5_hh(f, c, d, e, a[g + 4], 11, 1272893353)),\n      (e = md5_hh(e, f, c, d, a[g + 7], 16, -155497632)),\n      (d = md5_hh(d, e, f, c, a[g + 10], 23, -1094730640)),\n      (c = md5_hh(c, d, e, f, a[g + 13], 4, 681279174)),\n      (f = md5_hh(f, c, d, e, a[g + 0], 11, -358537222)),\n      (e = md5_hh(e, f, c, d, a[g + 3], 16, -722521979)),\n      (d = md5_hh(d, e, f, c, a[g + 6], 23, 76029189)),\n      (c = md5_hh(c, d, e, f, a[g + 9], 4, -640364487)),\n      (f = md5_hh(f, c, d, e, a[g + 12], 11, -421815835)),\n      (e = md5_hh(e, f, c, d, a[g + 15], 16, 530742520)),\n      (d = md5_hh(d, e, f, c, a[g + 2], 23, -995338651)),\n      (c = md5_ii(c, d, e, f, a[g + 0], 6, -198630844)),\n      (f = md5_ii(f, c, d, e, a[g + 7], 10, 1126891415)),\n      (e = md5_ii(e, f, c, d, a[g + 14], 15, -1416354905)),\n      (d = md5_ii(d, e, f, c, a[g + 5], 21, -57434055)),\n      (c = md5_ii(c, d, e, f, a[g + 12], 6, 1700485571)),\n      (f = md5_ii(f, c, d, e, a[g + 3], 10, -1894986606)),\n      (e = md5_ii(e, f, c, d, a[g + 10], 15, -1051523)),\n      (d = md5_ii(d, e, f, c, a[g + 1], 21, -2054922799)),\n      (c = md5_ii(c, d, e, f, a[g + 8], 6, 1873313359)),\n      (f = md5_ii(f, c, d, e, a[g + 15], 10, -30611744)),\n      (e = md5_ii(e, f, c, d, a[g + 6], 15, -1560198380)),\n      (d = md5_ii(d, e, f, c, a[g + 13], 21, 1309151649)),\n      (c = md5_ii(c, d, e, f, a[g + 4], 6, -145523070)),\n      (f = md5_ii(f, c, d, e, a[g + 11], 10, -1120210379)),\n      (e = md5_ii(e, f, c, d, a[g + 2], 15, 718787259)),\n      (d = md5_ii(d, e, f, c, a[g + 9], 21, -343485551)),\n      (c = safe_add(c, h)),\n      (d = safe_add(d, i)),\n      (e = safe_add(e, j)),\n      (f = safe_add(f, k));\n  return Array(c, d, e, f);\n}\n\nfunction md5_cmn(a, b, c, d, e, f) {\n  return safe_add(bit_rol(safe_add(safe_add(b, a), safe_add(d, f)), e), c);\n}\n\nfunction md5_ff(a, b, c, d, e, f, g) {\n  return md5_cmn((b & c) | (~b & d), a, b, e, f, g);\n}\n\nfunction md5_gg(a, b, c, d, e, f, g) {\n  return md5_cmn((b & d) | (c & ~d), a, b, e, f, g);\n}\n\nfunction md5_hh(a, b, c, d, e, f, g) {\n  return md5_cmn(b ^ c ^ d, a, b, e, f, g);\n}\n\nfunction md5_ii(a, b, c, d, e, f, g) {\n  return md5_cmn(c ^ (b | ~d), a, b, e, f, g);\n}\n\nfunction core_hmac_md5(a, b) {\n  var d,\n    e,\n    f,\n    g,\n    c = str2binl(a);\n  for (\n    c.length > 16 && (c = core_md5(c, a.length * chrsz)),\n      d = Array(16),\n      e = Array(16),\n      f = 0;\n    16 > f;\n    f++\n  )\n    (d[f] = 909522486 ^ c[f]), (e[f] = 1549556828 ^ c[f]);\n  return (\n    (g = core_md5(d.concat(str2binl(b)), 512 + b.length * chrsz)),\n    core_md5(e.concat(g), 640)\n  );\n}\n\nfunction safe_add(a, b) {\n  var c = (65535 & a) + (65535 & b),\n    d = (a >> 16) + (b >> 16) + (c >> 16);\n  return (d << 16) | (65535 & c);\n}\n\nfunction bit_rol(a, b) {\n  return (a << b) | (a >>> (32 - b));\n}\n\nfunction str2binl(a) {\n  var d,\n    b = Array(),\n    c = (1 << chrsz) - 1;\n  for (d = 0; d < a.length * chrsz; d += chrsz)\n    b[d >> 5] |= (a.charCodeAt(d / chrsz) & c) << d % 32;\n  return b;\n}\n\nfunction binl2str(a) {\n  var d,\n    b = \"\",\n    c = (1 << chrsz) - 1;\n  for (d = 0; d < 32 * a.length; d += chrsz)\n    b += String.fromCharCode((a[d >> 5] >>> d % 32) & c);\n  return b;\n}\n\nfunction binl2hex(a) {\n  var d,\n    b = hexcase ? \"0123456789ABCDEF\" : \"0123456789abcdef\",\n    c = \"\";\n  for (d = 0; d < 4 * a.length; d++)\n    c +=\n      b.charAt(15 & (a[d >> 2] >> (8 * (d % 4) + 4))) +\n      b.charAt(15 & (a[d >> 2] >> (8 * (d % 4))));\n  return c;\n}\n\nfunction binl2b64(a) {\n  var d,\n    e,\n    f,\n    b = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",\n    c = \"\";\n  for (d = 0; d < 4 * a.length; d += 3)\n    for (\n      e =\n        ((255 & (a[d >> 2] >> (8 * (d % 4)))) << 16) |\n        ((255 & (a[(d + 1) >> 2] >> (8 * ((d + 1) % 4)))) << 8) |\n        (255 & (a[(d + 2) >> 2] >> (8 * ((d + 2) % 4)))),\n        f = 0;\n      4 > f;\n      f++\n    )\n      c +=\n        8 * d + 6 * f > 32 * a.length\n          ? b64pad\n          : b.charAt(63 & (e >> (6 * (3 - f))));\n  return c;\n}\n\nfunction encode_param(a) {\n  var b = new Base64();\n  var des = DES()\n  return des.encrypt(b.encode(a));\n}\n\nfunction encode_secret() {\n  var b,\n    a = appId;\n  for (b = 0; b < arguments.length; b++) a += arguments[b];\n  return (a = a.replace(/\\s/g, \"\")), hex_md5(a);\n}\n\nfunction decode_result(a) {\n  var b = new Base64();\n  return b.decode(b.decode(b.decode(a)));\n}\n\nvar hexcase = 0,\n  b64pad = \"\",\n  chrsz = 8,\n  appId = \"a01901d3caba1f362d69474674ce477f\";\n\nvar CryptoJS =\n  CryptoJS ||\n  (function(h, r) {\n    var k = {},\n      l = (k.lib = {}),\n      n = function() {},\n      f = (l.Base = {\n        extend: function(a) {\n          n.prototype = this;\n          var b = new n();\n          a && b.mixIn(a);\n          b.hasOwnProperty(\"init\") ||\n            (b.init = function() {\n              b.s.init.apply(this, arguments);\n            });\n          b.init.prototype = b;\n          b.s = this;\n          return b;\n        },\n        create: function() {\n          var a = this.extend();\n          a.init.apply(a, arguments);\n          return a;\n        },\n        init: function() {},\n        mixIn: function(a) {\n          for (var b in a) a.hasOwnProperty(b) && (this[b] = a[b]);\n          a.hasOwnProperty(\"toString\") && (this.toString = a.toString);\n        },\n        clone: function() {\n          return this.init.prototype.extend(this);\n        }\n      }),\n      j = (l.WordArray = f.extend({\n        init: function(a, b) {\n          a = this.words = a || [];\n          this.sigBytes = b != r ? b : 4 * a.length;\n        },\n        toString: function(a) {\n          return (a || s).stringify(this);\n        },\n        concat: function(a) {\n          var b = this.words,\n            d = a.words,\n            c = this.sigBytes;\n          a = a.sigBytes;\n          this.clamp();\n          if (c % 4)\n            for (var e = 0; e < a; e++)\n              b[(c + e) >>> 2] |=\n                ((d[e >>> 2] >>> (24 - 8 * (e % 4))) & 255) <<\n                (24 - 8 * ((c + e) % 4));\n          else if (65535 < d.length)\n            for (e = 0; e < a; e += 4) b[(c + e) >>> 2] = d[e >>> 2];\n          else b.push.apply(b, d);\n          this.sigBytes += a;\n          return this;\n        },\n        clamp: function() {\n          var a = this.words,\n            b = this.sigBytes;\n          a[b >>> 2] &= 4294967295 << (32 - 8 * (b % 4));\n          a.length = h.ceil(b / 4);\n        },\n        clone: function() {\n          var a = f.clone.call(this);\n          a.words = this.words.slice(0);\n          return a;\n        },\n        random: function(a) {\n          for (var b = [], d = 0; d < a; d += 4)\n            b.push((4294967296 * h.random()) | 0);\n          return new j.init(b, a);\n        }\n      })),\n      m = (k.enc = {}),\n      s = (m.Hex = {\n        stringify: function(a) {\n          var b = a.words;\n          a = a.sigBytes;\n          for (var d = [], c = 0; c < a; c++) {\n            var e = (b[c >>> 2] >>> (24 - 8 * (c % 4))) & 255;\n            d.push((e >>> 4).toString(16));\n            d.push((e & 15).toString(16));\n          }\n          return d.join(\"\");\n        },\n        parse: function(a) {\n          for (var b = a.length, d = [], c = 0; c < b; c += 2)\n            d[c >>> 3] |= parseInt(a.substr(c, 2), 16) << (24 - 4 * (c % 8));\n          return new j.init(d, b / 2);\n        }\n      }),\n      p = (m.Latin1 = {\n        stringify: function(a) {\n          var b = a.words;\n          a = a.sigBytes;\n          for (var d = [], c = 0; c < a; c++)\n            d.push(\n              String.fromCharCode((b[c >>> 2] >>> (24 - 8 * (c % 4))) & 255)\n            );\n          return d.join(\"\");\n        },\n        parse: function(a) {\n          for (var b = a.length, d = [], c = 0; c < b; c++)\n            d[c >>> 2] |= (a.charCodeAt(c) & 255) << (24 - 8 * (c % 4));\n          return new j.init(d, b);\n        }\n      }),\n      t = (m.Utf8 = {\n        stringify: function(a) {\n          try {\n            return decodeURIComponent(escape(p.stringify(a)));\n          } catch (b) {\n            throw Error(\"Malformed UTF-8 data\");\n          }\n        },\n        parse: function(a) {\n          return p.parse(unescape(encodeURIComponent(a)));\n        }\n      }),\n      q = (l.BufferedBlockAlgorithm = f.extend({\n        reset: function() {\n          this._2 = new j.init();\n          this._22 = 0;\n        },\n        _8: function(a) {\n          \"string\" == typeof a && (a = t.parse(a));\n          this._2.concat(a);\n          this._22 += a.sigBytes;\n        },\n        _3: function(a) {\n          var b = this._2,\n            d = b.words,\n            c = b.sigBytes,\n            e = this.blockSize,\n            f = c / (4 * e),\n            f = a ? h.ceil(f) : h.max((f | 0) - this._18, 0);\n          a = f * e;\n          c = h.min(4 * a, c);\n          if (a) {\n            for (var g = 0; g < a; g += e) this._20(d, g);\n            g = d.splice(0, a);\n            b.sigBytes -= c;\n          }\n          return new j.init(g, c);\n        },\n        clone: function() {\n          var a = f.clone.call(this);\n          a._2 = this._2.clone();\n          return a;\n        },\n        _18: 0\n      }));\n    l.Hasher = q.extend({\n      cfg: f.extend(),\n      init: function(a) {\n        this.cfg = this.cfg.extend(a);\n        this.reset();\n      },\n      reset: function() {\n        q.reset.call(this);\n        this._5();\n      },\n      update: function(a) {\n        this._8(a);\n        this._3();\n        return this;\n      },\n      finalize: function(a) {\n        a && this._8(a);\n        return this._9();\n      },\n      blockSize: 16,\n      _6: function(a) {\n        return function(b, d) {\n          return new a.init(d).finalize(b);\n        };\n      },\n      _30: function(a) {\n        return function(b, d) {\n          return new u.HMAC.init(a, d).finalize(b);\n        };\n      }\n    });\n    var u = (k.algo = {});\n    return k;\n  })(Math);\n(function() {\n  var h = CryptoJS,\n    j = h.lib.WordArray;\n  h.enc.Base64 = {\n    stringify: function(b) {\n      var e = b.words,\n        f = b.sigBytes,\n        c = this._13;\n      b.clamp();\n      b = [];\n      for (var a = 0; a < f; a += 3)\n        for (\n          var d =\n              (((e[a >>> 2] >>> (24 - 8 * (a % 4))) & 255) << 16) |\n              (((e[(a + 1) >>> 2] >>> (24 - 8 * ((a + 1) % 4))) & 255) << 8) |\n              ((e[(a + 2) >>> 2] >>> (24 - 8 * ((a + 2) % 4))) & 255),\n            g = 0;\n          4 > g && a + 0.75 * g < f;\n          g++\n        )\n          b.push(c.charAt((d >>> (6 * (3 - g))) & 63));\n      if ((e = c.charAt(64))) for (; b.length % 4; ) b.push(e);\n      return b.join(\"\");\n    },\n    parse: function(b) {\n      var e = b.length,\n        f = this._13,\n        c = f.charAt(64);\n      c && ((c = b.indexOf(c)), -1 != c && (e = c));\n      for (var c = [], a = 0, d = 0; d < e; d++)\n        if (d % 4) {\n          var g = f.indexOf(b.charAt(d - 1)) << (2 * (d % 4)),\n            h = f.indexOf(b.charAt(d)) >>> (6 - 2 * (d % 4));\n          c[a >>> 2] |= (g | h) << (24 - 8 * (a % 4));\n          a++;\n        }\n      return j.create(c, a);\n    },\n    _13: \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"\n  };\n})();\nCryptoJS.lib.Cipher ||\n  (function(u) {\n    var g = CryptoJS,\n      f = g.lib,\n      k = f.Base,\n      l = f.WordArray,\n      q = f.BufferedBlockAlgorithm,\n      r = g.enc.Base64,\n      v = g.algo.EvpKDF,\n      n = (f.Cipher = q.extend({\n        cfg: k.extend(),\n        createEncryptor: function(a, b) {\n          return this.create(this._11, a, b);\n        },\n        createDecryptor: function(a, b) {\n          return this.create(this._25, a, b);\n        },\n        init: function(a, b, c) {\n          this.cfg = this.cfg.extend(c);\n          this._15 = a;\n          this._12 = b;\n          this.reset();\n        },\n        reset: function() {\n          q.reset.call(this);\n          this._5();\n        },\n        process: function(a) {\n          this._8(a);\n          return this._3();\n        },\n        finalize: function(a) {\n          a && this._8(a);\n          return this._9();\n        },\n        keySize: 4,\n        ivSize: 4,\n        _11: 1,\n        _25: 2,\n        _6: function(a) {\n          return {\n            encrypt: function(b, c, d) {\n              return (\"string\" == typeof c ? s : j).encrypt(a, b, c, d);\n            },\n            decrypt: function(b, c, d) {\n              return (\"string\" == typeof c ? s : j).decrypt(a, b, c, d);\n            }\n          };\n        }\n      }));\n    f.StreamCipher = n.extend({\n      _9: function() {\n        return this._3(!0);\n      },\n      blockSize: 1\n    });\n    var m = (g.mode = {}),\n      t = function(a, b, c) {\n        var d = this._16;\n        d ? (this._16 = u) : (d = this._19);\n        for (var e = 0; e < c; e++) a[b + e] ^= d[e];\n      },\n      h = (f.BlockCipherMode = k.extend({\n        createEncryptor: function(a, b) {\n          return this.Encryptor.create(a, b);\n        },\n        createDecryptor: function(a, b) {\n          return this.Decryptor.create(a, b);\n        },\n        init: function(a, b) {\n          this._10 = a;\n          this._16 = b;\n        }\n      })).extend();\n    h.Encryptor = h.extend({\n      processBlock: function(a, b) {\n        var c = this._10,\n          d = c.blockSize;\n        t.call(this, a, b, d);\n        c.encryptBlock(a, b);\n        this._19 = a.slice(b, b + d);\n      }\n    });\n    h.Decryptor = h.extend({\n      processBlock: function(a, b) {\n        var c = this._10,\n          d = c.blockSize,\n          e = a.slice(b, b + d);\n        c.decryptBlock(a, b);\n        t.call(this, a, b, d);\n        this._19 = e;\n      }\n    });\n    m = m.CBC = h;\n    h = (g.pad = {}).Pkcs7 = {\n      pad: function(a, b) {\n        for (\n          var c = 4 * b,\n            c = c - (a.sigBytes % c),\n            d = (c << 24) | (c << 16) | (c << 8) | c,\n            e = [],\n            f = 0;\n          f < c;\n          f += 4\n        )\n          e.push(d);\n        c = l.create(e, c);\n        a.concat(c);\n      },\n      unpad: function(a) {\n        a.sigBytes -= a.words[(a.sigBytes - 1) >>> 2] & 255;\n      }\n    };\n    f.BlockCipher = n.extend({\n      cfg: n.cfg.extend({\n        mode: m,\n        padding: h\n      }),\n      reset: function() {\n        n.reset.call(this);\n        var a = this.cfg,\n          b = a.iv,\n          a = a.mode;\n        if (this._15 == this._11) var c = a.createEncryptor;\n        else (c = a.createDecryptor), (this._18 = 1);\n        this._31 = c.call(a, this, b && b.words);\n      },\n      _20: function(a, b) {\n        this._31.processBlock(a, b);\n      },\n      _9: function() {\n        var a = this.cfg.padding;\n        if (this._15 == this._11) {\n          a.pad(this._2, this.blockSize);\n          var b = this._3(!0);\n        } else (b = this._3(!0)), a.unpad(b);\n        return b;\n      },\n      blockSize: 4\n    });\n    var p = (f.CipherParams = k.extend({\n        init: function(a) {\n          this.mixIn(a);\n        },\n        toString: function(a) {\n          return (a || this.formatter).stringify(this);\n        }\n      })),\n      m = ((g.format = {}).OpenSSL = {\n        stringify: function(a) {\n          var b = a.ciphertext;\n          a = a.salt;\n          return (a\n            ? l\n                .create([1398893684, 1701076831])\n                .concat(a)\n                .concat(b)\n            : b\n          ).toString(r);\n        },\n        parse: function(a) {\n          a = r.parse(a);\n          var b = a.words;\n          if (1398893684 == b[0] && 1701076831 == b[1]) {\n            var c = l.create(b.slice(2, 4));\n            b.splice(0, 4);\n            a.sigBytes -= 16;\n          }\n          return p.create({\n            ciphertext: a,\n            salt: c\n          });\n        }\n      }),\n      j = (f.SerializableCipher = k.extend({\n        cfg: k.extend({\n          format: m\n        }),\n        encrypt: function(a, b, c, d) {\n          d = this.cfg.extend(d);\n          var e = a.createEncryptor(c, d);\n          b = e.finalize(b);\n          e = e.cfg;\n          return p.create({\n            ciphertext: b,\n            key: c,\n            iv: e.iv,\n            algorithm: a,\n            mode: e.mode,\n            padding: e.padding,\n            blockSize: a.blockSize,\n            formatter: d.format\n          });\n        },\n        decrypt: function(a, b, c, d) {\n          d = this.cfg.extend(d);\n          b = this._14(b, d.format);\n          return a.createDecryptor(c, d).finalize(b.ciphertext);\n        },\n        _14: function(a, b) {\n          return \"string\" == typeof a ? b.parse(a, this) : a;\n        }\n      })),\n      g = ((g.kdf = {}).OpenSSL = {\n        execute: function(a, b, c, d) {\n          d || (d = l.random(8));\n          a = v\n            .create({\n              keySize: b + c\n            })\n            .compute(a, d);\n          c = l.create(a.words.slice(b), 4 * c);\n          a.sigBytes = 4 * b;\n          return p.create({\n            key: a,\n            iv: c,\n            salt: d\n          });\n        }\n      }),\n      s = (f.PasswordBasedCipher = j.extend({\n        cfg: j.cfg.extend({\n          kdf: g\n        }),\n        encrypt: function(a, b, c, d) {\n          d = this.cfg.extend(d);\n          c = d.kdf.execute(c, a.keySize, a.ivSize);\n          d.iv = c.iv;\n          a = j.encrypt.call(this, a, b, c.key, d);\n          a.mixIn(c);\n          return a;\n        },\n        decrypt: function(a, b, c, d) {\n          d = this.cfg.extend(d);\n          b = this._14(b, d.format);\n          c = d.kdf.execute(c, a.keySize, a.ivSize, b.salt);\n          d.iv = c.iv;\n          return j.decrypt.call(this, a, b, c.key, d);\n        }\n      }));\n  })();\nCryptoJS.mode.ECB = (function() {\n  var a = CryptoJS.lib.BlockCipherMode.extend();\n  a.Encryptor = a.extend({\n    processBlock: function(a, b) {\n      this._10.encryptBlock(a, b);\n    }\n  });\n  a.Decryptor = a.extend({\n    processBlock: function(a, b) {\n      this._10.decryptBlock(a, b);\n    }\n  });\n  return a;\n})();\n(function(E) {\n  function h(a, f, g, j, p, h, k) {\n    a = a + ((f & g) | (~f & j)) + p + k;\n    return ((a << h) | (a >>> (32 - h))) + f;\n  }\n  function k(a, f, g, j, p, h, k) {\n    a = a + ((f & j) | (g & ~j)) + p + k;\n    return ((a << h) | (a >>> (32 - h))) + f;\n  }\n  function l(a, f, g, j, h, k, l) {\n    a = a + (f ^ g ^ j) + h + l;\n    return ((a << k) | (a >>> (32 - k))) + f;\n  }\n  function n(a, f, g, j, h, k, l) {\n    a = a + (g ^ (f | ~j)) + h + l;\n    return ((a << k) | (a >>> (32 - k))) + f;\n  }\n  for (\n    var r = CryptoJS,\n      q = r.lib,\n      F = q.WordArray,\n      s = q.Hasher,\n      q = r.algo,\n      a = [],\n      t = 0;\n    64 > t;\n    t++\n  )\n    a[t] = (4294967296 * E.abs(E.sin(t + 1))) | 0;\n  q = q.MD5 = s.extend({\n    _5: function() {\n      this._7 = new F.init([1732584193, 4023233417, 2562383102, 271733878]);\n    },\n    _20: function(m, f) {\n      for (var g = 0; 16 > g; g++) {\n        var j = f + g,\n          p = m[j];\n        m[j] =\n          (((p << 8) | (p >>> 24)) & 16711935) |\n          (((p << 24) | (p >>> 8)) & 4278255360);\n      }\n      var g = this._7.words,\n        j = m[f + 0],\n        p = m[f + 1],\n        q = m[f + 2],\n        r = m[f + 3],\n        s = m[f + 4],\n        t = m[f + 5],\n        u = m[f + 6],\n        v = m[f + 7],\n        w = m[f + 8],\n        x = m[f + 9],\n        y = m[f + 10],\n        z = m[f + 11],\n        A = m[f + 12],\n        B = m[f + 13],\n        C = m[f + 14],\n        D = m[f + 15],\n        b = g[0],\n        c = g[1],\n        d = g[2],\n        e = g[3],\n        b = h(b, c, d, e, j, 7, a[0]),\n        e = h(e, b, c, d, p, 12, a[1]),\n        d = h(d, e, b, c, q, 17, a[2]),\n        c = h(c, d, e, b, r, 22, a[3]),\n        b = h(b, c, d, e, s, 7, a[4]),\n        e = h(e, b, c, d, t, 12, a[5]),\n        d = h(d, e, b, c, u, 17, a[6]),\n        c = h(c, d, e, b, v, 22, a[7]),\n        b = h(b, c, d, e, w, 7, a[8]),\n        e = h(e, b, c, d, x, 12, a[9]),\n        d = h(d, e, b, c, y, 17, a[10]),\n        c = h(c, d, e, b, z, 22, a[11]),\n        b = h(b, c, d, e, A, 7, a[12]),\n        e = h(e, b, c, d, B, 12, a[13]),\n        d = h(d, e, b, c, C, 17, a[14]),\n        c = h(c, d, e, b, D, 22, a[15]),\n        b = k(b, c, d, e, p, 5, a[16]),\n        e = k(e, b, c, d, u, 9, a[17]),\n        d = k(d, e, b, c, z, 14, a[18]),\n        c = k(c, d, e, b, j, 20, a[19]),\n        b = k(b, c, d, e, t, 5, a[20]),\n        e = k(e, b, c, d, y, 9, a[21]),\n        d = k(d, e, b, c, D, 14, a[22]),\n        c = k(c, d, e, b, s, 20, a[23]),\n        b = k(b, c, d, e, x, 5, a[24]),\n        e = k(e, b, c, d, C, 9, a[25]),\n        d = k(d, e, b, c, r, 14, a[26]),\n        c = k(c, d, e, b, w, 20, a[27]),\n        b = k(b, c, d, e, B, 5, a[28]),\n        e = k(e, b, c, d, q, 9, a[29]),\n        d = k(d, e, b, c, v, 14, a[30]),\n        c = k(c, d, e, b, A, 20, a[31]),\n        b = l(b, c, d, e, t, 4, a[32]),\n        e = l(e, b, c, d, w, 11, a[33]),\n        d = l(d, e, b, c, z, 16, a[34]),\n        c = l(c, d, e, b, C, 23, a[35]),\n        b = l(b, c, d, e, p, 4, a[36]),\n        e = l(e, b, c, d, s, 11, a[37]),\n        d = l(d, e, b, c, v, 16, a[38]),\n        c = l(c, d, e, b, y, 23, a[39]),\n        b = l(b, c, d, e, B, 4, a[40]),\n        e = l(e, b, c, d, j, 11, a[41]),\n        d = l(d, e, b, c, r, 16, a[42]),\n        c = l(c, d, e, b, u, 23, a[43]),\n        b = l(b, c, d, e, x, 4, a[44]),\n        e = l(e, b, c, d, A, 11, a[45]),\n        d = l(d, e, b, c, D, 16, a[46]),\n        c = l(c, d, e, b, q, 23, a[47]),\n        b = n(b, c, d, e, j, 6, a[48]),\n        e = n(e, b, c, d, v, 10, a[49]),\n        d = n(d, e, b, c, C, 15, a[50]),\n        c = n(c, d, e, b, t, 21, a[51]),\n        b = n(b, c, d, e, A, 6, a[52]),\n        e = n(e, b, c, d, r, 10, a[53]),\n        d = n(d, e, b, c, y, 15, a[54]),\n        c = n(c, d, e, b, p, 21, a[55]),\n        b = n(b, c, d, e, w, 6, a[56]),\n        e = n(e, b, c, d, D, 10, a[57]),\n        d = n(d, e, b, c, u, 15, a[58]),\n        c = n(c, d, e, b, B, 21, a[59]),\n        b = n(b, c, d, e, s, 6, a[60]),\n        e = n(e, b, c, d, z, 10, a[61]),\n        d = n(d, e, b, c, q, 15, a[62]),\n        c = n(c, d, e, b, x, 21, a[63]);\n      g[0] = (g[0] + b) | 0;\n      g[1] = (g[1] + c) | 0;\n      g[2] = (g[2] + d) | 0;\n      g[3] = (g[3] + e) | 0;\n    },\n    _9: function() {\n      var a = this._2,\n        f = a.words,\n        g = 8 * this._22,\n        j = 8 * a.sigBytes;\n      f[j >>> 5] |= 128 << (24 - (j % 32));\n      var h = E.floor(g / 4294967296);\n      f[(((j + 64) >>> 9) << 4) + 15] =\n        (((h << 8) | (h >>> 24)) & 16711935) |\n        (((h << 24) | (h >>> 8)) & 4278255360);\n      f[(((j + 64) >>> 9) << 4) + 14] =\n        (((g << 8) | (g >>> 24)) & 16711935) |\n        (((g << 24) | (g >>> 8)) & 4278255360);\n      a.sigBytes = 4 * (f.length + 1);\n      this._3();\n      a = this._7;\n      f = a.words;\n      for (g = 0; 4 > g; g++)\n        (j = f[g]),\n          (f[g] =\n            (((j << 8) | (j >>> 24)) & 16711935) |\n            (((j << 24) | (j >>> 8)) & 4278255360));\n      return a;\n    },\n    clone: function() {\n      var a = s.clone.call(this);\n      a._7 = this._7.clone();\n      return a;\n    }\n  });\n  r.MD5 = s._6(q);\n  r.HmacMD5 = s._30(q);\n})(Math);\n(function() {\n  for (\n    var q = CryptoJS,\n      x = q.lib.BlockCipher,\n      r = q.algo,\n      j = [],\n      y = [],\n      z = [],\n      A = [],\n      B = [],\n      C = [],\n      s = [],\n      u = [],\n      v = [],\n      w = [],\n      g = [],\n      k = 0;\n    256 > k;\n    k++\n  )\n    g[k] = 128 > k ? k << 1 : (k << 1) ^ 283;\n  for (var n = 0, l = 0, k = 0; 256 > k; k++) {\n    var f = l ^ (l << 1) ^ (l << 2) ^ (l << 3) ^ (l << 4),\n      f = (f >>> 8) ^ (f & 255) ^ 99;\n    j[n] = f;\n    y[f] = n;\n    var t = g[n],\n      D = g[t],\n      E = g[D],\n      b = (257 * g[f]) ^ (16843008 * f);\n    z[n] = (b << 24) | (b >>> 8);\n    A[n] = (b << 16) | (b >>> 16);\n    B[n] = (b << 8) | (b >>> 24);\n    C[n] = b;\n    b = (16843009 * E) ^ (65537 * D) ^ (257 * t) ^ (16843008 * n);\n    s[f] = (b << 24) | (b >>> 8);\n    u[f] = (b << 16) | (b >>> 16);\n    v[f] = (b << 8) | (b >>> 24);\n    w[f] = b;\n    n ? ((n = t ^ g[g[g[E ^ t]]]), (l ^= g[g[l]])) : (n = l = 1);\n  }\n  var F = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54],\n    r = (r.AES = x.extend({\n      _5: function() {\n        for (\n          var c = this._12,\n            e = c.words,\n            a = c.sigBytes / 4,\n            c = 4 * ((this._26 = a + 6) + 1),\n            b = (this._27 = []),\n            h = 0;\n          h < c;\n          h++\n        )\n          if (h < a) b[h] = e[h];\n          else {\n            var d = b[h - 1];\n            h % a\n              ? 6 < a &&\n                4 == h % a &&\n                (d =\n                  (j[d >>> 24] << 24) |\n                  (j[(d >>> 16) & 255] << 16) |\n                  (j[(d >>> 8) & 255] << 8) |\n                  j[d & 255])\n              : ((d = (d << 8) | (d >>> 24)),\n                (d =\n                  (j[d >>> 24] << 24) |\n                  (j[(d >>> 16) & 255] << 16) |\n                  (j[(d >>> 8) & 255] << 8) |\n                  j[d & 255]),\n                (d ^= F[(h / a) | 0] << 24));\n            b[h] = b[h - a] ^ d;\n          }\n        e = this._24 = [];\n        for (a = 0; a < c; a++)\n          (h = c - a),\n            (d = a % 4 ? b[h] : b[h - 4]),\n            (e[a] =\n              4 > a || 4 >= h\n                ? d\n                : s[j[d >>> 24]] ^\n                  u[j[(d >>> 16) & 255]] ^\n                  v[j[(d >>> 8) & 255]] ^\n                  w[j[d & 255]]);\n      },\n      encryptBlock: function(c, e) {\n        this._4(c, e, this._27, z, A, B, C, j);\n      },\n      decryptBlock: function(c, e) {\n        var a = c[e + 1];\n        c[e + 1] = c[e + 3];\n        c[e + 3] = a;\n        this._4(c, e, this._24, s, u, v, w, y);\n        a = c[e + 1];\n        c[e + 1] = c[e + 3];\n        c[e + 3] = a;\n      },\n      _4: function(c, e, a, b, h, d, j, m) {\n        for (\n          var n = this._26,\n            f = c[e] ^ a[0],\n            g = c[e + 1] ^ a[1],\n            k = c[e + 2] ^ a[2],\n            p = c[e + 3] ^ a[3],\n            l = 4,\n            t = 1;\n          t < n;\n          t++\n        )\n          var q =\n              b[f >>> 24] ^\n              h[(g >>> 16) & 255] ^\n              d[(k >>> 8) & 255] ^\n              j[p & 255] ^\n              a[l++],\n            r =\n              b[g >>> 24] ^\n              h[(k >>> 16) & 255] ^\n              d[(p >>> 8) & 255] ^\n              j[f & 255] ^\n              a[l++],\n            s =\n              b[k >>> 24] ^\n              h[(p >>> 16) & 255] ^\n              d[(f >>> 8) & 255] ^\n              j[g & 255] ^\n              a[l++],\n            p =\n              b[p >>> 24] ^\n              h[(f >>> 16) & 255] ^\n              d[(g >>> 8) & 255] ^\n              j[k & 255] ^\n              a[l++],\n            f = q,\n            g = r,\n            k = s;\n        q =\n          ((m[f >>> 24] << 24) |\n            (m[(g >>> 16) & 255] << 16) |\n            (m[(k >>> 8) & 255] << 8) |\n            m[p & 255]) ^\n          a[l++];\n        r =\n          ((m[g >>> 24] << 24) |\n            (m[(k >>> 16) & 255] << 16) |\n            (m[(p >>> 8) & 255] << 8) |\n            m[f & 255]) ^\n          a[l++];\n        s =\n          ((m[k >>> 24] << 24) |\n            (m[(p >>> 16) & 255] << 16) |\n            (m[(f >>> 8) & 255] << 8) |\n            m[g & 255]) ^\n          a[l++];\n        p =\n          ((m[p >>> 24] << 24) |\n            (m[(f >>> 16) & 255] << 16) |\n            (m[(g >>> 8) & 255] << 8) |\n            m[k & 255]) ^\n          a[l++];\n        c[e] = q;\n        c[e + 1] = r;\n        c[e + 2] = s;\n        c[e + 3] = p;\n      },\n      keySize: 8\n    }));\n  q.AES = x._6(r);\n})();\n(function() {\n  function j(b, c) {\n    var a = ((this._1 >>> b) ^ this._0) & c;\n    this._0 ^= a;\n    this._1 ^= a << b;\n  }\n  function l(b, c) {\n    var a = ((this._0 >>> b) ^ this._1) & c;\n    this._1 ^= a;\n    this._0 ^= a << b;\n  }\n  var h = CryptoJS,\n    e = h.lib,\n    n = e.WordArray,\n    e = e.BlockCipher,\n    g = h.algo,\n    q = [\n      57,\n      49,\n      41,\n      33,\n      25,\n      17,\n      9,\n      1,\n      58,\n      50,\n      42,\n      34,\n      26,\n      18,\n      10,\n      2,\n      59,\n      51,\n      43,\n      35,\n      27,\n      19,\n      11,\n      3,\n      60,\n      52,\n      44,\n      36,\n      63,\n      55,\n      47,\n      39,\n      31,\n      23,\n      15,\n      7,\n      62,\n      54,\n      46,\n      38,\n      30,\n      22,\n      14,\n      6,\n      61,\n      53,\n      45,\n      37,\n      29,\n      21,\n      13,\n      5,\n      28,\n      20,\n      12,\n      4\n    ],\n    p = [\n      14,\n      17,\n      11,\n      24,\n      1,\n      5,\n      3,\n      28,\n      15,\n      6,\n      21,\n      10,\n      23,\n      19,\n      12,\n      4,\n      26,\n      8,\n      16,\n      7,\n      27,\n      20,\n      13,\n      2,\n      41,\n      52,\n      31,\n      37,\n      47,\n      55,\n      30,\n      40,\n      51,\n      45,\n      33,\n      48,\n      44,\n      49,\n      39,\n      56,\n      34,\n      53,\n      46,\n      42,\n      50,\n      36,\n      29,\n      32\n    ],\n    r = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28],\n    s = [\n      {\n        \"0\": 8421888,\n        268435456: 32768,\n        536870912: 8421378,\n        805306368: 2,\n        1073741824: 512,\n        1342177280: 8421890,\n        1610612736: 8389122,\n        1879048192: 8388608,\n        2147483648: 514,\n        2415919104: 8389120,\n        2684354560: 33280,\n        2952790016: 8421376,\n        3221225472: 32770,\n        3489660928: 8388610,\n        3758096384: 0,\n        4026531840: 33282,\n        134217728: 0,\n        402653184: 8421890,\n        671088640: 33282,\n        939524096: 32768,\n        1207959552: 8421888,\n        1476395008: 512,\n        1744830464: 8421378,\n        2013265920: 2,\n        2281701376: 8389120,\n        2550136832: 33280,\n        2818572288: 8421376,\n        3087007744: 8389122,\n        3355443200: 8388610,\n        3623878656: 32770,\n        3892314112: 514,\n        4160749568: 8388608,\n        1: 32768,\n        268435457: 2,\n        536870913: 8421888,\n        805306369: 8388608,\n        1073741825: 8421378,\n        1342177281: 33280,\n        1610612737: 512,\n        1879048193: 8389122,\n        2147483649: 8421890,\n        2415919105: 8421376,\n        2684354561: 8388610,\n        2952790017: 33282,\n        3221225473: 514,\n        3489660929: 8389120,\n        3758096385: 32770,\n        4026531841: 0,\n        134217729: 8421890,\n        402653185: 8421376,\n        671088641: 8388608,\n        939524097: 512,\n        1207959553: 32768,\n        1476395009: 8388610,\n        1744830465: 2,\n        2013265921: 33282,\n        2281701377: 32770,\n        2550136833: 8389122,\n        2818572289: 514,\n        3087007745: 8421888,\n        3355443201: 8389120,\n        3623878657: 0,\n        3892314113: 33280,\n        4160749569: 8421378\n      },\n      {\n        \"0\": 1074282512,\n        16777216: 16384,\n        33554432: 524288,\n        50331648: 1074266128,\n        67108864: 1073741840,\n        83886080: 1074282496,\n        100663296: 1073758208,\n        117440512: 16,\n        134217728: 540672,\n        150994944: 1073758224,\n        167772160: 1073741824,\n        184549376: 540688,\n        201326592: 524304,\n        218103808: 0,\n        234881024: 16400,\n        251658240: 1074266112,\n        8388608: 1073758208,\n        25165824: 540688,\n        41943040: 16,\n        58720256: 1073758224,\n        75497472: 1074282512,\n        92274688: 1073741824,\n        109051904: 524288,\n        125829120: 1074266128,\n        142606336: 524304,\n        159383552: 0,\n        176160768: 16384,\n        192937984: 1074266112,\n        209715200: 1073741840,\n        226492416: 540672,\n        243269632: 1074282496,\n        260046848: 16400,\n        268435456: 0,\n        285212672: 1074266128,\n        301989888: 1073758224,\n        318767104: 1074282496,\n        335544320: 1074266112,\n        352321536: 16,\n        369098752: 540688,\n        385875968: 16384,\n        402653184: 16400,\n        419430400: 524288,\n        436207616: 524304,\n        452984832: 1073741840,\n        469762048: 540672,\n        486539264: 1073758208,\n        503316480: 1073741824,\n        520093696: 1074282512,\n        276824064: 540688,\n        293601280: 524288,\n        310378496: 1074266112,\n        327155712: 16384,\n        343932928: 1073758208,\n        360710144: 1074282512,\n        377487360: 16,\n        394264576: 1073741824,\n        411041792: 1074282496,\n        427819008: 1073741840,\n        444596224: 1073758224,\n        461373440: 524304,\n        478150656: 0,\n        494927872: 16400,\n        511705088: 1074266128,\n        528482304: 540672\n      },\n      {\n        \"0\": 260,\n        1048576: 0,\n        2097152: 67109120,\n        3145728: 65796,\n        4194304: 65540,\n        5242880: 67108868,\n        6291456: 67174660,\n        7340032: 67174400,\n        8388608: 67108864,\n        9437184: 67174656,\n        10485760: 65792,\n        11534336: 67174404,\n        12582912: 67109124,\n        13631488: 65536,\n        14680064: 4,\n        15728640: 256,\n        524288: 67174656,\n        1572864: 67174404,\n        2621440: 0,\n        3670016: 67109120,\n        4718592: 67108868,\n        5767168: 65536,\n        6815744: 65540,\n        7864320: 260,\n        8912896: 4,\n        9961472: 256,\n        11010048: 67174400,\n        12058624: 65796,\n        13107200: 65792,\n        14155776: 67109124,\n        15204352: 67174660,\n        16252928: 67108864,\n        16777216: 67174656,\n        17825792: 65540,\n        18874368: 65536,\n        19922944: 67109120,\n        20971520: 256,\n        22020096: 67174660,\n        23068672: 67108868,\n        24117248: 0,\n        25165824: 67109124,\n        26214400: 67108864,\n        27262976: 4,\n        28311552: 65792,\n        29360128: 67174400,\n        30408704: 260,\n        31457280: 65796,\n        32505856: 67174404,\n        17301504: 67108864,\n        18350080: 260,\n        19398656: 67174656,\n        20447232: 0,\n        21495808: 65540,\n        22544384: 67109120,\n        23592960: 256,\n        24641536: 67174404,\n        25690112: 65536,\n        26738688: 67174660,\n        27787264: 65796,\n        28835840: 67108868,\n        29884416: 67109124,\n        30932992: 67174400,\n        31981568: 4,\n        33030144: 65792\n      },\n      {\n        \"0\": 2151682048,\n        65536: 2147487808,\n        131072: 4198464,\n        196608: 2151677952,\n        262144: 0,\n        327680: 4198400,\n        393216: 2147483712,\n        458752: 4194368,\n        524288: 2147483648,\n        589824: 4194304,\n        655360: 64,\n        720896: 2147487744,\n        786432: 2151678016,\n        851968: 4160,\n        917504: 4096,\n        983040: 2151682112,\n        32768: 2147487808,\n        98304: 64,\n        163840: 2151678016,\n        229376: 2147487744,\n        294912: 4198400,\n        360448: 2151682112,\n        425984: 0,\n        491520: 2151677952,\n        557056: 4096,\n        622592: 2151682048,\n        688128: 4194304,\n        753664: 4160,\n        819200: 2147483648,\n        884736: 4194368,\n        950272: 4198464,\n        1015808: 2147483712,\n        1048576: 4194368,\n        1114112: 4198400,\n        1179648: 2147483712,\n        1245184: 0,\n        1310720: 4160,\n        1376256: 2151678016,\n        1441792: 2151682048,\n        1507328: 2147487808,\n        1572864: 2151682112,\n        1638400: 2147483648,\n        1703936: 2151677952,\n        1769472: 4198464,\n        1835008: 2147487744,\n        1900544: 4194304,\n        1966080: 64,\n        2031616: 4096,\n        1081344: 2151677952,\n        1146880: 2151682112,\n        1212416: 0,\n        1277952: 4198400,\n        1343488: 4194368,\n        1409024: 2147483648,\n        1474560: 2147487808,\n        1540096: 64,\n        1605632: 2147483712,\n        1671168: 4096,\n        1736704: 2147487744,\n        1802240: 2151678016,\n        1867776: 4160,\n        1933312: 2151682048,\n        1998848: 4194304,\n        2064384: 4198464\n      },\n      {\n        \"0\": 128,\n        4096: 17039360,\n        8192: 262144,\n        12288: 536870912,\n        16384: 537133184,\n        20480: 16777344,\n        24576: 553648256,\n        28672: 262272,\n        32768: 16777216,\n        36864: 537133056,\n        40960: 536871040,\n        45056: 553910400,\n        49152: 553910272,\n        53248: 0,\n        57344: 17039488,\n        61440: 553648128,\n        2048: 17039488,\n        6144: 553648256,\n        10240: 128,\n        14336: 17039360,\n        18432: 262144,\n        22528: 537133184,\n        26624: 553910272,\n        30720: 536870912,\n        34816: 537133056,\n        38912: 0,\n        43008: 553910400,\n        47104: 16777344,\n        51200: 536871040,\n        55296: 553648128,\n        59392: 16777216,\n        63488: 262272,\n        65536: 262144,\n        69632: 128,\n        73728: 536870912,\n        77824: 553648256,\n        81920: 16777344,\n        86016: 553910272,\n        90112: 537133184,\n        94208: 16777216,\n        98304: 553910400,\n        102400: 553648128,\n        106496: 17039360,\n        110592: 537133056,\n        114688: 262272,\n        118784: 536871040,\n        122880: 0,\n        126976: 17039488,\n        67584: 553648256,\n        71680: 16777216,\n        75776: 17039360,\n        79872: 537133184,\n        83968: 536870912,\n        88064: 17039488,\n        92160: 128,\n        96256: 553910272,\n        100352: 262272,\n        104448: 553910400,\n        108544: 0,\n        112640: 553648128,\n        116736: 16777344,\n        120832: 262144,\n        124928: 537133056,\n        129024: 536871040\n      },\n      {\n        \"0\": 268435464,\n        256: 8192,\n        512: 270532608,\n        768: 270540808,\n        1024: 268443648,\n        1280: 2097152,\n        1536: 2097160,\n        1792: 268435456,\n        2048: 0,\n        2304: 268443656,\n        2560: 2105344,\n        2816: 8,\n        3072: 270532616,\n        3328: 2105352,\n        3584: 8200,\n        3840: 270540800,\n        128: 270532608,\n        384: 270540808,\n        640: 8,\n        896: 2097152,\n        1152: 2105352,\n        1408: 268435464,\n        1664: 268443648,\n        1920: 8200,\n        2176: 2097160,\n        2432: 8192,\n        2688: 268443656,\n        2944: 270532616,\n        3200: 0,\n        3456: 270540800,\n        3712: 2105344,\n        3968: 268435456,\n        4096: 268443648,\n        4352: 270532616,\n        4608: 270540808,\n        4864: 8200,\n        5120: 2097152,\n        5376: 268435456,\n        5632: 268435464,\n        5888: 2105344,\n        6144: 2105352,\n        6400: 0,\n        6656: 8,\n        6912: 270532608,\n        7168: 8192,\n        7424: 268443656,\n        7680: 270540800,\n        7936: 2097160,\n        4224: 8,\n        4480: 2105344,\n        4736: 2097152,\n        4992: 268435464,\n        5248: 268443648,\n        5504: 8200,\n        5760: 270540808,\n        6016: 270532608,\n        6272: 270540800,\n        6528: 270532616,\n        6784: 8192,\n        7040: 2105352,\n        7296: 2097160,\n        7552: 0,\n        7808: 268435456,\n        8064: 268443656\n      },\n      {\n        \"0\": 1048576,\n        16: 33555457,\n        32: 1024,\n        48: 1049601,\n        64: 34604033,\n        80: 0,\n        96: 1,\n        112: 34603009,\n        128: 33555456,\n        144: 1048577,\n        160: 33554433,\n        176: 34604032,\n        192: 34603008,\n        208: 1025,\n        224: 1049600,\n        240: 33554432,\n        8: 34603009,\n        24: 0,\n        40: 33555457,\n        56: 34604032,\n        72: 1048576,\n        88: 33554433,\n        104: 33554432,\n        120: 1025,\n        136: 1049601,\n        152: 33555456,\n        168: 34603008,\n        184: 1048577,\n        200: 1024,\n        216: 34604033,\n        232: 1,\n        248: 1049600,\n        256: 33554432,\n        272: 1048576,\n        288: 33555457,\n        304: 34603009,\n        320: 1048577,\n        336: 33555456,\n        352: 34604032,\n        368: 1049601,\n        384: 1025,\n        400: 34604033,\n        416: 1049600,\n        432: 1,\n        448: 0,\n        464: 34603008,\n        480: 33554433,\n        496: 1024,\n        264: 1049600,\n        280: 33555457,\n        296: 34603009,\n        312: 1,\n        328: 33554432,\n        344: 1048576,\n        360: 1025,\n        376: 34604032,\n        392: 33554433,\n        408: 34603008,\n        424: 0,\n        440: 34604033,\n        456: 1049601,\n        472: 1024,\n        488: 33555456,\n        504: 1048577\n      },\n      {\n        \"0\": 134219808,\n        1: 131072,\n        2: 134217728,\n        3: 32,\n        4: 131104,\n        5: 134350880,\n        6: 134350848,\n        7: 2048,\n        8: 134348800,\n        9: 134219776,\n        10: 133120,\n        11: 134348832,\n        12: 2080,\n        13: 0,\n        14: 134217760,\n        15: 133152,\n        2147483648: 2048,\n        2147483649: 134350880,\n        2147483650: 134219808,\n        2147483651: 134217728,\n        2147483652: 134348800,\n        2147483653: 133120,\n        2147483654: 133152,\n        2147483655: 32,\n        2147483656: 134217760,\n        2147483657: 2080,\n        2147483658: 131104,\n        2147483659: 134350848,\n        2147483660: 0,\n        2147483661: 134348832,\n        2147483662: 134219776,\n        2147483663: 131072,\n        16: 133152,\n        17: 134350848,\n        18: 32,\n        19: 2048,\n        20: 134219776,\n        21: 134217760,\n        22: 134348832,\n        23: 131072,\n        24: 0,\n        25: 131104,\n        26: 134348800,\n        27: 134219808,\n        28: 134350880,\n        29: 133120,\n        30: 2080,\n        31: 134217728,\n        2147483664: 131072,\n        2147483665: 2048,\n        2147483666: 134348832,\n        2147483667: 133152,\n        2147483668: 32,\n        2147483669: 134348800,\n        2147483670: 134217728,\n        2147483671: 134219808,\n        2147483672: 134350880,\n        2147483673: 134217760,\n        2147483674: 134219776,\n        2147483675: 0,\n        2147483676: 133120,\n        2147483677: 2080,\n        2147483678: 131104,\n        2147483679: 134350848\n      }\n    ],\n    t = [\n      4160749569,\n      528482304,\n      33030144,\n      2064384,\n      129024,\n      8064,\n      504,\n      2147483679\n    ],\n    m = (g.DES = e.extend({\n      _5: function() {\n        for (var b = this._12.words, c = [], a = 0; 56 > a; a++) {\n          var f = q[a] - 1;\n          c[a] = (b[f >>> 5] >>> (31 - (f % 32))) & 1;\n        }\n        b = this._28 = [];\n        for (f = 0; 16 > f; f++) {\n          for (var d = (b[f] = []), e = r[f], a = 0; 24 > a; a++)\n            (d[(a / 6) | 0] |= c[(p[a] - 1 + e) % 28] << (31 - (a % 6))),\n              (d[4 + ((a / 6) | 0)] |=\n                c[28 + ((p[a + 24] - 1 + e) % 28)] << (31 - (a % 6)));\n          d[0] = (d[0] << 1) | (d[0] >>> 31);\n          for (a = 1; 7 > a; a++) d[a] >>>= 4 * (a - 1) + 3;\n          d[7] = (d[7] << 5) | (d[7] >>> 27);\n        }\n        c = this._29 = [];\n        for (a = 0; 16 > a; a++) c[a] = b[15 - a];\n      },\n      encryptBlock: function(b, c) {\n        this._4(b, c, this._28);\n      },\n      decryptBlock: function(b, c) {\n        this._4(b, c, this._29);\n      },\n      _4: function(b, c, a) {\n        this._1 = b[c];\n        this._0 = b[c + 1];\n        j.call(this, 4, 252645135);\n        j.call(this, 16, 65535);\n        l.call(this, 2, 858993459);\n        l.call(this, 8, 16711935);\n        j.call(this, 1, 1431655765);\n        for (var f = 0; 16 > f; f++) {\n          for (var d = a[f], e = this._1, h = this._0, g = 0, k = 0; 8 > k; k++)\n            g |= s[k][((h ^ d[k]) & t[k]) >>> 0];\n          this._1 = h;\n          this._0 = e ^ g;\n        }\n        a = this._1;\n        this._1 = this._0;\n        this._0 = a;\n        j.call(this, 1, 1431655765);\n        l.call(this, 8, 16711935);\n        l.call(this, 2, 858993459);\n        j.call(this, 16, 65535);\n        j.call(this, 4, 252645135);\n        b[c] = this._1;\n        b[c + 1] = this._0;\n      },\n      keySize: 2,\n      ivSize: 2,\n      blockSize: 2\n    }));\n  h.DES = e._6(m);\n  g = g.TripleDES = e.extend({\n    _5: function() {\n      var b = this._12.words;\n      this._17 = m.createEncryptor(n.create(b.slice(0, 2)));\n      this._21 = m.createEncryptor(n.create(b.slice(2, 4)));\n      this._23 = m.createEncryptor(n.create(b.slice(4, 6)));\n    },\n    encryptBlock: function(b, c) {\n      this._17.encryptBlock(b, c);\n      this._21.decryptBlock(b, c);\n      this._23.encryptBlock(b, c);\n    },\n    decryptBlock: function(b, c) {\n      this._23.decryptBlock(b, c);\n      this._21.encryptBlock(b, c);\n      this._17.decryptBlock(b, c);\n    },\n    keySize: 6,\n    ivSize: 2,\n    blockSize: 2\n  });\n  h.TripleDES = e._6(g);\n})();\nvar getParam = (function() {\n  var AES = {\n    encrypt: function(text) {\n      var secretkey = CryptoJS.MD5(\"cGFsbWNsaWVudA==\")\n        .toString()\n        .substr(16, 16);\n      var secretiv = CryptoJS.MD5(\"Y2xpZW50cGFsbQ==\")\n        .toString()\n        .substr(0, 16);\n      secretkey = CryptoJS.enc.Utf8.parse(secretkey);\n      secretiv = CryptoJS.enc.Utf8.parse(secretiv);\n      var result = CryptoJS.AES.encrypt(text, secretkey, {\n        iv: secretiv,\n        mode: CryptoJS.mode.CBC,\n        padding: CryptoJS.pad.Pkcs7\n      });\n      return result.toString();\n    }\n  };\n  var DES = {\n    encrypt: function(text) {\n      var secretkey = CryptoJS.MD5(\"emhlbnFpcGFsbQ==\")\n          .toString()\n          .substr(0, 16);\n      var secretiv = CryptoJS.MD5(\"emhlbnFp\")\n          .toString()\n          .substr(24, 8);\n      secretkey = CryptoJS.enc.Utf8.parse(secretkey);\n      secretiv = CryptoJS.enc.Utf8.parse(secretiv);\n      var result = CryptoJS.DES.encrypt(text, secretkey, {\n        iv: secretiv,\n        mode: CryptoJS.mode.CBC,\n        padding: CryptoJS.pad.Pkcs7\n      });\n      return result.toString();\n    },\n    decrypt: function(text) {\n      var secretkey = CryptoJS.MD5(\"emhlbnFpcGFsbQ==\")\n          .toString()\n          .substr(0, 16);\n      var secretiv = CryptoJS.MD5(\"emhlbnFp\")\n          .toString()\n          .substr(24, 8);\n      secretkey = CryptoJS.enc.Utf8.parse(secretkey);\n      secretiv = CryptoJS.enc.Utf8.parse(secretiv);\n      var result = CryptoJS.DES.decrypt(text, secretkey, {\n        iv: secretiv,\n        mode: CryptoJS.mode.CBC,\n        padding: CryptoJS.pad.Pkcs7\n      });\n      return result.toString(CryptoJS.enc.Utf8);\n    }\n  };\n  function ObjectSort(obj) {\n    var newObject = {};\n    Object.keys(obj)\n      .sort()\n      .map(function(key) {\n        newObject[key] = obj[key];\n      });\n    return newObject;\n  }\n  function MyEncode(str) {\n    var arr = akb33.split('')\n    var b = new Base64;\n    arr.forEach(times => {\n      switch(times) {\n        case \"1\":\n          str = AES.encrypt(str)\n          break;\n        case \"2\":\n          str = DES.encrypt(str)\n          break;\n        case \"3\":\n          str = b.encode(str)\n          break;\n      }\n    })\n    return str;\n  }\n\n  return function(method, obj) {\n    var appId = \"4f0e3a273d547ce6b7147bfa7ceb4b6e\";\n    var timestamp = new Date().getTime();\n    var need = {\n      appId: appId,\n      method: method,\n      timestamp: timestamp,\n      clienttype: \"WEB\",\n      object: obj,\n      secret: hex_md5(appId + method + timestamp + \"WEB\" + obj)\n    };\n    return AES.encrypt(JSON.stringify(need));\n  };\n})();\nvar decryptData = (function() {\n  var akb33 = \"32223\";\n  var akb34 = \"N4EDAQpO2ejqgCoX\";\n  var akb35 = \"=qoKNLgdAjJbU8zx\";\n  var akb36 = \"mAkJqt8coXQ96zML\";\n  var akb48 = \"t4ABRmeN\"\n  var DES = {\n    encrypt: function(text) {\n      var secretkey = (CryptoJS.MD5(akb36).toString()).substr(0, 16);\n      var secretiv = (CryptoJS.MD5(akb48).toString()).substr(24, 8);\n      secretkey = CryptoJS.enc.Utf8.parse(secretkey);\n      secretiv = CryptoJS.enc.Utf8.parse(secretiv);\n      var result = CryptoJS.DES.encrypt(text, secretkey, {\n        iv: secretiv,\n        mode: CryptoJS.mode.CBC,\n        padding: CryptoJS.pad.Pkcs7\n      });\n      return result.toString()\n    },\n    decrypt: function(text) {\n      var secretkey = (CryptoJS.MD5(akb36).toString()).substr(0, 16);\n      var secretiv = (CryptoJS.MD5(akb48).toString()).substr(24, 8);\n      secretkey = CryptoJS.enc.Utf8.parse(secretkey);\n      secretiv = CryptoJS.enc.Utf8.parse(secretiv);\n      var result = CryptoJS.DES.decrypt(text, secretkey, {\n        iv: secretiv,\n        mode: CryptoJS.mode.CBC,\n        padding: CryptoJS.pad.Pkcs7\n      });\n      return result.toString(CryptoJS.enc.Utf8)\n    }\n  };\n  var AES = {\n    encrypt: function(text) {\n      var secretkey = (CryptoJS.MD5(akb34).toString()).substr(16, 16);\n      var secretiv = (CryptoJS.MD5(akb35).toString()).substr(0, 16);\n      secretkey = CryptoJS.enc.Utf8.parse(secretkey);\n      secretiv = CryptoJS.enc.Utf8.parse(secretiv);\n      var result = CryptoJS.AES.encrypt(text, secretkey, {\n        iv: secretiv,\n        mode: CryptoJS.mode.CBC,\n        padding: CryptoJS.pad.Pkcs7\n      });\n      return result.toString()\n    },\n    decrypt: function(text) {\n      var secretkey = (CryptoJS.MD5(akb34).toString()).substr(16, 16);\n      var secretiv = (CryptoJS.MD5(akb35).toString()).substr(0, 16);\n      secretkey = CryptoJS.enc.Utf8.parse(secretkey);\n      secretiv = CryptoJS.enc.Utf8.parse(secretiv);\n      var result = CryptoJS.AES.decrypt(text, secretkey, {\n        iv: secretiv,\n        mode: CryptoJS.mode.CBC,\n        padding: CryptoJS.pad.Pkcs7\n      });\n      return result.toString(CryptoJS.enc.Utf8)\n    },\n  };\n\n  function MyDecode(str, nopop) {\n    var arr = akb33.split('').reverse()\n    var b = new Base64;\n    arr.forEach(times => {\n      switch(times) {\n        case \"1\":\n          str = AES.decrypt(str)\n          break;\n        case \"2\":\n          str = DES.decrypt(str)\n          break;\n        case \"3\":\n          str = b.decode(str)\n          break;\n      }\n    })\n    if (!nopop) {\n      str = b.encode(str)\n    }\n    return str;\n  }\n\n  return function(data) {\n    return MyDecode(data)\n  }\n})();\n\nvar AES = {\n  encrypt: function(text) {\n    var secretkey = CryptoJS.MD5(\"cGFsbWNsaWVudA==\")\n      .toString()\n      .substr(16, 16);\n    var secretiv = CryptoJS.MD5(\"Y2xpZW50cGFsbQ==\")\n      .toString()\n      .substr(0, 16);\n    secretkey = CryptoJS.enc.Utf8.parse(secretkey);\n    secretiv = CryptoJS.enc.Utf8.parse(secretiv);\n    var result = CryptoJS.AES.encrypt(text, secretkey, {\n      iv: secretiv,\n      mode: CryptoJS.mode.CBC,\n      padding: CryptoJS.pad.Pkcs7\n    });\n    return result.toString();\n  },\n  decrypt: function(text) {\n    var secretkey = CryptoJS.MD5(\"cGFsbXNlcnZlcg==\")\n      .toString()\n      .substr(16, 16);\n    var secretiv = CryptoJS.MD5(\"c2VydmVycGFsbQ==\")\n      .toString()\n      .substr(0, 16);\n    secretkey = CryptoJS.enc.Utf8.parse(secretkey);\n    secretiv = CryptoJS.enc.Utf8.parse(secretiv);\n    var result = CryptoJS.AES.decrypt(text, secretkey, {\n      iv: secretiv,\n      mode: CryptoJS.mode.CBC,\n      padding: CryptoJS.pad.Pkcs7\n    });\n    return result.toString(CryptoJS.enc.Utf8);\n  }\n};\n\nvar DES = {\n  encrypt: function(text) {\n    var secretkey = CryptoJS.MD5(\"emhlbnFpcGFsbQ==\")\n        .toString()\n        .substr(0, 16);\n    var secretiv = CryptoJS.MD5(\"emhlbnFp\")\n        .toString()\n        .substr(24, 8);\n    secretkey = CryptoJS.enc.Utf8.parse(secretkey);\n    secretiv = CryptoJS.enc.Utf8.parse(secretiv);\n    var result = CryptoJS.DES.encrypt(text, secretkey, {\n      iv: secretiv,\n      mode: CryptoJS.mode.CBC,\n      padding: CryptoJS.pad.Pkcs7\n    });\n    return result.toString();\n  },\n  decrypt: function(text) {\n    var secretkey = CryptoJS.MD5(\"emhlbnFpcGFsbQ==\")\n        .toString()\n        .substr(0, 16);\n    var secretiv = CryptoJS.MD5(\"emhlbnFp\")\n        .toString()\n        .substr(24, 8);\n    secretkey = CryptoJS.enc.Utf8.parse(secretkey);\n    secretiv = CryptoJS.enc.Utf8.parse(secretiv);\n    var result = CryptoJS.DES.decrypt(text, secretkey, {\n      iv: secretiv,\n      mode: CryptoJS.mode.CBC,\n      padding: CryptoJS.pad.Pkcs7\n    });\n    return result.toString(CryptoJS.enc.Utf8);\n  }\n};\n\nvar b = new Base64();\n\n\n\nfunction hex_md5(a) {\n  return binl2hex(core_md5(str2binl(a), a.length * chrsz));\n}\n\nfunction b64_md5(a) {\n  return binl2b64(core_md5(str2binl(a), a.length * chrsz));\n}\n\nfunction str_md5(a) {\n  return binl2str(core_md5(str2binl(a), a.length * chrsz));\n}\n\nfunction hex_hmac_md5(a, b) {\n  return binl2hex(core_hmac_md5(a, b));\n}\n\nfunction b64_hmac_md5(a, b) {\n  return binl2b64(core_hmac_md5(a, b));\n}\n\nfunction str_hmac_md5(a, b) {\n  return binl2str(core_hmac_md5(a, b));\n}\n\nfunction md5_vm_test() {\n  return \"900150983cd24fb0d6963f7d28e17f72\" == hex_md5(\"abc\");\n}\n\nfunction core_md5(a, b) {\n  var c, d, e, f, g, h, i, j, k;\n  for (\n      a[b >> 5] |= 128 << b % 32,\n          a[(((b + 64) >>> 9) << 4) + 14] = b,\n          c = 1732584193,\n          d = -271733879,\n          e = -1732584194,\n          f = 271733878,\n          g = 0;\n      g < a.length;\n      g += 16\n  )\n    (h = c),\n        (i = d),\n        (j = e),\n        (k = f),\n        (c = md5_ff(c, d, e, f, a[g + 0], 7, -680876936)),\n        (f = md5_ff(f, c, d, e, a[g + 1], 12, -389564586)),\n        (e = md5_ff(e, f, c, d, a[g + 2], 17, 606105819)),\n        (d = md5_ff(d, e, f, c, a[g + 3], 22, -1044525330)),\n        (c = md5_ff(c, d, e, f, a[g + 4], 7, -176418897)),\n        (f = md5_ff(f, c, d, e, a[g + 5], 12, 1200080426)),\n        (e = md5_ff(e, f, c, d, a[g + 6], 17, -1473231341)),\n        (d = md5_ff(d, e, f, c, a[g + 7], 22, -45705983)),\n        (c = md5_ff(c, d, e, f, a[g + 8], 7, 1770035416)),\n        (f = md5_ff(f, c, d, e, a[g + 9], 12, -1958414417)),\n        (e = md5_ff(e, f, c, d, a[g + 10], 17, -42063)),\n        (d = md5_ff(d, e, f, c, a[g + 11], 22, -1990404162)),\n        (c = md5_ff(c, d, e, f, a[g + 12], 7, 1804603682)),\n        (f = md5_ff(f, c, d, e, a[g + 13], 12, -40341101)),\n        (e = md5_ff(e, f, c, d, a[g + 14], 17, -1502002290)),\n        (d = md5_ff(d, e, f, c, a[g + 15], 22, 1236535329)),\n        (c = md5_gg(c, d, e, f, a[g + 1], 5, -165796510)),\n        (f = md5_gg(f, c, d, e, a[g + 6], 9, -1069501632)),\n        (e = md5_gg(e, f, c, d, a[g + 11], 14, 643717713)),\n        (d = md5_gg(d, e, f, c, a[g + 0], 20, -373897302)),\n        (c = md5_gg(c, d, e, f, a[g + 5], 5, -701558691)),\n        (f = md5_gg(f, c, d, e, a[g + 10], 9, 38016083)),\n        (e = md5_gg(e, f, c, d, a[g + 15], 14, -660478335)),\n        (d = md5_gg(d, e, f, c, a[g + 4], 20, -405537848)),\n        (c = md5_gg(c, d, e, f, a[g + 9], 5, 568446438)),\n        (f = md5_gg(f, c, d, e, a[g + 14], 9, -1019803690)),\n        (e = md5_gg(e, f, c, d, a[g + 3], 14, -187363961)),\n        (d = md5_gg(d, e, f, c, a[g + 8], 20, 1163531501)),\n        (c = md5_gg(c, d, e, f, a[g + 13], 5, -1444681467)),\n        (f = md5_gg(f, c, d, e, a[g + 2], 9, -51403784)),\n        (e = md5_gg(e, f, c, d, a[g + 7], 14, 1735328473)),\n        (d = md5_gg(d, e, f, c, a[g + 12], 20, -1926607734)),\n        (c = md5_hh(c, d, e, f, a[g + 5], 4, -378558)),\n        (f = md5_hh(f, c, d, e, a[g + 8], 11, -2022574463)),\n        (e = md5_hh(e, f, c, d, a[g + 11], 16, 1839030562)),\n        (d = md5_hh(d, e, f, c, a[g + 14], 23, -35309556)),\n        (c = md5_hh(c, d, e, f, a[g + 1], 4, -1530992060)),\n        (f = md5_hh(f, c, d, e, a[g + 4], 11, 1272893353)),\n        (e = md5_hh(e, f, c, d, a[g + 7], 16, -155497632)),\n        (d = md5_hh(d, e, f, c, a[g + 10], 23, -1094730640)),\n        (c = md5_hh(c, d, e, f, a[g + 13], 4, 681279174)),\n        (f = md5_hh(f, c, d, e, a[g + 0], 11, -358537222)),\n        (e = md5_hh(e, f, c, d, a[g + 3], 16, -722521979)),\n        (d = md5_hh(d, e, f, c, a[g + 6], 23, 76029189)),\n        (c = md5_hh(c, d, e, f, a[g + 9], 4, -640364487)),\n        (f = md5_hh(f, c, d, e, a[g + 12], 11, -421815835)),\n        (e = md5_hh(e, f, c, d, a[g + 15], 16, 530742520)),\n        (d = md5_hh(d, e, f, c, a[g + 2], 23, -995338651)),\n        (c = md5_ii(c, d, e, f, a[g + 0], 6, -198630844)),\n        (f = md5_ii(f, c, d, e, a[g + 7], 10, 1126891415)),\n        (e = md5_ii(e, f, c, d, a[g + 14], 15, -1416354905)),\n        (d = md5_ii(d, e, f, c, a[g + 5], 21, -57434055)),\n        (c = md5_ii(c, d, e, f, a[g + 12], 6, 1700485571)),\n        (f = md5_ii(f, c, d, e, a[g + 3], 10, -1894986606)),\n        (e = md5_ii(e, f, c, d, a[g + 10], 15, -1051523)),\n        (d = md5_ii(d, e, f, c, a[g + 1], 21, -2054922799)),\n        (c = md5_ii(c, d, e, f, a[g + 8], 6, 1873313359)),\n        (f = md5_ii(f, c, d, e, a[g + 15], 10, -30611744)),\n        (e = md5_ii(e, f, c, d, a[g + 6], 15, -1560198380)),\n        (d = md5_ii(d, e, f, c, a[g + 13], 21, 1309151649)),\n        (c = md5_ii(c, d, e, f, a[g + 4], 6, -145523070)),\n        (f = md5_ii(f, c, d, e, a[g + 11], 10, -1120210379)),\n        (e = md5_ii(e, f, c, d, a[g + 2], 15, 718787259)),\n        (d = md5_ii(d, e, f, c, a[g + 9], 21, -343485551)),\n        (c = safe_add(c, h)),\n        (d = safe_add(d, i)),\n        (e = safe_add(e, j)),\n        (f = safe_add(f, k));\n  return Array(c, d, e, f);\n}\n\nfunction md5_cmn(a, b, c, d, e, f) {\n  return safe_add(bit_rol(safe_add(safe_add(b, a), safe_add(d, f)), e), c);\n}\n\nfunction md5_ff(a, b, c, d, e, f, g) {\n  return md5_cmn((b & c) | (~b & d), a, b, e, f, g);\n}\n\nfunction md5_gg(a, b, c, d, e, f, g) {\n  return md5_cmn((b & d) | (c & ~d), a, b, e, f, g);\n}\n\nfunction md5_hh(a, b, c, d, e, f, g) {\n  return md5_cmn(b ^ c ^ d, a, b, e, f, g);\n}\n\nfunction md5_ii(a, b, c, d, e, f, g) {\n  return md5_cmn(c ^ (b | ~d), a, b, e, f, g);\n}\n\nfunction core_hmac_md5(a, b) {\n  var d,\n      e,\n      f,\n      g,\n      c = str2binl(a);\n  for (\n      c.length > 16 && (c = core_md5(c, a.length * chrsz)),\n          d = Array(16),\n          e = Array(16),\n          f = 0;\n      16 > f;\n      f++\n  )\n    (d[f] = 909522486 ^ c[f]), (e[f] = 1549556828 ^ c[f]);\n  return (\n      (g = core_md5(d.concat(str2binl(b)), 512 + b.length * chrsz)),\n          core_md5(e.concat(g), 640)\n  );\n}\n\nfunction safe_add(a, b) {\n  var c = (65535 & a) + (65535 & b),\n      d = (a >> 16) + (b >> 16) + (c >> 16);\n  return (d << 16) | (65535 & c);\n}\n\nfunction bit_rol(a, b) {\n  return (a << b) | (a >>> (32 - b));\n}\n\nfunction str2binl(a) {\n  var d,\n      b = Array(),\n      c = (1 << chrsz) - 1;\n  for (d = 0; d < a.length * chrsz; d += chrsz)\n    b[d >> 5] |= (a.charCodeAt(d / chrsz) & c) << d % 32;\n  return b;\n}\n\nfunction binl2str(a) {\n  var d,\n      b = \"\",\n      c = (1 << chrsz) - 1;\n  for (d = 0; d < 32 * a.length; d += chrsz)\n    b += String.fromCharCode((a[d >> 5] >>> d % 32) & c);\n  return b;\n}\n\nfunction binl2hex(a) {\n  var d,\n      b = hexcase ? \"0123456789ABCDEF\" : \"0123456789abcdef\",\n      c = \"\";\n  for (d = 0; d < 4 * a.length; d++)\n    c +=\n        b.charAt(15 & (a[d >> 2] >> (8 * (d % 4) + 4))) +\n        b.charAt(15 & (a[d >> 2] >> (8 * (d % 4))));\n  return c;\n}\n\nfunction binl2b64(a) {\n  var d,\n      e,\n      f,\n      b = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",\n      c = \"\";\n  for (d = 0; d < 4 * a.length; d += 3)\n    for (\n        e =\n            ((255 & (a[d >> 2] >> (8 * (d % 4)))) << 16) |\n            ((255 & (a[(d + 1) >> 2] >> (8 * ((d + 1) % 4)))) << 8) |\n            (255 & (a[(d + 2) >> 2] >> (8 * ((d + 2) % 4)))),\n            f = 0;\n        4 > f;\n        f++\n    )\n      c +=\n          8 * d + 6 * f > 32 * a.length\n              ? b64pad\n              : b.charAt(63 & (e >> (6 * (3 - f))));\n  return c;\n}\n\nfunction encode_param(a) {\n  var b = new Base64();\n  var akb33 = \"32223\";\n  var akb34 = \"N4EDAQpO2ejqgCoX\";\n  var akb35 = \"=qoKNLgdAjJbU8zx\";\n  var akb36 = \"mAkJqt8coXQ96zML\";\n  var akb48 = \"t4ABRmeN\"\n  var CryptoJS = CryptoJS || function(h, r) {\n    var k = {},\n        l = k.lib = {},\n        n = function() {},\n        f = l.Base = {\n          extend: function(a) {\n            n.prototype = this;\n            var b = new n;\n            a && b.mixIn(a);\n            b.hasOwnProperty(\"init\") || (b.init = function() {\n              b.s.init.apply(this, arguments)\n            });\n            b.init.prototype = b;\n            b.s = this;\n            return b\n          },\n          create: function() {\n            var a = this.extend();\n            a.init.apply(a, arguments);\n            return a\n          },\n          init: function() {},\n          mixIn: function(a) {\n            for (var b in a) a.hasOwnProperty(b) && (this[b] = a[b]);\n            a.hasOwnProperty(\"toString\") && (this.toString = a.toString)\n          },\n          clone: function() {\n            return this.init.prototype.extend(this)\n          }\n        },\n        j = l.WordArray = f.extend({\n          init: function(a, b) {\n            a = this.words = a || [];\n            this.sigBytes = b != r ? b : 4 * a.length\n          },\n          toString: function(a) {\n            return (a || s).stringify(this)\n          },\n          concat: function(a) {\n            var b = this.words,\n                d = a.words,\n                c = this.sigBytes;\n            a = a.sigBytes;\n            this.clamp();\n            if (c % 4)\n              for (var e = 0; e < a; e++) b[c + e >>> 2] |= (d[e >>> 2] >>> 24 - 8 * (e % 4) & 255) << 24 - 8 * ((c + e) % 4);\n            else if (65535 < d.length)\n              for (e = 0; e < a; e += 4) b[c + e >>> 2] = d[e >>> 2];\n            else b.push.apply(b, d);\n            this.sigBytes += a;\n            return this\n          },\n          clamp: function() {\n            var a = this.words,\n                b = this.sigBytes;\n            a[b >>> 2] &= 4294967295 << 32 - 8 * (b % 4);\n            a.length = h.ceil(b / 4)\n          },\n          clone: function() {\n            var a = f.clone.call(this);\n            a.words = this.words.slice(0);\n            return a\n          },\n          random: function(a) {\n            for (var b = [], d = 0; d < a; d += 4) b.push(4294967296 * h.random() | 0);\n            return new j.init(b, a)\n          }\n        }),\n        m = k.enc = {},\n        s = m.Hex = {\n          stringify: function(a) {\n            var b = a.words;\n            a = a.sigBytes;\n            for (var d = [], c = 0; c < a; c++) {\n              var e = b[c >>> 2] >>> 24 - 8 * (c % 4) & 255;\n              d.push((e >>> 4).toString(16));\n              d.push((e & 15).toString(16))\n            }\n            return d.join(\"\")\n          },\n          parse: function(a) {\n            for (var b = a.length, d = [], c = 0; c < b; c += 2) d[c >>> 3] |= parseInt(a.substr(c, 2), 16) << 24 - 4 * (c % 8);\n            return new j.init(d, b / 2)\n          }\n        },\n        p = m.Latin1 = {\n          stringify: function(a) {\n            var b = a.words;\n            a = a.sigBytes;\n            for (var d = [], c = 0; c < a; c++) d.push(String.fromCharCode(b[c >>> 2] >>> 24 - 8 * (c % 4) & 255));\n            return d.join(\"\")\n          },\n          parse: function(a) {\n            for (var b = a.length, d = [], c = 0; c < b; c++) d[c >>> 2] |= (a.charCodeAt(c) & 255) << 24 - 8 * (c % 4);\n            return new j.init(d, b)\n          }\n        },\n        t = m.Utf8 = {\n          stringify: function(a) {\n            try {\n              return decodeURIComponent(escape(p.stringify(a)))\n            } catch (b) {\n              throw Error(\"Malformed UTF-8 data\")\n            }\n          },\n          parse: function(a) {\n            return p.parse(unescape(encodeURIComponent(a)))\n          }\n        },\n        q = l.BufferedBlockAlgorithm = f.extend({\n          reset: function() {\n            this._2 = new j.init;\n            this._22 = 0\n          },\n          _8: function(a) {\n            \"string\" == typeof a && (a = t.parse(a));\n            this._2.concat(a);\n            this._22 += a.sigBytes\n          },\n          _3: function(a) {\n            var b = this._2,\n                d = b.words,\n                c = b.sigBytes,\n                e = this.blockSize,\n                f = c / (4 * e),\n                f = a ? h.ceil(f) : h.max((f | 0) - this._18, 0);\n            a = f * e;\n            c = h.min(4 * a, c);\n            if (a) {\n              for (var g = 0; g < a; g += e) this._20(d, g);\n              g = d.splice(0, a);\n              b.sigBytes -= c\n            }\n            return new j.init(g, c)\n          },\n          clone: function() {\n            var a = f.clone.call(this);\n            a._2 = this._2.clone();\n            return a\n          },\n          _18: 0\n        });\n    l.Hasher = q.extend({\n      cfg: f.extend(),\n      init: function(a) {\n        this.cfg = this.cfg.extend(a);\n        this.reset()\n      },\n      reset: function() {\n        q.reset.call(this);\n        this._5()\n      },\n      update: function(a) {\n        this._8(a);\n        this._3();\n        return this\n      },\n      finalize: function(a) {\n        a && this._8(a);\n        return this._9()\n      },\n      blockSize: 16,\n      _6: function(a) {\n        return function(b, d) {\n          return (new a.init(d)).finalize(b)\n        }\n      },\n      _30: function(a) {\n        return function(b, d) {\n          return (new u.HMAC.init(a, d)).finalize(b)\n        }\n      }\n    });\n    var u = k.algo = {};\n    return k\n  }(Math);\n  (function() {\n    var h = CryptoJS,\n        j = h.lib.WordArray;\n    h.enc.Base64 = {\n      stringify: function(b) {\n        var e = b.words,\n            f = b.sigBytes,\n            c = this._13;\n        b.clamp();\n        b = [];\n        for (var a = 0; a < f; a += 3)\n          for (var d = (e[a >>> 2] >>> 24 - 8 * (a % 4) & 255) << 16 | (e[a + 1 >>> 2] >>> 24 - 8 * ((a + 1) % 4) & 255) << 8 | e[a + 2 >>> 2] >>> 24 - 8 * ((a + 2) % 4) & 255, g = 0; 4 > g && a + 0.75 * g < f; g++) b.push(c.charAt(d >>> 6 * (3 - g) & 63));\n        if (e = c.charAt(64))\n          for (; b.length % 4;) b.push(e);\n        return b.join(\"\")\n      },\n      parse: function(b) {\n        var e = b.length,\n            f = this._13,\n            c = f.charAt(64);\n        c && (c = b.indexOf(c), -1 != c && (e = c));\n        for (var c = [], a = 0, d = 0; d < e; d++)\n          if (d % 4) {\n            var g = f.indexOf(b.charAt(d - 1)) << 2 * (d % 4),\n                h = f.indexOf(b.charAt(d)) >>> 6 - 2 * (d % 4);\n            c[a >>> 2] |= (g | h) << 24 - 8 * (a % 4);\n            a++\n          }\n        return j.create(c, a)\n      },\n      _13: \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"\n    }\n  })();\n  CryptoJS.lib.Cipher || function(u) {\n    var g = CryptoJS,\n        f = g.lib,\n        k = f.Base,\n        l = f.WordArray,\n        q = f.BufferedBlockAlgorithm,\n        r = g.enc.Base64,\n        v = g.algo.EvpKDF,\n        n = f.Cipher = q.extend({\n          cfg: k.extend(),\n          createEncryptor: function(a, b) {\n            return this.create(this._11, a, b)\n          },\n          createDecryptor: function(a, b) {\n            return this.create(this._25, a, b)\n          },\n          init: function(a, b, c) {\n            this.cfg = this.cfg.extend(c);\n            this._15 = a;\n            this._12 = b;\n            this.reset()\n          },\n          reset: function() {\n            q.reset.call(this);\n            this._5()\n          },\n          process: function(a) {\n            this._8(a);\n            return this._3()\n          },\n          finalize: function(a) {\n            a && this._8(a);\n            return this._9()\n          },\n          keySize: 4,\n          ivSize: 4,\n          _11: 1,\n          _25: 2,\n          _6: function(a) {\n            return {\n              encrypt: function(b, c, d) {\n                return (\"string\" == typeof c ? s : j).encrypt(a, b, c, d)\n              },\n              decrypt: function(b, c, d) {\n                return (\"string\" == typeof c ? s : j).decrypt(a, b, c, d)\n              }\n            }\n          }\n        });\n    f.StreamCipher = n.extend({\n      _9: function() {\n        return this._3(!0)\n      },\n      blockSize: 1\n    });\n    var m = g.mode = {},\n        t = function(a, b, c) {\n          var d = this._16;\n          d ? this._16 = u : d = this._19;\n          for (var e = 0; e < c; e++) a[b + e] ^= d[e]\n        },\n        h = (f.BlockCipherMode = k.extend({\n          createEncryptor: function(a, b) {\n            return this.Encryptor.create(a, b)\n          },\n          createDecryptor: function(a, b) {\n            return this.Decryptor.create(a, b)\n          },\n          init: function(a, b) {\n            this._10 = a;\n            this._16 = b\n          }\n        })).extend();\n    h.Encryptor = h.extend({\n      processBlock: function(a, b) {\n        var c = this._10,\n            d = c.blockSize;\n        t.call(this, a, b, d);\n        c.encryptBlock(a, b);\n        this._19 = a.slice(b, b + d)\n      }\n    });\n    h.Decryptor = h.extend({\n      processBlock: function(a, b) {\n        var c = this._10,\n            d = c.blockSize,\n            e = a.slice(b, b + d);\n        c.decryptBlock(a, b);\n        t.call(this, a, b, d);\n        this._19 = e\n      }\n    });\n    m = m.CBC = h;\n    h = (g.pad = {}).Pkcs7 = {\n      pad: function(a, b) {\n        for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, e = [], f = 0; f < c; f += 4) e.push(d);\n        c = l.create(e, c);\n        a.concat(c)\n      },\n      unpad: function(a) {\n        a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255\n      }\n    };\n    f.BlockCipher = n.extend({\n      cfg: n.cfg.extend({\n        mode: m,\n        padding: h\n      }),\n      reset: function() {\n        n.reset.call(this);\n        var a = this.cfg,\n            b = a.iv,\n            a = a.mode;\n        if (this._15 == this._11) var c = a.createEncryptor;\n        else c = a.createDecryptor, this._18 = 1;\n        this._31 = c.call(a, this, b && b.words)\n      },\n      _20: function(a, b) {\n        this._31.processBlock(a, b)\n      },\n      _9: function() {\n        var a = this.cfg.padding;\n        if (this._15 == this._11) {\n          a.pad(this._2, this.blockSize);\n          var b = this._3(!0)\n        } else b = this._3(!0), a.unpad(b);\n        return b\n      },\n      blockSize: 4\n    });\n    var p = f.CipherParams = k.extend({\n          init: function(a) {\n            this.mixIn(a)\n          },\n          toString: function(a) {\n            return (a || this.formatter).stringify(this)\n          }\n        }),\n        m = (g.format = {}).OpenSSL = {\n          stringify: function(a) {\n            var b = a.ciphertext;\n            a = a.salt;\n            return (a ? l.create([1398893684, 1701076831]).concat(a).concat(b) : b).toString(r)\n          },\n          parse: function(a) {\n            a = r.parse(a);\n            var b = a.words;\n            if (1398893684 == b[0] && 1701076831 == b[1]) {\n              var c = l.create(b.slice(2, 4));\n              b.splice(0, 4);\n              a.sigBytes -= 16\n            }\n            return p.create({\n              ciphertext: a,\n              salt: c\n            })\n          }\n        },\n        j = f.SerializableCipher = k.extend({\n          cfg: k.extend({\n            format: m\n          }),\n          encrypt: function(a, b, c, d) {\n            d = this.cfg.extend(d);\n            var e = a.createEncryptor(c, d);\n            b = e.finalize(b);\n            e = e.cfg;\n            return p.create({\n              ciphertext: b,\n              key: c,\n              iv: e.iv,\n              algorithm: a,\n              mode: e.mode,\n              padding: e.padding,\n              blockSize: a.blockSize,\n              formatter: d.format\n            })\n          },\n          decrypt: function(a, b, c, d) {\n            d = this.cfg.extend(d);\n            b = this._14(b, d.format);\n            return a.createDecryptor(c, d).finalize(b.ciphertext)\n          },\n          _14: function(a, b) {\n            return \"string\" == typeof a ? b.parse(a, this) : a\n          }\n        }),\n        g = (g.kdf = {}).OpenSSL = {\n          execute: function(a, b, c, d) {\n            d || (d = l.random(8));\n            a = v.create({\n              keySize: b + c\n            }).compute(a, d);\n            c = l.create(a.words.slice(b), 4 * c);\n            a.sigBytes = 4 * b;\n            return p.create({\n              key: a,\n              iv: c,\n              salt: d\n            })\n          }\n        },\n        s = f.PasswordBasedCipher = j.extend({\n          cfg: j.cfg.extend({\n            kdf: g\n          }),\n          encrypt: function(a, b, c, d) {\n            d = this.cfg.extend(d);\n            c = d.kdf.execute(c, a.keySize, a.ivSize);\n            d.iv = c.iv;\n            a = j.encrypt.call(this, a, b, c.key, d);\n            a.mixIn(c);\n            return a\n          },\n          decrypt: function(a, b, c, d) {\n            d = this.cfg.extend(d);\n            b = this._14(b, d.format);\n            c = d.kdf.execute(c, a.keySize, a.ivSize, b.salt);\n            d.iv = c.iv;\n            return j.decrypt.call(this, a, b, c.key, d)\n          }\n        })\n  }();\n  CryptoJS.mode.ECB = function() {\n    var a = CryptoJS.lib.BlockCipherMode.extend();\n    a.Encryptor = a.extend({\n      processBlock: function(a, b) {\n        this._10.encryptBlock(a, b)\n      }\n    });\n    a.Decryptor = a.extend({\n      processBlock: function(a, b) {\n        this._10.decryptBlock(a, b)\n      }\n    });\n    return a\n  }();\n  (function(E) {\n    function h(a, f, g, j, p, h, k) {\n      a = a + (f & g | ~f & j) + p + k;\n      return (a << h | a >>> 32 - h) + f\n    }\n\n    function k(a, f, g, j, p, h, k) {\n      a = a + (f & j | g & ~j) + p + k;\n      return (a << h | a >>> 32 - h) + f\n    }\n\n    function l(a, f, g, j, h, k, l) {\n      a = a + (f ^ g ^ j) + h + l;\n      return (a << k | a >>> 32 - k) + f\n    }\n\n    function n(a, f, g, j, h, k, l) {\n      a = a + (g ^ (f | ~j)) + h + l;\n      return (a << k | a >>> 32 - k) + f\n    }\n    for (var r = CryptoJS, q = r.lib, F = q.WordArray, s = q.Hasher, q = r.algo, a = [], t = 0; 64 > t; t++) a[t] = 4294967296 * E.abs(E.sin(t + 1)) | 0;\n    q = q.MD5 = s.extend({\n      _5: function() {\n        this._7 = new F.init([1732584193, 4023233417, 2562383102, 271733878])\n      },\n      _20: function(m, f) {\n        for (var g = 0; 16 > g; g++) {\n          var j = f + g,\n              p = m[j];\n          m[j] = (p << 8 | p >>> 24) & 16711935 | (p << 24 | p >>> 8) & 4278255360\n        }\n        var g = this._7.words,\n            j = m[f + 0],\n            p = m[f + 1],\n            q = m[f + 2],\n            r = m[f + 3],\n            s = m[f + 4],\n            t = m[f + 5],\n            u = m[f + 6],\n            v = m[f + 7],\n            w = m[f + 8],\n            x = m[f + 9],\n            y = m[f + 10],\n            z = m[f + 11],\n            A = m[f + 12],\n            B = m[f + 13],\n            C = m[f + 14],\n            D = m[f + 15],\n            b = g[0],\n            c = g[1],\n            d = g[2],\n            e = g[3],\n            b = h(b, c, d, e, j, 7, a[0]),\n            e = h(e, b, c, d, p, 12, a[1]),\n            d = h(d, e, b, c, q, 17, a[2]),\n            c = h(c, d, e, b, r, 22, a[3]),\n            b = h(b, c, d, e, s, 7, a[4]),\n            e = h(e, b, c, d, t, 12, a[5]),\n            d = h(d, e, b, c, u, 17, a[6]),\n            c = h(c, d, e, b, v, 22, a[7]),\n            b = h(b, c, d, e, w, 7, a[8]),\n            e = h(e, b, c, d, x, 12, a[9]),\n            d = h(d, e, b, c, y, 17, a[10]),\n            c = h(c, d, e, b, z, 22, a[11]),\n            b = h(b, c, d, e, A, 7, a[12]),\n            e = h(e, b, c, d, B, 12, a[13]),\n            d = h(d, e, b, c, C, 17, a[14]),\n            c = h(c, d, e, b, D, 22, a[15]),\n            b = k(b, c, d, e, p, 5, a[16]),\n            e = k(e, b, c, d, u, 9, a[17]),\n            d = k(d, e, b, c, z, 14, a[18]),\n            c = k(c, d, e, b, j, 20, a[19]),\n            b = k(b, c, d, e, t, 5, a[20]),\n            e = k(e, b, c, d, y, 9, a[21]),\n            d = k(d, e, b, c, D, 14, a[22]),\n            c = k(c, d, e, b, s, 20, a[23]),\n            b = k(b, c, d, e, x, 5, a[24]),\n            e = k(e, b, c, d, C, 9, a[25]),\n            d = k(d, e, b, c, r, 14, a[26]),\n            c = k(c, d, e, b, w, 20, a[27]),\n            b = k(b, c, d, e, B, 5, a[28]),\n            e = k(e, b, c, d, q, 9, a[29]),\n            d = k(d, e, b, c, v, 14, a[30]),\n            c = k(c, d, e, b, A, 20, a[31]),\n            b = l(b, c, d, e, t, 4, a[32]),\n            e = l(e, b, c, d, w, 11, a[33]),\n            d = l(d, e, b, c, z, 16, a[34]),\n            c = l(c, d, e, b, C, 23, a[35]),\n            b = l(b, c, d, e, p, 4, a[36]),\n            e = l(e, b, c, d, s, 11, a[37]),\n            d = l(d, e, b, c, v, 16, a[38]),\n            c = l(c, d, e, b, y, 23, a[39]),\n            b = l(b, c, d, e, B, 4, a[40]),\n            e = l(e, b, c, d, j, 11, a[41]),\n            d = l(d, e, b, c, r, 16, a[42]),\n            c = l(c, d, e, b, u, 23, a[43]),\n            b = l(b, c, d, e, x, 4, a[44]),\n            e = l(e, b, c, d, A, 11, a[45]),\n            d = l(d, e, b, c, D, 16, a[46]),\n            c = l(c, d, e, b, q, 23, a[47]),\n            b = n(b, c, d, e, j, 6, a[48]),\n            e = n(e, b, c, d, v, 10, a[49]),\n            d = n(d, e, b, c, C, 15, a[50]),\n            c = n(c, d, e, b, t, 21, a[51]),\n            b = n(b, c, d, e, A, 6, a[52]),\n            e = n(e, b, c, d, r, 10, a[53]),\n            d = n(d, e, b, c, y, 15, a[54]),\n            c = n(c, d, e, b, p, 21, a[55]),\n            b = n(b, c, d, e, w, 6, a[56]),\n            e = n(e, b, c, d, D, 10, a[57]),\n            d = n(d, e, b, c, u, 15, a[58]),\n            c = n(c, d, e, b, B, 21, a[59]),\n            b = n(b, c, d, e, s, 6, a[60]),\n            e = n(e, b, c, d, z, 10, a[61]),\n            d = n(d, e, b, c, q, 15, a[62]),\n            c = n(c, d, e, b, x, 21, a[63]);\n        g[0] = g[0] + b | 0;\n        g[1] = g[1] + c | 0;\n        g[2] = g[2] + d | 0;\n        g[3] = g[3] + e | 0\n      },\n      _9: function() {\n        var a = this._2,\n            f = a.words,\n            g = 8 * this._22,\n            j = 8 * a.sigBytes;\n        f[j >>> 5] |= 128 << 24 - j % 32;\n        var h = E.floor(g / 4294967296);\n        f[(j + 64 >>> 9 << 4) + 15] = (h << 8 | h >>> 24) & 16711935 | (h << 24 | h >>> 8) & 4278255360;\n        f[(j + 64 >>> 9 << 4) + 14] = (g << 8 | g >>> 24) & 16711935 | (g << 24 | g >>> 8) & 4278255360;\n        a.sigBytes = 4 * (f.length + 1);\n        this._3();\n        a = this._7;\n        f = a.words;\n        for (g = 0; 4 > g; g++) j = f[g], f[g] = (j << 8 | j >>> 24) & 16711935 | (j << 24 | j >>> 8) & 4278255360;\n        return a\n      },\n      clone: function() {\n        var a = s.clone.call(this);\n        a._7 = this._7.clone();\n        return a\n      }\n    });\n    r.MD5 = s._6(q);\n    r.HmacMD5 = s._30(q)\n  })(Math);\n  (function() {\n    for (var q = CryptoJS, x = q.lib.BlockCipher, r = q.algo, j = [], y = [], z = [], A = [], B = [], C = [], s = [], u = [], v = [], w = [], g = [], k = 0; 256 > k; k++) g[k] = 128 > k ? k << 1 : k << 1 ^ 283;\n    for (var n = 0, l = 0, k = 0; 256 > k; k++) {\n      var f = l ^ l << 1 ^ l << 2 ^ l << 3 ^ l << 4,\n          f = f >>> 8 ^ f & 255 ^ 99;\n      j[n] = f;\n      y[f] = n;\n      var t = g[n],\n          D = g[t],\n          E = g[D],\n          b = 257 * g[f] ^ 16843008 * f;\n      z[n] = b << 24 | b >>> 8;\n      A[n] = b << 16 | b >>> 16;\n      B[n] = b << 8 | b >>> 24;\n      C[n] = b;\n      b = 16843009 * E ^ 65537 * D ^ 257 * t ^ 16843008 * n;\n      s[f] = b << 24 | b >>> 8;\n      u[f] = b << 16 | b >>> 16;\n      v[f] = b << 8 | b >>> 24;\n      w[f] = b;\n      n ? (n = t ^ g[g[g[E ^ t]]], l ^= g[g[l]]) : n = l = 1\n    }\n    var F = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54],\n        r = r.AES = x.extend({\n          _5: function() {\n            for (var c = this._12, e = c.words, a = c.sigBytes / 4, c = 4 * ((this._26 = a + 6) + 1), b = this._27 = [], h = 0; h < c; h++)\n              if (h < a) b[h] = e[h];\n              else {\n                var d = b[h - 1];\n                h % a ? 6 < a && 4 == h % a && (d = j[d >>> 24] << 24 | j[d >>> 16 & 255] << 16 | j[d >>> 8 & 255] << 8 | j[d & 255]) : (d = d << 8 | d >>> 24, d = j[d >>> 24] << 24 | j[d >>> 16 & 255] << 16 | j[d >>> 8 & 255] << 8 | j[d & 255], d ^= F[h / a | 0] << 24);\n                b[h] = b[h - a] ^ d\n              }\n            e = this._24 = [];\n            for (a = 0; a < c; a++) h = c - a, d = a % 4 ? b[h] : b[h - 4], e[a] = 4 > a || 4 >= h ? d : s[j[d >>> 24]] ^ u[j[d >>> 16 & 255]] ^ v[j[d >>> 8 & 255]] ^ w[j[d & 255]]\n          },\n          encryptBlock: function(c, e) {\n            this._4(c, e, this._27, z, A, B, C, j)\n          },\n          decryptBlock: function(c, e) {\n            var a = c[e + 1];\n            c[e + 1] = c[e + 3];\n            c[e + 3] = a;\n            this._4(c, e, this._24, s, u, v, w, y);\n            a = c[e + 1];\n            c[e + 1] = c[e + 3];\n            c[e + 3] = a\n          },\n          _4: function(c, e, a, b, h, d, j, m) {\n            for (var n = this._26, f = c[e] ^ a[0], g = c[e + 1] ^ a[1], k = c[e + 2] ^ a[2], p = c[e + 3] ^ a[3], l = 4, t = 1; t < n; t++) var q = b[f >>> 24] ^ h[g >>> 16 & 255] ^ d[k >>> 8 & 255] ^ j[p & 255] ^ a[l++],\n                r = b[g >>> 24] ^ h[k >>> 16 & 255] ^ d[p >>> 8 & 255] ^ j[f & 255] ^ a[l++],\n                s = b[k >>> 24] ^ h[p >>> 16 & 255] ^ d[f >>> 8 & 255] ^ j[g & 255] ^ a[l++],\n                p = b[p >>> 24] ^ h[f >>> 16 & 255] ^ d[g >>> 8 & 255] ^ j[k & 255] ^ a[l++],\n                f = q,\n                g = r,\n                k = s;\n            q = (m[f >>> 24] << 24 | m[g >>> 16 & 255] << 16 | m[k >>> 8 & 255] << 8 | m[p & 255]) ^ a[l++];\n            r = (m[g >>> 24] << 24 | m[k >>> 16 & 255] << 16 | m[p >>> 8 & 255] << 8 | m[f & 255]) ^ a[l++];\n            s = (m[k >>> 24] << 24 | m[p >>> 16 & 255] << 16 | m[f >>> 8 & 255] << 8 | m[g & 255]) ^ a[l++];\n            p = (m[p >>> 24] << 24 | m[f >>> 16 & 255] << 16 | m[g >>> 8 & 255] << 8 | m[k & 255]) ^ a[l++];\n            c[e] = q;\n            c[e + 1] = r;\n            c[e + 2] = s;\n            c[e + 3] = p\n          },\n          keySize: 8\n        });\n    q.AES = x._6(r)\n  })();\n  (function() {\n    function j(b, c) {\n      var a = (this._1 >>> b ^ this._0) & c;\n      this._0 ^= a;\n      this._1 ^= a << b\n    }\n\n    function l(b, c) {\n      var a = (this._0 >>> b ^ this._1) & c;\n      this._1 ^= a;\n      this._0 ^= a << b\n    }\n    var h = CryptoJS,\n        e = h.lib,\n        n = e.WordArray,\n        e = e.BlockCipher,\n        g = h.algo,\n        q = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4],\n        p = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32],\n        r = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28],\n        s = [{\n          \"0\": 8421888,\n          268435456: 32768,\n          536870912: 8421378,\n          805306368: 2,\n          1073741824: 512,\n          1342177280: 8421890,\n          1610612736: 8389122,\n          1879048192: 8388608,\n          2147483648: 514,\n          2415919104: 8389120,\n          2684354560: 33280,\n          2952790016: 8421376,\n          3221225472: 32770,\n          3489660928: 8388610,\n          3758096384: 0,\n          4026531840: 33282,\n          134217728: 0,\n          402653184: 8421890,\n          671088640: 33282,\n          939524096: 32768,\n          1207959552: 8421888,\n          1476395008: 512,\n          1744830464: 8421378,\n          2013265920: 2,\n          2281701376: 8389120,\n          2550136832: 33280,\n          2818572288: 8421376,\n          3087007744: 8389122,\n          3355443200: 8388610,\n          3623878656: 32770,\n          3892314112: 514,\n          4160749568: 8388608,\n          1: 32768,\n          268435457: 2,\n          536870913: 8421888,\n          805306369: 8388608,\n          1073741825: 8421378,\n          1342177281: 33280,\n          1610612737: 512,\n          1879048193: 8389122,\n          2147483649: 8421890,\n          2415919105: 8421376,\n          2684354561: 8388610,\n          2952790017: 33282,\n          3221225473: 514,\n          3489660929: 8389120,\n          3758096385: 32770,\n          4026531841: 0,\n          134217729: 8421890,\n          402653185: 8421376,\n          671088641: 8388608,\n          939524097: 512,\n          1207959553: 32768,\n          1476395009: 8388610,\n          1744830465: 2,\n          2013265921: 33282,\n          2281701377: 32770,\n          2550136833: 8389122,\n          2818572289: 514,\n          3087007745: 8421888,\n          3355443201: 8389120,\n          3623878657: 0,\n          3892314113: 33280,\n          4160749569: 8421378\n        }, {\n          \"0\": 1074282512,\n          16777216: 16384,\n          33554432: 524288,\n          50331648: 1074266128,\n          67108864: 1073741840,\n          83886080: 1074282496,\n          100663296: 1073758208,\n          117440512: 16,\n          134217728: 540672,\n          150994944: 1073758224,\n          167772160: 1073741824,\n          184549376: 540688,\n          201326592: 524304,\n          218103808: 0,\n          234881024: 16400,\n          251658240: 1074266112,\n          8388608: 1073758208,\n          25165824: 540688,\n          41943040: 16,\n          58720256: 1073758224,\n          75497472: 1074282512,\n          92274688: 1073741824,\n          109051904: 524288,\n          125829120: 1074266128,\n          142606336: 524304,\n          159383552: 0,\n          176160768: 16384,\n          192937984: 1074266112,\n          209715200: 1073741840,\n          226492416: 540672,\n          243269632: 1074282496,\n          260046848: 16400,\n          268435456: 0,\n          285212672: 1074266128,\n          301989888: 1073758224,\n          318767104: 1074282496,\n          335544320: 1074266112,\n          352321536: 16,\n          369098752: 540688,\n          385875968: 16384,\n          402653184: 16400,\n          419430400: 524288,\n          436207616: 524304,\n          452984832: 1073741840,\n          469762048: 540672,\n          486539264: 1073758208,\n          503316480: 1073741824,\n          520093696: 1074282512,\n          276824064: 540688,\n          293601280: 524288,\n          310378496: 1074266112,\n          327155712: 16384,\n          343932928: 1073758208,\n          360710144: 1074282512,\n          377487360: 16,\n          394264576: 1073741824,\n          411041792: 1074282496,\n          427819008: 1073741840,\n          444596224: 1073758224,\n          461373440: 524304,\n          478150656: 0,\n          494927872: 16400,\n          511705088: 1074266128,\n          528482304: 540672\n        }, {\n          \"0\": 260,\n          1048576: 0,\n          2097152: 67109120,\n          3145728: 65796,\n          4194304: 65540,\n          5242880: 67108868,\n          6291456: 67174660,\n          7340032: 67174400,\n          8388608: 67108864,\n          9437184: 67174656,\n          10485760: 65792,\n          11534336: 67174404,\n          12582912: 67109124,\n          13631488: 65536,\n          14680064: 4,\n          15728640: 256,\n          524288: 67174656,\n          1572864: 67174404,\n          2621440: 0,\n          3670016: 67109120,\n          4718592: 67108868,\n          5767168: 65536,\n          6815744: 65540,\n          7864320: 260,\n          8912896: 4,\n          9961472: 256,\n          11010048: 67174400,\n          12058624: 65796,\n          13107200: 65792,\n          14155776: 67109124,\n          15204352: 67174660,\n          16252928: 67108864,\n          16777216: 67174656,\n          17825792: 65540,\n          18874368: 65536,\n          19922944: 67109120,\n          20971520: 256,\n          22020096: 67174660,\n          23068672: 67108868,\n          24117248: 0,\n          25165824: 67109124,\n          26214400: 67108864,\n          27262976: 4,\n          28311552: 65792,\n          29360128: 67174400,\n          30408704: 260,\n          31457280: 65796,\n          32505856: 67174404,\n          17301504: 67108864,\n          18350080: 260,\n          19398656: 67174656,\n          20447232: 0,\n          21495808: 65540,\n          22544384: 67109120,\n          23592960: 256,\n          24641536: 67174404,\n          25690112: 65536,\n          26738688: 67174660,\n          27787264: 65796,\n          28835840: 67108868,\n          29884416: 67109124,\n          30932992: 67174400,\n          31981568: 4,\n          33030144: 65792\n        }, {\n          \"0\": 2151682048,\n          65536: 2147487808,\n          131072: 4198464,\n          196608: 2151677952,\n          262144: 0,\n          327680: 4198400,\n          393216: 2147483712,\n          458752: 4194368,\n          524288: 2147483648,\n          589824: 4194304,\n          655360: 64,\n          720896: 2147487744,\n          786432: 2151678016,\n          851968: 4160,\n          917504: 4096,\n          983040: 2151682112,\n          32768: 2147487808,\n          98304: 64,\n          163840: 2151678016,\n          229376: 2147487744,\n          294912: 4198400,\n          360448: 2151682112,\n          425984: 0,\n          491520: 2151677952,\n          557056: 4096,\n          622592: 2151682048,\n          688128: 4194304,\n          753664: 4160,\n          819200: 2147483648,\n          884736: 4194368,\n          950272: 4198464,\n          1015808: 2147483712,\n          1048576: 4194368,\n          1114112: 4198400,\n          1179648: 2147483712,\n          1245184: 0,\n          1310720: 4160,\n          1376256: 2151678016,\n          1441792: 2151682048,\n          1507328: 2147487808,\n          1572864: 2151682112,\n          1638400: 2147483648,\n          1703936: 2151677952,\n          1769472: 4198464,\n          1835008: 2147487744,\n          1900544: 4194304,\n          1966080: 64,\n          2031616: 4096,\n          1081344: 2151677952,\n          1146880: 2151682112,\n          1212416: 0,\n          1277952: 4198400,\n          1343488: 4194368,\n          1409024: 2147483648,\n          1474560: 2147487808,\n          1540096: 64,\n          1605632: 2147483712,\n          1671168: 4096,\n          1736704: 2147487744,\n          1802240: 2151678016,\n          1867776: 4160,\n          1933312: 2151682048,\n          1998848: 4194304,\n          2064384: 4198464\n        }, {\n          \"0\": 128,\n          4096: 17039360,\n          8192: 262144,\n          12288: 536870912,\n          16384: 537133184,\n          20480: 16777344,\n          24576: 553648256,\n          28672: 262272,\n          32768: 16777216,\n          36864: 537133056,\n          40960: 536871040,\n          45056: 553910400,\n          49152: 553910272,\n          53248: 0,\n          57344: 17039488,\n          61440: 553648128,\n          2048: 17039488,\n          6144: 553648256,\n          10240: 128,\n          14336: 17039360,\n          18432: 262144,\n          22528: 537133184,\n          26624: 553910272,\n          30720: 536870912,\n          34816: 537133056,\n          38912: 0,\n          43008: 553910400,\n          47104: 16777344,\n          51200: 536871040,\n          55296: 553648128,\n          59392: 16777216,\n          63488: 262272,\n          65536: 262144,\n          69632: 128,\n          73728: 536870912,\n          77824: 553648256,\n          81920: 16777344,\n          86016: 553910272,\n          90112: 537133184,\n          94208: 16777216,\n          98304: 553910400,\n          102400: 553648128,\n          106496: 17039360,\n          110592: 537133056,\n          114688: 262272,\n          118784: 536871040,\n          122880: 0,\n          126976: 17039488,\n          67584: 553648256,\n          71680: 16777216,\n          75776: 17039360,\n          79872: 537133184,\n          83968: 536870912,\n          88064: 17039488,\n          92160: 128,\n          96256: 553910272,\n          100352: 262272,\n          104448: 553910400,\n          108544: 0,\n          112640: 553648128,\n          116736: 16777344,\n          120832: 262144,\n          124928: 537133056,\n          129024: 536871040\n        }, {\n          \"0\": 268435464,\n          256: 8192,\n          512: 270532608,\n          768: 270540808,\n          1024: 268443648,\n          1280: 2097152,\n          1536: 2097160,\n          1792: 268435456,\n          2048: 0,\n          2304: 268443656,\n          2560: 2105344,\n          2816: 8,\n          3072: 270532616,\n          3328: 2105352,\n          3584: 8200,\n          3840: 270540800,\n          128: 270532608,\n          384: 270540808,\n          640: 8,\n          896: 2097152,\n          1152: 2105352,\n          1408: 268435464,\n          1664: 268443648,\n          1920: 8200,\n          2176: 2097160,\n          2432: 8192,\n          2688: 268443656,\n          2944: 270532616,\n          3200: 0,\n          3456: 270540800,\n          3712: 2105344,\n          3968: 268435456,\n          4096: 268443648,\n          4352: 270532616,\n          4608: 270540808,\n          4864: 8200,\n          5120: 2097152,\n          5376: 268435456,\n          5632: 268435464,\n          5888: 2105344,\n          6144: 2105352,\n          6400: 0,\n          6656: 8,\n          6912: 270532608,\n          7168: 8192,\n          7424: 268443656,\n          7680: 270540800,\n          7936: 2097160,\n          4224: 8,\n          4480: 2105344,\n          4736: 2097152,\n          4992: 268435464,\n          5248: 268443648,\n          5504: 8200,\n          5760: 270540808,\n          6016: 270532608,\n          6272: 270540800,\n          6528: 270532616,\n          6784: 8192,\n          7040: 2105352,\n          7296: 2097160,\n          7552: 0,\n          7808: 268435456,\n          8064: 268443656\n        }, {\n          \"0\": 1048576,\n          16: 33555457,\n          32: 1024,\n          48: 1049601,\n          64: 34604033,\n          80: 0,\n          96: 1,\n          112: 34603009,\n          128: 33555456,\n          144: 1048577,\n          160: 33554433,\n          176: 34604032,\n          192: 34603008,\n          208: 1025,\n          224: 1049600,\n          240: 33554432,\n          8: 34603009,\n          24: 0,\n          40: 33555457,\n          56: 34604032,\n          72: 1048576,\n          88: 33554433,\n          104: 33554432,\n          120: 1025,\n          136: 1049601,\n          152: 33555456,\n          168: 34603008,\n          184: 1048577,\n          200: 1024,\n          216: 34604033,\n          232: 1,\n          248: 1049600,\n          256: 33554432,\n          272: 1048576,\n          288: 33555457,\n          304: 34603009,\n          320: 1048577,\n          336: 33555456,\n          352: 34604032,\n          368: 1049601,\n          384: 1025,\n          400: 34604033,\n          416: 1049600,\n          432: 1,\n          448: 0,\n          464: 34603008,\n          480: 33554433,\n          496: 1024,\n          264: 1049600,\n          280: 33555457,\n          296: 34603009,\n          312: 1,\n          328: 33554432,\n          344: 1048576,\n          360: 1025,\n          376: 34604032,\n          392: 33554433,\n          408: 34603008,\n          424: 0,\n          440: 34604033,\n          456: 1049601,\n          472: 1024,\n          488: 33555456,\n          504: 1048577\n        }, {\n          \"0\": 134219808,\n          1: 131072,\n          2: 134217728,\n          3: 32,\n          4: 131104,\n          5: 134350880,\n          6: 134350848,\n          7: 2048,\n          8: 134348800,\n          9: 134219776,\n          10: 133120,\n          11: 134348832,\n          12: 2080,\n          13: 0,\n          14: 134217760,\n          15: 133152,\n          2147483648: 2048,\n          2147483649: 134350880,\n          2147483650: 134219808,\n          2147483651: 134217728,\n          2147483652: 134348800,\n          2147483653: 133120,\n          2147483654: 133152,\n          2147483655: 32,\n          2147483656: 134217760,\n          2147483657: 2080,\n          2147483658: 131104,\n          2147483659: 134350848,\n          2147483660: 0,\n          2147483661: 134348832,\n          2147483662: 134219776,\n          2147483663: 131072,\n          16: 133152,\n          17: 134350848,\n          18: 32,\n          19: 2048,\n          20: 134219776,\n          21: 134217760,\n          22: 134348832,\n          23: 131072,\n          24: 0,\n          25: 131104,\n          26: 134348800,\n          27: 134219808,\n          28: 134350880,\n          29: 133120,\n          30: 2080,\n          31: 134217728,\n          2147483664: 131072,\n          2147483665: 2048,\n          2147483666: 134348832,\n          2147483667: 133152,\n          2147483668: 32,\n          2147483669: 134348800,\n          2147483670: 134217728,\n          2147483671: 134219808,\n          2147483672: 134350880,\n          2147483673: 134217760,\n          2147483674: 134219776,\n          2147483675: 0,\n          2147483676: 133120,\n          2147483677: 2080,\n          2147483678: 131104,\n          2147483679: 134350848\n        }],\n        t = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679],\n        m = g.DES = e.extend({\n          _5: function() {\n            for (var b = this._12.words, c = [], a = 0; 56 > a; a++) {\n              var f = q[a] - 1;\n              c[a] = b[f >>> 5] >>> 31 - f % 32 & 1\n            }\n            b = this._28 = [];\n            for (f = 0; 16 > f; f++) {\n              for (var d = b[f] = [], e = r[f], a = 0; 24 > a; a++) d[a / 6 | 0] |= c[(p[a] - 1 + e) % 28] << 31 - a % 6, d[4 + (a / 6 | 0)] |= c[28 + (p[a + 24] - 1 + e) % 28] << 31 - a % 6;\n              d[0] = d[0] << 1 | d[0] >>> 31;\n              for (a = 1; 7 > a; a++) d[a] >>>= 4 * (a - 1) + 3;\n              d[7] = d[7] << 5 | d[7] >>> 27\n            }\n            c = this._29 = [];\n            for (a = 0; 16 > a; a++) c[a] = b[15 - a]\n          },\n          encryptBlock: function(b, c) {\n            this._4(b, c, this._28)\n          },\n          decryptBlock: function(b, c) {\n            this._4(b, c, this._29)\n          },\n          _4: function(b, c, a) {\n            this._1 = b[c];\n            this._0 = b[c + 1];\n            j.call(this, 4, 252645135);\n            j.call(this, 16, 65535);\n            l.call(this, 2, 858993459);\n            l.call(this, 8, 16711935);\n            j.call(this, 1, 1431655765);\n            for (var f = 0; 16 > f; f++) {\n              for (var d = a[f], e = this._1, h = this._0, g = 0, k = 0; 8 > k; k++) g |= s[k][((h ^ d[k]) & t[k]) >>> 0];\n              this._1 = h;\n              this._0 = e ^ g\n            }\n            a = this._1;\n            this._1 = this._0;\n            this._0 = a;\n            j.call(this, 1, 1431655765);\n            l.call(this, 8, 16711935);\n            l.call(this, 2, 858993459);\n            j.call(this, 16, 65535);\n            j.call(this, 4, 252645135);\n            b[c] = this._1;\n            b[c + 1] = this._0\n          },\n          keySize: 2,\n          ivSize: 2,\n          blockSize: 2\n        });\n    h.DES = e._6(m);\n    g = g.TripleDES = e.extend({\n      _5: function() {\n        var b = this._12.words;\n        this._17 = m.createEncryptor(n.create(b.slice(0, 2)));\n        this._21 = m.createEncryptor(n.create(b.slice(2, 4)));\n        this._23 = m.createEncryptor(n.create(b.slice(4, 6)))\n      },\n      encryptBlock: function(b, c) {\n        this._17.encryptBlock(b, c);\n        this._21.decryptBlock(b, c);\n        this._23.encryptBlock(b, c)\n      },\n      decryptBlock: function(b, c) {\n        this._23.decryptBlock(b, c);\n        this._21.encryptBlock(b, c);\n        this._17.decryptBlock(b, c)\n      },\n      keySize: 6,\n      ivSize: 2,\n      blockSize: 2\n    });\n    h.TripleDES = e._6(g)\n  })();\n  var DES = {\n    encrypt: function(text) {\n      var secretkey = (CryptoJS.MD5(akb36).toString()).substr(0, 16);\n      var secretiv = (CryptoJS.MD5(akb48).toString()).substr(24, 8);\n      secretkey = CryptoJS.enc.Utf8.parse(secretkey);\n      secretiv = CryptoJS.enc.Utf8.parse(secretiv);\n      var result = CryptoJS.DES.encrypt(text, secretkey, {\n        iv: secretiv,\n        mode: CryptoJS.mode.CBC,\n        padding: CryptoJS.pad.Pkcs7\n      });\n      return result.toString()\n    },\n  };\n  return b.encode(DES.encrypt(DES.encrypt(DES.encrypt(b.encode(a)))));\n}\n\nfunction encode_secret() {\n  var b,\n      a = appId;\n  for (b = 0; b < arguments.length; b++) a += arguments[b];\n  return (a = a.replace(/\\s/g, \"\")), hex_md5(a);\n}\n\nfunction decode_result(a) {\n  var b = new Base64();\n  var akb33 = \"32223\";\n  var akb34 = \"N4EDAQpO2ejqgCoX\";\n  var akb35 = \"=qoKNLgdAjJbU8zx\";\n  var akb36 = \"mAkJqt8coXQ96zML\";\n  var akb48 = \"t4ABRmeN\"\n  return b.decode(b.decode(b.decode(a)));\n}\nvar hexcase = 0,\n    b64pad = \"\",\n    chrsz = 8,\n    appId = \"a01901d3caba1f362d69474674ce477f\";\n\nvar encode_param = encode_param\n\n\n\n\nvar CryptoJS = CryptoJS || function(h, r) {\n  var k = {},\n      l = k.lib = {},\n      n = function() {},\n      f = l.Base = {\n        extend: function(a) {\n          n.prototype = this;\n          var b = new n;\n          a && b.mixIn(a);\n          b.hasOwnProperty(\"init\") || (b.init = function() {\n            b.s.init.apply(this, arguments)\n          });\n          b.init.prototype = b;\n          b.s = this;\n          return b\n        },\n        create: function() {\n          var a = this.extend();\n          a.init.apply(a, arguments);\n          return a\n        },\n        init: function() {},\n        mixIn: function(a) {\n          for (var b in a) a.hasOwnProperty(b) && (this[b] = a[b]);\n          a.hasOwnProperty(\"toString\") && (this.toString = a.toString)\n        },\n        clone: function() {\n          return this.init.prototype.extend(this)\n        }\n      },\n      j = l.WordArray = f.extend({\n        init: function(a, b) {\n          a = this.words = a || [];\n          this.sigBytes = b != r ? b : 4 * a.length\n        },\n        toString: function(a) {\n          return (a || s).stringify(this)\n        },\n        concat: function(a) {\n          var b = this.words,\n              d = a.words,\n              c = this.sigBytes;\n          a = a.sigBytes;\n          this.clamp();\n          if (c % 4)\n            for (var e = 0; e < a; e++) b[c + e >>> 2] |= (d[e >>> 2] >>> 24 - 8 * (e % 4) & 255) << 24 - 8 * ((c + e) % 4);\n          else if (65535 < d.length)\n            for (e = 0; e < a; e += 4) b[c + e >>> 2] = d[e >>> 2];\n          else b.push.apply(b, d);\n          this.sigBytes += a;\n          return this\n        },\n        clamp: function() {\n          var a = this.words,\n              b = this.sigBytes;\n          a[b >>> 2] &= 4294967295 << 32 - 8 * (b % 4);\n          a.length = h.ceil(b / 4)\n        },\n        clone: function() {\n          var a = f.clone.call(this);\n          a.words = this.words.slice(0);\n          return a\n        },\n        random: function(a) {\n          for (var b = [], d = 0; d < a; d += 4) b.push(4294967296 * h.random() | 0);\n          return new j.init(b, a)\n        }\n      }),\n      m = k.enc = {},\n      s = m.Hex = {\n        stringify: function(a) {\n          var b = a.words;\n          a = a.sigBytes;\n          for (var d = [], c = 0; c < a; c++) {\n            var e = b[c >>> 2] >>> 24 - 8 * (c % 4) & 255;\n            d.push((e >>> 4).toString(16));\n            d.push((e & 15).toString(16))\n          }\n          return d.join(\"\")\n        },\n        parse: function(a) {\n          for (var b = a.length, d = [], c = 0; c < b; c += 2) d[c >>> 3] |= parseInt(a.substr(c, 2), 16) << 24 - 4 * (c % 8);\n          return new j.init(d, b / 2)\n        }\n      },\n      p = m.Latin1 = {\n        stringify: function(a) {\n          var b = a.words;\n          a = a.sigBytes;\n          for (var d = [], c = 0; c < a; c++) d.push(String.fromCharCode(b[c >>> 2] >>> 24 - 8 * (c % 4) & 255));\n          return d.join(\"\")\n        },\n        parse: function(a) {\n          for (var b = a.length, d = [], c = 0; c < b; c++) d[c >>> 2] |= (a.charCodeAt(c) & 255) << 24 - 8 * (c % 4);\n          return new j.init(d, b)\n        }\n      },\n      t = m.Utf8 = {\n        stringify: function(a) {\n          try {\n            return decodeURIComponent(escape(p.stringify(a)))\n          } catch (b) {\n            throw Error(\"Malformed UTF-8 data\")\n          }\n        },\n        parse: function(a) {\n          return p.parse(unescape(encodeURIComponent(a)))\n        }\n      },\n      q = l.BufferedBlockAlgorithm = f.extend({\n        reset: function() {\n          this._2 = new j.init;\n          this._22 = 0\n        },\n        _8: function(a) {\n          \"string\" == typeof a && (a = t.parse(a));\n          this._2.concat(a);\n          this._22 += a.sigBytes\n        },\n        _3: function(a) {\n          var b = this._2,\n              d = b.words,\n              c = b.sigBytes,\n              e = this.blockSize,\n              f = c / (4 * e),\n              f = a ? h.ceil(f) : h.max((f | 0) - this._18, 0);\n          a = f * e;\n          c = h.min(4 * a, c);\n          if (a) {\n            for (var g = 0; g < a; g += e) this._20(d, g);\n            g = d.splice(0, a);\n            b.sigBytes -= c\n          }\n          return new j.init(g, c)\n        },\n        clone: function() {\n          var a = f.clone.call(this);\n          a._2 = this._2.clone();\n          return a\n        },\n        _18: 0\n      });\n  l.Hasher = q.extend({\n    cfg: f.extend(),\n    init: function(a) {\n      this.cfg = this.cfg.extend(a);\n      this.reset()\n    },\n    reset: function() {\n      q.reset.call(this);\n      this._5()\n    },\n    update: function(a) {\n      this._8(a);\n      this._3();\n      return this\n    },\n    finalize: function(a) {\n      a && this._8(a);\n      return this._9()\n    },\n    blockSize: 16,\n    _6: function(a) {\n      return function(b, d) {\n        return (new a.init(d)).finalize(b)\n      }\n    },\n    _30: function(a) {\n      return function(b, d) {\n        return (new u.HMAC.init(a, d)).finalize(b)\n      }\n    }\n  });\n  var u = k.algo = {};\n  return k\n}(Math);\n(function() {\n  var h = CryptoJS,\n      j = h.lib.WordArray;\n  h.enc.Base64 = {\n    stringify: function(b) {\n      var e = b.words,\n          f = b.sigBytes,\n          c = this._13;\n      b.clamp();\n      b = [];\n      for (var a = 0; a < f; a += 3)\n        for (var d = (e[a >>> 2] >>> 24 - 8 * (a % 4) & 255) << 16 | (e[a + 1 >>> 2] >>> 24 - 8 * ((a + 1) % 4) & 255) << 8 | e[a + 2 >>> 2] >>> 24 - 8 * ((a + 2) % 4) & 255, g = 0; 4 > g && a + 0.75 * g < f; g++) b.push(c.charAt(d >>> 6 * (3 - g) & 63));\n      if (e = c.charAt(64))\n        for (; b.length % 4;) b.push(e);\n      return b.join(\"\")\n    },\n    parse: function(b) {\n      var e = b.length,\n          f = this._13,\n          c = f.charAt(64);\n      c && (c = b.indexOf(c), -1 != c && (e = c));\n      for (var c = [], a = 0, d = 0; d < e; d++)\n        if (d % 4) {\n          var g = f.indexOf(b.charAt(d - 1)) << 2 * (d % 4),\n              h = f.indexOf(b.charAt(d)) >>> 6 - 2 * (d % 4);\n          c[a >>> 2] |= (g | h) << 24 - 8 * (a % 4);\n          a++\n        }\n      return j.create(c, a)\n    },\n    _13: \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"\n  }\n})();\nCryptoJS.lib.Cipher || function(u) {\n  var g = CryptoJS,\n      f = g.lib,\n      k = f.Base,\n      l = f.WordArray,\n      q = f.BufferedBlockAlgorithm,\n      r = g.enc.Base64,\n      v = g.algo.EvpKDF,\n      n = f.Cipher = q.extend({\n        cfg: k.extend(),\n        createEncryptor: function(a, b) {\n          return this.create(this._11, a, b)\n        },\n        createDecryptor: function(a, b) {\n          return this.create(this._25, a, b)\n        },\n        init: function(a, b, c) {\n          this.cfg = this.cfg.extend(c);\n          this._15 = a;\n          this._12 = b;\n          this.reset()\n        },\n        reset: function() {\n          q.reset.call(this);\n          this._5()\n        },\n        process: function(a) {\n          this._8(a);\n          return this._3()\n        },\n        finalize: function(a) {\n          a && this._8(a);\n          return this._9()\n        },\n        keySize: 4,\n        ivSize: 4,\n        _11: 1,\n        _25: 2,\n        _6: function(a) {\n          return {\n            encrypt: function(b, c, d) {\n              return (\"string\" == typeof c ? s : j).encrypt(a, b, c, d)\n            },\n            decrypt: function(b, c, d) {\n              return (\"string\" == typeof c ? s : j).decrypt(a, b, c, d)\n            }\n          }\n        }\n      });\n  f.StreamCipher = n.extend({\n    _9: function() {\n      return this._3(!0)\n    },\n    blockSize: 1\n  });\n  var m = g.mode = {},\n      t = function(a, b, c) {\n        var d = this._16;\n        d ? this._16 = u : d = this._19;\n        for (var e = 0; e < c; e++) a[b + e] ^= d[e]\n      },\n      h = (f.BlockCipherMode = k.extend({\n        createEncryptor: function(a, b) {\n          return this.Encryptor.create(a, b)\n        },\n        createDecryptor: function(a, b) {\n          return this.Decryptor.create(a, b)\n        },\n        init: function(a, b) {\n          this._10 = a;\n          this._16 = b\n        }\n      })).extend();\n  h.Encryptor = h.extend({\n    processBlock: function(a, b) {\n      var c = this._10,\n          d = c.blockSize;\n      t.call(this, a, b, d);\n      c.encryptBlock(a, b);\n      this._19 = a.slice(b, b + d)\n    }\n  });\n  h.Decryptor = h.extend({\n    processBlock: function(a, b) {\n      var c = this._10,\n          d = c.blockSize,\n          e = a.slice(b, b + d);\n      c.decryptBlock(a, b);\n      t.call(this, a, b, d);\n      this._19 = e\n    }\n  });\n  m = m.CBC = h;\n  h = (g.pad = {}).Pkcs7 = {\n    pad: function(a, b) {\n      for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, e = [], f = 0; f < c; f += 4) e.push(d);\n      c = l.create(e, c);\n      a.concat(c)\n    },\n    unpad: function(a) {\n      a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255\n    }\n  };\n  f.BlockCipher = n.extend({\n    cfg: n.cfg.extend({\n      mode: m,\n      padding: h\n    }),\n    reset: function() {\n      n.reset.call(this);\n      var a = this.cfg,\n          b = a.iv,\n          a = a.mode;\n      if (this._15 == this._11) var c = a.createEncryptor;\n      else c = a.createDecryptor, this._18 = 1;\n      this._31 = c.call(a, this, b && b.words)\n    },\n    _20: function(a, b) {\n      this._31.processBlock(a, b)\n    },\n    _9: function() {\n      var a = this.cfg.padding;\n      if (this._15 == this._11) {\n        a.pad(this._2, this.blockSize);\n        var b = this._3(!0)\n      } else b = this._3(!0), a.unpad(b);\n      return b\n    },\n    blockSize: 4\n  });\n  var p = f.CipherParams = k.extend({\n        init: function(a) {\n          this.mixIn(a)\n        },\n        toString: function(a) {\n          return (a || this.formatter).stringify(this)\n        }\n      }),\n      m = (g.format = {}).OpenSSL = {\n        stringify: function(a) {\n          var b = a.ciphertext;\n          a = a.salt;\n          return (a ? l.create([1398893684, 1701076831]).concat(a).concat(b) : b).toString(r)\n        },\n        parse: function(a) {\n          a = r.parse(a);\n          var b = a.words;\n          if (1398893684 == b[0] && 1701076831 == b[1]) {\n            var c = l.create(b.slice(2, 4));\n            b.splice(0, 4);\n            a.sigBytes -= 16\n          }\n          return p.create({\n            ciphertext: a,\n            salt: c\n          })\n        }\n      },\n      j = f.SerializableCipher = k.extend({\n        cfg: k.extend({\n          format: m\n        }),\n        encrypt: function(a, b, c, d) {\n          d = this.cfg.extend(d);\n          var e = a.createEncryptor(c, d);\n          b = e.finalize(b);\n          e = e.cfg;\n          return p.create({\n            ciphertext: b,\n            key: c,\n            iv: e.iv,\n            algorithm: a,\n            mode: e.mode,\n            padding: e.padding,\n            blockSize: a.blockSize,\n            formatter: d.format\n          })\n        },\n        decrypt: function(a, b, c, d) {\n          d = this.cfg.extend(d);\n          b = this._14(b, d.format);\n          return a.createDecryptor(c, d).finalize(b.ciphertext)\n        },\n        _14: function(a, b) {\n          return \"string\" == typeof a ? b.parse(a, this) : a\n        }\n      }),\n      g = (g.kdf = {}).OpenSSL = {\n        execute: function(a, b, c, d) {\n          d || (d = l.random(8));\n          a = v.create({\n            keySize: b + c\n          }).compute(a, d);\n          c = l.create(a.words.slice(b), 4 * c);\n          a.sigBytes = 4 * b;\n          return p.create({\n            key: a,\n            iv: c,\n            salt: d\n          })\n        }\n      },\n      s = f.PasswordBasedCipher = j.extend({\n        cfg: j.cfg.extend({\n          kdf: g\n        }),\n        encrypt: function(a, b, c, d) {\n          d = this.cfg.extend(d);\n          c = d.kdf.execute(c, a.keySize, a.ivSize);\n          d.iv = c.iv;\n          a = j.encrypt.call(this, a, b, c.key, d);\n          a.mixIn(c);\n          return a\n        },\n        decrypt: function(a, b, c, d) {\n          d = this.cfg.extend(d);\n          b = this._14(b, d.format);\n          c = d.kdf.execute(c, a.keySize, a.ivSize, b.salt);\n          d.iv = c.iv;\n          return j.decrypt.call(this, a, b, c.key, d)\n        }\n      })\n}();\nCryptoJS.mode.ECB = function() {\n  var a = CryptoJS.lib.BlockCipherMode.extend();\n  a.Encryptor = a.extend({\n    processBlock: function(a, b) {\n      this._10.encryptBlock(a, b)\n    }\n  });\n  a.Decryptor = a.extend({\n    processBlock: function(a, b) {\n      this._10.decryptBlock(a, b)\n    }\n  });\n  return a\n}();\n(function(E) {\n  function h(a, f, g, j, p, h, k) {\n    a = a + (f & g | ~f & j) + p + k;\n    return (a << h | a >>> 32 - h) + f\n  }\n\n  function k(a, f, g, j, p, h, k) {\n    a = a + (f & j | g & ~j) + p + k;\n    return (a << h | a >>> 32 - h) + f\n  }\n\n  function l(a, f, g, j, h, k, l) {\n    a = a + (f ^ g ^ j) + h + l;\n    return (a << k | a >>> 32 - k) + f\n  }\n\n  function n(a, f, g, j, h, k, l) {\n    a = a + (g ^ (f | ~j)) + h + l;\n    return (a << k | a >>> 32 - k) + f\n  }\n  for (var r = CryptoJS, q = r.lib, F = q.WordArray, s = q.Hasher, q = r.algo, a = [], t = 0; 64 > t; t++) a[t] = 4294967296 * E.abs(E.sin(t + 1)) | 0;\n  q = q.MD5 = s.extend({\n    _5: function() {\n      this._7 = new F.init([1732584193, 4023233417, 2562383102, 271733878])\n    },\n    _20: function(m, f) {\n      for (var g = 0; 16 > g; g++) {\n        var j = f + g,\n            p = m[j];\n        m[j] = (p << 8 | p >>> 24) & 16711935 | (p << 24 | p >>> 8) & 4278255360\n      }\n      var g = this._7.words,\n          j = m[f + 0],\n          p = m[f + 1],\n          q = m[f + 2],\n          r = m[f + 3],\n          s = m[f + 4],\n          t = m[f + 5],\n          u = m[f + 6],\n          v = m[f + 7],\n          w = m[f + 8],\n          x = m[f + 9],\n          y = m[f + 10],\n          z = m[f + 11],\n          A = m[f + 12],\n          B = m[f + 13],\n          C = m[f + 14],\n          D = m[f + 15],\n          b = g[0],\n          c = g[1],\n          d = g[2],\n          e = g[3],\n          b = h(b, c, d, e, j, 7, a[0]),\n          e = h(e, b, c, d, p, 12, a[1]),\n          d = h(d, e, b, c, q, 17, a[2]),\n          c = h(c, d, e, b, r, 22, a[3]),\n          b = h(b, c, d, e, s, 7, a[4]),\n          e = h(e, b, c, d, t, 12, a[5]),\n          d = h(d, e, b, c, u, 17, a[6]),\n          c = h(c, d, e, b, v, 22, a[7]),\n          b = h(b, c, d, e, w, 7, a[8]),\n          e = h(e, b, c, d, x, 12, a[9]),\n          d = h(d, e, b, c, y, 17, a[10]),\n          c = h(c, d, e, b, z, 22, a[11]),\n          b = h(b, c, d, e, A, 7, a[12]),\n          e = h(e, b, c, d, B, 12, a[13]),\n          d = h(d, e, b, c, C, 17, a[14]),\n          c = h(c, d, e, b, D, 22, a[15]),\n          b = k(b, c, d, e, p, 5, a[16]),\n          e = k(e, b, c, d, u, 9, a[17]),\n          d = k(d, e, b, c, z, 14, a[18]),\n          c = k(c, d, e, b, j, 20, a[19]),\n          b = k(b, c, d, e, t, 5, a[20]),\n          e = k(e, b, c, d, y, 9, a[21]),\n          d = k(d, e, b, c, D, 14, a[22]),\n          c = k(c, d, e, b, s, 20, a[23]),\n          b = k(b, c, d, e, x, 5, a[24]),\n          e = k(e, b, c, d, C, 9, a[25]),\n          d = k(d, e, b, c, r, 14, a[26]),\n          c = k(c, d, e, b, w, 20, a[27]),\n          b = k(b, c, d, e, B, 5, a[28]),\n          e = k(e, b, c, d, q, 9, a[29]),\n          d = k(d, e, b, c, v, 14, a[30]),\n          c = k(c, d, e, b, A, 20, a[31]),\n          b = l(b, c, d, e, t, 4, a[32]),\n          e = l(e, b, c, d, w, 11, a[33]),\n          d = l(d, e, b, c, z, 16, a[34]),\n          c = l(c, d, e, b, C, 23, a[35]),\n          b = l(b, c, d, e, p, 4, a[36]),\n          e = l(e, b, c, d, s, 11, a[37]),\n          d = l(d, e, b, c, v, 16, a[38]),\n          c = l(c, d, e, b, y, 23, a[39]),\n          b = l(b, c, d, e, B, 4, a[40]),\n          e = l(e, b, c, d, j, 11, a[41]),\n          d = l(d, e, b, c, r, 16, a[42]),\n          c = l(c, d, e, b, u, 23, a[43]),\n          b = l(b, c, d, e, x, 4, a[44]),\n          e = l(e, b, c, d, A, 11, a[45]),\n          d = l(d, e, b, c, D, 16, a[46]),\n          c = l(c, d, e, b, q, 23, a[47]),\n          b = n(b, c, d, e, j, 6, a[48]),\n          e = n(e, b, c, d, v, 10, a[49]),\n          d = n(d, e, b, c, C, 15, a[50]),\n          c = n(c, d, e, b, t, 21, a[51]),\n          b = n(b, c, d, e, A, 6, a[52]),\n          e = n(e, b, c, d, r, 10, a[53]),\n          d = n(d, e, b, c, y, 15, a[54]),\n          c = n(c, d, e, b, p, 21, a[55]),\n          b = n(b, c, d, e, w, 6, a[56]),\n          e = n(e, b, c, d, D, 10, a[57]),\n          d = n(d, e, b, c, u, 15, a[58]),\n          c = n(c, d, e, b, B, 21, a[59]),\n          b = n(b, c, d, e, s, 6, a[60]),\n          e = n(e, b, c, d, z, 10, a[61]),\n          d = n(d, e, b, c, q, 15, a[62]),\n          c = n(c, d, e, b, x, 21, a[63]);\n      g[0] = g[0] + b | 0;\n      g[1] = g[1] + c | 0;\n      g[2] = g[2] + d | 0;\n      g[3] = g[3] + e | 0\n    },\n    _9: function() {\n      var a = this._2,\n          f = a.words,\n          g = 8 * this._22,\n          j = 8 * a.sigBytes;\n      f[j >>> 5] |= 128 << 24 - j % 32;\n      var h = E.floor(g / 4294967296);\n      f[(j + 64 >>> 9 << 4) + 15] = (h << 8 | h >>> 24) & 16711935 | (h << 24 | h >>> 8) & 4278255360;\n      f[(j + 64 >>> 9 << 4) + 14] = (g << 8 | g >>> 24) & 16711935 | (g << 24 | g >>> 8) & 4278255360;\n      a.sigBytes = 4 * (f.length + 1);\n      this._3();\n      a = this._7;\n      f = a.words;\n      for (g = 0; 4 > g; g++) j = f[g], f[g] = (j << 8 | j >>> 24) & 16711935 | (j << 24 | j >>> 8) & 4278255360;\n      return a\n    },\n    clone: function() {\n      var a = s.clone.call(this);\n      a._7 = this._7.clone();\n      return a\n    }\n  });\n  r.MD5 = s._6(q);\n  r.HmacMD5 = s._30(q)\n})(Math);\n(function() {\n  for (var q = CryptoJS, x = q.lib.BlockCipher, r = q.algo, j = [], y = [], z = [], A = [], B = [], C = [], s = [], u = [], v = [], w = [], g = [], k = 0; 256 > k; k++) g[k] = 128 > k ? k << 1 : k << 1 ^ 283;\n  for (var n = 0, l = 0, k = 0; 256 > k; k++) {\n    var f = l ^ l << 1 ^ l << 2 ^ l << 3 ^ l << 4,\n        f = f >>> 8 ^ f & 255 ^ 99;\n    j[n] = f;\n    y[f] = n;\n    var t = g[n],\n        D = g[t],\n        E = g[D],\n        b = 257 * g[f] ^ 16843008 * f;\n    z[n] = b << 24 | b >>> 8;\n    A[n] = b << 16 | b >>> 16;\n    B[n] = b << 8 | b >>> 24;\n    C[n] = b;\n    b = 16843009 * E ^ 65537 * D ^ 257 * t ^ 16843008 * n;\n    s[f] = b << 24 | b >>> 8;\n    u[f] = b << 16 | b >>> 16;\n    v[f] = b << 8 | b >>> 24;\n    w[f] = b;\n    n ? (n = t ^ g[g[g[E ^ t]]], l ^= g[g[l]]) : n = l = 1\n  }\n  var F = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54],\n      r = r.AES = x.extend({\n        _5: function() {\n          for (var c = this._12, e = c.words, a = c.sigBytes / 4, c = 4 * ((this._26 = a + 6) + 1), b = this._27 = [], h = 0; h < c; h++)\n            if (h < a) b[h] = e[h];\n            else {\n              var d = b[h - 1];\n              h % a ? 6 < a && 4 == h % a && (d = j[d >>> 24] << 24 | j[d >>> 16 & 255] << 16 | j[d >>> 8 & 255] << 8 | j[d & 255]) : (d = d << 8 | d >>> 24, d = j[d >>> 24] << 24 | j[d >>> 16 & 255] << 16 | j[d >>> 8 & 255] << 8 | j[d & 255], d ^= F[h / a | 0] << 24);\n              b[h] = b[h - a] ^ d\n            }\n          e = this._24 = [];\n          for (a = 0; a < c; a++) h = c - a, d = a % 4 ? b[h] : b[h - 4], e[a] = 4 > a || 4 >= h ? d : s[j[d >>> 24]] ^ u[j[d >>> 16 & 255]] ^ v[j[d >>> 8 & 255]] ^ w[j[d & 255]]\n        },\n        encryptBlock: function(c, e) {\n          this._4(c, e, this._27, z, A, B, C, j)\n        },\n        decryptBlock: function(c, e) {\n          var a = c[e + 1];\n          c[e + 1] = c[e + 3];\n          c[e + 3] = a;\n          this._4(c, e, this._24, s, u, v, w, y);\n          a = c[e + 1];\n          c[e + 1] = c[e + 3];\n          c[e + 3] = a\n        },\n        _4: function(c, e, a, b, h, d, j, m) {\n          for (var n = this._26, f = c[e] ^ a[0], g = c[e + 1] ^ a[1], k = c[e + 2] ^ a[2], p = c[e + 3] ^ a[3], l = 4, t = 1; t < n; t++) var q = b[f >>> 24] ^ h[g >>> 16 & 255] ^ d[k >>> 8 & 255] ^ j[p & 255] ^ a[l++],\n              r = b[g >>> 24] ^ h[k >>> 16 & 255] ^ d[p >>> 8 & 255] ^ j[f & 255] ^ a[l++],\n              s = b[k >>> 24] ^ h[p >>> 16 & 255] ^ d[f >>> 8 & 255] ^ j[g & 255] ^ a[l++],\n              p = b[p >>> 24] ^ h[f >>> 16 & 255] ^ d[g >>> 8 & 255] ^ j[k & 255] ^ a[l++],\n              f = q,\n              g = r,\n              k = s;\n          q = (m[f >>> 24] << 24 | m[g >>> 16 & 255] << 16 | m[k >>> 8 & 255] << 8 | m[p & 255]) ^ a[l++];\n          r = (m[g >>> 24] << 24 | m[k >>> 16 & 255] << 16 | m[p >>> 8 & 255] << 8 | m[f & 255]) ^ a[l++];\n          s = (m[k >>> 24] << 24 | m[p >>> 16 & 255] << 16 | m[f >>> 8 & 255] << 8 | m[g & 255]) ^ a[l++];\n          p = (m[p >>> 24] << 24 | m[f >>> 16 & 255] << 16 | m[g >>> 8 & 255] << 8 | m[k & 255]) ^ a[l++];\n          c[e] = q;\n          c[e + 1] = r;\n          c[e + 2] = s;\n          c[e + 3] = p\n        },\n        keySize: 8\n      });\n  q.AES = x._6(r)\n})();\n(function() {\n  function j(b, c) {\n    var a = (this._1 >>> b ^ this._0) & c;\n    this._0 ^= a;\n    this._1 ^= a << b\n  }\n\n  function l(b, c) {\n    var a = (this._0 >>> b ^ this._1) & c;\n    this._1 ^= a;\n    this._0 ^= a << b\n  }\n  var h = CryptoJS,\n      e = h.lib,\n      n = e.WordArray,\n      e = e.BlockCipher,\n      g = h.algo,\n      q = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4],\n      p = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32],\n      r = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28],\n      s = [{\n        \"0\": 8421888,\n        268435456: 32768,\n        536870912: 8421378,\n        805306368: 2,\n        1073741824: 512,\n        1342177280: 8421890,\n        1610612736: 8389122,\n        1879048192: 8388608,\n        2147483648: 514,\n        2415919104: 8389120,\n        2684354560: 33280,\n        2952790016: 8421376,\n        3221225472: 32770,\n        3489660928: 8388610,\n        3758096384: 0,\n        4026531840: 33282,\n        134217728: 0,\n        402653184: 8421890,\n        671088640: 33282,\n        939524096: 32768,\n        1207959552: 8421888,\n        1476395008: 512,\n        1744830464: 8421378,\n        2013265920: 2,\n        2281701376: 8389120,\n        2550136832: 33280,\n        2818572288: 8421376,\n        3087007744: 8389122,\n        3355443200: 8388610,\n        3623878656: 32770,\n        3892314112: 514,\n        4160749568: 8388608,\n        1: 32768,\n        268435457: 2,\n        536870913: 8421888,\n        805306369: 8388608,\n        1073741825: 8421378,\n        1342177281: 33280,\n        1610612737: 512,\n        1879048193: 8389122,\n        2147483649: 8421890,\n        2415919105: 8421376,\n        2684354561: 8388610,\n        2952790017: 33282,\n        3221225473: 514,\n        3489660929: 8389120,\n        3758096385: 32770,\n        4026531841: 0,\n        134217729: 8421890,\n        402653185: 8421376,\n        671088641: 8388608,\n        939524097: 512,\n        1207959553: 32768,\n        1476395009: 8388610,\n        1744830465: 2,\n        2013265921: 33282,\n        2281701377: 32770,\n        2550136833: 8389122,\n        2818572289: 514,\n        3087007745: 8421888,\n        3355443201: 8389120,\n        3623878657: 0,\n        3892314113: 33280,\n        4160749569: 8421378\n      }, {\n        \"0\": 1074282512,\n        16777216: 16384,\n        33554432: 524288,\n        50331648: 1074266128,\n        67108864: 1073741840,\n        83886080: 1074282496,\n        100663296: 1073758208,\n        117440512: 16,\n        134217728: 540672,\n        150994944: 1073758224,\n        167772160: 1073741824,\n        184549376: 540688,\n        201326592: 524304,\n        218103808: 0,\n        234881024: 16400,\n        251658240: 1074266112,\n        8388608: 1073758208,\n        25165824: 540688,\n        41943040: 16,\n        58720256: 1073758224,\n        75497472: 1074282512,\n        92274688: 1073741824,\n        109051904: 524288,\n        125829120: 1074266128,\n        142606336: 524304,\n        159383552: 0,\n        176160768: 16384,\n        192937984: 1074266112,\n        209715200: 1073741840,\n        226492416: 540672,\n        243269632: 1074282496,\n        260046848: 16400,\n        268435456: 0,\n        285212672: 1074266128,\n        301989888: 1073758224,\n        318767104: 1074282496,\n        335544320: 1074266112,\n        352321536: 16,\n        369098752: 540688,\n        385875968: 16384,\n        402653184: 16400,\n        419430400: 524288,\n        436207616: 524304,\n        452984832: 1073741840,\n        469762048: 540672,\n        486539264: 1073758208,\n        503316480: 1073741824,\n        520093696: 1074282512,\n        276824064: 540688,\n        293601280: 524288,\n        310378496: 1074266112,\n        327155712: 16384,\n        343932928: 1073758208,\n        360710144: 1074282512,\n        377487360: 16,\n        394264576: 1073741824,\n        411041792: 1074282496,\n        427819008: 1073741840,\n        444596224: 1073758224,\n        461373440: 524304,\n        478150656: 0,\n        494927872: 16400,\n        511705088: 1074266128,\n        528482304: 540672\n      }, {\n        \"0\": 260,\n        1048576: 0,\n        2097152: 67109120,\n        3145728: 65796,\n        4194304: 65540,\n        5242880: 67108868,\n        6291456: 67174660,\n        7340032: 67174400,\n        8388608: 67108864,\n        9437184: 67174656,\n        10485760: 65792,\n        11534336: 67174404,\n        12582912: 67109124,\n        13631488: 65536,\n        14680064: 4,\n        15728640: 256,\n        524288: 67174656,\n        1572864: 67174404,\n        2621440: 0,\n        3670016: 67109120,\n        4718592: 67108868,\n        5767168: 65536,\n        6815744: 65540,\n        7864320: 260,\n        8912896: 4,\n        9961472: 256,\n        11010048: 67174400,\n        12058624: 65796,\n        13107200: 65792,\n        14155776: 67109124,\n        15204352: 67174660,\n        16252928: 67108864,\n        16777216: 67174656,\n        17825792: 65540,\n        18874368: 65536,\n        19922944: 67109120,\n        20971520: 256,\n        22020096: 67174660,\n        23068672: 67108868,\n        24117248: 0,\n        25165824: 67109124,\n        26214400: 67108864,\n        27262976: 4,\n        28311552: 65792,\n        29360128: 67174400,\n        30408704: 260,\n        31457280: 65796,\n        32505856: 67174404,\n        17301504: 67108864,\n        18350080: 260,\n        19398656: 67174656,\n        20447232: 0,\n        21495808: 65540,\n        22544384: 67109120,\n        23592960: 256,\n        24641536: 67174404,\n        25690112: 65536,\n        26738688: 67174660,\n        27787264: 65796,\n        28835840: 67108868,\n        29884416: 67109124,\n        30932992: 67174400,\n        31981568: 4,\n        33030144: 65792\n      }, {\n        \"0\": 2151682048,\n        65536: 2147487808,\n        131072: 4198464,\n        196608: 2151677952,\n        262144: 0,\n        327680: 4198400,\n        393216: 2147483712,\n        458752: 4194368,\n        524288: 2147483648,\n        589824: 4194304,\n        655360: 64,\n        720896: 2147487744,\n        786432: 2151678016,\n        851968: 4160,\n        917504: 4096,\n        983040: 2151682112,\n        32768: 2147487808,\n        98304: 64,\n        163840: 2151678016,\n        229376: 2147487744,\n        294912: 4198400,\n        360448: 2151682112,\n        425984: 0,\n        491520: 2151677952,\n        557056: 4096,\n        622592: 2151682048,\n        688128: 4194304,\n        753664: 4160,\n        819200: 2147483648,\n        884736: 4194368,\n        950272: 4198464,\n        1015808: 2147483712,\n        1048576: 4194368,\n        1114112: 4198400,\n        1179648: 2147483712,\n        1245184: 0,\n        1310720: 4160,\n        1376256: 2151678016,\n        1441792: 2151682048,\n        1507328: 2147487808,\n        1572864: 2151682112,\n        1638400: 2147483648,\n        1703936: 2151677952,\n        1769472: 4198464,\n        1835008: 2147487744,\n        1900544: 4194304,\n        1966080: 64,\n        2031616: 4096,\n        1081344: 2151677952,\n        1146880: 2151682112,\n        1212416: 0,\n        1277952: 4198400,\n        1343488: 4194368,\n        1409024: 2147483648,\n        1474560: 2147487808,\n        1540096: 64,\n        1605632: 2147483712,\n        1671168: 4096,\n        1736704: 2147487744,\n        1802240: 2151678016,\n        1867776: 4160,\n        1933312: 2151682048,\n        1998848: 4194304,\n        2064384: 4198464\n      }, {\n        \"0\": 128,\n        4096: 17039360,\n        8192: 262144,\n        12288: 536870912,\n        16384: 537133184,\n        20480: 16777344,\n        24576: 553648256,\n        28672: 262272,\n        32768: 16777216,\n        36864: 537133056,\n        40960: 536871040,\n        45056: 553910400,\n        49152: 553910272,\n        53248: 0,\n        57344: 17039488,\n        61440: 553648128,\n        2048: 17039488,\n        6144: 553648256,\n        10240: 128,\n        14336: 17039360,\n        18432: 262144,\n        22528: 537133184,\n        26624: 553910272,\n        30720: 536870912,\n        34816: 537133056,\n        38912: 0,\n        43008: 553910400,\n        47104: 16777344,\n        51200: 536871040,\n        55296: 553648128,\n        59392: 16777216,\n        63488: 262272,\n        65536: 262144,\n        69632: 128,\n        73728: 536870912,\n        77824: 553648256,\n        81920: 16777344,\n        86016: 553910272,\n        90112: 537133184,\n        94208: 16777216,\n        98304: 553910400,\n        102400: 553648128,\n        106496: 17039360,\n        110592: 537133056,\n        114688: 262272,\n        118784: 536871040,\n        122880: 0,\n        126976: 17039488,\n        67584: 553648256,\n        71680: 16777216,\n        75776: 17039360,\n        79872: 537133184,\n        83968: 536870912,\n        88064: 17039488,\n        92160: 128,\n        96256: 553910272,\n        100352: 262272,\n        104448: 553910400,\n        108544: 0,\n        112640: 553648128,\n        116736: 16777344,\n        120832: 262144,\n        124928: 537133056,\n        129024: 536871040\n      }, {\n        \"0\": 268435464,\n        256: 8192,\n        512: 270532608,\n        768: 270540808,\n        1024: 268443648,\n        1280: 2097152,\n        1536: 2097160,\n        1792: 268435456,\n        2048: 0,\n        2304: 268443656,\n        2560: 2105344,\n        2816: 8,\n        3072: 270532616,\n        3328: 2105352,\n        3584: 8200,\n        3840: 270540800,\n        128: 270532608,\n        384: 270540808,\n        640: 8,\n        896: 2097152,\n        1152: 2105352,\n        1408: 268435464,\n        1664: 268443648,\n        1920: 8200,\n        2176: 2097160,\n        2432: 8192,\n        2688: 268443656,\n        2944: 270532616,\n        3200: 0,\n        3456: 270540800,\n        3712: 2105344,\n        3968: 268435456,\n        4096: 268443648,\n        4352: 270532616,\n        4608: 270540808,\n        4864: 8200,\n        5120: 2097152,\n        5376: 268435456,\n        5632: 268435464,\n        5888: 2105344,\n        6144: 2105352,\n        6400: 0,\n        6656: 8,\n        6912: 270532608,\n        7168: 8192,\n        7424: 268443656,\n        7680: 270540800,\n        7936: 2097160,\n        4224: 8,\n        4480: 2105344,\n        4736: 2097152,\n        4992: 268435464,\n        5248: 268443648,\n        5504: 8200,\n        5760: 270540808,\n        6016: 270532608,\n        6272: 270540800,\n        6528: 270532616,\n        6784: 8192,\n        7040: 2105352,\n        7296: 2097160,\n        7552: 0,\n        7808: 268435456,\n        8064: 268443656\n      }, {\n        \"0\": 1048576,\n        16: 33555457,\n        32: 1024,\n        48: 1049601,\n        64: 34604033,\n        80: 0,\n        96: 1,\n        112: 34603009,\n        128: 33555456,\n        144: 1048577,\n        160: 33554433,\n        176: 34604032,\n        192: 34603008,\n        208: 1025,\n        224: 1049600,\n        240: 33554432,\n        8: 34603009,\n        24: 0,\n        40: 33555457,\n        56: 34604032,\n        72: 1048576,\n        88: 33554433,\n        104: 33554432,\n        120: 1025,\n        136: 1049601,\n        152: 33555456,\n        168: 34603008,\n        184: 1048577,\n        200: 1024,\n        216: 34604033,\n        232: 1,\n        248: 1049600,\n        256: 33554432,\n        272: 1048576,\n        288: 33555457,\n        304: 34603009,\n        320: 1048577,\n        336: 33555456,\n        352: 34604032,\n        368: 1049601,\n        384: 1025,\n        400: 34604033,\n        416: 1049600,\n        432: 1,\n        448: 0,\n        464: 34603008,\n        480: 33554433,\n        496: 1024,\n        264: 1049600,\n        280: 33555457,\n        296: 34603009,\n        312: 1,\n        328: 33554432,\n        344: 1048576,\n        360: 1025,\n        376: 34604032,\n        392: 33554433,\n        408: 34603008,\n        424: 0,\n        440: 34604033,\n        456: 1049601,\n        472: 1024,\n        488: 33555456,\n        504: 1048577\n      }, {\n        \"0\": 134219808,\n        1: 131072,\n        2: 134217728,\n        3: 32,\n        4: 131104,\n        5: 134350880,\n        6: 134350848,\n        7: 2048,\n        8: 134348800,\n        9: 134219776,\n        10: 133120,\n        11: 134348832,\n        12: 2080,\n        13: 0,\n        14: 134217760,\n        15: 133152,\n        2147483648: 2048,\n        2147483649: 134350880,\n        2147483650: 134219808,\n        2147483651: 134217728,\n        2147483652: 134348800,\n        2147483653: 133120,\n        2147483654: 133152,\n        2147483655: 32,\n        2147483656: 134217760,\n        2147483657: 2080,\n        2147483658: 131104,\n        2147483659: 134350848,\n        2147483660: 0,\n        2147483661: 134348832,\n        2147483662: 134219776,\n        2147483663: 131072,\n        16: 133152,\n        17: 134350848,\n        18: 32,\n        19: 2048,\n        20: 134219776,\n        21: 134217760,\n        22: 134348832,\n        23: 131072,\n        24: 0,\n        25: 131104,\n        26: 134348800,\n        27: 134219808,\n        28: 134350880,\n        29: 133120,\n        30: 2080,\n        31: 134217728,\n        2147483664: 131072,\n        2147483665: 2048,\n        2147483666: 134348832,\n        2147483667: 133152,\n        2147483668: 32,\n        2147483669: 134348800,\n        2147483670: 134217728,\n        2147483671: 134219808,\n        2147483672: 134350880,\n        2147483673: 134217760,\n        2147483674: 134219776,\n        2147483675: 0,\n        2147483676: 133120,\n        2147483677: 2080,\n        2147483678: 131104,\n        2147483679: 134350848\n      }],\n      t = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679],\n      m = g.DES = e.extend({\n        _5: function() {\n          for (var b = this._12.words, c = [], a = 0; 56 > a; a++) {\n            var f = q[a] - 1;\n            c[a] = b[f >>> 5] >>> 31 - f % 32 & 1\n          }\n          b = this._28 = [];\n          for (f = 0; 16 > f; f++) {\n            for (var d = b[f] = [], e = r[f], a = 0; 24 > a; a++) d[a / 6 | 0] |= c[(p[a] - 1 + e) % 28] << 31 - a % 6, d[4 + (a / 6 | 0)] |= c[28 + (p[a + 24] - 1 + e) % 28] << 31 - a % 6;\n            d[0] = d[0] << 1 | d[0] >>> 31;\n            for (a = 1; 7 > a; a++) d[a] >>>= 4 * (a - 1) + 3;\n            d[7] = d[7] << 5 | d[7] >>> 27\n          }\n          c = this._29 = [];\n          for (a = 0; 16 > a; a++) c[a] = b[15 - a]\n        },\n        encryptBlock: function(b, c) {\n          this._4(b, c, this._28)\n        },\n        decryptBlock: function(b, c) {\n          this._4(b, c, this._29)\n        },\n        _4: function(b, c, a) {\n          this._1 = b[c];\n          this._0 = b[c + 1];\n          j.call(this, 4, 252645135);\n          j.call(this, 16, 65535);\n          l.call(this, 2, 858993459);\n          l.call(this, 8, 16711935);\n          j.call(this, 1, 1431655765);\n          for (var f = 0; 16 > f; f++) {\n            for (var d = a[f], e = this._1, h = this._0, g = 0, k = 0; 8 > k; k++) g |= s[k][((h ^ d[k]) & t[k]) >>> 0];\n            this._1 = h;\n            this._0 = e ^ g\n          }\n          a = this._1;\n          this._1 = this._0;\n          this._0 = a;\n          j.call(this, 1, 1431655765);\n          l.call(this, 8, 16711935);\n          l.call(this, 2, 858993459);\n          j.call(this, 16, 65535);\n          j.call(this, 4, 252645135);\n          b[c] = this._1;\n          b[c + 1] = this._0\n        },\n        keySize: 2,\n        ivSize: 2,\n        blockSize: 2\n      });\n  h.DES = e._6(m);\n  g = g.TripleDES = e.extend({\n    _5: function() {\n      var b = this._12.words;\n      this._17 = m.createEncryptor(n.create(b.slice(0, 2)));\n      this._21 = m.createEncryptor(n.create(b.slice(2, 4)));\n      this._23 = m.createEncryptor(n.create(b.slice(4, 6)))\n    },\n    encryptBlock: function(b, c) {\n      this._17.encryptBlock(b, c);\n      this._21.decryptBlock(b, c);\n      this._23.encryptBlock(b, c)\n    },\n    decryptBlock: function(b, c) {\n      this._23.decryptBlock(b, c);\n      this._21.encryptBlock(b, c);\n      this._17.decryptBlock(b, c)\n    },\n    keySize: 6,\n    ivSize: 2,\n    blockSize: 2\n  });\n  h.TripleDES = e._6(g)\n})();\n"
  },
  {
    "path": "akshare/air/sunrise_tad.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/29 16:00\nDesc: 日出和日落数据\nhttps://www.timeanddate.com\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\n\ndef sunrise_city_list() -> list:\n    \"\"\"\n    查询日出与日落数据的城市列表\n    https://www.timeanddate.com/astronomy/china\n    :return: 所有可以获取的数据的城市列表\n    :rtype: list\n    \"\"\"\n    url = \"https://www.timeanddate.com/astronomy/china\"\n    r = requests.get(url)\n    city_list = []\n    china_city_one_df = pd.read_html(StringIO(r.text))[1]\n    china_city_two_df = pd.read_html(StringIO(r.text))[2]\n    city_list.extend([item.lower() for item in china_city_one_df.iloc[:, 0].tolist()])\n    city_list.extend([item.lower() for item in china_city_one_df.iloc[:, 3].tolist()])\n    city_list.extend([item.lower() for item in china_city_one_df.iloc[:, 6].tolist()])\n    city_list.extend([item.lower() for item in china_city_two_df.iloc[:, 0].tolist()])\n    city_list.extend([item.lower() for item in china_city_two_df.iloc[:, 1].tolist()])\n    city_list.extend([item.lower() for item in china_city_two_df.iloc[:, 2].tolist()])\n    city_list.extend([item.lower() for item in china_city_two_df.iloc[:, 3].tolist()])\n    city_list.extend(\n        [item.lower() for item in china_city_two_df.iloc[:, 4].dropna().tolist()]\n    )\n    return city_list\n\n\ndef sunrise_daily(date: str = \"20240428\", city: str = \"beijing\") -> pd.DataFrame:\n    \"\"\"\n    每日日出日落数据\n    https://www.timeanddate.com/astronomy/china/shaoxing\n    :param date: 需要查询的日期, e.g., “20200428”\n    :type date: str\n    :param city: 需要查询的城市; 注意输入的格式, e.g., \"北京\", \"上海\"\n    :type city: str\n    :return: 返回指定日期指定地区的日出日落数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import urllib3\n\n    urllib3.disable_warnings()\n    if city in sunrise_city_list():\n        year = date[:4]\n        month = date[4:6]\n        url = f\"https://www.timeanddate.com/sun/china/{city}?month={month}&year={year}\"\n        r = requests.get(url, verify=False)\n        table = pd.read_html(StringIO(r.text), header=2)[1]\n        month_df = table.iloc[:-1,]\n        day_df = month_df[\n            month_df.iloc[:, 0].astype(str).str.zfill(2) == date[6:]\n        ].copy()\n        day_df.index = pd.to_datetime([date] * len(day_df), format=\"%Y%m%d\")\n        day_df.reset_index(inplace=True)\n        day_df.rename(columns={\"index\": \"date\"}, inplace=True)\n        day_df[\"date\"] = pd.to_datetime(day_df[\"date\"]).dt.date\n        return day_df\n    else:\n        raise \"请输入正确的城市名称\"\n\n\ndef sunrise_monthly(date: str = \"20240428\", city: str = \"beijing\") -> pd.DataFrame:\n    \"\"\"\n    每个指定 date 所在月份的每日日出日落数据, 如果当前月份未到月底, 则以预测值填充\n    https://www.timeanddate.com/astronomy/china/shaoxing\n    :param date: 需要查询的日期, 这里用来指定 date 所在的月份; e.g., “20200428”\n    :type date: str\n    :param city: 需要查询的城市; 注意输入的格式, e.g., \"北京\", \"上海\"\n    :type city: str\n    :return: 指定 date 所在月份的每日日出日落数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import urllib3\n\n    urllib3.disable_warnings()\n    if city in sunrise_city_list():\n        year = date[:4]\n        month = date[4:6]\n        url = f\"https://www.timeanddate.com/sun/china/{city}?month={month}&year={year}\"\n        r = requests.get(url)\n        table = pd.read_html(StringIO(r.text), header=2)[1]\n        month_df = table.iloc[:-1,].copy()\n        month_df.index = [date[:-2]] * len(month_df)\n        month_df.reset_index(inplace=True)\n        month_df.rename(\n            columns={\n                \"index\": \"date\",\n            },\n            inplace=True,\n        )\n        return month_df\n    else:\n        raise \"请输入正确的城市名称\"\n\n\nif __name__ == \"__main__\":\n    sunrise_daily_df = sunrise_daily(date=\"20240428\", city=\"beijing\")\n    print(sunrise_daily_df)\n\n    sunrise_monthly_df = sunrise_monthly(date=\"20240428\", city=\"beijing\")\n    print(sunrise_monthly_df)\n"
  },
  {
    "path": "akshare/article/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/11/12 14:51\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/article/cons.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/11/14 20:32\nDesc: 学术板块配置文件\n\"\"\"\n\n# EPU\nepu_home_url = \"http://www.policyuncertainty.com/index.html\"\n\n# FF-Factor\nff_home_url = \"http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html\"\n"
  },
  {
    "path": "akshare/article/epu_index.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/1/20 22:00\nDesc: 经济政策不确定性指数\nhttps://www.policyuncertainty.com/index.html\n\"\"\"\n\nimport pandas as pd\n\n\ndef article_epu_index(symbol: str = \"China\") -> pd.DataFrame:\n    \"\"\"\n    经济政策不确定性指数\n    https://www.policyuncertainty.com/index.html\n    :param symbol: 指定的国家名称, e.g. “China”\n    :type symbol: str\n    :return: 经济政策不确定性指数数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    # 切勿修改 http 否则会读取不到 csv 文件\n    if symbol == \"China New\":\n        symbol = \"SCMP_China\"\n    if symbol == \"China\":\n        symbol = \"SCMP_China\"\n    if symbol == \"USA\":\n        symbol = \"US\"\n    if symbol == \"Hong Kong\":\n        symbol = \"HK\"\n        epu_df = pd.read_excel(\n            io=f\"http://www.policyuncertainty.com/media/{symbol}_EPU_Data_Annotated.xlsx\",\n            engine=\"openpyxl\",\n        )\n        return epu_df\n    if symbol in [\"Germany\", \"France\", \"Italy\"]:  # 欧洲\n        symbol = \"Europe\"\n    if symbol == \"South Korea\":\n        symbol = \"Korea\"\n    if symbol == \"Spain New\":\n        symbol = \"Spain\"\n    if symbol in [\"Ireland\", \"Chile\", \"Colombia\", \"Netherlands\", \"Singapore\", \"Sweden\"]:\n        epu_df = pd.read_excel(\n            io=f\"http://www.policyuncertainty.com/media/{symbol}_Policy_Uncertainty_Data.xlsx\",\n            engine=\"openpyxl\",\n        )\n        return epu_df\n    if symbol == \"Greece\":\n        epu_df = pd.read_excel(\n            io=f\"http://www.policyuncertainty.com/media/FKT_{symbol}_Policy_Uncertainty_Data.xlsx\",\n            engine=\"openpyxl\",\n        )\n        return epu_df\n    url = f\"http://www.policyuncertainty.com/media/{symbol}_Policy_Uncertainty_Data.csv\"\n    epu_df = pd.read_csv(url)\n    return epu_df\n\n\nif __name__ == \"__main__\":\n    article_epu_index_df = article_epu_index(symbol=\"China\")\n    print(article_epu_index_df)\n"
  },
  {
    "path": "akshare/article/ff_factor.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/1/20 22:30\nDesc: FF-data-library\nhttps://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\nfrom akshare.article.cons import ff_home_url\n\n\ndef article_ff_crr() -> pd.DataFrame:\n    \"\"\"\n    FF多因子模型\n    https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html\n    :return: FF多因子模型单一表格\n    :rtype: pandas.DataFrame\n    \"\"\"\n    res = requests.get(ff_home_url)\n    # first table\n    list_index = (\n        pd.read_html(StringIO(res.text), header=0, index_col=0)[4]\n        .iloc[2, :]\n        .index.tolist()\n    )\n    list_0 = [\n        item\n        for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]\n        .iloc[0, :]\n        .iloc[0]\n        .split(\" \")\n        if item != \"\"\n    ]\n    list_1 = [\n        item\n        for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]\n        .iloc[0, :]\n        .iloc[1]\n        .split(\" \")\n        if item != \"\"\n    ]\n    list_2 = [\n        item\n        for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]\n        .iloc[0, :]\n        .iloc[2]\n        .split(\" \")\n        if item != \"\"\n    ]\n    list_0.insert(0, \"-\")\n    list_1.insert(0, \"-\")\n    list_2.insert(0, \"-\")\n    temp_columns = (\n        pd.read_html(StringIO(res.text), header=0)[4]\n        .iloc[:, 0]\n        .str.split(\"  \", expand=True)\n        .T[0]\n        .dropna()\n        .tolist()\n    )\n    table_one = pd.DataFrame(\n        [list_0, list_1, list_2], index=list_index, columns=temp_columns\n    ).T\n\n    # second table\n    list_index = (\n        pd.read_html(StringIO(res.text), header=0, index_col=0)[4]\n        .iloc[1, :]\n        .index.tolist()\n    )\n    list_0 = [\n        item\n        for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]\n        .iloc[1, :]\n        .iloc[0]\n        .split(\" \")\n        if item != \"\"\n    ]\n    list_1 = [\n        item\n        for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]\n        .iloc[1, :]\n        .iloc[1]\n        .split(\" \")\n        if item != \"\"\n    ]\n    list_2 = [\n        item\n        for item in pd.read_html(StringIO(res.text), header=0, index_col=0)[4]\n        .iloc[1, :]\n        .iloc[2]\n        .split(\" \")\n        if item != \"\"\n    ]\n    list_0.insert(0, \"-\")\n    list_1.insert(0, \"-\")\n    list_2.insert(0, \"-\")\n    temp_columns = (\n        pd.read_html(StringIO(res.text), header=0)[4]\n        .iloc[:, 0]\n        .str.split(\"  \", expand=True)\n        .T[1]\n        .dropna()\n        .tolist()\n    )\n    table_two = pd.DataFrame(\n        [list_0, list_1, list_2], index=list_index, columns=temp_columns\n    ).T\n\n    # third table\n    df = pd.read_html(StringIO(res.text), header=0, index_col=0)[4].iloc[2, :]\n    name_list = (\n        pd.read_html(StringIO(res.text), header=0)[4]\n        .iloc[:, 0]\n        .str.split(r\"  \", expand=True)\n        .iloc[2, :]\n        .tolist()\n    )\n    value_list_0 = df.iloc[0].split(\"  \")\n    value_list_0.insert(0, \"-\")\n    value_list_0.insert(1, \"-\")\n    value_list_0.insert(8, \"-\")\n    value_list_0.insert(15, \"-\")\n\n    value_list_1 = df.iloc[1].split(\"  \")\n    value_list_1.insert(0, \"-\")\n    value_list_1.insert(1, \"-\")\n    value_list_1.insert(8, \"-\")\n    value_list_1.insert(15, \"-\")\n\n    value_list_2 = df.iloc[2].split(\"  \")\n    value_list_2.insert(0, \"-\")\n    value_list_2.insert(1, \"-\")\n    value_list_2.insert(8, \"-\")\n    value_list_2.insert(15, \"-\")\n\n    name_list.remove(\"Small Growth Big Value\")\n    name_list.insert(5, \"Small Growth\")\n    name_list.insert(6, \"Big Value\")\n    temp_list = [item for item in name_list if \"Portfolios\" not in item]\n    temp_list.insert(0, \"Fama/French Research Portfolios\")\n    temp_list.insert(1, \"Size and Book-to-Market Portfolios\")\n    temp_list.insert(8, \"Size and Operating Profitability Portfolios\")\n    temp_list.insert(15, \"Size and Investment Portfolios\")\n    temp_df = pd.DataFrame([temp_list, value_list_0, value_list_1, value_list_2]).T\n    temp_df.index = temp_df.iloc[:, 0]\n    temp_df = temp_df.iloc[:, 1:]\n    # concat\n    all_df = pd.DataFrame()\n    all_df = pd.concat([all_df, table_one])\n    all_df = pd.concat([all_df, table_two])\n    temp_df.columns = table_two.columns\n    all_df = pd.concat([all_df, temp_df])\n    all_df.reset_index(inplace=True)\n    all_df.rename(columns={\"index\": \"item\"}, inplace=True)\n    return all_df\n\n\nif __name__ == \"__main__\":\n    article_ff_crr_df = article_ff_crr()\n    print(article_ff_crr_df)\n"
  },
  {
    "path": "akshare/article/fred_md.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2020/4/10 19:58\nDesc: Economic Research from Federal Reserve Bank of St. Louis\nhttps://research.stlouisfed.org/econ/mccracken/fred-databases/\nFRED-MD and FRED-QD are large macroeconomic databases designed for the empirical analysis of “big data.” The datasets of monthly and quarterly observations mimic the coverage of datasets already used in the literature, but they add three appealing features. They are updated in real-time through the FRED database. They are publicly accessible, facilitating the replication of empirical work. And they relieve the researcher of the task of incorporating data changes and revisions (a task accomplished by the data desk at the Federal Reserve Bank of St. Louis).\n\"\"\"\n\nimport pandas as pd\n\n\ndef fred_md(date: str = \"2020-01\") -> pd.DataFrame:\n    \"\"\"\n    The accompanying paper shows that factors extracted from the FRED-MD dataset share the same predictive content as those based on the various vintages of the so-called Stock-Watson data. In addition, it suggests that diffusion indexes constructed as the partial sum of the factor estimates can potentially be useful for the study of business cycle chronology.\n    :param date: e.g., \"2020-03\"; from \"2015-01\" to now\n    :type date: str\n    :return: Monthly Data\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        f\"https://s3.amazonaws.com/files.fred.stlouisfed.org/fred-md/monthly/{date}.csv\"\n    )\n    temp_df = pd.read_csv(url)\n    return temp_df\n\n\ndef fred_qd(date: str = \"2020-01\") -> pd.DataFrame:\n    \"\"\"\n    FRED-QD is a quarterly frequency companion to FRED-MD. It is designed to emulate the dataset used in \"Disentangling the Channels of the 2007-2009 Recession\" by Stock and Watson (2012, NBER WP No. 18094) but also contains several additional series. Comments or suggestions are welcome.\n    :param date: e.g., \"2020-03\"; from \"2015-01\" to now\n    :type date: str\n    :return: Quarterly Data\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://s3.amazonaws.com/files.fred.stlouisfed.org/fred-md/quarterly/{date}.csv\"\n    temp_df = pd.read_csv(url)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fred_md_df = fred_md(date=\"2023-03\")\n    print(fred_md_df)\n\n    fred_qd_df = fred_qd(date=\"2023-03\")\n    print(fred_qd_df)\n"
  },
  {
    "path": "akshare/article/risk_rv.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/1/20 20:51\nDesc: 修大成主页-Risk Lab-Realized Volatility; Oxford-Man Institute of Quantitative Finance Realized Library\n\"\"\"\n\nimport json\n\nimport pandas as pd\nimport requests\nimport urllib3\nfrom bs4 import BeautifulSoup\n\nurllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)\n\n\ndef article_oman_rv(symbol: str = \"FTSE\", index: str = \"rk_th2\") -> pd.DataFrame:\n    \"\"\"\n    Oxford-Man Institute of Quantitative Finance Realized Library 的数据\n    :param symbol: str ['AEX', 'AORD', 'BFX', 'BSESN', 'BVLG', 'BVSP', 'DJI', 'FCHI', 'FTMIB', 'FTSE', 'GDAXI', 'GSPTSE', 'HSI', 'IBEX', 'IXIC', 'KS11', 'KSE', 'MXX', 'N225', 'NSEI', 'OMXC20', 'OMXHPI', 'OMXSPI', 'OSEAX', 'RUT', 'SMSI', 'SPX', 'SSEC', 'SSMI', 'STI', 'STOXX50E']\n    :param index: str 指标 ['medrv', 'rk_twoscale', 'bv', 'rv10', 'rv5', 'rk_th2', 'rv10_ss', 'rsv', 'rv5_ss', 'bv_ss', 'rk_parzen', 'rsv_ss']\n    :return: pandas.DataFrame\n\n    The Oxford-Man Institute's \"realised library\" contains daily non-parametric measures of how volatility financial assets or indexes were in the past. Each day's volatility measure depends solely on financial data from that day. They are driven by the use of the latest innovations in econometric modelling and theory to design them, while we draw our high frequency data from the Thomson Reuters DataScope Tick History database. Realised measures are not volatility forecasts. However, some researchers use these measures as an input into forecasting models. The aim of this line of research is to make financial markets more transparent by exposing how volatility changes through time.\n\n    This Library is used as the basis of some of our own research, which effects its scope, and is made available here to encourage the more widespread exploitation of these methods. It is given 'as is' and solely for informational purposes, please read the disclaimer.\n\n    The volatility data can be visually explored. We make the complete up-to-date dataset available for download. Lists of assets covered and realized measures available are also available.\n    | Symbol    | Name                                      | Earliest Available | Latest Available  |\n    |-----------|-------------------------------------------|--------------------|-------------------|\n    | .AEX      | AEX index                                 | January 03, 2000   | November 28, 2019 |\n    | .AORD     | All Ordinaries                            | January 04, 2000   | November 28, 2019 |\n    | .BFX      | Bell 20 Index                             | January 03, 2000   | November 28, 2019 |\n    | .BSESN    | S&P BSE Sensex                            | January 03, 2000   | November 28, 2019 |\n    | .BVLG     | PSI All-Share Index                       | October 15, 2012   | November 28, 2019 |\n    | .BVSP     | BVSP BOVESPA Index                        | January 03, 2000   | November 28, 2019 |\n    | .DJI      | Dow Jones Industrial Average              | January 03, 2000   | November 27, 2019 |\n    | .FCHI     | CAC 40                                    | January 03, 2000   | November 28, 2019 |\n    | .FTMIB    | FTSE MIB                                  | June 01, 2009      | November 28, 2019 |\n    | .FTSE     | FTSE 100                                  | January 04, 2000   | November 28, 2019 |\n    | .GDAXI    | DAX                                       | January 03, 2000   | November 28, 2019 |\n    | .GSPTSE   | S&P/TSX Composite index                   | May 02, 2002       | November 28, 2019 |\n    | .HSI      | HANG SENG Index                           | January 03, 2000   | November 28, 2019 |\n    | .IBEX     | IBEX 35 Index                             | January 03, 2000   | November 28, 2019 |\n    | .IXIC     | Nasdaq 100                                | January 03, 2000   | November 27, 2019 |\n    | .KS11     | Korea Composite Stock Price Index (KOSPI) | January 04, 2000   | November 28, 2019 |\n    | .KSE      | Karachi SE 100 Index                      | January 03, 2000   | November 28, 2019 |\n    | .MXX      | IPC Mexico                                | January 03, 2000   | November 28, 2019 |\n    | .N225     | Nikkei 225                                | February 02, 2000  | November 28, 2019 |\n    | .NSEI     | NIFTY 50                                  | January 03, 2000   | November 28, 2019 |\n    | .OMXC20   | OMX Copenhagen 20 Index                   | October 03, 2005   | November 28, 2019 |\n    | .OMXHPI   | OMX Helsinki All Share Index              | October 03, 2005   | November 28, 2019 |\n    | .OMXSPI   | OMX Stockholm All Share Index             | October 03, 2005   | November 28, 2019 |\n    | .OSEAX    | Oslo Exchange All-share Index             | September 03, 2001 | November 28, 2019 |\n    | .RUT      | Russel 2000                               | January 03, 2000   | November 27, 2019 |\n    | .SMSI     | Madrid General Index                      | July 04, 2005      | November 28, 2019 |\n    | .SPX      | S&P 500 Index                             | January 03, 2000   | November 27, 2019 |\n    | .SSEC     | Shanghai Composite Index                  | January 04, 2000   | November 28, 2019 |\n    | .SSMI     | Swiss Stock Market Index                  | January 04, 2000   | November 28, 2019 |\n    | .STI      | Straits Times Index                       | January 03, 2000   | November 28, 2019 |\n    | .STOXX50E | EURO STOXX 50                             | January 03, 2000   | November 28, 2019 |\n    \"\"\"\n    url = \"https://realized.oxford-man.ox.ac.uk/theme/js/visualization-data.js?20191111113154\"\n    res = requests.get(url)\n    soup = BeautifulSoup(res.text, \"lxml\")\n    soup_text = soup.find(\"p\").get_text()\n    data_json = json.loads(soup_text[soup_text.find(\"{\") : soup_text.rfind(\"};\") + 1])\n    date_list = data_json[f\".{symbol}\"][\"dates\"]\n    temp_df = pd.DataFrame([date_list, data_json[f\".{symbol}\"][index][\"data\"]]).T\n    temp_df.index = pd.to_datetime(temp_df.iloc[:, 0], unit=\"ms\")\n    temp_df = temp_df.iloc[:, 1]\n    temp_df.index.name = \"date\"\n    temp_df.name = f\"{symbol}-{index}\"\n    return temp_df\n\n\ndef article_oman_rv_short(symbol: str = \"FTSE\") -> pd.DataFrame:\n    \"\"\"\n    Oxford-Man Institute of Quantitative Finance Realized Library 的数据\n    :param symbol: str FTSE: FTSE 100, GDAXI: DAX, RUT: Russel 2000, SPX: S&P 500 Index, STOXX50E: EURO STOXX 50, SSEC: Shanghai Composite Index, N225: Nikkei 225\n    :return: pandas.DataFrame\n\n    The Oxford-Man Institute's \"realised library\" contains daily non-parametric measures of how volatility financial assets or indexes were in the past. Each day's volatility measure depends solely on financial data from that day. They are driven by the use of the latest innovations in econometric modelling and theory to design them, while we draw our high frequency data from the Thomson Reuters DataScope Tick History database. Realised measures are not volatility forecasts. However, some researchers use these measures as an input into forecasting models. The aim of this line of research is to make financial markets more transparent by exposing how volatility changes through time.\n\n    This Library is used as the basis of some of our own research, which effects its scope, and is made available here to encourage the more widespread exploitation of these methods. It is given 'as is' and solely for informational purposes, please read the disclaimer.\n\n    The volatility data can be visually explored. We make the complete up-to-date dataset available for download. Lists of assets covered and realized measures available are also available.\n    \"\"\"\n    url = \"https://realized.oxford-man.ox.ac.uk/theme/js/front-page-chart.js\"\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"realized.oxford-man.ox.ac.uk\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://realized.oxford-man.ox.ac.uk/?from=groupmessage&isappinstalled=0\",\n        \"Sec-Fetch-Mode\": \"no-cors\",\n        \"Sec-Fetch-Site\": \"same-origin\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36\",\n    }\n\n    res = requests.get(url, headers=headers, verify=False)\n    soup = BeautifulSoup(res.text, \"lxml\")\n    soup_text = soup.find(\"p\").get_text()\n    data_json = json.loads(soup_text[soup_text.find(\"{\") : soup_text.rfind(\"}\") + 1])\n    temp_df = pd.DataFrame(data_json[f\".{symbol}\"][\"data\"])\n    temp_df.index = pd.to_datetime(temp_df.iloc[:, 0], unit=\"ms\")\n    temp_df = temp_df.iloc[:, 1]\n    temp_df.index.name = \"date\"\n    temp_df.name = f\"{symbol}\"\n    return temp_df\n\n\ndef article_rlab_rv(symbol: str = \"39693\") -> pd.DataFrame:\n    \"\"\"\n    修大成主页-Risk Lab-Realized Volatility\n    :param symbol: str 股票代码\n    :return: pandas.DataFrame\n    1996-01-02    0.000000\n    1996-01-04    0.000000\n    1996-01-05    0.000000\n    1996-01-09    0.000000\n    1996-01-10    0.000000\n                    ...\n    2019-11-04    0.175107\n    2019-11-05    0.185112\n    2019-11-06    0.210373\n    2019-11-07    0.240808\n    2019-11-08    0.199549\n    Name: RV, Length: 5810, dtype: float64\n\n    Website\n    https://dachxiu.chicagobooth.edu/\n\n    Objective\n    We provide up-to-date daily annualized realized volatilities for individual stocks, ETFs, and future contracts, which are estimated from high-frequency data. We are in the process of incorporating equities from global markets.\n\n    Data\n    We collect trades at their highest frequencies available (up to every millisecond for US equities after 2007), and clean them using the prevalent national best bid and offer (NBBO) that are available up to every second. The mid-quotes are calculated based on the NBBOs, so their highest sampling frequencies are also up to every second.\n\n    Methodology\n    We provide quasi-maximum likelihood estimates of volatility (QMLE) based on moving-average models MA(q), using non-zero returns of transaction prices (or mid-quotes if available) sampled up to their highest frequency available, for days with at least 12 observations. We select the best model (q) using Akaike Information Criterion (AIC). For comparison, we report realized volatility (RV) estimates using 5-minute and 15-minute subsampled returns.\n\n    References\n    1. “When Moving-Average Models Meet High-Frequency Data: Uniform Inference on Volatility”, by Rui Da and Dacheng Xiu. 2017.\n    2. “Quasi-Maximum Likelihood Estimation of Volatility with High Frequency Data”, by Dacheng Xiu. Journal of Econometrics, 159 (2010), 235-250.\n    3. “How Often to Sample A Continuous-time Process in the Presence of Market Microstructure Noise”, by Yacine Aït-Sahalia, Per Mykland, and Lan Zhang. Review of Financial Studies, 18 (2005), 351–416.\n    4. “The Distribution of Exchange Rate Volatility”, by Torben Andersen, Tim Bollerslev, Francis X. Diebold, and Paul Labys. Journal of the American Statistical Association, 96 (2001), 42-55.\n    5. “Econometric Analysis of Realized Volatility and Its Use in Estimating Stochastic Volatility Models”, by Ole E Barndorff‐Nielsen and Neil Shephard. Journal of the Royal Statistical Society: Series B, 64 (2002), 253-280.\n    \"\"\"\n    print(\"由于服务器在国外, 请稍后, 如果访问失败, 请使用代理工具\")\n    url = \"https://dachxiu.chicagobooth.edu/data.php\"\n    payload = {\"ticker\": symbol}\n    res = requests.get(url, params=payload, verify=False)\n    soup = BeautifulSoup(res.text, \"lxml\")\n    title_fore = (\n        pd.DataFrame(soup.find(\"p\").get_text().split(symbol)).iloc[0, 0].strip()\n    )\n    title_list = (\n        pd.DataFrame(soup.find(\"p\").get_text().split(symbol))\n        .iloc[1, 0]\n        .strip()\n        .split(\"\\n\")\n    )\n    title_list.insert(0, title_fore)\n    temp_df = pd.DataFrame(soup.find(\"p\").get_text().split(symbol)).iloc[2:, :]\n    temp_df = temp_df.iloc[:, 0].str.split(\" \", expand=True)\n    temp_df = temp_df.iloc[:, 1:]\n    temp_df.iloc[:, -1] = temp_df.iloc[:, -1].str.replace(r\"\\n\", \"\")\n    temp_df.reset_index(inplace=True)\n    temp_df.index = pd.to_datetime(temp_df.iloc[:, 1], format=\"%Y%m%d\", errors=\"coerce\")\n    temp_df = temp_df.iloc[:, 1:]\n    data_se = temp_df.iloc[:, 1]\n    data_se.name = \"RV\"\n    temp_df = data_se.astype(\"float\", errors=\"ignore\")\n    temp_df.index.name = \"date\"\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    article_rlab_rv_df = article_rlab_rv(symbol=\"39693\")\n    print(article_rlab_rv_df)\n\n    article_oman_rv_short_df = article_oman_rv_short(symbol=\"FTSE\")\n    print(article_oman_rv_short_df)\n\n    article_oman_rv_df = article_oman_rv(symbol=\"FTSE\", index=\"rk_th2\")\n    print(article_oman_rv_df)\n"
  },
  {
    "path": "akshare/bank/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/11/7 14:06\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/bank/bank_cbirc_2020.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/2/4 23:00\nDesc: 中国银行保险监督管理委员会-首页-政务信息-行政处罚-银保监分局本级-XXXX行政处罚信息公开表\nhttps://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931&itemsubPName=%E8%A1%8C%E6%94%BF%E5%A4%84%E7%BD%9A#2\n提取 具体页面 html 页面的 json 接口\nhttps://www.nfra.gov.cn/cn/static/data/DocInfo/SelectByDocId/data_docId=881446.json\n2020 新接口\n\"\"\"\n\nimport warnings\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom tqdm import tqdm\n\nfrom akshare.bank.cons import cbirc_headers_without_cookie_2020\n\n\ndef bank_fjcf_total_num(item: str = \"分局本级\") -> int:\n    \"\"\"\n    首页-政务信息-行政处罚-银保监分局本级 总页数\n    https://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931\n    :param item: choice of {\"机关\", \"本级\", \"分局本级\"}\n    :type item: str\n    :return: 总页数\n    :rtype: int\n    \"\"\"\n    item_id_list = {\n        \"机关\": \"4113\",\n        \"本级\": \"4114\",\n        \"分局本级\": \"4115\",\n    }\n    cbirc_headers = cbirc_headers_without_cookie_2020.copy()\n    main_url = \"https://www.nfra.gov.cn/cbircweb/DocInfo/SelectDocByItemIdAndChild\"\n    params = {\n        \"itemId\": item_id_list[item],\n        \"pageSize\": \"18\",\n        \"pageIndex\": \"1\",\n    }\n    res = requests.get(main_url, params=params, headers=cbirc_headers)\n    return int(res.json()[\"data\"][\"total\"])\n\n\ndef bank_fjcf_total_page(item: str = \"分局本级\", begin: int = 1) -> int:\n    \"\"\"\n    获取首页-政务信息-行政处罚-银保监分局本级的总页数\n    https://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931\n    :param item: choice of {\"机关\", \"本级\", \"分局本级\"}\n    :type item: str\n    :param begin: 开始页数\n    :type begin: str\n    :return: 总页数\n    :rtype: int\n    \"\"\"\n    item_id_list = {\n        \"机关\": \"4113\",\n        \"本级\": \"4114\",\n        \"分局本级\": \"4115\",\n    }\n    cbirc_headers = cbirc_headers_without_cookie_2020.copy()\n    main_url = \"https://www.nfra.gov.cn/cbircweb/DocInfo/SelectDocByItemIdAndChild\"\n    params = {\n        \"itemId\": item_id_list[item],\n        \"pageSize\": \"18\",\n        \"pageIndex\": str(begin),\n    }\n    res = requests.get(main_url, params=params, headers=cbirc_headers)\n    if res.json()[\"data\"][\"total\"] / 18 > int(res.json()[\"data\"][\"total\"] / 18):\n        total_page = int(res.json()[\"data\"][\"total\"] / 18) + 1\n        return total_page\n\n\ndef bank_fjcf_page_url(\n    page: int = 5, item: str = \"分局本级\", begin: int = 1\n) -> pd.DataFrame:\n    \"\"\"\n    获取 首页-政务信息-行政处罚-银保监分局本级-每一页的 json 数据\n    :param page: 需要获取前 page 页的内容, 总页数请通过 ak.bank_fjcf_total_page() 获取\n    :type page: int\n    :param item: choice of {\"机关\", \"本级\", \"分局本级\"}\n    :type item: str\n    :param begin: 开始页数\n    :type begin: str\n    :return: 需要的字段\n    :rtype: pandas.DataFrame\n    \"\"\"\n    item_id_list = {\n        \"机关\": \"4113\",\n        \"本级\": \"4114\",\n        \"分局本级\": \"4115\",\n    }\n    cbirc_headers = cbirc_headers_without_cookie_2020.copy()\n    main_url = \"https://www.nfra.gov.cn/cbircweb/DocInfo/SelectDocByItemIdAndChild\"\n    temp_df = pd.DataFrame()\n    for i_page in tqdm(range(begin, page + begin), leave=False):\n        params = {\n            \"itemId\": item_id_list[item],\n            \"pageSize\": \"18\",\n            \"pageIndex\": str(i_page),\n        }\n        res = requests.get(main_url, params=params, headers=cbirc_headers)\n        temp_df = pd.concat([temp_df, pd.DataFrame(res.json()[\"data\"][\"rows\"])])\n    return temp_df[\n        [\"docId\", \"docSubtitle\", \"publishDate\", \"docFileUrl\", \"docTitle\", \"generaltype\"]\n    ]\n\n\ndef bank_fjcf_table_detail(\n    page: int = 5, item: str = \"分局本级\", begin: int = 1\n) -> pd.DataFrame:\n    \"\"\"\n    获取 首页-政务信息-行政处罚-银保监分局本级-XXXX行政处罚信息公开表 数据\n    :param page: 需要获取前 page 页的内容, 总页数请通过 ak.bank_fjcf_total_page() 获取\n    :type page: int\n    :param item: choice of {\"机关\", \"本级\", \"分局本级\"}\n    :type item: str\n    :param begin: 开始页面\n    :type begin: int\n    :return: 返回所有行政处罚信息公开表的集合, 按第一页到最后一页的顺序排列\n    :rtype: pandas.DataFrame\n    \"\"\"\n    id_list = bank_fjcf_page_url(page=page, item=item, begin=begin)[\"docId\"]\n    big_df = pd.DataFrame()\n    for item in id_list:\n        url = f\"https://www.nfra.gov.cn/cn/static/data/DocInfo/SelectByDocId/data_docId={item}.json\"\n        res = requests.get(url)\n        try:\n            table_list = pd.read_html(StringIO(res.json()[\"data\"][\"docClob\"]))[0]\n            if table_list.shape[1] == 2:\n                table_list = table_list.iloc[:, 1].values.tolist()\n            else:\n                table_list = table_list.iloc[:, 3:].values.tolist()\n            # 部分旧表缺少字段，所以填充\n            if len(table_list) == 7:\n                table_list.insert(2, pd.NA)\n                table_list.insert(3, pd.NA)\n                table_list.insert(4, pd.NA)\n            elif len(table_list) == 8:\n                table_list.insert(1, pd.NA)\n                table_list.insert(2, pd.NA)\n            elif len(table_list) == 9:\n                table_list.insert(2, pd.NA)\n            elif len(table_list) == 11:\n                table_list = table_list[2:]\n                table_list.insert(2, pd.NA)\n            else:\n                print(\n                    f\"{item} 异常，请通过 https://www.nfra.gov.cn/cn/view/pages/ItemDetail.html?docId={item} 查看\"\n                )\n                continue\n\n            # 部分会变成嵌套列表, 这里还原\n            table_list = [\n                item[0] if isinstance(item, list) else item for item in table_list\n            ]\n            table_list.append(str(item))\n            table_list.append(res.json()[\"data\"][\"publishDate\"])\n            table_df = pd.DataFrame(table_list)\n            table_df.columns = [\"内容\"]\n            big_df = pd.concat(objs=[big_df, table_df.T], ignore_index=True)\n            # 解决有些页面缺少字段的问题, 都放到 try 里面\n        except:  # noqa: E722\n            warnings.warn(f\"{item} 不是表格型数据，将跳过采集\")\n            continue\n    if big_df.empty:\n        return pd.DataFrame()\n    big_df.columns = [\n        \"行政处罚决定书文号\",\n        \"姓名\",\n        \"单位\",  # 20200108 新增\n        \"单位名称\",\n        \"主要负责人姓名\",\n        \"主要违法违规事实（案由）\",\n        \"行政处罚依据\",\n        \"行政处罚决定\",\n        \"作出处罚决定的机关名称\",\n        \"作出处罚决定的日期\",\n        \"处罚ID\",\n        \"处罚公布日期\",\n    ]\n    return big_df\n\n\nif __name__ == \"__main__\":\n    bank_fjcf_table_detail_df = bank_fjcf_table_detail(page=1, item=\"机关\", begin=1)\n    print(bank_fjcf_table_detail_df)\n"
  },
  {
    "path": "akshare/bank/cons.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/4/3 21:06\nDesc: 银保监会配置文件\n\"\"\"\n\ncbirc_headers_without_cookie_2020 = {\n    \"Accept\": \"*/*\",\n    \"Accept-Encoding\": \"gzip, deflate\",\n    \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    \"Cache-Control\": \"no-cache\",\n    \"Connection\": \"keep-alive\",\n    \"Host\": \"www.nfra.gov.cn\",\n    \"Pragma\": \"no-cache\",\n    \"Referer\": \"http://www.nfra.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=4115&itemUrl=ItemListRightList.html&itemName=%E9%93%B6%E4%BF%9D%E7%9B%91%E5%88%86%E5%B1%80%E6%9C%AC%E7%BA%A7&itemsubPId=931&itemsubPName=%E8%A1%8C%E6%94%BF%E5%A4%84%E7%BD%9A\",\n    \"X-Requested-With\": \"XMLHttpRequest\",\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36\",\n}\n\ncbirc_headers_without_cookie_2019 = {\n    \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3\",\n    \"Accept-Encoding\": \"gzip, deflate\",\n    \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    \"Cache-Control\": \"no-cache\",\n    \"Connection\": \"keep-alive\",\n    \"Host\": \"www.nfra.gov.cn\",\n    \"Pragma\": \"no-cache\",\n    \"Referer\": \"http://www.nfra.gov.cn/cn/list/9103/910305/ybjjcf/1.html\",\n    \"Upgrade-Insecure-Requests\": \"1\",\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36\",\n}\n"
  },
  {
    "path": "akshare/bond/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/9/30 13:58\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/bond/bond_buy_back_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/4/5 17:30\nDesc: 东方财富网-行情中心-债券市场-质押式回购\nhttps://quote.eastmoney.com/center/gridlist.html#bond_sz_buyback\n\"\"\"\n\nimport pandas as pd\n\nimport requests\n\n\ndef bond_sh_buy_back_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-债券市场-上证质押式回购\n    https://quote.eastmoney.com/center/gridlist.html#bond_sh_buyback\n    :return: 上证质押式回购\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"np\": \"1\",\n        \"fltt\": \"1\",\n        \"invt\": \"2\",\n        \"fs\": \"m:1+b:MK0356\",\n        \"fields\": \"f12,f13,f14,f1,f2,f4,f3,f152,f17,f18,f15,f16,f5,f6\",\n        \"fid\": \"f6\",\n        \"pn\": \"1\",\n        \"pz\": \"20\",\n        \"po\": \"1\",\n        \"dect\": \"1\",\n        \"wbp2u\": \"|0|0|0|web\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df[\"index\"] + 1\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"f2\": \"最新价\",\n            \"f3\": \"涨跌幅\",\n            \"f4\": \"涨跌额\",\n            \"f5\": \"成交量\",\n            \"f6\": \"成交额\",\n            \"f12\": \"代码\",\n            \"f14\": \"名称\",\n            \"f15\": \"最高\",\n            \"f16\": \"最低\",\n            \"f17\": \"今开\",\n            \"f18\": \"昨收\",\n        },\n        inplace=True,\n    )\n\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"昨收\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\") / 1000\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\") / 100\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\") / 1000\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\") / 1000\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\") / 1000\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\") / 1000\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\") / 1000\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef bond_sz_buy_back_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-债券市场-深证质押式回购\n    https://quote.eastmoney.com/center/gridlist.html#bond_sz_buyback\n    :return: 深证质押式回购\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"np\": \"1\",\n        \"fltt\": \"1\",\n        \"invt\": \"2\",\n        \"fs\": \"m:0+b:MK0356\",\n        \"fields\": \"f12,f13,f14,f1,f2,f4,f3,f152,f17,f18,f15,f16,f5,f6\",\n        \"fid\": \"f6\",\n        \"pn\": \"1\",\n        \"pz\": \"20\",\n        \"po\": \"1\",\n        \"dect\": \"1\",\n        \"wbp2u\": \"|0|0|0|web\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df[\"index\"] + 1\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"f2\": \"最新价\",\n            \"f3\": \"涨跌幅\",\n            \"f4\": \"涨跌额\",\n            \"f5\": \"成交量\",\n            \"f6\": \"成交额\",\n            \"f12\": \"代码\",\n            \"f14\": \"名称\",\n            \"f15\": \"最高\",\n            \"f16\": \"最低\",\n            \"f17\": \"今开\",\n            \"f18\": \"昨收\",\n        },\n        inplace=True,\n    )\n\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"昨收\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\") / 1000\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\") / 100\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\") / 1000\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\") / 1000\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\") / 1000\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\") / 1000\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\") / 1000\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef bond_buy_back_hist_em(symbol: str = \"204001\"):\n    \"\"\"\n    东方财富网-行情中心-债券市场-质押式回购-历史数据\n    https://quote.eastmoney.com/center/gridlist.html#bond_sh_buyback\n    :param symbol: 质押式回购代码\n    :type symbol: str\n    :return: 历史数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if symbol.startswith(\"1\"):\n        market_id = \"0\"\n    else:\n        market_id = \"1\"\n    url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n    params = {\n        \"secid\": f\"{market_id}.{symbol}\",\n        \"klt\": \"101\",\n        \"fqt\": \"1\",\n        \"lmt\": \"10000\",\n        \"end\": \"20500000\",\n        \"iscca\": \"1\",\n        \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64\",\n        \"forcect\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df.columns = [\n        \"日期\",\n        \"开盘\",\n        \"收盘\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    bond_sh_buy_back_em_df = bond_sh_buy_back_em()\n    print(bond_sh_buy_back_em_df)\n\n    bond_sz_buy_back_em_df = bond_sz_buy_back_em()\n    print(bond_sz_buy_back_em_df)\n\n    bond_buy_back_hist_em_df = bond_buy_back_hist_em(symbol=\"204001\")\n    print(bond_buy_back_hist_em_df)\n\n    bond_buy_back_hist_em_df = bond_buy_back_hist_em(symbol=\"131810\")\n    print(bond_buy_back_hist_em_df)\n"
  },
  {
    "path": "akshare/bond/bond_cb_sina.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2023/9/12 16:50\nDesc: 新浪财经-债券-可转债\nhttps://money.finance.sina.com.cn/bond/info/sz128039.html\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\n\ndef bond_cb_profile_sina(symbol: str = \"sz128039\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-债券-可转债-详情资料\n    https://money.finance.sina.com.cn/bond/info/sz128039.html\n    :param symbol: 带市场标识的转债代码\n    :type symbol: str\n    :return: 可转债-详情资料\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://money.finance.sina.com.cn/bond/info/{symbol}.html\"\n    r = requests.get(url)\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df.columns = [\"item\", \"value\"]\n    return temp_df\n\n\ndef bond_cb_summary_sina(symbol: str = \"sh155255\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-债券-可转债-债券概况\n    https://money.finance.sina.com.cn/bond/quotes/sh155255.html\n    :param symbol: 带市场标识的转债代码\n    :type symbol: str\n    :return: 可转债-债券概况\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://money.finance.sina.com.cn/bond/quotes/{symbol}.html\"\n    r = requests.get(url)\n    temp_df = pd.read_html(StringIO(r.text))[10]\n    part1 = temp_df.iloc[:, 0:2].copy()\n    part1.columns = [\"item\", \"value\"]\n    part2 = temp_df.iloc[:, 2:4].copy()\n    part2.columns = [\"item\", \"value\"]\n    part3 = temp_df.iloc[:, 4:6].copy()\n    part3.columns = [\"item\", \"value\"]\n    big_df = pd.concat(objs=[part1, part2, part3], ignore_index=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    bond_cb_profile_sina_df = bond_cb_profile_sina(symbol=\"sz128039\")\n    print(bond_cb_profile_sina_df)\n\n    bond_cb_summary_sina_df = bond_cb_summary_sina(symbol=\"sh155255\")\n    print(bond_cb_summary_sina_df)\n"
  },
  {
    "path": "akshare/bond/bond_cb_ths.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/8/14 11:30\nDesc: 同花顺-数据中心-可转债\nhttps://data.10jqka.com.cn/ipo/bond/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef bond_zh_cov_info_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-可转债\n    https://data.10jqka.com.cn/ipo/bond/\n    :return: 可转债行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://data.10jqka.com.cn/ipo/kzz/\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/89.0.4389.90 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"list\"])\n    temp_df.rename(\n        columns={\n            \"sub_date\": \"申购日期\",\n            \"bond_code\": \"债券代码\",\n            \"bond_name\": \"债券简称\",\n            \"code\": \"正股代码\",\n            \"name\": \"正股简称\",\n            \"sub_code\": \"申购代码\",\n            \"share_code\": \"原股东配售码\",\n            \"sign_date\": \"中签公布日\",\n            \"plan_total\": \"计划发行量\",\n            \"issue_total\": \"实际发行量\",\n            \"issue_price\": \"-\",\n            \"success_rate\": \"中签率\",\n            \"listing_date\": \"上市日期\",\n            \"expire_date\": \"到期时间\",\n            \"price\": \"转股价格\",\n            \"quota\": \"每股获配额\",\n            \"number\": \"中签号\",\n            \"market_id\": \"-\",\n            \"stock_market_id\": \"-\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"债券代码\",\n            \"债券简称\",\n            \"申购日期\",\n            \"申购代码\",\n            \"原股东配售码\",\n            \"每股获配额\",\n            \"计划发行量\",\n            \"实际发行量\",\n            \"中签公布日\",\n            \"中签号\",\n            \"上市日期\",\n            \"正股代码\",\n            \"正股简称\",\n            \"转股价格\",\n            \"到期时间\",\n            \"中签率\",\n        ]\n    ]\n    temp_df[\"申购日期\"] = pd.to_datetime(\n        temp_df[\"申购日期\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"中签公布日\"] = pd.to_datetime(\n        temp_df[\"中签公布日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"上市日期\"] = pd.to_datetime(\n        temp_df[\"上市日期\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"到期时间\"] = pd.to_datetime(\n        temp_df[\"到期时间\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"每股获配额\"] = pd.to_numeric(temp_df[\"每股获配额\"], errors=\"coerce\")\n    temp_df[\"计划发行量\"] = pd.to_numeric(temp_df[\"计划发行量\"], errors=\"coerce\")\n    temp_df[\"实际发行量\"] = pd.to_numeric(temp_df[\"实际发行量\"], errors=\"coerce\")\n    temp_df[\"转股价格\"] = pd.to_numeric(temp_df[\"转股价格\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    bond_zh_cov_info_ths_df = bond_zh_cov_info_ths()\n    print(bond_zh_cov_info_ths_df)\n"
  },
  {
    "path": "akshare/bond/bond_cbond.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2022/9/20 17:46\nDesc: 中国债券信息网-中债指数-中债指数族系-总指数-综合类指数\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef bond_new_composite_index_cbond(\n    indicator: str = \"财富\", period: str = \"总值\"\n) -> pd.DataFrame:\n    \"\"\"\n    中国债券信息网-中债指数-中债指数族系-总指数-综合类指数-中债-新综合指数\n    https://yield.chinabond.com.cn/cbweb-mn/indices/single_index_query\n    :param indicator: choice of {\"全价\", \"净价\", \"财富\", \"平均市值法久期\", \"平均现金流法久期\", \"平均市值法凸性\", \"平均现金流法凸性\", \"平均现金流法到期收益率\", \"平均市值法到期收益率\", \"平均基点价值\", \"平均待偿期\", \"平均派息率\", \"指数上日总市值\", \"财富指数涨跌幅\", \"全价指数涨跌幅\", \"净价指数涨跌幅\", \"现券结算量\"}\n    :type indicator: str\n    :param period: choice of {\"总值\", \"1年以下\", \"1-3年\", \"3-5年\", \"5-7年\", \"7-10年\", \"10年以上\", \"0-3个月\", \"3-6个月\", \"6-9个月\", \"9-12个月\", \"0-6个月\", \"6-12个月\"}\n    :type period: str\n    :return: 新综合指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    indicator_map = {\n        \"全价\": \"QJZS\",\n        \"净价\": \"JJZS\",\n        \"财富\": \"CFZS\",\n        \"平均市值法久期\": \"PJSZFJQ\",\n        \"平均现金流法久期\": \"PJXJLFJQ\",\n        \"平均市值法凸性\": \"PJSZFTX\",\n        \"平均现金流法凸性\": \"PJXJLFTX\",\n        \"平均现金流法到期收益率\": \"PJDQSYL\",\n        \"平均市值法到期收益率\": \"PJSZFDQSYL\",\n        \"平均基点价值\": \"PJJDJZ\",\n        \"平均待偿期\": \"PJDCQ\",\n        \"平均派息率\": \"PJPXL\",\n        \"指数上日总市值\": \"ZSZSZ\",\n        \"财富指数涨跌幅\": \"CFZSZDF\",\n        \"全价指数涨跌幅\": \"QJZSZDF\",\n        \"净价指数涨跌幅\": \"JJZSZDF\",\n        \"现券结算量\": \"XQJSL\",\n    }\n    period_map = {\n        \"总值\": \"00\",\n        \"1年以下\": \"01\",\n        \"1-3年\": \"02\",\n        \"3-5年\": \"03\",\n        \"5-7年\": \"04\",\n        \"7-10年\": \"05\",\n        \"10年以上\": \"06\",\n        \"0-3个月\": \"07\",\n        \"3-6个月\": \"08\",\n        \"6-9个月\": \"09\",\n        \"9-12个月\": \"10\",\n        \"0-6个月\": \"11\",\n        \"6-12个月\": \"12\",\n    }\n    url = \"https://yield.chinabond.com.cn/cbweb-mn/indices/singleIndexQuery\"\n    params = {\n        \"indexid\": \"8a8b2ca0332abed20134ea76d8885831\",\n        \"\": \"\",  # noqa: F601\n        \"qxlxt\": period_map[period],\n        \"\": \"\",  # noqa: F601\n        \"ltcslx\": \"\",\n        \"\": \"\",  # noqa: F601\n        \"zslxt\": indicator_map[indicator],  # noqa: F601\n        \"\": \"\",  # noqa: F601\n        \"zslxt\": indicator_map[indicator],  # noqa: F601\n        \"\": \"\",  # noqa: F601\n        \"lx\": \"1\",\n        \"\": \"\",  # noqa: F601\n        \"locale\": \"\",\n    }\n    r = requests.post(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame.from_dict(\n        data_json[f\"{indicator_map[indicator]}_{period_map[period]}\"],\n        orient=\"index\",\n    )\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\"date\", \"value\"]\n    temp_df[\"date\"] = temp_df[\"date\"].astype(float)\n    temp_df[\"date\"] = (\n        pd.to_datetime(temp_df[\"date\"], unit=\"ms\", errors=\"coerce\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n    return temp_df\n\n\ndef bond_composite_index_cbond(\n    indicator: str = \"财富\", period: str = \"总值\"\n) -> pd.DataFrame:\n    \"\"\"\n    中国债券信息网-中债指数-中债指数族系-总指数-综合类指数-中债-综合指数\n    https://yield.chinabond.com.cn/cbweb-mn/indices/single_index_query\n    :param indicator: choice of {\"全价\", \"净价\", \"财富\", \"平均市值法久期\", \"平均现金流法久期\", \"平均市值法凸性\", \"平均现金流法凸性\", \"平均现金流法到期收益率\", \"平均市值法到期收益率\", \"平均基点价值\", \"平均待偿期\", \"平均派息率\", \"指数上日总市值\", \"财富指数涨跌幅\", \"全价指数涨跌幅\", \"净价指数涨跌幅\", \"现券结算量\"}\n    :type indicator: str\n    :param period: choice of {\"总值\", \"1年以下\", \"1-3年\", \"3-5年\", \"5-7年\", \"7-10年\", \"10年以上\", \"0-3个月\", \"3-6个月\", \"6-9个月\", \"9-12个月\", \"0-6个月\", \"6-12个月\"}\n    :type period: str\n    :return: 新综合指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    indicator_map = {\n        \"全价\": \"QJZS\",\n        \"净价\": \"JJZS\",\n        \"财富\": \"CFZS\",\n        \"平均市值法久期\": \"PJSZFJQ\",\n        \"平均现金流法久期\": \"PJXJLFJQ\",\n        \"平均市值法凸性\": \"PJSZFTX\",\n        \"平均现金流法凸性\": \"PJXJLFTX\",\n        \"平均现金流法到期收益率\": \"PJDQSYL\",\n        \"平均市值法到期收益率\": \"PJSZFDQSYL\",\n        \"平均基点价值\": \"PJJDJZ\",\n        \"平均待偿期\": \"PJDCQ\",\n        \"平均派息率\": \"PJPXL\",\n        \"指数上日总市值\": \"ZSZSZ\",\n        \"财富指数涨跌幅\": \"CFZSZDF\",\n        \"全价指数涨跌幅\": \"QJZSZDF\",\n        \"净价指数涨跌幅\": \"JJZSZDF\",\n        \"现券结算量\": \"XQJSL\",\n    }\n    period_map = {\n        \"总值\": \"00\",\n        \"1年以下\": \"01\",\n        \"1-3年\": \"02\",\n        \"3-5年\": \"03\",\n        \"5-7年\": \"04\",\n        \"7-10年\": \"05\",\n        \"10年以上\": \"06\",\n        \"0-3个月\": \"07\",\n        \"3-6个月\": \"08\",\n        \"6-9个月\": \"09\",\n        \"9-12个月\": \"10\",\n        \"0-6个月\": \"11\",\n        \"6-12个月\": \"12\",\n    }\n    url = \"https://yield.chinabond.com.cn/cbweb-mn/indices/singleIndexQuery\"\n    params = {\n        \"indexid\": \"2c90818811afed8d0111c0c672b31578\",\n        \"\": \"\",  # noqa: F601\n        \"qxlxt\": period_map[period],\n        \"\": \"\",  # noqa: F601\n        \"zslxt\": indicator_map[indicator],\n        \"\": \"\",  # noqa: F601\n        \"lx\": \"1\",\n        \"\": \"\",  # noqa: F601\n        \"locale\": \"\",\n    }\n    r = requests.post(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame.from_dict(\n        data_json[f\"{indicator_map[indicator]}_{period_map[period]}\"],\n        orient=\"index\",\n    )\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\"date\", \"value\"]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], unit=\"ms\").dt.date\n    temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"])\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    bond_new_composite_index_cbond_df = bond_new_composite_index_cbond(\n        indicator=\"财富\", period=\"总值\"\n    )\n    print(bond_new_composite_index_cbond_df)\n\n    bond_composite_index_cbond_df = bond_composite_index_cbond(\n        indicator=\"财富\", period=\"总值\"\n    )\n    print(bond_composite_index_cbond_df)\n"
  },
  {
    "path": "akshare/bond/bond_china.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/10/1 17:00\nDesc: 中国外汇交易中心暨全国银行间同业拆借中心\n中国外汇交易中心暨全国银行间同业拆借中心-市场数据-债券市场行情-现券市场做市报价\n中国外汇交易中心暨全国银行间同业拆借中心-市场数据-债券市场行情-现券市场成交行情\nhttps://www.chinamoney.com.cn/chinese/mkdatabond/\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\nfrom akshare.bond.bond_china_money import bond_china_close_return_map\nfrom akshare.utils.cons import headers\n\n\ndef bond_spot_quote() -> pd.DataFrame:\n    \"\"\"\n    中国外汇交易中心暨全国银行间同业拆借中心-市场数据-债券市场行情-现券市场做市报价\n    https://www.chinamoney.com.cn/chinese/mkdatabond/\n    :return: 现券市场做市报价\n    :rtype: pandas.DataFrame\n    \"\"\"\n    bond_china_close_return_map()\n    url = \"https://www.chinamoney.com.cn/ags/ms/cm-u-md-bond/CbMktMakQuot\"\n    payload = {\n        \"flag\": \"1\",\n        \"lang\": \"cn\",\n    }\n    r = requests.post(url=url, data=payload, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.columns = [\n        \"_\",\n        \"_\",\n        \"报价机构\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"债券简称\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"买入/卖出收益率\",\n        \"_\",\n        \"买入/卖出净价\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"报价机构\",\n            \"债券简称\",\n            \"买入/卖出净价\",\n            \"买入/卖出收益率\",\n        ]\n    ]\n    temp_df[\"买入净价\"] = (\n        temp_df[\"买入/卖出净价\"].str.split(\"/\", expand=True).iloc[:, 0]\n    )\n    temp_df[\"卖出净价\"] = (\n        temp_df[\"买入/卖出净价\"].str.split(\"/\", expand=True).iloc[:, 1]\n    )\n    temp_df[\"买入收益率\"] = (\n        temp_df[\"买入/卖出收益率\"].str.split(\"/\", expand=True).iloc[:, 0]\n    )\n    temp_df[\"卖出收益率\"] = (\n        temp_df[\"买入/卖出收益率\"].str.split(\"/\", expand=True).iloc[:, 1]\n    )\n    del temp_df[\"买入/卖出净价\"]\n    del temp_df[\"买入/卖出收益率\"]\n    temp_df[\"买入净价\"] = pd.to_numeric(temp_df[\"买入净价\"], errors=\"coerce\")\n    temp_df[\"卖出净价\"] = pd.to_numeric(temp_df[\"卖出净价\"], errors=\"coerce\")\n    temp_df[\"买入收益率\"] = pd.to_numeric(temp_df[\"买入收益率\"], errors=\"coerce\")\n    temp_df[\"卖出收益率\"] = pd.to_numeric(temp_df[\"卖出收益率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef bond_spot_deal() -> pd.DataFrame:\n    \"\"\"\n    中国外汇交易中心暨全国银行间同业拆借中心-市场数据-债券市场行情-现券市场成交行情\n    https://www.chinamoney.com.cn/chinese/mkdatabond/\n    :return: 现券市场成交行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.chinamoney.com.cn/ags/ms/cm-u-md-bond/CbtPri\"\n    payload = {\n        \"flag\": \"1\",\n        \"lang\": \"cn\",\n        \"bondName\": \"\",\n    }\n    r = requests.post(url=url, data=payload, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.columns = [\n        \"_\",\n        \"_\",\n        \"债券简称\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"涨跌\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"加权收益率\",\n        \"成交净价\",\n        \"_\",\n        \"_\",\n        \"最新收益率\",\n        \"-\",\n        \"交易量\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"债券简称\",\n            \"成交净价\",\n            \"最新收益率\",\n            \"涨跌\",\n            \"加权收益率\",\n            \"交易量\",\n        ]\n    ]\n    temp_df[\"成交净价\"] = pd.to_numeric(temp_df[\"成交净价\"], errors=\"coerce\")\n    temp_df[\"最新收益率\"] = pd.to_numeric(temp_df[\"最新收益率\"], errors=\"coerce\")\n    temp_df[\"涨跌\"] = pd.to_numeric(temp_df[\"涨跌\"], errors=\"coerce\")\n    temp_df[\"加权收益率\"] = pd.to_numeric(temp_df[\"加权收益率\"], errors=\"coerce\")\n    temp_df[\"交易量\"] = pd.to_numeric(temp_df[\"交易量\"], errors=\"coerce\")\n    return temp_df\n\n\ndef bond_china_yield(\n    start_date: str = \"20200204\", end_date: str = \"20210124\"\n) -> pd.DataFrame:\n    \"\"\"\n    中国债券信息网-国债及其他债券收益率曲线\n    https://www.chinabond.com.cn/\n    https://yield.chinabond.com.cn/cbweb-pbc-web/pbc/historyQuery?startDate=2019-02-07&endDate=2020-02-04&gjqx=0&qxId=ycqx&locale=cn_ZH\n    注意: end_date - start_date 应该小于一年\n    :param start_date: 需要查询的日期, 返回在该日期之后一年内的数据\n    :type start_date: str\n    :param end_date: 需要查询的日期, 返回在该日期之前一年内的数据\n    :type end_date: str\n    :return: 返回在指定日期之间之前一年内的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yield.chinabond.com.cn/cbweb-pbc-web/pbc/historyQuery\"\n    params = {\n        \"startDate\": \"-\".join([start_date[:4], start_date[4:6], start_date[6:]]),\n        \"endDate\": \"-\".join([end_date[:4], end_date[4:6], end_date[6:]]),\n        \"gjqx\": \"0\",\n        \"qxId\": \"ycqx\",\n        \"locale\": \"cn_ZH\",\n    }\n    res = requests.get(url, params=params, headers=headers)\n    data_text = res.text.replace(\"&nbsp\", \"\")\n    data_df = pd.read_html(StringIO(data_text), header=0)[1]\n    data_df[\"日期\"] = pd.to_datetime(data_df[\"日期\"], errors=\"coerce\").dt.date\n    data_df[\"3月\"] = pd.to_numeric(data_df[\"3月\"], errors=\"coerce\")\n    data_df[\"6月\"] = pd.to_numeric(data_df[\"6月\"], errors=\"coerce\")\n    data_df[\"1年\"] = pd.to_numeric(data_df[\"1年\"], errors=\"coerce\")\n    data_df[\"3年\"] = pd.to_numeric(data_df[\"3年\"], errors=\"coerce\")\n    data_df[\"5年\"] = pd.to_numeric(data_df[\"5年\"], errors=\"coerce\")\n    data_df[\"7年\"] = pd.to_numeric(data_df[\"7年\"], errors=\"coerce\")\n    data_df[\"10年\"] = pd.to_numeric(data_df[\"10年\"], errors=\"coerce\")\n    data_df[\"30年\"] = pd.to_numeric(data_df[\"30年\"], errors=\"coerce\")\n    data_df.sort_values(by=\"日期\", inplace=True)\n    data_df.reset_index(inplace=True, drop=True)\n    return data_df\n\n\nif __name__ == \"__main__\":\n    bond_spot_quote_df = bond_spot_quote()\n    print(bond_spot_quote_df)\n\n    bond_spot_deal_df = bond_spot_deal()\n    print(bond_spot_deal_df)\n\n    bond_china_yield_df = bond_china_yield(start_date=\"20210201\", end_date=\"20220201\")\n    print(bond_china_yield_df)\n"
  },
  {
    "path": "akshare/bond/bond_china_money.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/6/27 16:00\nDesc: 收盘收益率曲线历史数据\nhttps://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1\n\"\"\"\n\nfrom functools import lru_cache\n\nimport pandas as pd\nimport requests\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef __bond_register_service() -> requests.Session:\n    \"\"\"\n    将服务注册到网站中，则该 IP 在 24 小时内可以直接访问\n    https://www.chinamoney.com.cn\n    :return: 访问过的 Session\n    :rtype: requests.Session\n    \"\"\"\n    session = requests.Session()\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/108.0.0.0 Safari/537.36\",\n    }\n    session.get(\n        url=\"https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1\",\n        headers=headers,\n    )\n    cookies_dict = session.cookies.get_dict()\n    cookies_str = \"; \".join(f\"{k}={v}\" for k, v in cookies_dict.items())\n    # 此处需要通过未访问的游览器，首次打开\n    # https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1\n    # 页面进行人工获取\n    data = {\"key\": \"TThwSjc2NWkzV0VSOVRzOA==\"}\n    headers = {\n        \"Accept\": \"application/json, text/javascript, */*; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"en\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Content-Length\": \"22\",\n        \"Cookie\": cookies_str,\n        \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\n        \"Host\": \"www.chinamoney.com.cn\",\n        \"Origin\": \"https://www.chinamoney.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1\",\n        \"Sec-Fetch-Dest\": \"empty\",\n        \"Sec-Fetch-Mode\": \"cors\",\n        \"Sec-Fetch-Site\": \"same-origin\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/108.0.0.0 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    session.post(\n        url=\"https://www.chinamoney.com.cn/dqs/rest/cm-u-rbt/apply\",\n        data=data,\n        headers=headers,\n    )\n\n    # 20231127 新增部分 https://github.com/akfamily/akshare/issues/4299\n    cookies_dict = session.cookies.get_dict()\n    cookies_str = \"; \".join(f\"{k}={v}\" for k, v in cookies_dict.items())\n    headers = {\n        \"Accept\": \"application/json, text/javascript, /; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"en\",\n        \"Connection\": \"keep-alive\",\n        \"Content-Length\": \"0\",\n        \"Cookie\": cookies_str,\n        \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\n        \"Host\": \"www.chinamoney.com.cn\",\n        \"Origin\": \"https://www.chinamoney.com.cn\",\n        \"Referer\": \"https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1\",\n        \"Sec-Fetch-Dest\": \"empty\",\n        \"Sec-Fetch-Mode\": \"cors\",\n        \"Sec-Fetch-Site\": \"same-origin\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/108.0.0.0 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    session.post(\n        url=\"https://www.chinamoney.com.cn/lss/rest/cm-s-account/getSessionUser\",\n        headers=headers,\n    )\n    return session\n\n\n@lru_cache()\ndef bond_china_close_return_map() -> pd.DataFrame:\n    \"\"\"\n    收盘收益率曲线历史数据\n    https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1\n    :return: 收盘收益率曲线历史数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    headers = {\n        \"Accept\": \"application/json, text/javascript, */*; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"www.chinamoney.com.cn\",\n        \"Origin\": \"https://www.chinamoney.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/108.0.0.0 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    url = \"https://www.chinamoney.com.cn/ags/ms/cm-u-bk-currency/ClsYldCurvCurvGO\"\n    try:\n        r = requests.get(url, headers=headers)\n        data_json = r.json()\n    except:  # noqa: E722\n        session = __bond_register_service()\n        r = session.get(url, headers=headers)\n        data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    return temp_df\n\n\ndef bond_china_close_return(\n    symbol: str = \"国债\",\n    period: str = \"1\",\n    start_date: str = \"20231101\",\n    end_date: str = \"20231101\",\n) -> pd.DataFrame:\n    \"\"\"\n    收盘收益率曲线历史数据\n    https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1\n    :param symbol: 需要获取的指标\n    :type period: choice of {'0.1', '0.5', '1'}\n    :param period: 期限间隔\n    :type symbol: str\n    :param start_date: 开始日期, 结束日期和开始日期不要超过 1 个月\n    :type start_date: str\n    :param end_date: 结束日期, 结束日期和开始日期不要超过 1 个月\n    :type end_date: str\n    :return: 收盘收益率曲线历史数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    name_code_df = bond_china_close_return_map()\n    symbol_code = name_code_df[name_code_df[\"cnLabel\"] == symbol][\"value\"].values[0]\n    url = \"https://www.chinamoney.com.cn/ags/ms/cm-u-bk-currency/ClsYldCurvHis\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/108.0.0.0 Safari/537.36\",\n    }\n    params = {\n        \"lang\": \"CN\",\n        \"reference\": \"1,2,3\",\n        \"bondType\": symbol_code,\n        \"startDate\": \"-\".join([start_date[:4], start_date[4:6], start_date[6:]]),\n        \"endDate\": \"-\".join([end_date[:4], end_date[4:6], end_date[6:]]),\n        \"termId\": period,\n        \"pageNum\": \"1\",\n        \"pageSize\": \"50\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    del temp_df[\"newDateValue\"]\n    temp_df.columns = [\n        \"日期\",\n        \"期限\",\n        \"到期收益率\",\n        \"即期收益率\",\n        \"远期收益率\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"期限\",\n            \"到期收益率\",\n            \"即期收益率\",\n            \"远期收益率\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"期限\"] = pd.to_numeric(temp_df[\"期限\"], errors=\"coerce\")\n    temp_df[\"到期收益率\"] = pd.to_numeric(temp_df[\"到期收益率\"], errors=\"coerce\")\n    temp_df[\"即期收益率\"] = pd.to_numeric(temp_df[\"即期收益率\"], errors=\"coerce\")\n    temp_df[\"远期收益率\"] = pd.to_numeric(temp_df[\"远期收益率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef macro_china_swap_rate(\n    start_date: str = \"20231101\", end_date: str = \"20231204\"\n) -> pd.DataFrame:\n    \"\"\"\n    FR007 利率互换曲线历史数据; 只能获取近一年的数据\n    https://www.chinamoney.com.cn/chinese/bkcurvfxhis/?cfgItemType=72&curveType=FR007\n    :param start_date: 开始日期, 开始和结束日期不得超过一个月\n    :type start_date: str\n    :param end_date: 结束日期, 开始和结束日期不得超过一个月\n    :type end_date: str\n    :return: FR007利率互换曲线历史数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    bond_china_close_return_map()\n    start_date = \"-\".join([start_date[:4], start_date[4:6], start_date[6:]])\n    end_date = \"-\".join([end_date[:4], end_date[4:6], end_date[6:]])\n    url = \"https://www.chinamoney.com.cn/ags/ms/cm-u-bk-shibor/IfccHis\"\n    params = {\n        \"cfgItemType\": \"72\",\n        \"interestRateType\": \"0\",\n        \"startDate\": start_date,\n        \"endDate\": end_date,\n        \"bidAskType\": \"\",\n        \"lang\": \"CN\",\n        \"quoteTime\": \"全部\",\n        \"pageSize\": \"5000\",\n        \"pageNum\": \"1\",\n    }\n    headers = {\n        \"Accept\": \"application/json, text/javascript, */*; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"www.chinamoney.com.cn\",\n        \"Origin\": \"https://www.chinamoney.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://www.chinamoney.com.cn/chinese/bkcurvfxhis/?cfgItemType=72&curveType=FR007\",\n        \"sec-ch-ua\": '\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"Sec-Fetch-Dest\": \"empty\",\n        \"Sec-Fetch-Mode\": \"cors\",\n        \"Sec-Fetch-Site\": \"same-origin\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.post(url, data=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.columns = [\n        \"日期\",\n        \"_\",\n        \"_\",\n        \"时刻\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"价格类型\",\n        \"_\",\n        \"曲线名称\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"data\",\n    ]\n    price_df = pd.DataFrame([item for item in temp_df[\"data\"]])\n    price_df.columns = [\n        \"1M\",\n        \"3M\",\n        \"6M\",\n        \"9M\",\n        \"1Y\",\n        \"2Y\",\n        \"3Y\",\n        \"4Y\",\n        \"5Y\",\n        \"7Y\",\n        \"10Y\",\n    ]\n    big_df = pd.concat(objs=[temp_df, price_df], axis=1)\n    big_df = big_df[\n        [\n            \"日期\",\n            \"曲线名称\",\n            \"时刻\",\n            \"价格类型\",\n            \"1M\",\n            \"3M\",\n            \"6M\",\n            \"9M\",\n            \"1Y\",\n            \"2Y\",\n            \"3Y\",\n            \"4Y\",\n            \"5Y\",\n            \"7Y\",\n            \"10Y\",\n        ]\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df[\"1M\"] = pd.to_numeric(big_df[\"1M\"], errors=\"coerce\")\n    big_df[\"3M\"] = pd.to_numeric(big_df[\"3M\"], errors=\"coerce\")\n    big_df[\"6M\"] = pd.to_numeric(big_df[\"6M\"], errors=\"coerce\")\n    big_df[\"9M\"] = pd.to_numeric(big_df[\"9M\"], errors=\"coerce\")\n    big_df[\"1Y\"] = pd.to_numeric(big_df[\"1Y\"], errors=\"coerce\")\n    big_df[\"2Y\"] = pd.to_numeric(big_df[\"2Y\"], errors=\"coerce\")\n    big_df[\"3Y\"] = pd.to_numeric(big_df[\"3Y\"], errors=\"coerce\")\n    big_df[\"4Y\"] = pd.to_numeric(big_df[\"4Y\"], errors=\"coerce\")\n    big_df[\"5Y\"] = pd.to_numeric(big_df[\"5Y\"], errors=\"coerce\")\n    big_df[\"7Y\"] = pd.to_numeric(big_df[\"7Y\"], errors=\"coerce\")\n    big_df[\"10Y\"] = pd.to_numeric(big_df[\"10Y\"], errors=\"coerce\")\n    big_df.sort_values([\"日期\"], inplace=True, ignore_index=True)\n    return big_df\n\n\ndef macro_china_bond_public() -> pd.DataFrame:\n    \"\"\"\n    中国-债券信息披露-债券发行\n    https://www.chinamoney.com.cn/chinese/xzjfx/\n    :return: 债券发行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    bond_china_close_return_map()\n    url = \"https://www.chinamoney.com.cn/ags/ms/cm-u-bond-an/bnBondEmit\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n    }\n    payload = {\n        \"enty\": \"\",\n        \"bondType\": \"\",\n        \"bondNameCode\": \"\",\n        \"leadUnderwriter\": \"\",\n        \"pageNo\": \"1\",\n        \"pageSize\": \"10\",\n        \"limit\": \"1\",\n    }\n    r = requests.post(url, data=payload, headers=headers)\n    data_json = r.json()\n    total_page = int(data_json[\"data\"][\"pageTotalSize\"]) + 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page), leave=False):\n        payload.update({\"pageNo\": page})\n        r = requests.post(url, data=payload, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"records\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"债券全称\",\n        \"债券类型\",\n        \"-\",\n        \"发行日期\",\n        \"-\",\n        \"计息方式\",\n        \"-\",\n        \"债券期限\",\n        \"-\",\n        \"债券评级\",\n        \"-\",\n        \"价格\",\n        \"计划发行量\",\n    ]\n    big_df = big_df[\n        [\n            \"债券全称\",\n            \"债券类型\",\n            \"发行日期\",\n            \"计息方式\",\n            \"价格\",\n            \"债券期限\",\n            \"计划发行量\",\n            \"债券评级\",\n        ]\n    ]\n    big_df[\"价格\"] = pd.to_numeric(big_df[\"价格\"], errors=\"coerce\")\n    big_df[\"计划发行量\"] = pd.to_numeric(big_df[\"计划发行量\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    bond_china_close_return_df = bond_china_close_return(\n        symbol=\"同业存单(AAA)\", period=\"1\", start_date=\"20240607\", end_date=\"20240607\"\n    )\n    print(bond_china_close_return_df)\n\n    macro_china_swap_rate_df = macro_china_swap_rate(\n        start_date=\"20251010\", end_date=\"20251208\"\n    )\n    print(macro_china_swap_rate_df)\n\n    macro_china_bond_public_df = macro_china_bond_public()\n    print(macro_china_bond_public_df)\n"
  },
  {
    "path": "akshare/bond/bond_convert.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/5/16 19:00\nDesc: 债券-集思录-可转债\n集思录：https://www.jisilu.cn/data/cbnew/#cb\n\"\"\"\n\nfrom io import StringIO\nimport pandas as pd\nimport requests\nimport time\n\nfrom akshare.utils import demjson\n\n\ndef bond_cb_index_jsl() -> pd.DataFrame:\n    \"\"\"\n    首页-可转债-集思录可转债等权指数\n    https://www.jisilu.cn/web/data/cb/index\n    :return: 集思录可转债等权指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.jisilu.cn/webapi/cb/index_history/\"\n    r = requests.get(url)\n    data_dict = demjson.decode(r.text)[\"data\"]\n    temp_df = pd.DataFrame(data_dict)\n    return temp_df\n\n\ndef bond_cb_jsl(cookie: str = None) -> pd.DataFrame:\n    \"\"\"\n    集思录可转债\n    https://www.jisilu.cn/data/cbnew/#cb\n    :param cookie: 输入获取到的游览器 cookie\n    :type cookie: str\n    :return: 集思录可转债\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.jisilu.cn/data/cbnew/cb_list_new/\"\n    headers = {\n        \"accept\": \"application/json, text/javascript, */*; q=0.01\",\n        \"accept-encoding\": \"gzip, deflate, br\",\n        \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"cache-control\": \"no-cache\",\n        \"content-length\": \"220\",\n        \"content-type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\n        \"cookie\": cookie,\n        \"origin\": \"https://www.jisilu.cn\",\n        \"pragma\": \"no-cache\",\n        \"referer\": \"https://www.jisilu.cn/data/cbnew/\",\n        \"sec-ch-ua\": '\" Not;A Brand\";v=\"99\", \"Google Chrome\";v=\"91\", \"Chromium\";v=\"91\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-fetch-dest\": \"empty\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-site\": \"same-origin\",\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/91.0.4472.164 Safari/537.36\",\n        \"x-requested-with\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"___jsl\": f\"LST___t={int(time.time() * 1000)}\",\n    }\n    payload = {\n        \"fprice\": \"\",\n        \"tprice\": \"\",\n        \"curr_iss_amt\": \"\",\n        \"volume\": \"\",\n        \"svolume\": \"\",\n        \"premium_rt\": \"\",\n        \"ytm_rt\": \"\",\n        \"market\": \"\",\n        \"rating_cd\": \"\",\n        \"is_search\": \"N\",\n        \"market_cd[]\": \"shmb\",  # noqa: F601\n        \"market_cd[]\": \"shkc\",  # noqa: F601\n        \"market_cd[]\": \"szmb\",  # noqa: F601\n        \"market_cd[]\": \"szcy\",  # noqa: F601\n        \"btype\": \"\",\n        \"listed\": \"Y\",\n        \"qflag\": \"N\",\n        \"sw_cd\": \"\",\n        \"bond_ids\": \"\",\n        \"rp\": \"50\",\n    }\n    r = requests.post(url, params=params, json=payload, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item[\"cell\"] for item in data_json[\"rows\"]])\n    temp_df.rename(\n        columns={\n            \"bond_id\": \"代码\",\n            \"bond_nm\": \"转债名称\",\n            \"price\": \"现价\",\n            \"increase_rt\": \"涨跌幅\",\n            \"stock_id\": \"正股代码\",\n            \"stock_nm\": \"正股名称\",\n            \"sprice\": \"正股价\",\n            \"sincrease_rt\": \"正股涨跌\",\n            \"pb\": \"正股PB\",\n            \"convert_price\": \"转股价\",\n            \"convert_value\": \"转股价值\",\n            \"premium_rt\": \"转股溢价率\",\n            \"dblow\": \"双低\",\n            \"rating_cd\": \"债券评级\",\n            \"put_convert_price\": \"回售触发价\",\n            \"force_redeem_price\": \"强赎触发价\",\n            \"convert_amt_ratio\": \"转债占比\",\n            \"maturity_dt\": \"到期时间\",\n            \"year_left\": \"剩余年限\",\n            \"curr_iss_amt\": \"剩余规模\",\n            \"volume\": \"成交额\",\n            \"turnover_rt\": \"换手率\",\n            \"ytm_rt\": \"到期税前收益\",\n        },\n        inplace=True,\n    )\n\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"转债名称\",\n            \"现价\",\n            \"涨跌幅\",\n            \"正股代码\",\n            \"正股名称\",\n            \"正股价\",\n            \"正股涨跌\",\n            \"正股PB\",\n            \"转股价\",\n            \"转股价值\",\n            \"转股溢价率\",\n            \"债券评级\",\n            \"回售触发价\",\n            \"强赎触发价\",\n            \"转债占比\",\n            \"到期时间\",\n            \"剩余年限\",\n            \"剩余规模\",\n            \"成交额\",\n            \"换手率\",\n            \"到期税前收益\",\n            \"双低\",\n        ]\n    ]\n    temp_df[\"到期时间\"] = pd.to_datetime(temp_df[\"到期时间\"], errors=\"coerce\").dt.date\n    temp_df[\"现价\"] = pd.to_numeric(temp_df[\"现价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"正股价\"] = pd.to_numeric(temp_df[\"正股价\"], errors=\"coerce\")\n    temp_df[\"正股涨跌\"] = pd.to_numeric(temp_df[\"正股涨跌\"], errors=\"coerce\")\n    temp_df[\"正股PB\"] = pd.to_numeric(temp_df[\"正股PB\"], errors=\"coerce\")\n    temp_df[\"转股价\"] = pd.to_numeric(temp_df[\"转股价\"], errors=\"coerce\")\n    temp_df[\"转股价值\"] = pd.to_numeric(temp_df[\"转股价值\"], errors=\"coerce\")\n    temp_df[\"转股溢价率\"] = pd.to_numeric(temp_df[\"转股溢价率\"], errors=\"coerce\")\n    temp_df[\"回售触发价\"] = pd.to_numeric(temp_df[\"回售触发价\"], errors=\"coerce\")\n    temp_df[\"强赎触发价\"] = pd.to_numeric(temp_df[\"强赎触发价\"], errors=\"coerce\")\n    temp_df[\"转债占比\"] = pd.to_numeric(temp_df[\"转债占比\"], errors=\"coerce\")\n    temp_df[\"剩余年限\"] = pd.to_numeric(temp_df[\"剩余年限\"], errors=\"coerce\")\n    temp_df[\"剩余规模\"] = pd.to_numeric(temp_df[\"剩余规模\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"到期税前收益\"] = pd.to_numeric(temp_df[\"到期税前收益\"], errors=\"coerce\")\n    return temp_df\n\n\ndef bond_cb_redeem_jsl() -> pd.DataFrame:\n    \"\"\"\n    集思录可转债-强赎\n    https://www.jisilu.cn/data/cbnew/#redeem\n    :return: 集思录可转债-强赎\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.jisilu.cn/data/cbnew/redeem_list/\"\n    headers = {\n        \"Accept\": \"application/json, text/javascript, */*; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Content-Length\": \"5\",\n        \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\n        \"Host\": \"www.jisilu.cn\",\n        \"Origin\": \"https://www.jisilu.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://www.jisilu.cn/data/cbnew/\",\n        \"sec-ch-ua\": '\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"101\", \"Google Chrome\";v=\"101\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"Sec-Fetch-Dest\": \"empty\",\n        \"Sec-Fetch-Mode\": \"cors\",\n        \"Sec-Fetch-Site\": \"same-origin\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/101.0.4951.67 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"___jsl\": \"LST___t=1653394005966\",\n    }\n    payload = {\n        \"rp\": \"50\",\n    }\n    r = requests.post(url, params=params, json=payload, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item[\"cell\"] for item in data_json[\"rows\"]])\n    temp_df.rename(\n        columns={\n            \"bond_id\": \"代码\",\n            \"bond_nm\": \"名称\",\n            \"price\": \"现价\",\n            \"stock_id\": \"正股代码\",\n            \"stock_nm\": \"正股名称\",\n            \"margin_flg\": \"-\",\n            \"btype\": \"-\",\n            \"orig_iss_amt\": \"规模\",\n            \"curr_iss_amt\": \"剩余规模\",\n            \"convert_dt\": \"转股起始日\",\n            \"convert_price\": \"转股价\",\n            \"next_put_dt\": \"-\",\n            \"redeem_dt\": \"-\",\n            \"force_redeem\": \"-\",\n            \"redeem_flag\": \"-\",\n            \"redeem_price\": \"-\",\n            \"redeem_price_ratio\": \"强赎触发比\",\n            \"real_force_redeem_price\": \"强赎价\",\n            \"redeem_remain_days\": \"-\",\n            \"redeem_real_days\": \"-\",\n            \"redeem_total_days\": \"-\",\n            \"recount_dt\": \"-\",\n            \"redeem_count_days\": \"-\",\n            \"redeem_tc\": \"强赎条款\",\n            \"sprice\": \"正股价\",\n            \"delist_dt\": \"最后交易日\",\n            \"maturity_dt\": \"到期日\",\n            \"redeem_icon\": \"强赎状态\",\n            \"redeem_orders\": \"-\",\n            \"at_maturity\": \"-\",\n            \"redeem_count\": \"强赎天计数\",\n            \"after_next_put_dt\": \"-\",\n            \"force_redeem_price\": \"强赎触发价\",\n        },\n        inplace=True,\n    )\n\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"现价\",\n            \"正股代码\",\n            \"正股名称\",\n            \"规模\",\n            \"剩余规模\",\n            \"转股起始日\",\n            \"最后交易日\",\n            \"到期日\",\n            \"转股价\",\n            \"强赎触发比\",\n            \"强赎触发价\",\n            \"正股价\",\n            \"强赎价\",\n            \"强赎天计数\",\n            \"强赎条款\",\n            \"强赎状态\",\n        ]\n    ]\n    temp_df[\"现价\"] = pd.to_numeric(temp_df[\"现价\"], errors=\"coerce\")\n    temp_df[\"规模\"] = pd.to_numeric(temp_df[\"规模\"], errors=\"coerce\")\n    temp_df[\"剩余规模\"] = pd.to_numeric(temp_df[\"剩余规模\"], errors=\"coerce\")\n    temp_df[\"转股起始日\"] = pd.to_datetime(\n        temp_df[\"转股起始日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"最后交易日\"] = pd.to_datetime(\n        temp_df[\"最后交易日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"到期日\"] = pd.to_datetime(temp_df[\"到期日\"], errors=\"coerce\").dt.date\n    temp_df[\"转股价\"] = pd.to_numeric(temp_df[\"转股价\"], errors=\"coerce\")\n    temp_df[\"强赎触发比\"] = pd.to_numeric(\n        temp_df[\"强赎触发比\"].str.strip(\"%\"), errors=\"coerce\"\n    )\n    temp_df[\"强赎触发价\"] = pd.to_numeric(temp_df[\"强赎触发价\"], errors=\"coerce\")\n    temp_df[\"正股价\"] = pd.to_numeric(temp_df[\"正股价\"], errors=\"coerce\")\n    temp_df[\"强赎价\"] = pd.to_numeric(temp_df[\"强赎价\"], errors=\"coerce\")\n    temp_df[\"强赎天计数\"] = temp_df[\"强赎天计数\"].replace(\n        r\"^.*?(\\d{1,2}\\/\\d{1,2} \\| \\d{1,2}).*?$\", r\"\\1\", regex=True\n    )\n    temp_df[\"强赎状态\"] = temp_df[\"强赎状态\"].map(\n        {\n            \"R\": \"已公告强赎\",\n            \"O\": \"公告要强赎\",\n            \"G\": \"公告不强赎\",\n            \"B\": \"已满足强赎条件\",\n            \"\": \"\",\n        }\n    )\n    return temp_df\n\n\ndef bond_cb_adj_logs_jsl(symbol: str = \"128013\") -> pd.DataFrame:\n    \"\"\"\n    集思录-可转债转股价-调整记录\n    https://www.jisilu.cn/data/cbnew/#cb\n    :param symbol: 可转债代码\n    :type symbol: str\n    :return: 转股价调整记录\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://www.jisilu.cn/data/cbnew/adj_logs/?bond_id={symbol}\"\n    r = requests.get(url)\n    data_text = r.text\n    if \"</table>\" not in data_text:\n        # 1. 该可转债没有转股价调整记录，服务端返回文本 '暂无数据'\n        # 2. 无效可转债代码，服务端返回 {\"timestamp\":1639565628,\"isError\":1,\"msg\":\"无效代码格式\"}\n        # 以上两种情况，返回空的 DataFrame\n        return pd.DataFrame()\n    else:\n        temp_df = pd.read_html(StringIO(data_text), parse_dates=True)[0]\n        temp_df.columns = [item.replace(\" \", \"\") for item in temp_df.columns]\n        temp_df[\"下修前转股价\"] = pd.to_numeric(\n            temp_df[\"下修前转股价\"], errors=\"coerce\"\n        )\n        temp_df[\"下修后转股价\"] = pd.to_numeric(\n            temp_df[\"下修后转股价\"], errors=\"coerce\"\n        )\n        temp_df[\"下修底价\"] = pd.to_numeric(temp_df[\"下修底价\"], errors=\"coerce\")\n        temp_df[\"股东大会日\"] = pd.to_datetime(\n            temp_df[\"股东大会日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n        ).dt.date\n        temp_df[\"新转股价生效日期\"] = pd.to_datetime(\n            temp_df[\"新转股价生效日期\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n        ).dt.date\n        return temp_df\n\n\nif __name__ == \"__main__\":\n    bond_cb_index_jsl_df = bond_cb_index_jsl()\n    print(bond_cb_index_jsl_df)\n\n    bond_cb_jsl_df = bond_cb_jsl(cookie=\"\")\n    print(bond_cb_jsl_df)\n\n    bond_cb_redeem_jsl_df = bond_cb_redeem_jsl()\n    print(bond_cb_redeem_jsl_df)\n\n    bond_cb_adj_logs_jsl_df = bond_cb_adj_logs_jsl(symbol=\"128013\")\n    print(bond_cb_adj_logs_jsl_df)\n"
  },
  {
    "path": "akshare/bond/bond_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/4/5 17:00\nDesc: 东方财富网-数据中心-经济数据-中美国债收益率\nhttps://data.eastmoney.com/cjsj/zmgzsyl.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef bond_zh_us_rate(start_date: str = \"19901219\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-经济数据-中美国债收益率\n    https://data.eastmoney.com/cjsj/zmgzsyl.html\n    :param start_date: 开始统计时间\n    :type start_date: str\n    :return: 中美国债收益率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/api/data/get\"\n    params = {\n        \"type\": \"RPTA_WEB_TREASURYYIELD\",\n        \"sty\": \"ALL\",\n        \"st\": \"SOLAR_DATE\",\n        \"sr\": \"-1\",\n        \"token\": \"894050c76af8597a853f5b408b759f5d\",\n        \"p\": \"1\",\n        \"ps\": \"500\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params = {\n            \"type\": \"RPTA_WEB_TREASURYYIELD\",\n            \"sty\": \"ALL\",\n            \"st\": \"SOLAR_DATE\",\n            \"sr\": \"-1\",\n            \"token\": \"894050c76af8597a853f5b408b759f5d\",\n            \"p\": page,\n            \"ps\": \"500\",\n            \"pageNo\": page,\n            \"pageNum\": page,\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        for col in temp_df.columns:\n            if temp_df[col].isnull().all():  # 检查列是否包含 None 或 NaN\n                temp_df[col] = pd.to_numeric(temp_df[col], errors=\"coerce\")\n        if big_df.empty:\n            big_df = temp_df\n        else:\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n        temp_date_list = pd.to_datetime(big_df[\"SOLAR_DATE\"]).dt.date.to_list()\n        if pd.to_datetime(start_date) in pd.date_range(\n            temp_date_list[-1], temp_date_list[0]\n        ):\n            break\n\n    big_df.rename(\n        columns={\n            \"SOLAR_DATE\": \"日期\",\n            \"EMM00166462\": \"中国国债收益率5年\",\n            \"EMM00166466\": \"中国国债收益率10年\",\n            \"EMM00166469\": \"中国国债收益率30年\",\n            \"EMM00588704\": \"中国国债收益率2年\",\n            \"EMM01276014\": \"中国国债收益率10年-2年\",\n            \"EMG00001306\": \"美国国债收益率2年\",\n            \"EMG00001308\": \"美国国债收益率5年\",\n            \"EMG00001310\": \"美国国债收益率10年\",\n            \"EMG00001312\": \"美国国债收益率30年\",\n            \"EMG01339436\": \"美国国债收益率10年-2年\",\n            \"EMM00000024\": \"中国GDP年增率\",\n            \"EMG00159635\": \"美国GDP年增率\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"日期\",\n            \"中国国债收益率2年\",\n            \"中国国债收益率5年\",\n            \"中国国债收益率10年\",\n            \"中国国债收益率30年\",\n            \"中国国债收益率10年-2年\",\n            \"中国GDP年增率\",\n            \"美国国债收益率2年\",\n            \"美国国债收益率5年\",\n            \"美国国债收益率10年\",\n            \"美国国债收益率30年\",\n            \"美国国债收益率10年-2年\",\n            \"美国GDP年增率\",\n        ]\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\")\n    big_df[\"中国国债收益率2年\"] = pd.to_numeric(\n        big_df[\"中国国债收益率2年\"], errors=\"coerce\"\n    )\n    big_df[\"中国国债收益率5年\"] = pd.to_numeric(\n        big_df[\"中国国债收益率5年\"], errors=\"coerce\"\n    )\n    big_df[\"中国国债收益率10年\"] = pd.to_numeric(\n        big_df[\"中国国债收益率10年\"], errors=\"coerce\"\n    )\n    big_df[\"中国国债收益率30年\"] = pd.to_numeric(\n        big_df[\"中国国债收益率30年\"], errors=\"coerce\"\n    )\n    big_df[\"中国国债收益率10年-2年\"] = pd.to_numeric(\n        big_df[\"中国国债收益率10年-2年\"], errors=\"coerce\"\n    )\n    big_df[\"中国GDP年增率\"] = pd.to_numeric(big_df[\"中国GDP年增率\"], errors=\"coerce\")\n    big_df[\"美国国债收益率2年\"] = pd.to_numeric(\n        big_df[\"美国国债收益率2年\"], errors=\"coerce\"\n    )\n    big_df[\"美国国债收益率5年\"] = pd.to_numeric(\n        big_df[\"美国国债收益率5年\"], errors=\"coerce\"\n    )\n    big_df[\"美国国债收益率10年\"] = pd.to_numeric(\n        big_df[\"美国国债收益率10年\"], errors=\"coerce\"\n    )\n    big_df[\"美国国债收益率30年\"] = pd.to_numeric(\n        big_df[\"美国国债收益率30年\"], errors=\"coerce\"\n    )\n    big_df[\"美国国债收益率10年-2年\"] = pd.to_numeric(\n        big_df[\"美国国债收益率10年-2年\"], errors=\"coerce\"\n    )\n    big_df[\"美国GDP年增率\"] = pd.to_numeric(big_df[\"美国GDP年增率\"], errors=\"coerce\")\n    big_df.sort_values(\"日期\", inplace=True)\n    big_df.set_index([\"日期\"], inplace=True)\n    big_df = big_df[pd.to_datetime(start_date) :]\n    big_df.reset_index(inplace=True)\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    return big_df\n\n\nif __name__ == \"__main__\":\n    bond_zh_us_rate_df = bond_zh_us_rate(start_date=\"19901219\")\n    print(bond_zh_us_rate_df)\n"
  },
  {
    "path": "akshare/bond/bond_gb_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/2/4 17:00\nDesc: 新浪财经-债券-中国/美国国债收益率\nhttps://vip.stock.finance.sina.com.cn/mkt/#hs_z\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef bond_gb_zh_sina(symbol: str = \"中国10年期国债\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-债券-中国国债收益率行情数据\n    https://stock.finance.sina.com.cn/forex/globalbd/cn10yt.html\n    :param symbol: choice of {\"中国1年期国债\", \"中国2年期国债\", \"中国3年期国债\", \"中国5年期国债\", \"中国7年期国债\", \"中国10年期国债\", \"中国15年期国债\", \"中国20年期国债\", \"中国30年期国债\"}\n    :type symbol: str\n    :return: 中国国债收益率行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"中国1年期国债\": \"CN1YT\",\n        \"中国2年期国债\": \"CN2YT\",\n        \"中国3年期国债\": \"CN3YT\",\n        \"中国5年期国债\": \"CN5YT\",\n        \"中国7年期国债\": \"CN7YT\",\n        \"中国10年期国债\": \"CN10YT\",\n        \"中国15年期国债\": \"CN15YT\",\n        \"中国20年期国债\": \"CN20YT\",\n        \"中国30年期国债\": \"CN30YT\",\n    }\n    url = f\"https://bond.finance.sina.com.cn/hq/gb/daily?symbol={symbol_map[symbol]}\"\n    r = requests.get(url)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"date\",\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n        \"volume\",\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"volume\"] = pd.to_numeric(temp_df[\"volume\"], errors=\"coerce\")\n    return temp_df\n\n\ndef bond_gb_us_sina(symbol: str = \"美国10年期国债\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-债券-美国国债收益率行情数据\n    https://stock.finance.sina.com.cn/forex/globalbd/cn10yt.html\n    :param symbol: choice of {\"美国1月期国债\", \"美国2月期国债\", \"美国3月期国债\", \"美国4月期国债\", \"美国6月期国债\", \"美国1年期国债\", \"美国2年期国债\", \"美国3年期国债\", \"美国5年期国债\", \"美国7年期国债\", \"美国10年期国债\", \"美国20年期国债\", \"美国30年期国债\"}\n    :type symbol: str\n    :return: 美国国债收益率行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"美国1月期国债\": \"US1MT\",\n        \"美国2月期国债\": \"US2MT\",\n        \"美国3月期国债\": \"US3MT\",\n        \"美国4月期国债\": \"US4MT\",\n        \"美国6月期国债\": \"US6MT\",\n        \"美国1年期国债\": \"US1YT\",\n        \"美国2年期国债\": \"US2YT\",\n        \"美国3年期国债\": \"US3YT\",\n        \"美国5年期国债\": \"US5YT\",\n        \"美国7年期国债\": \"US7YT\",\n        \"美国10年期国债\": \"US10YT\",\n        \"美国20年期国债\": \"US20YT\",\n        \"美国30年期国债\": \"US30YT\",\n    }\n    url = f\"https://bond.finance.sina.com.cn/hq/gb/daily?symbol={symbol_map[symbol]}\"\n    r = requests.get(url)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"date\",\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n        \"volume\",\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"volume\"] = pd.to_numeric(temp_df[\"volume\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    bond_gb_zh_sina_df = bond_gb_zh_sina(symbol=\"中国10年期国债\")\n    print(bond_gb_zh_sina_df)\n\n    bond_gb_us_sina_df = bond_gb_us_sina(symbol=\"美国10年期国债\")\n    print(bond_gb_us_sina_df)\n"
  },
  {
    "path": "akshare/bond/bond_info_cm.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/5/10 14:00\nDesc: 中国外汇交易中心暨全国银行间同业拆借中心\nhttps://www.chinamoney.com.cn/chinese/scsjzqxx/\n\"\"\"\n\nimport functools\n\nimport pandas as pd\nimport requests\nfrom akshare.utils.tqdm import get_tqdm\nfrom akshare.bond.bond_china import bond_china_close_return_map\n\n\n@functools.lru_cache()\ndef bond_info_cm_query(symbol: str = \"评级等级\") -> pd.DataFrame:\n    \"\"\"\n    中国外汇交易中心暨全国银行间同业拆借中心-查询相关指标的参数\n    https://www.chinamoney.com.cn/chinese/scsjzqxx/\n    :param symbol: choice of {\"主承销商\", \"债券类型\", \"息票类型\", \"发行年份\", \"评级等级\"}\n    :type symbol: str\n    :return: 查询相关指标的参数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    bond_china_close_return_map()\n    if symbol == \"主承销商\":\n        url = \"https://www.chinamoney.com.cn/ags/ms/cm-u-bond-md/EntyFullNameSearchCondition\"\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/109.0.0.0 Safari/537.36\"\n        }\n        r = requests.post(url, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"][\"enty\"])\n        temp_df.columns = [\"code\", \"name\"]\n        temp_df = temp_df[[\"name\", \"code\"]]\n        return temp_df\n    else:\n        symbol_map = {\n            \"债券类型\": \"bondType\",\n            \"息票类型\": \"couponType\",\n            \"发行年份\": \"issueYear\",\n            \"评级等级\": \"bondRtngShrt\",\n        }\n        url = \"https://www.chinamoney.com.cn/ags/ms/cm-u-bond-md/BondBaseInfoSearchCondition\"\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/109.0.0.0 Safari/537.36\"\n        }\n        r = requests.post(url, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"][f\"{symbol_map[symbol]}\"])\n        if temp_df.shape[1] == 1:\n            temp_df.columns = [\"name\"]\n            temp_df[\"code\"] = temp_df[\"name\"]\n        temp_df.columns = [\"code\", \"name\"]\n        temp_df = temp_df[[\"name\", \"code\"]]\n        return temp_df\n\n\n@functools.lru_cache()\ndef bond_info_cm(\n    bond_name: str = \"\",\n    bond_code: str = \"\",\n    bond_issue: str = \"\",\n    bond_type: str = \"\",\n    coupon_type: str = \"\",\n    issue_year: str = \"\",\n    underwriter: str = \"\",\n    grade: str = \"\",\n) -> pd.DataFrame:\n    \"\"\"\n    中国外汇交易中心暨全国银行间同业拆借中心-数据-债券信息-信息查询\n    https://www.chinamoney.com.cn/chinese/scsjzqxx/\n    :param bond_name: 债券名称\n    :type bond_name: str\n    :param bond_code: 债券代码\n    :type bond_code: str\n    :param bond_issue: 发行人/受托机构\n    :type bond_issue: str\n    :param bond_type: 债券类型\n    :type bond_type: str\n    :param coupon_type: 息票类型\n    :type coupon_type: str\n    :param issue_year: 发行年份\n    :type issue_year: str\n    :param underwriter: 主承销商\n    :type underwriter: str\n    :param grade: 评级等级\n    :type grade: str\n    :return: 信息查询结果\n    :rtype: pandas.DataFrame\n    \"\"\"\n    bond_china_close_return_map()\n    if bond_type:\n        bond_type_df = bond_info_cm_query(symbol=\"债券类型\")\n        bond_type_df_value = bond_type_df[bond_type_df[\"name\"] == bond_type][\n            \"code\"\n        ].values[0]\n    else:\n        bond_type_df_value = \"\"\n\n    if coupon_type:\n        coupon_type_df = bond_info_cm_query(symbol=\"息票类型\")\n        coupon_type_df_value = coupon_type_df[coupon_type_df[\"name\"] == coupon_type][\n            \"code\"\n        ].values[0]\n    else:\n        coupon_type_df_value = \"\"\n\n    if underwriter:\n        underwriter_df = bond_info_cm_query(symbol=\"主承销商\")\n        underwriter_value = underwriter_df[underwriter_df[\"name\"] == underwriter][\n            \"code\"\n        ].values[0]\n    else:\n        underwriter_value = \"\"\n\n    url = \"https://www.chinamoney.com.cn/ags/ms/cm-u-bond-md/BondMarketInfoList2\"\n    payload = {\n        \"pageNo\": \"1\",\n        \"pageSize\": \"15\",\n        \"bondName\": bond_name,\n        \"bondCode\": bond_code,\n        \"issueEnty\": bond_issue,\n        \"bondType\": bond_type_df_value if bond_type_df_value else \"\",\n        \"bondSpclPrjctVrty\": \"\",\n        \"couponType\": coupon_type_df_value if coupon_type_df_value else \"\",\n        \"issueYear\": issue_year,\n        \"entyDefinedCode\": underwriter_value if underwriter_value else \"\",\n        \"rtngShrt\": grade,\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/109.0.0.0 Safari/537.36\"\n    }\n    r = requests.post(url, data=payload, headers=headers)\n    data_json = r.json()\n    total_page = data_json[\"data\"][\"pageTotal\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        payload.update({\"pageNo\": page})\n        r = requests.post(url, data=payload, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"][\"resultList\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.rename(\n        columns={\n            \"bondDefinedCode\": \"查询代码\",\n            \"bondName\": \"债券简称\",\n            \"bondCode\": \"债券代码\",\n            \"issueStartDate\": \"发行日期\",\n            \"issueEndDate\": \"-\",\n            \"bondTypeCode\": \"-\",\n            \"bondType\": \"债券类型\",\n            \"entyFullName\": \"发行人/受托机构\",\n            \"entyDefinedCode\": \"-\",\n            \"debtRtng\": \"最新债项评级\",\n            \"isin\": \"-\",\n            \"inptTp\": \"-\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"债券简称\",\n            \"债券代码\",\n            \"发行人/受托机构\",\n            \"债券类型\",\n            \"发行日期\",\n            \"最新债项评级\",\n            \"查询代码\",\n        ]\n    ]\n    return big_df\n\n\n@functools.lru_cache()\ndef bond_info_detail_cm(symbol: str = \"淮安农商行CDSD2022021012\") -> pd.DataFrame:\n    \"\"\"\n    中国外汇交易中心暨全国银行间同业拆借中心-数据-债券信息-信息查询-债券详情\n    https://www.chinamoney.com.cn/chinese/zqjc/?bondDefinedCode=egfjh08154\n    :param symbol: 债券简称\n    :type symbol: str\n    :return: 债券详情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    bond_china_close_return_map()\n    url = \"https://www.chinamoney.com.cn/ags/ms/cm-u-bond-md/BondDetailInfo\"\n    inner_bond_info_cm_df = bond_info_cm(bond_name=symbol)\n    bond_code = inner_bond_info_cm_df[\"查询代码\"].values[0]\n    payload = {\"bondDefinedCode\": bond_code}\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/109.0.0.0 Safari/537.36\"\n    }\n    r = requests.post(url, data=payload, headers=headers)\n    data_json = r.json()\n    data_dict = data_json[\"data\"][\"bondBaseInfo\"]\n    if data_dict[\"creditRateEntyList\"]:\n        del data_dict[\"creditRateEntyList\"]\n    if data_dict[\"exerciseInfoList\"]:\n        del data_dict[\"exerciseInfoList\"]\n    temp_df = pd.DataFrame.from_dict(data_dict, orient=\"index\")\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\"name\", \"value\"]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    bond_info_cm_df = bond_info_cm(\n        bond_name=\"\",\n        bond_code=\"\",\n        bond_issue=\"\",\n        bond_type=\"短期融资券\",\n        coupon_type=\"零息式\",\n        issue_year=\"2019\",\n        grade=\"A-1\",\n        underwriter=\"重庆农村商业银行股份有限公司\",\n    )\n    print(bond_info_cm_df)\n\n    bond_info_detail_cm_df = bond_info_detail_cm(symbol=\"19万林投资CP001\")\n    print(bond_info_detail_cm_df)\n"
  },
  {
    "path": "akshare/bond/bond_issue_cninfo.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/6/19 22:00\nDesc: 巨潮资讯-数据中心-专题统计-债券报表-债券发行\nhttp://webapi.cninfo.com.cn/#/thematicStatistics\n\"\"\"\n\nimport pandas as pd\nimport requests\nimport py_mini_racer\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_cninfo(file: str = \"cninfo.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef bond_treasure_issue_cninfo(\n    start_date: str = \"20210910\", end_date: str = \"20211109\"\n) -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-专题统计-债券报表-债券发行-国债发行\n    http://webapi.cninfo.com.cn/#/thematicStatistics\n    :param start_date: 开始统计时间\n    :type start_date: str\n    :param end_date: 结束统计数据\n    :type end_date: str\n    :return: 国债发行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1120\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"http://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"http://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"sdate\": \"-\".join([start_date[:4], start_date[4:6], start_date[6:]]),\n        \"edate\": \"-\".join([end_date[:4], end_date[4:6], end_date[6:]]),\n    }\n    r = requests.post(url, headers=headers, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.rename(\n        columns={\n            \"F009D\": \"缴款日\",\n            \"SECNAME\": \"债券简称\",\n            \"DECLAREDATE\": \"公告日期\",\n            \"F004D\": \"发行起始日\",\n            \"F003D\": \"发行终止日\",\n            \"F008N\": \"单位面值\",\n            \"SECCODE\": \"债券代码\",\n            \"F007N\": \"发行价格\",\n            \"F006N\": \"计划发行总量\",\n            \"F005N\": \"实际发行总量\",\n            \"F028N\": \"增发次数\",\n            \"BONDNAME\": \"债券名称\",\n            \"F014V\": \"发行对象\",\n            \"F002V\": \"交易市场\",\n            \"F013V\": \"发行方式\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"债券代码\",\n            \"债券简称\",\n            \"发行起始日\",\n            \"发行终止日\",\n            \"计划发行总量\",\n            \"实际发行总量\",\n            \"发行价格\",\n            \"单位面值\",\n            \"缴款日\",\n            \"增发次数\",\n            \"交易市场\",\n            \"发行方式\",\n            \"发行对象\",\n            \"公告日期\",\n            \"债券名称\",\n        ]\n    ]\n    temp_df[\"发行起始日\"] = pd.to_datetime(\n        temp_df[\"发行起始日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"发行终止日\"] = pd.to_datetime(\n        temp_df[\"发行终止日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"缴款日\"] = pd.to_datetime(temp_df[\"缴款日\"], errors=\"coerce\").dt.date\n    temp_df[\"公告日期\"] = pd.to_datetime(temp_df[\"公告日期\"], errors=\"coerce\").dt.date\n    temp_df[\"计划发行总量\"] = pd.to_numeric(temp_df[\"计划发行总量\"], errors=\"coerce\")\n    temp_df[\"实际发行总量\"] = pd.to_numeric(temp_df[\"实际发行总量\"], errors=\"coerce\")\n    temp_df[\"发行价格\"] = pd.to_numeric(temp_df[\"发行价格\"], errors=\"coerce\")\n    temp_df[\"单位面值\"] = pd.to_numeric(temp_df[\"单位面值\"], errors=\"coerce\")\n    temp_df[\"增发次数\"] = pd.to_numeric(temp_df[\"增发次数\"], errors=\"coerce\")\n    return temp_df\n\n\ndef bond_local_government_issue_cninfo(\n    start_date: str = \"20210911\", end_date: str = \"20211110\"\n) -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-专题统计-债券报表-债券发行-地方债发行\n    http://webapi.cninfo.com.cn/#/thematicStatistics\n    :param start_date: 开始统计时间\n    :type start_date: str\n    :param end_date: 开始统计时间\n    :type end_date: str\n    :return: 地方债发行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1121\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"http://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"http://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"sdate\": \"-\".join([start_date[:4], start_date[4:6], start_date[6:]]),\n        \"edate\": \"-\".join([end_date[:4], end_date[4:6], end_date[6:]]),\n    }\n    r = requests.post(url, headers=headers, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.rename(\n        columns={\n            \"F009D\": \"缴款日\",\n            \"SECNAME\": \"债券简称\",\n            \"DECLAREDATE\": \"公告日期\",\n            \"F004D\": \"发行起始日\",\n            \"F003D\": \"发行终止日\",\n            \"F008N\": \"单位面值\",\n            \"SECCODE\": \"债券代码\",\n            \"F007N\": \"发行价格\",\n            \"F006N\": \"计划发行总量\",\n            \"F005N\": \"实际发行总量\",\n            \"F028N\": \"增发次数\",\n            \"BONDNAME\": \"债券名称\",\n            \"F014V\": \"发行对象\",\n            \"F002V\": \"交易市场\",\n            \"F013V\": \"发行方式\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"债券代码\",\n            \"债券简称\",\n            \"发行起始日\",\n            \"发行终止日\",\n            \"计划发行总量\",\n            \"实际发行总量\",\n            \"发行价格\",\n            \"单位面值\",\n            \"缴款日\",\n            \"增发次数\",\n            \"交易市场\",\n            \"发行方式\",\n            \"发行对象\",\n            \"公告日期\",\n            \"债券名称\",\n        ]\n    ]\n    temp_df[\"发行起始日\"] = pd.to_datetime(\n        temp_df[\"发行起始日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"发行终止日\"] = pd.to_datetime(\n        temp_df[\"发行终止日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"缴款日\"] = pd.to_datetime(temp_df[\"缴款日\"], errors=\"coerce\").dt.date\n    temp_df[\"公告日期\"] = pd.to_datetime(temp_df[\"公告日期\"], errors=\"coerce\").dt.date\n    temp_df[\"计划发行总量\"] = pd.to_numeric(temp_df[\"计划发行总量\"], errors=\"coerce\")\n    temp_df[\"实际发行总量\"] = pd.to_numeric(temp_df[\"实际发行总量\"], errors=\"coerce\")\n    temp_df[\"发行价格\"] = pd.to_numeric(temp_df[\"发行价格\"], errors=\"coerce\")\n    temp_df[\"单位面值\"] = pd.to_numeric(temp_df[\"单位面值\"], errors=\"coerce\")\n    temp_df[\"增发次数\"] = pd.to_numeric(temp_df[\"增发次数\"], errors=\"coerce\")\n    return temp_df\n\n\ndef bond_corporate_issue_cninfo(\n    start_date: str = \"20210911\", end_date: str = \"20211110\"\n) -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-专题统计-债券报表-债券发行-企业债发行\n    http://webapi.cninfo.com.cn/#/thematicStatistics\n    :param start_date: 开始统计时间\n    :type start_date: str\n    :param end_date: 开始统计时间\n    :type end_date: str\n    :return: 企业债发行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1122\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"http://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"http://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"sdate\": \"-\".join([start_date[:4], start_date[4:6], start_date[6:]]),\n        \"edate\": \"-\".join([end_date[:4], end_date[4:6], end_date[6:]]),\n    }\n    r = requests.post(url, headers=headers, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.rename(\n        columns={\n            \"SECNAME\": \"债券简称\",\n            \"DECLAREDATE\": \"公告日期\",\n            \"F004D\": \"交易所网上发行终止日\",\n            \"F003D\": \"交易所网上发行起始日\",\n            \"F008N\": \"发行面值\",\n            \"SECCODE\": \"债券代码\",\n            \"F007N\": \"发行价格\",\n            \"F006N\": \"实际发行总量\",\n            \"F005N\": \"计划发行总量\",\n            \"F022N\": \"最小认购单位\",\n            \"F017V\": \"承销方式\",\n            \"F052N\": \"最低认购额\",\n            \"F015V\": \"发行范围\",\n            \"BONDNAME\": \"债券名称\",\n            \"F014V\": \"发行对象\",\n            \"F013V\": \"发行方式\",\n            \"F023V\": \"募资用途说明\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"债券代码\",\n            \"债券简称\",\n            \"公告日期\",\n            \"交易所网上发行起始日\",\n            \"交易所网上发行终止日\",\n            \"计划发行总量\",\n            \"实际发行总量\",\n            \"发行面值\",\n            \"发行价格\",\n            \"发行方式\",\n            \"发行对象\",\n            \"发行范围\",\n            \"承销方式\",\n            \"最小认购单位\",\n            \"募资用途说明\",\n            \"最低认购额\",\n            \"债券名称\",\n        ]\n    ]\n    temp_df[\"公告日期\"] = pd.to_datetime(temp_df[\"公告日期\"], errors=\"coerce\").dt.date\n    temp_df[\"交易所网上发行起始日\"] = pd.to_datetime(\n        temp_df[\"交易所网上发行起始日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"交易所网上发行终止日\"] = pd.to_datetime(\n        temp_df[\"交易所网上发行终止日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"计划发行总量\"] = pd.to_numeric(temp_df[\"计划发行总量\"], errors=\"coerce\")\n    temp_df[\"实际发行总量\"] = pd.to_numeric(temp_df[\"实际发行总量\"], errors=\"coerce\")\n    temp_df[\"发行面值\"] = pd.to_numeric(temp_df[\"发行面值\"], errors=\"coerce\")\n    temp_df[\"发行价格\"] = pd.to_numeric(temp_df[\"发行价格\"], errors=\"coerce\")\n    temp_df[\"最小认购单位\"] = pd.to_numeric(temp_df[\"最小认购单位\"], errors=\"coerce\")\n    temp_df[\"最低认购额\"] = pd.to_numeric(temp_df[\"最低认购额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef bond_cov_issue_cninfo(\n    start_date: str = \"20210913\", end_date: str = \"20211112\"\n) -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-专题统计-债券报表-债券发行-可转债发行\n    http://webapi.cninfo.com.cn/#/thematicStatistics\n    :param start_date: 开始统计时间\n    :type start_date: str\n    :param end_date: 开始统计时间\n    :type end_date: str\n    :return: 可转债发行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1123\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"http://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"http://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"sdate\": \"-\".join([start_date[:4], start_date[4:6], start_date[6:]]),\n        \"edate\": \"-\".join([end_date[:4], end_date[4:6], end_date[6:]]),\n    }\n    r = requests.post(url, headers=headers, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.rename(\n        columns={\n            \"F029D\": \"发行起始日\",\n            \"SECNAME\": \"债券简称\",\n            \"F027D\": \"转股开始日期\",\n            \"F003D\": \"发行终止日\",\n            \"F007N\": \"发行面值\",\n            \"F053D\": \"转股终止日期\",\n            \"F005N\": \"计划发行总量\",\n            \"F051D\": \"网上申购日期\",\n            \"F026N\": \"初始转股价格\",\n            \"F066N\": \"网上申购数量下限\",\n            \"F052N\": \"发行价格\",\n            \"BONDNAME\": \"债券名称\",\n            \"F014V\": \"发行对象\",\n            \"F002V\": \"交易市场\",\n            \"F032V\": \"网上申购简称\",\n            \"F086V\": \"转股代码\",\n            \"DECLAREDATE\": \"公告日期\",\n            \"F028D\": \"债权登记日\",\n            \"F004D\": \"优先申购日\",\n            \"F068D\": \"网上申购中签结果公告日及退款日\",\n            \"F054D\": \"优先申购缴款日\",\n            \"F008N\": \"网上申购数量上限\",\n            \"SECCODE\": \"债券代码\",\n            \"F006N\": \"实际发行总量\",\n            \"F067N\": \"网上申购单位\",\n            \"F065N\": \"配售价格\",\n            \"F017V\": \"承销方式\",\n            \"F015V\": \"发行范围\",\n            \"F013V\": \"发行方式\",\n            \"F021V\": \"募资用途说明\",\n            \"F031V\": \"网上申购代码\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"债券代码\",\n            \"债券简称\",\n            \"公告日期\",\n            \"发行起始日\",\n            \"发行终止日\",\n            \"计划发行总量\",\n            \"实际发行总量\",\n            \"发行面值\",\n            \"发行价格\",\n            \"发行方式\",\n            \"发行对象\",\n            \"发行范围\",\n            \"承销方式\",\n            \"募资用途说明\",\n            \"初始转股价格\",\n            \"转股开始日期\",\n            \"转股终止日期\",\n            \"网上申购日期\",\n            \"网上申购代码\",\n            \"网上申购简称\",\n            \"网上申购数量上限\",\n            \"网上申购数量下限\",\n            \"网上申购单位\",\n            \"网上申购中签结果公告日及退款日\",\n            \"优先申购日\",\n            \"配售价格\",\n            \"债权登记日\",\n            \"优先申购缴款日\",\n            \"转股代码\",\n            \"交易市场\",\n            \"债券名称\",\n        ]\n    ]\n    temp_df[\"公告日期\"] = pd.to_datetime(temp_df[\"公告日期\"], errors=\"coerce\").dt.date\n    temp_df[\"发行起始日\"] = pd.to_datetime(\n        temp_df[\"发行起始日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"发行终止日\"] = pd.to_datetime(\n        temp_df[\"发行终止日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"转股开始日期\"] = pd.to_datetime(\n        temp_df[\"转股开始日期\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"转股终止日期\"] = pd.to_datetime(\n        temp_df[\"转股终止日期\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"转股终止日期\"] = pd.to_datetime(\n        temp_df[\"转股终止日期\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"网上申购日期\"] = pd.to_datetime(\n        temp_df[\"网上申购日期\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"网上申购中签结果公告日及退款日\"] = pd.to_datetime(\n        temp_df[\"网上申购中签结果公告日及退款日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"债权登记日\"] = pd.to_datetime(\n        temp_df[\"债权登记日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"优先申购日\"] = pd.to_datetime(\n        temp_df[\"优先申购日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"优先申购缴款日\"] = pd.to_datetime(\n        temp_df[\"优先申购缴款日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"计划发行总量\"] = pd.to_numeric(temp_df[\"计划发行总量\"], errors=\"coerce\")\n    temp_df[\"实际发行总量\"] = pd.to_numeric(temp_df[\"实际发行总量\"], errors=\"coerce\")\n    temp_df[\"发行面值\"] = pd.to_numeric(temp_df[\"发行面值\"], errors=\"coerce\")\n    temp_df[\"发行价格\"] = pd.to_numeric(temp_df[\"发行价格\"], errors=\"coerce\")\n    temp_df[\"初始转股价格\"] = pd.to_numeric(temp_df[\"初始转股价格\"], errors=\"coerce\")\n    temp_df[\"网上申购数量上限\"] = pd.to_numeric(\n        temp_df[\"网上申购数量上限\"], errors=\"coerce\"\n    )\n    temp_df[\"网上申购数量下限\"] = pd.to_numeric(\n        temp_df[\"网上申购数量下限\"], errors=\"coerce\"\n    )\n    temp_df[\"网上申购单位\"] = pd.to_numeric(temp_df[\"网上申购单位\"], errors=\"coerce\")\n    temp_df[\"配售价格\"] = pd.to_numeric(temp_df[\"配售价格\"], errors=\"coerce\")\n    return temp_df\n\n\ndef bond_cov_stock_issue_cninfo() -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-专题统计-债券报表-债券发行-可转债转股\n    http://webapi.cninfo.com.cn/#/thematicStatistics\n    :return: 可转债转股\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1124\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"http://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"http://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.post(url, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.rename(\n        columns={\n            \"F003N\": \"转股价格\",\n            \"SECNAME\": \"债券简称\",\n            \"DECLAREDATE\": \"公告日期\",\n            \"F005D\": \"自愿转换期终止日\",\n            \"F004D\": \"自愿转换期起始日\",\n            \"F017V\": \"标的股票\",\n            \"BONDNAME\": \"债券名称\",\n            \"F002V\": \"转股简称\",\n            \"F001V\": \"转股代码\",\n            \"SECCODE\": \"债券代码\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"债券代码\",\n            \"债券简称\",\n            \"公告日期\",\n            \"转股代码\",\n            \"转股简称\",\n            \"转股价格\",\n            \"自愿转换期起始日\",\n            \"自愿转换期终止日\",\n            \"标的股票\",\n            \"债券名称\",\n        ]\n    ]\n    temp_df[\"公告日期\"] = pd.to_datetime(temp_df[\"公告日期\"], errors=\"coerce\").dt.date\n    temp_df[\"自愿转换期起始日\"] = pd.to_datetime(\n        temp_df[\"自愿转换期起始日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"自愿转换期终止日\"] = pd.to_datetime(\n        temp_df[\"自愿转换期终止日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"转股价格\"] = pd.to_numeric(temp_df[\"转股价格\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    bond_treasure_issue_cninfo_df = bond_treasure_issue_cninfo(\n        start_date=\"20210910\", end_date=\"20211109\"\n    )\n    print(bond_treasure_issue_cninfo_df)\n\n    bond_local_government_issue_cninfo_df = bond_local_government_issue_cninfo(\n        start_date=\"20210911\", end_date=\"20211110\"\n    )\n    print(bond_local_government_issue_cninfo_df)\n\n    bond_corporate_issue_cninfo_df = bond_corporate_issue_cninfo(\n        start_date=\"20210911\", end_date=\"20211110\"\n    )\n    print(bond_corporate_issue_cninfo_df)\n\n    bond_cov_issue_cninfo_df = bond_cov_issue_cninfo(\n        start_date=\"20210913\", end_date=\"20211112\"\n    )\n    print(bond_cov_issue_cninfo_df)\n\n    bond_cov_stock_issue_cninfo_df = bond_cov_stock_issue_cninfo()\n    print(bond_cov_stock_issue_cninfo_df)\n"
  },
  {
    "path": "akshare/bond/bond_nafmii.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/3/16 9:00\nDesc:中国银行间市场交易商协会(https://www.nafmii.org.cn/)\n孔雀开屏(http://zhuce.nafmii.org.cn/fans/publicQuery/manager)的债券基本信息数据\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef bond_debt_nafmii(page: str = \"1\") -> pd.DataFrame:\n    \"\"\"\n    中国银行间市场交易商协会-非金融企业债务融资工具注册信息系统\n    http://zhuce.nafmii.org.cn/fans/publicQuery/manager\n    :param page: 输入数字页码\n    :type page: int\n    :return: 指定 sector 和 indicator 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://zhuce.nafmii.org.cn/fans/publicQuery/releFileProjDataGrid\"\n    payload = {\n        \"regFileName\": \"\",\n        \"itemType\": \"\",\n        \"startTime\": \"\",\n        \"endTime\": \"\",\n        \"entityName\": \"\",\n        \"leadManager\": \"\",\n        \"regPrdtType\": \"\",\n        \"page\": page,\n        \"rows\": 50,\n    }\n    payload.update({\"page\": page})\n    r = requests.post(url, data=payload)\n    data_json = r.json()  # 数据类型为 json 格式\n    temp_df = pd.DataFrame(data_json[\"rows\"])\n    temp_df.rename(\n        columns={\n            \"firstIssueAmount\": \"金额\",\n            \"isReg\": \"注册或备案\",\n            \"regFileName\": \"债券名称\",\n            \"regNoticeNo\": \"注册通知书文号\",\n            \"regPrdtType\": \"品种\",\n            \"releaseTime\": \"更新日期\",\n            \"projPhase\": \"项目状态\",\n        },\n        inplace=True,\n    )\n    if \"注册通知书文号\" not in temp_df.columns:\n        temp_df[\"注册通知书文号\"] = pd.NA\n    temp_df = temp_df[\n        [\n            \"债券名称\",\n            \"品种\",\n            \"注册或备案\",\n            \"金额\",\n            \"注册通知书文号\",\n            \"更新日期\",\n            \"项目状态\",\n        ]\n    ]\n    temp_df[\"金额\"] = pd.to_numeric(temp_df[\"金额\"], errors=\"coerce\")\n    temp_df[\"更新日期\"] = pd.to_datetime(temp_df[\"更新日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    bond_debt_nafmii_df = bond_debt_nafmii(page=\"1\")\n    print(bond_debt_nafmii_df)\n"
  },
  {
    "path": "akshare/bond/bond_summary.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/3/5 12:55\nDesc: 上登债券信息网-债券成交概览\nhttp://bond.sse.com.cn/data/statistics/overview/turnover/\n\"\"\"\n\nfrom io import BytesIO\n\nimport pandas as pd\nimport requests\n\n\ndef bond_cash_summary_sse(date: str = \"20210111\") -> pd.DataFrame:\n    \"\"\"\n    上登债券信息网-市场数据-市场统计-市场概览-债券现券市场概览\n    http://bond.sse.com.cn/data/statistics/overview/bondow/\n    :param date: 指定日期\n    :type date: str\n    :return: 债券成交概览\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://query.sse.com.cn/commonExcelDd.do\"\n    headers = {\n        \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\",\n        \"Referer\": \"http://bond.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36\",\n    }\n    params = {\n        \"sqlId\": \"COMMON_SSEBOND_SCSJ_SCTJ_SCGL_ZQXQSCGL_CX_L\",\n        \"TRADE_DATE\": f\"{date[:4]}-{date[4:6]}-{date[6:]}\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    temp_df = pd.read_excel(BytesIO(r.content), engine=\"xlrd\")\n    temp_df.columns = [\n        \"债券现货\",\n        \"托管只数\",\n        \"托管市值\",\n        \"托管面值\",\n        \"数据日期\",\n    ]\n    temp_df[\"托管只数\"] = pd.to_numeric(temp_df[\"托管只数\"])\n    temp_df[\"托管市值\"] = pd.to_numeric(temp_df[\"托管市值\"])\n    temp_df[\"托管面值\"] = pd.to_numeric(temp_df[\"托管面值\"])\n    temp_df[\"数据日期\"] = pd.to_datetime(temp_df[\"数据日期\"]).dt.date\n    return temp_df\n\n\ndef bond_deal_summary_sse(date: str = \"20210104\") -> pd.DataFrame:\n    \"\"\"\n    上登债券信息网-市场数据-市场统计-市场概览-债券成交概览\n    http://bond.sse.com.cn/data/statistics/overview/turnover/\n    :param date: 指定日期\n    :type date: str\n    :return: 债券成交概览\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://query.sse.com.cn/commonExcelDd.do\"\n    headers = {\n        \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\",\n        \"Referer\": \"http://bond.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36\",\n    }\n    params = {\n        \"sqlId\": \"COMMON_SSEBOND_SCSJ_SCTJ_SCGL_ZQCJGL_CX_L\",\n        \"TRADE_DATE\": f\"{date[:4]}-{date[4:6]}-{date[6:]}\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    temp_df = pd.read_excel(BytesIO(r.content))\n    temp_df.columns = [\n        \"债券类型\",\n        \"当日成交笔数\",\n        \"当日成交金额\",\n        \"当年成交笔数\",\n        \"当年成交金额\",\n        \"数据日期\",\n    ]\n    temp_df[\"当日成交笔数\"] = pd.to_numeric(temp_df[\"当日成交笔数\"])\n    temp_df[\"当日成交金额\"] = pd.to_numeric(temp_df[\"当日成交金额\"])\n    temp_df[\"当年成交笔数\"] = pd.to_numeric(temp_df[\"当年成交笔数\"])\n    temp_df[\"当年成交金额\"] = pd.to_numeric(temp_df[\"当年成交金额\"])\n    temp_df[\"数据日期\"] = pd.to_datetime(temp_df[\"数据日期\"]).dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    bond_cash_summary_sse_df = bond_cash_summary_sse(date=\"20210111\")\n    print(bond_cash_summary_sse_df)\n\n    bond_summary_sse_df = bond_deal_summary_sse(date=\"20210111\")\n    print(bond_summary_sse_df)\n"
  },
  {
    "path": "akshare/bond/bond_zh_cov.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/7/4 15:00\nDesc: 新浪财经-债券-沪深可转债-实时行情数据和历史行情数据\nhttps://vip.stock.finance.sina.com.cn/mkt/#hskzz_z\n\"\"\"\n\nimport datetime\nimport re\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\nfrom akshare.bond.cons import (\n    zh_sina_bond_hs_cov_count_url,\n    zh_sina_bond_hs_cov_payload,\n    zh_sina_bond_hs_cov_url,\n    zh_sina_bond_hs_cov_hist_url,\n)\nfrom akshare.stock.cons import hk_js_decode\nfrom akshare.utils import demjson\nfrom akshare.utils.func import fetch_paginated_data\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef _get_zh_bond_hs_cov_page_count() -> int:\n    \"\"\"\n    新浪财经-行情中心-债券-沪深可转债的总页数\n    https://vip.stock.finance.sina.com.cn/mkt/#hskzz_z\n    :return: 总页数\n    :rtype: int\n    \"\"\"\n    params = {\n        \"node\": \"hskzz_z\",\n    }\n    r = requests.get(zh_sina_bond_hs_cov_count_url, params=params)\n    page_count = int(re.findall(re.compile(r\"\\d+\"), r.text)[0]) / 80\n    if isinstance(page_count, int):\n        return page_count\n    else:\n        return int(page_count) + 1\n\n\ndef bond_zh_hs_cov_spot() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-债券-沪深可转债的实时行情数据; 大量抓取容易封IP\n    https://vip.stock.finance.sina.com.cn/mkt/#hskzz_z\n    :return: 所有沪深可转债在当前时刻的实时行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    big_df = pd.DataFrame()\n    page_count = _get_zh_bond_hs_cov_page_count()\n    zh_sina_bond_hs_payload_copy = zh_sina_bond_hs_cov_payload.copy()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_count + 1), leave=False):\n        zh_sina_bond_hs_payload_copy.update({\"page\": page})\n        res = requests.get(zh_sina_bond_hs_cov_url, params=zh_sina_bond_hs_payload_copy)\n        data_json = demjson.decode(res.text)\n        big_df = pd.concat(objs=[big_df, pd.DataFrame(data_json)], ignore_index=True)\n    return big_df\n\n\ndef bond_zh_hs_cov_daily(symbol: str = \"sh010107\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-债券-沪深可转债的历史行情数据, 大量抓取容易封 IP\n    https://vip.stock.finance.sina.com.cn/mkt/#hskzz_z\n    :param symbol: 沪深可转债代码; e.g., sh010107\n    :type symbol: str\n    :return: 指定沪深可转债代码的日 K 线数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    r = requests.get(\n        zh_sina_bond_hs_cov_hist_url.format(\n            symbol, datetime.datetime.now().strftime(\"%Y_%m_%d\")\n        )\n    )\n    js_code = py_mini_racer.MiniRacer()\n    js_code.eval(hk_js_decode)\n    dict_list = js_code.call(\n        \"d\", r.text.split(\"=\")[1].split(\";\")[0].replace('\"', \"\")\n    )  # 执行js解密代码\n    data_df = pd.DataFrame(dict_list)\n    data_df[\"date\"] = pd.to_datetime(data_df[\"date\"]).dt.date\n    return data_df\n\n\ndef _code_id_map() -> dict:\n    \"\"\"\n    东方财富-股票和市场代码\n    https://quote.eastmoney.com/center/gridlist.html#hs_a_board\n    :return: 股票和市场代码\n    :rtype: dict\n    \"\"\"\n    url = \"https://80.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f12\",\n        \"fs\": \"m:1 t:2,m:1 t:23\",\n        \"fields\": \"f3,f12\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df[\"market_id\"] = 1\n    temp_df.rename(columns={\"f12\": \"sh_code\", \"market_id\": \"sh_id\"}, inplace=True)\n    code_id_dict = dict(zip(temp_df[\"sh_code\"], temp_df[\"sh_id\"]))\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f3\",\n        \"fs\": \"m:0 t:6,m:0 t:80\",\n        \"fields\": \"f3,f12\",\n    }\n    temp_df_sz = fetch_paginated_data(url, params)\n    temp_df_sz[\"sz_id\"] = 0\n    code_id_dict.update(dict(zip(temp_df_sz[\"f12\"], temp_df_sz[\"sz_id\"])))\n    return code_id_dict\n\n\ndef bond_zh_hs_cov_min(\n    symbol: str = \"sz128039\",\n    period: str = \"15\",\n    adjust: str = \"\",\n    start_date: str = \"1979-09-01 09:32:00\",\n    end_date: str = \"2222-01-01 09:32:00\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-可转债-分时行情\n    https://quote.eastmoney.com/concept/sz128039.html\n    :param symbol: 转债代码\n    :type symbol: str\n    :param period: choice of {'1', '5', '15', '30', '60'}\n    :type period: str\n    :param adjust: choice of {'', 'qfq', 'hfq'}\n    :type adjust: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :return: 分时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    market_type = {\"sh\": \"1\", \"sz\": \"0\"}\n    if period == \"1\":\n        url = \"https://push2.eastmoney.com/api/qt/stock/trends2/get\"\n        params = {\n            \"secid\": f\"{market_type[symbol[:2]]}.{symbol[2:]}\",\n            \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58\",\n            \"iscr\": \"0\",\n            \"iscca\": \"0\",\n            \"ut\": \"f057cbcbce2a86e2866ab8877db1d059\",\n            \"ndays\": \"1\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"trends\"]]\n        )\n        temp_df.columns = [\n            \"时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"最新价\",\n        ]\n        temp_df.index = pd.to_datetime(temp_df[\"时间\"])\n        temp_df = temp_df[start_date:end_date]\n        temp_df.reset_index(drop=True, inplace=True)\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n        temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"]).astype(\n            str\n        )  # show datatime here\n        return temp_df\n    else:\n        adjust_map = {\n            \"\": \"0\",\n            \"qfq\": \"1\",\n            \"hfq\": \"2\",\n        }\n        url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n        params = {\n            \"secid\": f\"{market_type[symbol[:2]]}.{symbol[2:]}\",\n            \"klt\": period,\n            \"fqt\": adjust_map[adjust],\n            \"lmt\": \"66\",\n            \"end\": \"20500000\",\n            \"iscca\": \"1\",\n            \"fields1\": \"f1,f2,f3,f4,f5\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n            \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n            \"forcect\": \"1\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"klines\"]]\n        )\n        temp_df.columns = [\n            \"时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"换手率\",\n        ]\n        temp_df.index = pd.to_datetime(temp_df[\"时间\"])\n        temp_df = temp_df[start_date:end_date]\n        temp_df.reset_index(drop=True, inplace=True)\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n        temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n        temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n        temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n        temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"]).astype(str)\n        temp_df = temp_df[\n            [\n                \"时间\",\n                \"开盘\",\n                \"收盘\",\n                \"最高\",\n                \"最低\",\n                \"涨跌幅\",\n                \"涨跌额\",\n                \"成交量\",\n                \"成交额\",\n                \"振幅\",\n                \"换手率\",\n            ]\n        ]\n        return temp_df\n\n\ndef bond_zh_hs_cov_pre_min(symbol: str = \"sh113570\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-可转债-分时行情-盘前\n    https://quote.eastmoney.com/concept/sz128039.html\n    :param symbol: 转债代码\n    :type symbol: str\n    :return: 分时行情-盘前\n    :rtype: pandas.DataFrame\n    \"\"\"\n    market_type = {\"sh\": \"1\", \"sz\": \"0\"}\n    url = \"https://push2.eastmoney.com/api/qt/stock/trends2/get\"\n    params = {\n        \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58\",\n        \"ndays\": \"1\",\n        \"iscr\": \"1\",\n        \"iscca\": \"0\",\n        \"secid\": f\"{market_type[symbol[:2]]}.{symbol[2:]}\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"trends\"]])\n    temp_df.columns = [\n        \"时间\",\n        \"开盘\",\n        \"收盘\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"最新价\",\n    ]\n    temp_df.index = pd.to_datetime(temp_df[\"时间\"])\n    temp_df.reset_index(drop=True, inplace=True)\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"]).astype(str)\n    return temp_df\n\n\ndef bond_zh_cov() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-新股数据-可转债数据\n    https://data.eastmoney.com/kzz/default.html\n    :return: 可转债数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"PUBLIC_START_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_BOND_CB_LIST\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"f2~01~CONVERT_STOCK_CODE~CONVERT_STOCK_PRICE,\"\n        \"f235~10~SECURITY_CODE~TRANSFER_PRICE,f236~10~SECURITY_CODE~TRANSFER_VALUE,\"\n        \"f2~10~SECURITY_CODE~CURRENT_BOND_PRICE,f237~10~SECURITY_CODE~TRANSFER_PREMIUM_RATIO,\"\n        \"f239~10~SECURITY_CODE~RESALE_TRIG_PRICE,f240~10~SECURITY_CODE~REDEEM_TRIG_PRICE,\"\n        \"f23~01~CONVERT_STOCK_CODE~PBV_RATIO\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.columns = [\n        \"债券代码\",\n        \"_\",\n        \"_\",\n        \"债券简称\",\n        \"_\",\n        \"上市时间\",\n        \"正股代码\",\n        \"_\",\n        \"信用评级\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"发行规模\",\n        \"申购上限\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"申购代码\",\n        \"_\",\n        \"申购日期\",\n        \"_\",\n        \"_\",\n        \"中签号发布日\",\n        \"原股东配售-股权登记日\",\n        \"正股简称\",\n        \"原股东配售-每股配售额\",\n        \"_\",\n        \"中签率\",\n        \"-\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"正股价\",\n        \"转股价\",\n        \"转股价值\",\n        \"债现价\",\n        \"转股溢价率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"债券代码\",\n            \"债券简称\",\n            \"申购日期\",\n            \"申购代码\",\n            \"申购上限\",\n            \"正股代码\",\n            \"正股简称\",\n            \"正股价\",\n            \"转股价\",\n            \"转股价值\",\n            \"债现价\",\n            \"转股溢价率\",\n            \"原股东配售-股权登记日\",\n            \"原股东配售-每股配售额\",\n            \"发行规模\",\n            \"中签号发布日\",\n            \"中签率\",\n            \"上市时间\",\n            \"信用评级\",\n        ]\n    ]\n\n    big_df[\"申购上限\"] = pd.to_numeric(big_df[\"申购上限\"], errors=\"coerce\")\n    big_df[\"正股价\"] = pd.to_numeric(big_df[\"正股价\"], errors=\"coerce\")\n    big_df[\"转股价\"] = pd.to_numeric(big_df[\"转股价\"], errors=\"coerce\")\n    big_df[\"转股价值\"] = pd.to_numeric(big_df[\"转股价值\"], errors=\"coerce\")\n    big_df[\"债现价\"] = pd.to_numeric(big_df[\"债现价\"], errors=\"coerce\")\n    big_df[\"转股溢价率\"] = pd.to_numeric(big_df[\"转股溢价率\"], errors=\"coerce\")\n    big_df[\"原股东配售-每股配售额\"] = pd.to_numeric(\n        big_df[\"原股东配售-每股配售额\"], errors=\"coerce\"\n    )\n    big_df[\"发行规模\"] = pd.to_numeric(big_df[\"发行规模\"], errors=\"coerce\")\n    big_df[\"中签率\"] = pd.to_numeric(big_df[\"中签率\"], errors=\"coerce\")\n    big_df[\"中签号发布日\"] = pd.to_datetime(\n        big_df[\"中签号发布日\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"上市时间\"] = pd.to_datetime(big_df[\"上市时间\"], errors=\"coerce\").dt.date\n    big_df[\"申购日期\"] = pd.to_datetime(big_df[\"申购日期\"], errors=\"coerce\").dt.date\n    big_df[\"原股东配售-股权登记日\"] = pd.to_datetime(\n        big_df[\"原股东配售-股权登记日\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"债现价\"] = big_df[\"债现价\"].fillna(100)\n    return big_df\n\n\ndef bond_cov_comparison() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-债券市场-可转债比价表\n    https://quote.eastmoney.com/center/fullscreenlist.html#convertible_comparison\n    :return: 可转债比价表数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://16.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f243\",\n        \"fs\": \"b:MK0354\",\n        \"fields\": \"f1,f152,f2,f3,f12,f13,f14,f227,f228,f229,f230,f231,f232,f233,f234,\"\n        \"f235,f236,f237,f238,f239,f240,f241,f242,f26,f243\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"转债最新价\",\n        \"转债涨跌幅\",\n        \"转债代码\",\n        \"_\",\n        \"转债名称\",\n        \"上市日期\",\n        \"_\",\n        \"纯债价值\",\n        \"_\",\n        \"正股最新价\",\n        \"正股涨跌幅\",\n        \"_\",\n        \"正股代码\",\n        \"_\",\n        \"正股名称\",\n        \"转股价\",\n        \"转股价值\",\n        \"转股溢价率\",\n        \"纯债溢价率\",\n        \"回售触发价\",\n        \"强赎触发价\",\n        \"到期赎回价\",\n        \"开始转股日\",\n        \"申购日期\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"转债代码\",\n            \"转债名称\",\n            \"转债最新价\",\n            \"转债涨跌幅\",\n            \"正股代码\",\n            \"正股名称\",\n            \"正股最新价\",\n            \"正股涨跌幅\",\n            \"转股价\",\n            \"转股价值\",\n            \"转股溢价率\",\n            \"纯债溢价率\",\n            \"回售触发价\",\n            \"强赎触发价\",\n            \"到期赎回价\",\n            \"纯债价值\",\n            \"开始转股日\",\n            \"上市日期\",\n            \"申购日期\",\n        ]\n    ]\n    return temp_df\n\n\ndef bond_zh_cov_info(\n    symbol: str = \"123121\", indicator: str = \"基本信息\"\n) -> pd.DataFrame:\n    \"\"\"\n    https://data.eastmoney.com/kzz/detail/123121.html\n    东方财富网-数据中心-新股数据-可转债详情\n    :param symbol: 可转债代码\n    :type symbol: str\n    :param indicator: choice of {\"基本信息\", \"中签号\", \"筹资用途\", \"重要日期\"}\n    :type indicator: str\n    :return: 可转债详情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    indicator_map = {\n        \"基本信息\": \"RPT_BOND_CB_LIST\",\n        \"中签号\": \"RPT_CB_BALLOTNUM\",\n        \"筹资用途\": \"RPT_BOND_BS_OPRFINVESTITEM\",\n        \"重要日期\": \"RPT_CB_IMPORTANTDATE\",\n    }\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_BOND_CB_LIST\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"f2~01~CONVERT_STOCK_CODE~CONVERT_STOCK_PRICE,f235~10~SECURITY_CODE~TRANSFER_PRICE,\"\n        \"f236~10~SECURITY_CODE~TRANSFER_VALUE,f2~10~SECURITY_CODE~CURRENT_BOND_PRICE,\"\n        \"f237~10~SECURITY_CODE~TRANSFER_PREMIUM_RATIO,f239~10~SECURITY_CODE~RESALE_TRIG_PRICE,\"\n        \"f240~10~SECURITY_CODE~REDEEM_TRIG_PRICE,f23~01~CONVERT_STOCK_CODE~PBV_RATIO\",\n        \"quoteType\": \"0\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f'(SECURITY_CODE=\"{symbol}\")',\n    }\n    if indicator == \"基本信息\":\n        params.update(\n            {\n                \"reportName\": indicator_map[indicator],\n                \"quoteColumns\": \"f2~01~CONVERT_STOCK_CODE~CONVERT_STOCK_PRICE,f235~10~SECURITY_CODE~TRANSFER_PRICE,\"\n                \"f236~10~SECURITY_CODE~TRANSFER_VALUE,f2~10~SECURITY_CODE~CURRENT_BOND_PRICE,\"\n                \"f237~10~SECURITY_CODE~TRANSFER_PREMIUM_RATIO,f239~10~SECURITY_CODE~RESALE_TRIG_PRICE,\"\n                \"f240~10~SECURITY_CODE~REDEEM_TRIG_PRICE,f23~01~CONVERT_STOCK_CODE~PBV_RATIO\",\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame.from_dict(data_json[\"result\"][\"data\"])\n        return temp_df\n    elif indicator == \"中签号\":\n        params.update(\n            {\n                \"reportName\": indicator_map[indicator],\n                \"quoteColumns\": \"\",\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame.from_dict(data_json[\"result\"][\"data\"])\n        return temp_df\n    elif indicator == \"筹资用途\":\n        params.update(\n            {\n                \"reportName\": indicator_map[indicator],\n                \"quoteColumns\": \"\",\n                \"sortColumns\": \"SORT\",\n                \"sortTypes\": \"1\",\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame.from_dict(data_json[\"result\"][\"data\"])\n        return temp_df\n    elif indicator == \"重要日期\":\n        params.update(\n            {\n                \"reportName\": indicator_map[indicator],\n                \"quoteColumns\": \"\",\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame.from_dict(data_json[\"result\"][\"data\"])\n        return temp_df\n    else:\n        return pd.DataFrame()\n\n\ndef bond_zh_cov_value_analysis(symbol: str = \"113527\") -> pd.DataFrame:\n    \"\"\"\n    https://data.eastmoney.com/kzz/detail/113527.html\n    东方财富网-数据中心-新股数据-可转债数据-价值分析-溢价率分析\n    :param symbol: 可转债代码\n    :type symbol: str\n    :return: 可转债价值分析\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/get\"\n    params = {\n        \"sty\": \"ALL\",\n        \"token\": \"894050c76af8597a853f5b408b759f5d\",\n        \"st\": \"date\",\n        \"sr\": \"1\",\n        \"source\": \"WEB\",\n        \"type\": \"RPTA_WEB_KZZ_LS\",\n        \"filter\": f'(zcode=\"{symbol}\")',\n        \"p\": \"1\",\n        \"ps\": \"8000\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"日期\",\n        \"-\",\n        \"-\",\n        \"转股价值\",\n        \"纯债价值\",\n        \"纯债溢价率\",\n        \"转股溢价率\",\n        \"收盘价\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"收盘价\",\n            \"纯债价值\",\n            \"转股价值\",\n            \"纯债溢价率\",\n            \"转股溢价率\",\n        ]\n    ]\n    temp_df[\"收盘价\"] = pd.to_numeric(temp_df[\"收盘价\"], errors=\"coerce\")\n    temp_df[\"纯债价值\"] = pd.to_numeric(temp_df[\"纯债价值\"], errors=\"coerce\")\n    temp_df[\"转股价值\"] = pd.to_numeric(temp_df[\"转股价值\"], errors=\"coerce\")\n    temp_df[\"纯债溢价率\"] = pd.to_numeric(temp_df[\"纯债溢价率\"], errors=\"coerce\")\n    temp_df[\"转股溢价率\"] = pd.to_numeric(temp_df[\"转股溢价率\"], errors=\"coerce\")\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    bond_zh_hs_cov_min_df = bond_zh_hs_cov_min(\n        symbol=\"sz128039\",\n        period=\"1\",\n        adjust=\"hfq\",\n        start_date=\"1979-09-01 09:32:00\",\n        end_date=\"2222-01-01 09:32:00\",\n    )\n    print(bond_zh_hs_cov_min_df)\n\n    bond_zh_hs_cov_pre_min_df = bond_zh_hs_cov_pre_min(symbol=\"sz128039\")\n    print(bond_zh_hs_cov_pre_min_df)\n\n    bond_zh_hs_cov_daily_df = bond_zh_hs_cov_daily(symbol=\"sz128039\")\n    print(bond_zh_hs_cov_daily_df)\n\n    bond_zh_hs_cov_spot_df = bond_zh_hs_cov_spot()\n    print(bond_zh_hs_cov_spot_df)\n\n    bond_zh_cov_df = bond_zh_cov()\n    print(bond_zh_cov_df)\n\n    bond_cov_comparison_df = bond_cov_comparison()\n    print(bond_cov_comparison_df)\n\n    bond_zh_cov_info_df = bond_zh_cov_info(symbol=\"123121\", indicator=\"基本信息\")\n    print(bond_zh_cov_info_df)\n\n    bond_zh_cov_value_analysis_df = bond_zh_cov_value_analysis(symbol=\"113527\")\n    print(bond_zh_cov_value_analysis_df)\n"
  },
  {
    "path": "akshare/bond/bond_zh_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/6/18 18:30\nDesc: 新浪财经-债券-沪深债券-实时行情数据和历史行情数据\nhttps://vip.stock.finance.sina.com.cn/mkt/#hs_z\n\"\"\"\n\nimport datetime\nimport re\n\nimport pandas as pd\nimport requests\nimport py_mini_racer\n\nfrom akshare.bond.cons import (\n    zh_sina_bond_hs_count_url,\n    zh_sina_bond_hs_payload,\n    zh_sina_bond_hs_url,\n    zh_sina_bond_hs_hist_url,\n)\nfrom akshare.stock.cons import hk_js_decode\nfrom akshare.utils import demjson\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef get_zh_bond_hs_page_count() -> int:\n    \"\"\"\n    行情中心首页-债券-沪深债券的总页数\n    https://vip.stock.finance.sina.com.cn/mkt/#hs_z\n    :return: 总页数\n    :rtype: int\n    \"\"\"\n    params = {\n        \"node\": \"hs_z\",\n    }\n    res = requests.get(zh_sina_bond_hs_count_url, params=params)\n    page_count = int(re.findall(re.compile(r\"\\d+\"), res.text)[0]) / 80\n    if isinstance(page_count, int):\n        return page_count\n    else:\n        return int(page_count) + 1\n\n\ndef bond_zh_hs_spot(start_page: str = \"1\", end_page: str = \"10\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-债券-沪深债券-实时行情数据, 大量抓取容易封IP\n    https://vip.stock.finance.sina.com.cn/mkt/#hs_z\n    :param start_page: 分页起始页\n    :type start_page: str\n    :param end_page: 分页结束页\n    :type end_page: str\n    :return: 所有沪深债券在当前时刻的实时行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    page_count = get_zh_bond_hs_page_count()\n    page_count = int(page_count)\n    zh_sina_bond_hs_payload_copy = zh_sina_bond_hs_payload.copy()\n    tqdm = get_tqdm()\n    big_df = pd.DataFrame()\n    start_page = int(start_page)\n    end_page = int(end_page) + 1 if int(end_page) + 1 <= page_count else page_count\n    for page in tqdm(range(start_page, end_page), leave=False):\n        zh_sina_bond_hs_payload_copy.update({\"page\": page})\n        r = requests.get(zh_sina_bond_hs_url, params=zh_sina_bond_hs_payload_copy)\n        data_json = demjson.decode(r.text)\n        temp_df = pd.DataFrame(data_json)\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"代码\",\n        \"-\",\n        \"名称\",\n        \"最新价\",\n        \"涨跌额\",\n        \"涨跌幅\",\n        \"买入\",\n        \"卖出\",\n        \"昨收\",\n        \"今开\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"买入\",\n            \"卖出\",\n            \"昨收\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    big_df[\"买入\"] = pd.to_numeric(big_df[\"买入\"], errors=\"coerce\")\n    big_df[\"卖出\"] = pd.to_numeric(big_df[\"卖出\"], errors=\"coerce\")\n    big_df[\"昨收\"] = pd.to_numeric(big_df[\"昨收\"], errors=\"coerce\")\n    big_df[\"今开\"] = pd.to_numeric(big_df[\"今开\"], errors=\"coerce\")\n    big_df[\"最高\"] = pd.to_numeric(big_df[\"最高\"], errors=\"coerce\")\n    big_df[\"最低\"] = pd.to_numeric(big_df[\"最低\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    return big_df\n\n\ndef bond_zh_hs_daily(symbol: str = \"sh010107\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-债券-沪深债券-历史行情数据, 大量抓取容易封 IP\n    https://vip.stock.finance.sina.com.cn/mkt/#hs_z\n    :param symbol: 沪深债券代码; e.g., sh010107\n    :type symbol: str\n    :return: 指定沪深债券代码的日 K 线数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    r = requests.get(\n        zh_sina_bond_hs_hist_url.format(\n            symbol, datetime.datetime.now().strftime(\"%Y_%m_%d\")\n        )\n    )\n    js_code = py_mini_racer.MiniRacer()\n    js_code.eval(hk_js_decode)\n    dict_list = js_code.call(\n        \"d\", r.text.split(\"=\")[1].split(\";\")[0].replace('\"', \"\")\n    )  # 执行 js 解密代码\n    data_df = pd.DataFrame(dict_list)\n    data_df[\"date\"] = pd.to_datetime(data_df[\"date\"], errors=\"coerce\").dt.date\n    data_df[\"open\"] = pd.to_numeric(data_df[\"open\"], errors=\"coerce\")\n    data_df[\"high\"] = pd.to_numeric(data_df[\"high\"], errors=\"coerce\")\n    data_df[\"low\"] = pd.to_numeric(data_df[\"low\"], errors=\"coerce\")\n    data_df[\"close\"] = pd.to_numeric(data_df[\"close\"], errors=\"coerce\")\n    return data_df\n\n\nif __name__ == \"__main__\":\n    bond_zh_hs_spot_df = bond_zh_hs_spot(start_page=\"1\", end_page=\"5\")\n    print(bond_zh_hs_spot_df)\n\n    bond_zh_hs_daily_df = bond_zh_hs_daily(symbol=\"sh010107\")\n    print(bond_zh_hs_daily_df)\n"
  },
  {
    "path": "akshare/bond/cons.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/10/20 10:21\nDesc: 债券配置文件\n\"\"\"\n\n# bond-cov-sina\nzh_sina_bond_hs_cov_url = \"http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeDataSimple\"\nzh_sina_bond_hs_cov_count_url = \"http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCountSimple\"\nzh_sina_bond_hs_cov_hist_url = (\n    \"https://finance.sina.com.cn/realstock/company/{}/hisdata/klc_kl.js?d={}\"\n)\nzh_sina_bond_hs_cov_payload = {\n    \"page\": \"1\",\n    \"num\": \"80\",\n    \"sort\": \"symbol\",\n    \"asc\": \"1\",\n    \"node\": \"hskzz_z\",\n    \"_s_r_a\": \"page\",\n}\n\n# bond-sina\nzh_sina_bond_hs_url = \"http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData\"\nzh_sina_bond_hs_count_url = \"http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCountSimple\"\nzh_sina_bond_hs_hist_url = (\n    \"https://finance.sina.com.cn/realstock/company/{}/hisdata/klc_kl.js?d={}\"\n)\nzh_sina_bond_hs_payload = {\n    \"page\": \"1\",\n    \"num\": \"80\",\n    \"sort\": \"symbol\",\n    \"asc\": \"1\",\n    \"node\": \"hs_z\",\n    \"_s_r_a\": \"page\",\n}\n\n# headers\nSHORT_HEADERS = {\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36\"\n}\n\n# quote\nMARKET_QUOTE_URL = \"http://www.chinamoney.com.cn/ags/ms/cm-u-md-bond/CbMktMakQuot?flag=1&lang=cn&abdAssetEncdShrtDesc=&emaEntyEncdShrtDesc=\"\nMARKET_QUOTE_PAYLOAD = {\n    \"flag\": \"1\",\n    \"lang\": \"cn\",\n    \"abdAssetEncdShrtDesc\": \"\",\n    \"emaEntyEncdShrtDesc\": \"\",\n}\n\n# trade\nMARKET_TRADE_URL = (\n    \"http://www.chinamoney.com.cn/ags/ms/cm-u-md-bond/CbtPri?lang=cn&flag=1&bondName=\"\n)\nMARKET_TRADE_PAYLOAD = {\"lang\": \"cn\", \"flag\": \"1\", \"bondName\": \"\"}\n"
  },
  {
    "path": "akshare/cal/__init__.py",
    "content": ""
  },
  {
    "path": "akshare/cal/rv.py",
    "content": "\"\"\"\nYang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python\nhttps://github.com/hugogobato/Yang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python\n论文地址：https://www.jstor.org/stable/10.1086/209650\n\"\"\"\n\nimport warnings\n\nimport numpy as np\nimport pandas as pd\n\n\ndef rv_from_stock_zh_a_hist_min_em(\n    symbol=\"000001\",\n    start_date=\"2021-10-20 09:30:00\",\n    end_date=\"2024-11-01 15:00:00\",\n    period=\"1\",\n    adjust=\"hfq\",\n) -> pd.DataFrame:\n    \"\"\"\n    从东方财富网获取股票的分钟级历史行情数据,并进行数据清洗和格式化为计算 yz 已实现波动率所需的数据格式\n    https://quote.eastmoney.com/concept/sh603777.html?from=classic\n    :param symbol: 股票代码,如\"000001\"\n    :type symbol: str\n    :param start_date: 开始日期时间,格式\"YYYY-MM-DD HH:MM:SS\"\n    :type start_date: str\n    :param end_date: 结束日期时间,格式\"YYYY-MM-DD HH:MM:SS\"\n    :type end_date: str\n    :param period: 时间周期,可选{'1','5','15','30','60'}分钟\n    :type period: str\n    :param adjust: 复权方式,可选{'','qfq'(前复权),'hfq'(后复权)}\n    :type adjust: str\n    :return: 整理后的分钟行情数据,包含Date(索引),Open,High,Low,Close列\n    :rtype: pandas.DataFrame\n    \"\"\"\n    from akshare.stock_feature.stock_hist_em import stock_zh_a_hist_min_em\n\n    temp_df = stock_zh_a_hist_min_em(\n        symbol=symbol,\n        start_date=start_date,\n        end_date=end_date,\n        period=period,\n        adjust=adjust,\n    )\n    temp_df.rename(\n        columns={\n            \"时间\": \"Date\",\n            \"开盘\": \"Open\",\n            \"最高\": \"High\",\n            \"最低\": \"Low\",\n            \"收盘\": \"Close\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[temp_df[\"Open\"] != 0]\n    temp_df[\"Date\"] = pd.to_datetime(temp_df[\"Date\"])\n    temp_df.set_index(keys=\"Date\", inplace=True)\n    return temp_df\n\n\ndef rv_from_futures_zh_minute_sina(\n    symbol: str = \"IF2008\", period: str = \"5\"\n) -> pd.DataFrame:\n    \"\"\"\n    从新浪财经获取期货的分钟级历史行情数据,并进行数据清洗和格式化\n    https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_3\n    :param symbol: 期货合约代码,如\"IF2008\"代表沪深300期货2020年8月合约\n    :type symbol: str\n    :param period: 时间周期,可选{'1','5','15','30','60'}分钟\n    :type period: str\n    :return: 整理后的分钟行情数据,包含Date(索引),Open,High,Low,Close列\n    :rtype: pandas.DataFrame\n    \"\"\"\n    from akshare.futures.futures_zh_sina import futures_zh_minute_sina\n\n    temp_df = futures_zh_minute_sina(symbol=symbol, period=period)\n    temp_df.rename(\n        columns={\n            \"datetime\": \"Date\",\n            \"open\": \"Open\",\n            \"high\": \"High\",\n            \"low\": \"Low\",\n            \"close\": \"Close\",\n        },\n        inplace=True,\n    )\n    temp_df[\"Date\"] = pd.to_datetime(temp_df[\"Date\"])\n    temp_df.set_index(keys=\"Date\", inplace=True)\n    return temp_df\n\n\ndef volatility_yz_rv(data: pd.DataFrame) -> pd.DataFrame:\n    (\n        \"\"\"\n    波动率-已实现波动率-Yang-Zhang 已实现波动率(Yang-Zhang Realized Volatility)\n    https://github.com/hugogobato/Yang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python\n    论文地址：https://www.jstor.org/stable/10.1086/209650\n    基于以下公式计算:\n    RV^2 = Vo + k*Vc + (1-k)*Vrs\n    其中:\n    - Vo: 隔夜波动率, Vo = 1/(n-1)*sum(Oi-Obar)^2\n        Oi为标准化开盘价, Obar为标准化开盘价均值\n    - Vc: 收盘波动率, Vc = 1/(n-1)*sum(ci-Cbar)^2\n        ci为标准化收盘价, Cbar为标准化收盘价均值\n    - k: 权重系数, k = 0.34/(1.34+(n+1)/(n-1))\n        n为样本数量\n    - Vrs: Rogers-Satchell波动率代理, Vrs = ui(ui-ci)+di(di-ci)\n        ui = ln(Hi/Oi), ci = ln(Ci/Oi), di = ln(Li/Oi), oi = ln(Oi/Ci-1)\n        Hi/Li/Ci/Oi分别为最高价/最低价/收盘价/开盘价\n\n    :param data: 包含 OHLC(开高低收) 价格的 pandas.DataFrame\n    :type data: pandas.DataFrame\n    :return: 包含 Yang-Zhang 实现波动率的 pandas.DataFrame\n    :rtype: pandas.DataFrame\n\n    要求输入数据包含以下列:\n    - Open: 开盘价\n    - High: 最高价\n    - Low: 最低价\n    - Close: 收盘价\n    # yang_zhang_rv formula is give as:\n    # RV^2 = Vo + k*Vc + (1-k)*Vrs\n    # where Vo = 1/(n-1)*sum(Oi-Obar)^2\n    # with oi = normalized opening price at time t and Obar = mean of normalized opening prices\n    # Vc = = 1/(n-1)*sum(ci-Cbar)^2\n    # with ci = normalized close price at time t and Cbar = mean of normalized close prices\n    # k = 0.34/(1.34+(n+1)/(n-1))\n    # with n = total number of days or time periods considered\n    # Vrs (Rogers & Satchell RV proxy) = ui(ui-ci)+di(di-ci)\n    # with ui = ln(Hi/Oi), ci = ln(Ci/Oi), di=(Li/Oi), oi = ln(Oi/Ci-1)\n    # where Hi = high price at time t and Li = low price at time t\n    \"\"\"\n        \"\"\n    )\n    warnings.filterwarnings(\"ignore\")\n\n    data[\"ui\"] = np.log(np.divide(data[\"High\"][1:], data[\"Open\"][1:]))\n    data[\"ci\"] = np.log(np.divide(data[\"Close\"][1:], data[\"Open\"][1:]))\n    data[\"di\"] = np.log(np.divide(data[\"Low\"][1:], data[\"Open\"][1:]))\n    data[\"oi\"] = np.log(np.divide(data[\"Open\"][1:], data[\"Close\"][: len(data) - 1]))\n    data = data[1:]\n    data[\"RS\"] = data[\"ui\"] * (data[\"ui\"] - data[\"ci\"]) + data[\"di\"] * (\n        data[\"di\"] - data[\"ci\"]\n    )\n    rs_var = data[\"RS\"].groupby(pd.Grouper(freq=\"1D\")).mean().dropna()\n    vc_and_vo = data[[\"oi\", \"ci\"]].groupby(pd.Grouper(freq=\"1D\")).var().dropna()\n    n = int(len(data) / len(rs_var))\n    k = 0.34 / (1.34 + (n + 1) / (n - 1))\n    yang_zhang_rv = np.sqrt((1 - k) * rs_var + vc_and_vo[\"oi\"] + vc_and_vo[\"ci\"] * k)\n    yang_zhang_rv_df = pd.DataFrame(yang_zhang_rv)\n    yang_zhang_rv_df.rename(columns={0: \"yz_rv\"}, inplace=True)\n    yang_zhang_rv_df.reset_index(inplace=True)\n    yang_zhang_rv_df.columns = [\"date\", \"rv\"]\n    yang_zhang_rv_df[\"date\"] = pd.to_datetime(\n        yang_zhang_rv_df[\"date\"], errors=\"coerce\"\n    ).dt.date\n    return yang_zhang_rv_df\n\n\nif __name__ == \"__main__\":\n    futures_df = rv_from_futures_zh_minute_sina(symbol=\"IF2008\", period=\"1\")\n    volatility_yz_rv_df = volatility_yz_rv(data=futures_df)\n    print(volatility_yz_rv_df)\n\n    stock_df = rv_from_stock_zh_a_hist_min_em(\n        symbol=\"000001\",\n        start_date=\"2021-10-20 09:30:00\",\n        end_date=\"2024-11-01 15:00:00\",\n        period=\"5\",\n        adjust=\"\",\n    )\n    volatility_yz_rv_df = volatility_yz_rv(data=stock_df)\n    print(volatility_yz_rv_df)\n"
  },
  {
    "path": "akshare/crypto/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2020/10/23 13:51\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/crypto/crypto_bitcoin_cme.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/9/5 15:41\nDesc: 芝加哥商业交易所-比特币成交量报告\nhttps://datacenter.jin10.com/reportType/dc_cme_btc_report\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef crypto_bitcoin_cme(date: str = \"20230830\") -> pd.DataFrame:\n    \"\"\"\n    芝加哥商业交易所-比特币成交量报告\n    https://datacenter.jin10.com/reportType/dc_cme_btc_report\n    :param date: Specific date, e.g., \"20230830\"\n    :type date: str\n    :return: 比特币成交量报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-api.jin10.com/reports/list\"\n    params = {\n        \"category\": \"cme\",\n        \"date\": \"-\".join([date[:4], date[4:6], date[6:]]),\n        \"attr_id\": \"4\",\n    }\n    headers = {\n        \"accept\": \"*/*\",\n        \"accept-encoding\": \"gzip, deflate, br\",\n        \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"cache-control\": \"no-cache\",\n        \"origin\": \"https://datacenter.jin10.com\",\n        \"pragma\": \"no-cache\",\n        \"referer\": \"https://datacenter.jin10.com/\",\n        \"sec-ch-ua\": '\" Not;A Brand\";v=\"99\", \"Google Chrome\";v=\"91\", \"Chromium\";v=\"91\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-fetch-dest\": \"empty\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-site\": \"same-site\",\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"\",\n        \"x-version\": \"1.0.0\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(\n        [item for item in data_json[\"data\"][\"values\"]],\n        columns=[item[\"name\"] for item in data_json[\"data\"][\"keys\"]],\n    )\n    temp_df[\"电子交易合约\"] = pd.to_numeric(temp_df[\"电子交易合约\"], errors=\"coerce\")\n    temp_df[\"场内成交合约\"] = pd.to_numeric(temp_df[\"场内成交合约\"], errors=\"coerce\")\n    temp_df[\"场外成交合约\"] = pd.to_numeric(temp_df[\"场外成交合约\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"未平仓合约\"] = pd.to_numeric(temp_df[\"未平仓合约\"], errors=\"coerce\")\n    temp_df[\"持仓变化\"] = pd.to_numeric(temp_df[\"持仓变化\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    crypto_bitcoin_cme_df = crypto_bitcoin_cme(date=\"20230830\")\n    print(crypto_bitcoin_cme_df)\n"
  },
  {
    "path": "akshare/crypto/crypto_hold.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/8/31 23:00\nDesc: 金十数据-比特币持仓报告\nhttps://datacenter.jin10.com/dc_report?name=bitcoint\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef crypto_bitcoin_hold_report():\n    \"\"\"\n    金十数据-比特币持仓报告\n    https://datacenter.jin10.com/dc_report?name=bitcoint\n    :return: 比特币持仓报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-api.jin10.com/bitcoin_treasuries/list\"\n    headers = {\n        \"X-App-Id\": \"lnFP5lxse24wPgtY\",\n        \"X-Version\": \"1.0.0\",\n    }\n    r = requests.get(url, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"values\"])\n    temp_df.columns = [\n        \"代码\",\n        \"公司名称-英文\",\n        \"国家/地区\",\n        \"市值\",\n        \"比特币占市值比重\",\n        \"持仓成本\",\n        \"持仓占比\",\n        \"持仓量\",\n        \"当日持仓市值\",\n        \"查询日期\",\n        \"公告链接\",\n        \"_\",\n        \"分类\",\n        \"倍数\",\n        \"_\",\n        \"公司名称-中文\",\n    ]\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"公司名称-英文\",\n            \"公司名称-中文\",\n            \"国家/地区\",\n            \"市值\",\n            \"比特币占市值比重\",\n            \"持仓成本\",\n            \"持仓占比\",\n            \"持仓量\",\n            \"当日持仓市值\",\n            \"查询日期\",\n            \"公告链接\",\n            \"分类\",\n            \"倍数\",\n        ]\n    ]\n    temp_df[\"市值\"] = pd.to_numeric(temp_df[\"市值\"], errors=\"coerce\")\n    temp_df[\"比特币占市值比重\"] = pd.to_numeric(\n        temp_df[\"比特币占市值比重\"], errors=\"coerce\"\n    )\n    temp_df[\"持仓成本\"] = pd.to_numeric(temp_df[\"持仓成本\"], errors=\"coerce\")\n    temp_df[\"持仓占比\"] = pd.to_numeric(temp_df[\"持仓占比\"], errors=\"coerce\")\n    temp_df[\"持仓量\"] = pd.to_numeric(temp_df[\"持仓量\"], errors=\"coerce\")\n    temp_df[\"当日持仓市值\"] = pd.to_numeric(temp_df[\"当日持仓市值\"], errors=\"coerce\")\n    temp_df[\"倍数\"] = pd.to_numeric(temp_df[\"倍数\"], errors=\"coerce\")\n    temp_df[\"查询日期\"] = pd.to_datetime(temp_df[\"查询日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    crypto_bitcoin_hold_report_df = crypto_bitcoin_hold_report()\n    print(crypto_bitcoin_hold_report_df)\n"
  },
  {
    "path": "akshare/currency/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2020/3/6 16:40\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/currency/currency.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/7/24 18:30\nDesc: currencybeacon 提供的外汇数据\n该网站需要先注册后获取 API 使用\nhttps://currencyscoop.com/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef currency_latest(\n    base: str = \"USD\", symbols: str = \"\", api_key: str = \"\"\n) -> pd.DataFrame:\n    \"\"\"\n    Latest data from currencyscoop.com\n    https://currencyscoop.com/api-documentation\n    :param base: The base currency you would like to use for your rates\n    :type base: str\n    :param symbols: A list of currencies you will like to see the rates for. You can refer to a list all supported currencies here\n    :type symbols: str\n    :param api_key: Account -> Account Details -> API KEY (use as password in external tools)\n    :type api_key: str\n    :return: Latest data of base currency\n    :rtype: pandas.DataFrame\n    \"\"\"\n    params = {\"base\": base, \"symbols\": symbols, \"api_key\": api_key}\n    url = \"https://api.currencyscoop.com/v1/latest\"\n    r = requests.get(url, params=params)\n    temp_df = pd.DataFrame.from_dict(r.json()[\"response\"])\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"])\n    temp_df.reset_index(inplace=True)\n    temp_df.rename(columns={\"index\": \"currency\"}, inplace=True)\n    return temp_df\n\n\ndef currency_history(\n    base: str = \"USD\", date: str = \"2023-02-03\", symbols: str = \"\", api_key: str = \"\"\n) -> pd.DataFrame:\n    \"\"\"\n    Latest data from currencyscoop.com\n    https://currencyscoop.com/api-documentation\n    :param base: The base currency you would like to use for your rates\n    :type base: str\n    :param date: Specific date, e.g., \"2020-02-03\"\n    :type date: str\n    :param symbols: A list of currencies you will like to see the rates for. You can refer to a list all supported currencies here\n    :type symbols: str\n    :param api_key: Account -> Account Details -> API KEY (use as password in external tools)\n    :type api_key: str\n    :return: Latest data of base currency\n    :rtype: pandas.DataFrame\n    \"\"\"\n    params = {\"base\": base, \"date\": date, \"symbols\": symbols, \"api_key\": api_key}\n    url = \"https://api.currencyscoop.com/v1/historical\"\n    r = requests.get(url, params=params)\n    temp_df = pd.DataFrame.from_dict(r.json()[\"response\"])\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n    temp_df.reset_index(inplace=True)\n    temp_df.rename(columns={\"index\": \"currency\"}, inplace=True)\n    return temp_df\n\n\ndef currency_time_series(\n    base: str = \"USD\",\n    start_date: str = \"2023-02-03\",\n    end_date: str = \"2023-03-04\",\n    symbols: str = \"\",\n    api_key: str = \"\",\n) -> pd.DataFrame:\n    \"\"\"\n    Time-series data from currencyscoop.com\n    P.S. need special authority\n    https://currencyscoop.com/api-documentation\n    :param base: The base currency you would like to use for your rates\n    :type base: str\n    :param start_date: Specific date, e.g., \"2020-02-03\"\n    :type start_date: str\n    :param end_date: Specific date, e.g., \"2020-02-03\"\n    :type end_date: str\n    :param symbols: A list of currencies you will like to see the rates for. You can refer to a list all supported currencies here\n    :type symbols: str\n    :param api_key: Account -> Account Details -> API KEY (use as password in external tools)\n    :type api_key: str\n    :return: Latest data of base currency\n    :rtype: pandas.DataFrame\n    \"\"\"\n    params = {\n        \"base\": base,\n        \"api_key\": api_key,\n        \"start_date\": start_date,\n        \"end_date\": end_date,\n        \"symbols\": symbols,\n    }\n    url = \"https://api.currencyscoop.com/v1/timeseries\"\n    r = requests.get(url, params=params)\n    temp_df = pd.DataFrame.from_dict(r.json()[\"response\"])\n    temp_df = temp_df.T\n    temp_df.reset_index(inplace=True)\n    temp_df.rename(columns={\"index\": \"date\"}, inplace=True)\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n    return temp_df\n\n\ndef currency_currencies(c_type: str = \"fiat\", api_key: str = \"\") -> pd.DataFrame:\n    \"\"\"\n    currencies data from currencyscoop.com\n    https://currencyscoop.com/api-documentation\n    :param c_type: now only \"fiat\" can return data\n    :type c_type: str\n    :param api_key: Account -> Account Details -> API KEY (use as password in external tools)\n    :type api_key: str\n    :return: Latest data of base currency\n    :rtype: pandas.DataFrame\n    \"\"\"\n    params = {\"type\": c_type, \"api_key\": api_key}\n    url = \"https://api.currencyscoop.com/v1/currencies\"\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"response\"])\n    return temp_df\n\n\ndef currency_convert(\n    base: str = \"USD\",\n    to: str = \"CNY\",\n    amount: str = \"10000\",\n    api_key: str = \"\",\n) -> pd.DataFrame:\n    \"\"\"\n    currencies data from currencyscoop.com\n    https://currencyscoop.com/api-documentation\n    :param base: The base currency you would like to use for your rates\n    :type base: str\n    :param to: The currency you would like to use for your rates\n    :type to: str\n    :param amount: The amount of base currency\n    :type amount: str\n    :param api_key: Account -> Account Details -> API KEY (use as password in external tools)\n    :type api_key: str\n    :return: Latest data of base currency\n    :rtype: pandas.Series\n    \"\"\"\n    params = {\n        \"from\": base,\n        \"to\": to,\n        \"amount\": amount,\n        \"api_key\": api_key,\n    }\n    url = \"https://api.currencyscoop.com/v1/convert\"\n    r = requests.get(url, params=params)\n    temp_se = pd.Series(r.json()[\"response\"])\n    temp_se[\"timestamp\"] = pd.to_datetime(temp_se[\"timestamp\"], unit=\"s\")\n    temp_df = temp_se.to_frame()\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\"item\", \"value\"]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    currency_latest_df = currency_latest(base=\"USD\", api_key=\"\")\n    print(currency_latest_df)\n\n    currency_history_df = currency_history(base=\"USD\", date=\"2023-02-03\", api_key=\"\")\n    print(currency_history_df)\n\n    currency_time_series_df = currency_time_series(\n        base=\"USD\",\n        start_date=\"2023-02-03\",\n        end_date=\"2023-03-04\",\n        symbols=\"\",\n        api_key=\"\",\n    )\n    print(currency_time_series_df)\n\n    currency_currencies_df = currency_currencies(c_type=\"fiat\", api_key=\"\")\n    print(currency_currencies_df)\n\n    currency_convert_se = currency_convert(\n        base=\"USD\", to=\"CNY\", amount=\"10000\", api_key=\"\"\n    )\n    print(currency_convert_se)\n"
  },
  {
    "path": "akshare/currency/currency_china_bank_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/12/8 17:20\nDesc: 新浪财经-中行人民币牌价历史数据查询\nhttps://biz.finance.sina.com.cn/forex/forex.php?startdate=2012-01-01&enddate=2021-06-14&money_code=EUR&type=0\n\"\"\"\n\nfrom functools import lru_cache\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\nfrom tqdm import tqdm\n\n\n@lru_cache()\ndef _currency_boc_sina_map(\n    start_date: str = \"20210614\", end_date: str = \"20230810\"\n) -> dict:\n    \"\"\"\n    外汇 symbol 和代码映射\n    https://biz.finance.sina.com.cn/forex/forex.php?startdate=2012-01-01&enddate=2021-06-14&money_code=EUR&type=0\n    :param start_date: 开始交易日\n    :type start_date: str\n    :param end_date: 结束交易日\n    :type end_date: str\n    :return: 外汇 symbol 和代码映射\n    :rtype: dict\n    \"\"\"\n    url = \"http://biz.finance.sina.com.cn/forex/forex.php\"\n    params = {\n        \"startdate\": \"-\".join([start_date[:4], start_date[4:6], start_date[6:]]),\n        \"enddate\": \"-\".join([end_date[:4], end_date[4:6], end_date[6:]]),\n        \"money_code\": \"EUR\",\n        \"type\": \"0\",\n    }\n    r = requests.get(url, params=params)\n    r.encoding = \"gbk\"\n    soup = BeautifulSoup(r.text, \"lxml\")\n    data_dict = dict(\n        zip(\n            [\n                item.text\n                for item in soup.find(attrs={\"id\": \"money_code\"}).find_all(\"option\")\n            ],\n            [\n                item[\"value\"]\n                for item in soup.find(attrs={\"id\": \"money_code\"}).find_all(\"option\")\n            ],\n        )\n    )\n    return data_dict\n\n\ndef currency_boc_sina(\n    symbol: str = \"美元\", start_date: str = \"20230304\", end_date: str = \"20231110\"\n) -> pd.DataFrame:\n    \"\"\"\n    新浪财经-中行人民币牌价历史数据查询\n    https://biz.finance.sina.com.cn/forex/forex.php?startdate=2012-01-01&enddate=2021-06-14&money_code=EUR&type=0\n    :param symbol: choice of {'美元', '英镑', '欧元', '澳门元', '泰国铢', '菲律宾比索', '港币', '瑞士法郎', '新加坡元', '瑞典克朗', '丹麦克朗', '挪威克朗', '日元', '加拿大元', '澳大利亚元', '新西兰元', '韩国元'}\n    :type symbol: str\n    :param start_date: 开始交易日\n    :type start_date: str\n    :param end_date: 结束交易日\n    :type end_date: str\n    :return: 中行人民币牌价历史数据查询\n    :rtype: pandas.DataFrame\n    \"\"\"\n    data_dict = _currency_boc_sina_map(start_date=start_date, end_date=end_date)\n    url = \"http://biz.finance.sina.com.cn/forex/forex.php\"\n    params = {\n        \"money_code\": data_dict[symbol],\n        \"type\": \"0\",\n        \"startdate\": \"-\".join([start_date[:4], start_date[4:6], start_date[6:]]),\n        \"enddate\": \"-\".join([end_date[:4], end_date[4:6], end_date[6:]]),\n        \"page\": \"1\",\n        \"call_type\": \"ajax\",\n    }\n    r = requests.get(url, params=params)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    soup.find(attrs={\"id\": \"money_code\"})\n    page_element_list = soup.find_all(\"a\", attrs={\"class\": \"page\"})\n    page_num = int(page_element_list[-2].text) if len(page_element_list) != 0 else 1\n    big_df = pd.DataFrame()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update({\"page\": page})\n        r = requests.get(url, params=params)\n        temp_df = pd.read_html(StringIO(r.text), header=0)[0]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"日期\",\n        \"中行汇买价\",\n        \"中行钞买价\",\n        \"中行钞卖价/汇卖价\",\n        \"央行中间价\",\n        \"中行折算价\",\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df[\"中行汇买价\"] = pd.to_numeric(big_df[\"中行汇买价\"], errors=\"coerce\")\n    big_df[\"中行钞买价\"] = pd.to_numeric(big_df[\"中行钞买价\"], errors=\"coerce\")\n    big_df[\"中行钞卖价/汇卖价\"] = pd.to_numeric(\n        big_df[\"中行钞卖价/汇卖价\"], errors=\"coerce\"\n    )\n    big_df[\"央行中间价\"] = pd.to_numeric(big_df[\"央行中间价\"], errors=\"coerce\")\n    big_df[\"中行折算价\"] = pd.to_numeric(big_df[\"中行折算价\"], errors=\"coerce\")\n    big_df.sort_values(by=[\"日期\"], inplace=True, ignore_index=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    currency_boc_sina_df = currency_boc_sina(\n        symbol=\"美元\", start_date=\"20230304\", end_date=\"20231110\"\n    )\n    print(currency_boc_sina_df)\n"
  },
  {
    "path": "akshare/currency/currency_safe.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/4/29 17:00\nDesc: 人民币汇率中间价\nhttps://www.safe.gov.cn/safe/rmbhlzjj/index.html\n\"\"\"\n\nimport re\nfrom datetime import datetime\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef currency_boc_safe() -> pd.DataFrame:\n    \"\"\"\n    人民币汇率中间价\n    https://www.safe.gov.cn/safe/rmbhlzjj/index.html\n    :return: 人民币汇率中间价\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.safe.gov.cn/safe/2020/1218/17833.html\"\n    r = requests.get(url)\n    r.encoding = \"utf8\"\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    content = soup.find(name=\"a\", string=re.compile(\"人民币汇率\"))[\"href\"]\n    url = f\"https://www.safe.gov.cn{content}\"\n    temp_df = pd.read_excel(url)\n    temp_df.sort_values(by=[\"日期\"], inplace=True)\n    temp_df.reset_index(inplace=True, drop=True)\n    start_date = (\n        (pd.Timestamp(temp_df[\"日期\"].tolist()[-1]) + pd.Timedelta(days=1))\n        .isoformat()\n        .split(\"T\")[0]\n    )\n    end_date = datetime.now().isoformat().split(\"T\")[0]\n    url = \"https://www.safe.gov.cn/AppStructured/hlw/RMBQuery.do\"\n    payload = {\n        \"startDate\": start_date,\n        \"endDate\": end_date,\n        \"queryYN\": \"true\",\n    }\n    r = requests.post(url, data=payload)\n    current_temp_df = pd.read_html(StringIO(r.text))[-1]\n    current_temp_df.sort_values(by=[\"日期\"], inplace=True)\n    current_temp_df.reset_index(inplace=True, drop=True)\n    big_df = pd.concat(objs=[temp_df, current_temp_df], ignore_index=True)\n    column_name_list = big_df.columns[1:]\n    for item in column_name_list:\n        big_df[item] = pd.to_numeric(big_df[item], errors=\"coerce\")\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\nif __name__ == \"__main__\":\n    currency_boc_safe_df = currency_boc_safe()\n    print(currency_boc_safe_df)\n"
  },
  {
    "path": "akshare/data/__init__.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2022/5/9 18:08\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/data/cninfo.js",
    "content": "localStorage = null;\n\n;(function (root, factory) {\n    if (typeof exports === \"object\") {\n        // CommonJS\n        module.exports = exports = factory();\n    } else if (typeof define === \"function\" && define.amd) {\n        // AMD\n        define([], factory);\n    } else {\n        // Global (browser)\n        root.CryptoJS = factory();\n    }\n}(this, function () {\n\n    /**\n     * CryptoJS core components.\n     */\n    var CryptoJS = CryptoJS || (function (Math, undefined) {\n        /*\n\t     * Local polyfil of Object.create\n\t     */\n        var create = Object.create || (function () {\n            function F() {\n            };\n\n            return function (obj) {\n                var subtype;\n\n                F.prototype = obj;\n\n                subtype = new F();\n\n                F.prototype = null;\n\n                return subtype;\n            };\n        }())\n\n        /**\n         * CryptoJS namespace.\n         */\n        var C = {};\n\n        /**\n         * Library namespace.\n         */\n        var C_lib = C.lib = {};\n\n        /**\n         * Base object for prototypal inheritance.\n         */\n        var Base = C_lib.Base = (function () {\n\n\n            return {\n                /**\n                 * Creates a new object that inherits from this object.\n                 *\n                 * @param {Object} overrides Properties to copy into the new object.\n                 *\n                 * @return {Object} The new object.\n                 *\n                 * @static\n                 *\n                 * @example\n                 *\n                 *     var MyType = CryptoJS.lib.Base.extend({\n                 *         field: 'value',\n                 *\n                 *         method: function () {\n                 *         }\n                 *     });\n                 */\n                extend: function (overrides) {\n                    // Spawn\n                    var subtype = create(this);\n\n                    // Augment\n                    if (overrides) {\n                        subtype.mixIn(overrides);\n                    }\n\n                    // Create default initializer\n                    if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n                        subtype.init = function () {\n                            subtype.$super.init.apply(this, arguments);\n                        };\n                    }\n\n                    // Initializer's prototype is the subtype object\n                    subtype.init.prototype = subtype;\n\n                    // Reference supertype\n                    subtype.$super = this;\n\n                    return subtype;\n                },\n\n                /**\n                 * Extends this object and runs the init method.\n                 * Arguments to create() will be passed to init().\n                 *\n                 * @return {Object} The new object.\n                 *\n                 * @static\n                 *\n                 * @example\n                 *\n                 *     var instance = MyType.create();\n                 */\n                create: function () {\n                    var instance = this.extend();\n                    instance.init.apply(instance, arguments);\n\n                    return instance;\n                },\n\n                /**\n                 * Initializes a newly created object.\n                 * Override this method to add some logic when your objects are created.\n                 *\n                 * @example\n                 *\n                 *     var MyType = CryptoJS.lib.Base.extend({\n                 *         init: function () {\n                 *             // ...\n                 *         }\n                 *     });\n                 */\n                init: function () {\n                },\n\n                /**\n                 * Copies properties into this object.\n                 *\n                 * @param {Object} properties The properties to mix in.\n                 *\n                 * @example\n                 *\n                 *     MyType.mixIn({\n                 *         field: 'value'\n                 *     });\n                 */\n                mixIn: function (properties) {\n                    for (var propertyName in properties) {\n                        if (properties.hasOwnProperty(propertyName)) {\n                            this[propertyName] = properties[propertyName];\n                        }\n                    }\n\n                    // IE won't copy toString using the loop above\n                    if (properties.hasOwnProperty('toString')) {\n                        this.toString = properties.toString;\n                    }\n                },\n\n                /**\n                 * Creates a copy of this object.\n                 *\n                 * @return {Object} The clone.\n                 *\n                 * @example\n                 *\n                 *     var clone = instance.clone();\n                 */\n                clone: function () {\n                    return this.init.prototype.extend(this);\n                }\n            };\n        }());\n\n        /**\n         * An array of 32-bit words.\n         *\n         * @property {Array} words The array of 32-bit words.\n         * @property {number} sigBytes The number of significant bytes in this word array.\n         */\n        var WordArray = C_lib.WordArray = Base.extend({\n            /**\n             * Initializes a newly created word array.\n             *\n             * @param {Array} words (Optional) An array of 32-bit words.\n             * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n             *\n             * @example\n             *\n             *     var wordArray = CryptoJS.lib.WordArray.create();\n             *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n             *     var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n             */\n            init: function (words, sigBytes) {\n                words = this.words = words || [];\n\n                if (sigBytes != undefined) {\n                    this.sigBytes = sigBytes;\n                } else {\n                    this.sigBytes = words.length * 4;\n                }\n            },\n\n            /**\n             * Converts this word array to a string.\n             *\n             * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n             *\n             * @return {string} The stringified word array.\n             *\n             * @example\n             *\n             *     var string = wordArray + '';\n             *     var string = wordArray.toString();\n             *     var string = wordArray.toString(CryptoJS.enc.Utf8);\n             */\n            toString: function (encoder) {\n                return (encoder || Hex).stringify(this);\n            },\n\n            /**\n             * Concatenates a word array to this word array.\n             *\n             * @param {WordArray} wordArray The word array to append.\n             *\n             * @return {WordArray} This word array.\n             *\n             * @example\n             *\n             *     wordArray1.concat(wordArray2);\n             */\n            concat: function (wordArray) {\n                // Shortcuts\n                var thisWords = this.words;\n                var thatWords = wordArray.words;\n                var thisSigBytes = this.sigBytes;\n                var thatSigBytes = wordArray.sigBytes;\n\n                // Clamp excess bits\n                this.clamp();\n\n                // Concat\n                if (thisSigBytes % 4) {\n                    // Copy one byte at a time\n                    for (var i = 0; i < thatSigBytes; i++) {\n                        var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n                        thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n                    }\n                } else {\n                    // Copy one word at a time\n                    for (var i = 0; i < thatSigBytes; i += 4) {\n                        thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n                    }\n                }\n                this.sigBytes += thatSigBytes;\n\n                // Chainable\n                return this;\n            },\n\n            /**\n             * Removes insignificant bits.\n             *\n             * @example\n             *\n             *     wordArray.clamp();\n             */\n            clamp: function () {\n                // Shortcuts\n                var words = this.words;\n                var sigBytes = this.sigBytes;\n\n                // Clamp\n                words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n                words.length = Math.ceil(sigBytes / 4);\n            },\n\n            /**\n             * Creates a copy of this word array.\n             *\n             * @return {WordArray} The clone.\n             *\n             * @example\n             *\n             *     var clone = wordArray.clone();\n             */\n            clone: function () {\n                var clone = Base.clone.call(this);\n                clone.words = this.words.slice(0);\n\n                return clone;\n            },\n\n            /**\n             * Creates a word array filled with random bytes.\n             *\n             * @param {number} nBytes The number of random bytes to generate.\n             *\n             * @return {WordArray} The random word array.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var wordArray = CryptoJS.lib.WordArray.random(16);\n             */\n            random: function (nBytes) {\n                var words = [];\n\n                var r = (function (m_w) {\n                    var m_w = m_w;\n                    var m_z = 0x3ade68b1;\n                    var mask = 0xffffffff;\n\n                    return function () {\n                        m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask;\n                        m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask;\n                        var result = ((m_z << 0x10) + m_w) & mask;\n                        result /= 0x100000000;\n                        result += 0.5;\n                        return result * (Math.random() > .5 ? 1 : -1);\n                    }\n                });\n\n                for (var i = 0, rcache; i < nBytes; i += 4) {\n                    var _r = r((rcache || Math.random()) * 0x100000000);\n\n                    rcache = _r() * 0x3ade67b7;\n                    words.push((_r() * 0x100000000) | 0);\n                }\n\n                return new WordArray.init(words, nBytes);\n            }\n        });\n\n        /**\n         * Encoder namespace.\n         */\n        var C_enc = C.enc = {};\n\n        /**\n         * Hex encoding strategy.\n         */\n        var Hex = C_enc.Hex = {\n            /**\n             * Converts a word array to a hex string.\n             *\n             * @param {WordArray} wordArray The word array.\n             *\n             * @return {string} The hex string.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n             */\n            stringify: function (wordArray) {\n                // Shortcuts\n                var words = wordArray.words;\n                var sigBytes = wordArray.sigBytes;\n\n                // Convert\n                var hexChars = [];\n                for (var i = 0; i < sigBytes; i++) {\n                    var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n                    hexChars.push((bite >>> 4).toString(16));\n                    hexChars.push((bite & 0x0f).toString(16));\n                }\n\n                return hexChars.join('');\n            },\n\n            /**\n             * Converts a hex string to a word array.\n             *\n             * @param {string} hexStr The hex string.\n             *\n             * @return {WordArray} The word array.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var wordArray = CryptoJS.enc.Hex.parse(hexString);\n             */\n            parse: function (hexStr) {\n                // Shortcut\n                var hexStrLength = hexStr.length;\n\n                // Convert\n                var words = [];\n                for (var i = 0; i < hexStrLength; i += 2) {\n                    words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n                }\n\n                return new WordArray.init(words, hexStrLength / 2);\n            }\n        };\n\n        /**\n         * Latin1 encoding strategy.\n         */\n        var Latin1 = C_enc.Latin1 = {\n            /**\n             * Converts a word array to a Latin1 string.\n             *\n             * @param {WordArray} wordArray The word array.\n             *\n             * @return {string} The Latin1 string.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n             */\n            stringify: function (wordArray) {\n                // Shortcuts\n                var words = wordArray.words;\n                var sigBytes = wordArray.sigBytes;\n\n                // Convert\n                var latin1Chars = [];\n                for (var i = 0; i < sigBytes; i++) {\n                    var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n                    latin1Chars.push(String.fromCharCode(bite));\n                }\n\n                return latin1Chars.join('');\n            },\n\n            /**\n             * Converts a Latin1 string to a word array.\n             *\n             * @param {string} latin1Str The Latin1 string.\n             *\n             * @return {WordArray} The word array.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n             */\n            parse: function (latin1Str) {\n                // Shortcut\n                var latin1StrLength = latin1Str.length;\n\n                // Convert\n                var words = [];\n                for (var i = 0; i < latin1StrLength; i++) {\n                    words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n                }\n\n                return new WordArray.init(words, latin1StrLength);\n            }\n        };\n\n        /**\n         * UTF-8 encoding strategy.\n         */\n        var Utf8 = C_enc.Utf8 = {\n            /**\n             * Converts a word array to a UTF-8 string.\n             *\n             * @param {WordArray} wordArray The word array.\n             *\n             * @return {string} The UTF-8 string.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n             */\n            stringify: function (wordArray) {\n                try {\n                    return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n                } catch (e) {\n                    throw new Error('Malformed UTF-8 data');\n                }\n            },\n\n            /**\n             * Converts a UTF-8 string to a word array.\n             *\n             * @param {string} utf8Str The UTF-8 string.\n             *\n             * @return {WordArray} The word array.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n             */\n            parse: function (utf8Str) {\n                return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n            }\n        };\n\n        /**\n         * Abstract buffered block algorithm template.\n         *\n         * The property blockSize must be implemented in a concrete subtype.\n         *\n         * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n         */\n        var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n            /**\n             * Resets this block algorithm's data buffer to its initial state.\n             *\n             * @example\n             *\n             *     bufferedBlockAlgorithm.reset();\n             */\n            reset: function () {\n                // Initial values\n                this._data = new WordArray.init();\n                this._nDataBytes = 0;\n            },\n\n            /**\n             * Adds new data to this block algorithm's buffer.\n             *\n             * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n             *\n             * @example\n             *\n             *     bufferedBlockAlgorithm._append('data');\n             *     bufferedBlockAlgorithm._append(wordArray);\n             */\n            _append: function (data) {\n                // Convert string to WordArray, else assume WordArray already\n                if (typeof data == 'string') {\n                    data = Utf8.parse(data);\n                }\n\n                // Append\n                this._data.concat(data);\n                this._nDataBytes += data.sigBytes;\n            },\n\n            /**\n             * Processes available data blocks.\n             *\n             * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n             *\n             * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n             *\n             * @return {WordArray} The processed data.\n             *\n             * @example\n             *\n             *     var processedData = bufferedBlockAlgorithm._process();\n             *     var processedData = bufferedBlockAlgorithm._process(!!'flush');\n             */\n            _process: function (doFlush) {\n                // Shortcuts\n                var data = this._data;\n                var dataWords = data.words;\n                var dataSigBytes = data.sigBytes;\n                var blockSize = this.blockSize;\n                var blockSizeBytes = blockSize * 4;\n\n                // Count blocks ready\n                var nBlocksReady = dataSigBytes / blockSizeBytes;\n                if (doFlush) {\n                    // Round up to include partial blocks\n                    nBlocksReady = Math.ceil(nBlocksReady);\n                } else {\n                    // Round down to include only full blocks,\n                    // less the number of blocks that must remain in the buffer\n                    nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n                }\n\n                // Count words ready\n                var nWordsReady = nBlocksReady * blockSize;\n\n                // Count bytes ready\n                var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n                // Process blocks\n                if (nWordsReady) {\n                    for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n                        // Perform concrete-algorithm logic\n                        this._doProcessBlock(dataWords, offset);\n                    }\n\n                    // Remove processed words\n                    var processedWords = dataWords.splice(0, nWordsReady);\n                    data.sigBytes -= nBytesReady;\n                }\n\n                // Return processed words\n                return new WordArray.init(processedWords, nBytesReady);\n            },\n\n            /**\n             * Creates a copy of this object.\n             *\n             * @return {Object} The clone.\n             *\n             * @example\n             *\n             *     var clone = bufferedBlockAlgorithm.clone();\n             */\n            clone: function () {\n                var clone = Base.clone.call(this);\n                clone._data = this._data.clone();\n\n                return clone;\n            },\n\n            _minBufferSize: 0\n        });\n\n        /**\n         * Abstract hasher template.\n         *\n         * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n         */\n        var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n            /**\n             * Configuration options.\n             */\n            cfg: Base.extend(),\n\n            /**\n             * Initializes a newly created hasher.\n             *\n             * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n             *\n             * @example\n             *\n             *     var hasher = CryptoJS.algo.SHA256.create();\n             */\n            init: function (cfg) {\n                // Apply config defaults\n                this.cfg = this.cfg.extend(cfg);\n\n                // Set initial values\n                this.reset();\n            },\n\n            /**\n             * Resets this hasher to its initial state.\n             *\n             * @example\n             *\n             *     hasher.reset();\n             */\n            reset: function () {\n                // Reset data buffer\n                BufferedBlockAlgorithm.reset.call(this);\n\n                // Perform concrete-hasher logic\n                this._doReset();\n            },\n\n            /**\n             * Updates this hasher with a message.\n             *\n             * @param {WordArray|string} messageUpdate The message to append.\n             *\n             * @return {Hasher} This hasher.\n             *\n             * @example\n             *\n             *     hasher.update('message');\n             *     hasher.update(wordArray);\n             */\n            update: function (messageUpdate) {\n                // Append\n                this._append(messageUpdate);\n\n                // Update the hash\n                this._process();\n\n                // Chainable\n                return this;\n            },\n\n            /**\n             * Finalizes the hash computation.\n             * Note that the finalize operation is effectively a destructive, read-once operation.\n             *\n             * @param {WordArray|string} messageUpdate (Optional) A final message update.\n             *\n             * @return {WordArray} The hash.\n             *\n             * @example\n             *\n             *     var hash = hasher.finalize();\n             *     var hash = hasher.finalize('message');\n             *     var hash = hasher.finalize(wordArray);\n             */\n            finalize: function (messageUpdate) {\n                // Final message update\n                if (messageUpdate) {\n                    this._append(messageUpdate);\n                }\n\n                // Perform concrete-hasher logic\n                var hash = this._doFinalize();\n\n                return hash;\n            },\n\n            blockSize: 512 / 32,\n\n            /**\n             * Creates a shortcut function to a hasher's object interface.\n             *\n             * @param {Hasher} hasher The hasher to create a helper for.\n             *\n             * @return {Function} The shortcut function.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n             */\n            _createHelper: function (hasher) {\n                return function (message, cfg) {\n                    return new hasher.init(cfg).finalize(message);\n                };\n            },\n\n            /**\n             * Creates a shortcut function to the HMAC's object interface.\n             *\n             * @param {Hasher} hasher The hasher to use in this HMAC helper.\n             *\n             * @return {Function} The shortcut function.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n             */\n            _createHmacHelper: function (hasher) {\n                return function (message, key) {\n                    return new C_algo.HMAC.init(hasher, key).finalize(message);\n                };\n            }\n        });\n\n        /**\n         * Algorithm namespace.\n         */\n        var C_algo = C.algo = {};\n\n        return C;\n    }(Math));\n\n\n    (function () {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var WordArray = C_lib.WordArray;\n        var C_enc = C.enc;\n\n        /**\n         * Base64 encoding strategy.\n         */\n        var Base64 = C_enc.Base64 = {\n            /**\n             * Converts a word array to a Base64 string.\n             *\n             * @param {WordArray} wordArray The word array.\n             *\n             * @return {string} The Base64 string.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n             */\n            stringify: function (wordArray) {\n                // Shortcuts\n                var words = wordArray.words;\n                var sigBytes = wordArray.sigBytes;\n                var map = this._map;\n\n                // Clamp excess bits\n                wordArray.clamp();\n\n                // Convert\n                var base64Chars = [];\n                for (var i = 0; i < sigBytes; i += 3) {\n                    var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n                    var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n                    var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n                    var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n                    for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n                        base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n                    }\n                }\n\n                // Add padding\n                var paddingChar = map.charAt(64);\n                if (paddingChar) {\n                    while (base64Chars.length % 4) {\n                        base64Chars.push(paddingChar);\n                    }\n                }\n\n                return base64Chars.join('');\n            },\n\n            /**\n             * Converts a Base64 string to a word array.\n             *\n             * @param {string} base64Str The Base64 string.\n             *\n             * @return {WordArray} The word array.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var wordArray = CryptoJS.enc.Base64.parse(base64String);\n             */\n            parse: function (base64Str) {\n                // Shortcuts\n                var base64StrLength = base64Str.length;\n                var map = this._map;\n                var reverseMap = this._reverseMap;\n\n                if (!reverseMap) {\n                    reverseMap = this._reverseMap = [];\n                    for (var j = 0; j < map.length; j++) {\n                        reverseMap[map.charCodeAt(j)] = j;\n                    }\n                }\n\n                // Ignore padding\n                var paddingChar = map.charAt(64);\n                if (paddingChar) {\n                    var paddingIndex = base64Str.indexOf(paddingChar);\n                    if (paddingIndex !== -1) {\n                        base64StrLength = paddingIndex;\n                    }\n                }\n\n                // Convert\n                return parseLoop(base64Str, base64StrLength, reverseMap);\n\n            },\n\n            _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n        };\n\n        function parseLoop(base64Str, base64StrLength, reverseMap) {\n            var words = [];\n            var nBytes = 0;\n            for (var i = 0; i < base64StrLength; i++) {\n                if (i % 4) {\n                    var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n                    var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n                    words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n                    nBytes++;\n                }\n            }\n            return WordArray.create(words, nBytes);\n        }\n    }());\n\n\n    (function (Math) {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var WordArray = C_lib.WordArray;\n        var Hasher = C_lib.Hasher;\n        var C_algo = C.algo;\n\n        // Constants table\n        var T = [];\n\n        // Compute constants\n        (function () {\n            for (var i = 0; i < 64; i++) {\n                T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n            }\n        }());\n\n        /**\n         * MD5 hash algorithm.\n         */\n        var MD5 = C_algo.MD5 = Hasher.extend({\n            _doReset: function () {\n                this._hash = new WordArray.init([\n                    0x67452301, 0xefcdab89,\n                    0x98badcfe, 0x10325476\n                ]);\n            },\n\n            _doProcessBlock: function (M, offset) {\n                // Swap endian\n                for (var i = 0; i < 16; i++) {\n                    // Shortcuts\n                    var offset_i = offset + i;\n                    var M_offset_i = M[offset_i];\n\n                    M[offset_i] = (\n                        (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n                        (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n                    );\n                }\n\n                // Shortcuts\n                var H = this._hash.words;\n\n                var M_offset_0 = M[offset + 0];\n                var M_offset_1 = M[offset + 1];\n                var M_offset_2 = M[offset + 2];\n                var M_offset_3 = M[offset + 3];\n                var M_offset_4 = M[offset + 4];\n                var M_offset_5 = M[offset + 5];\n                var M_offset_6 = M[offset + 6];\n                var M_offset_7 = M[offset + 7];\n                var M_offset_8 = M[offset + 8];\n                var M_offset_9 = M[offset + 9];\n                var M_offset_10 = M[offset + 10];\n                var M_offset_11 = M[offset + 11];\n                var M_offset_12 = M[offset + 12];\n                var M_offset_13 = M[offset + 13];\n                var M_offset_14 = M[offset + 14];\n                var M_offset_15 = M[offset + 15];\n\n                // Working varialbes\n                var a = H[0];\n                var b = H[1];\n                var c = H[2];\n                var d = H[3];\n\n                // Computation\n                a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n                d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n                c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n                b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n                a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n                d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n                c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n                b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n                a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n                d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n                c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n                b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n                a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n                d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n                c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n                b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n                a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n                d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n                c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n                b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n                a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n                d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n                c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n                b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n                a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n                d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n                c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n                b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n                a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n                d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n                c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n                b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n                a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n                d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n                c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n                b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n                a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n                d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n                c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n                b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n                a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n                d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n                c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n                b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n                a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n                d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n                c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n                b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n                a = II(a, b, c, d, M_offset_0, 6, T[48]);\n                d = II(d, a, b, c, M_offset_7, 10, T[49]);\n                c = II(c, d, a, b, M_offset_14, 15, T[50]);\n                b = II(b, c, d, a, M_offset_5, 21, T[51]);\n                a = II(a, b, c, d, M_offset_12, 6, T[52]);\n                d = II(d, a, b, c, M_offset_3, 10, T[53]);\n                c = II(c, d, a, b, M_offset_10, 15, T[54]);\n                b = II(b, c, d, a, M_offset_1, 21, T[55]);\n                a = II(a, b, c, d, M_offset_8, 6, T[56]);\n                d = II(d, a, b, c, M_offset_15, 10, T[57]);\n                c = II(c, d, a, b, M_offset_6, 15, T[58]);\n                b = II(b, c, d, a, M_offset_13, 21, T[59]);\n                a = II(a, b, c, d, M_offset_4, 6, T[60]);\n                d = II(d, a, b, c, M_offset_11, 10, T[61]);\n                c = II(c, d, a, b, M_offset_2, 15, T[62]);\n                b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n                // Intermediate hash value\n                H[0] = (H[0] + a) | 0;\n                H[1] = (H[1] + b) | 0;\n                H[2] = (H[2] + c) | 0;\n                H[3] = (H[3] + d) | 0;\n            },\n\n            _doFinalize: function () {\n                // Shortcuts\n                var data = this._data;\n                var dataWords = data.words;\n\n                var nBitsTotal = this._nDataBytes * 8;\n                var nBitsLeft = data.sigBytes * 8;\n\n                // Add padding\n                dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n                var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n                var nBitsTotalL = nBitsTotal;\n                dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n                    (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n                    (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n                );\n                dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n                    (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n                    (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n                );\n\n                data.sigBytes = (dataWords.length + 1) * 4;\n\n                // Hash final blocks\n                this._process();\n\n                // Shortcuts\n                var hash = this._hash;\n                var H = hash.words;\n\n                // Swap endian\n                for (var i = 0; i < 4; i++) {\n                    // Shortcut\n                    var H_i = H[i];\n\n                    H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n                        (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n                }\n\n                // Return final computed hash\n                return hash;\n            },\n\n            clone: function () {\n                var clone = Hasher.clone.call(this);\n                clone._hash = this._hash.clone();\n\n                return clone;\n            }\n        });\n\n        function FF(a, b, c, d, x, s, t) {\n            var n = a + ((b & c) | (~b & d)) + x + t;\n            return ((n << s) | (n >>> (32 - s))) + b;\n        }\n\n        function GG(a, b, c, d, x, s, t) {\n            var n = a + ((b & d) | (c & ~d)) + x + t;\n            return ((n << s) | (n >>> (32 - s))) + b;\n        }\n\n        function HH(a, b, c, d, x, s, t) {\n            var n = a + (b ^ c ^ d) + x + t;\n            return ((n << s) | (n >>> (32 - s))) + b;\n        }\n\n        function II(a, b, c, d, x, s, t) {\n            var n = a + (c ^ (b | ~d)) + x + t;\n            return ((n << s) | (n >>> (32 - s))) + b;\n        }\n\n        /**\n         * Shortcut function to the hasher's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         *\n         * @return {WordArray} The hash.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hash = CryptoJS.MD5('message');\n         *     var hash = CryptoJS.MD5(wordArray);\n         */\n        C.MD5 = Hasher._createHelper(MD5);\n\n        /**\n         * Shortcut function to the HMAC's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         * @param {WordArray|string} key The secret key.\n         *\n         * @return {WordArray} The HMAC.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hmac = CryptoJS.HmacMD5(message, key);\n         */\n        C.HmacMD5 = Hasher._createHmacHelper(MD5);\n    }(Math));\n\n\n    (function () {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var WordArray = C_lib.WordArray;\n        var Hasher = C_lib.Hasher;\n        var C_algo = C.algo;\n\n        // Reusable object\n        var W = [];\n\n        /**\n         * SHA-1 hash algorithm.\n         */\n        var SHA1 = C_algo.SHA1 = Hasher.extend({\n            _doReset: function () {\n                this._hash = new WordArray.init([\n                    0x67452301, 0xefcdab89,\n                    0x98badcfe, 0x10325476,\n                    0xc3d2e1f0\n                ]);\n            },\n\n            _doProcessBlock: function (M, offset) {\n                // Shortcut\n                var H = this._hash.words;\n\n                // Working variables\n                var a = H[0];\n                var b = H[1];\n                var c = H[2];\n                var d = H[3];\n                var e = H[4];\n\n                // Computation\n                for (var i = 0; i < 80; i++) {\n                    if (i < 16) {\n                        W[i] = M[offset + i] | 0;\n                    } else {\n                        var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n                        W[i] = (n << 1) | (n >>> 31);\n                    }\n\n                    var t = ((a << 5) | (a >>> 27)) + e + W[i];\n                    if (i < 20) {\n                        t += ((b & c) | (~b & d)) + 0x5a827999;\n                    } else if (i < 40) {\n                        t += (b ^ c ^ d) + 0x6ed9eba1;\n                    } else if (i < 60) {\n                        t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n                    } else /* if (i < 80) */ {\n                        t += (b ^ c ^ d) - 0x359d3e2a;\n                    }\n\n                    e = d;\n                    d = c;\n                    c = (b << 30) | (b >>> 2);\n                    b = a;\n                    a = t;\n                }\n\n                // Intermediate hash value\n                H[0] = (H[0] + a) | 0;\n                H[1] = (H[1] + b) | 0;\n                H[2] = (H[2] + c) | 0;\n                H[3] = (H[3] + d) | 0;\n                H[4] = (H[4] + e) | 0;\n            },\n\n            _doFinalize: function () {\n                // Shortcuts\n                var data = this._data;\n                var dataWords = data.words;\n\n                var nBitsTotal = this._nDataBytes * 8;\n                var nBitsLeft = data.sigBytes * 8;\n\n                // Add padding\n                dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n                dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n                dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n                data.sigBytes = dataWords.length * 4;\n\n                // Hash final blocks\n                this._process();\n\n                // Return final computed hash\n                return this._hash;\n            },\n\n            clone: function () {\n                var clone = Hasher.clone.call(this);\n                clone._hash = this._hash.clone();\n\n                return clone;\n            }\n        });\n\n        /**\n         * Shortcut function to the hasher's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         *\n         * @return {WordArray} The hash.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hash = CryptoJS.SHA1('message');\n         *     var hash = CryptoJS.SHA1(wordArray);\n         */\n        C.SHA1 = Hasher._createHelper(SHA1);\n\n        /**\n         * Shortcut function to the HMAC's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         * @param {WordArray|string} key The secret key.\n         *\n         * @return {WordArray} The HMAC.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hmac = CryptoJS.HmacSHA1(message, key);\n         */\n        C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n    }());\n\n\n    (function (Math) {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var WordArray = C_lib.WordArray;\n        var Hasher = C_lib.Hasher;\n        var C_algo = C.algo;\n\n        // Initialization and round constants tables\n        var H = [];\n        var K = [];\n\n        // Compute constants\n        (function () {\n            function isPrime(n) {\n                var sqrtN = Math.sqrt(n);\n                for (var factor = 2; factor <= sqrtN; factor++) {\n                    if (!(n % factor)) {\n                        return false;\n                    }\n                }\n\n                return true;\n            }\n\n            function getFractionalBits(n) {\n                return ((n - (n | 0)) * 0x100000000) | 0;\n            }\n\n            var n = 2;\n            var nPrime = 0;\n            while (nPrime < 64) {\n                if (isPrime(n)) {\n                    if (nPrime < 8) {\n                        H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n                    }\n                    K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n                    nPrime++;\n                }\n\n                n++;\n            }\n        }());\n\n        // Reusable object\n        var W = [];\n\n        /**\n         * SHA-256 hash algorithm.\n         */\n        var SHA256 = C_algo.SHA256 = Hasher.extend({\n            _doReset: function () {\n                this._hash = new WordArray.init(H.slice(0));\n            },\n\n            _doProcessBlock: function (M, offset) {\n                // Shortcut\n                var H = this._hash.words;\n\n                // Working variables\n                var a = H[0];\n                var b = H[1];\n                var c = H[2];\n                var d = H[3];\n                var e = H[4];\n                var f = H[5];\n                var g = H[6];\n                var h = H[7];\n\n                // Computation\n                for (var i = 0; i < 64; i++) {\n                    if (i < 16) {\n                        W[i] = M[offset + i] | 0;\n                    } else {\n                        var gamma0x = W[i - 15];\n                        var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n                            ((gamma0x << 14) | (gamma0x >>> 18)) ^\n                            (gamma0x >>> 3);\n\n                        var gamma1x = W[i - 2];\n                        var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n                            ((gamma1x << 13) | (gamma1x >>> 19)) ^\n                            (gamma1x >>> 10);\n\n                        W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n                    }\n\n                    var ch = (e & f) ^ (~e & g);\n                    var maj = (a & b) ^ (a & c) ^ (b & c);\n\n                    var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n                    var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n                    var t1 = h + sigma1 + ch + K[i] + W[i];\n                    var t2 = sigma0 + maj;\n\n                    h = g;\n                    g = f;\n                    f = e;\n                    e = (d + t1) | 0;\n                    d = c;\n                    c = b;\n                    b = a;\n                    a = (t1 + t2) | 0;\n                }\n\n                // Intermediate hash value\n                H[0] = (H[0] + a) | 0;\n                H[1] = (H[1] + b) | 0;\n                H[2] = (H[2] + c) | 0;\n                H[3] = (H[3] + d) | 0;\n                H[4] = (H[4] + e) | 0;\n                H[5] = (H[5] + f) | 0;\n                H[6] = (H[6] + g) | 0;\n                H[7] = (H[7] + h) | 0;\n            },\n\n            _doFinalize: function () {\n                // Shortcuts\n                var data = this._data;\n                var dataWords = data.words;\n\n                var nBitsTotal = this._nDataBytes * 8;\n                var nBitsLeft = data.sigBytes * 8;\n\n                // Add padding\n                dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n                dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n                dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n                data.sigBytes = dataWords.length * 4;\n\n                // Hash final blocks\n                this._process();\n\n                // Return final computed hash\n                return this._hash;\n            },\n\n            clone: function () {\n                var clone = Hasher.clone.call(this);\n                clone._hash = this._hash.clone();\n\n                return clone;\n            }\n        });\n\n        /**\n         * Shortcut function to the hasher's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         *\n         * @return {WordArray} The hash.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hash = CryptoJS.SHA256('message');\n         *     var hash = CryptoJS.SHA256(wordArray);\n         */\n        C.SHA256 = Hasher._createHelper(SHA256);\n\n        /**\n         * Shortcut function to the HMAC's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         * @param {WordArray|string} key The secret key.\n         *\n         * @return {WordArray} The HMAC.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hmac = CryptoJS.HmacSHA256(message, key);\n         */\n        C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n    }(Math));\n\n\n    (function () {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var WordArray = C_lib.WordArray;\n        var C_enc = C.enc;\n\n        /**\n         * UTF-16 BE encoding strategy.\n         */\n        var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n            /**\n             * Converts a word array to a UTF-16 BE string.\n             *\n             * @param {WordArray} wordArray The word array.\n             *\n             * @return {string} The UTF-16 BE string.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n             */\n            stringify: function (wordArray) {\n                // Shortcuts\n                var words = wordArray.words;\n                var sigBytes = wordArray.sigBytes;\n\n                // Convert\n                var utf16Chars = [];\n                for (var i = 0; i < sigBytes; i += 2) {\n                    var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n                    utf16Chars.push(String.fromCharCode(codePoint));\n                }\n\n                return utf16Chars.join('');\n            },\n\n            /**\n             * Converts a UTF-16 BE string to a word array.\n             *\n             * @param {string} utf16Str The UTF-16 BE string.\n             *\n             * @return {WordArray} The word array.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n             */\n            parse: function (utf16Str) {\n                // Shortcut\n                var utf16StrLength = utf16Str.length;\n\n                // Convert\n                var words = [];\n                for (var i = 0; i < utf16StrLength; i++) {\n                    words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n                }\n\n                return WordArray.create(words, utf16StrLength * 2);\n            }\n        };\n\n        /**\n         * UTF-16 LE encoding strategy.\n         */\n        C_enc.Utf16LE = {\n            /**\n             * Converts a word array to a UTF-16 LE string.\n             *\n             * @param {WordArray} wordArray The word array.\n             *\n             * @return {string} The UTF-16 LE string.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n             */\n            stringify: function (wordArray) {\n                // Shortcuts\n                var words = wordArray.words;\n                var sigBytes = wordArray.sigBytes;\n\n                // Convert\n                var utf16Chars = [];\n                for (var i = 0; i < sigBytes; i += 2) {\n                    var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n                    utf16Chars.push(String.fromCharCode(codePoint));\n                }\n\n                return utf16Chars.join('');\n            },\n\n            /**\n             * Converts a UTF-16 LE string to a word array.\n             *\n             * @param {string} utf16Str The UTF-16 LE string.\n             *\n             * @return {WordArray} The word array.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n             */\n            parse: function (utf16Str) {\n                // Shortcut\n                var utf16StrLength = utf16Str.length;\n\n                // Convert\n                var words = [];\n                for (var i = 0; i < utf16StrLength; i++) {\n                    words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n                }\n\n                return WordArray.create(words, utf16StrLength * 2);\n            }\n        };\n\n        function swapEndian(word) {\n            return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n        }\n    }());\n\n\n    (function () {\n        // Check if typed arrays are supported\n        if (typeof ArrayBuffer != 'function') {\n            return;\n        }\n\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var WordArray = C_lib.WordArray;\n\n        // Reference original init\n        var superInit = WordArray.init;\n\n        // Augment WordArray.init to handle typed arrays\n        var subInit = WordArray.init = function (typedArray) {\n            // Convert buffers to uint8\n            if (typedArray instanceof ArrayBuffer) {\n                typedArray = new Uint8Array(typedArray);\n            }\n\n            // Convert other array views to uint8\n            if (\n                typedArray instanceof Int8Array ||\n                (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n                typedArray instanceof Int16Array ||\n                typedArray instanceof Uint16Array ||\n                typedArray instanceof Int32Array ||\n                typedArray instanceof Uint32Array ||\n                typedArray instanceof Float32Array ||\n                typedArray instanceof Float64Array\n            ) {\n                typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n            }\n\n            // Handle Uint8Array\n            if (typedArray instanceof Uint8Array) {\n                // Shortcut\n                var typedArrayByteLength = typedArray.byteLength;\n\n                // Extract bytes\n                var words = [];\n                for (var i = 0; i < typedArrayByteLength; i++) {\n                    words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n                }\n\n                // Initialize this word array\n                superInit.call(this, words, typedArrayByteLength);\n            } else {\n                // Else call normal init\n                superInit.apply(this, arguments);\n            }\n        };\n\n        subInit.prototype = WordArray;\n    }());\n\n\n    /** @preserve\n     (c) 2012 by Cédric Mesnil. All rights reserved.\n\n     Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n     - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n     - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n     */\n\n    (function (Math) {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var WordArray = C_lib.WordArray;\n        var Hasher = C_lib.Hasher;\n        var C_algo = C.algo;\n\n        // Constants table\n        var _zl = WordArray.create([\n            0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n            7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n            3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n            1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n            4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n        var _zr = WordArray.create([\n            5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n            6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n            15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n            8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n            12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n        var _sl = WordArray.create([\n            11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n            7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n            11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n            11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n            9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]);\n        var _sr = WordArray.create([\n            8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n            9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n            9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n            15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n            8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]);\n\n        var _hl = WordArray.create([0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n        var _hr = WordArray.create([0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n        /**\n         * RIPEMD160 hash algorithm.\n         */\n        var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n            _doReset: function () {\n                this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n            },\n\n            _doProcessBlock: function (M, offset) {\n\n                // Swap endian\n                for (var i = 0; i < 16; i++) {\n                    // Shortcuts\n                    var offset_i = offset + i;\n                    var M_offset_i = M[offset_i];\n\n                    // Swap\n                    M[offset_i] = (\n                        (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n                        (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n                    );\n                }\n                // Shortcut\n                var H = this._hash.words;\n                var hl = _hl.words;\n                var hr = _hr.words;\n                var zl = _zl.words;\n                var zr = _zr.words;\n                var sl = _sl.words;\n                var sr = _sr.words;\n\n                // Working variables\n                var al, bl, cl, dl, el;\n                var ar, br, cr, dr, er;\n\n                ar = al = H[0];\n                br = bl = H[1];\n                cr = cl = H[2];\n                dr = dl = H[3];\n                er = el = H[4];\n                // Computation\n                var t;\n                for (var i = 0; i < 80; i += 1) {\n                    t = (al + M[offset + zl[i]]) | 0;\n                    if (i < 16) {\n                        t += f1(bl, cl, dl) + hl[0];\n                    } else if (i < 32) {\n                        t += f2(bl, cl, dl) + hl[1];\n                    } else if (i < 48) {\n                        t += f3(bl, cl, dl) + hl[2];\n                    } else if (i < 64) {\n                        t += f4(bl, cl, dl) + hl[3];\n                    } else {// if (i<80) {\n                        t += f5(bl, cl, dl) + hl[4];\n                    }\n                    t = t | 0;\n                    t = rotl(t, sl[i]);\n                    t = (t + el) | 0;\n                    al = el;\n                    el = dl;\n                    dl = rotl(cl, 10);\n                    cl = bl;\n                    bl = t;\n\n                    t = (ar + M[offset + zr[i]]) | 0;\n                    if (i < 16) {\n                        t += f5(br, cr, dr) + hr[0];\n                    } else if (i < 32) {\n                        t += f4(br, cr, dr) + hr[1];\n                    } else if (i < 48) {\n                        t += f3(br, cr, dr) + hr[2];\n                    } else if (i < 64) {\n                        t += f2(br, cr, dr) + hr[3];\n                    } else {// if (i<80) {\n                        t += f1(br, cr, dr) + hr[4];\n                    }\n                    t = t | 0;\n                    t = rotl(t, sr[i]);\n                    t = (t + er) | 0;\n                    ar = er;\n                    er = dr;\n                    dr = rotl(cr, 10);\n                    cr = br;\n                    br = t;\n                }\n                // Intermediate hash value\n                t = (H[1] + cl + dr) | 0;\n                H[1] = (H[2] + dl + er) | 0;\n                H[2] = (H[3] + el + ar) | 0;\n                H[3] = (H[4] + al + br) | 0;\n                H[4] = (H[0] + bl + cr) | 0;\n                H[0] = t;\n            },\n\n            _doFinalize: function () {\n                // Shortcuts\n                var data = this._data;\n                var dataWords = data.words;\n\n                var nBitsTotal = this._nDataBytes * 8;\n                var nBitsLeft = data.sigBytes * 8;\n\n                // Add padding\n                dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n                dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n                    (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |\n                    (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)\n                );\n                data.sigBytes = (dataWords.length + 1) * 4;\n\n                // Hash final blocks\n                this._process();\n\n                // Shortcuts\n                var hash = this._hash;\n                var H = hash.words;\n\n                // Swap endian\n                for (var i = 0; i < 5; i++) {\n                    // Shortcut\n                    var H_i = H[i];\n\n                    // Swap\n                    H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n                        (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n                }\n\n                // Return final computed hash\n                return hash;\n            },\n\n            clone: function () {\n                var clone = Hasher.clone.call(this);\n                clone._hash = this._hash.clone();\n\n                return clone;\n            }\n        });\n\n\n        function f1(x, y, z) {\n            return ((x) ^ (y) ^ (z));\n\n        }\n\n        function f2(x, y, z) {\n            return (((x) & (y)) | ((~x) & (z)));\n        }\n\n        function f3(x, y, z) {\n            return (((x) | (~(y))) ^ (z));\n        }\n\n        function f4(x, y, z) {\n            return (((x) & (z)) | ((y) & (~(z))));\n        }\n\n        function f5(x, y, z) {\n            return ((x) ^ ((y) | (~(z))));\n\n        }\n\n        function rotl(x, n) {\n            return (x << n) | (x >>> (32 - n));\n        }\n\n\n        /**\n         * Shortcut function to the hasher's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         *\n         * @return {WordArray} The hash.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hash = CryptoJS.RIPEMD160('message');\n         *     var hash = CryptoJS.RIPEMD160(wordArray);\n         */\n        C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n        /**\n         * Shortcut function to the HMAC's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         * @param {WordArray|string} key The secret key.\n         *\n         * @return {WordArray} The HMAC.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hmac = CryptoJS.HmacRIPEMD160(message, key);\n         */\n        C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n    }(Math));\n\n\n    (function () {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var Base = C_lib.Base;\n        var C_enc = C.enc;\n        var Utf8 = C_enc.Utf8;\n        var C_algo = C.algo;\n\n        /**\n         * HMAC algorithm.\n         */\n        var HMAC = C_algo.HMAC = Base.extend({\n            /**\n             * Initializes a newly created HMAC.\n             *\n             * @param {Hasher} hasher The hash algorithm to use.\n             * @param {WordArray|string} key The secret key.\n             *\n             * @example\n             *\n             *     var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n             */\n            init: function (hasher, key) {\n                // Init hasher\n                hasher = this._hasher = new hasher.init();\n\n                // Convert string to WordArray, else assume WordArray already\n                if (typeof key == 'string') {\n                    key = Utf8.parse(key);\n                }\n\n                // Shortcuts\n                var hasherBlockSize = hasher.blockSize;\n                var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n                // Allow arbitrary length keys\n                if (key.sigBytes > hasherBlockSizeBytes) {\n                    key = hasher.finalize(key);\n                }\n\n                // Clamp excess bits\n                key.clamp();\n\n                // Clone key for inner and outer pads\n                var oKey = this._oKey = key.clone();\n                var iKey = this._iKey = key.clone();\n\n                // Shortcuts\n                var oKeyWords = oKey.words;\n                var iKeyWords = iKey.words;\n\n                // XOR keys with pad constants\n                for (var i = 0; i < hasherBlockSize; i++) {\n                    oKeyWords[i] ^= 0x5c5c5c5c;\n                    iKeyWords[i] ^= 0x36363636;\n                }\n                oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n                // Set initial values\n                this.reset();\n            },\n\n            /**\n             * Resets this HMAC to its initial state.\n             *\n             * @example\n             *\n             *     hmacHasher.reset();\n             */\n            reset: function () {\n                // Shortcut\n                var hasher = this._hasher;\n\n                // Reset\n                hasher.reset();\n                hasher.update(this._iKey);\n            },\n\n            /**\n             * Updates this HMAC with a message.\n             *\n             * @param {WordArray|string} messageUpdate The message to append.\n             *\n             * @return {HMAC} This HMAC instance.\n             *\n             * @example\n             *\n             *     hmacHasher.update('message');\n             *     hmacHasher.update(wordArray);\n             */\n            update: function (messageUpdate) {\n                this._hasher.update(messageUpdate);\n\n                // Chainable\n                return this;\n            },\n\n            /**\n             * Finalizes the HMAC computation.\n             * Note that the finalize operation is effectively a destructive, read-once operation.\n             *\n             * @param {WordArray|string} messageUpdate (Optional) A final message update.\n             *\n             * @return {WordArray} The HMAC.\n             *\n             * @example\n             *\n             *     var hmac = hmacHasher.finalize();\n             *     var hmac = hmacHasher.finalize('message');\n             *     var hmac = hmacHasher.finalize(wordArray);\n             */\n            finalize: function (messageUpdate) {\n                // Shortcut\n                var hasher = this._hasher;\n\n                // Compute HMAC\n                var innerHash = hasher.finalize(messageUpdate);\n                hasher.reset();\n                var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n                return hmac;\n            }\n        });\n    }());\n\n\n    (function () {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var Base = C_lib.Base;\n        var WordArray = C_lib.WordArray;\n        var C_algo = C.algo;\n        var SHA1 = C_algo.SHA1;\n        var HMAC = C_algo.HMAC;\n\n        /**\n         * Password-Based Key Derivation Function 2 algorithm.\n         */\n        var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n            /**\n             * Configuration options.\n             *\n             * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n             * @property {Hasher} hasher The hasher to use. Default: SHA1\n             * @property {number} iterations The number of iterations to perform. Default: 1\n             */\n            cfg: Base.extend({\n                keySize: 128 / 32,\n                hasher: SHA1,\n                iterations: 1\n            }),\n\n            /**\n             * Initializes a newly created key derivation function.\n             *\n             * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n             *\n             * @example\n             *\n             *     var kdf = CryptoJS.algo.PBKDF2.create();\n             *     var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n             *     var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n             */\n            init: function (cfg) {\n                this.cfg = this.cfg.extend(cfg);\n            },\n\n            /**\n             * Computes the Password-Based Key Derivation Function 2.\n             *\n             * @param {WordArray|string} password The password.\n             * @param {WordArray|string} salt A salt.\n             *\n             * @return {WordArray} The derived key.\n             *\n             * @example\n             *\n             *     var key = kdf.compute(password, salt);\n             */\n            compute: function (password, salt) {\n                // Shortcut\n                var cfg = this.cfg;\n\n                // Init HMAC\n                var hmac = HMAC.create(cfg.hasher, password);\n\n                // Initial values\n                var derivedKey = WordArray.create();\n                var blockIndex = WordArray.create([0x00000001]);\n\n                // Shortcuts\n                var derivedKeyWords = derivedKey.words;\n                var blockIndexWords = blockIndex.words;\n                var keySize = cfg.keySize;\n                var iterations = cfg.iterations;\n\n                // Generate key\n                while (derivedKeyWords.length < keySize) {\n                    var block = hmac.update(salt).finalize(blockIndex);\n                    hmac.reset();\n\n                    // Shortcuts\n                    var blockWords = block.words;\n                    var blockWordsLength = blockWords.length;\n\n                    // Iterations\n                    var intermediate = block;\n                    for (var i = 1; i < iterations; i++) {\n                        intermediate = hmac.finalize(intermediate);\n                        hmac.reset();\n\n                        // Shortcut\n                        var intermediateWords = intermediate.words;\n\n                        // XOR intermediate with block\n                        for (var j = 0; j < blockWordsLength; j++) {\n                            blockWords[j] ^= intermediateWords[j];\n                        }\n                    }\n\n                    derivedKey.concat(block);\n                    blockIndexWords[0]++;\n                }\n                derivedKey.sigBytes = keySize * 4;\n\n                return derivedKey;\n            }\n        });\n\n        /**\n         * Computes the Password-Based Key Derivation Function 2.\n         *\n         * @param {WordArray|string} password The password.\n         * @param {WordArray|string} salt A salt.\n         * @param {Object} cfg (Optional) The configuration options to use for this computation.\n         *\n         * @return {WordArray} The derived key.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var key = CryptoJS.PBKDF2(password, salt);\n         *     var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n         *     var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n         */\n        C.PBKDF2 = function (password, salt, cfg) {\n            return PBKDF2.create(cfg).compute(password, salt);\n        };\n    }());\n\n\n    (function () {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var Base = C_lib.Base;\n        var WordArray = C_lib.WordArray;\n        var C_algo = C.algo;\n        var MD5 = C_algo.MD5;\n\n        /**\n         * This key derivation function is meant to conform with EVP_BytesToKey.\n         * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n         */\n        var EvpKDF = C_algo.EvpKDF = Base.extend({\n            /**\n             * Configuration options.\n             *\n             * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n             * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n             * @property {number} iterations The number of iterations to perform. Default: 1\n             */\n            cfg: Base.extend({\n                keySize: 128 / 32,\n                hasher: MD5,\n                iterations: 1\n            }),\n\n            /**\n             * Initializes a newly created key derivation function.\n             *\n             * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n             *\n             * @example\n             *\n             *     var kdf = CryptoJS.algo.EvpKDF.create();\n             *     var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n             *     var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n             */\n            init: function (cfg) {\n                this.cfg = this.cfg.extend(cfg);\n            },\n\n            /**\n             * Derives a key from a password.\n             *\n             * @param {WordArray|string} password The password.\n             * @param {WordArray|string} salt A salt.\n             *\n             * @return {WordArray} The derived key.\n             *\n             * @example\n             *\n             *     var key = kdf.compute(password, salt);\n             */\n            compute: function (password, salt) {\n                // Shortcut\n                var cfg = this.cfg;\n\n                // Init hasher\n                var hasher = cfg.hasher.create();\n\n                // Initial values\n                var derivedKey = WordArray.create();\n\n                // Shortcuts\n                var derivedKeyWords = derivedKey.words;\n                var keySize = cfg.keySize;\n                var iterations = cfg.iterations;\n\n                // Generate key\n                while (derivedKeyWords.length < keySize) {\n                    if (block) {\n                        hasher.update(block);\n                    }\n                    var block = hasher.update(password).finalize(salt);\n                    hasher.reset();\n\n                    // Iterations\n                    for (var i = 1; i < iterations; i++) {\n                        block = hasher.finalize(block);\n                        hasher.reset();\n                    }\n\n                    derivedKey.concat(block);\n                }\n                derivedKey.sigBytes = keySize * 4;\n\n                return derivedKey;\n            }\n        });\n\n        /**\n         * Derives a key from a password.\n         *\n         * @param {WordArray|string} password The password.\n         * @param {WordArray|string} salt A salt.\n         * @param {Object} cfg (Optional) The configuration options to use for this computation.\n         *\n         * @return {WordArray} The derived key.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var key = CryptoJS.EvpKDF(password, salt);\n         *     var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n         *     var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n         */\n        C.EvpKDF = function (password, salt, cfg) {\n            return EvpKDF.create(cfg).compute(password, salt);\n        };\n    }());\n\n\n    (function () {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var WordArray = C_lib.WordArray;\n        var C_algo = C.algo;\n        var SHA256 = C_algo.SHA256;\n\n        /**\n         * SHA-224 hash algorithm.\n         */\n        var SHA224 = C_algo.SHA224 = SHA256.extend({\n            _doReset: function () {\n                this._hash = new WordArray.init([\n                    0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n                    0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n                ]);\n            },\n\n            _doFinalize: function () {\n                var hash = SHA256._doFinalize.call(this);\n\n                hash.sigBytes -= 4;\n\n                return hash;\n            }\n        });\n\n        /**\n         * Shortcut function to the hasher's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         *\n         * @return {WordArray} The hash.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hash = CryptoJS.SHA224('message');\n         *     var hash = CryptoJS.SHA224(wordArray);\n         */\n        C.SHA224 = SHA256._createHelper(SHA224);\n\n        /**\n         * Shortcut function to the HMAC's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         * @param {WordArray|string} key The secret key.\n         *\n         * @return {WordArray} The HMAC.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hmac = CryptoJS.HmacSHA224(message, key);\n         */\n        C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n    }());\n\n\n    (function (undefined) {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var Base = C_lib.Base;\n        var X32WordArray = C_lib.WordArray;\n\n        /**\n         * x64 namespace.\n         */\n        var C_x64 = C.x64 = {};\n\n        /**\n         * A 64-bit word.\n         */\n        var X64Word = C_x64.Word = Base.extend({\n            /**\n             * Initializes a newly created 64-bit word.\n             *\n             * @param {number} high The high 32 bits.\n             * @param {number} low The low 32 bits.\n             *\n             * @example\n             *\n             *     var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n             */\n            init: function (high, low) {\n                this.high = high;\n                this.low = low;\n            }\n\n            /**\n             * Bitwise NOTs this word.\n             *\n             * @return {X64Word} A new x64-Word object after negating.\n             *\n             * @example\n             *\n             *     var negated = x64Word.not();\n             */\n            // not: function () {\n            // var high = ~this.high;\n            // var low = ~this.low;\n\n            // return X64Word.create(high, low);\n            // },\n\n            /**\n             * Bitwise ANDs this word with the passed word.\n             *\n             * @param {X64Word} word The x64-Word to AND with this word.\n             *\n             * @return {X64Word} A new x64-Word object after ANDing.\n             *\n             * @example\n             *\n             *     var anded = x64Word.and(anotherX64Word);\n             */\n            // and: function (word) {\n            // var high = this.high & word.high;\n            // var low = this.low & word.low;\n\n            // return X64Word.create(high, low);\n            // },\n\n            /**\n             * Bitwise ORs this word with the passed word.\n             *\n             * @param {X64Word} word The x64-Word to OR with this word.\n             *\n             * @return {X64Word} A new x64-Word object after ORing.\n             *\n             * @example\n             *\n             *     var ored = x64Word.or(anotherX64Word);\n             */\n            // or: function (word) {\n            // var high = this.high | word.high;\n            // var low = this.low | word.low;\n\n            // return X64Word.create(high, low);\n            // },\n\n            /**\n             * Bitwise XORs this word with the passed word.\n             *\n             * @param {X64Word} word The x64-Word to XOR with this word.\n             *\n             * @return {X64Word} A new x64-Word object after XORing.\n             *\n             * @example\n             *\n             *     var xored = x64Word.xor(anotherX64Word);\n             */\n            // xor: function (word) {\n            // var high = this.high ^ word.high;\n            // var low = this.low ^ word.low;\n\n            // return X64Word.create(high, low);\n            // },\n\n            /**\n             * Shifts this word n bits to the left.\n             *\n             * @param {number} n The number of bits to shift.\n             *\n             * @return {X64Word} A new x64-Word object after shifting.\n             *\n             * @example\n             *\n             *     var shifted = x64Word.shiftL(25);\n             */\n            // shiftL: function (n) {\n            // if (n < 32) {\n            // var high = (this.high << n) | (this.low >>> (32 - n));\n            // var low = this.low << n;\n            // } else {\n            // var high = this.low << (n - 32);\n            // var low = 0;\n            // }\n\n            // return X64Word.create(high, low);\n            // },\n\n            /**\n             * Shifts this word n bits to the right.\n             *\n             * @param {number} n The number of bits to shift.\n             *\n             * @return {X64Word} A new x64-Word object after shifting.\n             *\n             * @example\n             *\n             *     var shifted = x64Word.shiftR(7);\n             */\n            // shiftR: function (n) {\n            // if (n < 32) {\n            // var low = (this.low >>> n) | (this.high << (32 - n));\n            // var high = this.high >>> n;\n            // } else {\n            // var low = this.high >>> (n - 32);\n            // var high = 0;\n            // }\n\n            // return X64Word.create(high, low);\n            // },\n\n            /**\n             * Rotates this word n bits to the left.\n             *\n             * @param {number} n The number of bits to rotate.\n             *\n             * @return {X64Word} A new x64-Word object after rotating.\n             *\n             * @example\n             *\n             *     var rotated = x64Word.rotL(25);\n             */\n            // rotL: function (n) {\n            // return this.shiftL(n).or(this.shiftR(64 - n));\n            // },\n\n            /**\n             * Rotates this word n bits to the right.\n             *\n             * @param {number} n The number of bits to rotate.\n             *\n             * @return {X64Word} A new x64-Word object after rotating.\n             *\n             * @example\n             *\n             *     var rotated = x64Word.rotR(7);\n             */\n            // rotR: function (n) {\n            // return this.shiftR(n).or(this.shiftL(64 - n));\n            // },\n\n            /**\n             * Adds this word with the passed word.\n             *\n             * @param {X64Word} word The x64-Word to add with this word.\n             *\n             * @return {X64Word} A new x64-Word object after adding.\n             *\n             * @example\n             *\n             *     var added = x64Word.add(anotherX64Word);\n             */\n            // add: function (word) {\n            // var low = (this.low + word.low) | 0;\n            // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n            // var high = (this.high + word.high + carry) | 0;\n\n            // return X64Word.create(high, low);\n            // }\n        });\n\n        /**\n         * An array of 64-bit words.\n         *\n         * @property {Array} words The array of CryptoJS.x64.Word objects.\n         * @property {number} sigBytes The number of significant bytes in this word array.\n         */\n        var X64WordArray = C_x64.WordArray = Base.extend({\n            /**\n             * Initializes a newly created word array.\n             *\n             * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n             * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n             *\n             * @example\n             *\n             *     var wordArray = CryptoJS.x64.WordArray.create();\n             *\n             *     var wordArray = CryptoJS.x64.WordArray.create([\n             *         CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n             *         CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n             *     ]);\n             *\n             *     var wordArray = CryptoJS.x64.WordArray.create([\n             *         CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n             *         CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n             *     ], 10);\n             */\n            init: function (words, sigBytes) {\n                words = this.words = words || [];\n\n                if (sigBytes != undefined) {\n                    this.sigBytes = sigBytes;\n                } else {\n                    this.sigBytes = words.length * 8;\n                }\n            },\n\n            /**\n             * Converts this 64-bit word array to a 32-bit word array.\n             *\n             * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n             *\n             * @example\n             *\n             *     var x32WordArray = x64WordArray.toX32();\n             */\n            toX32: function () {\n                // Shortcuts\n                var x64Words = this.words;\n                var x64WordsLength = x64Words.length;\n\n                // Convert\n                var x32Words = [];\n                for (var i = 0; i < x64WordsLength; i++) {\n                    var x64Word = x64Words[i];\n                    x32Words.push(x64Word.high);\n                    x32Words.push(x64Word.low);\n                }\n\n                return X32WordArray.create(x32Words, this.sigBytes);\n            },\n\n            /**\n             * Creates a copy of this word array.\n             *\n             * @return {X64WordArray} The clone.\n             *\n             * @example\n             *\n             *     var clone = x64WordArray.clone();\n             */\n            clone: function () {\n                var clone = Base.clone.call(this);\n\n                // Clone \"words\" array\n                var words = clone.words = this.words.slice(0);\n\n                // Clone each X64Word object\n                var wordsLength = words.length;\n                for (var i = 0; i < wordsLength; i++) {\n                    words[i] = words[i].clone();\n                }\n\n                return clone;\n            }\n        });\n    }());\n\n\n    (function (Math) {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var WordArray = C_lib.WordArray;\n        var Hasher = C_lib.Hasher;\n        var C_x64 = C.x64;\n        var X64Word = C_x64.Word;\n        var C_algo = C.algo;\n\n        // Constants tables\n        var RHO_OFFSETS = [];\n        var PI_INDEXES = [];\n        var ROUND_CONSTANTS = [];\n\n        // Compute Constants\n        (function () {\n            // Compute rho offset constants\n            var x = 1, y = 0;\n            for (var t = 0; t < 24; t++) {\n                RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n                var newX = y % 5;\n                var newY = (2 * x + 3 * y) % 5;\n                x = newX;\n                y = newY;\n            }\n\n            // Compute pi index constants\n            for (var x = 0; x < 5; x++) {\n                for (var y = 0; y < 5; y++) {\n                    PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n                }\n            }\n\n            // Compute round constants\n            var LFSR = 0x01;\n            for (var i = 0; i < 24; i++) {\n                var roundConstantMsw = 0;\n                var roundConstantLsw = 0;\n\n                for (var j = 0; j < 7; j++) {\n                    if (LFSR & 0x01) {\n                        var bitPosition = (1 << j) - 1;\n                        if (bitPosition < 32) {\n                            roundConstantLsw ^= 1 << bitPosition;\n                        } else /* if (bitPosition >= 32) */ {\n                            roundConstantMsw ^= 1 << (bitPosition - 32);\n                        }\n                    }\n\n                    // Compute next LFSR\n                    if (LFSR & 0x80) {\n                        // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n                        LFSR = (LFSR << 1) ^ 0x71;\n                    } else {\n                        LFSR <<= 1;\n                    }\n                }\n\n                ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n            }\n        }());\n\n        // Reusable objects for temporary values\n        var T = [];\n        (function () {\n            for (var i = 0; i < 25; i++) {\n                T[i] = X64Word.create();\n            }\n        }());\n\n        /**\n         * SHA-3 hash algorithm.\n         */\n        var SHA3 = C_algo.SHA3 = Hasher.extend({\n            /**\n             * Configuration options.\n             *\n             * @property {number} outputLength\n             *   The desired number of bits in the output hash.\n             *   Only values permitted are: 224, 256, 384, 512.\n             *   Default: 512\n             */\n            cfg: Hasher.cfg.extend({\n                outputLength: 512\n            }),\n\n            _doReset: function () {\n                var state = this._state = []\n                for (var i = 0; i < 25; i++) {\n                    state[i] = new X64Word.init();\n                }\n\n                this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n            },\n\n            _doProcessBlock: function (M, offset) {\n                // Shortcuts\n                var state = this._state;\n                var nBlockSizeLanes = this.blockSize / 2;\n\n                // Absorb\n                for (var i = 0; i < nBlockSizeLanes; i++) {\n                    // Shortcuts\n                    var M2i = M[offset + 2 * i];\n                    var M2i1 = M[offset + 2 * i + 1];\n\n                    // Swap endian\n                    M2i = (\n                        (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |\n                        (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)\n                    );\n                    M2i1 = (\n                        (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |\n                        (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)\n                    );\n\n                    // Absorb message into state\n                    var lane = state[i];\n                    lane.high ^= M2i1;\n                    lane.low ^= M2i;\n                }\n\n                // Rounds\n                for (var round = 0; round < 24; round++) {\n                    // Theta\n                    for (var x = 0; x < 5; x++) {\n                        // Mix column lanes\n                        var tMsw = 0, tLsw = 0;\n                        for (var y = 0; y < 5; y++) {\n                            var lane = state[x + 5 * y];\n                            tMsw ^= lane.high;\n                            tLsw ^= lane.low;\n                        }\n\n                        // Temporary values\n                        var Tx = T[x];\n                        Tx.high = tMsw;\n                        Tx.low = tLsw;\n                    }\n                    for (var x = 0; x < 5; x++) {\n                        // Shortcuts\n                        var Tx4 = T[(x + 4) % 5];\n                        var Tx1 = T[(x + 1) % 5];\n                        var Tx1Msw = Tx1.high;\n                        var Tx1Lsw = Tx1.low;\n\n                        // Mix surrounding columns\n                        var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n                        var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n                        for (var y = 0; y < 5; y++) {\n                            var lane = state[x + 5 * y];\n                            lane.high ^= tMsw;\n                            lane.low ^= tLsw;\n                        }\n                    }\n\n                    // Rho Pi\n                    for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n                        // Shortcuts\n                        var lane = state[laneIndex];\n                        var laneMsw = lane.high;\n                        var laneLsw = lane.low;\n                        var rhoOffset = RHO_OFFSETS[laneIndex];\n\n                        // Rotate lanes\n                        if (rhoOffset < 32) {\n                            var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n                            var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n                        } else /* if (rhoOffset >= 32) */ {\n                            var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n                            var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n                        }\n\n                        // Transpose lanes\n                        var TPiLane = T[PI_INDEXES[laneIndex]];\n                        TPiLane.high = tMsw;\n                        TPiLane.low = tLsw;\n                    }\n\n                    // Rho pi at x = y = 0\n                    var T0 = T[0];\n                    var state0 = state[0];\n                    T0.high = state0.high;\n                    T0.low = state0.low;\n\n                    // Chi\n                    for (var x = 0; x < 5; x++) {\n                        for (var y = 0; y < 5; y++) {\n                            // Shortcuts\n                            var laneIndex = x + 5 * y;\n                            var lane = state[laneIndex];\n                            var TLane = T[laneIndex];\n                            var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n                            var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n                            // Mix rows\n                            lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n                            lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n                        }\n                    }\n\n                    // Iota\n                    var lane = state[0];\n                    var roundConstant = ROUND_CONSTANTS[round];\n                    lane.high ^= roundConstant.high;\n                    lane.low ^= roundConstant.low;\n                    ;\n                }\n            },\n\n            _doFinalize: function () {\n                // Shortcuts\n                var data = this._data;\n                var dataWords = data.words;\n                var nBitsTotal = this._nDataBytes * 8;\n                var nBitsLeft = data.sigBytes * 8;\n                var blockSizeBits = this.blockSize * 32;\n\n                // Add padding\n                dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n                dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n                data.sigBytes = dataWords.length * 4;\n\n                // Hash final blocks\n                this._process();\n\n                // Shortcuts\n                var state = this._state;\n                var outputLengthBytes = this.cfg.outputLength / 8;\n                var outputLengthLanes = outputLengthBytes / 8;\n\n                // Squeeze\n                var hashWords = [];\n                for (var i = 0; i < outputLengthLanes; i++) {\n                    // Shortcuts\n                    var lane = state[i];\n                    var laneMsw = lane.high;\n                    var laneLsw = lane.low;\n\n                    // Swap endian\n                    laneMsw = (\n                        (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |\n                        (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)\n                    );\n                    laneLsw = (\n                        (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |\n                        (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)\n                    );\n\n                    // Squeeze state to retrieve hash\n                    hashWords.push(laneLsw);\n                    hashWords.push(laneMsw);\n                }\n\n                // Return final computed hash\n                return new WordArray.init(hashWords, outputLengthBytes);\n            },\n\n            clone: function () {\n                var clone = Hasher.clone.call(this);\n\n                var state = clone._state = this._state.slice(0);\n                for (var i = 0; i < 25; i++) {\n                    state[i] = state[i].clone();\n                }\n\n                return clone;\n            }\n        });\n\n        /**\n         * Shortcut function to the hasher's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         *\n         * @return {WordArray} The hash.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hash = CryptoJS.SHA3('message');\n         *     var hash = CryptoJS.SHA3(wordArray);\n         */\n        C.SHA3 = Hasher._createHelper(SHA3);\n\n        /**\n         * Shortcut function to the HMAC's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         * @param {WordArray|string} key The secret key.\n         *\n         * @return {WordArray} The HMAC.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hmac = CryptoJS.HmacSHA3(message, key);\n         */\n        C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n    }(Math));\n\n\n    (function () {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var Hasher = C_lib.Hasher;\n        var C_x64 = C.x64;\n        var X64Word = C_x64.Word;\n        var X64WordArray = C_x64.WordArray;\n        var C_algo = C.algo;\n\n        function X64Word_create() {\n            return X64Word.create.apply(X64Word, arguments);\n        }\n\n        // Constants\n        var K = [\n            X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),\n            X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),\n            X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),\n            X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),\n            X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),\n            X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),\n            X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),\n            X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),\n            X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),\n            X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),\n            X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),\n            X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),\n            X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),\n            X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),\n            X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),\n            X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),\n            X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),\n            X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),\n            X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),\n            X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),\n            X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),\n            X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),\n            X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),\n            X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),\n            X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),\n            X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),\n            X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),\n            X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),\n            X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),\n            X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),\n            X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),\n            X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),\n            X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),\n            X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),\n            X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),\n            X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),\n            X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),\n            X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),\n            X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),\n            X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)\n        ];\n\n        // Reusable objects\n        var W = [];\n        (function () {\n            for (var i = 0; i < 80; i++) {\n                W[i] = X64Word_create();\n            }\n        }());\n\n        /**\n         * SHA-512 hash algorithm.\n         */\n        var SHA512 = C_algo.SHA512 = Hasher.extend({\n            _doReset: function () {\n                this._hash = new X64WordArray.init([\n                    new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),\n                    new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),\n                    new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),\n                    new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)\n                ]);\n            },\n\n            _doProcessBlock: function (M, offset) {\n                // Shortcuts\n                var H = this._hash.words;\n\n                var H0 = H[0];\n                var H1 = H[1];\n                var H2 = H[2];\n                var H3 = H[3];\n                var H4 = H[4];\n                var H5 = H[5];\n                var H6 = H[6];\n                var H7 = H[7];\n\n                var H0h = H0.high;\n                var H0l = H0.low;\n                var H1h = H1.high;\n                var H1l = H1.low;\n                var H2h = H2.high;\n                var H2l = H2.low;\n                var H3h = H3.high;\n                var H3l = H3.low;\n                var H4h = H4.high;\n                var H4l = H4.low;\n                var H5h = H5.high;\n                var H5l = H5.low;\n                var H6h = H6.high;\n                var H6l = H6.low;\n                var H7h = H7.high;\n                var H7l = H7.low;\n\n                // Working variables\n                var ah = H0h;\n                var al = H0l;\n                var bh = H1h;\n                var bl = H1l;\n                var ch = H2h;\n                var cl = H2l;\n                var dh = H3h;\n                var dl = H3l;\n                var eh = H4h;\n                var el = H4l;\n                var fh = H5h;\n                var fl = H5l;\n                var gh = H6h;\n                var gl = H6l;\n                var hh = H7h;\n                var hl = H7l;\n\n                // Rounds\n                for (var i = 0; i < 80; i++) {\n                    // Shortcut\n                    var Wi = W[i];\n\n                    // Extend message\n                    if (i < 16) {\n                        var Wih = Wi.high = M[offset + i * 2] | 0;\n                        var Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n                    } else {\n                        // Gamma0\n                        var gamma0x = W[i - 15];\n                        var gamma0xh = gamma0x.high;\n                        var gamma0xl = gamma0x.low;\n                        var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);\n                        var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n                        // Gamma1\n                        var gamma1x = W[i - 2];\n                        var gamma1xh = gamma1x.high;\n                        var gamma1xl = gamma1x.low;\n                        var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);\n                        var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n                        // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n                        var Wi7 = W[i - 7];\n                        var Wi7h = Wi7.high;\n                        var Wi7l = Wi7.low;\n\n                        var Wi16 = W[i - 16];\n                        var Wi16h = Wi16.high;\n                        var Wi16l = Wi16.low;\n\n                        var Wil = gamma0l + Wi7l;\n                        var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n                        var Wil = Wil + gamma1l;\n                        var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n                        var Wil = Wil + Wi16l;\n                        var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n                        Wi.high = Wih;\n                        Wi.low = Wil;\n                    }\n\n                    var chh = (eh & fh) ^ (~eh & gh);\n                    var chl = (el & fl) ^ (~el & gl);\n                    var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n                    var majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n                    var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));\n                    var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));\n                    var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));\n                    var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));\n\n                    // t1 = h + sigma1 + ch + K[i] + W[i]\n                    var Ki = K[i];\n                    var Kih = Ki.high;\n                    var Kil = Ki.low;\n\n                    var t1l = hl + sigma1l;\n                    var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n                    var t1l = t1l + chl;\n                    var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n                    var t1l = t1l + Kil;\n                    var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n                    var t1l = t1l + Wil;\n                    var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n                    // t2 = sigma0 + maj\n                    var t2l = sigma0l + majl;\n                    var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n                    // Update working variables\n                    hh = gh;\n                    hl = gl;\n                    gh = fh;\n                    gl = fl;\n                    fh = eh;\n                    fl = el;\n                    el = (dl + t1l) | 0;\n                    eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n                    dh = ch;\n                    dl = cl;\n                    ch = bh;\n                    cl = bl;\n                    bh = ah;\n                    bl = al;\n                    al = (t1l + t2l) | 0;\n                    ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n                }\n\n                // Intermediate hash value\n                H0l = H0.low = (H0l + al);\n                H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n                H1l = H1.low = (H1l + bl);\n                H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n                H2l = H2.low = (H2l + cl);\n                H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n                H3l = H3.low = (H3l + dl);\n                H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n                H4l = H4.low = (H4l + el);\n                H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n                H5l = H5.low = (H5l + fl);\n                H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n                H6l = H6.low = (H6l + gl);\n                H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n                H7l = H7.low = (H7l + hl);\n                H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n            },\n\n            _doFinalize: function () {\n                // Shortcuts\n                var data = this._data;\n                var dataWords = data.words;\n\n                var nBitsTotal = this._nDataBytes * 8;\n                var nBitsLeft = data.sigBytes * 8;\n\n                // Add padding\n                dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n                dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n                dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n                data.sigBytes = dataWords.length * 4;\n\n                // Hash final blocks\n                this._process();\n\n                // Convert hash to 32-bit word array before returning\n                var hash = this._hash.toX32();\n\n                // Return final computed hash\n                return hash;\n            },\n\n            clone: function () {\n                var clone = Hasher.clone.call(this);\n                clone._hash = this._hash.clone();\n\n                return clone;\n            },\n\n            blockSize: 1024 / 32\n        });\n\n        /**\n         * Shortcut function to the hasher's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         *\n         * @return {WordArray} The hash.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hash = CryptoJS.SHA512('message');\n         *     var hash = CryptoJS.SHA512(wordArray);\n         */\n        C.SHA512 = Hasher._createHelper(SHA512);\n\n        /**\n         * Shortcut function to the HMAC's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         * @param {WordArray|string} key The secret key.\n         *\n         * @return {WordArray} The HMAC.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hmac = CryptoJS.HmacSHA512(message, key);\n         */\n        C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n    }());\n\n\n    (function () {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_x64 = C.x64;\n        var X64Word = C_x64.Word;\n        var X64WordArray = C_x64.WordArray;\n        var C_algo = C.algo;\n        var SHA512 = C_algo.SHA512;\n\n        /**\n         * SHA-384 hash algorithm.\n         */\n        var SHA384 = C_algo.SHA384 = SHA512.extend({\n            _doReset: function () {\n                this._hash = new X64WordArray.init([\n                    new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),\n                    new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),\n                    new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),\n                    new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)\n                ]);\n            },\n\n            _doFinalize: function () {\n                var hash = SHA512._doFinalize.call(this);\n\n                hash.sigBytes -= 16;\n\n                return hash;\n            }\n        });\n\n        /**\n         * Shortcut function to the hasher's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         *\n         * @return {WordArray} The hash.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hash = CryptoJS.SHA384('message');\n         *     var hash = CryptoJS.SHA384(wordArray);\n         */\n        C.SHA384 = SHA512._createHelper(SHA384);\n\n        /**\n         * Shortcut function to the HMAC's object interface.\n         *\n         * @param {WordArray|string} message The message to hash.\n         * @param {WordArray|string} key The secret key.\n         *\n         * @return {WordArray} The HMAC.\n         *\n         * @static\n         *\n         * @example\n         *\n         *     var hmac = CryptoJS.HmacSHA384(message, key);\n         */\n        C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n    }());\n\n\n    /**\n     * Cipher core components.\n     */\n    CryptoJS.lib.Cipher || (function (undefined) {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var Base = C_lib.Base;\n        var WordArray = C_lib.WordArray;\n        var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n        var C_enc = C.enc;\n        var Utf8 = C_enc.Utf8;\n        var Base64 = C_enc.Base64;\n        var C_algo = C.algo;\n        var EvpKDF = C_algo.EvpKDF;\n\n        /**\n         * Abstract base cipher template.\n         *\n         * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n         * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n         * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n         * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n         */\n        var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n            /**\n             * Configuration options.\n             *\n             * @property {WordArray} iv The IV to use for this operation.\n             */\n            cfg: Base.extend(),\n\n            /**\n             * Creates this cipher in encryption mode.\n             *\n             * @param {WordArray} key The key.\n             * @param {Object} cfg (Optional) The configuration options to use for this operation.\n             *\n             * @return {Cipher} A cipher instance.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n             */\n            createEncryptor: function (key, cfg) {\n                return this.create(this._ENC_XFORM_MODE, key, cfg);\n            },\n\n            /**\n             * Creates this cipher in decryption mode.\n             *\n             * @param {WordArray} key The key.\n             * @param {Object} cfg (Optional) The configuration options to use for this operation.\n             *\n             * @return {Cipher} A cipher instance.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n             */\n            createDecryptor: function (key, cfg) {\n                return this.create(this._DEC_XFORM_MODE, key, cfg);\n            },\n\n            /**\n             * Initializes a newly created cipher.\n             *\n             * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n             * @param {WordArray} key The key.\n             * @param {Object} cfg (Optional) The configuration options to use for this operation.\n             *\n             * @example\n             *\n             *     var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n             */\n            init: function (xformMode, key, cfg) {\n                // Apply config defaults\n                this.cfg = this.cfg.extend(cfg);\n\n                // Store transform mode and key\n                this._xformMode = xformMode;\n                this._key = key;\n\n                // Set initial values\n                this.reset();\n            },\n\n            /**\n             * Resets this cipher to its initial state.\n             *\n             * @example\n             *\n             *     cipher.reset();\n             */\n            reset: function () {\n                // Reset data buffer\n                BufferedBlockAlgorithm.reset.call(this);\n\n                // Perform concrete-cipher logic\n                this._doReset();\n            },\n\n            /**\n             * Adds data to be encrypted or decrypted.\n             *\n             * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n             *\n             * @return {WordArray} The data after processing.\n             *\n             * @example\n             *\n             *     var encrypted = cipher.process('data');\n             *     var encrypted = cipher.process(wordArray);\n             */\n            process: function (dataUpdate) {\n                // Append\n                this._append(dataUpdate);\n\n                // Process available blocks\n                return this._process();\n            },\n\n            /**\n             * Finalizes the encryption or decryption process.\n             * Note that the finalize operation is effectively a destructive, read-once operation.\n             *\n             * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n             *\n             * @return {WordArray} The data after final processing.\n             *\n             * @example\n             *\n             *     var encrypted = cipher.finalize();\n             *     var encrypted = cipher.finalize('data');\n             *     var encrypted = cipher.finalize(wordArray);\n             */\n            finalize: function (dataUpdate) {\n                // Final data update\n                if (dataUpdate) {\n                    this._append(dataUpdate);\n                }\n\n                // Perform concrete-cipher logic\n                var finalProcessedData = this._doFinalize();\n\n                return finalProcessedData;\n            },\n\n            keySize: 128 / 32,\n\n            ivSize: 128 / 32,\n\n            _ENC_XFORM_MODE: 1,\n\n            _DEC_XFORM_MODE: 2,\n\n            /**\n             * Creates shortcut functions to a cipher's object interface.\n             *\n             * @param {Cipher} cipher The cipher to create a helper for.\n             *\n             * @return {Object} An object with encrypt and decrypt shortcut functions.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n             */\n            _createHelper: (function () {\n                function selectCipherStrategy(key) {\n                    if (typeof key == 'string') {\n                        return PasswordBasedCipher;\n                    } else {\n                        return SerializableCipher;\n                    }\n                }\n\n                return function (cipher) {\n                    return {\n                        encrypt: function (message, key, cfg) {\n                            return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n                        },\n\n                        decrypt: function (ciphertext, key, cfg) {\n                            return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n                        }\n                    };\n                };\n            }())\n        });\n\n        /**\n         * Abstract base stream cipher template.\n         *\n         * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n         */\n        var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n            _doFinalize: function () {\n                // Process partial blocks\n                var finalProcessedBlocks = this._process(!!'flush');\n\n                return finalProcessedBlocks;\n            },\n\n            blockSize: 1\n        });\n\n        /**\n         * Mode namespace.\n         */\n        var C_mode = C.mode = {};\n\n        /**\n         * Abstract base block cipher mode template.\n         */\n        var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n            /**\n             * Creates this mode for encryption.\n             *\n             * @param {Cipher} cipher A block cipher instance.\n             * @param {Array} iv The IV words.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n             */\n            createEncryptor: function (cipher, iv) {\n                return this.Encryptor.create(cipher, iv);\n            },\n\n            /**\n             * Creates this mode for decryption.\n             *\n             * @param {Cipher} cipher A block cipher instance.\n             * @param {Array} iv The IV words.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n             */\n            createDecryptor: function (cipher, iv) {\n                return this.Decryptor.create(cipher, iv);\n            },\n\n            /**\n             * Initializes a newly created mode.\n             *\n             * @param {Cipher} cipher A block cipher instance.\n             * @param {Array} iv The IV words.\n             *\n             * @example\n             *\n             *     var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n             */\n            init: function (cipher, iv) {\n                this._cipher = cipher;\n                this._iv = iv;\n            }\n        });\n\n        /**\n         * Cipher Block Chaining mode.\n         */\n        var CBC = C_mode.CBC = (function () {\n            /**\n             * Abstract base CBC mode.\n             */\n            var CBC = BlockCipherMode.extend();\n\n            /**\n             * CBC encryptor.\n             */\n            CBC.Encryptor = CBC.extend({\n                /**\n                 * Processes the data block at offset.\n                 *\n                 * @param {Array} words The data words to operate on.\n                 * @param {number} offset The offset where the block starts.\n                 *\n                 * @example\n                 *\n                 *     mode.processBlock(data.words, offset);\n                 */\n                processBlock: function (words, offset) {\n                    // Shortcuts\n                    var cipher = this._cipher;\n                    var blockSize = cipher.blockSize;\n\n                    // XOR and encrypt\n                    xorBlock.call(this, words, offset, blockSize);\n                    cipher.encryptBlock(words, offset);\n\n                    // Remember this block to use with next block\n                    this._prevBlock = words.slice(offset, offset + blockSize);\n                }\n            });\n\n            /**\n             * CBC decryptor.\n             */\n            CBC.Decryptor = CBC.extend({\n                /**\n                 * Processes the data block at offset.\n                 *\n                 * @param {Array} words The data words to operate on.\n                 * @param {number} offset The offset where the block starts.\n                 *\n                 * @example\n                 *\n                 *     mode.processBlock(data.words, offset);\n                 */\n                processBlock: function (words, offset) {\n                    // Shortcuts\n                    var cipher = this._cipher;\n                    var blockSize = cipher.blockSize;\n\n                    // Remember this block to use with next block\n                    var thisBlock = words.slice(offset, offset + blockSize);\n\n                    // Decrypt and XOR\n                    cipher.decryptBlock(words, offset);\n                    xorBlock.call(this, words, offset, blockSize);\n\n                    // This block becomes the previous block\n                    this._prevBlock = thisBlock;\n                }\n            });\n\n            function xorBlock(words, offset, blockSize) {\n                // Shortcut\n                var iv = this._iv;\n\n                // Choose mixing block\n                if (iv) {\n                    var block = iv;\n\n                    // Remove IV for subsequent blocks\n                    this._iv = undefined;\n                } else {\n                    var block = this._prevBlock;\n                }\n\n                // XOR blocks\n                for (var i = 0; i < blockSize; i++) {\n                    words[offset + i] ^= block[i];\n                }\n            }\n\n            return CBC;\n        }());\n\n        /**\n         * Padding namespace.\n         */\n        var C_pad = C.pad = {};\n\n        /**\n         * PKCS #5/7 padding strategy.\n         */\n        var Pkcs7 = C_pad.Pkcs7 = {\n            /**\n             * Pads data using the algorithm defined in PKCS #5/7.\n             *\n             * @param {WordArray} data The data to pad.\n             * @param {number} blockSize The multiple that the data should be padded to.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n             */\n            pad: function (data, blockSize) {\n                // Shortcut\n                var blockSizeBytes = blockSize * 4;\n\n                // Count padding bytes\n                var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n                // Create padding word\n                var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n                // Create padding\n                var paddingWords = [];\n                for (var i = 0; i < nPaddingBytes; i += 4) {\n                    paddingWords.push(paddingWord);\n                }\n                var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n                // Add padding\n                data.concat(padding);\n            },\n\n            /**\n             * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n             *\n             * @param {WordArray} data The data to unpad.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     CryptoJS.pad.Pkcs7.unpad(wordArray);\n             */\n            unpad: function (data) {\n                // Get number of padding bytes from last byte\n                var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n                // Remove padding\n                data.sigBytes -= nPaddingBytes;\n            }\n        };\n\n        /**\n         * Abstract base block cipher template.\n         *\n         * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n         */\n        var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n            /**\n             * Configuration options.\n             *\n             * @property {Mode} mode The block mode to use. Default: CBC\n             * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n             */\n            cfg: Cipher.cfg.extend({\n                mode: CBC,\n                padding: Pkcs7\n            }),\n\n            reset: function () {\n                // Reset cipher\n                Cipher.reset.call(this);\n\n                // Shortcuts\n                var cfg = this.cfg;\n                var iv = cfg.iv;\n                var mode = cfg.mode;\n\n                // Reset block mode\n                if (this._xformMode == this._ENC_XFORM_MODE) {\n                    var modeCreator = mode.createEncryptor;\n                } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n                    var modeCreator = mode.createDecryptor;\n                    // Keep at least one block in the buffer for unpadding\n                    this._minBufferSize = 1;\n                }\n\n                if (this._mode && this._mode.__creator == modeCreator) {\n                    this._mode.init(this, iv && iv.words);\n                } else {\n                    this._mode = modeCreator.call(mode, this, iv && iv.words);\n                    this._mode.__creator = modeCreator;\n                }\n            },\n\n            _doProcessBlock: function (words, offset) {\n                this._mode.processBlock(words, offset);\n            },\n\n            _doFinalize: function () {\n                // Shortcut\n                var padding = this.cfg.padding;\n\n                // Finalize\n                if (this._xformMode == this._ENC_XFORM_MODE) {\n                    // Pad data\n                    padding.pad(this._data, this.blockSize);\n\n                    // Process final blocks\n                    var finalProcessedBlocks = this._process(!!'flush');\n                } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n                    // Process final blocks\n                    var finalProcessedBlocks = this._process(!!'flush');\n\n                    // Unpad data\n                    padding.unpad(finalProcessedBlocks);\n                }\n\n                return finalProcessedBlocks;\n            },\n\n            blockSize: 128 / 32\n        });\n\n        /**\n         * A collection of cipher parameters.\n         *\n         * @property {WordArray} ciphertext The raw ciphertext.\n         * @property {WordArray} key The key to this ciphertext.\n         * @property {WordArray} iv The IV used in the ciphering operation.\n         * @property {WordArray} salt The salt used with a key derivation function.\n         * @property {Cipher} algorithm The cipher algorithm.\n         * @property {Mode} mode The block mode used in the ciphering operation.\n         * @property {Padding} padding The padding scheme used in the ciphering operation.\n         * @property {number} blockSize The block size of the cipher.\n         * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n         */\n        var CipherParams = C_lib.CipherParams = Base.extend({\n            /**\n             * Initializes a newly created cipher params object.\n             *\n             * @param {Object} cipherParams An object with any of the possible cipher parameters.\n             *\n             * @example\n             *\n             *     var cipherParams = CryptoJS.lib.CipherParams.create({\n             *         ciphertext: ciphertextWordArray,\n             *         key: keyWordArray,\n             *         iv: ivWordArray,\n             *         salt: saltWordArray,\n             *         algorithm: CryptoJS.algo.AES,\n             *         mode: CryptoJS.mode.CBC,\n             *         padding: CryptoJS.pad.PKCS7,\n             *         blockSize: 4,\n             *         formatter: CryptoJS.format.OpenSSL\n             *     });\n             */\n            init: function (cipherParams) {\n                this.mixIn(cipherParams);\n            },\n\n            /**\n             * Converts this cipher params object to a string.\n             *\n             * @param {Format} formatter (Optional) The formatting strategy to use.\n             *\n             * @return {string} The stringified cipher params.\n             *\n             * @throws Error If neither the formatter nor the default formatter is set.\n             *\n             * @example\n             *\n             *     var string = cipherParams + '';\n             *     var string = cipherParams.toString();\n             *     var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n             */\n            toString: function (formatter) {\n                return (formatter || this.formatter).stringify(this);\n            }\n        });\n\n        /**\n         * Format namespace.\n         */\n        var C_format = C.format = {};\n\n        /**\n         * OpenSSL formatting strategy.\n         */\n        var OpenSSLFormatter = C_format.OpenSSL = {\n            /**\n             * Converts a cipher params object to an OpenSSL-compatible string.\n             *\n             * @param {CipherParams} cipherParams The cipher params object.\n             *\n             * @return {string} The OpenSSL-compatible string.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n             */\n            stringify: function (cipherParams) {\n                // Shortcuts\n                var ciphertext = cipherParams.ciphertext;\n                var salt = cipherParams.salt;\n\n                // Format\n                if (salt) {\n                    var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n                } else {\n                    var wordArray = ciphertext;\n                }\n\n                return wordArray.toString(Base64);\n            },\n\n            /**\n             * Converts an OpenSSL-compatible string to a cipher params object.\n             *\n             * @param {string} openSSLStr The OpenSSL-compatible string.\n             *\n             * @return {CipherParams} The cipher params object.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n             */\n            parse: function (openSSLStr) {\n                // Parse base64\n                var ciphertext = Base64.parse(openSSLStr);\n\n                // Shortcut\n                var ciphertextWords = ciphertext.words;\n\n                // Test for salt\n                if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n                    // Extract salt\n                    var salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n                    // Remove salt from ciphertext\n                    ciphertextWords.splice(0, 4);\n                    ciphertext.sigBytes -= 16;\n                }\n\n                return CipherParams.create({ciphertext: ciphertext, salt: salt});\n            }\n        };\n\n        /**\n         * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n         */\n        var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n            /**\n             * Configuration options.\n             *\n             * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n             */\n            cfg: Base.extend({\n                format: OpenSSLFormatter\n            }),\n\n            /**\n             * Encrypts a message.\n             *\n             * @param {Cipher} cipher The cipher algorithm to use.\n             * @param {WordArray|string} message The message to encrypt.\n             * @param {WordArray} key The key.\n             * @param {Object} cfg (Optional) The configuration options to use for this operation.\n             *\n             * @return {CipherParams} A cipher params object.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n             *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n             *     var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n             */\n            encrypt: function (cipher, message, key, cfg) {\n                // Apply config defaults\n                cfg = this.cfg.extend(cfg);\n\n                // Encrypt\n                var encryptor = cipher.createEncryptor(key, cfg);\n                var ciphertext = encryptor.finalize(message);\n\n                // Shortcut\n                var cipherCfg = encryptor.cfg;\n\n                // Create and return serializable cipher params\n                return CipherParams.create({\n                    ciphertext: ciphertext,\n                    key: key,\n                    iv: cipherCfg.iv,\n                    algorithm: cipher,\n                    mode: cipherCfg.mode,\n                    padding: cipherCfg.padding,\n                    blockSize: cipher.blockSize,\n                    formatter: cfg.format\n                });\n            },\n\n            /**\n             * Decrypts serialized ciphertext.\n             *\n             * @param {Cipher} cipher The cipher algorithm to use.\n             * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n             * @param {WordArray} key The key.\n             * @param {Object} cfg (Optional) The configuration options to use for this operation.\n             *\n             * @return {WordArray} The plaintext.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n             *     var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n             */\n            decrypt: function (cipher, ciphertext, key, cfg) {\n                // Apply config defaults\n                cfg = this.cfg.extend(cfg);\n\n                // Convert string to CipherParams\n                ciphertext = this._parse(ciphertext, cfg.format);\n\n                // Decrypt\n                var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n                return plaintext;\n            },\n\n            /**\n             * Converts serialized ciphertext to CipherParams,\n             * else assumed CipherParams already and returns ciphertext unchanged.\n             *\n             * @param {CipherParams|string} ciphertext The ciphertext.\n             * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n             *\n             * @return {CipherParams} The unserialized ciphertext.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n             */\n            _parse: function (ciphertext, format) {\n                if (typeof ciphertext == 'string') {\n                    return format.parse(ciphertext, this);\n                } else {\n                    return ciphertext;\n                }\n            }\n        });\n\n        /**\n         * Key derivation function namespace.\n         */\n        var C_kdf = C.kdf = {};\n\n        /**\n         * OpenSSL key derivation function.\n         */\n        var OpenSSLKdf = C_kdf.OpenSSL = {\n            /**\n             * Derives a key and IV from a password.\n             *\n             * @param {string} password The password to derive from.\n             * @param {number} keySize The size in words of the key to generate.\n             * @param {number} ivSize The size in words of the IV to generate.\n             * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n             *\n             * @return {CipherParams} A cipher params object with the key, IV, and salt.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n             *     var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n             */\n            execute: function (password, keySize, ivSize, salt) {\n                // Generate random salt\n                if (!salt) {\n                    salt = WordArray.random(64 / 8);\n                }\n\n                // Derive key and IV\n                var key = EvpKDF.create({keySize: keySize + ivSize}).compute(password, salt);\n\n                // Separate key and IV\n                var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n                key.sigBytes = keySize * 4;\n\n                // Return params\n                return CipherParams.create({key: key, iv: iv, salt: salt});\n            }\n        };\n\n        /**\n         * A serializable cipher wrapper that derives the key from a password,\n         * and returns ciphertext as a serializable cipher params object.\n         */\n        var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n            /**\n             * Configuration options.\n             *\n             * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n             */\n            cfg: SerializableCipher.cfg.extend({\n                kdf: OpenSSLKdf\n            }),\n\n            /**\n             * Encrypts a message using a password.\n             *\n             * @param {Cipher} cipher The cipher algorithm to use.\n             * @param {WordArray|string} message The message to encrypt.\n             * @param {string} password The password.\n             * @param {Object} cfg (Optional) The configuration options to use for this operation.\n             *\n             * @return {CipherParams} A cipher params object.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n             *     var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n             */\n            encrypt: function (cipher, message, password, cfg) {\n                // Apply config defaults\n                cfg = this.cfg.extend(cfg);\n\n                // Derive key and other params\n                var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n                // Add IV to config\n                cfg.iv = derivedParams.iv;\n\n                // Encrypt\n                var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n                // Mix in derived params\n                ciphertext.mixIn(derivedParams);\n\n                return ciphertext;\n            },\n\n            /**\n             * Decrypts serialized ciphertext using a password.\n             *\n             * @param {Cipher} cipher The cipher algorithm to use.\n             * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n             * @param {string} password The password.\n             * @param {Object} cfg (Optional) The configuration options to use for this operation.\n             *\n             * @return {WordArray} The plaintext.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n             *     var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n             */\n            decrypt: function (cipher, ciphertext, password, cfg) {\n                // Apply config defaults\n                cfg = this.cfg.extend(cfg);\n\n                // Convert string to CipherParams\n                ciphertext = this._parse(ciphertext, cfg.format);\n\n                // Derive key and other params\n                var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n                // Add IV to config\n                cfg.iv = derivedParams.iv;\n\n                // Decrypt\n                var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n                return plaintext;\n            }\n        });\n    }());\n\n\n    /**\n     * Cipher Feedback block mode.\n     */\n    CryptoJS.mode.CFB = (function () {\n        var CFB = CryptoJS.lib.BlockCipherMode.extend();\n\n        CFB.Encryptor = CFB.extend({\n            processBlock: function (words, offset) {\n                // Shortcuts\n                var cipher = this._cipher;\n                var blockSize = cipher.blockSize;\n\n                generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n                // Remember this block to use with next block\n                this._prevBlock = words.slice(offset, offset + blockSize);\n            }\n        });\n\n        CFB.Decryptor = CFB.extend({\n            processBlock: function (words, offset) {\n                // Shortcuts\n                var cipher = this._cipher;\n                var blockSize = cipher.blockSize;\n\n                // Remember this block to use with next block\n                var thisBlock = words.slice(offset, offset + blockSize);\n\n                generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n                // This block becomes the previous block\n                this._prevBlock = thisBlock;\n            }\n        });\n\n        function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n            // Shortcut\n            var iv = this._iv;\n\n            // Generate keystream\n            if (iv) {\n                var keystream = iv.slice(0);\n\n                // Remove IV for subsequent blocks\n                this._iv = undefined;\n            } else {\n                var keystream = this._prevBlock;\n            }\n            cipher.encryptBlock(keystream, 0);\n\n            // Encrypt\n            for (var i = 0; i < blockSize; i++) {\n                words[offset + i] ^= keystream[i];\n            }\n        }\n\n        return CFB;\n    }());\n\n\n    /**\n     * Electronic Codebook block mode.\n     */\n    CryptoJS.mode.ECB = (function () {\n        var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n        ECB.Encryptor = ECB.extend({\n            processBlock: function (words, offset) {\n                this._cipher.encryptBlock(words, offset);\n            }\n        });\n\n        ECB.Decryptor = ECB.extend({\n            processBlock: function (words, offset) {\n                this._cipher.decryptBlock(words, offset);\n            }\n        });\n\n        return ECB;\n    }());\n\n\n    /**\n     * ANSI X.923 padding strategy.\n     */\n    CryptoJS.pad.AnsiX923 = {\n        pad: function (data, blockSize) {\n            // Shortcuts\n            var dataSigBytes = data.sigBytes;\n            var blockSizeBytes = blockSize * 4;\n\n            // Count padding bytes\n            var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n            // Compute last byte position\n            var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n            // Pad\n            data.clamp();\n            data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n            data.sigBytes += nPaddingBytes;\n        },\n\n        unpad: function (data) {\n            // Get number of padding bytes from last byte\n            var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n            // Remove padding\n            data.sigBytes -= nPaddingBytes;\n        }\n    };\n\n\n    /**\n     * ISO 10126 padding strategy.\n     */\n    CryptoJS.pad.Iso10126 = {\n        pad: function (data, blockSize) {\n            // Shortcut\n            var blockSizeBytes = blockSize * 4;\n\n            // Count padding bytes\n            var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n            // Pad\n            data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n        },\n\n        unpad: function (data) {\n            // Get number of padding bytes from last byte\n            var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n            // Remove padding\n            data.sigBytes -= nPaddingBytes;\n        }\n    };\n\n\n    /**\n     * ISO/IEC 9797-1 Padding Method 2.\n     */\n    CryptoJS.pad.Iso97971 = {\n        pad: function (data, blockSize) {\n            // Add 0x80 byte\n            data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n            // Zero pad the rest\n            CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n        },\n\n        unpad: function (data) {\n            // Remove zero padding\n            CryptoJS.pad.ZeroPadding.unpad(data);\n\n            // Remove one more byte -- the 0x80 byte\n            data.sigBytes--;\n        }\n    };\n\n\n    /**\n     * Output Feedback block mode.\n     */\n    CryptoJS.mode.OFB = (function () {\n        var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n        var Encryptor = OFB.Encryptor = OFB.extend({\n            processBlock: function (words, offset) {\n                // Shortcuts\n                var cipher = this._cipher\n                var blockSize = cipher.blockSize;\n                var iv = this._iv;\n                var keystream = this._keystream;\n\n                // Generate keystream\n                if (iv) {\n                    keystream = this._keystream = iv.slice(0);\n\n                    // Remove IV for subsequent blocks\n                    this._iv = undefined;\n                }\n                cipher.encryptBlock(keystream, 0);\n\n                // Encrypt\n                for (var i = 0; i < blockSize; i++) {\n                    words[offset + i] ^= keystream[i];\n                }\n            }\n        });\n\n        OFB.Decryptor = Encryptor;\n\n        return OFB;\n    }());\n\n\n    /**\n     * A noop padding strategy.\n     */\n    CryptoJS.pad.NoPadding = {\n        pad: function () {\n        },\n\n        unpad: function () {\n        }\n    };\n\n\n    (function (undefined) {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var CipherParams = C_lib.CipherParams;\n        var C_enc = C.enc;\n        var Hex = C_enc.Hex;\n        var C_format = C.format;\n\n        var HexFormatter = C_format.Hex = {\n            /**\n             * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n             *\n             * @param {CipherParams} cipherParams The cipher params object.\n             *\n             * @return {string} The hexadecimally encoded string.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n             */\n            stringify: function (cipherParams) {\n                return cipherParams.ciphertext.toString(Hex);\n            },\n\n            /**\n             * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n             *\n             * @param {string} input The hexadecimally encoded string.\n             *\n             * @return {CipherParams} The cipher params object.\n             *\n             * @static\n             *\n             * @example\n             *\n             *     var cipherParams = CryptoJS.format.Hex.parse(hexString);\n             */\n            parse: function (input) {\n                var ciphertext = Hex.parse(input);\n                return CipherParams.create({ciphertext: ciphertext});\n            }\n        };\n    }());\n\n\n    (function () {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var BlockCipher = C_lib.BlockCipher;\n        var C_algo = C.algo;\n\n        // Lookup tables\n        var SBOX = [];\n        var INV_SBOX = [];\n        var SUB_MIX_0 = [];\n        var SUB_MIX_1 = [];\n        var SUB_MIX_2 = [];\n        var SUB_MIX_3 = [];\n        var INV_SUB_MIX_0 = [];\n        var INV_SUB_MIX_1 = [];\n        var INV_SUB_MIX_2 = [];\n        var INV_SUB_MIX_3 = [];\n\n        // Compute lookup tables\n        (function () {\n            // Compute double table\n            var d = [];\n            for (var i = 0; i < 256; i++) {\n                if (i < 128) {\n                    d[i] = i << 1;\n                } else {\n                    d[i] = (i << 1) ^ 0x11b;\n                }\n            }\n\n            // Walk GF(2^8)\n            var x = 0;\n            var xi = 0;\n            for (var i = 0; i < 256; i++) {\n                // Compute sbox\n                var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n                sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n                SBOX[x] = sx;\n                INV_SBOX[sx] = x;\n\n                // Compute multiplication\n                var x2 = d[x];\n                var x4 = d[x2];\n                var x8 = d[x4];\n\n                // Compute sub bytes, mix columns tables\n                var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n                SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n                SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n                SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n                SUB_MIX_3[x] = t;\n\n                // Compute inv sub bytes, inv mix columns tables\n                var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n                INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n                INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n                INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n                INV_SUB_MIX_3[sx] = t;\n\n                // Compute next counter\n                if (!x) {\n                    x = xi = 1;\n                } else {\n                    x = x2 ^ d[d[d[x8 ^ x2]]];\n                    xi ^= d[d[xi]];\n                }\n            }\n        }());\n\n        // Precomputed Rcon lookup\n        var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n        /**\n         * AES block cipher algorithm.\n         */\n        var AES = C_algo.AES = BlockCipher.extend({\n            _doReset: function () {\n                // Skip reset of nRounds has been set before and key did not change\n                if (this._nRounds && this._keyPriorReset === this._key) {\n                    return;\n                }\n\n                // Shortcuts\n                var key = this._keyPriorReset = this._key;\n                var keyWords = key.words;\n                var keySize = key.sigBytes / 4;\n\n                // Compute number of rounds\n                var nRounds = this._nRounds = keySize + 6;\n\n                // Compute number of key schedule rows\n                var ksRows = (nRounds + 1) * 4;\n\n                // Compute key schedule\n                var keySchedule = this._keySchedule = [];\n                for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n                    if (ksRow < keySize) {\n                        keySchedule[ksRow] = keyWords[ksRow];\n                    } else {\n                        var t = keySchedule[ksRow - 1];\n\n                        if (!(ksRow % keySize)) {\n                            // Rot word\n                            t = (t << 8) | (t >>> 24);\n\n                            // Sub word\n                            t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n                            // Mix Rcon\n                            t ^= RCON[(ksRow / keySize) | 0] << 24;\n                        } else if (keySize > 6 && ksRow % keySize == 4) {\n                            // Sub word\n                            t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n                        }\n\n                        keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n                    }\n                }\n\n                // Compute inv key schedule\n                var invKeySchedule = this._invKeySchedule = [];\n                for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n                    var ksRow = ksRows - invKsRow;\n\n                    if (invKsRow % 4) {\n                        var t = keySchedule[ksRow];\n                    } else {\n                        var t = keySchedule[ksRow - 4];\n                    }\n\n                    if (invKsRow < 4 || ksRow <= 4) {\n                        invKeySchedule[invKsRow] = t;\n                    } else {\n                        invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n                            INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n                    }\n                }\n            },\n\n            encryptBlock: function (M, offset) {\n                this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n            },\n\n            decryptBlock: function (M, offset) {\n                // Swap 2nd and 4th rows\n                var t = M[offset + 1];\n                M[offset + 1] = M[offset + 3];\n                M[offset + 3] = t;\n\n                this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n                // Inv swap 2nd and 4th rows\n                var t = M[offset + 1];\n                M[offset + 1] = M[offset + 3];\n                M[offset + 3] = t;\n            },\n\n            _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n                // Shortcut\n                var nRounds = this._nRounds;\n\n                // Get input, add round key\n                var s0 = M[offset] ^ keySchedule[0];\n                var s1 = M[offset + 1] ^ keySchedule[1];\n                var s2 = M[offset + 2] ^ keySchedule[2];\n                var s3 = M[offset + 3] ^ keySchedule[3];\n\n                // Key schedule row counter\n                var ksRow = 4;\n\n                // Rounds\n                for (var round = 1; round < nRounds; round++) {\n                    // Shift rows, sub bytes, mix columns, add round key\n                    var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n                    var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n                    var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n                    var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n                    // Update state\n                    s0 = t0;\n                    s1 = t1;\n                    s2 = t2;\n                    s3 = t3;\n                }\n\n                // Shift rows, sub bytes, add round key\n                var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n                var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n                var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n                var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n                // Set output\n                M[offset] = t0;\n                M[offset + 1] = t1;\n                M[offset + 2] = t2;\n                M[offset + 3] = t3;\n            },\n\n            keySize: 256 / 32\n        });\n\n        /**\n         * Shortcut functions to the cipher's object interface.\n         *\n         * @example\n         *\n         *     var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n         *     var plaintext  = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n         */\n        C.AES = BlockCipher._createHelper(AES);\n    }());\n\n\n    (function () {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var WordArray = C_lib.WordArray;\n        var BlockCipher = C_lib.BlockCipher;\n        var C_algo = C.algo;\n\n        // Permuted Choice 1 constants\n        var PC1 = [\n            57, 49, 41, 33, 25, 17, 9, 1,\n            58, 50, 42, 34, 26, 18, 10, 2,\n            59, 51, 43, 35, 27, 19, 11, 3,\n            60, 52, 44, 36, 63, 55, 47, 39,\n            31, 23, 15, 7, 62, 54, 46, 38,\n            30, 22, 14, 6, 61, 53, 45, 37,\n            29, 21, 13, 5, 28, 20, 12, 4\n        ];\n\n        // Permuted Choice 2 constants\n        var PC2 = [\n            14, 17, 11, 24, 1, 5,\n            3, 28, 15, 6, 21, 10,\n            23, 19, 12, 4, 26, 8,\n            16, 7, 27, 20, 13, 2,\n            41, 52, 31, 37, 47, 55,\n            30, 40, 51, 45, 33, 48,\n            44, 49, 39, 56, 34, 53,\n            46, 42, 50, 36, 29, 32\n        ];\n\n        // Cumulative bit shift constants\n        var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n        // SBOXes and round permutation constants\n        var SBOX_P = [\n            {\n                0x0: 0x808200,\n                0x10000000: 0x8000,\n                0x20000000: 0x808002,\n                0x30000000: 0x2,\n                0x40000000: 0x200,\n                0x50000000: 0x808202,\n                0x60000000: 0x800202,\n                0x70000000: 0x800000,\n                0x80000000: 0x202,\n                0x90000000: 0x800200,\n                0xa0000000: 0x8200,\n                0xb0000000: 0x808000,\n                0xc0000000: 0x8002,\n                0xd0000000: 0x800002,\n                0xe0000000: 0x0,\n                0xf0000000: 0x8202,\n                0x8000000: 0x0,\n                0x18000000: 0x808202,\n                0x28000000: 0x8202,\n                0x38000000: 0x8000,\n                0x48000000: 0x808200,\n                0x58000000: 0x200,\n                0x68000000: 0x808002,\n                0x78000000: 0x2,\n                0x88000000: 0x800200,\n                0x98000000: 0x8200,\n                0xa8000000: 0x808000,\n                0xb8000000: 0x800202,\n                0xc8000000: 0x800002,\n                0xd8000000: 0x8002,\n                0xe8000000: 0x202,\n                0xf8000000: 0x800000,\n                0x1: 0x8000,\n                0x10000001: 0x2,\n                0x20000001: 0x808200,\n                0x30000001: 0x800000,\n                0x40000001: 0x808002,\n                0x50000001: 0x8200,\n                0x60000001: 0x200,\n                0x70000001: 0x800202,\n                0x80000001: 0x808202,\n                0x90000001: 0x808000,\n                0xa0000001: 0x800002,\n                0xb0000001: 0x8202,\n                0xc0000001: 0x202,\n                0xd0000001: 0x800200,\n                0xe0000001: 0x8002,\n                0xf0000001: 0x0,\n                0x8000001: 0x808202,\n                0x18000001: 0x808000,\n                0x28000001: 0x800000,\n                0x38000001: 0x200,\n                0x48000001: 0x8000,\n                0x58000001: 0x800002,\n                0x68000001: 0x2,\n                0x78000001: 0x8202,\n                0x88000001: 0x8002,\n                0x98000001: 0x800202,\n                0xa8000001: 0x202,\n                0xb8000001: 0x808200,\n                0xc8000001: 0x800200,\n                0xd8000001: 0x0,\n                0xe8000001: 0x8200,\n                0xf8000001: 0x808002\n            },\n            {\n                0x0: 0x40084010,\n                0x1000000: 0x4000,\n                0x2000000: 0x80000,\n                0x3000000: 0x40080010,\n                0x4000000: 0x40000010,\n                0x5000000: 0x40084000,\n                0x6000000: 0x40004000,\n                0x7000000: 0x10,\n                0x8000000: 0x84000,\n                0x9000000: 0x40004010,\n                0xa000000: 0x40000000,\n                0xb000000: 0x84010,\n                0xc000000: 0x80010,\n                0xd000000: 0x0,\n                0xe000000: 0x4010,\n                0xf000000: 0x40080000,\n                0x800000: 0x40004000,\n                0x1800000: 0x84010,\n                0x2800000: 0x10,\n                0x3800000: 0x40004010,\n                0x4800000: 0x40084010,\n                0x5800000: 0x40000000,\n                0x6800000: 0x80000,\n                0x7800000: 0x40080010,\n                0x8800000: 0x80010,\n                0x9800000: 0x0,\n                0xa800000: 0x4000,\n                0xb800000: 0x40080000,\n                0xc800000: 0x40000010,\n                0xd800000: 0x84000,\n                0xe800000: 0x40084000,\n                0xf800000: 0x4010,\n                0x10000000: 0x0,\n                0x11000000: 0x40080010,\n                0x12000000: 0x40004010,\n                0x13000000: 0x40084000,\n                0x14000000: 0x40080000,\n                0x15000000: 0x10,\n                0x16000000: 0x84010,\n                0x17000000: 0x4000,\n                0x18000000: 0x4010,\n                0x19000000: 0x80000,\n                0x1a000000: 0x80010,\n                0x1b000000: 0x40000010,\n                0x1c000000: 0x84000,\n                0x1d000000: 0x40004000,\n                0x1e000000: 0x40000000,\n                0x1f000000: 0x40084010,\n                0x10800000: 0x84010,\n                0x11800000: 0x80000,\n                0x12800000: 0x40080000,\n                0x13800000: 0x4000,\n                0x14800000: 0x40004000,\n                0x15800000: 0x40084010,\n                0x16800000: 0x10,\n                0x17800000: 0x40000000,\n                0x18800000: 0x40084000,\n                0x19800000: 0x40000010,\n                0x1a800000: 0x40004010,\n                0x1b800000: 0x80010,\n                0x1c800000: 0x0,\n                0x1d800000: 0x4010,\n                0x1e800000: 0x40080010,\n                0x1f800000: 0x84000\n            },\n            {\n                0x0: 0x104,\n                0x100000: 0x0,\n                0x200000: 0x4000100,\n                0x300000: 0x10104,\n                0x400000: 0x10004,\n                0x500000: 0x4000004,\n                0x600000: 0x4010104,\n                0x700000: 0x4010000,\n                0x800000: 0x4000000,\n                0x900000: 0x4010100,\n                0xa00000: 0x10100,\n                0xb00000: 0x4010004,\n                0xc00000: 0x4000104,\n                0xd00000: 0x10000,\n                0xe00000: 0x4,\n                0xf00000: 0x100,\n                0x80000: 0x4010100,\n                0x180000: 0x4010004,\n                0x280000: 0x0,\n                0x380000: 0x4000100,\n                0x480000: 0x4000004,\n                0x580000: 0x10000,\n                0x680000: 0x10004,\n                0x780000: 0x104,\n                0x880000: 0x4,\n                0x980000: 0x100,\n                0xa80000: 0x4010000,\n                0xb80000: 0x10104,\n                0xc80000: 0x10100,\n                0xd80000: 0x4000104,\n                0xe80000: 0x4010104,\n                0xf80000: 0x4000000,\n                0x1000000: 0x4010100,\n                0x1100000: 0x10004,\n                0x1200000: 0x10000,\n                0x1300000: 0x4000100,\n                0x1400000: 0x100,\n                0x1500000: 0x4010104,\n                0x1600000: 0x4000004,\n                0x1700000: 0x0,\n                0x1800000: 0x4000104,\n                0x1900000: 0x4000000,\n                0x1a00000: 0x4,\n                0x1b00000: 0x10100,\n                0x1c00000: 0x4010000,\n                0x1d00000: 0x104,\n                0x1e00000: 0x10104,\n                0x1f00000: 0x4010004,\n                0x1080000: 0x4000000,\n                0x1180000: 0x104,\n                0x1280000: 0x4010100,\n                0x1380000: 0x0,\n                0x1480000: 0x10004,\n                0x1580000: 0x4000100,\n                0x1680000: 0x100,\n                0x1780000: 0x4010004,\n                0x1880000: 0x10000,\n                0x1980000: 0x4010104,\n                0x1a80000: 0x10104,\n                0x1b80000: 0x4000004,\n                0x1c80000: 0x4000104,\n                0x1d80000: 0x4010000,\n                0x1e80000: 0x4,\n                0x1f80000: 0x10100\n            },\n            {\n                0x0: 0x80401000,\n                0x10000: 0x80001040,\n                0x20000: 0x401040,\n                0x30000: 0x80400000,\n                0x40000: 0x0,\n                0x50000: 0x401000,\n                0x60000: 0x80000040,\n                0x70000: 0x400040,\n                0x80000: 0x80000000,\n                0x90000: 0x400000,\n                0xa0000: 0x40,\n                0xb0000: 0x80001000,\n                0xc0000: 0x80400040,\n                0xd0000: 0x1040,\n                0xe0000: 0x1000,\n                0xf0000: 0x80401040,\n                0x8000: 0x80001040,\n                0x18000: 0x40,\n                0x28000: 0x80400040,\n                0x38000: 0x80001000,\n                0x48000: 0x401000,\n                0x58000: 0x80401040,\n                0x68000: 0x0,\n                0x78000: 0x80400000,\n                0x88000: 0x1000,\n                0x98000: 0x80401000,\n                0xa8000: 0x400000,\n                0xb8000: 0x1040,\n                0xc8000: 0x80000000,\n                0xd8000: 0x400040,\n                0xe8000: 0x401040,\n                0xf8000: 0x80000040,\n                0x100000: 0x400040,\n                0x110000: 0x401000,\n                0x120000: 0x80000040,\n                0x130000: 0x0,\n                0x140000: 0x1040,\n                0x150000: 0x80400040,\n                0x160000: 0x80401000,\n                0x170000: 0x80001040,\n                0x180000: 0x80401040,\n                0x190000: 0x80000000,\n                0x1a0000: 0x80400000,\n                0x1b0000: 0x401040,\n                0x1c0000: 0x80001000,\n                0x1d0000: 0x400000,\n                0x1e0000: 0x40,\n                0x1f0000: 0x1000,\n                0x108000: 0x80400000,\n                0x118000: 0x80401040,\n                0x128000: 0x0,\n                0x138000: 0x401000,\n                0x148000: 0x400040,\n                0x158000: 0x80000000,\n                0x168000: 0x80001040,\n                0x178000: 0x40,\n                0x188000: 0x80000040,\n                0x198000: 0x1000,\n                0x1a8000: 0x80001000,\n                0x1b8000: 0x80400040,\n                0x1c8000: 0x1040,\n                0x1d8000: 0x80401000,\n                0x1e8000: 0x400000,\n                0x1f8000: 0x401040\n            },\n            {\n                0x0: 0x80,\n                0x1000: 0x1040000,\n                0x2000: 0x40000,\n                0x3000: 0x20000000,\n                0x4000: 0x20040080,\n                0x5000: 0x1000080,\n                0x6000: 0x21000080,\n                0x7000: 0x40080,\n                0x8000: 0x1000000,\n                0x9000: 0x20040000,\n                0xa000: 0x20000080,\n                0xb000: 0x21040080,\n                0xc000: 0x21040000,\n                0xd000: 0x0,\n                0xe000: 0x1040080,\n                0xf000: 0x21000000,\n                0x800: 0x1040080,\n                0x1800: 0x21000080,\n                0x2800: 0x80,\n                0x3800: 0x1040000,\n                0x4800: 0x40000,\n                0x5800: 0x20040080,\n                0x6800: 0x21040000,\n                0x7800: 0x20000000,\n                0x8800: 0x20040000,\n                0x9800: 0x0,\n                0xa800: 0x21040080,\n                0xb800: 0x1000080,\n                0xc800: 0x20000080,\n                0xd800: 0x21000000,\n                0xe800: 0x1000000,\n                0xf800: 0x40080,\n                0x10000: 0x40000,\n                0x11000: 0x80,\n                0x12000: 0x20000000,\n                0x13000: 0x21000080,\n                0x14000: 0x1000080,\n                0x15000: 0x21040000,\n                0x16000: 0x20040080,\n                0x17000: 0x1000000,\n                0x18000: 0x21040080,\n                0x19000: 0x21000000,\n                0x1a000: 0x1040000,\n                0x1b000: 0x20040000,\n                0x1c000: 0x40080,\n                0x1d000: 0x20000080,\n                0x1e000: 0x0,\n                0x1f000: 0x1040080,\n                0x10800: 0x21000080,\n                0x11800: 0x1000000,\n                0x12800: 0x1040000,\n                0x13800: 0x20040080,\n                0x14800: 0x20000000,\n                0x15800: 0x1040080,\n                0x16800: 0x80,\n                0x17800: 0x21040000,\n                0x18800: 0x40080,\n                0x19800: 0x21040080,\n                0x1a800: 0x0,\n                0x1b800: 0x21000000,\n                0x1c800: 0x1000080,\n                0x1d800: 0x40000,\n                0x1e800: 0x20040000,\n                0x1f800: 0x20000080\n            },\n            {\n                0x0: 0x10000008,\n                0x100: 0x2000,\n                0x200: 0x10200000,\n                0x300: 0x10202008,\n                0x400: 0x10002000,\n                0x500: 0x200000,\n                0x600: 0x200008,\n                0x700: 0x10000000,\n                0x800: 0x0,\n                0x900: 0x10002008,\n                0xa00: 0x202000,\n                0xb00: 0x8,\n                0xc00: 0x10200008,\n                0xd00: 0x202008,\n                0xe00: 0x2008,\n                0xf00: 0x10202000,\n                0x80: 0x10200000,\n                0x180: 0x10202008,\n                0x280: 0x8,\n                0x380: 0x200000,\n                0x480: 0x202008,\n                0x580: 0x10000008,\n                0x680: 0x10002000,\n                0x780: 0x2008,\n                0x880: 0x200008,\n                0x980: 0x2000,\n                0xa80: 0x10002008,\n                0xb80: 0x10200008,\n                0xc80: 0x0,\n                0xd80: 0x10202000,\n                0xe80: 0x202000,\n                0xf80: 0x10000000,\n                0x1000: 0x10002000,\n                0x1100: 0x10200008,\n                0x1200: 0x10202008,\n                0x1300: 0x2008,\n                0x1400: 0x200000,\n                0x1500: 0x10000000,\n                0x1600: 0x10000008,\n                0x1700: 0x202000,\n                0x1800: 0x202008,\n                0x1900: 0x0,\n                0x1a00: 0x8,\n                0x1b00: 0x10200000,\n                0x1c00: 0x2000,\n                0x1d00: 0x10002008,\n                0x1e00: 0x10202000,\n                0x1f00: 0x200008,\n                0x1080: 0x8,\n                0x1180: 0x202000,\n                0x1280: 0x200000,\n                0x1380: 0x10000008,\n                0x1480: 0x10002000,\n                0x1580: 0x2008,\n                0x1680: 0x10202008,\n                0x1780: 0x10200000,\n                0x1880: 0x10202000,\n                0x1980: 0x10200008,\n                0x1a80: 0x2000,\n                0x1b80: 0x202008,\n                0x1c80: 0x200008,\n                0x1d80: 0x0,\n                0x1e80: 0x10000000,\n                0x1f80: 0x10002008\n            },\n            {\n                0x0: 0x100000,\n                0x10: 0x2000401,\n                0x20: 0x400,\n                0x30: 0x100401,\n                0x40: 0x2100401,\n                0x50: 0x0,\n                0x60: 0x1,\n                0x70: 0x2100001,\n                0x80: 0x2000400,\n                0x90: 0x100001,\n                0xa0: 0x2000001,\n                0xb0: 0x2100400,\n                0xc0: 0x2100000,\n                0xd0: 0x401,\n                0xe0: 0x100400,\n                0xf0: 0x2000000,\n                0x8: 0x2100001,\n                0x18: 0x0,\n                0x28: 0x2000401,\n                0x38: 0x2100400,\n                0x48: 0x100000,\n                0x58: 0x2000001,\n                0x68: 0x2000000,\n                0x78: 0x401,\n                0x88: 0x100401,\n                0x98: 0x2000400,\n                0xa8: 0x2100000,\n                0xb8: 0x100001,\n                0xc8: 0x400,\n                0xd8: 0x2100401,\n                0xe8: 0x1,\n                0xf8: 0x100400,\n                0x100: 0x2000000,\n                0x110: 0x100000,\n                0x120: 0x2000401,\n                0x130: 0x2100001,\n                0x140: 0x100001,\n                0x150: 0x2000400,\n                0x160: 0x2100400,\n                0x170: 0x100401,\n                0x180: 0x401,\n                0x190: 0x2100401,\n                0x1a0: 0x100400,\n                0x1b0: 0x1,\n                0x1c0: 0x0,\n                0x1d0: 0x2100000,\n                0x1e0: 0x2000001,\n                0x1f0: 0x400,\n                0x108: 0x100400,\n                0x118: 0x2000401,\n                0x128: 0x2100001,\n                0x138: 0x1,\n                0x148: 0x2000000,\n                0x158: 0x100000,\n                0x168: 0x401,\n                0x178: 0x2100400,\n                0x188: 0x2000001,\n                0x198: 0x2100000,\n                0x1a8: 0x0,\n                0x1b8: 0x2100401,\n                0x1c8: 0x100401,\n                0x1d8: 0x400,\n                0x1e8: 0x2000400,\n                0x1f8: 0x100001\n            },\n            {\n                0x0: 0x8000820,\n                0x1: 0x20000,\n                0x2: 0x8000000,\n                0x3: 0x20,\n                0x4: 0x20020,\n                0x5: 0x8020820,\n                0x6: 0x8020800,\n                0x7: 0x800,\n                0x8: 0x8020000,\n                0x9: 0x8000800,\n                0xa: 0x20800,\n                0xb: 0x8020020,\n                0xc: 0x820,\n                0xd: 0x0,\n                0xe: 0x8000020,\n                0xf: 0x20820,\n                0x80000000: 0x800,\n                0x80000001: 0x8020820,\n                0x80000002: 0x8000820,\n                0x80000003: 0x8000000,\n                0x80000004: 0x8020000,\n                0x80000005: 0x20800,\n                0x80000006: 0x20820,\n                0x80000007: 0x20,\n                0x80000008: 0x8000020,\n                0x80000009: 0x820,\n                0x8000000a: 0x20020,\n                0x8000000b: 0x8020800,\n                0x8000000c: 0x0,\n                0x8000000d: 0x8020020,\n                0x8000000e: 0x8000800,\n                0x8000000f: 0x20000,\n                0x10: 0x20820,\n                0x11: 0x8020800,\n                0x12: 0x20,\n                0x13: 0x800,\n                0x14: 0x8000800,\n                0x15: 0x8000020,\n                0x16: 0x8020020,\n                0x17: 0x20000,\n                0x18: 0x0,\n                0x19: 0x20020,\n                0x1a: 0x8020000,\n                0x1b: 0x8000820,\n                0x1c: 0x8020820,\n                0x1d: 0x20800,\n                0x1e: 0x820,\n                0x1f: 0x8000000,\n                0x80000010: 0x20000,\n                0x80000011: 0x800,\n                0x80000012: 0x8020020,\n                0x80000013: 0x20820,\n                0x80000014: 0x20,\n                0x80000015: 0x8020000,\n                0x80000016: 0x8000000,\n                0x80000017: 0x8000820,\n                0x80000018: 0x8020820,\n                0x80000019: 0x8000020,\n                0x8000001a: 0x8000800,\n                0x8000001b: 0x0,\n                0x8000001c: 0x20800,\n                0x8000001d: 0x820,\n                0x8000001e: 0x20020,\n                0x8000001f: 0x8020800\n            }\n        ];\n\n        // Masks that select the SBOX input\n        var SBOX_MASK = [\n            0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n            0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n        ];\n\n        /**\n         * DES block cipher algorithm.\n         */\n        var DES = C_algo.DES = BlockCipher.extend({\n            _doReset: function () {\n                // Shortcuts\n                var key = this._key;\n                var keyWords = key.words;\n\n                // Select 56 bits according to PC1\n                var keyBits = [];\n                for (var i = 0; i < 56; i++) {\n                    var keyBitPos = PC1[i] - 1;\n                    keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n                }\n\n                // Assemble 16 subkeys\n                var subKeys = this._subKeys = [];\n                for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n                    // Create subkey\n                    var subKey = subKeys[nSubKey] = [];\n\n                    // Shortcut\n                    var bitShift = BIT_SHIFTS[nSubKey];\n\n                    // Select 48 bits according to PC2\n                    for (var i = 0; i < 24; i++) {\n                        // Select from the left 28 key bits\n                        subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n                        // Select from the right 28 key bits\n                        subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n                    }\n\n                    // Since each subkey is applied to an expanded 32-bit input,\n                    // the subkey can be broken into 8 values scaled to 32-bits,\n                    // which allows the key to be used without expansion\n                    subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n                    for (var i = 1; i < 7; i++) {\n                        subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n                    }\n                    subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n                }\n\n                // Compute inverse subkeys\n                var invSubKeys = this._invSubKeys = [];\n                for (var i = 0; i < 16; i++) {\n                    invSubKeys[i] = subKeys[15 - i];\n                }\n            },\n\n            encryptBlock: function (M, offset) {\n                this._doCryptBlock(M, offset, this._subKeys);\n            },\n\n            decryptBlock: function (M, offset) {\n                this._doCryptBlock(M, offset, this._invSubKeys);\n            },\n\n            _doCryptBlock: function (M, offset, subKeys) {\n                // Get input\n                this._lBlock = M[offset];\n                this._rBlock = M[offset + 1];\n\n                // Initial permutation\n                exchangeLR.call(this, 4, 0x0f0f0f0f);\n                exchangeLR.call(this, 16, 0x0000ffff);\n                exchangeRL.call(this, 2, 0x33333333);\n                exchangeRL.call(this, 8, 0x00ff00ff);\n                exchangeLR.call(this, 1, 0x55555555);\n\n                // Rounds\n                for (var round = 0; round < 16; round++) {\n                    // Shortcuts\n                    var subKey = subKeys[round];\n                    var lBlock = this._lBlock;\n                    var rBlock = this._rBlock;\n\n                    // Feistel function\n                    var f = 0;\n                    for (var i = 0; i < 8; i++) {\n                        f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n                    }\n                    this._lBlock = rBlock;\n                    this._rBlock = lBlock ^ f;\n                }\n\n                // Undo swap from last round\n                var t = this._lBlock;\n                this._lBlock = this._rBlock;\n                this._rBlock = t;\n\n                // Final permutation\n                exchangeLR.call(this, 1, 0x55555555);\n                exchangeRL.call(this, 8, 0x00ff00ff);\n                exchangeRL.call(this, 2, 0x33333333);\n                exchangeLR.call(this, 16, 0x0000ffff);\n                exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n                // Set output\n                M[offset] = this._lBlock;\n                M[offset + 1] = this._rBlock;\n            },\n\n            keySize: 64 / 32,\n\n            ivSize: 64 / 32,\n\n            blockSize: 64 / 32\n        });\n\n        // Swap bits across the left and right words\n        function exchangeLR(offset, mask) {\n            var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n            this._rBlock ^= t;\n            this._lBlock ^= t << offset;\n        }\n\n        function exchangeRL(offset, mask) {\n            var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n            this._lBlock ^= t;\n            this._rBlock ^= t << offset;\n        }\n\n        /**\n         * Shortcut functions to the cipher's object interface.\n         *\n         * @example\n         *\n         *     var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n         *     var plaintext  = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n         */\n        C.DES = BlockCipher._createHelper(DES);\n\n        /**\n         * Triple-DES block cipher algorithm.\n         */\n        var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n            _doReset: function () {\n                // Shortcuts\n                var key = this._key;\n                var keyWords = key.words;\n\n                // Create DES instances\n                this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2)));\n                this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4)));\n                this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6)));\n            },\n\n            encryptBlock: function (M, offset) {\n                this._des1.encryptBlock(M, offset);\n                this._des2.decryptBlock(M, offset);\n                this._des3.encryptBlock(M, offset);\n            },\n\n            decryptBlock: function (M, offset) {\n                this._des3.decryptBlock(M, offset);\n                this._des2.encryptBlock(M, offset);\n                this._des1.decryptBlock(M, offset);\n            },\n\n            keySize: 192 / 32,\n\n            ivSize: 64 / 32,\n\n            blockSize: 64 / 32\n        });\n\n        /**\n         * Shortcut functions to the cipher's object interface.\n         *\n         * @example\n         *\n         *     var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n         *     var plaintext  = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n         */\n        C.TripleDES = BlockCipher._createHelper(TripleDES);\n    }());\n\n\n    (function () {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var StreamCipher = C_lib.StreamCipher;\n        var C_algo = C.algo;\n\n        /**\n         * RC4 stream cipher algorithm.\n         */\n        var RC4 = C_algo.RC4 = StreamCipher.extend({\n            _doReset: function () {\n                // Shortcuts\n                var key = this._key;\n                var keyWords = key.words;\n                var keySigBytes = key.sigBytes;\n\n                // Init sbox\n                var S = this._S = [];\n                for (var i = 0; i < 256; i++) {\n                    S[i] = i;\n                }\n\n                // Key setup\n                for (var i = 0, j = 0; i < 256; i++) {\n                    var keyByteIndex = i % keySigBytes;\n                    var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n                    j = (j + S[i] + keyByte) % 256;\n\n                    // Swap\n                    var t = S[i];\n                    S[i] = S[j];\n                    S[j] = t;\n                }\n\n                // Counters\n                this._i = this._j = 0;\n            },\n\n            _doProcessBlock: function (M, offset) {\n                M[offset] ^= generateKeystreamWord.call(this);\n            },\n\n            keySize: 256 / 32,\n\n            ivSize: 0\n        });\n\n        function generateKeystreamWord() {\n            // Shortcuts\n            var S = this._S;\n            var i = this._i;\n            var j = this._j;\n\n            // Generate keystream word\n            var keystreamWord = 0;\n            for (var n = 0; n < 4; n++) {\n                i = (i + 1) % 256;\n                j = (j + S[i]) % 256;\n\n                // Swap\n                var t = S[i];\n                S[i] = S[j];\n                S[j] = t;\n\n                keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n            }\n\n            // Update counters\n            this._i = i;\n            this._j = j;\n\n            return keystreamWord;\n        }\n\n        /**\n         * Shortcut functions to the cipher's object interface.\n         *\n         * @example\n         *\n         *     var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n         *     var plaintext  = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n         */\n        C.RC4 = StreamCipher._createHelper(RC4);\n\n        /**\n         * Modified RC4 stream cipher algorithm.\n         */\n        var RC4Drop = C_algo.RC4Drop = RC4.extend({\n            /**\n             * Configuration options.\n             *\n             * @property {number} drop The number of keystream words to drop. Default 192\n             */\n            cfg: RC4.cfg.extend({\n                drop: 192\n            }),\n\n            _doReset: function () {\n                RC4._doReset.call(this);\n\n                // Drop\n                for (var i = this.cfg.drop; i > 0; i--) {\n                    generateKeystreamWord.call(this);\n                }\n            }\n        });\n\n        /**\n         * Shortcut functions to the cipher's object interface.\n         *\n         * @example\n         *\n         *     var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n         *     var plaintext  = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n         */\n        C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n    }());\n\n\n    /** @preserve\n     * Counter block mode compatible with  Dr Brian Gladman fileenc.c\n     * derived from CryptoJS.mode.CTR\n     * Jan Hruby jhruby.web@gmail.com\n     */\n    CryptoJS.mode.CTRGladman = (function () {\n        var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\n        function incWord(word) {\n            if (((word >> 24) & 0xff) === 0xff) { //overflow\n                var b1 = (word >> 16) & 0xff;\n                var b2 = (word >> 8) & 0xff;\n                var b3 = word & 0xff;\n\n                if (b1 === 0xff) // overflow b1\n                {\n                    b1 = 0;\n                    if (b2 === 0xff) {\n                        b2 = 0;\n                        if (b3 === 0xff) {\n                            b3 = 0;\n                        } else {\n                            ++b3;\n                        }\n                    } else {\n                        ++b2;\n                    }\n                } else {\n                    ++b1;\n                }\n\n                word = 0;\n                word += (b1 << 16);\n                word += (b2 << 8);\n                word += b3;\n            } else {\n                word += (0x01 << 24);\n            }\n            return word;\n        }\n\n        function incCounter(counter) {\n            if ((counter[0] = incWord(counter[0])) === 0) {\n                // encr_data in fileenc.c from  Dr Brian Gladman's counts only with DWORD j < 8\n                counter[1] = incWord(counter[1]);\n            }\n            return counter;\n        }\n\n        var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n            processBlock: function (words, offset) {\n                // Shortcuts\n                var cipher = this._cipher\n                var blockSize = cipher.blockSize;\n                var iv = this._iv;\n                var counter = this._counter;\n\n                // Generate keystream\n                if (iv) {\n                    counter = this._counter = iv.slice(0);\n\n                    // Remove IV for subsequent blocks\n                    this._iv = undefined;\n                }\n\n                incCounter(counter);\n\n                var keystream = counter.slice(0);\n                cipher.encryptBlock(keystream, 0);\n\n                // Encrypt\n                for (var i = 0; i < blockSize; i++) {\n                    words[offset + i] ^= keystream[i];\n                }\n            }\n        });\n\n        CTRGladman.Decryptor = Encryptor;\n\n        return CTRGladman;\n    }());\n\n\n    (function () {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var StreamCipher = C_lib.StreamCipher;\n        var C_algo = C.algo;\n\n        // Reusable objects\n        var S = [];\n        var C_ = [];\n        var G = [];\n\n        /**\n         * Rabbit stream cipher algorithm\n         */\n        var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n            _doReset: function () {\n                // Shortcuts\n                var K = this._key.words;\n                var iv = this.cfg.iv;\n\n                // Swap endian\n                for (var i = 0; i < 4; i++) {\n                    K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n                        (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n                }\n\n                // Generate initial state values\n                var X = this._X = [\n                    K[0], (K[3] << 16) | (K[2] >>> 16),\n                    K[1], (K[0] << 16) | (K[3] >>> 16),\n                    K[2], (K[1] << 16) | (K[0] >>> 16),\n                    K[3], (K[2] << 16) | (K[1] >>> 16)\n                ];\n\n                // Generate initial counter values\n                var C = this._C = [\n                    (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n                    (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n                    (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n                    (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n                ];\n\n                // Carry bit\n                this._b = 0;\n\n                // Iterate the system four times\n                for (var i = 0; i < 4; i++) {\n                    nextState.call(this);\n                }\n\n                // Modify the counters\n                for (var i = 0; i < 8; i++) {\n                    C[i] ^= X[(i + 4) & 7];\n                }\n\n                // IV setup\n                if (iv) {\n                    // Shortcuts\n                    var IV = iv.words;\n                    var IV_0 = IV[0];\n                    var IV_1 = IV[1];\n\n                    // Generate four subvectors\n                    var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n                    var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n                    var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n                    var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n                    // Modify counter values\n                    C[0] ^= i0;\n                    C[1] ^= i1;\n                    C[2] ^= i2;\n                    C[3] ^= i3;\n                    C[4] ^= i0;\n                    C[5] ^= i1;\n                    C[6] ^= i2;\n                    C[7] ^= i3;\n\n                    // Iterate the system four times\n                    for (var i = 0; i < 4; i++) {\n                        nextState.call(this);\n                    }\n                }\n            },\n\n            _doProcessBlock: function (M, offset) {\n                // Shortcut\n                var X = this._X;\n\n                // Iterate the system\n                nextState.call(this);\n\n                // Generate four keystream words\n                S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n                S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n                S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n                S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n                for (var i = 0; i < 4; i++) {\n                    // Swap endian\n                    S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n                        (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n                    // Encrypt\n                    M[offset + i] ^= S[i];\n                }\n            },\n\n            blockSize: 128 / 32,\n\n            ivSize: 64 / 32\n        });\n\n        function nextState() {\n            // Shortcuts\n            var X = this._X;\n            var C = this._C;\n\n            // Save old counter values\n            for (var i = 0; i < 8; i++) {\n                C_[i] = C[i];\n            }\n\n            // Calculate new counter values\n            C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n            C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n            C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n            C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n            C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n            C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n            C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n            C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n            this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n            // Calculate the g-values\n            for (var i = 0; i < 8; i++) {\n                var gx = X[i] + C[i];\n\n                // Construct high and low argument for squaring\n                var ga = gx & 0xffff;\n                var gb = gx >>> 16;\n\n                // Calculate high and low result of squaring\n                var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n                var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n                // High XOR low\n                G[i] = gh ^ gl;\n            }\n\n            // Calculate new state values\n            X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n            X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n            X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n            X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n            X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n            X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n            X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n            X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n        }\n\n        /**\n         * Shortcut functions to the cipher's object interface.\n         *\n         * @example\n         *\n         *     var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n         *     var plaintext  = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n         */\n        C.Rabbit = StreamCipher._createHelper(Rabbit);\n    }());\n\n\n    /**\n     * Counter block mode.\n     */\n    CryptoJS.mode.CTR = (function () {\n        var CTR = CryptoJS.lib.BlockCipherMode.extend();\n\n        var Encryptor = CTR.Encryptor = CTR.extend({\n            processBlock: function (words, offset) {\n                // Shortcuts\n                var cipher = this._cipher\n                var blockSize = cipher.blockSize;\n                var iv = this._iv;\n                var counter = this._counter;\n\n                // Generate keystream\n                if (iv) {\n                    counter = this._counter = iv.slice(0);\n\n                    // Remove IV for subsequent blocks\n                    this._iv = undefined;\n                }\n                var keystream = counter.slice(0);\n                cipher.encryptBlock(keystream, 0);\n\n                // Increment counter\n                counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0\n\n                // Encrypt\n                for (var i = 0; i < blockSize; i++) {\n                    words[offset + i] ^= keystream[i];\n                }\n            }\n        });\n\n        CTR.Decryptor = Encryptor;\n\n        return CTR;\n    }());\n\n\n    (function () {\n        // Shortcuts\n        var C = CryptoJS;\n        var C_lib = C.lib;\n        var StreamCipher = C_lib.StreamCipher;\n        var C_algo = C.algo;\n\n        // Reusable objects\n        var S = [];\n        var C_ = [];\n        var G = [];\n\n        /**\n         * Rabbit stream cipher algorithm.\n         *\n         * This is a legacy version that neglected to convert the key to little-endian.\n         * This error doesn't affect the cipher's security,\n         * but it does affect its compatibility with other implementations.\n         */\n        var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n            _doReset: function () {\n                // Shortcuts\n                var K = this._key.words;\n                var iv = this.cfg.iv;\n\n                // Generate initial state values\n                var X = this._X = [\n                    K[0], (K[3] << 16) | (K[2] >>> 16),\n                    K[1], (K[0] << 16) | (K[3] >>> 16),\n                    K[2], (K[1] << 16) | (K[0] >>> 16),\n                    K[3], (K[2] << 16) | (K[1] >>> 16)\n                ];\n\n                // Generate initial counter values\n                var C = this._C = [\n                    (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n                    (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n                    (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n                    (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n                ];\n\n                // Carry bit\n                this._b = 0;\n\n                // Iterate the system four times\n                for (var i = 0; i < 4; i++) {\n                    nextState.call(this);\n                }\n\n                // Modify the counters\n                for (var i = 0; i < 8; i++) {\n                    C[i] ^= X[(i + 4) & 7];\n                }\n\n                // IV setup\n                if (iv) {\n                    // Shortcuts\n                    var IV = iv.words;\n                    var IV_0 = IV[0];\n                    var IV_1 = IV[1];\n\n                    // Generate four subvectors\n                    var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n                    var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n                    var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n                    var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n                    // Modify counter values\n                    C[0] ^= i0;\n                    C[1] ^= i1;\n                    C[2] ^= i2;\n                    C[3] ^= i3;\n                    C[4] ^= i0;\n                    C[5] ^= i1;\n                    C[6] ^= i2;\n                    C[7] ^= i3;\n\n                    // Iterate the system four times\n                    for (var i = 0; i < 4; i++) {\n                        nextState.call(this);\n                    }\n                }\n            },\n\n            _doProcessBlock: function (M, offset) {\n                // Shortcut\n                var X = this._X;\n\n                // Iterate the system\n                nextState.call(this);\n\n                // Generate four keystream words\n                S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n                S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n                S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n                S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n                for (var i = 0; i < 4; i++) {\n                    // Swap endian\n                    S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n                        (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n                    // Encrypt\n                    M[offset + i] ^= S[i];\n                }\n            },\n\n            blockSize: 128 / 32,\n\n            ivSize: 64 / 32\n        });\n\n        function nextState() {\n            // Shortcuts\n            var X = this._X;\n            var C = this._C;\n\n            // Save old counter values\n            for (var i = 0; i < 8; i++) {\n                C_[i] = C[i];\n            }\n\n            // Calculate new counter values\n            C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n            C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n            C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n            C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n            C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n            C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n            C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n            C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n            this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n            // Calculate the g-values\n            for (var i = 0; i < 8; i++) {\n                var gx = X[i] + C[i];\n\n                // Construct high and low argument for squaring\n                var ga = gx & 0xffff;\n                var gb = gx >>> 16;\n\n                // Calculate high and low result of squaring\n                var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n                var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n                // High XOR low\n                G[i] = gh ^ gl;\n            }\n\n            // Calculate new state values\n            X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n            X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n            X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n            X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n            X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n            X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n            X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n            X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n        }\n\n        /**\n         * Shortcut functions to the cipher's object interface.\n         *\n         * @example\n         *\n         *     var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n         *     var plaintext  = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n         */\n        C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n    }());\n\n\n    /**\n     * Zero padding strategy.\n     */\n    CryptoJS.pad.ZeroPadding = {\n        pad: function (data, blockSize) {\n            // Shortcut\n            var blockSizeBytes = blockSize * 4;\n\n            // Pad\n            data.clamp();\n            data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n        },\n\n        unpad: function (data) {\n            // Shortcut\n            var dataWords = data.words;\n\n            // Unpad\n            var i = data.sigBytes - 1;\n            while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n                i--;\n            }\n            data.sigBytes = i + 1;\n        }\n    };\n\n\n    return CryptoJS;\n\n}));\n\nfunction getResCode1() {\n    var encrypted = CryptoJS.AES.encrypt(\n        CryptoJS.enc.Utf8.parse(Math.floor(new Date().getTime() / 1000).toString()),\n        CryptoJS.enc.Utf8.parse('1234567887654321'),\n        {\n            iv: CryptoJS.enc.Utf8.parse('1234567887654321'),\n            mode: CryptoJS.mode.CBC,\n            padding: CryptoJS.pad.Pkcs7\n        }\n    );\n    return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);\n}\n\nfunction my_decode(data) {\n    var encrypted = CryptoJS.AES.decrypt(\n        data,\n        CryptoJS.enc.Utf8.parse('h5.jiucaishuo.comaaaaaaaaaaaaaaa'),\n        {\n            iv: CryptoJS.enc.Utf8.parse('h5.jiucaishuo.com'),\n            mode: CryptoJS.mode.CBC,\n            padding: CryptoJS.pad.Pkcs7\n        }\n    );\n    return encrypted.toString(CryptoJS.enc.Utf8);\n}\n\nfunction new_my_decode(data) {\n    let key = CryptoJS.enc.Utf8.parse('bieyanjiulexixishuibatoufameill1'); // 密钥需要是32字节，这里可能需要调整\n    let iv = CryptoJS.enc.Utf8.parse('nengnongchulainbl1'); // 向量通常是16字节\n    let decrypted = CryptoJS.AES.decrypt(\n        data,\n        key,\n        {\n            iv: iv,\n            mode: CryptoJS.mode.CBC,\n            padding: CryptoJS.pad.Pkcs7\n        }\n    );\n    return decrypted.toString(CryptoJS.enc.Utf8);\n}\n"
  },
  {
    "path": "akshare/data/ths.js",
    "content": "var TOKEN_SERVER_TIME = 1572845499.629;\nfunction v_cookie (r, n, t, e, a) {\n    var u = n[0],\n        c = n[1],\n        v = a[0],\n        s = t[0],\n        f = t[1],\n        l = r[0],\n        d = hr(a[1], e[0], t[2]),\n        p = t[3],\n        h = e[1],\n        g = yr(a[2], a[3], e[2]),\n        m = yr(a[4], r[1], t[4]),\n        w = r[2],\n        I = a[5],\n        _ = a[6],\n        y = a[7],\n        E = hr(n[2], r[3], r[4]),\n        A = t[5],\n        C = e[3],\n        b = e[4],\n        B = t[6],\n        R = a[8],\n        T = a[9],\n        S = n[3],\n        k = t[7],\n        x = t[8],\n        O = a[10],\n        L = n[4],\n        M = n[5],\n        N = a[11],\n        P = e[5],\n        j = hr(n[6], e[6], t[9], r[5]),\n        D = t[10],\n        W = e[7],\n        $ = r[6],\n        F = yr(r[7], t[11], e[8], n[7]),\n        X = r[8],\n        H = t[12],\n        K = r[9],\n        U = n[8],\n        V = e[9],\n        Y = r[10],\n        J = e[10],\n        q = r[11],\n        Q = a[12],\n        Z = n[9],\n        G = t[13],\n        z = t[14],\n        rr = t[15],\n        nr = n[10],\n        tr = a[13],\n        er = a[14],\n        ar = e[11],\n        or = r[12],\n        ir = yr(t[16], r[13], r[14], r[15]),\n        ur = t[17],\n        cr = t[18];\n    function vr () {\n        var r = arguments[n[11]];\n        return r.split(n[12]).reverse().join(e[12])\n    }\n    var sr = [new e[13](hr(a[15], n[13], a[16])), new e[13](a[17])];\n    function fr () {\n        var n = arguments[a[18]];\n        if (!n) return a[19];\n        for (var o = t[19], i = e[14], u = e[15]; u < n.length; u++)\n        {\n            var c = n.charCodeAt(u),\n                v = c ^ i;\n            i = c,\n                o += r[16].fromCharCode(v)\n        }\n        return o\n    }\n    var lr = '',\n        dr; !\n            function (o) {\n                var i = e[18],\n                    c = e[19];\n                o[e[20]] = a[21];\n                function v (t, a, o, i, u) {\n                    var c, v, s;\n                    c = v = s = r;\n                    var f, l, d;\n                    f = l = d = n;\n                    var p, h, g;\n                    p = h = g = e;\n                    var m = t + g[21] + a;\n                    i && (m += l[15] + i),\n                        u && (m += h[22] + u),\n                        o && (m += v[17] + o),\n                        l[14][g[23]] = m\n                }\n                o[e[24]] = l;\n                function s (t, e, a) {\n                    var o = n[16];\n                    this.setCookie(t, r[18], i + o + c, e, a)\n                }\n                o[t[22]] = f;\n                function f (o) {\n                    var i = vr(e[25], a[22]),\n                        c = a[23][n[17]],\n                        v = u + i + o + t[23],\n                        s = '';\n                    if (s == -r[19])\n                    {\n                        if (v = o + t[23], c.substr(a[24], v.length) != v) return;\n                        s = a[24]\n                    }\n                    var f = s + v[r[20]],\n                        l = '';\n                    return l == -e[26] && (l = c[t[24]])\n\n                }\n                o[e[27]] = v;\n                function l () {\n                    var r, t, a;\n                    r = t = a = e;\n                    var i, u, c;\n                    i = u = c = n;\n                    var v = u[18];\n                    this.setCookie(v, a[28]),\n                        this.getCookie(v) || (o[i[19]] = u[20]),\n                        this.delCookie(v)\n                }\n                o[n[21]] = s\n            }(dr || (dr = {}));\n    var pr;\n    function hr () {\n        var r = arguments[a[25]];\n        if (!r) return a[19];\n        for (var e = a[19], o = t[25], i = n[22], u = t[18]; u < r.length; u++)\n        {\n            var c = r.charCodeAt(u);\n            i = (i + t[26]) % o.length,\n                c ^= o.charCodeAt(i),\n                e += String.fromCharCode(c)\n        }\n        return e\n    } !\n        function (o) {\n            var i, u, d;\n            i = u = d = a;\n            var p, h, g;\n            p = h = g = t;\n            var m, w, I;\n            m = w = I = r;\n            var _, y, E;\n            _ = y = E = n;\n            var b, B, R;\n            b = B = R = e;\n            var T = B[29],\n                S = y[23],\n                k = m[22],\n                x = w[0],\n                O = E[24],\n                L = (C, Ar, R[30]),\n                M = b[31],\n                N = T + S,\n                P = p[28],\n                j,\n                W = m[23][y[25]],\n                $,\n                F;\n            function X (r) {\n                return function () {\n                    F.appendChild(j),\n                        j.addBehavior(u[26]),\n                        j.load(N);\n                    var n = r();\n                    return F.removeChild(j),\n                        n\n                }\n            }\n            function H () {\n                var r = A;\n                r = D;\n                try\n                {\n                    return !!(N in B[32] && b[32][N])\n                } catch (n)\n                {\n                    return void B[15]\n                }\n            }\n            function K (r) {\n                return P ? G(r) : j ? Y(r) : void _[26]\n            }\n            function U () {\n                if (P = H(), P) j = _[27][N];\n                else if (W[k + c][I[24]]) try\n                {\n                    $ = new ActiveXObject(vr(I[25], y[28], w[26])),\n                        $.open(),\n                        $.write(y[29]),\n                        $.close(),\n                        F = $.w[B[33]][I[27]][_[30]],\n                        j = F.createElement(I[28])\n                } catch (r)\n                {\n                    j = W.createElement(N),\n                        F = W[vr(I[29], d[27])] || W.getElementsByTagName(b[17])[I[27]] || W[m[30]]\n                }\n            }\n            o[w[31]] = U;\n            function V (r, n) {\n                var t = J;\n                if (void 0 === n) return Z(r);\n                if (t = sr, P) z(r, n);\n                else\n                {\n                    if (!j) return void B[15];\n                    Q(r, n)\n                }\n            }\n            o[v + x] = V;\n            function Y (r) {\n                X(function () {\n                    return r = J(r),\n                        j.getAttribute(r)\n                })()\n            }\n            function J (r) {\n                var n = z;\n                n = v;\n                var t = vr(Ir, w[32]),\n                    e = new y[31](t + O + s + L, b[31]);\n                return r.replace(new B[13](d[28]), b[34]).replace(e, p[29])\n            }\n            function q (r) {\n                try\n                {\n                    j.removeItem(r)\n                } catch (n) { }\n            }\n            o[M + f + l] = K;\n            function Q (r, n) {\n                var t = G;\n                t = cr,\n                    X(function () {\n                        var t = M;\n                        r = J(r),\n                            t = K;\n                        try\n                        {\n                            j.setAttribute(r, n),\n                                j.save(N)\n                        } catch (e) { }\n                    })()\n            }\n            function Z (r) {\n                var n, t, e;\n                if (n = t = e = g, P) q(r);\n                else\n                {\n                    if (!j) return void t[18];\n                    rr(r)\n                }\n            }\n            function G (r) {\n                try\n                {\n                    return j.getItem(r)\n                } catch (n)\n                {\n                    return y[20]\n                }\n            }\n            o[fr(w[33], p[30], R[35])] = Z;\n            function z (r, n) {\n                try\n                {\n                    j.setItem(r, n)\n                } catch (t) { }\n            }\n            function rr (r) {\n                X(function () {\n                    r = J(r),\n                        j.removeAttribute(r),\n                        j.save(N)\n                })()\n            }\n        }(pr || (pr = {}));\n    var gr = function () {\n        var o, i, u;\n        o = i = u = e;\n        var c, v, s;\n        c = v = s = a;\n        var f, l, g;\n        f = l = g = n;\n        var m, w, I;\n        m = w = I = t;\n        var _, E, A;\n        _ = E = A = r;\n        var C = yr(Cr, U, _[34]),\n            b = vr(A[35], m[31]),\n            R = hr(g[32], c[29], i[36]),\n            T = hr(l[33], g[34], i[37], tr);\n        function S (r) {\n            this[m[32]] = r;\n            for (var n = o[15], t = r[i[38]]; t > n; n++) this[n] = i[15]\n        }\n        return S[d + p + C][b + h] = function () {\n            for (var r = this[vr(h, E[36], E[37])], n = [], t = -I[26], e = o[15], a = r[A[20]]; a > e; e++) for (var u = this[e], f = r[e], d = t += f; n[d] = u & parseInt(v[30], l[35]), --f != s[24];)--d,\n                u >>= parseInt(i[39], c[31]);\n            return n\n        },\n            S[vr(w[33], v[32])][_[38]] = function (r) {\n                var n = dr,\n                    t = this[vr(y, l[36], A[39])],\n                    e = f[26];\n                n = B;\n                for (var a = v[24], o = t[l[37]]; o > a; a++)\n                {\n                    var i = t[a],\n                        u = l[26];\n                    do u = (u << parseInt(R + T, g[35])) + r[e++];\n                    while (--i > w[18]);\n                    this[a] = u >>> w[18]\n                }\n            },\n            S\n    }(),\n        mr; !\n            function (o) {\n                var i, u, c;\n                i = u = c = n;\n                var v, s, f;\n                v = s = f = e;\n                var l, d, p;\n                l = d = p = a;\n                var h, w, I;\n                h = w = I = r;\n                var _, y, E;\n                _ = y = E = t;\n                var A = y[34],\n                    C = (nr, U, h[40]),\n                    b = p[25];\n                function B (r) {\n                    for (var n = y[35], t = f[15], e = r[vr(c[38], I[41], H)], a = []; e > t;)\n                    {\n                        var o = k[r.charAt(t++)] << parseInt(g + A, d[31]) | k[r.charAt(t++)] << parseInt(n + m, h[42]) | k[r.charAt(t++)] << parseInt(I[43], i[35]) | k[r.charAt(t++)];\n                        a.push(o >> parseInt(_[36], h[42]), o >> l[31] & parseInt(u[39], i[40]), o & parseInt(d[30], c[35]))\n                    }\n                    return a\n                }\n                function T (r) {\n                    for (var n = (O, R, p[24]), t = I[27], e = r[E[24]]; e > t; t++) n = (n << E[37]) - n + r[t];\n                    return n & parseInt(E[38], p[33])\n                }\n                for (var S = s[40], k = {},\n                    x = s[15]; x < parseInt(I[44], l[34]); x++) k[S.charAt(x)] = x;\n                function L (r) {\n                    var n = B(r),\n                        t = n[u[26]];\n                    if (t != b) return error = yr(V, u[41], s[41], v[42]),\n                        void 0;\n                    var e = n[s[26]],\n                        a = [];\n                    return P(n, +_[39], a, +_[18], e),\n                        T(a) == e ? a : void 0\n                }\n                function M (r) {\n                    var n = T(r),\n                        t = [b, n];\n                    return P(r, +l[24], t, +p[25], n),\n                        N(t)\n                }\n                function N (r) {\n                    var n, t, e;\n                    n = t = e = f;\n                    var a, o, u;\n                    a = o = u = y;\n                    var c, v, s;\n                    c = v = s = h;\n                    var d, p, g;\n                    d = p = g = l;\n                    var m, w, I;\n                    m = w = I = i;\n                    for (var _ = m[42], E = d[24], A = r[c[20]], b = []; A > E;)\n                    {\n                        var B = r[E++] << parseInt(fr(Z, d[35]), o[39]) | r[E++] << g[31] | r[E++];\n                        b.push(S.charAt(B >> parseInt(m[43], t[43])), S.charAt(B >> parseInt(p[36], o[40]) & parseInt(I[44], I[45])), S.charAt(B >> n[44] & parseInt(_ + C, n[42])), S.charAt(B & parseInt(fr(d[37], c[45], or), a[41])))\n                    }\n                    return b.join(o[19])\n                }\n                function P (r, n, t, e, a) {\n                    var o, i, u;\n                    o = i = u = w;\n                    var c, v, s;\n                    c = v = s = E;\n                    for (var f = r[v[24]]; f > n;) t[e++] = r[n++] ^ a & parseInt(u[46], s[42]),\n                        a = ~(a * parseInt(v[43], v[40]))\n                }\n                o[E[44]] = N,\n                    o[_[45]] = B,\n                    o[v[45]] = M,\n                    o[y[46]] = L\n            }(mr || (mr = {}));\n    var wr; !\n        function (o) {\n            var i = a[38],\n                u = r[47],\n                c = t[47],\n                v = vr(n[46], a[39], a[40]),\n                s = e[46],\n                f = e[47],\n                l = a[41],\n                d = a[42];\n            function p (o) {\n                var i = a[43],\n                    u = vr(n[47], e[48], n[48]),\n                    c = {},\n                    v = function (o, c) {\n                        var s, f, l, d;\n                        for (c = c.replace(n[49], n[12]), c = c.substring(e[26], c[e[38]] - e[26]), s = c.split(e[49]), l = a[24]; l < s[yr(v, sr, t[48])]; l++) if (f = s[l].split(n[50]), f && !(f[a[44]] < t[39]))\n                        {\n                            for (d = n[35]; d < f[r[20]]; d++) f[n[11]] = f[n[11]] + r[48] + f[d];\n                            f[n[26]] = new a[45](r[49]).test(f[n[26]]) ? f[e[15]].substring(r[19], f[e[15]][a[44]] - n[11]) : f[n[26]],\n                                f[n[11]] = new r[50](i + u + w).test(f[n[11]]) ? f[e[26]].substring(t[26], f[r[19]][n[37]] - t[26]) : f[a[18]],\n                                o[f[r[27]]] = f[n[11]]\n                        }\n                        return o\n                    };\n                return new a[45](I + _).test(o) && (c = v(c, o)),\n                    c\n            }\n            function h (n) {\n                for (var t = [], e = a[24]; e < n[r[20]]; e++) t.push(n.charCodeAt(e));\n                return t\n            }\n            function g (o) {\n                var u = a[46];\n                if (typeof o === vr(O, a[47], or) && o[a[48]]) try\n                {\n                    var c = parseInt(o[a[48]]);\n                    switch (c)\n                    {\n                        case parseInt(i + u, t[42]): break;\n                        case parseInt(yr(t[49], r[51], e[50]), e[43]): top[t[50]][n[51]] = o[e[51]];\n                            break;\n                        case parseInt(yr(a[25], j, e[52]), n[52]): top[n[53]][t[51]] = o[t[52]]\n                    }\n                } catch (v) { }\n            }\n            function m (r, n, t) {\n\n            }\n            function L () {\n                var e, a, o;\n                e = a = o = r;\n                var i, u, c;\n                i = u = c = n;\n                var v, s, f;\n                v = s = f = t;\n                var l = f[53],\n                    d = c[54],\n                    p = new e[52];\n                return typeof TOKEN_SERVER_TIME == y + l + d ? s[18] : (time = parseInt(TOKEN_SERVER_TIME), time)\n            }\n            function M () {\n                var o = new t[54];\n                try\n                {\n                    return time = n[2].now(),\n                        time / parseInt(fr(a[50], a[51], r[53]), t[40]) >>> e[15]\n                } catch (i)\n                {\n                    return time = o.getTime(),\n                        time / parseInt(e[53], a[25]) >>> r[27]\n                }\n            }\n            function N (r) {\n                for (var a = t[18], o = r[t[24]] - n[11]; o >= e[15]; o--) a = a << e[26] | +r[o];\n                return a\n            }\n            function P (a) {\n                var o = new r[50](n[55]);\n                if (K(a)) return a;\n                var i = o.test(a) ? -e[54] : -t[39],\n                    u = a.split(r[54]);\n                return u.slice(i).join(fr(n[56], t[55], E))\n            }\n            function j (t) {\n                for (var o = n[26], i = e[15], u = t[vr(r[55], a[52], D)]; u > i; i++) o = (o << r[56]) - o + t.charCodeAt(i),\n                    o >>>= n[26];\n                return o\n            }\n            function W (n, o) {\n                var i = new a[45](t[56], yr(r[57], $, t[57], r[58])),\n                    u = new a[45](t[58]);\n                if (n)\n                {\n                    var c = n.match(i);\n                    if (c)\n                    {\n                        var v = c[e[26]];\n                        return o && u.test(v) && (v = v.split(t[59]).pop().split(r[48])[e[15]]),\n                            v\n                    }\n                }\n            }\n            function $ (o) {\n                var i = n[57],\n                    u = vr(e[55], e[56]),\n                    f = e[4];\n                if (!(o > t[60]))\n                {\n                    o = o || a[24];\n                    var l = parseInt(E + c + A, r[42]),\n                        d = n[14].createElement(e[57]);\n                    d[r[59]] = n[58] + parseInt((new a[53]).getTime() / l) + r[60],\n                        d[r[61]] = function () {\n                            var n = a[46];\n                            cr = r[19],\n                                setTimeout(function () {\n                                    $(++o)\n                                },\n                                    o * parseInt(C + n, a[33]))\n                        },\n                        d[t[61]] = d[hr(a[54], a[55], t[62])] = function () {\n                            var a = n[59];\n                            this[i + v + u + b] && this[e[58]] !== n[60] && this[s + B + a + f] !== e[59] && this[t[63]] !== n[61] || (cr = e[15], d[hr(N, r[62], n[62], e[25])] = d[t[64]] = r[63])\n                        },\n                        e[60][e[61]].appendChild(d)\n                }\n            }\n            function F () {\n                var r = a[56];\n                return Math.random() * parseInt(R + T + f + r, t[42]) >>> n[26]\n            }\n            function X (r) {\n                var e = new n[31](fr(t[65], t[66], a[57]), yr(c, n[63], t[57]));\n                if (r)\n                {\n                    var o = r.match(e);\n                    return o\n                }\n            }\n            o[S + k] = p,\n                o[r[64]] = $,\n                o[t[67]] = g,\n                o[t[68]] = h,\n                o[t[69]] = j,\n                o[t[70]] = F,\n                o[r[65]] = K,\n                o[x + l] = P,\n                o[t[71]] = W,\n                o[t[72]] = X,\n                o[hr(r[66], t[73], r[67], C)] = N,\n                o[t[74]] = M,\n                o[d + O] = L;\n            function K (n) {\n                return new r[50](t[75]).test(n)\n            }\n            o[r[68]] = m\n        }(wr || (wr = {}));\n    var Ir; !\n        function (o) {\n            var i = t[76],\n                u = t[77],\n                c = n[65],\n                v = t[78],\n                s = a[24],\n                f = n[26],\n                l = t[18],\n                d = t[18],\n                p = e[15],\n                h = a[24],\n                g = r[69],\n                m = '';\n            wr.eventBind(e[60], n[67], E),\n                wr.eventBind(r[71], t[79], E),\n                wr.eventBind(t[20], hr(e[64], A, a[59]), b),\n                wr.eventBind(e[60], r[72], y);\n            function w () {\n                return f\n            }\n            function I (r) {\n                f++\n            }\n            function _ () {\n                return {\n                    x: p,\n                    y: h,\n                    trusted: g\n                }\n            }\n            function y (r) {\n                d++\n            }\n            function E (r) {\n                s++\n            }\n            function C () {\n                return l\n            }\n            function b (r) {\n                var o, i, u;\n                o = i = u = n;\n                var c, s, f;\n                c = s = f = t;\n                var d, m, w;\n                d = m = w = e;\n                var I, _, y;\n                I = _ = y = a;\n                var E = I[60],\n                    A = d[65];\n                l++ ,\n                    g = void 0 == r[E + A + v] || r[yr(f[80], s[81], i[68])],\n                    p = r[s[82]],\n                    h = r[c[83]]\n            }\n            function B () {\n                return d\n            }\n            function R () {\n                return s\n            }\n            o[r[73]] = R,\n                o[a[61]] = w,\n                o[fr(a[62], n[69])] = C,\n                o[n[70]] = B,\n                o[r[74]] = _\n        }(Ir || (Ir = {}));\n    var _r; !\n        function (u) {\n            var v = fr(n[71], t[84]),\n                s = r[75],\n                f = yr(dr, n[72], e[66], $),\n                l = r[76],\n                d = e[67],\n                p = r[77],\n                h = hr(dr, r[78], a[63], n[73]),\n                g = r[79],\n                m = n[74];\n            BROWSER_LIST = {\n\n            };\n            function w () {\n                var t, e, a;\n                t = e = a = r;\n                var o, i, u;\n                o = i = u = n;\n                return wr.booleanToDecimal(c)\n            }\n            function I (t) {\n                for (var o = n[26]; o < y[e[38]]; o++)\n                {\n                    var i = y[o][r[94]];\n                    if (t.test(i)) return !a[24]\n                }\n                return !a[18]\n            }\n            function E (t) {\n\n            }\n            function A () {\n                return a[73]\n            }\n\n            function B () {\n                return n[20]\n            }\n\n            function T () {\n                return I(new t[93](r[96]))\n            }\n            function S () {\n                return I(new a[45](t[98], r[97]))\n            }\n            function k () {\n                for (var r in BROWSER_LIST) if (BROWSER_LIST.hasOwnProperty(r))\n                {\n                    var n = BROWSER_LIST[r];\n                    if (n()) return + r.substr(a[18])\n                }\n                return e[15]\n            }\n            function x () {\n                var n, a, o;\n                n = a = o = r;\n                var i, u, c;\n                i = u = c = t;\n                var v, s, f;\n                v = s = f = e;\n                var l = s[75],\n                    d = s[76];\n                return I(new u[93](o[98], v[71])) || E(l + F + d + X)\n            }\n            function O () {\n\n            }\n            function L () {\n                var r, n, t;\n                r = n = t = a;\n                var o, i, u;\n                o = i = u = e;\n                var c = l;\n                return c = p\n            }\n            function M () {\n                var r, n, a;\n                r = n = a = t;\n                var o, i, u;\n                o = i = u = e;\n                var c;\n                try\n                {\n                    c = i[60].createElement(a[99]).getContext(i[78])\n                } catch (v) { }\n                return !!c\n            }\n\n\n            function J () {\n                var t, e, o;\n                t = e = o = n;\n                var i, u, c;\n                i = u = c = a;\n                var v, s, f;\n                return v = s = f = r,\n                    -parseInt(s[100], c[31]) === (new e[2]).getTimezoneOffset()\n            }\n\n            function Q () {\n                try\n                {\n                } catch (e)\n                {\n                    return r[101]\n                }\n            }\n            function Z () {\n                var n, a, o;\n                n = a = o = e;\n                var i, u, c;\n                i = u = c = r;\n                var v, s, f;\n                return v = s = f = t,\n                    plugin_num = s[18],\n                    plugin_num\n            }\n            var z = [R, x, S, T, L, Q, b, V, O, J, M, q, Y, B, tr, A];\n\n            var nr = [new e[13](n[85]), new n[31](e[82]), new r[50](e[83]), new r[50](t[102]), new n[31](e[84]), new a[45](a[78]), new a[45](e[85]), new e[13](t[103]), new a[45](r[103]), new t[93](r[104]), new a[45](r[105])];\n            function tr () {\n                return e[86]\n            }\n            u[e[87]] = rr,\n                u[a[79]] = k,\n                u[yr(c, e[88], r[106])] = Z,\n                u[K + U + m] = w\n        }(_r || (_r = {}));\n    function yr () {\n        var o = arguments[a[25]];\n        if (!o) return t[19];\n        for (var i = a[19], u = e[14], c = r[27]; c < o.length; c++)\n        {\n            var v = o.charCodeAt(c),\n                s = v ^ u;\n            u = u * c % a[80] + e[89],\n                i += n[86].fromCharCode(s)\n        }\n        return i\n    }\n    var Er; !\n        function (o) {\n            var i = a[81],\n                u = t[35],\n                c = r[107],\n                v = vr(S, a[56]),\n                f = r[27],\n                l = r[19],\n                d = a[25],\n                p = n[87],\n                h = parseInt(e[90], r[108]),\n                g = a[82],\n                m = parseInt(vr(s, t[104]), t[39]),\n                w = r[109],\n                I = t[40],\n                _ = parseInt(i + V, n[45]),\n                y = parseInt(u + c, n[52]),\n                E = parseInt(t[105], r[42]),\n                A = e[91],\n                C = parseInt(Y + v, r[42]),\n                b = parseInt(e[92], e[93]),\n                B = t[106],\n                R = parseInt(vr(e[94], e[95]), t[41]),\n                T = parseInt(a[83], e[93]),\n                k;\n            function x () {\n                var r = M();\n                return r\n            }\n            function O () {\n                var r = t[26],\n                    a = n[35],\n                    o = e[54],\n                    i = n[88];\n                k = new gr([i, i, i, i, r, r, r, o, a, a, a, a, a, a, a, i, a, r]),\n                    k[l] = wr.serverTimeNow(),\n                    L(),\n                    k[B] = cr,\n                    k[T] = ur,\n                    k[R] = e[15],\n                    k[C] = _r.getBrowserFeature(),\n                    k[g] = _r.getBrowserIndex(),\n                    k[m] = _r.getPluginNum()\n            }\n            function L () {\n                var a = dr.getCookie(tr) || pr.get(ar);\n                if (a && a[r[20]] == parseInt(e[96], n[52]))\n                {\n                    var o = mr.decode(a);\n                    if (o && (k.decodeBuffer(o), k[f] != t[18])) return\n                }\n                k[f] = wr.random()\n            }\n            o[a[84]] = O;\n            function M () {\n                k[R]++ ,\n                    k[l] = wr.serverTimeNow(),\n                    k[d] = wr.timeNow(),\n                    k[B] = cr,\n                    k[w] = Ir.getMouseMove(),\n                    k[I] = Ir.getMouseClick(),\n                    k[_] = Ir.getMouseWhell(),\n                    k[y] = Ir.getKeyDown(),\n                    k[E] = Ir.getClickPos().x,\n                    k[A] = Ir.getClickPos().y;\n                var r = k.toBuffer();\n                return mr.encode(r)\n            }\n            o[yr(r[3], n[89], e[97])] = x\n        }(Er || (Er = {}));\n    var Ar; !\n        function (o) {\n            var i = n[90],\n                u = a[85],\n                v = r[110],\n                s = a[86],\n                f = t[107],\n                p,\n                h,\n                m,\n                w,\n                I,\n                _;\n            function E (r) {\n                return N(r) && dr[a[87]]\n            }\n            function A (o) {\n                var i = wr.getOriginFromUrl(o);\n                return i ? !new n[31](yr(r[42], c, t[110]) + w).test(i[r[108]]) || !new e[13](I).test(i[a[18]]) : t[111]\n            }\n            function C (e) {\n                var o = (_r, g, Er.update());\n                return e + (new r[50](vr(a[88], a[89])).test(e) ? n[91] : vr(P, a[90], t[112])) + er + t[23] + r[111](o)\n            }\n            function b (o, i, u) {\n                if (r[112] in i) return i.apply(o, u);\n                switch (u[n[37]])\n                {\n                    case n[26]:\n                        return i();\n                    case a[18]:\n                        return i(u[n[26]]);\n                    case r[108]:\n                        return i(u[e[15]], u[r[19]]);\n                    default:\n                        return i(u[n[26]], u[r[108]], u[t[17]])\n                }\n            }\n            function B () {\n                var r = Er.update();\n                return r\n            }\n            function k (r, e, o) {\n                if (!r) return n[20];\n                var i = r[e];\n                if (!i) return t[111];\n                var u = o(i);\n                return d || (u[a[97]] = i + t[19]),\n                    u[n[97]] = i,\n                    r[e] = u,\n                    a[21]\n            }\n            function M (o) {\n                var i, u, c;\n                i = u = c = n;\n                var v, s, l;\n                v = s = l = r;\n                var d, p, h;\n                d = p = h = e;\n                var g, m, w;\n                g = m = w = a;\n                var I, _, y;\n                I = _ = y = t;\n                var R = hr(I[121], w[106], d[109]),\n                    T;\n                k(o, _[122],\n                    function (r) {\n                        var n = w[107];\n                        return function () {\n                            var t, e, a;\n                            t = e = a = _;\n                            var o, i, u;\n                            o = i = u = l;\n                            var c, v, s;\n                            c = v = s = w;\n                            var f = s[108];\n                            try\n                            {\n                                A(arguments[s[18]]) && !E(arguments[o[19]]) ? arguments[a[26]] = C(arguments[s[18]]) : T = B(),\n                                    r.apply(this, arguments),\n                                    A(arguments[i[19]]) || this.setRequestHeader(ar, T)\n                            } catch (d)\n                            {\n                                return n + f\n                            }\n                        }\n                    }),\n                    k(o, g[109],\n                        function (r) {\n                            var n = b;\n                            n = M;\n                            var t = vr(_[123], u[107]);\n                            return function () {\n                                var n = fr(f, c[108], I[124]),\n                                    e = s[122];\n                                try\n                                {\n                                    if (parseInt(this.status) === parseInt(h[110], v[123]))\n                                    {\n                                        for (var a = r.apply(this, arguments), o = new p[13](i[109], n + R), u, l, d = {}; u = o.exec(a);) d[u[m[18]].toLowerCase()] = u[v[108]];\n                                        wr.analysisRst(wr.parse(d[ir.toLowerCase()]))\n                                    }\n                                } catch (g)\n                                {\n                                    return e + t\n                                }\n                                return r.apply(this, arguments)\n                            }\n                        })\n            }\n            function N (r) {\n                var n = wr.getHostFromUrl(r, e[28]);\n                return n ? _.test(n) : e[28]\n            }\n            function j () {\n                var cookie_v;\n                cookie_v = B()\n                return cookie_v\n            }\n            o[n[111]] = j\n        }(Ar || (Ar = {}));\n    var Cr;\n    var cookie = (function (a) {\n        function _ () {\n            var cookie_v;\n            Er.Init();\n            cookie_v = Ar.Init();\n            return cookie_v\n        }\n        return function y () {\n            try\n            {\n                return _()\n            } catch (r)\n            {\n                return r\n            }\n        }\n    })()\n    return cookie()\n}\nfunction v () {\n    var v;\n    v = v_cookie(\n        [\"t\", 34, '\"$', 36, \"\\f\u0003b\", 55, \"ure\", \"lJ#K\", \"Flash\", \"getBro\", \"1\", \"analys\", \"CHAMELEON_CALLBACK\", 30, \"\\u256f\\u0930\\u097b\\u09ff\\u09a4\\u0934\\u099d\\u09c1\\u099d\\u09d9\\u09a7\\u09c3\\u0995\\u09f0\\u09d3\\u0a62\\u0a6f\\u09bc\\u09ad\\u0934\", \"F,sp-\", String, \"; expires=\", \"\", 1, \"length\", \"; \", '', '', \"addBehavior\", \";^l\", \">*]+\", 0, \"div\", \"&\u0019~!\", \"\", \"Init\", \"('&%$#\\\"![\", \">NJ\", \"\\u254e\\u096d\\u095f\", \"W$R\", \"sdelif_esab\", \"Or)E\", \"decodeBuffer\", 84, \"f\", \"htgnel\", 8, \"110\", \"40\", \"\\u2504\\u2562\", \"255\", \"o\", \":\", '^\".*\"$', RegExp, 40, Date, \"e9\", \".\", 19, 5, \"t8JOi\", \"}\u001fB\", \"src\", \".js\", \"onerror\", \"\u001e*q:\", null, \"getServerTime\", \"isIPAddr\", \"8-\", \"ZX9Y]V8aWs3VQZ7Y\", \"eventBind\", !0, \"wheel\", '', \"keydown\", \"getMouseMove\", \"getClickPos\", \"vent\", \"me\", \"MSG\", 41, \"th\", \"safari\", \"ActiveXObject\", \"maxHeight\", \"head\", \"Google Inc.\", \"vendor\", \"sgAppName\", \"opr\", 94, \"tu\u0014gw`\u0005pj\", \"chrome\", \"2345Explorer\", \"ome\", \"TheWorld\", \"name\", \"\\u2553\\u253c\\u2572\\u251d\\u2569\\u253d\\u254f\\u252e\\u254d\\u2526\", \"Native Client\", \"i\", \"Shockwave\", \"systemLanguage\", \"740\", !1, \"plugins\", \"^ARM\", \"^iPod\", \"^BlackBerry\", \"\\u2550\\u0978\\u094e\\u09c1\\u09bc\\u0928\\u0989\\u09d8\\u099a\\u09f3\\u09b7\\u09dc\", \"0\", 2, 7, \"c\", encodeURIComponent, \"apply\", \"headers\", \"8S:+\", \"\\u2560\\u2509\\u2567\\u2503\\u256c\\u251b\", \"\\u255e\\u2530\\u2543\\u2526\\u2554\\u2520\\u2562\\u2507\\u2561\\u250e\\u257c\\u2519\", \"a\", 14, \":dB2\", \"href\", \"click\", \"err\", 16, \"hostname\", \"`60w\", \"\\f\u0003b\u0002\u000e\u0007f\", \"\u001c&X \"],\n        [\";\", \"Element\", Date, \"par\", \"i\", \"DOMMous\", 21, \"xmT\", \"wserFe\", \"h\", !0, 1, \"\", Boolean, '', \"; domain=\", \"n 1970 00:\", \"cookie\", \"checkcookie\", \"allow\", !1, \"delCookie\", 2333, \"torage\", \")*+,/\\\\\\\\:;\", '', 0, '', \"eliflmth\", '', \"ducument\", RegExp, \"W\u001e\", \"qsU\", 61, 2, \"sdelif_esab\", \"length\", \"I\u001c\", \"ff\", 16, 45, \"3\", \"10010\", \"77\", 8, \"6e%d\", \"DT{e\", \"\u001e$\", / /g, \":\", \"href\", 10, \"location\", \"ned\", \"\\\\.com\\\\.cn$|\\\\.com\\\\.hk$\", 63, \"rea\", \"https://s.thsi.cn/js/chameleon/time.1\", \"tat\", \"loaded\", \"interactive\", \"WY:ZYS\", \"E?`a\", \"addEventListener\", \"eScroll\", \"onmousewheel\", \"mousemove\", \"\\u255e\\u096e\\u096e\\u09e3\\u09a5\\u092e\\u099a\\u09d4\\u0990\", \"\\u2550\\u2535\\u2541\\u250c\\u2563\\u2516\\u2565\\u2500\\u2543\\u252f\\u2546\\u2525\\u254e\", \"getKeyDown\", \"H69<J\", \"v~g\u001c-\", \"\u0017\u0016\", \"ature\", \"callPhantom\", \"ActiveXObject\", \"Uint8Array\", \"WeakMap\", \"JX%<\u001c\", \"chrome\", \"@L:!\", \"20\", \"language\", \"localStorage\", \"^Win32\", String, 3, 4, \"=\u001aXAE\", \"hea\", \"&\", \"/\", \"\\\\R$\", '^R\"VP', \"s\", \"include\", \"_raw\", \"x.\", \"isRst\", \"SCRIPT\", \"ta\", \"base\", \"$?\", \"^_self$\", \"#\", \"unload\", \"ro\", \"\\u2550\", \"^(.*?):[ \\\\t]*([^\\\\r\\\\n]*)\\\\r?$\", \"g\", \"Init\", \"t6?x}\", \"\\u2574\\u0955\\u097b\\u09dc\\u0995\\u0911\\u09ab\\u09fe\\u09ba\\u09e2\\u098e\\u09fe\\u09f9\\u09f9\\u09f3\\u0a55\", \"=d' \"],\n        [\"<=>?@[\\\\]^\", \"e\", \"HE9\", \"tot\", \"\\u2503\", \"0\", \"dyS\", \"se\", \"getRoot\", \"NR\", \"nd\", 60, \"ng\", \"s\", \"get\", \"mit\", 13, 3, 0, \"\", '', \"\\u255f\\u253a\\u255b\\u253f\", \"getCookie\", \"=\", \"length\", \"V587\", 1, String, !0, \"___\", \"\\u2553\\u2536\\u255a\", \"uBot\", \"base_fileds\", 32, \"2\", \"1\", \"20\", 5, \"255\", 2, 8, 16, 10, \"203\", \"base64Encode\", \"base64Decode\", \"decode\", \"760\", \"\\u255b\\u0978\\u0954\\u09f6\\u09a4\\u0935\", 70, \"location\", \"href\", \"redirect_url\", \"efi\", Date, \"\\u2519\", \"^\\\\s*(?:https?:)?\\\\/{2,}([^\\\\/\\\\?\\\\#\\\\\\\\]+)\", \"\\u255e\", \"[@:]\", \"@\", 7, \"onload\", 'WY$PYS/FLV\"P[_7[_R', \"readyState\", \"onreadystatechange\", '\"\u001f^w', \"\\u2569\\u2535\\u2546\\u256c\\u2544\\u257b\\u2541\\u2569\\u2501\\u2575\\u2501\\u2571\\u2502\\u253d\\u2507\\u252e\\u2507\\u2538\\u2564\\u254b\\u2530\\u2502\\u252e\\u2553\\u257b\\u2520\\u257e\\u2522\\u250d\\u2551\\u256e\\u2532\\u2511\\u254d\\u2511\\u254c\\u2567\\u254e\", \"analysisRst\", \"strToBytes\", \"strhash\", \"random\", \"getHostFromUrl\", \"getOriginFromUrl\", 83, \"timeNow\", \"^(\\\\d+\\\\.)+\\\\d+$\", \"d\", \"v\", \"ted\", \"touchmove\", 85, \"F(K9i\", \"clientX\", \"clientY\", \"\\u257a\\u2515\\u256f\\u253c\", \"postMessage\", '', \"ActiveXObject\", \"Apple Computer, Inc.\", \"Q\", \"chr\", \"\\u2558\\u2535\\u2550\", \"BIDUBrowser\", RegExp, \"QQBrowser\", \"ro\", \"aef\", \"msDoNotTrack\", \"PDF|Acrobat\", \"canvas\", \"yE\", \"\\u255b\\u253a\\u2554\\u2533\\u2546\\u2527\\u2540\\u2525\\u2556\", \"^Android\", \"^Linux [ix]\\\\d+\", \"011\", \"13\", 15, \"sub\", \"addEventListener\", \"jsonp_ignore\", \"\\u2569\", !1, 'L\u0019\"', \"Sj\", \"T{_,\", \"q*\", \"i\", \"tagName\", \"et\", \"{'K\", \"Pp<\", \"#x'\", \"open\", \"rS\", \"\u001fKN3\", \"#\", \"protocol\", \"\\\\.\", \"DEDAOL_NOELEMAHC\"],\n        [83, \"ffer\", \"\\u2505\", \"20\", \"e\", \"ngsE\", Error, \"est\", \"\\u2552\\u095b\\u0956\\u09f0\\u09a3\\u0935\\u09c0\\u09e2\", \"1\", \"sr\", \"hexin-v\", \"\", RegExp, 9527, 0, \"**l>\u0017\", \"head\", \"Thu, 01 Ja\", \"00:00 GMT\", \"allow\", \"=\", \"; path=\", \"cookie\", \"Init\", 33, 1, \"setCookie\", !0, \"localS\", \"`{|}~]\", \"g\", '', \"frames\", \"___$&\", 56, \"\t\u0007\", \"\\b\u0007\", \"length\", \"10\", \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\", \"\\u2552\\u096f\\u0948\\u09fe\\u09a2\", 16, 2, 6, \"encode\", \"rea\", \"729\", \"*.\", \",\", \"\\u2506\\u092c\\u090b\\u09a0\\u09e1\\u096d\\u09df\\u0981\\u09c4\\u098c\", \"redirect_url\", \"\\u2506\\u092d\\u090a\\u09a3\", \"1111101000\", 3, 47, \"tat\", \"script\", \"readyState\", \"complete\", '', \"body\", \"onwheel\", \"mousewheel\", 37, \"rus\", \"\\u2554\\u0975\", \"chr\", \"ActiveXObject\", \"WeakMap\", \"aT1Kg\", \"i\", 24, \"\\u2554\\u253c\\u254e\\u2521\\u254c\\u2529\", \"\\u2547\\u0971\\u094f\\u09f6\\u09b9\\u0933\\u099d\", \"Shockwav\", \"hockwave\", \"$cdc_asdjflasutopfhvcZLmcfl_\", \"webgl2\", \"2>n|\", \"plugins\", \"platform\", \"^Win64\", \"^Linux armv|Android\", \"^iPhone\", \"^MacIntel\", !1, \"getPlatform\", \"6Y,\", 2333, \"100\", 12, \"14\", 10, 36, \"01\", \"60\", \"\\u2542\\u096d\\u095e\\u09f0\\u09a4\\u0938\", \"\u001bj\", 17, \"Request\", \"prototype\", \"`z\u001a}lc\u0006\", \"error\", \"s\", \"r\", \"target\", \"\\u255e\", \"A\", \"U\", \"193\", \"host\", \"$\"],\n        [\"se\", \"g@\u001ag?\", Array, \"*Y\", Number, \"^{.\", \"*}$\", \"und\", \"429\", \"496\", \"imeNow\", \"etti\", \"rg\", \"v\", \"hexin-v\", Error, \"L_%\\\\\u0016T8\", \".baidu.\", 1, \"\", Function, !0, \" \", '', 0, 2, \"#default#userData\", \"ydob\", \"^d\", 89, \"11111111\", 8, \"epytotorp\", 10, 16, \"\\u2506\\u2536\\u2506\\u2536\\u2506\", \"14\", 13, \"10\", \"Syd\", 44, \"Domain\", \"serverT\", '^\"', \"length\", RegExp, \"00\", \"tcejbo\", \"status_code\", \"n\", 66, \"\\u2506\\u2531\\u2504\\u2534\", \"htgnel\", Date, \"L%\", 67, \"5\", \"?)'\", '', \"[[?VS\", \"isT\", \"getMouseWhell\", \"}}\", \"TR\", \"ActiveXObject\", \"WE\", \"python\", \"Maxthon\", 97, \"chrome\", \"Ryp\", \"UBrowser\", 54, !1, \"ontouchstart\", \"\\u254d\\u0975\\u0917\\u09f2\\u09be\", \"iso-8859-1\", \"defaultCharset\", \"^iPad\", \"getBrowserIndex\", 256, \"1\", 5, \"17\", \"Init\", \"XMLHttp\", \"tar\", \"allow\", \"@\u001a*\u0016\", \"?\\\\\", \"?\", \"\\u2571\\u2503\\u256a\\u2546\\u2566\\u2556\\u2567\\u2547\\u2501\\u2564\\u2506\\u2526\\u2514\\u2524\\u2511\\u2521\\u2501\\u2531\\u2501\\u253b\\u250b\\u253b\\u2501\\u2531\\u2501\\u2521\\u2566\\u252b\\u257f\", \"den\", \"tia\", 94, \"ls\", \"\\u2554\\u2526\\u2543\", \"_str\", 37, \"append\", \"Child\", \"\\u255f\", \"\\u2569\\u0975\\u094e\\u09e5\\u09a0\\u092e\\u09d1\\u09ed\\u09ce\", \"srcElement\", \"parentNode\", \"\\u2543\\u2522\\u2545\\u250b\\u256a\\u2507\\u2562\", \"}*\", \"err\", \"or\", \"getAllResponseHeaders\", \"\\\\.?\", \"\\\\.\"]\n    );\n    return v\n}\n"
  },
  {
    "path": "akshare/datasets.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/12/30 15:30\nDesc: 导入文件工具，可以正确处理路径问题\n\"\"\"\n\nimport pathlib\nfrom importlib import resources\n\n\ndef get_ths_js(file: str = \"ths.js\") -> pathlib.Path:\n    \"\"\"\n    get path to data \"ths.js\" text file.\n    :return: 文件路径\n    :rtype: pathlib.Path\n    \"\"\"\n    with resources.path(\"akshare.data\", file) as f:\n        data_file_path = f\n        return data_file_path\n\n\ndef get_crypto_info_csv(file: str = \"crypto_info.zip\") -> pathlib.Path:\n    \"\"\"\n    get path to data \"ths.js\" text file.\n    :return: 文件路径\n    :rtype: pathlib.Path\n    \"\"\"\n    with resources.path(\"akshare.data\", file) as f:\n        data_file_path = f\n        return data_file_path\n\n\nif __name__ == \"__main__\":\n    get_ths_js_path = get_ths_js(file=\"ths.js\")\n    print(get_ths_js_path)\n\n    get_crypto_info_csv_path = get_crypto_info_csv(file=\"crypto_info.zip\")\n    print(get_crypto_info_csv_path)\n"
  },
  {
    "path": "akshare/economic/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/10/21 12:08\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/economic/cons.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/10/21 21:11\nDesc: 宏观经济配置文件\n\"\"\"\n\n# urls-china\nJS_CHINA_CPI_YEARLY_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_chinese_cpi_yoy_all.js?v={}&_={}\"\n)\nJS_CHINA_CPI_MONTHLY_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_chinese_cpi_mom_all.js?v={}&_={}\"\n)\nJS_CHINA_M2_YEARLY_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_chinese_m2_money_supply_yoy_all.js?v={}&_={}\"\n)\nJS_CHINA_PPI_YEARLY_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_chinese_ppi_yoy_all.js?v={}&_={}\"\n)\nJS_CHINA_PMI_YEARLY_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_chinese_manufacturing_pmi_all.js?v={}&_={}\"\n)\nJS_CHINA_GDP_YEARLY_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_chinese_gdp_yoy_all.js?v={}&_={}\"\n)\nJS_CHINA_CX_PMI_YEARLY_URL = \"https://cdn.jin10.com/dc/reports/dc_chinese_caixin_manufacturing_pmi_all.js?v={}&_={}\"\nJS_CHINA_CX_SERVICE_PMI_YEARLY_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_chinese_caixin_services_pmi_all.js?v={}&_={}\"\n)\nJS_CHINA_FX_RESERVES_YEARLY_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_chinese_fx_reserves_all.js?v={}&_={}\"\n)\nJS_CHINA_ENERGY_DAILY_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_qihuo_energy_report_all.js?v={}&_={}\"\n)\nJS_CHINA_NON_MAN_PMI_MONTHLY_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_chinese_non_manufacturing_pmi_all.js?v={}&_={}\"\n)\nJS_CHINA_RMB_DAILY_URL = \"https://cdn.jin10.com/dc/reports/dc_rmb_data_all.js?v={}&_={}\"\nJS_CHINA_MARKET_MARGIN_SZ_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_market_margin_sz_all.js?v={}&_={}\"\n)\nJS_CHINA_MARKET_MARGIN_SH_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_market_margin_sse_all.js?v={}&_={}\"\n)\nJS_CHINA_REPORT_URL = \"https://cdn.jin10.com/dc/reports/dc_sge_report_all.js?v={}&_={}\"\n\n# urls-usa\nJS_USA_INTEREST_RATE_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_usa_interest_rate_decision_all.js?v={}&_={}\"\n)\nJS_USA_NON_FARM_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_nonfarm_payrolls_all.js?v={}&_={}\"\n)\nJS_USA_UNEMPLOYMENT_RATE_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_usa_unemployment_rate_all.js??v={}&_={}\"\n)\nJS_USA_EIA_CRUDE_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_eia_crude_oil_all.js?v={}&_={}\"\n)\nJS_USA_INITIAL_JOBLESS_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_initial_jobless_all.js?v={}&_={}\"\n)\nJS_USA_CORE_PCE_PRICE_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_usa_core_pce_price_all.js?v={}&_={}\"\n)\nJS_USA_CPI_MONTHLY_URL = \"https://cdn.jin10.com/dc/reports/dc_usa_cpi_all.js?v={}&_={}\"\nJS_USA_LMCI_URL = \"https://cdn.jin10.com/dc/reports/dc_usa_lmci_all.js?v={}&_={}\"\nJS_USA_ADP_NONFARM_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_adp_nonfarm_employment_all.js?v={}&_={}\"\n)\nJS_USA_GDP_MONTHLY_URL = \"https://cdn.jin10.com/dc/reports/dc_usa_gdp_all.js?v={}&_={}\"\nJS_USA_EIA_CRUDE_PRODUCE_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_eia_crude_oil_produce_all.js?v={}&_={}\"\n)\n\n# urls-euro\nJS_EURO_RATE_DECISION_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_interest_rate_decision_all.js?v={}&_={}\"\n)\n\n# urls-constitute\nJS_CONS_GOLD_ETF_URL = \"https://cdn.jin10.com/dc/reports/dc_etf_gold_all.js?v={}&_={}\"\nJS_CONS_SLIVER_ETF_URL = (\n    \"https://cdn.jin10.com/dc/reports/dc_etf_sliver_all.js?v={}&_={}\"\n)\nJS_CONS_OPEC_URL = \"https://cdn.jin10.com/dc/reports/dc_opec_report_all.js??v={}&_={}\"\n\nusa_name_url_map = {\n    \"美联储决议报告\": \"//datacenter.jin10.com/reportType/dc_usa_interest_rate_decision\",\n    \"美国非农就业人数报告\": \"//datacenter.jin10.com/reportType/dc_nonfarm_payrolls\",\n    \"美国失业率报告\": \"//datacenter.jin10.com/reportType/dc_usa_unemployment_rate\",\n    \"美国CPI月率报告\": \"//datacenter.jin10.com/reportType/dc_usa_cpi\",\n    \"美国初请失业金人数报告\": \"//datacenter.jin10.com/reportType/dc_initial_jobless\",\n    \"美国核心PCE物价指数年率报告\": \"//datacenter.jin10.com/reportType/dc_usa_core_pce_price\",\n    \"美国EIA原油库存报告\": \"//datacenter.jin10.com/reportType/dc_eia_crude_oil\",\n    \"美联储劳动力市场状况指数报告\": \"//datacenter.jin10.com/reportType/dc_usa_lmci\",\n    \"美国ADP就业人数报告\": \"//datacenter.jin10.com/reportType/dc_adp_nonfarm_employment\",\n    \"美国国内生产总值(GDP)报告\": \"//datacenter.jin10.com/reportType/dc_usa_gdp\",\n    \"美国原油产量报告\": \"//datacenter.jin10.com/reportType/dc_eia_crude_oil_produce\",\n    \"美国零售销售月率报告\": \"//datacenter.jin10.com/reportType/dc_usa_retail_sales\",\n    \"美国商品期货交易委员会CFTC外汇类非商业持仓报告\": \"//datacenter.jin10.com/reportType/dc_cftc_nc_report\",\n    \"美国NFIB小型企业信心指数报告\": \"//datacenter.jin10.com/reportType/dc_usa_nfib_small_business\",\n    \"贝克休斯钻井报告\": \"//datacenter.jin10.com/reportType/dc_rig_count_summary\",\n    \"美国谘商会消费者信心指数报告\": \"//datacenter.jin10.com/reportType/dc_usa_cb_consumer_confidence\",\n    \"美国FHFA房价指数月率报告\": \"//datacenter.jin10.com/reportType/dc_usa_house_price_index\",\n    \"美国个人支出月率报告\": \"//datacenter.jin10.com/reportType/dc_usa_personal_spending\",\n    \"美国生产者物价指数(PPI)报告\": \"//datacenter.jin10.com/reportType/dc_usa_ppi\",\n    \"美国成屋销售总数年化报告\": \"//datacenter.jin10.com/reportType/dc_usa_exist_home_sales\",\n    \"美国成屋签约销售指数月率报告\": \"//datacenter.jin10.com/reportType/dc_usa_pending_home_sales\",\n    \"美国S&P/CS20座大城市房价指数年率报告\": \"//datacenter.jin10.com/reportType/dc_usa_spcs20\",\n    \"美国进口物价指数报告\": \"//datacenter.jin10.com/reportType/dc_usa_import_price\",\n    \"美国营建许可总数报告\": \"//datacenter.jin10.com/reportType/dc_usa_building_permits\",\n    \"美国商品期货交易委员会CFTC商品类非商业持仓报告\": \"//datacenter.jin10.com/reportType/dc_cftc_c_report\",\n    \"美国挑战者企业裁员人数报告\": \"//datacenter.jin10.com/reportType/dc_usa_job_cuts\",\n    \"美国实际个人消费支出季率初值报告\": \"//datacenter.jin10.com/reportType/dc_usa_real_consumer_spending\",\n    \"美国贸易帐报告\": \"//datacenter.jin10.com/reportType/dc_usa_trade_balance\",\n    \"美国经常帐报告\": \"//datacenter.jin10.com/reportType/dc_usa_current_account\",\n    \"美国API原油库存报告\": \"//datacenter.jin10.com/reportType/dc_usa_api_crude_stock\",\n    \"美国工业产出月率报告\": \"//datacenter.jin10.com/reportType/dc_usa_industrial_production\",\n    \"美国耐用品订单月率报告\": \"//datacenter.jin10.com/reportType/dc_usa_durable_goods_orders\",\n    \"美国工厂订单月率报告\": \"//datacenter.jin10.com/reportType/dc_usa_factory_orders\",\n    \"Markit服务业PMI终值\": \"//datacenter.jin10.com/reportType/dc_usa_services_pmi\",\n    \"商业库存月率\": \"//datacenter.jin10.com/reportType/dc_usa_business_inventories\",\n    \"美国ISM非制造业PMI\": \"//datacenter.jin10.com/reportType/dc_usa_ism_non_pmi\",\n    \"NAHB房产市场指数\": \"//datacenter.jin10.com/reportType/dc_usa_nahb_house_market_index\",\n    \"新屋开工总数年化\": \"//datacenter.jin10.com/reportType/dc_usa_house_starts\",\n    \"美国新屋销售总数年化\": \"//datacenter.jin10.com/reportType/dc_usa_new_home_sales\",\n    \"美国Markit制造业PMI初值报告\": \"//datacenter.jin10.com/reportType/dc_usa_pmi\",\n    \"美国ISM制造业PMI报告\": \"//datacenter.jin10.com/reportType/dc_usa_ism_pmi\",\n    \"美国密歇根大学消费者信心指数初值报告\": \"//datacenter.jin10.com/reportType/dc_usa_michigan_consumer_sentiment\",\n    \"美国出口价格指数报告\": \"//datacenter.jin10.com/reportType/dc_usa_export_price\",\n    \"美国核心生产者物价指数(PPI)报告\": \"//datacenter.jin10.com/reportType/dc_usa_core_ppi\",\n    \"美国核心CPI月率报告\": \"//datacenter.jin10.com/reportType/dc_usa_core_cpi\",\n    \"美国EIA俄克拉荷马州库欣原油库存报告\": \"//datacenter.jin10.com/reportType/dc_eia_cushing_oil\",\n    \"美国EIA精炼油库存报告\": \"//datacenter.jin10.com/reportType/dc_eia_distillates_stocks\",\n    \"美国EIA天然气库存报告\": \"//datacenter.jin10.com/reportType/dc_eia_natural_gas\",\n    \"美国EIA汽油库存报告\": \"//datacenter.jin10.com/reportType/dc_eia_gasoline\",\n}\nchina_name_url_map = {\n    \"郑州商品交易所期货每日行情\": \"//datacenter.jin10.com/reportType/dc_czce_futures_data\",\n    \"中国CPI年率报告\": \"//datacenter.jin10.com/reportType/dc_chinese_cpi_yoy\",\n    \"中国PPI年率报告\": \"//datacenter.jin10.com/reportType/dc_chinese_ppi_yoy\",\n    \"中国以美元计算出口年率报告\": \"//datacenter.jin10.com/reportType/dc_chinese_exports_yoy\",\n    \"中国以美元计算进口年率报告\": \"//datacenter.jin10.com/reportType/dc_chinese_imports_yoy\",\n    \"中国以美元计算贸易帐报告\": \"//datacenter.jin10.com/reportType/dc_chinese_trade_balance\",\n    \"中国规模以上工业增加值年率报告\": \"//datacenter.jin10.com/reportType/dc_chinese_industrial_production_yoy\",\n    \"中国官方制造业PMI报告\": \"//datacenter.jin10.com/reportType/dc_chinese_manufacturing_pmi\",\n    \"中国财新制造业PMI终值报告\": \"//datacenter.jin10.com/reportType/dc_chinese_caixin_manufacturing_pmi\",\n    \"中国财新服务业PMI报告\": \"//datacenter.jin10.com/reportType/dc_chinese_caixin_services_pmi\",\n    \"中国外汇储备报告\": \"//datacenter.jin10.com/reportType/dc_chinese_fx_reserves\",\n    \"中国M2货币供应年率报告\": \"//datacenter.jin10.com/reportType/dc_chinese_m2_money_supply_yoy\",\n    \"中国GDP年率报告\": \"//datacenter.jin10.com/reportType/dc_chinese_gdp_yoy\",\n    \"人民币汇率中间价报告\": \"//datacenter.jin10.com/reportType/dc_rmb_data\",\n    \"在岸人民币成交量报告\": \"//datacenter.jin10.com/reportType/dc_dollar_rmb_report\",\n    \"上海期货交易所期货合约行情\": \"//datacenter.jin10.com/reportType/dc_shfe_futures_data\",\n    \"中国CPI月率报告\": \"//datacenter.jin10.com/reportType/dc_chinese_cpi_mom\",\n    \"大连商品交易所期货每日行情\": \"//datacenter.jin10.com/reportType/dc_dce_futures_data\",\n    \"中国金融期货交易所期货每日行情\": \"//datacenter.jin10.com/reportType/dc_cffex_futures_data\",\n    \"同业拆借报告\": \"//datacenter.jin10.com/reportType/dc_shibor\",\n    \"香港同业拆借报告\": \"//datacenter.jin10.com/reportType/dc_hk_market_info\",\n    \"深圳融资融券报告\": \"//datacenter.jin10.com/reportType/dc_market_margin_sz\",\n    \"上海融资融券报告\": \"//datacenter.jin10.com/reportType/dc_market_margin_sse\",\n    \"上海黄金交易所报告\": \"//datacenter.jin10.com/reportType/dc_sge_report\",\n    \"上海期货交易所仓单日报\": \"//datacenter.jin10.com/reportType/dc_shfe_daily_stock\",\n    \"大连商品交易所仓单日报\": \"//datacenter.jin10.com/reportType/dc_dce_daily_stock\",\n    \"郑州商品交易所仓单日报\": \"//datacenter.jin10.com/reportType/dc_czce_daily_stock\",\n    \"上海期货交易所指定交割仓库库存周报\": \"//datacenter.jin10.com/reportType/dc_shfe_weekly_stock\",\n    \"CCI指数5500大卡动力煤价格报告\": \"//datacenter.jin10.com/reportType/dc_cci_report\",\n    \"沿海六大电厂库存动态报告\": \"//datacenter.jin10.com/reportType/dc_qihuo_energy_report\",\n    \"国内期货市场实施热度报告\": \"//datacenter.jin10.com/reportType/dc_futures_market_realtime\",\n    \"中国官方非制造业PMI报告\": \"//datacenter.jin10.com/reportType/dc_chinese_non_manufacturing_pmi\",\n}\neuro_name_url_map = {\n    \"欧元区未季调贸易帐报告\": \"//datacenter.jin10.com/reportType/dc_eurozone_trade_balance_mom\",\n    \"欧元区季度GDP年率报告\": \"//datacenter.jin10.com/reportType/dc_eurozone_gdp_yoy\",\n    \"欧元区CPI年率报告\": \"//datacenter.jin10.com/reportType/dc_eurozone_cpi_yoy\",\n    \"欧元区PPI月率报告\": \"//datacenter.jin10.com/reportType/dc_eurozone_ppi_mom\",\n    \"欧元区零售销售月率报告\": \"//datacenter.jin10.com/reportType/dc_eurozone_retail_sales_mom\",\n    \"欧元区季调后就业人数季率报告\": \"//datacenter.jin10.com/reportType/dc_eurozone_employment_change_qoq\",\n    \"欧元区失业率报告\": \"//datacenter.jin10.com/reportType/dc_eurozone_unemployment_rate_mom\",\n    \"欧元区CPI月率报告\": \"//datacenter.jin10.com/reportType/dc_eurozone_cpi_mom\",\n    \"欧元区经常帐报告\": \"//datacenter.jin10.com/reportType/dc_eurozone_current_account_mom\",\n    \"欧元区工业产出月率报告\": \"//datacenter.jin10.com/reportType/dc_eurozone_industrial_production_mom\",\n    \"欧元区制造业PMI初值报告\": \"//datacenter.jin10.com/reportType/dc_eurozone_manufacturing_pmi\",\n    \"欧元区服务业PMI终值报告\": \"//datacenter.jin10.com/reportType/dc_eurozone_services_pmi\",\n    \"欧元区ZEW经济景气指数报告\": \"//datacenter.jin10.com/reportType/dc_eurozone_zew_economic_sentiment\",\n    \"欧元区Sentix投资者信心指数报告\": \"//datacenter.jin10.com/reportType/dc_eurozone_sentix_investor_confidence\",\n}\nworld_central_bank_map = {\n    \"美联储决议报告\": \"//datacenter.jin10.com/reportType/dc_usa_interest_rate_decision\",\n    \"欧洲央行决议报告\": \"//datacenter.jin10.com/reportType/dc_interest_rate_decision\",\n    \"新西兰联储决议报告\": \"//datacenter.jin10.com/reportType/dc_newzealand_interest_rate_decision\",\n    \"中国央行决议报告\": \"//datacenter.jin10.com/reportType/dc_china_interest_rate_decision\",\n    \"瑞士央行决议报告\": \"//datacenter.jin10.com/reportType/dc_switzerland_interest_rate_decision\",\n    \"英国央行决议报告\": \"//datacenter.jin10.com/reportType/dc_english_interest_rate_decision\",\n    \"澳洲联储决议报告\": \"//datacenter.jin10.com/reportType/dc_australia_interest_rate_decision\",\n    \"日本央行决议报告\": \"//datacenter.jin10.com/reportType/dc_japan_interest_rate_decision\",\n    \"印度央行决议报告\": \"//datacenter.jin10.com/reportType/dc_india_interest_rate_decision\",\n    \"俄罗斯央行决议报告\": \"//datacenter.jin10.com/reportType/dc_russia_interest_rate_decision\",\n    \"巴西央行决议报告\": \"//datacenter.jin10.com/reportType/dc_brazil_interest_rate_decision\",\n}\nconstitute_report_map = {\n    \"全球最大黄金ETF—SPDR Gold Trust持仓报告\": \"//datacenter.jin10.com/reportType/dc_etf_gold\",\n    \"全球最大白银ETF--iShares Silver Trust持仓报告\": \"//datacenter.jin10.com/reportType/dc_etf_sliver\",\n    \"芝加哥商业交易所（CME）能源类商品成交量报告\": \"//datacenter.jin10.com/reportType/dc_cme_energy_report\",\n    \"美国商品期货交易委员会CFTC外汇类非商业持仓报告\": \"//datacenter.jin10.com/reportType/dc_cftc_nc_report\",\n    \"美国商品期货交易委员会CFTC商品类非商业持仓报告\": \"//datacenter.jin10.com/reportType/dc_cftc_c_report\",\n    \"芝加哥商业交易所（CME）金属类商品成交量报告\": \"//datacenter.jin10.com/reportType/dc_cme_report\",\n    \"芝加哥商业交易所（CME）外汇类商品成交量报告\": \"//datacenter.jin10.com/reportType/dc_cme_fx_report\",\n    \"伦敦金属交易所（LME）库存报告\": \"//datacenter.jin10.com/reportType/dc_lme_report\",\n    \"伦敦金属交易所（LME）持仓报告\": \"//datacenter.jin10.com/reportType/dc_lme_traders_report\",\n    \"美国商品期货交易委员会CFTC商品类商业持仓报告\": \"//datacenter.jin10.com/reportType/dc_cftc_merchant_goods\",\n    \"美国商品期货交易委员会CFTC外汇类商业持仓报告\": \"//datacenter.jin10.com/reportType/dc_cftc_merchant_currency\",\n}\nother_map = {\n    \"投机情绪报告\": \"//datacenter.jin10.com/reportType/dc_ssi_trends\",\n    \"外汇实时波动监控\": \"//datacenter.jin10.com/reportType/dc_myFxBook_heat_map\",\n    \"外汇相关性报告\": \"//datacenter.jin10.com/reportType/dc_myFxBook_correlation\",\n    \"加密货币实时行情\": \"//datacenter.jin10.com/reportType/dc_bitcoin_current\",\n}\nmain_map = {\n    \"全球最大黄金ETF—SPDR Gold Trust持仓报告\": \"//datacenter.jin10.com/reportType/dc_etf_gold\",\n    \"全球最大白银ETF--iShares Silver Trust持仓报告\": \"//datacenter.jin10.com/reportType/dc_etf_sliver\",\n    \"美国非农就业人数报告\": \"//datacenter.jin10.com/reportType/dc_nonfarm_payrolls\",\n    \"投机情绪报告\": \"//datacenter.jin10.com/reportType/dc_ssi_trends\",\n    \"数据达人 — 复合报告\": \"//datacenter.jin10.com/reportType/dc_complex_report?complexType=1\",\n    \"投行订单\": \"//datacenter.jin10.com/banks_orders\",\n    \"行情报价\": \"//datacenter.jin10.com/price_wall\",\n    \"美国EIA原油库存报告\": \"//datacenter.jin10.com/reportType/dc_eia_crude_oil\",\n    \"欧佩克报告\": \"//datacenter.jin10.com/reportType/dc_opec_report\",\n}\n"
  },
  {
    "path": "akshare/economic/macro_australia.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/1/17 15:30\nDesc: 东方财富-经济数据-澳大利亚\nhttps://data.eastmoney.com/cjsj/foreign_5_0.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\n# 零售销售月率\ndef macro_australia_retail_rate_monthly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-澳大利亚-零售销售月率\n    https://data.eastmoney.com/cjsj/foreign_5_0.html\n    :return: 零售销售月率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_AUSTRALIA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00152903\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"], errors=\"coerce\").dt.date\n    temp_df.sort_values(by=\"发布日期\", ignore_index=True, inplace=True)\n    return temp_df\n\n\n# 贸易帐\ndef macro_australia_trade() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-澳大利亚-贸易帐\n    https://data.eastmoney.com/cjsj/foreign_5_1.html\n    :return: 贸易帐\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_AUSTRALIA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00152793\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"], errors=\"coerce\").dt.date\n    temp_df.sort_values(by=\"发布日期\", ignore_index=True, inplace=True)\n    return temp_df\n\n\n# 失业率\ndef macro_australia_unemployment_rate() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-澳大利亚-失业率\n    https://data.eastmoney.com/cjsj/foreign_5_2.html\n    :return: 失业率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_AUSTRALIA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00101141\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"], errors=\"coerce\").dt.date\n    temp_df.sort_values(by=\"发布日期\", ignore_index=True, inplace=True)\n    return temp_df\n\n\n# 生产者物价指数季率\ndef macro_australia_ppi_quarterly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-澳大利亚-生产者物价指数季率\n    https://data.eastmoney.com/cjsj/foreign_5_3.html\n    :return: 生产者物价指数季率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_AUSTRALIA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00152722\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"], errors=\"coerce\").dt.date\n    temp_df.sort_values(by=\"发布日期\", ignore_index=True, inplace=True)\n    return temp_df\n\n\n# 消费者物价指数季率\ndef macro_australia_cpi_quarterly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-澳大利亚-消费者物价指数季率\n    https://data.eastmoney.com/cjsj/foreign_5_4.html\n    :return: 消费者物价指数季率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_AUSTRALIA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00101104\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"], errors=\"coerce\").dt.date\n    temp_df.sort_values(by=\"发布日期\", ignore_index=True, inplace=True)\n    return temp_df\n\n\n# 消费者物价指数年率\ndef macro_australia_cpi_yearly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-澳大利亚-消费者物价指数年率\n    https://data.eastmoney.com/cjsj/foreign_5_5.html\n    :return: 消费者物价指数年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_AUSTRALIA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00101093\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"], errors=\"coerce\").dt.date\n    temp_df.sort_values(by=\"发布日期\", ignore_index=True, inplace=True)\n    return temp_df\n\n\n# 央行公布利率决议\ndef macro_australia_bank_rate() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-澳大利亚-央行公布利率决议\n    https://data.eastmoney.com/cjsj/foreign_5_6.html\n    :return: 央行公布利率决议\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_AUSTRALIA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00342255\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"], errors=\"coerce\").dt.date\n    temp_df.sort_values(by=\"发布日期\", ignore_index=True, inplace=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    macro_australia_retail_rate_monthly_df = macro_australia_retail_rate_monthly()\n    print(macro_australia_retail_rate_monthly_df)\n\n    macro_australia_trade_df = macro_australia_trade()\n    print(macro_australia_trade_df)\n\n    macro_australia_unemployment_rate_df = macro_australia_unemployment_rate()\n    print(macro_australia_unemployment_rate_df)\n\n    macro_australia_ppi_quarterly_df = macro_australia_ppi_quarterly()\n    print(macro_australia_ppi_quarterly_df)\n\n    macro_australia_cpi_quarterly_df = macro_australia_cpi_quarterly()\n    print(macro_australia_cpi_quarterly_df)\n\n    macro_australia_cpi_yearly_df = macro_australia_cpi_yearly()\n    print(macro_australia_cpi_yearly_df)\n\n    macro_australia_bank_rate_df = macro_australia_bank_rate()\n    print(macro_australia_bank_rate_df)\n"
  },
  {
    "path": "akshare/economic/macro_bank.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/11/5 17:11\nDesc: 金十数据中心-经济指标-央行利率-主要央行利率\nhttps://datacenter.jin10.com/economic\n输出数据格式为 float64\n美联储利率决议报告\n欧洲央行决议报告\n新西兰联储决议报告\n中国央行决议报告\n瑞士央行决议报告\n英国央行决议报告\n澳洲联储决议报告\n日本央行决议报告\n俄罗斯央行决议报告\n印度央行决议报告\n巴西央行决议报告\n\"\"\"\n\nimport datetime\nimport time\n\nimport pandas as pd\nimport requests\n\n\ndef __get_interest_rate_data(attr_id: str, name: str = \"利率\") -> pd.DataFrame:\n    \"\"\"\n    利率决议报告公共函数\n    https://datacenter.jin10.com/reportType/dc_usa_interest_rate_decision\n    :param attr_id: 内置属性\n    :type attr_id: str\n    :param name: 利率报告名称\n    :type name: str\n    :return: 利率决议报告数据\n    :rtype: pandas.Series\n    \"\"\"\n    t = time.time()\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/120.0.0.0 Safari/537.36\",\n        \"Origin\": \"https://datacenter.jin10.com\",\n        \"Referer\": \"https://datacenter.jin10.com/\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-version\": \"1.0.0\",\n    }\n    base_url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": attr_id,\n        \"_\": str(int(round(t * 1000))),\n    }\n    interest_rate_data = []\n    try:\n        while True:\n            response = requests.get(\n                url=base_url, params=params, headers=headers, timeout=10\n            )\n            data = response.json()\n            if not data.get(\"data\", {}).get(\"values\"):\n                break\n            interest_rate_data.extend(data[\"data\"][\"values\"])\n\n            # Update max_date for pagination\n            last_date = data[\"data\"][\"values\"][-1][0]\n            next_date = (\n                datetime.datetime.strptime(last_date, \"%Y-%m-%d\").date()\n                - datetime.timedelta(days=1)\n            ).isoformat()\n            params[\"max_date\"] = next_date\n\n    except requests.exceptions.RequestException as e:\n        print(f\"Error fetching data: {e}\")\n        return pd.DataFrame()\n\n    # Convert to DataFrame\n    big_df = pd.DataFrame(interest_rate_data)\n\n    if big_df.empty:\n        return pd.DataFrame()\n\n    # Process DataFrame\n    big_df[\"商品\"] = name\n    big_df.columns = [\"日期\", \"今值\", \"预测值\", \"前值\", \"商品\"]\n    big_df = big_df[[\"商品\", \"日期\", \"今值\", \"预测值\", \"前值\"]]\n\n    # Convert data types\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    numeric_columns = [\"今值\", \"预测值\", \"前值\"]\n    for col in numeric_columns:\n        big_df[col] = pd.to_numeric(big_df[col], errors=\"coerce\")\n\n    return big_df.sort_values(\"日期\").reset_index(drop=True)\n\n\n# 金十数据中心-经济指标-央行利率-主要央行利率-美联储利率决议报告\ndef macro_bank_usa_interest_rate() -> pd.DataFrame:\n    \"\"\"\n    美联储利率决议报告, 数据区间从 19820927-至今\n    https://datacenter.jin10.com/reportType/dc_usa_interest_rate_decision\n    :return: 美联储利率决议报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    return __get_interest_rate_data(attr_id=\"24\", name=\"美联储利率决议报告\")\n\n\n# 金十数据中心-经济指标-央行利率-主要央行利率-欧洲央行决议报告\ndef macro_bank_euro_interest_rate() -> pd.DataFrame:\n    \"\"\"\n    欧洲央行决议报告, 数据区间从 19990101-至今\n    https://datacenter.jin10.com/reportType/dc_interest_rate_decision\n    https://cdn.jin10.com/dc/reports/dc_interest_rate_decision_all.js?v=1578581663\n    :return: 欧洲央行决议报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    return __get_interest_rate_data(attr_id=\"21\", name=\"欧洲央行决议报告\")\n\n\n# 金十数据中心-经济指标-央行利率-主要央行利率-新西兰联储决议报告\ndef macro_bank_newzealand_interest_rate() -> pd.DataFrame:\n    \"\"\"\n    新西兰联储决议报告, 数据区间从 19990401-至今\n    https://datacenter.jin10.com/reportType/dc_newzealand_interest_rate_decision\n    https://cdn.jin10.com/dc/reports/dc_newzealand_interest_rate_decision_all.js?v=1578582075\n    :return: 新西兰联储决议报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    return __get_interest_rate_data(attr_id=\"23\", name=\"新西兰利率决议报告\")\n\n\n# 金十数据中心-经济指标-央行利率-主要央行利率-中国央行决议报告\ndef macro_bank_china_interest_rate() -> pd.DataFrame:\n    \"\"\"\n    中国央行决议报告, 数据区间从 19990105-至今\n    https://datacenter.jin10.com/reportType/dc_newzealand_interest_rate_decision\n    https://cdn.jin10.com/dc/reports/dc_newzealand_interest_rate_decision_all.js?v=1578582075\n    :return: 新西兰联储决议报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    return __get_interest_rate_data(attr_id=\"91\", name=\"中国央行决议报告\")\n\n\n# 金十数据中心-经济指标-央行利率-主要央行利率-瑞士央行决议报告\ndef macro_bank_switzerland_interest_rate() -> pd.DataFrame:\n    \"\"\"\n    瑞士央行利率决议报告, 数据区间从 20080313-至今\n    https://datacenter.jin10.com/reportType/dc_switzerland_interest_rate_decision\n    https://cdn.jin10.com/dc/reports/dc_switzerland_interest_rate_decision_all.js?v=1578582240\n    :return: 瑞士央行利率决议报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    return __get_interest_rate_data(attr_id=\"25\", name=\"瑞士央行决议报告\")\n\n\n# 金十数据中心-经济指标-央行利率-主要央行利率-英国央行决议报告\ndef macro_bank_english_interest_rate() -> pd.DataFrame:\n    \"\"\"\n    英国央行决议报告, 数据区间从 19700101-至今\n    https://datacenter.jin10.com/reportType/dc_english_interest_rate_decision\n    https://cdn.jin10.com/dc/reports/dc_english_interest_rate_decision_all.js?v=1578582331\n    :return: 英国央行决议报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    return __get_interest_rate_data(attr_id=\"26\", name=\"英国央行决议报告\")\n\n\n# 金十数据中心-经济指标-央行利率-主要央行利率-澳洲联储决议报告\ndef macro_bank_australia_interest_rate() -> pd.DataFrame:\n    \"\"\"\n    澳洲联储决议报告, 数据区间从 19800201-至今\n    https://datacenter.jin10.com/reportType/dc_australia_interest_rate_decision\n    https://cdn.jin10.com/dc/reports/dc_australia_interest_rate_decision_all.js?v=1578582414\n    :return: 澳洲联储决议报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    return __get_interest_rate_data(attr_id=\"27\", name=\"澳洲联储决议报告\")\n\n\n# 金十数据中心-经济指标-央行利率-主要央行利率-日本央行决议报告\ndef macro_bank_japan_interest_rate() -> pd.DataFrame:\n    \"\"\"\n    日本利率决议报告, 数据区间从 20080214-至今\n    https://datacenter.jin10.com/reportType/dc_japan_interest_rate_decision\n    https://cdn.jin10.com/dc/reports/dc_japan_interest_rate_decision_all.js?v=1578582485\n    :return: 日本利率决议报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    return __get_interest_rate_data(attr_id=\"22\", name=\"日本央行决议报告\")\n\n\n# 金十数据中心-经济指标-央行利率-主要央行利率-俄罗斯央行决议报告\ndef macro_bank_russia_interest_rate() -> pd.DataFrame:\n    \"\"\"\n    俄罗斯利率决议报告, 数据区间从 20030601-至今\n    https://datacenter.jin10.com/reportType/dc_russia_interest_rate_decision\n    https://cdn.jin10.com/dc/reports/dc_russia_interest_rate_decision_all.js?v=1578582572\n    :return: 俄罗斯利率决议报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    return __get_interest_rate_data(attr_id=\"64\", name=\"俄罗斯央行决议报告\")\n\n\n# 金十数据中心-经济指标-央行利率-主要央行利率-印度央行决议报告\ndef macro_bank_india_interest_rate() -> pd.DataFrame:\n    \"\"\"\n    印度利率决议报告, 数据区间从 20000801-至今\n    https://datacenter.jin10.com/reportType/dc_india_interest_rate_decision\n    https://cdn.jin10.com/dc/reports/dc_india_interest_rate_decision_all.js?v=1578582645\n    :return: 印度利率决议报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    return __get_interest_rate_data(attr_id=\"68\", name=\"印度央行决议报告\")\n\n\n# 金十数据中心-经济指标-央行利率-主要央行利率-巴西央行决议报告\ndef macro_bank_brazil_interest_rate() -> pd.DataFrame:\n    \"\"\"\n    巴西利率决议报告, 数据区间从 20080201-至今\n    https://datacenter.jin10.com/reportType/dc_brazil_interest_rate_decision\n    https://cdn.jin10.com/dc/reports/dc_brazil_interest_rate_decision_all.js?v=1578582718\n    :return: 巴西利率决议报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    return __get_interest_rate_data(attr_id=\"55\", name=\"巴西央行决议报告\")\n\n\nif __name__ == \"__main__\":\n    # 金十数据中心-经济指标-央行利率-主要央行利率-美联储利率决议报告\n    macro_bank_usa_interest_rate_df = macro_bank_usa_interest_rate()\n    print(macro_bank_usa_interest_rate_df)\n\n    # 金十数据中心-经济指标-央行利率-主要央行利率-欧洲央行决议报告\n    macro_bank_euro_interest_rate_df = macro_bank_euro_interest_rate()\n    print(macro_bank_euro_interest_rate_df)\n\n    # 金十数据中心-经济指标-央行利率-主要央行利率-新西兰联储决议报告\n    macro_bank_newzealand_interest_rate_df = macro_bank_newzealand_interest_rate()\n    print(macro_bank_newzealand_interest_rate_df)\n\n    # 金十数据中心-经济指标-央行利率-主要央行利率-中国央行决议报告\n    macro_bank_china_interest_rate_df = macro_bank_china_interest_rate()\n    print(macro_bank_china_interest_rate_df)\n\n    # 金十数据中心-经济指标-央行利率-主要央行利率-瑞士央行决议报告\n    macro_bank_switzerland_interest_rate_df = macro_bank_switzerland_interest_rate()\n    print(macro_bank_switzerland_interest_rate_df)\n\n    # 金十数据中心-经济指标-央行利率-主要央行利率-英国央行决议报告\n    macro_bank_english_interest_rate_df = macro_bank_english_interest_rate()\n    print(macro_bank_english_interest_rate_df)\n\n    # 金十数据中心-经济指标-央行利率-主要央行利率-澳洲联储决议报告\n    macro_bank_australia_interest_rate_df = macro_bank_australia_interest_rate()\n    print(macro_bank_australia_interest_rate_df)\n\n    # 金十数据中心-经济指标-央行利率-主要央行利率-日本央行决议报告\n    macro_bank_japan_interest_rate_df = macro_bank_japan_interest_rate()\n    print(macro_bank_japan_interest_rate_df)\n\n    # 金十数据中心-经济指标-央行利率-主要央行利率-俄罗斯央行决议报告\n    macro_bank_russia_interest_rate_df = macro_bank_russia_interest_rate()\n    print(macro_bank_russia_interest_rate_df)\n\n    # 金十数据中心-经济指标-央行利率-主要央行利率-印度央行决议报告\n    macro_bank_india_interest_rate_df = macro_bank_india_interest_rate()\n    print(macro_bank_india_interest_rate_df)\n\n    # 金十数据中心-经济指标-央行利率-主要央行利率-巴西央行决议报告\n    macro_bank_brazil_interest_rate_df = macro_bank_brazil_interest_rate()\n    print(macro_bank_brazil_interest_rate_df)\n"
  },
  {
    "path": "akshare/economic/macro_canada.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/11/27 20:30\nDesc: 东方财富-经济数据-加拿大\nhttps://data.eastmoney.com/cjsj/foreign_5_0.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\n# 新屋开工\ndef macro_canada_new_house_rate() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-加拿大-新屋开工\n    https://data.eastmoney.com/cjsj/foreign_7_0.html\n    :return: 新屋开工\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_CA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00342247\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"]).dt.date\n    return temp_df\n\n\n# 失业率\ndef macro_canada_unemployment_rate() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-加拿大-失业率\n    https://data.eastmoney.com/cjsj/foreign_7_1.html\n    :return: 失业率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_CA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00157746\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"]).dt.date\n    return temp_df\n\n\n# 贸易帐\ndef macro_canada_trade() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-加拿大-贸易帐\n    https://data.eastmoney.com/cjsj/foreign_7_2.html\n    :return: 贸易帐\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_CA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00102022\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"]).dt.date\n    return temp_df\n\n\n# 零售销售月率\ndef macro_canada_retail_rate_monthly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-加拿大-零售销售月率\n    https://data.eastmoney.com/cjsj/foreign_7_3.html\n    :return: 零售销售月率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_CA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG01337094\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"]).dt.date\n    return temp_df\n\n\n# 央行公布利率决议\ndef macro_canada_bank_rate() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-加拿大-央行公布利率决议\n    https://data.eastmoney.com/cjsj/foreign_7_4.html\n    :return: 央行公布利率决议\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_CA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00342248\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"]).dt.date\n    return temp_df\n\n\n# 核心消费者物价指数年率\ndef macro_canada_core_cpi_yearly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-加拿大-核心消费者物价指数年率\n    https://data.eastmoney.com/cjsj/foreign_7_5.html\n    :return: 核心消费者物价指数年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_CA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00102030\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"]).dt.date\n    return temp_df\n\n\n# 核心消费者物价指数月率\ndef macro_canada_core_cpi_monthly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-加拿大-核心消费者物价指数月率\n    https://data.eastmoney.com/cjsj/foreign_7_6.html\n    :return: 核心消费者物价指数月率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_CA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00102044\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"]).dt.date\n    return temp_df\n\n\n# 消费者物价指数年率\ndef macro_canada_cpi_yearly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-加拿大-消费者物价指数年率\n    https://data.eastmoney.com/cjsj/foreign_7_7.html\n    :return: 消费者物价指数年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_CA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00102029\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"]).dt.date\n    return temp_df\n\n\n# 消费者物价指数月率\ndef macro_canada_cpi_monthly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-加拿大-消费者物价指数月率\n    https://data.eastmoney.com/cjsj/foreign_7_8.html\n    :return: 消费者物价指数月率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_CA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00158719\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"]).dt.date\n    return temp_df\n\n\n# GDP 月率\ndef macro_canada_gdp_monthly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-加拿大-GDP 月率\n    https://data.eastmoney.com/cjsj/foreign_7_9.html\n    :return: GDP 月率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_CA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00159259\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"]).dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    macro_canada_new_house_rate_df = macro_canada_new_house_rate()\n    print(macro_canada_new_house_rate_df)\n\n    macro_canada_unemployment_rate_df = macro_canada_unemployment_rate()\n    print(macro_canada_unemployment_rate_df)\n\n    macro_canada_trade_df = macro_canada_trade()\n    print(macro_canada_trade_df)\n\n    macro_canada_retail_rate_monthly_df = macro_canada_retail_rate_monthly()\n    print(macro_canada_retail_rate_monthly_df)\n\n    macro_canada_bank_rate_df = macro_canada_bank_rate()\n    print(macro_canada_bank_rate_df)\n\n    macro_canada_core_cpi_yearly_df = macro_canada_core_cpi_yearly()\n    print(macro_canada_core_cpi_yearly_df)\n\n    macro_canada_core_cpi_monthly_df = macro_canada_core_cpi_monthly()\n    print(macro_canada_core_cpi_monthly_df)\n\n    macro_canada_cpi_yearly_df = macro_canada_cpi_yearly()\n    print(macro_canada_cpi_yearly_df)\n\n    macro_canada_cpi_monthly_df = macro_canada_cpi_monthly()\n    print(macro_canada_cpi_monthly_df)\n\n    macro_canada_gdp_monthly_df = macro_canada_gdp_monthly()\n    print(macro_canada_gdp_monthly_df)\n"
  },
  {
    "path": "akshare/economic/macro_china.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/11/12 15:20\nDesc: 宏观数据-中国\n\"\"\"\n\nimport datetime\nimport json\nimport math\nimport ssl\nimport time\n\nimport pandas as pd\nimport requests\nfrom requests.adapters import HTTPAdapter\nfrom urllib3.poolmanager import PoolManager\n\nfrom akshare.economic.cons import (\n    JS_CHINA_ENERGY_DAILY_URL,\n)\nfrom akshare.utils import demjson\nfrom akshare.utils.tqdm import get_tqdm\n\n\nclass TLSAdapter(HTTPAdapter):\n    def init_poolmanager(self, connections, maxsize, block=False):\n        ctx = ssl.create_default_context()\n        # 降低安全级别以兼容旧服务器\n        ctx.set_ciphers(\"DEFAULT@SECLEVEL=1\")\n        # 禁用不安全的协议\n        ctx.options |= ssl.OP_NO_SSLv2\n        ctx.options |= ssl.OP_NO_SSLv3\n        # 指定使用 TLSv1.2\n        self.poolmanager = PoolManager(\n            num_pools=connections,\n            maxsize=maxsize,\n            block=block,\n            ssl_version=ssl.PROTOCOL_TLSv1_2,\n            ssl_context=ctx,\n        )\n\n\ndef __macro_china_base_func(symbol: str, params: dict) -> pd.DataFrame:\n    \"\"\"\n    金十数据中心-经济指标-美国-基础函数\n    https://datacenter.jin10.com/economic\n    :return: 美国经济指标数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(action=\"ignore\", category=FutureWarning)\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n    url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n    params = params\n    big_df = pd.DataFrame()\n    while True:\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        if not data_json[\"data\"][\"values\"]:\n            break\n        temp_df = pd.DataFrame(data_json[\"data\"][\"values\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n        last_date_str = temp_df.iat[-1, 0]\n        last_date_str = (\n            (\n                datetime.datetime.strptime(last_date_str, \"%Y-%m-%d\")\n                - datetime.timedelta(days=1)\n            )\n            .date()\n            .isoformat()\n        )\n        params.update({\"max_date\": f\"{last_date_str}\"})\n    big_df.columns = [\n        \"日期\",\n        \"今值\",\n        \"预测值\",\n        \"前值\",\n    ]\n    big_df[\"商品\"] = symbol\n    big_df = big_df[\n        [\n            \"商品\",\n            \"日期\",\n            \"今值\",\n            \"预测值\",\n            \"前值\",\n        ]\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"], errors=\"coerce\")\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"], errors=\"coerce\")\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"], errors=\"coerce\")\n    big_df.sort_values([\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\n# 企业商品价格指数\ndef macro_china_qyspjg() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据一览-中国-企业商品价格指数\n    https://data.eastmoney.com/cjsj/qyspjg.html\n    :return: 企业商品价格指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,BASE,BASE_SAME,BASE_SEQUENTIAL,FARM_BASE,FARM_BASE_SAME,\"\n        \"FARM_BASE_SEQUENTIAL,MINERAL_BASE,MINERAL_BASE_SAME,MINERAL_BASE_SEQUENTIAL,\"\n        \"ENERGY_BASE,ENERGY_BASE_SAME,ENERGY_BASE_SEQUENTIAL\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_GOODS_INDEX\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.rename(\n        columns={\n            \"REPORT_DATE\": \"-\",\n            \"TIME\": \"月份\",\n            \"BASE\": \"总指数-指数值\",\n            \"BASE_SAME\": \"总指数-同比增长\",\n            \"BASE_SEQUENTIAL\": \"总指数-环比增长\",\n            \"FARM_BASE\": \"农产品-指数值\",\n            \"FARM_BASE_SAME\": \"农产品-同比增长\",\n            \"FARM_BASE_SEQUENTIAL\": \"农产品-环比增长\",\n            \"MINERAL_BASE\": \"矿产品-指数值\",\n            \"MINERAL_BASE_SAME\": \"矿产品-同比增长\",\n            \"MINERAL_BASE_SEQUENTIAL\": \"矿产品-环比增长\",\n            \"ENERGY_BASE\": \"煤油电-指数值\",\n            \"ENERGY_BASE_SAME\": \"煤油电-同比增长\",\n            \"ENERGY_BASE_SEQUENTIAL\": \"煤油电-环比增长\",\n        },\n        inplace=True,\n    )\n\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"总指数-指数值\",\n            \"总指数-同比增长\",\n            \"总指数-环比增长\",\n            \"农产品-指数值\",\n            \"农产品-同比增长\",\n            \"农产品-环比增长\",\n            \"矿产品-指数值\",\n            \"矿产品-同比增长\",\n            \"矿产品-环比增长\",\n            \"煤油电-指数值\",\n            \"煤油电-同比增长\",\n            \"煤油电-环比增长\",\n        ]\n    ]\n    temp_df[\"总指数-指数值\"] = pd.to_numeric(temp_df[\"总指数-指数值\"], errors=\"coerce\")\n    temp_df[\"总指数-同比增长\"] = pd.to_numeric(\n        temp_df[\"总指数-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"总指数-环比增长\"] = pd.to_numeric(\n        temp_df[\"总指数-环比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"农产品-指数值\"] = pd.to_numeric(temp_df[\"农产品-指数值\"], errors=\"coerce\")\n    temp_df[\"农产品-同比增长\"] = pd.to_numeric(\n        temp_df[\"农产品-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"农产品-环比增长\"] = pd.to_numeric(\n        temp_df[\"农产品-环比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"矿产品-指数值\"] = pd.to_numeric(temp_df[\"矿产品-指数值\"], errors=\"coerce\")\n    temp_df[\"矿产品-同比增长\"] = pd.to_numeric(\n        temp_df[\"矿产品-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"矿产品-环比增长\"] = pd.to_numeric(\n        temp_df[\"矿产品-环比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"煤油电-指数值\"] = pd.to_numeric(temp_df[\"煤油电-指数值\"], errors=\"coerce\")\n    temp_df[\"煤油电-同比增长\"] = pd.to_numeric(\n        temp_df[\"煤油电-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"煤油电-环比增长\"] = pd.to_numeric(\n        temp_df[\"煤油电-环比增长\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\n# 外商直接投资数据\ndef macro_china_fdi() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据一览-中国-外商直接投资数据\n    https://data.eastmoney.com/cjsj/fdi.html\n    :return: 外商直接投资数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,ACTUAL_FOREIGN,ACTUAL_FOREIGN_SAME,ACTUAL_FOREIGN_SEQUENTIAL,\"\n        \"ACTUAL_FOREIGN_ACCUMULATE,FOREIGN_ACCUMULATE_SAME\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_FDI\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n\n    temp_df.columns = [\n        \"-\",\n        \"月份\",\n        \"当月\",\n        \"当月-同比增长\",\n        \"当月-环比增长\",\n        \"累计\",\n        \"累计-同比增长\",\n    ]\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"当月\",\n            \"当月-同比增长\",\n            \"当月-环比增长\",\n            \"累计\",\n            \"累计-同比增长\",\n        ]\n    ]\n    temp_df[\"当月\"] = pd.to_numeric(temp_df[\"当月\"], errors=\"coerce\")\n    temp_df[\"当月-同比增长\"] = pd.to_numeric(temp_df[\"当月-同比增长\"], errors=\"coerce\")\n    temp_df[\"当月-环比增长\"] = pd.to_numeric(temp_df[\"当月-环比增长\"], errors=\"coerce\")\n    temp_df[\"累计\"] = pd.to_numeric(temp_df[\"累计\"], errors=\"coerce\")\n    temp_df[\"累计-同比增长\"] = pd.to_numeric(temp_df[\"累计-同比增长\"], errors=\"coerce\")\n    temp_df.sort_values([\"月份\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\n# 中国社会融资规模数据\ndef macro_china_shrzgm() -> pd.DataFrame:\n    \"\"\"\n    商务数据中心-国内贸易-社会融资规模增量统计\n    https://data.mofcom.gov.cn/gnmy/shrzgm.shtml\n    :return: 社会融资规模增量统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    session = requests.Session()\n    session.mount(prefix=\"https://\", adapter=TLSAdapter())\n    url = \"https://data.mofcom.gov.cn/datamofcom/front/gnmy/shrzgmQuery\"\n    r = session.post(url)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json)\n    temp_df.columns = [\n        \"月份\",\n        \"其中-未贴现银行承兑汇票\",\n        \"其中-委托贷款\",\n        \"其中-委托贷款外币贷款\",\n        \"其中-人民币贷款\",\n        \"其中-企业债券\",\n        \"社会融资规模增量\",\n        \"其中-非金融企业境内股票融资\",\n        \"其中-信托贷款\",\n    ]\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"社会融资规模增量\",\n            \"其中-人民币贷款\",\n            \"其中-委托贷款外币贷款\",\n            \"其中-委托贷款\",\n            \"其中-信托贷款\",\n            \"其中-未贴现银行承兑汇票\",\n            \"其中-企业债券\",\n            \"其中-非金融企业境内股票融资\",\n        ]\n    ]\n    temp_df[\"社会融资规模增量\"] = pd.to_numeric(\n        temp_df[\"社会融资规模增量\"], errors=\"coerce\"\n    )\n    temp_df[\"其中-人民币贷款\"] = pd.to_numeric(\n        temp_df[\"其中-人民币贷款\"], errors=\"coerce\"\n    )\n    temp_df[\"其中-委托贷款外币贷款\"] = pd.to_numeric(\n        temp_df[\"其中-委托贷款外币贷款\"], errors=\"coerce\"\n    )\n    temp_df[\"其中-委托贷款\"] = pd.to_numeric(temp_df[\"其中-委托贷款\"], errors=\"coerce\")\n    temp_df[\"其中-信托贷款\"] = pd.to_numeric(temp_df[\"其中-信托贷款\"], errors=\"coerce\")\n    temp_df[\"其中-未贴现银行承兑汇票\"] = pd.to_numeric(\n        temp_df[\"其中-未贴现银行承兑汇票\"], errors=\"coerce\"\n    )\n    temp_df[\"其中-企业债券\"] = pd.to_numeric(temp_df[\"其中-企业债券\"], errors=\"coerce\")\n    temp_df[\"其中-非金融企业境内股票融资\"] = pd.to_numeric(\n        temp_df[\"其中-非金融企业境内股票融资\"], errors=\"coerce\"\n    )\n    temp_df.sort_values([\"月份\"], inplace=True)\n    temp_df.reset_index(drop=True, inplace=True)\n    return temp_df\n\n\ndef macro_china_urban_unemployment() -> pd.DataFrame:\n    \"\"\"\n    国家统计局-月度数据-城镇调查失业率\n    https://data.stats.gov.cn/dg/website/page.html#/pc/national/monthData\n    :return: 城镇调查失业率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://data.stats.gov.cn/dg/website/publicrelease/web/external/getEsDataByCidAndDt\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\",\n        \"Content-Type\": \"application/json\",\n    }\n    payload = {\n        \"cid\": \"ee3b7046b390415b9b7745e3d16f6052\",\n        \"indicatorIds\": [\n            \"3888eac6062945a79c8a27e5f13d4953\",\n            \"1d550f3ec77a463bb607d4a3427e1465\",\n            \"1c1b2d9ab24048bfadc5c7d9510dc663\",\n            \"3921da310de24f14b6457c235657baf9\",\n            \"bd6da1abb26046c2acb38aa701d90e86\",\n            \"7bc1bd5daeac48ae8bb413c34ece1d08\",\n            \"c03a36c9562246b6bc8aab010951ef1c\",\n            \"1061f276ce354907b0b9900c266cf851\",\n            \"40ab91b1ef4948e89633c5c7f55b9713\"\n        ],\n        \"daCatalogId\": \"\",\n        \"das\": [\n            {\n                \"text\": \"全国\",\n                \"value\": \"000000000000\"\n            }\n        ],\n        \"dts\": [\"199001MM-203601MM\"],\n        \"showType\": \"1\",\n        \"rootId\": \"fc982599aa684be7969d7b90b1bd0e84\"\n    }\n    r = requests.post(url, json=payload, headers=headers, timeout=10)\n    data_json = r.json()\n    data_list = []\n    for month_item in data_json['data']:\n        raw_month = month_item['name']\n        year_part = raw_month.split('年')[0]\n        month_part = raw_month.split('年')[1].replace('月', '')\n        month_clean = year_part + month_part.zfill(2)\n        for value_item in month_item['values']:\n            if value_item['_name'] == '城镇调查失业率':\n                rate = value_item['value']\n                if rate:\n                    indicator_clean = value_item['i_showname'].replace(' (%)', '')\n                    data_list.append([month_clean, indicator_clean, rate])\n    temp_df = pd.DataFrame(data_list, columns=['date', 'item', 'value'])\n    temp_df.sort_values(by=['date'], ascending=True, inplace=True)\n    temp_df.reset_index(drop=True, inplace=True)\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-国民经济运行状况-经济状况-中国GDP年率报告\ndef macro_china_gdp_yearly() -> pd.DataFrame:\n    \"\"\"\n    金十数据中心-中国 GDP 年率报告, 数据区间从 20110120-至今\n    https://datacenter.jin10.com/reportType/dc_chinese_gdp_yoy\n    :return: 中国 GDP 年率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"57\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_china_base_func(symbol=\"中国GDP年率报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-国民经济运行状况-物价水平-中国CPI年率报告\ndef macro_china_cpi_yearly() -> pd.DataFrame:\n    \"\"\"\n    中国年度 CPI 数据, 数据区间从 19860201-至今\n    https://datacenter.jin10.com/reportType/dc_chinese_cpi_yoy\n    :return: 中国年度 CPI 数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"56\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_china_base_func(symbol=\"中国CPI年率报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-国民经济运行状况-物价水平-中国CPI月率报告\ndef macro_china_cpi_monthly() -> pd.DataFrame:\n    \"\"\"\n    中国月度 CPI 数据, 数据区间从 19960201-至今\n    https://datacenter.jin10.com/reportType/dc_chinese_cpi_mom\n    :return: 中国月度 CPI 数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"72\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_china_base_func(symbol=\"中国CPI月率报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-国民经济运行状况-物价水平-中国PPI年率报告\ndef macro_china_ppi_yearly() -> pd.DataFrame:\n    \"\"\"\n    中国年度 PPI 数据, 数据区间从 19950801-至今\n    https://datacenter.jin10.com/reportType/dc_chinese_ppi_yoy\n    :return: 中国年度 PPI 数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"60\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_china_base_func(symbol=\"中国PPI年率报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-贸易状况-以美元计算出口年率报告\ndef macro_china_exports_yoy() -> pd.DataFrame:\n    \"\"\"\n    中国以美元计算出口年率报告, 数据区间从 19820201-至今\n    https://datacenter.jin10.com/reportType/dc_chinese_exports_yoy\n    :return: 中国以美元计算出口年率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"66\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_china_base_func(\n        symbol=\"中国以美元计算出口年率报告\", params=params\n    )\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-贸易状况-以美元计算进口年率\ndef macro_china_imports_yoy() -> pd.DataFrame:\n    \"\"\"\n    中国以美元计算进口年率报告, 数据区间从 19960201-至今\n    https://datacenter.jin10.com/reportType/dc_chinese_imports_yoy\n    https://cdn.jin10.com/dc/reports/dc_chinese_imports_yoy_all.js?v=1578754588\n    :return: 中国以美元计算进口年率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"77\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_china_base_func(\n        symbol=\"中国以美元计算进口年率报告\", params=params\n    )\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-贸易状况-以美元计算贸易帐(亿美元)\ndef macro_china_trade_balance() -> pd.DataFrame:\n    \"\"\"\n    中国以美元计算贸易帐报告, 数据区间从 19810201-至今\n    https://datacenter.jin10.com/reportType/dc_chinese_trade_balance\n    https://cdn.jin10.com/dc/reports/dc_chinese_trade_balance_all.js?v=1578754677\n    :return: 中国以美元计算贸易帐报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"61\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_china_base_func(symbol=\"中国以美元计算贸易帐报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-产业指标-规模以上工业增加值年率\ndef macro_china_industrial_production_yoy() -> pd.DataFrame:\n    \"\"\"\n    中国规模以上工业增加值年率报告, 数据区间从19900301-至今\n    https://datacenter.jin10.com/reportType/dc_chinese_industrial_production_yoy\n    https://cdn.jin10.com/dc/reports/dc_chinese_industrial_production_yoy_all.js?v=1578754779\n    :return: 中国规模以上工业增加值年率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"58\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_china_base_func(\n        symbol=\"中国规模以上工业增加值年率报告\", params=params\n    )\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-产业指标-官方制造业PMI\ndef macro_china_pmi_yearly() -> pd.DataFrame:\n    \"\"\"\n    中国年度 PMI 数据, 数据区间从 20050201-至今\n    https://datacenter.jin10.com/reportType/dc_chinese_manufacturing_pmi\n    :return: 中国年度 PMI 数据\n    :return: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": \"65\",\n        \"max_date\": \"\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_china_base_func(symbol=\"中国官方制造业PMI\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-产业指标-财新制造业PMI终值\ndef macro_china_cx_pmi_yearly() -> pd.DataFrame:\n    \"\"\"\n    中国年度财新 PMI 数据, 数据区间从 20120120-至今\n    https://datacenter.jin10.com/reportType/dc_chinese_caixin_manufacturing_pmi\n    :return: 中国年度财新 PMI 数据\n    :return: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"73\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_china_base_func(symbol=\"中国财新制造业PMI终值报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-产业指标-财新服务业PMI\ndef macro_china_cx_services_pmi_yearly() -> pd.DataFrame:\n    \"\"\"\n    中国财新服务业PMI报告, 数据区间从 20120405-至今\n    https://datacenter.jin10.com/reportType/dc_chinese_caixin_services_pmi\n    https://cdn.jin10.com/dc/reports/dc_chinese_caixin_services_pmi_all.js?v=1578818109\n    :return: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"67\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_china_base_func(symbol=\"中国财新服务业PMI报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-产业指标-中国官方非制造业PMI\ndef macro_china_non_man_pmi() -> pd.DataFrame:\n    \"\"\"\n    中国官方非制造业 PMI, 数据区间从 20160101-至今\n    https://datacenter.jin10.com/reportType/dc_chinese_non_manufacturing_pmi\n    :return: 中国官方非制造业 PMI\n    :return: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"75\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_china_base_func(symbol=\"中国官方非制造业PMI报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-金融指标-外汇储备(亿美元)\ndef macro_china_fx_reserves_yearly() -> pd.DataFrame:\n    \"\"\"\n    中国年度外汇储备数据, 数据区间从 20140115-至今\n    https://datacenter.jin10.com/reportType/dc_chinese_fx_reserves\n    :return: 中国年度外汇储备数据\n    :return: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"76\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_china_base_func(symbol=\"中国外汇储备报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-金融指标-M2货币供应年率\ndef macro_china_m2_yearly() -> pd.DataFrame:\n    \"\"\"\n    中国年度 M2 数据, 数据区间从 19980201-至今\n    https://datacenter.jin10.com/reportType/dc_chinese_m2_money_supply_yoy\n    :return: 中国年度 M2 数据\n    :return: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"59\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_china_base_func(symbol=\"中国M2货币供应年率报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-金融指标-上海银行业同业拆借报告\ndef macro_china_shibor_all() -> pd.DataFrame:\n    \"\"\"\n    上海银行业同业拆借报告, 数据区间从20170317-至今\n    https://datacenter.jin10.com/reportType/dc_shibor\n    https://cdn.jin10.com/dc/reports/dc_shibor_all.js?v=1578755058\n    :return: 上海银行业同业拆借报告-今值(%)\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import numpy as np\n\n    t = time.time()\n    params = {\"_\": t}\n    res = requests.get(\n        url=\"https://cdn.jin10.com/data_center/reports/il_1.json\", params=params\n    )\n    json_data = res.json()\n    temp_df = pd.DataFrame(json_data[\"values\"]).T\n    big_df = pd.DataFrame()\n    temp_df.fillna(value=\"--\", inplace=True)\n    big_df[\"O/N-定价\"] = temp_df[\"O/N\"].apply(lambda x: x[0])\n    big_df[\"O/N-涨跌幅\"] = temp_df[\"O/N\"].apply(lambda x: x[1])\n    big_df[\"1W-定价\"] = temp_df[\"1W\"].apply(lambda x: x[0])\n    big_df[\"1W-涨跌幅\"] = temp_df[\"1W\"].apply(lambda x: x[1])\n    big_df[\"2W-定价\"] = temp_df[\"2W\"].apply(lambda x: x[0])\n    big_df[\"2W-涨跌幅\"] = temp_df[\"2W\"].apply(lambda x: x[1])\n    big_df[\"1M-定价\"] = temp_df[\"1M\"].apply(lambda x: x[0])\n    big_df[\"1M-涨跌幅\"] = temp_df[\"1M\"].apply(lambda x: x[1])\n    big_df[\"3M-定价\"] = temp_df[\"3M\"].apply(lambda x: x[0])\n    big_df[\"3M-涨跌幅\"] = temp_df[\"3M\"].apply(lambda x: x[1])\n    big_df[\"6M-定价\"] = temp_df[\"6M\"].apply(lambda x: x[0])\n    big_df[\"6M-涨跌幅\"] = temp_df[\"6M\"].apply(lambda x: x[1])\n    big_df[\"9M-定价\"] = temp_df[\"9M\"].apply(lambda x: x[0])\n    big_df[\"9M-涨跌幅\"] = temp_df[\"9M\"].apply(lambda x: x[1])\n    big_df[\"1Y-定价\"] = temp_df[\"1Y\"].apply(lambda x: x[0])\n    big_df[\"1Y-涨跌幅\"] = temp_df[\"1Y\"].apply(lambda x: x[1])\n    big_df = big_df.apply(lambda x: x.replace(\"-\", np.nan))\n    big_df = big_df.apply(lambda x: x.replace([None], np.nan))\n    for item in big_df.columns:\n        big_df[item] = pd.to_numeric(big_df[item], errors=\"coerce\")\n    big_df.sort_index(inplace=True)\n    big_df.reset_index(inplace=True)\n    big_df.rename(columns={\"index\": \"日期\"}, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-中国-金融指标-人民币香港银行同业拆息\ndef macro_china_hk_market_info() -> pd.DataFrame:\n    \"\"\"\n    香港同业拆借报告, 数据区间从 20170320-至今\n    https://datacenter.jin10.com/reportType/dc_hk_market_info\n    https://cdn.jin10.com/dc/reports/dc_hk_market_info_all.js?v=1578755471\n    :return: 香港同业拆借报告-今值(%)\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import numpy as np\n\n    t = time.time()\n    params = {\"_\": t}\n    res = requests.get(\n        url=\"https://cdn.jin10.com/data_center/reports/il_2.json\", params=params\n    )\n    json_data = res.json()\n    temp_df = pd.DataFrame(json_data[\"values\"]).T\n    big_df = pd.DataFrame()\n    temp_df.fillna(value=\"--\", inplace=True)\n    big_df[\"1W-定价\"] = temp_df[\"1W\"].apply(lambda x: x[0])\n    big_df[\"1W-涨跌幅\"] = temp_df[\"1W\"].apply(lambda x: x[1])\n    big_df[\"2W-定价\"] = temp_df[\"2W\"].apply(lambda x: x[0])\n    big_df[\"2W-涨跌幅\"] = temp_df[\"2W\"].apply(lambda x: x[1])\n    big_df[\"1M-定价\"] = temp_df[\"1M\"].apply(lambda x: x[0])\n    big_df[\"1M-涨跌幅\"] = temp_df[\"1M\"].apply(lambda x: x[1])\n    big_df[\"3M-定价\"] = temp_df[\"3M\"].apply(lambda x: x[0])\n    big_df[\"3M-涨跌幅\"] = temp_df[\"3M\"].apply(lambda x: x[1])\n    big_df[\"6M-定价\"] = temp_df[\"6M\"].apply(lambda x: x[0])\n    big_df[\"6M-涨跌幅\"] = temp_df[\"6M\"].apply(lambda x: x[1])\n    big_df[\"1Y-定价\"] = temp_df[\"1Y\"].apply(lambda x: x[0])\n    big_df[\"1Y-涨跌幅\"] = temp_df[\"1Y\"].apply(lambda x: x[1])\n    big_df[\"ON-定价\"] = temp_df[\"ON\"].apply(lambda x: x[0])\n    big_df[\"ON-涨跌幅\"] = temp_df[\"ON\"].apply(lambda x: x[1])\n    big_df[\"2M-定价\"] = temp_df[\"2M\"].apply(lambda x: x[0])\n    big_df[\"2M-涨跌幅\"] = temp_df[\"2M\"].apply(lambda x: x[1])\n    big_df = big_df.apply(lambda x: x.replace(\"-\", np.nan))\n    big_df = big_df.apply(lambda x: x.replace([None], np.nan))\n    for item in big_df.columns:\n        big_df[item] = pd.to_numeric(big_df[item], errors=\"coerce\")\n    big_df.sort_index(inplace=True)\n    big_df.reset_index(inplace=True)\n    big_df.rename(columns={\"index\": \"日期\"}, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-中国-其他-中国日度沿海六大电库存数据\ndef macro_china_daily_energy() -> pd.DataFrame:\n    \"\"\"\n    中国日度沿海六大电库存数据, 数据区间从20160101-至今\n    https://datacenter.jin10.com/reportType/dc_qihuo_energy_report\n    :return: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    res = requests.get(\n        JS_CHINA_ENERGY_DAILY_URL.format(\n            str(int(round(t * 1000))), str(int(round(t * 1000)) + 90)\n        )\n    )\n    json_data = json.loads(res.text[res.text.find(\"{\") : res.text.rfind(\"}\") + 1])\n    date_list = [item[\"date\"] for item in json_data[\"list\"]]\n    value_list = [\n        item[\"datas\"][\"沿海六大电厂库存动态报告\"] for item in json_data[\"list\"]\n    ]\n    value_df = pd.DataFrame(value_list)\n    value_df.columns = json_data[\"kinds\"]\n    value_df.index = pd.to_datetime(date_list)\n    temp_df = value_df[[\"沿海六大电库存\", \"日耗\", \"存煤可用天数\"]]\n    temp_df.name = \"energy\"\n    temp_df = temp_df.astype(float)\n    temp_df.reset_index(inplace=True)\n    temp_df.rename(columns={\"index\": \"日期\"}, inplace=True)\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-其他-中国人民币汇率中间价报告\ndef macro_china_rmb() -> pd.DataFrame:\n    \"\"\"\n    中国人民币汇率中间价报告, 数据区间从 20170103-至今\n    https://datacenter.jin10.com/reportType/dc_rmb_data\n    :return: 中国人民币汇率中间价报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\"_\": t}\n    res = requests.get(\n        \"https://cdn.jin10.com/data_center/reports/exchange_rate.json\",\n        params=params,\n    )\n    json_data = res.json()\n    temp_df = pd.DataFrame(json_data[\"values\"]).T\n    big_df = pd.DataFrame()\n    temp_df.fillna(value=\"--\", inplace=True)\n    big_df[\"美元/人民币_中间价\"] = temp_df[\"美元/人民币\"].apply(lambda x: x[0])\n    big_df[\"美元/人民币_涨跌幅\"] = temp_df[\"美元/人民币\"].apply(lambda x: x[1])\n    big_df[\"欧元/人民币_中间价\"] = temp_df[\"欧元/人民币\"].apply(lambda x: x[0])\n    big_df[\"欧元/人民币_涨跌幅\"] = temp_df[\"欧元/人民币\"].apply(lambda x: x[1])\n    big_df[\"100日元/人民币_中间价\"] = temp_df[\"100日元/人民币\"].apply(lambda x: x[0])\n    big_df[\"100日元/人民币_涨跌幅\"] = temp_df[\"100日元/人民币\"].apply(lambda x: x[1])\n    big_df[\"港元/人民币_中间价\"] = temp_df[\"港元/人民币\"].apply(lambda x: x[0])\n    big_df[\"港元/人民币_涨跌幅\"] = temp_df[\"港元/人民币\"].apply(lambda x: x[1])\n    big_df[\"英镑/人民币_中间价\"] = temp_df[\"英镑/人民币\"].apply(lambda x: x[0])\n    big_df[\"英镑/人民币_涨跌幅\"] = temp_df[\"英镑/人民币\"].apply(lambda x: x[1])\n    big_df[\"澳元/人民币_中间价\"] = temp_df[\"澳元/人民币\"].apply(lambda x: x[0])\n    big_df[\"澳元/人民币_涨跌幅\"] = temp_df[\"澳元/人民币\"].apply(lambda x: x[1])\n    big_df[\"新西兰元/人民币_中间价\"] = temp_df[\"新西兰元/人民币\"].apply(lambda x: x[0])\n    big_df[\"新西兰元/人民币_涨跌幅\"] = temp_df[\"新西兰元/人民币\"].apply(lambda x: x[1])\n    big_df[\"新加坡元/人民币_中间价\"] = temp_df[\"新加坡元/人民币\"].apply(lambda x: x[0])\n    big_df[\"新加坡元/人民币_涨跌幅\"] = temp_df[\"新加坡元/人民币\"].apply(lambda x: x[1])\n    big_df[\"瑞郎/人民币_中间价\"] = temp_df[\"瑞郎/人民币\"].apply(lambda x: x[0])\n    big_df[\"瑞郎/人民币_涨跌幅\"] = temp_df[\"瑞郎/人民币\"].apply(lambda x: x[1])\n    big_df[\"加元/人民币_中间价\"] = temp_df[\"加元/人民币\"].apply(lambda x: x[0])\n    big_df[\"加元/人民币_涨跌幅\"] = temp_df[\"加元/人民币\"].apply(lambda x: x[1])\n    big_df[\"人民币/马来西亚林吉特_中间价\"] = temp_df[\"人民币/马来西亚林吉特\"].apply(\n        lambda x: x[0]\n    )\n    big_df[\"人民币/马来西亚林吉特_涨跌幅\"] = temp_df[\"人民币/马来西亚林吉特\"].apply(\n        lambda x: x[1]\n    )\n    big_df[\"人民币/俄罗斯卢布_中间价\"] = temp_df[\"人民币/俄罗斯卢布\"].apply(\n        lambda x: x[0]\n    )\n    big_df[\"人民币/俄罗斯卢布_涨跌幅\"] = temp_df[\"人民币/俄罗斯卢布\"].apply(\n        lambda x: x[1]\n    )\n    big_df[\"人民币/南非兰特_中间价\"] = temp_df[\"人民币/南非兰特\"].apply(lambda x: x[0])\n    big_df[\"人民币/南非兰特_涨跌幅\"] = temp_df[\"人民币/南非兰特\"].apply(lambda x: x[1])\n    big_df[\"人民币/韩元_中间价\"] = temp_df[\"人民币/韩元\"].apply(lambda x: x[0])\n    big_df[\"人民币/韩元_涨跌幅\"] = temp_df[\"人民币/韩元\"].apply(lambda x: x[1])\n    big_df[\"人民币/阿联酋迪拉姆_中间价\"] = temp_df[\"人民币/阿联酋迪拉姆\"].apply(\n        lambda x: x[0]\n    )\n    big_df[\"人民币/阿联酋迪拉姆_涨跌幅\"] = temp_df[\"人民币/阿联酋迪拉姆\"].apply(\n        lambda x: x[1]\n    )\n    big_df[\"人民币/沙特里亚尔_中间价\"] = temp_df[\"人民币/沙特里亚尔\"].apply(\n        lambda x: x[0]\n    )\n    big_df[\"人民币/沙特里亚尔_涨跌幅\"] = temp_df[\"人民币/沙特里亚尔\"].apply(\n        lambda x: x[1]\n    )\n    big_df[\"人民币/匈牙利福林_中间价\"] = temp_df[\"人民币/匈牙利福林\"].apply(\n        lambda x: x[0]\n    )\n    big_df[\"人民币/匈牙利福林_涨跌幅\"] = temp_df[\"人民币/匈牙利福林\"].apply(\n        lambda x: x[1]\n    )\n    big_df[\"人民币/波兰兹罗提_中间价\"] = temp_df[\"人民币/波兰兹罗提\"].apply(\n        lambda x: x[0]\n    )\n    big_df[\"人民币/波兰兹罗提_涨跌幅\"] = temp_df[\"人民币/波兰兹罗提\"].apply(\n        lambda x: x[1]\n    )\n    big_df[\"人民币/丹麦克朗_中间价\"] = temp_df[\"人民币/丹麦克朗\"].apply(lambda x: x[0])\n    big_df[\"人民币/丹麦克朗_涨跌幅\"] = temp_df[\"人民币/丹麦克朗\"].apply(lambda x: x[1])\n    big_df[\"人民币/瑞典克朗_中间价\"] = temp_df[\"人民币/瑞典克朗\"].apply(lambda x: x[0])\n    big_df[\"人民币/瑞典克朗_涨跌幅\"] = temp_df[\"人民币/瑞典克朗\"].apply(lambda x: x[1])\n    big_df[\"人民币/挪威克朗_中间价\"] = temp_df[\"人民币/挪威克朗\"].apply(lambda x: x[0])\n    big_df[\"人民币/挪威克朗_涨跌幅\"] = temp_df[\"人民币/挪威克朗\"].apply(lambda x: x[1])\n    big_df[\"人民币/土耳其里拉_中间价\"] = temp_df[\"人民币/土耳其里拉\"].apply(\n        lambda x: x[0]\n    )\n    big_df[\"人民币/土耳其里拉_涨跌幅\"] = temp_df[\"人民币/土耳其里拉\"].apply(\n        lambda x: x[1]\n    )\n    big_df[\"人民币/墨西哥比索_中间价\"] = temp_df[\"人民币/墨西哥比索\"].apply(\n        lambda x: x[0]\n    )\n    big_df[\"人民币/墨西哥比索_涨跌幅\"] = temp_df[\"人民币/墨西哥比索\"].apply(\n        lambda x: x[1]\n    )\n    big_df[\"人民币/泰铢_定价\"] = temp_df[\"人民币/泰铢\"].apply(lambda x: x[0])\n    big_df[\"人民币/泰铢_涨跌幅\"] = temp_df[\"人民币/泰铢\"].apply(lambda x: x[1])\n    big_df = big_df.apply(lambda x: x.replace(\"-\", pd.NA))\n    big_df = big_df.apply(lambda x: x.replace([None], pd.NA))\n    big_df.sort_index(inplace=True)\n    big_df.fillna(0, inplace=True)\n    big_df = big_df.astype(\"float\")\n    big_df.reset_index(inplace=True)\n    big_df.rename(columns={\"index\": \"日期\"}, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-中国-其他-深圳融资融券报告\ndef macro_china_market_margin_sz() -> pd.DataFrame:\n    \"\"\"\n    深圳融资融券报告, 数据区间从20100331-至今\n    https://datacenter.jin10.com/reportType/dc_market_margin_sz\n    :return: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\"_\": t}\n    res = requests.get(\n        url=\"https://cdn.jin10.com/data_center/reports/fs_2.json\", params=params\n    )\n    json_data = res.json()\n    temp_df = pd.DataFrame(json_data[\"values\"]).T\n    temp_df.columns = [\n        \"融资买入额\",\n        \"融资余额\",\n        \"融券卖出量\",\n        \"融券余量\",\n        \"融券余额\",\n        \"融资融券余额\",\n    ]\n    temp_df.sort_index(inplace=True)\n    temp_df.index = pd.to_datetime(temp_df.index)\n    temp_df = temp_df.astype(\"float\")\n    temp_df.reset_index(inplace=True)\n    temp_df.rename(columns={\"index\": \"日期\"}, inplace=True)\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-其他-上海融资融券报告\ndef macro_china_market_margin_sh() -> pd.DataFrame:\n    \"\"\"\n    上海融资融券报告, 数据区间从 20100331-至今\n    https://datacenter.jin10.com/reportType/dc_market_margin_sse\n    :return: pandas.DataFrame\n    \"\"\"\n    url = \"https://cdn.jin10.com/data_center/reports/fs_1.json\"\n    t = time.time()\n    params = {\"_\": t}\n    r = requests.get(url, params=params)\n    json_data = r.json()\n    temp_df = pd.DataFrame(json_data[\"values\"]).T\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\n        \"日期\",\n        \"融资买入额\",\n        \"融资余额\",\n        \"融券卖出量\",\n        \"融券余量\",\n        \"融券余额\",\n        \"融资融券余额\",\n    ]\n    temp_df.sort_values(by=[\"日期\"], inplace=True, ignore_index=True)\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"融资买入额\"] = pd.to_numeric(temp_df[\"融资买入额\"], errors=\"coerce\")\n    temp_df[\"融资余额\"] = pd.to_numeric(temp_df[\"融资余额\"], errors=\"coerce\")\n    temp_df[\"融券卖出量\"] = pd.to_numeric(temp_df[\"融券卖出量\"], errors=\"coerce\")\n    temp_df[\"融券余量\"] = pd.to_numeric(temp_df[\"融券余量\"], errors=\"coerce\")\n    temp_df[\"融券余额\"] = pd.to_numeric(temp_df[\"融券余额\"], errors=\"coerce\")\n    temp_df[\"融资融券余额\"] = pd.to_numeric(temp_df[\"融资融券余额\"], errors=\"coerce\")\n    return temp_df\n\n\n# 金十数据中心-经济指标-中国-其他-上海黄金交易所报告\ndef macro_china_au_report() -> pd.DataFrame:\n    \"\"\"\n    上海黄金交易所报告, 数据区间从20100331-至今\n    https://datacenter.jin10.com/reportType/dc_sge_report\n    :return: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\"_\": t}\n    res = requests.get(\n        url=\"https://cdn.jin10.com/data_center/reports/sge.json\", params=params\n    )\n    json_data = res.json()\n    big_df = pd.DataFrame()\n    for item in json_data[\"values\"].keys():\n        temp_df = pd.DataFrame(json_data[\"values\"][item])\n        temp_df[\"date\"] = item\n        temp_df.columns = [\n            \"商品\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"收盘价\",\n            \"涨跌\",\n            \"涨跌幅\",\n            \"加权平均价\",\n            \"成交量\",\n            \"成交金额\",\n            \"持仓量\",\n            \"交收方向\",\n            \"交收量\",\n            \"日期\",\n        ]\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df = big_df[\n        [\n            \"日期\",\n            \"商品\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"收盘价\",\n            \"涨跌\",\n            \"涨跌幅\",\n            \"加权平均价\",\n            \"成交量\",\n            \"成交金额\",\n            \"持仓量\",\n            \"交收方向\",\n            \"交收量\",\n        ]\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df.sort_values([\"日期\"], inplace=True, ignore_index=True)\n    big_df[\"持仓量\"] = pd.to_numeric(big_df[\"持仓量\"], errors=\"coerce\")\n    big_df[\"交收量\"] = pd.to_numeric(big_df[\"交收量\"], errors=\"coerce\")\n    return big_df\n\n\n# 中国-利率-贷款报价利率\ndef macro_china_lpr() -> pd.DataFrame:\n    \"\"\"\n    LPR品种详细数据\n    https://data.eastmoney.com/cjsj/globalRateLPR.html\n    :return: LPR品种详细数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(action=\"ignore\", category=FutureWarning)\n\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPTA_WEB_RATE\",\n        \"columns\": \"ALL\",\n        \"sortColumns\": \"TRADE_DATE\",\n        \"sortTypes\": \"-1\",\n        \"token\": \"894050c76af8597a853f5b408b759f5d\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"500\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df[\"TRADE_DATE\"] = pd.to_datetime(big_df[\"TRADE_DATE\"], errors=\"coerce\").dt.date\n    big_df[\"LPR1Y\"] = pd.to_numeric(big_df[\"LPR1Y\"], errors=\"coerce\")\n    big_df[\"LPR5Y\"] = pd.to_numeric(big_df[\"LPR5Y\"], errors=\"coerce\")\n    big_df[\"RATE_1\"] = pd.to_numeric(big_df[\"RATE_1\"], errors=\"coerce\")\n    big_df[\"RATE_2\"] = pd.to_numeric(big_df[\"RATE_2\"], errors=\"coerce\")\n    big_df.sort_values(by=[\"TRADE_DATE\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\n# 中国-新房价指数\ndef macro_china_new_house_price(\n    city_first: str = \"北京\", city_second: str = \"上海\"\n) -> pd.DataFrame:\n    \"\"\"\n    中国-新房价指数\n    https://data.eastmoney.com/cjsj/newhouse.html\n    :param city_first: 城市; 城市列表见目标网站\n    :type city_first: str\n    :param city_second: 城市; 城市列表见目标网站\n    :type city_second: str\n    :return: 新房价指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMY_HOUSE_PRICE\",\n        \"columns\": \"REPORT_DATE,CITY,FIRST_COMHOUSE_SAME,FIRST_COMHOUSE_SEQUENTIAL,FIRST_COMHOUSE_BASE,\"\n        \"SECOND_HOUSE_SAME,SECOND_HOUSE_SEQUENTIAL,SECOND_HOUSE_BASE,REPORT_DAY\",\n        \"filter\": f'(CITY in (\"{city_first}\",\"{city_second}\"))',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"500\",\n        \"sortColumns\": \"REPORT_DATE,CITY\",\n        \"sortTypes\": \"-1,-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"日期\",\n        \"城市\",\n        \"新建商品住宅价格指数-同比\",\n        \"新建商品住宅价格指数-环比\",\n        \"新建商品住宅价格指数-定基\",\n        \"二手住宅价格指数-同比\",\n        \"二手住宅价格指数-环比\",\n        \"二手住宅价格指数-定基\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"城市\",\n            \"新建商品住宅价格指数-同比\",\n            \"新建商品住宅价格指数-环比\",\n            \"新建商品住宅价格指数-定基\",\n            \"二手住宅价格指数-同比\",\n            \"二手住宅价格指数-环比\",\n            \"二手住宅价格指数-定基\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"新建商品住宅价格指数-同比\"] = pd.to_numeric(\n        temp_df[\"新建商品住宅价格指数-同比\"], errors=\"coerce\"\n    )\n    temp_df[\"新建商品住宅价格指数-环比\"] = pd.to_numeric(\n        temp_df[\"新建商品住宅价格指数-环比\"], errors=\"coerce\"\n    )\n    temp_df[\"新建商品住宅价格指数-定基\"] = pd.to_numeric(\n        temp_df[\"新建商品住宅价格指数-定基\"], errors=\"coerce\"\n    )\n    temp_df[\"二手住宅价格指数-环比\"] = pd.to_numeric(\n        temp_df[\"二手住宅价格指数-环比\"], errors=\"coerce\"\n    )\n    temp_df[\"二手住宅价格指数-同比\"] = pd.to_numeric(\n        temp_df[\"二手住宅价格指数-同比\"], errors=\"coerce\"\n    )\n    temp_df[\"二手住宅价格指数-定基\"] = pd.to_numeric(\n        temp_df[\"二手住宅价格指数-定基\"], errors=\"coerce\"\n    )\n    temp_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\n# 中国-企业景气及企业家信心指数\ndef macro_china_enterprise_boom_index() -> pd.DataFrame:\n    \"\"\"\n    https://data.eastmoney.com/cjsj/qyjqzs.html\n    中国-企业景气及企业家信心指数\n    :return: 企业景气及企业家信心指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,BOOM_INDEX,FAITH_INDEX,BOOM_INDEX_SAME,BOOM_INDEX_SEQUENTIAL,\"\n        \"FAITH_INDEX_SAME,FAITH_INDEX_SEQUENTIAL\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"500\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_BOOM_INDEX\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"季度\",\n        \"企业景气指数-指数\",\n        \"企业家信心指数-指数\",\n        \"企业景气指数-同比\",\n        \"企业景气指数-环比\",\n        \"企业家信心指数-同比\",\n        \"企业家信心指数-环比\",\n    ]\n    temp_df = temp_df[\n        [\n            \"季度\",\n            \"企业景气指数-指数\",\n            \"企业景气指数-同比\",\n            \"企业景气指数-环比\",\n            \"企业家信心指数-指数\",\n            \"企业家信心指数-同比\",\n            \"企业家信心指数-环比\",\n        ]\n    ]\n    temp_df[\"企业景气指数-指数\"] = pd.to_numeric(\n        temp_df[\"企业景气指数-指数\"], errors=\"coerce\"\n    )\n    temp_df[\"企业家信心指数-指数\"] = pd.to_numeric(\n        temp_df[\"企业家信心指数-指数\"], errors=\"coerce\"\n    )\n    temp_df[\"企业景气指数-同比\"] = pd.to_numeric(\n        temp_df[\"企业景气指数-同比\"], errors=\"coerce\"\n    )\n    temp_df[\"企业景气指数-环比\"] = pd.to_numeric(\n        temp_df[\"企业景气指数-环比\"], errors=\"coerce\"\n    )\n    temp_df[\"企业家信心指数-同比\"] = pd.to_numeric(\n        temp_df[\"企业家信心指数-同比\"], errors=\"coerce\"\n    )\n    temp_df[\"企业家信心指数-环比\"] = pd.to_numeric(\n        temp_df[\"企业家信心指数-环比\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\n# 中国-全国税收收入\ndef macro_china_national_tax_receipts() -> pd.DataFrame:\n    \"\"\"\n    中国-全国税收收入\n    https://data.eastmoney.com/cjsj/qgsssr.html\n    :return: 全国税收收入\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,TAX_INCOME,TAX_INCOME_SAME,TAX_INCOME_SEQUENTIAL\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"500\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_TAX\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n\n    temp_df.columns = [\"-\", \"季度\", \"税收收入合计\", \"较上年同期\", \"季度环比\"]\n    temp_df = temp_df[[\"季度\", \"税收收入合计\", \"较上年同期\", \"季度环比\"]]\n\n    temp_df[\"税收收入合计\"] = pd.to_numeric(temp_df[\"税收收入合计\"], errors=\"coerce\")\n    temp_df[\"较上年同期\"] = pd.to_numeric(temp_df[\"较上年同期\"], errors=\"coerce\")\n    temp_df[\"季度环比\"] = pd.to_numeric(temp_df[\"季度环比\"], errors=\"coerce\")\n    return temp_df\n\n\n# 中国-银行理财产品发行数量\ndef macro_china_bank_financing() -> pd.DataFrame:\n    \"\"\"\n    银行理财产品发行数量\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI01516267.html\n    :return: 银行理财产品发行数量\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"1000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,CHANGERATE_1Y,\"\n        \"CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMI01516267\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"]).dt.date\n    temp_df[\"最新值\"] = pd.to_numeric(temp_df[\"最新值\"])\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"])\n    temp_df[\"近3月涨跌幅\"] = pd.to_numeric(temp_df[\"近3月涨跌幅\"])\n    temp_df[\"近6月涨跌幅\"] = pd.to_numeric(temp_df[\"近6月涨跌幅\"])\n    temp_df[\"近1年涨跌幅\"] = pd.to_numeric(temp_df[\"近1年涨跌幅\"])\n    temp_df[\"近2年涨跌幅\"] = pd.to_numeric(temp_df[\"近2年涨跌幅\"])\n    temp_df[\"近3年涨跌幅\"] = pd.to_numeric(temp_df[\"近3年涨跌幅\"])\n    temp_df.sort_values([\"日期\"], inplace=True)\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\ndef macro_china_insurance_income() -> pd.DataFrame:\n    \"\"\"\n    原保险保费收入\n    https://data.eastmoney.com/cjsj/hyzs_list_EMM00088870.html\n    :return: 原保险保费收入\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"1000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,CHANGERATE_1Y,\"\n        \"CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMM00088870\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"]).dt.date\n    temp_df[\"最新值\"] = pd.to_numeric(temp_df[\"最新值\"])\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"])\n    temp_df[\"近3月涨跌幅\"] = pd.to_numeric(temp_df[\"近3月涨跌幅\"])\n    temp_df[\"近6月涨跌幅\"] = pd.to_numeric(temp_df[\"近6月涨跌幅\"])\n    temp_df[\"近1年涨跌幅\"] = pd.to_numeric(temp_df[\"近1年涨跌幅\"])\n    temp_df[\"近2年涨跌幅\"] = pd.to_numeric(temp_df[\"近2年涨跌幅\"])\n    temp_df[\"近3年涨跌幅\"] = pd.to_numeric(temp_df[\"近3年涨跌幅\"])\n    temp_df.sort_values([\"日期\"], inplace=True)\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\ndef macro_china_mobile_number() -> pd.DataFrame:\n    \"\"\"\n    手机出货量\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00225823.html\n    :return: 手机出货量\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"1000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,CHANGERATE_1Y,\"\n        \"CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMI00225823\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.drop_duplicates(inplace=True)\n    temp_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"]).dt.date\n    temp_df[\"最新值\"] = pd.to_numeric(temp_df[\"最新值\"])\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"])\n    temp_df[\"近3月涨跌幅\"] = pd.to_numeric(temp_df[\"近3月涨跌幅\"])\n    temp_df[\"近6月涨跌幅\"] = pd.to_numeric(temp_df[\"近6月涨跌幅\"])\n    temp_df[\"近1年涨跌幅\"] = pd.to_numeric(temp_df[\"近1年涨跌幅\"])\n    temp_df[\"近2年涨跌幅\"] = pd.to_numeric(temp_df[\"近2年涨跌幅\"])\n    temp_df[\"近3年涨跌幅\"] = pd.to_numeric(temp_df[\"近3年涨跌幅\"])\n    temp_df.sort_values([\"日期\"], inplace=True)\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\ndef macro_china_vegetable_basket() -> pd.DataFrame:\n    \"\"\"\n    菜篮子产品批发价格指数\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00009275.html\n    :return: 菜篮子产品批发价格指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,CHANGERATE_1Y,\"\n        \"CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMI00009275\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.drop_duplicates(inplace=True)\n    big_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df[\"最新值\"] = pd.to_numeric(big_df[\"最新值\"])\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"])\n    big_df[\"近3月涨跌幅\"] = pd.to_numeric(big_df[\"近3月涨跌幅\"])\n    big_df[\"近6月涨跌幅\"] = pd.to_numeric(big_df[\"近6月涨跌幅\"])\n    big_df[\"近1年涨跌幅\"] = pd.to_numeric(big_df[\"近1年涨跌幅\"])\n    big_df[\"近2年涨跌幅\"] = pd.to_numeric(big_df[\"近2年涨跌幅\"])\n    big_df[\"近3年涨跌幅\"] = pd.to_numeric(big_df[\"近3年涨跌幅\"])\n    big_df.sort_values([\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef macro_china_agricultural_product() -> pd.DataFrame:\n    \"\"\"\n    农产品批发价格总指数\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00009274.html\n    :return: 农产品批发价格总指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,CHANGERATE_1Y,\"\n        \"CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMI00009274\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.drop_duplicates(inplace=True)\n    big_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df[\"最新值\"] = pd.to_numeric(big_df[\"最新值\"])\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"])\n    big_df[\"近3月涨跌幅\"] = pd.to_numeric(big_df[\"近3月涨跌幅\"])\n    big_df[\"近6月涨跌幅\"] = pd.to_numeric(big_df[\"近6月涨跌幅\"])\n    big_df[\"近1年涨跌幅\"] = pd.to_numeric(big_df[\"近1年涨跌幅\"])\n    big_df[\"近2年涨跌幅\"] = pd.to_numeric(big_df[\"近2年涨跌幅\"])\n    big_df[\"近3年涨跌幅\"] = pd.to_numeric(big_df[\"近3年涨跌幅\"])\n    big_df.sort_values([\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef macro_china_agricultural_index() -> pd.DataFrame:\n    \"\"\"\n    农副指数\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00662543.html\n    :return: 农副指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,CHANGERATE_1Y,\"\n        \"CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMI00662543\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.drop_duplicates(inplace=True)\n    big_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df[\"最新值\"] = pd.to_numeric(big_df[\"最新值\"])\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"])\n    big_df[\"近3月涨跌幅\"] = pd.to_numeric(big_df[\"近3月涨跌幅\"])\n    big_df[\"近6月涨跌幅\"] = pd.to_numeric(big_df[\"近6月涨跌幅\"])\n    big_df[\"近1年涨跌幅\"] = pd.to_numeric(big_df[\"近1年涨跌幅\"])\n    big_df[\"近2年涨跌幅\"] = pd.to_numeric(big_df[\"近2年涨跌幅\"])\n    big_df[\"近3年涨跌幅\"] = pd.to_numeric(big_df[\"近3年涨跌幅\"])\n    big_df.sort_values([\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef macro_china_energy_index() -> pd.DataFrame:\n    \"\"\"\n    能源指数\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00662539.html\n    :return: 能源指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,CHANGERATE_1Y,\"\n        \"CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMI00662539\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.drop_duplicates(inplace=True)\n    big_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df[\"最新值\"] = pd.to_numeric(big_df[\"最新值\"])\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"])\n    big_df[\"近3月涨跌幅\"] = pd.to_numeric(big_df[\"近3月涨跌幅\"])\n    big_df[\"近6月涨跌幅\"] = pd.to_numeric(big_df[\"近6月涨跌幅\"])\n    big_df[\"近1年涨跌幅\"] = pd.to_numeric(big_df[\"近1年涨跌幅\"])\n    big_df[\"近2年涨跌幅\"] = pd.to_numeric(big_df[\"近2年涨跌幅\"])\n    big_df[\"近3年涨跌幅\"] = pd.to_numeric(big_df[\"近3年涨跌幅\"])\n    big_df.sort_values([\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef macro_china_commodity_price_index() -> pd.DataFrame:\n    \"\"\"\n    大宗商品价格\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00662535.html\n    :return: 大宗商品价格\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,CHANGERATE_1Y,\"\n        \"CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMI00662535\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.drop_duplicates(inplace=True)\n    big_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df[\"最新值\"] = pd.to_numeric(big_df[\"最新值\"])\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"])\n    big_df[\"近3月涨跌幅\"] = pd.to_numeric(big_df[\"近3月涨跌幅\"])\n    big_df[\"近6月涨跌幅\"] = pd.to_numeric(big_df[\"近6月涨跌幅\"])\n    big_df[\"近1年涨跌幅\"] = pd.to_numeric(big_df[\"近1年涨跌幅\"])\n    big_df[\"近2年涨跌幅\"] = pd.to_numeric(big_df[\"近2年涨跌幅\"])\n    big_df[\"近3年涨跌幅\"] = pd.to_numeric(big_df[\"近3年涨跌幅\"])\n    big_df.sort_values([\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef macro_global_sox_index() -> pd.DataFrame:\n    \"\"\"\n    费城半导体指数\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00055562.html\n    :return: 费城半导体指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,CHANGERATE_1Y,\"\n        \"CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMI00055562\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.drop_duplicates(inplace=True)\n    big_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df[\"最新值\"] = pd.to_numeric(big_df[\"最新值\"])\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"])\n    big_df[\"近3月涨跌幅\"] = pd.to_numeric(big_df[\"近3月涨跌幅\"])\n    big_df[\"近6月涨跌幅\"] = pd.to_numeric(big_df[\"近6月涨跌幅\"])\n    big_df[\"近1年涨跌幅\"] = pd.to_numeric(big_df[\"近1年涨跌幅\"])\n    big_df[\"近2年涨跌幅\"] = pd.to_numeric(big_df[\"近2年涨跌幅\"])\n    big_df[\"近3年涨跌幅\"] = pd.to_numeric(big_df[\"近3年涨跌幅\"])\n    big_df.sort_values([\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef macro_china_yw_electronic_index() -> pd.DataFrame:\n    \"\"\"\n    义乌小商品指数-电子元器件\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00055551.html\n    :return: 义乌小商品指数-电子元器件\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,CHANGERATE_1Y,\"\n        \"CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMI00055551\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.drop_duplicates(inplace=True)\n    big_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df[\"最新值\"] = pd.to_numeric(big_df[\"最新值\"])\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"])\n    big_df[\"近3月涨跌幅\"] = pd.to_numeric(big_df[\"近3月涨跌幅\"])\n    big_df[\"近6月涨跌幅\"] = pd.to_numeric(big_df[\"近6月涨跌幅\"])\n    big_df[\"近1年涨跌幅\"] = pd.to_numeric(big_df[\"近1年涨跌幅\"])\n    big_df[\"近2年涨跌幅\"] = pd.to_numeric(big_df[\"近2年涨跌幅\"])\n    big_df[\"近3年涨跌幅\"] = pd.to_numeric(big_df[\"近3年涨跌幅\"])\n    big_df.sort_values([\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef macro_china_construction_index() -> pd.DataFrame:\n    \"\"\"\n    建材指数\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00662541.html\n    :return: 建材指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(action=\"ignore\", category=FutureWarning)\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,\"\n        \"CHANGERATE_1Y,CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMI00662541\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.drop_duplicates(inplace=True)\n    big_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df[\"最新值\"] = pd.to_numeric(big_df[\"最新值\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"近3月涨跌幅\"] = pd.to_numeric(big_df[\"近3月涨跌幅\"], errors=\"coerce\")\n    big_df[\"近6月涨跌幅\"] = pd.to_numeric(big_df[\"近6月涨跌幅\"], errors=\"coerce\")\n    big_df[\"近1年涨跌幅\"] = pd.to_numeric(big_df[\"近1年涨跌幅\"], errors=\"coerce\")\n    big_df[\"近2年涨跌幅\"] = pd.to_numeric(big_df[\"近2年涨跌幅\"], errors=\"coerce\")\n    big_df[\"近3年涨跌幅\"] = pd.to_numeric(big_df[\"近3年涨跌幅\"], errors=\"coerce\")\n    big_df.sort_values(by=[\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef macro_china_construction_price_index() -> pd.DataFrame:\n    \"\"\"\n    建材价格指数\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00237146.html\n    :return: 建材价格指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,CHANGERATE_1Y,\"\n        \"CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMI00237146\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.drop_duplicates(inplace=True)\n    big_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df[\"最新值\"] = pd.to_numeric(big_df[\"最新值\"])\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"])\n    big_df[\"近3月涨跌幅\"] = pd.to_numeric(big_df[\"近3月涨跌幅\"])\n    big_df[\"近6月涨跌幅\"] = pd.to_numeric(big_df[\"近6月涨跌幅\"])\n    big_df[\"近1年涨跌幅\"] = pd.to_numeric(big_df[\"近1年涨跌幅\"])\n    big_df[\"近2年涨跌幅\"] = pd.to_numeric(big_df[\"近2年涨跌幅\"])\n    big_df[\"近3年涨跌幅\"] = pd.to_numeric(big_df[\"近3年涨跌幅\"])\n    big_df.sort_values([\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef macro_china_lpi_index() -> pd.DataFrame:\n    \"\"\"\n    物流景气指数\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00352262.html\n    :return: 物流景气指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,CHANGERATE_1Y,\"\n        \"CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMI00352262\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.drop_duplicates(inplace=True)\n    big_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df[\"最新值\"] = pd.to_numeric(big_df[\"最新值\"])\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"])\n    big_df[\"近3月涨跌幅\"] = pd.to_numeric(big_df[\"近3月涨跌幅\"])\n    big_df[\"近6月涨跌幅\"] = pd.to_numeric(big_df[\"近6月涨跌幅\"])\n    big_df[\"近1年涨跌幅\"] = pd.to_numeric(big_df[\"近1年涨跌幅\"])\n    big_df[\"近2年涨跌幅\"] = pd.to_numeric(big_df[\"近2年涨跌幅\"])\n    big_df[\"近3年涨跌幅\"] = pd.to_numeric(big_df[\"近3年涨跌幅\"])\n    big_df.sort_values([\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef macro_china_bdti_index() -> pd.DataFrame:\n    \"\"\"\n    原油运输指数\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00107668.html\n    :return: 原油运输指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,CHANGERATE_1Y,\"\n        \"CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMI00107668\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.drop_duplicates(inplace=True)\n    big_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df[\"最新值\"] = pd.to_numeric(big_df[\"最新值\"])\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"])\n    big_df[\"近3月涨跌幅\"] = pd.to_numeric(big_df[\"近3月涨跌幅\"])\n    big_df[\"近6月涨跌幅\"] = pd.to_numeric(big_df[\"近6月涨跌幅\"])\n    big_df[\"近1年涨跌幅\"] = pd.to_numeric(big_df[\"近1年涨跌幅\"])\n    big_df[\"近2年涨跌幅\"] = pd.to_numeric(big_df[\"近2年涨跌幅\"])\n    big_df[\"近3年涨跌幅\"] = pd.to_numeric(big_df[\"近3年涨跌幅\"])\n    big_df.sort_values([\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef macro_china_bsi_index() -> pd.DataFrame:\n    \"\"\"\n    超灵便型船运价指数\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00107667.html\n    :return: 超灵便型船运价指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,CHANGERATE_1Y,\"\n        \"CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMI00107667\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.drop_duplicates(inplace=True)\n    big_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df[\"最新值\"] = pd.to_numeric(big_df[\"最新值\"])\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"])\n    big_df[\"近3月涨跌幅\"] = pd.to_numeric(big_df[\"近3月涨跌幅\"])\n    big_df[\"近6月涨跌幅\"] = pd.to_numeric(big_df[\"近6月涨跌幅\"])\n    big_df[\"近1年涨跌幅\"] = pd.to_numeric(big_df[\"近1年涨跌幅\"])\n    big_df[\"近2年涨跌幅\"] = pd.to_numeric(big_df[\"近2年涨跌幅\"])\n    big_df[\"近3年涨跌幅\"] = pd.to_numeric(big_df[\"近3年涨跌幅\"])\n    big_df.sort_values([\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef _em_macro_1(em_id) -> pd.DataFrame:\n    \"\"\"\n    东财宏观数据的一种通用函数\n    :return: 处理后的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    ind_id = '\"' + em_id + '\"'\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,\"\n        \"CHANGERATE_6M,CHANGERATE_1Y,CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": \"(INDICATOR_ID=\" + ind_id + \")\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.drop_duplicates(inplace=True)\n    big_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df[\"最新值\"] = pd.to_numeric(big_df[\"最新值\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"近3月涨跌幅\"] = pd.to_numeric(big_df[\"近3月涨跌幅\"], errors=\"coerce\")\n    big_df[\"近6月涨跌幅\"] = pd.to_numeric(big_df[\"近6月涨跌幅\"], errors=\"coerce\")\n    big_df[\"近1年涨跌幅\"] = pd.to_numeric(big_df[\"近1年涨跌幅\"], errors=\"coerce\")\n    big_df[\"近2年涨跌幅\"] = pd.to_numeric(big_df[\"近2年涨跌幅\"], errors=\"coerce\")\n    big_df[\"近3年涨跌幅\"] = pd.to_numeric(big_df[\"近3年涨跌幅\"], errors=\"coerce\")\n    big_df.sort_values(by=[\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef macro_shipping_bci() -> pd.DataFrame:\n    \"\"\"\n    海岬型运费指数(BCI)\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00107666.html\n    :return: 海岬型运费指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    ts = _em_macro_1(\"EMI00107666\")\n    return ts\n\n\ndef macro_shipping_bdi() -> pd.DataFrame:\n    \"\"\"\n    波罗的海干散货指数(BDI)\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00107664.html\n    :return: 波罗的海干散货指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    ts = _em_macro_1(\"EMI00107664\")\n    return ts\n\n\ndef macro_shipping_bpi() -> pd.DataFrame:\n    \"\"\"\n    巴拿马型运费指数(BPI)\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00107665.html\n    :return: 巴拿马型运费指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    ts = _em_macro_1(\"EMI00107665\")\n    return ts\n\n\ndef macro_shipping_bcti() -> pd.DataFrame:\n    \"\"\"\n    成品油运输指数（BCTI）\n    https://data.eastmoney.com/cjsj/hyzs_list_EMI00107669.html\n    :return: 成品油运输指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    ts = _em_macro_1(\"EMI00107669\")\n    return ts\n\n\ndef macro_china_new_financial_credit() -> pd.DataFrame:\n    \"\"\"\n    中国-新增信贷数据\n    https://data.eastmoney.com/cjsj/xzxd.html\n    :return: 新增信贷数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,RMB_LOAN,RMB_LOAN_SAME,RMB_LOAN_SEQUENTIAL,\"\n        \"RMB_LOAN_ACCUMULATE,LOAN_ACCUMULATE_SAME\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_RMB_LOAN\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n\n    temp_df.columns = [\n        \"-\",\n        \"月份\",\n        \"当月\",\n        \"当月-同比增长\",\n        \"当月-环比增长\",\n        \"累计\",\n        \"累计-同比增长\",\n    ]\n    temp_df = temp_df[\n        [\"月份\", \"当月\", \"当月-同比增长\", \"当月-环比增长\", \"累计\", \"累计-同比增长\"]\n    ]\n\n    temp_df[\"当月\"] = pd.to_numeric(temp_df[\"当月\"], errors=\"coerce\")\n    temp_df[\"当月-同比增长\"] = pd.to_numeric(temp_df[\"当月-同比增长\"], errors=\"coerce\")\n    temp_df[\"当月-环比增长\"] = pd.to_numeric(temp_df[\"当月-环比增长\"], errors=\"coerce\")\n    temp_df[\"累计\"] = pd.to_numeric(temp_df[\"累计\"], errors=\"coerce\")\n    temp_df[\"累计-同比增长\"] = pd.to_numeric(temp_df[\"累计-同比增长\"], errors=\"coerce\")\n\n    return temp_df\n\n\ndef macro_china_fx_gold() -> pd.DataFrame:\n    \"\"\"\n    东方财富-外汇和黄金储备\n    https://data.eastmoney.com/cjsj/hjwh.html\n    :return: 外汇和黄金储备\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/81.0.4044.138 Safari/537.36\",\n    }\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,GOLD_RESERVES,GOLD_RESERVES_SAME,\"\n        \"GOLD_RESERVES_SEQUENTIAL,FOREX,FOREX_SAME,FOREX_SEQUENTIAL\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"1000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_GOLD_CURRENCY\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"月份\",\n        \"黄金储备-数值\",\n        \"黄金储备-同比\",\n        \"黄金储备-环比\",\n        \"国家外汇储备-数值\",\n        \"国家外汇储备-同比\",\n        \"国家外汇储备-环比\",\n    ]\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"黄金储备-数值\",\n            \"黄金储备-同比\",\n            \"黄金储备-环比\",\n            \"国家外汇储备-数值\",\n            \"国家外汇储备-同比\",\n            \"国家外汇储备-环比\",\n        ]\n    ]\n    temp_df[\"国家外汇储备-数值\"] = pd.to_numeric(\n        temp_df[\"国家外汇储备-数值\"], errors=\"coerce\"\n    )\n    temp_df[\"国家外汇储备-同比\"] = pd.to_numeric(\n        temp_df[\"国家外汇储备-同比\"], errors=\"coerce\"\n    )\n    temp_df[\"国家外汇储备-环比\"] = pd.to_numeric(\n        temp_df[\"国家外汇储备-环比\"], errors=\"coerce\"\n    )\n    temp_df[\"黄金储备-数值\"] = pd.to_numeric(temp_df[\"黄金储备-数值\"], errors=\"coerce\")\n    temp_df[\"黄金储备-同比\"] = pd.to_numeric(temp_df[\"黄金储备-同比\"], errors=\"coerce\")\n    temp_df[\"黄金储备-环比\"] = pd.to_numeric(temp_df[\"黄金储备-环比\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"月份\"], inplace=True, ignore_index=True)\n    return temp_df\n\n\ndef macro_china_stock_market_cap() -> pd.DataFrame:\n    \"\"\"\n    东方财富-全国股票交易统计表\n    https://data.eastmoney.com/cjsj/gpjytj.html\n    :return: 全国股票交易统计表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/81.0.4044.138 Safari/537.36\",\n    }\n    params = {\n        \"reportName\": \"RPT_ECONOMY_STOCK_STATISTICS\",\n        \"columns\": \"REPORT_DATE,TIME,TOTAL_SHARES_SH,TOTAL_MARKE_SH,DEAL_AMOUNT_SH,VOLUME_SH,HIGH_INDEX_SH,\"\n        \"LOW_INDEX_SH,TOTAL_SZARES_SZ,TOTAL_MARKE_SZ,DEAL_AMOUNT_SZ,VOLUME_SZ,HIGH_INDEX_SZ,LOW_INDEX_SZ\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"1000\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"数据日期\",\n        \"发行总股本-上海\",\n        \"市价总值-上海\",\n        \"成交金额-上海\",\n        \"成交量-上海\",\n        \"A股最高综合股价指数-上海\",\n        \"A股最低综合股价指数-上海\",\n        \"发行总股本-深圳\",\n        \"市价总值-深圳\",\n        \"成交金额-深圳\",\n        \"成交量-深圳\",\n        \"A股最高综合股价指数-深圳\",\n        \"A股最低综合股价指数-深圳\",\n    ]\n    temp_df = temp_df[\n        [\n            \"数据日期\",\n            \"发行总股本-上海\",\n            \"发行总股本-深圳\",\n            \"市价总值-上海\",\n            \"市价总值-深圳\",\n            \"成交金额-上海\",\n            \"成交金额-深圳\",\n            \"成交量-上海\",\n            \"成交量-深圳\",\n            \"A股最高综合股价指数-上海\",\n            \"A股最高综合股价指数-深圳\",\n            \"A股最低综合股价指数-上海\",\n            \"A股最低综合股价指数-深圳\",\n        ]\n    ]\n    temp_df[\"发行总股本-上海\"] = pd.to_numeric(\n        temp_df[\"发行总股本-上海\"], errors=\"coerce\"\n    )\n    temp_df[\"发行总股本-深圳\"] = pd.to_numeric(\n        temp_df[\"发行总股本-深圳\"], errors=\"coerce\"\n    )\n    temp_df[\"市价总值-上海\"] = pd.to_numeric(temp_df[\"市价总值-上海\"], errors=\"coerce\")\n    temp_df[\"市价总值-深圳\"] = pd.to_numeric(temp_df[\"市价总值-深圳\"], errors=\"coerce\")\n    temp_df[\"成交金额-上海\"] = pd.to_numeric(temp_df[\"成交金额-上海\"], errors=\"coerce\")\n    temp_df[\"成交金额-深圳\"] = pd.to_numeric(temp_df[\"成交金额-深圳\"], errors=\"coerce\")\n    temp_df[\"成交量-上海\"] = pd.to_numeric(temp_df[\"成交量-上海\"], errors=\"coerce\")\n    temp_df[\"成交量-深圳\"] = pd.to_numeric(temp_df[\"成交量-深圳\"], errors=\"coerce\")\n    temp_df[\"A股最高综合股价指数-上海\"] = pd.to_numeric(\n        temp_df[\"A股最高综合股价指数-上海\"], errors=\"coerce\"\n    )\n    temp_df[\"A股最高综合股价指数-深圳\"] = pd.to_numeric(\n        temp_df[\"A股最高综合股价指数-深圳\"], errors=\"coerce\"\n    )\n    temp_df[\"A股最低综合股价指数-上海\"] = pd.to_numeric(\n        temp_df[\"A股最低综合股价指数-上海\"], errors=\"coerce\"\n    )\n    temp_df[\"A股最低综合股价指数-深圳\"] = pd.to_numeric(\n        temp_df[\"A股最低综合股价指数-深圳\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef macro_china_money_supply() -> pd.DataFrame:\n    \"\"\"\n    东方财富-货币供应量\n    https://data.eastmoney.com/cjsj/hbgyl.html\n    :return: 货币供应量\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,BASIC_CURRENCY,BASIC_CURRENCY_SAME,BASIC_CURRENCY_SEQUENTIAL,CURRENCY,\"\n        \"CURRENCY_SAME,CURRENCY_SEQUENTIAL,FREE_CASH,FREE_CASH_SAME,FREE_CASH_SEQUENTIAL\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_CURRENCY_SUPPLY\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"月份\",\n        \"货币和准货币(M2)-数量(亿元)\",\n        \"货币和准货币(M2)-同比增长\",\n        \"货币和准货币(M2)-环比增长\",\n        \"货币(M1)-数量(亿元)\",\n        \"货币(M1)-同比增长\",\n        \"货币(M1)-环比增长\",\n        \"流通中的现金(M0)-数量(亿元)\",\n        \"流通中的现金(M0)-同比增长\",\n        \"流通中的现金(M0)-环比增长\",\n    ]\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"货币和准货币(M2)-数量(亿元)\",\n            \"货币和准货币(M2)-同比增长\",\n            \"货币和准货币(M2)-环比增长\",\n            \"货币(M1)-数量(亿元)\",\n            \"货币(M1)-同比增长\",\n            \"货币(M1)-环比增长\",\n            \"流通中的现金(M0)-数量(亿元)\",\n            \"流通中的现金(M0)-同比增长\",\n            \"流通中的现金(M0)-环比增长\",\n        ]\n    ]\n\n    temp_df[\"货币和准货币(M2)-数量(亿元)\"] = pd.to_numeric(\n        temp_df[\"货币和准货币(M2)-数量(亿元)\"], errors=\"coerce\"\n    )\n    temp_df[\"货币和准货币(M2)-同比增长\"] = pd.to_numeric(\n        temp_df[\"货币和准货币(M2)-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"货币和准货币(M2)-环比增长\"] = pd.to_numeric(\n        temp_df[\"货币和准货币(M2)-环比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"货币(M1)-数量(亿元)\"] = pd.to_numeric(\n        temp_df[\"货币(M1)-数量(亿元)\"], errors=\"coerce\"\n    )\n    temp_df[\"货币(M1)-同比增长\"] = pd.to_numeric(\n        temp_df[\"货币(M1)-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"货币(M1)-环比增长\"] = pd.to_numeric(\n        temp_df[\"货币(M1)-环比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"流通中的现金(M0)-数量(亿元)\"] = pd.to_numeric(\n        temp_df[\"流通中的现金(M0)-数量(亿元)\"], errors=\"coerce\"\n    )\n    temp_df[\"流通中的现金(M0)-同比增长\"] = pd.to_numeric(\n        temp_df[\"流通中的现金(M0)-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"流通中的现金(M0)-环比增长\"] = pd.to_numeric(\n        temp_df[\"流通中的现金(M0)-环比增长\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef macro_china_cpi() -> pd.DataFrame:\n    \"\"\"\n    东方财富-中国居民消费价格指数\n    https://data.eastmoney.com/cjsj/cpi.html\n    :return: 东方财富-中国居民消费价格指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,NATIONAL_SAME,NATIONAL_BASE,NATIONAL_SEQUENTIAL,NATIONAL_ACCUMULATE,\"\n        \"CITY_SAME,CITY_BASE,CITY_SEQUENTIAL,CITY_ACCUMULATE,RURAL_SAME,\"\n        \"RURAL_BASE,RURAL_SEQUENTIAL,RURAL_ACCUMULATE\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_CPI\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"月份\",\n        \"全国-同比增长\",\n        \"全国-当月\",\n        \"全国-环比增长\",\n        \"全国-累计\",\n        \"城市-同比增长\",\n        \"城市-当月\",\n        \"城市-环比增长\",\n        \"城市-累计\",\n        \"农村-同比增长\",\n        \"农村-当月\",\n        \"农村-环比增长\",\n        \"农村-累计\",\n    ]\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"全国-当月\",\n            \"全国-同比增长\",\n            \"全国-环比增长\",\n            \"全国-累计\",\n            \"城市-当月\",\n            \"城市-同比增长\",\n            \"城市-环比增长\",\n            \"城市-累计\",\n            \"农村-当月\",\n            \"农村-同比增长\",\n            \"农村-环比增长\",\n            \"农村-累计\",\n        ]\n    ]\n    temp_df[\"全国-当月\"] = pd.to_numeric(temp_df[\"全国-当月\"], errors=\"coerce\")\n    temp_df[\"全国-同比增长\"] = pd.to_numeric(temp_df[\"全国-同比增长\"], errors=\"coerce\")\n    temp_df[\"全国-环比增长\"] = pd.to_numeric(temp_df[\"全国-环比增长\"], errors=\"coerce\")\n    temp_df[\"全国-累计\"] = pd.to_numeric(temp_df[\"全国-累计\"], errors=\"coerce\")\n    temp_df[\"城市-当月\"] = pd.to_numeric(temp_df[\"城市-当月\"], errors=\"coerce\")\n    temp_df[\"城市-同比增长\"] = pd.to_numeric(temp_df[\"城市-同比增长\"], errors=\"coerce\")\n    temp_df[\"城市-环比增长\"] = pd.to_numeric(temp_df[\"城市-环比增长\"], errors=\"coerce\")\n    temp_df[\"城市-累计\"] = pd.to_numeric(temp_df[\"城市-累计\"], errors=\"coerce\")\n    temp_df[\"农村-当月\"] = pd.to_numeric(temp_df[\"农村-当月\"], errors=\"coerce\")\n    temp_df[\"农村-同比增长\"] = pd.to_numeric(temp_df[\"农村-同比增长\"], errors=\"coerce\")\n    temp_df[\"农村-环比增长\"] = pd.to_numeric(temp_df[\"农村-环比增长\"], errors=\"coerce\")\n    temp_df[\"农村-累计\"] = pd.to_numeric(temp_df[\"农村-累计\"], errors=\"coerce\")\n\n    return temp_df\n\n\ndef macro_china_gdp() -> pd.DataFrame:\n    \"\"\"\n    东方财富-中国国内生产总值\n    https://data.eastmoney.com/cjsj/gdp.html\n    :return: 东方财富中国国内生产总值\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,DOMESTICL_PRODUCT_BASE,FIRST_PRODUCT_BASE,SECOND_PRODUCT_BASE,\"\n        \"THIRD_PRODUCT_BASE,SUM_SAME,FIRST_SAME,SECOND_SAME,THIRD_SAME\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_GDP\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"季度\",\n        \"国内生产总值-绝对值\",\n        \"第一产业-绝对值\",\n        \"第二产业-绝对值\",\n        \"第三产业-绝对值\",\n        \"国内生产总值-同比增长\",\n        \"第一产业-同比增长\",\n        \"第二产业-同比增长\",\n        \"第三产业-同比增长\",\n    ]\n    temp_df = temp_df[\n        [\n            \"季度\",\n            \"国内生产总值-绝对值\",\n            \"国内生产总值-同比增长\",\n            \"第一产业-绝对值\",\n            \"第一产业-同比增长\",\n            \"第二产业-绝对值\",\n            \"第二产业-同比增长\",\n            \"第三产业-绝对值\",\n            \"第三产业-同比增长\",\n        ]\n    ]\n    temp_df[\"国内生产总值-绝对值\"] = pd.to_numeric(\n        temp_df[\"国内生产总值-绝对值\"], errors=\"coerce\"\n    )\n    temp_df[\"国内生产总值-同比增长\"] = pd.to_numeric(\n        temp_df[\"国内生产总值-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"第一产业-绝对值\"] = pd.to_numeric(\n        temp_df[\"第一产业-绝对值\"], errors=\"coerce\"\n    )\n    temp_df[\"第一产业-同比增长\"] = pd.to_numeric(\n        temp_df[\"第一产业-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"第二产业-绝对值\"] = pd.to_numeric(\n        temp_df[\"第二产业-绝对值\"], errors=\"coerce\"\n    )\n    temp_df[\"第二产业-同比增长\"] = pd.to_numeric(\n        temp_df[\"第二产业-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"第三产业-绝对值\"] = pd.to_numeric(\n        temp_df[\"第三产业-绝对值\"], errors=\"coerce\"\n    )\n    temp_df[\"第三产业-同比增长\"] = pd.to_numeric(\n        temp_df[\"第三产业-同比增长\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef macro_china_ppi() -> pd.DataFrame:\n    \"\"\"\n    东方财富-中国工业品出厂价格指数\n    https://data.eastmoney.com/cjsj/ppi.html\n    :return: 东方财富中国工业品出厂价格指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,BASE,BASE_SAME,BASE_ACCUMULATE\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_PPI\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"月份\",\n        \"当月\",\n        \"当月同比增长\",\n        \"累计\",\n    ]\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"当月\",\n            \"当月同比增长\",\n            \"累计\",\n        ]\n    ]\n    temp_df[\"当月\"] = pd.to_numeric(temp_df[\"当月\"], errors=\"coerce\")\n    temp_df[\"当月同比增长\"] = pd.to_numeric(temp_df[\"当月同比增长\"], errors=\"coerce\")\n    temp_df[\"累计\"] = pd.to_numeric(temp_df[\"累计\"], errors=\"coerce\")\n    return temp_df\n\n\ndef macro_china_pmi() -> pd.DataFrame:\n    \"\"\"\n    东方财富-中国采购经理人指数\n    https://data.eastmoney.com/cjsj/pmi.html\n    :return: 东方财富中国采购经理人指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,MAKE_INDEX,MAKE_SAME,NMAKE_INDEX,NMAKE_SAME\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_PMI\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"月份\",\n        \"制造业-指数\",\n        \"制造业-同比增长\",\n        \"非制造业-指数\",\n        \"非制造业-同比增长\",\n    ]\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"制造业-指数\",\n            \"制造业-同比增长\",\n            \"非制造业-指数\",\n            \"非制造业-同比增长\",\n        ]\n    ]\n    temp_df[\"制造业-指数\"] = pd.to_numeric(temp_df[\"制造业-指数\"], errors=\"coerce\")\n    temp_df[\"制造业-同比增长\"] = pd.to_numeric(\n        temp_df[\"制造业-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"非制造业-指数\"] = pd.to_numeric(temp_df[\"非制造业-指数\"], errors=\"coerce\")\n    temp_df[\"非制造业-同比增长\"] = pd.to_numeric(\n        temp_df[\"非制造业-同比增长\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef macro_china_gdzctz() -> pd.DataFrame:\n    \"\"\"\n    东方财富-中国城镇固定资产投资\n    https://data.eastmoney.com/cjsj/gdzctz.html\n    :return: 东方财富中国城镇固定资产投资\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,BASE,BASE_SAME,BASE_SEQUENTIAL,BASE_ACCUMULATE\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_ASSET_INVEST\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n\n    temp_df.columns = [\n        \"-\",\n        \"月份\",\n        \"当月\",\n        \"同比增长\",\n        \"环比增长\",\n        \"自年初累计\",\n    ]\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"当月\",\n            \"同比增长\",\n            \"环比增长\",\n            \"自年初累计\",\n        ]\n    ]\n    temp_df[\"当月\"] = pd.to_numeric(temp_df[\"当月\"], errors=\"coerce\")\n    temp_df[\"同比增长\"] = pd.to_numeric(temp_df[\"同比增长\"], errors=\"coerce\")\n    temp_df[\"环比增长\"] = pd.to_numeric(temp_df[\"环比增长\"], errors=\"coerce\")\n    temp_df[\"自年初累计\"] = pd.to_numeric(temp_df[\"自年初累计\"], errors=\"coerce\")\n    return temp_df\n\n\ndef macro_china_hgjck() -> pd.DataFrame:\n    \"\"\"\n    东方财富-海关进出口增减情况一览表\n    https://data.eastmoney.com/cjsj/hgjck.html\n    :return: 东方财富-海关进出口增减情况一览表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,EXIT_BASE,IMPORT_BASE,EXIT_BASE_SAME,IMPORT_BASE_SAME,\"\n        \"EXIT_BASE_SEQUENTIAL,IMPORT_BASE_SEQUENTIAL,EXIT_ACCUMULATE,\"\n        \"IMPORT_ACCUMULATE,EXIT_ACCUMULATE_SAME,IMPORT_ACCUMULATE_SAME\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_CUSTOMS\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.rename(\n        columns={\n            \"REPORT_DATE\": \"-\",\n            \"TIME\": \"月份\",\n            \"EXIT_BASE\": \"当月出口额-金额\",\n            \"IMPORT_BASE\": \"当月进口额-金额\",\n            \"EXIT_BASE_SAME\": \"当月出口额-同比增长\",\n            \"IMPORT_BASE_SAME\": \"当月进口额-同比增长\",\n            \"EXIT_BASE_SEQUENTIAL\": \"当月出口额-环比增长\",\n            \"IMPORT_BASE_SEQUENTIAL\": \"当月进口额-环比增长\",\n            \"EXIT_ACCUMULATE\": \"累计出口额-金额\",\n            \"IMPORT_ACCUMULATE\": \"累计进口额-金额\",\n            \"EXIT_ACCUMULATE_SAME\": \"累计出口额-同比增长\",\n            \"IMPORT_ACCUMULATE_SAME\": \"累计进口额-同比增长\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"当月出口额-金额\",\n            \"当月出口额-同比增长\",\n            \"当月出口额-环比增长\",\n            \"当月进口额-金额\",\n            \"当月进口额-同比增长\",\n            \"当月进口额-环比增长\",\n            \"累计出口额-金额\",\n            \"累计出口额-同比增长\",\n            \"累计进口额-金额\",\n            \"累计进口额-同比增长\",\n        ]\n    ]\n    temp_df[\"当月出口额-金额\"] = pd.to_numeric(\n        temp_df[\"当月出口额-金额\"], errors=\"coerce\"\n    )\n    temp_df[\"当月出口额-同比增长\"] = pd.to_numeric(\n        temp_df[\"当月出口额-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"当月出口额-环比增长\"] = pd.to_numeric(\n        temp_df[\"当月出口额-环比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"当月进口额-金额\"] = pd.to_numeric(\n        temp_df[\"当月进口额-金额\"], errors=\"coerce\"\n    )\n    temp_df[\"当月进口额-同比增长\"] = pd.to_numeric(\n        temp_df[\"当月进口额-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"当月进口额-环比增长\"] = pd.to_numeric(\n        temp_df[\"当月进口额-环比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"累计出口额-金额\"] = pd.to_numeric(\n        temp_df[\"累计出口额-金额\"], errors=\"coerce\"\n    )\n    temp_df[\"累计出口额-同比增长\"] = pd.to_numeric(\n        temp_df[\"累计出口额-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"累计进口额-金额\"] = pd.to_numeric(\n        temp_df[\"累计进口额-金额\"], errors=\"coerce\"\n    )\n    temp_df[\"累计进口额-同比增长\"] = pd.to_numeric(\n        temp_df[\"累计进口额-同比增长\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef macro_china_czsr() -> pd.DataFrame:\n    \"\"\"\n    东方财富-财政收入\n    https://data.eastmoney.com/cjsj/czsr.html\n    :return: 东方财富-财政收入\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,BASE,BASE_SAME,BASE_SEQUENTIAL,BASE_ACCUMULATE,ACCUMULATE_SAME\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_INCOME\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n\n    temp_df.columns = [\n        \"-\",\n        \"月份\",\n        \"当月\",\n        \"当月-同比增长\",\n        \"当月-环比增长\",\n        \"累计\",\n        \"累计-同比增长\",\n    ]\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"当月\",\n            \"当月-同比增长\",\n            \"当月-环比增长\",\n            \"累计\",\n            \"累计-同比增长\",\n        ]\n    ]\n    temp_df[\"当月\"] = pd.to_numeric(temp_df[\"当月\"], errors=\"coerce\")\n    temp_df[\"当月-同比增长\"] = pd.to_numeric(temp_df[\"当月-同比增长\"], errors=\"coerce\")\n    temp_df[\"当月-环比增长\"] = pd.to_numeric(temp_df[\"当月-环比增长\"], errors=\"coerce\")\n    temp_df[\"累计\"] = pd.to_numeric(temp_df[\"累计\"], errors=\"coerce\")\n    temp_df[\"累计-同比增长\"] = pd.to_numeric(temp_df[\"累计-同比增长\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"月份\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\ndef macro_china_whxd() -> pd.DataFrame:\n    \"\"\"\n    东方财富-外汇贷款数据\n    https://data.eastmoney.com/cjsj/whxd.html\n    :return: 东方财富-外汇贷款数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,BASE,BASE_SAME,BASE_SEQUENTIAL,BASE_ACCUMULATE\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_FOREX_LOAN\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n\n    temp_df.columns = [\n        \"-\",\n        \"月份\",\n        \"当月\",\n        \"同比增长\",\n        \"环比增长\",\n        \"累计\",\n    ]\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"当月\",\n            \"同比增长\",\n            \"环比增长\",\n            \"累计\",\n        ]\n    ]\n    temp_df[\"当月\"] = pd.to_numeric(temp_df[\"当月\"], errors=\"coerce\")\n    temp_df[\"同比增长\"] = pd.to_numeric(temp_df[\"同比增长\"], errors=\"coerce\")\n    temp_df[\"环比增长\"] = pd.to_numeric(temp_df[\"环比增长\"], errors=\"coerce\")\n    temp_df[\"累计\"] = pd.to_numeric(temp_df[\"累计\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"月份\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\ndef macro_china_wbck() -> pd.DataFrame:\n    \"\"\"\n    东方财富-本外币存款\n    https://data.eastmoney.com/cjsj/wbck.html\n    :return: 东方财富-本外币存款\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,BASE,BASE_SAME,BASE_SEQUENTIAL,BASE_ACCUMULATE\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_FOREX_DEPOSIT\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n\n    temp_df.columns = [\n        \"-\",\n        \"月份\",\n        \"当月\",\n        \"同比增长\",\n        \"环比增长\",\n        \"累计\",\n    ]\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"当月\",\n            \"同比增长\",\n            \"环比增长\",\n            \"累计\",\n        ]\n    ]\n    temp_df[\"当月\"] = pd.to_numeric(temp_df[\"当月\"], errors=\"coerce\")\n    temp_df[\"同比增长\"] = pd.to_numeric(temp_df[\"同比增长\"], errors=\"coerce\")\n    temp_df[\"环比增长\"] = pd.to_numeric(temp_df[\"环比增长\"], errors=\"coerce\")\n    temp_df[\"累计\"] = pd.to_numeric(temp_df[\"累计\"], errors=\"coerce\")\n    return temp_df\n\n\ndef macro_china_xfzxx() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-经济数据一览-消费者信心指数\n    https://data.eastmoney.com/cjsj/xfzxx.html\n    :return: 消费者信心指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,CONSUMERS_FAITH_INDEX,FAITH_INDEX_SAME,FAITH_INDEX_SEQUENTIAL,\"\n        \"CONSUMERS_ASTIS_INDEX,ASTIS_INDEX_SAME,ASTIS_INDEX_SEQUENTIAL,CONSUMERS_EXPECT_INDEX,\"\n        \"EXPECT_INDEX_SAME,EXPECT_INDEX_SEQUENTIAL\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_FAITH_INDEX\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n\n    temp_df.columns = [\n        \"-\",\n        \"月份\",\n        \"消费者信心指数-指数值\",\n        \"消费者信心指数-同比增长\",\n        \"消费者信心指数-环比增长\",\n        \"消费者满意指数-指数值\",\n        \"消费者满意指数-同比增长\",\n        \"消费者满意指数-环比增长\",\n        \"消费者预期指数-指数值\",\n        \"消费者预期指数-同比增长\",\n        \"消费者预期指数-环比增长\",\n    ]\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"消费者信心指数-指数值\",\n            \"消费者信心指数-同比增长\",\n            \"消费者信心指数-环比增长\",\n            \"消费者满意指数-指数值\",\n            \"消费者满意指数-同比增长\",\n            \"消费者满意指数-环比增长\",\n            \"消费者预期指数-指数值\",\n            \"消费者预期指数-同比增长\",\n            \"消费者预期指数-环比增长\",\n        ]\n    ]\n\n    temp_df[\"消费者信心指数-指数值\"] = pd.to_numeric(\n        temp_df[\"消费者信心指数-指数值\"], errors=\"coerce\"\n    )\n    temp_df[\"消费者信心指数-同比增长\"] = pd.to_numeric(\n        temp_df[\"消费者信心指数-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"消费者信心指数-环比增长\"] = pd.to_numeric(\n        temp_df[\"消费者信心指数-环比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"消费者满意指数-指数值\"] = pd.to_numeric(\n        temp_df[\"消费者满意指数-指数值\"], errors=\"coerce\"\n    )\n    temp_df[\"消费者满意指数-同比增长\"] = pd.to_numeric(\n        temp_df[\"消费者满意指数-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"消费者满意指数-环比增长\"] = pd.to_numeric(\n        temp_df[\"消费者满意指数-环比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"消费者预期指数-指数值\"] = pd.to_numeric(\n        temp_df[\"消费者满意指数-指数值\"], errors=\"coerce\"\n    )\n    temp_df[\"消费者预期指数-同比增长\"] = pd.to_numeric(\n        temp_df[\"消费者预期指数-同比增长\"], errors=\"coerce\"\n    )\n    temp_df[\"消费者预期指数-环比增长\"] = pd.to_numeric(\n        temp_df[\"消费者预期指数-环比增长\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef macro_china_gyzjz() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-经济数据-工业增加值增长\n    https://data.eastmoney.com/cjsj/gyzjz.html\n    :return: 工业增加值增长\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,BASE_SAME,BASE_ACCUMULATE\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_INDUS_GROW\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"发布时间\",\n        \"月份\",\n        \"同比增长\",\n        \"累计增长\",\n    ]\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"同比增长\",\n            \"累计增长\",\n            \"发布时间\",\n        ]\n    ]\n    temp_df[\"同比增长\"] = pd.to_numeric(temp_df[\"同比增长\"], errors=\"coerce\")\n    temp_df[\"累计增长\"] = pd.to_numeric(temp_df[\"累计增长\"], errors=\"coerce\")\n    temp_df[\"发布时间\"] = pd.to_datetime(temp_df[\"发布时间\"], errors=\"coerce\").dt.date\n    temp_df.sort_values([\"发布时间\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\ndef macro_china_reserve_requirement_ratio() -> pd.DataFrame:\n    \"\"\"\n    存款准备金率\n    https://data.eastmoney.com/cjsj/ckzbj.html\n    :return: 存款准备金率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"columns\": \"REPORT_DATE,PUBLISH_DATE,TRADE_DATE,INTEREST_RATE_BB,INTEREST_RATE_BA,CHANGE_RATE_B,\"\n        \"INTEREST_RATE_SB,INTEREST_RATE_SA,CHANGE_RATE_S,NEXT_SH_RATE,NEXT_SZ_RATE,REMARK\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"PUBLISH_DATE,TRADE_DATE\",\n        \"sortTypes\": \"-1,-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_DEPOSIT_RESERVE\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"公布时间\",\n        \"生效时间\",\n        \"大型金融机构-调整前\",\n        \"大型金融机构-调整后\",\n        \"大型金融机构-调整幅度\",\n        \"中小金融机构-调整前\",\n        \"中小金融机构-调整后\",\n        \"中小金融机构-调整幅度\",\n        \"消息公布次日指数涨跌-上证\",\n        \"消息公布次日指数涨跌-深证\",\n        \"备注\",\n    ]\n    temp_df = temp_df[\n        [\n            \"公布时间\",\n            \"生效时间\",\n            \"大型金融机构-调整前\",\n            \"大型金融机构-调整后\",\n            \"大型金融机构-调整幅度\",\n            \"中小金融机构-调整前\",\n            \"中小金融机构-调整后\",\n            \"中小金融机构-调整幅度\",\n            \"消息公布次日指数涨跌-上证\",\n            \"消息公布次日指数涨跌-深证\",\n            \"备注\",\n        ]\n    ]\n    temp_df[\"大型金融机构-调整前\"] = pd.to_numeric(\n        temp_df[\"大型金融机构-调整前\"], errors=\"coerce\"\n    )\n    temp_df[\"大型金融机构-调整后\"] = pd.to_numeric(\n        temp_df[\"大型金融机构-调整后\"], errors=\"coerce\"\n    )\n    temp_df[\"大型金融机构-调整幅度\"] = pd.to_numeric(\n        temp_df[\"大型金融机构-调整幅度\"], errors=\"coerce\"\n    )\n    temp_df[\"大型金融机构-调整前\"] = pd.to_numeric(\n        temp_df[\"大型金融机构-调整前\"], errors=\"coerce\"\n    )\n    temp_df[\"大型金融机构-调整后\"] = pd.to_numeric(\n        temp_df[\"大型金融机构-调整后\"], errors=\"coerce\"\n    )\n    temp_df[\"大型金融机构-调整幅度\"] = pd.to_numeric(\n        temp_df[\"大型金融机构-调整幅度\"], errors=\"coerce\"\n    )\n    temp_df[\"消息公布次日指数涨跌-上证\"] = pd.to_numeric(\n        temp_df[\"消息公布次日指数涨跌-上证\"], errors=\"coerce\"\n    )\n    temp_df[\"消息公布次日指数涨跌-深证\"] = pd.to_numeric(\n        temp_df[\"消息公布次日指数涨跌-深证\"], errors=\"coerce\"\n    )\n    temp_df[\"消息公布次日指数涨跌-深证\"] = pd.to_numeric(\n        temp_df[\"消息公布次日指数涨跌-深证\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef macro_china_consumer_goods_retail() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-社会消费品零售总额\n    https://data.eastmoney.com/cjsj/xfp.html\n    :return: 社会消费品零售总额\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/81.0.4044.138 Safari/537.36\",\n    }\n    params = {\n        \"columns\": \"REPORT_DATE,TIME,RETAIL_TOTAL,RETAIL_TOTAL_SAME,RETAIL_TOTAL_SEQUENTIAL,\"\n        \"RETAIL_TOTAL_ACCUMULATE,RETAIL_ACCUMULATE_SAME\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"1000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ECONOMY_TOTAL_RETAIL\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"月份\",\n        \"当月\",\n        \"同比增长\",\n        \"环比增长\",\n        \"累计\",\n        \"累计-同比增长\",\n    ]\n    temp_df = temp_df[\n        [\n            \"月份\",\n            \"当月\",\n            \"同比增长\",\n            \"环比增长\",\n            \"累计\",\n            \"累计-同比增长\",\n        ]\n    ]\n    temp_df[\"当月\"] = pd.to_numeric(temp_df[\"当月\"], errors=\"coerce\")\n    temp_df[\"同比增长\"] = pd.to_numeric(temp_df[\"同比增长\"], errors=\"coerce\")\n    temp_df[\"环比增长\"] = pd.to_numeric(temp_df[\"环比增长\"], errors=\"coerce\")\n    temp_df[\"累计\"] = pd.to_numeric(temp_df[\"累计\"], errors=\"coerce\")\n    temp_df[\"累计-同比增长\"] = pd.to_numeric(temp_df[\"累计-同比增长\"], errors=\"coerce\")\n    return temp_df\n\n\ndef macro_china_society_electricity() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-中国宏观经济数据-全社会用电分类情况表\n    https://finance.sina.com.cn/mac/#industry-6-0-31-1\n    :return: 全社会用电分类情况表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://quotes.sina.cn/mac/api/jsonp_v3.php/SINAREMOTECALLCALLBACK1601557771972/MacPage_Service.get_pagedata\"\n    params = {\n        \"cate\": \"industry\",\n        \"event\": \"6\",\n        \"from\": \"0\",\n        \"num\": \"31\",\n        \"condition\": \"\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n    page_num = math.ceil(int(data_json[\"count\"]) / 31)\n    big_df = pd.DataFrame(data_json[\"data\"])\n    for i in range(1, page_num):\n        params.update({\"from\": i * 31})\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n\n    big_df.columns = [\n        \"统计时间\",\n        \"全社会用电量\",\n        \"全社会用电量同比\",\n        \"各行业用电量合计\",\n        \"各行业用电量合计同比\",\n        \"第一产业用电量\",\n        \"第一产业用电量同比\",\n        \"第二产业用电量\",\n        \"第二产业用电量同比\",\n        \"第三产业用电量\",\n        \"第三产业用电量同比\",\n        \"城乡居民生活用电量合计\",\n        \"城乡居民生活用电量合计同比\",\n        \"城镇居民用电量\",\n        \"城镇居民用电量同比\",\n        \"乡村居民用电量\",\n        \"乡村居民用电量同比\",\n    ]\n    for item in big_df.columns[1:]:\n        big_df[item] = pd.to_numeric(big_df[item], errors=\"coerce\")\n    big_df.sort_values([\"统计时间\"], inplace=True, ignore_index=True)\n    return big_df\n\n\ndef macro_china_society_traffic_volume() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-中国宏观经济数据-全社会客货运输量\n    https://finance.sina.com.cn/mac/#industry-10-0-31-1\n    :return: 全社会客货运输量\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://quotes.sina.cn/mac/api/jsonp_v3.php/SINAREMOTECALLCALLBACK1601559094538/MacPage_Service.get_pagedata\"\n    params = {\n        \"cate\": \"industry\",\n        \"event\": \"10\",\n        \"from\": \"0\",\n        \"num\": \"31\",\n        \"condition\": \"\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n    page_num = math.ceil(int(data_json[\"count\"]) / 31)\n    big_df = pd.DataFrame(data_json[\"data\"][\"非累计\"])\n    tqdm = get_tqdm()\n    for i in tqdm(range(1, page_num), leave=False):\n        params.update({\"from\": i * 31})\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n        temp_df = pd.DataFrame(data_json[\"data\"][\"非累计\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.columns = [item[1] for item in data_json[\"config\"][\"all\"]]\n    big_df[\"货运量\"] = pd.to_numeric(big_df[\"货运量\"], errors=\"coerce\")\n    big_df[\"货运量同比增长\"] = pd.to_numeric(big_df[\"货运量同比增长\"], errors=\"coerce\")\n    big_df[\"货物周转量\"] = pd.to_numeric(big_df[\"货物周转量\"], errors=\"coerce\")\n    big_df[\"公里货物周转量同比增长\"] = pd.to_numeric(\n        big_df[\"公里货物周转量同比增长\"], errors=\"coerce\"\n    )\n    big_df[\"客运量\"] = pd.to_numeric(big_df[\"客运量\"], errors=\"coerce\")\n    big_df[\"客运量同比增长\"] = pd.to_numeric(big_df[\"客运量同比增长\"], errors=\"coerce\")\n    big_df[\"旅客周转量\"] = pd.to_numeric(big_df[\"旅客周转量\"], errors=\"coerce\")\n    big_df[\"公里旅客周转量同比增长\"] = pd.to_numeric(\n        big_df[\"公里旅客周转量同比增长\"], errors=\"coerce\"\n    )\n    big_df[\"沿海主要港口货物吞吐量\"] = pd.to_numeric(\n        big_df[\"沿海主要港口货物吞吐量\"], errors=\"coerce\"\n    )\n    big_df[\"沿海主要港口货物吞吐量同比增长\"] = pd.to_numeric(\n        big_df[\"沿海主要港口货物吞吐量同比增长\"], errors=\"coerce\"\n    )\n    big_df[\"其中:外贸货物吞吐量\"] = pd.to_numeric(\n        big_df[\"其中:外贸货物吞吐量\"], errors=\"coerce\"\n    )\n    big_df[\"其中:外贸货物吞吐量同比增长\"] = pd.to_numeric(\n        big_df[\"其中:外贸货物吞吐量同比增长\"], errors=\"coerce\"\n    )\n    big_df[\"民航总周转量\"] = pd.to_numeric(big_df[\"民航总周转量\"], errors=\"coerce\")\n    big_df[\"公里民航总周转\"] = pd.to_numeric(big_df[\"公里民航总周转\"], errors=\"coerce\")\n    return big_df\n\n\ndef macro_china_postal_telecommunicational() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-中国宏观经济数据-邮电业务基本情况\n    https://finance.sina.com.cn/mac/#industry-11-0-31-1\n    :return: 邮电业务基本情况\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://quotes.sina.cn/mac/api/jsonp_v3.php/SINAREMOTECALLCALLBACK1601624495046/MacPage_Service.get_pagedata\"\n    params = {\n        \"cate\": \"industry\",\n        \"event\": \"11\",\n        \"from\": \"0\",\n        \"num\": \"31\",\n        \"condition\": \"\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n    page_num = math.ceil(int(data_json[\"count\"]) / 31)\n    big_df = pd.DataFrame(data_json[\"data\"][\"非累计\"])\n    tqdm = get_tqdm()\n    for i in tqdm(range(1, page_num), leave=False):\n        params.update({\"from\": i * 31})\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n        temp_df = pd.DataFrame(data_json[\"data\"][\"非累计\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [item[1] for item in data_json[\"config\"][\"all\"]]\n    for item in big_df.columns[1:]:\n        big_df[item] = pd.to_numeric(big_df[item], errors=\"coerce\")\n    return big_df\n\n\ndef macro_china_international_tourism_fx() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-中国宏观经济数据-国际旅游外汇收入构成\n    https://finance.sina.com.cn/mac/#industry-15-0-31-3\n    :return: 国际旅游外汇收入构成\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://quotes.sina.cn/mac/api/jsonp_v3.php/SINAREMOTECALLCALLBACK1601651495761/MacPage_Service.get_pagedata\"\n    params = {\n        \"cate\": \"industry\",\n        \"event\": \"15\",\n        \"from\": \"0\",\n        \"num\": \"31\",\n        \"condition\": \"\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n    page_num = math.ceil(int(data_json[\"count\"]) / 31)\n    big_df = pd.DataFrame(data_json[\"data\"])\n    tqdm = get_tqdm()\n    for i in tqdm(range(1, page_num)):\n        params.update({\"from\": i * 31})\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.columns = [item[1] for item in data_json[\"config\"][\"all\"]]\n    big_df[\"数量\"] = pd.to_numeric(big_df[\"数量\"], errors=\"coerce\")\n    big_df[\"比重\"] = pd.to_numeric(big_df[\"比重\"], errors=\"coerce\")\n    return big_df\n\n\ndef macro_china_passenger_load_factor() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-中国宏观经济数据-民航客座率及载运率\n    https://finance.sina.com.cn/mac/#industry-20-0-31-1\n    :return: 民航客座率及载运率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://quotes.sina.cn/mac/api/jsonp_v3.php/SINAREMOTECALLCALLBACK1601651495761/MacPage_Service.get_pagedata\"\n    params = {\n        \"cate\": \"industry\",\n        \"event\": \"20\",\n        \"from\": \"0\",\n        \"num\": \"31\",\n        \"condition\": \"\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n    page_num = math.ceil(int(data_json[\"count\"]) / 31)\n    big_df = pd.DataFrame(data_json[\"data\"])\n    tqdm = get_tqdm()\n    for i in tqdm(range(1, page_num)):\n        params.update({\"from\": i * 31})\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [item[1] for item in data_json[\"config\"][\"all\"]]\n    big_df[\"客座率\"] = pd.to_numeric(big_df[\"客座率\"], errors=\"coerce\")\n    big_df[\"载运率\"] = pd.to_numeric(big_df[\"载运率\"], errors=\"coerce\")\n    return big_df\n\n\ndef _macro_china_freight_index() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-中国宏观经济数据-航贸运价指数\n    https://finance.sina.com.cn/mac/#industry-22-0-31-2\n    :return: 航贸运价指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://quotes.sina.cn/mac/api/jsonp_v3.php/SINAREMOTECALLCALLBACK1601651495761/MacPage_Service.get_pagedata\"\n    params = {\n        \"cate\": \"industry\",\n        \"event\": \"22\",\n        \"from\": \"0\",\n        \"num\": \"31\",\n        \"condition\": \"\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n    page_num = math.ceil(int(data_json[\"count\"]) / 31)\n    big_df = pd.DataFrame(data_json[\"data\"])\n    tqdm = get_tqdm()\n    for i in tqdm(range(1, page_num)):\n        params.update({\"from\": i * 31})\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        big_df = big_df.append(temp_df, ignore_index=True)\n    big_df.columns = [item[1] for item in data_json[\"config\"][\"all\"]]\n    return big_df\n\n\ndef macro_china_freight_index() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-中国宏观经济数据-航贸运价指数\n    https://finance.sina.com.cn/mac/#industry-22-0-31-2\n    :return: 航贸运价指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://quotes.sina.cn/mac/view/vMacExcle.php\"\n    params = {\n        \"cate\": \"industry\",\n        \"event\": \"22\",\n        \"from\": \"0\",\n        \"num\": 5000,\n        \"condition\": \"\",\n    }\n    r = requests.get(url, params=params)\n    columns_list = r.content.decode(\"gbk\").split(\"\\n\")[2].split(\", \")\n    columns_list = [item.strip() for item in columns_list]\n    content_list = r.content.decode(\"gbk\").split(\"\\n\")[3:]\n    big_df = (\n        pd.DataFrame([item.split(\", \") for item in content_list], columns=columns_list)\n        .dropna(axis=1, how=\"all\")\n        .dropna(axis=0)\n        .iloc[:, :-1]\n    )\n    big_df[\"波罗的海好望角型船运价指数BCI\"] = pd.to_numeric(\n        big_df[\"波罗的海好望角型船运价指数BCI\"]\n    )\n    big_df[\"灵便型船综合运价指数BHMI\"] = pd.to_numeric(\n        big_df[\"灵便型船综合运价指数BHMI\"]\n    )\n    big_df[\"波罗的海超级大灵便型船BSI指数\"] = pd.to_numeric(\n        big_df[\"波罗的海超级大灵便型船BSI指数\"]\n    )\n    big_df[\"波罗的海综合运价指数BDI\"] = pd.to_numeric(big_df[\"波罗的海综合运价指数BDI\"])\n    big_df[\"HRCI国际集装箱租船指数\"] = pd.to_numeric(big_df[\"HRCI国际集装箱租船指数\"])\n    big_df[\"油轮运价指数成品油运价指数BCTI\"] = pd.to_numeric(\n        big_df[\"油轮运价指数成品油运价指数BCTI\"]\n    )\n    big_df[\"油轮运价指数原油运价指数BDTI\"] = pd.to_numeric(\n        big_df[\"油轮运价指数原油运价指数BDTI\"]\n    )\n    return big_df\n\n\ndef macro_china_central_bank_balance() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-中国宏观经济数据-央行货币当局资产负债\n    https://finance.sina.com.cn/mac/#fininfo-8-0-31-2\n    :return: 央行货币当局资产负债\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://quotes.sina.cn/mac/api/jsonp_v3.php/SINAREMOTECALLCALLBACK1601651495761/MacPage_Service.get_pagedata\"\n    params = {\n        \"cate\": \"fininfo\",\n        \"event\": \"8\",\n        \"from\": \"0\",\n        \"num\": \"31\",\n        \"condition\": \"\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n    page_num = math.ceil(int(data_json[\"count\"]) / 31)\n    big_df = pd.DataFrame(data_json[\"data\"])\n    tqdm = get_tqdm()\n    for i in tqdm(range(1, page_num)):\n        params.update({\"from\": i * 31})\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.columns = [item[1] for item in data_json[\"config\"][\"all\"]]\n    for item in big_df.columns[1:]:\n        big_df[item] = pd.to_numeric(big_df[item], errors=\"coerce\")\n    return big_df\n\n\ndef macro_china_insurance() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-中国宏观经济数据-保险业经营情况\n    https://finance.sina.com.cn/mac/#fininfo-19-0-31-3\n    :return: 保险业经营情况\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://quotes.sina.cn/mac/api/jsonp_v3.php/SINAREMOTECALLCALLBACK1601651495761/MacPage_Service.get_pagedata\"\n    params = {\n        \"cate\": \"fininfo\",\n        \"event\": \"19\",\n        \"from\": \"0\",\n        \"num\": \"31\",\n        \"condition\": \"\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n    page_num = math.ceil(int(data_json[\"count\"]) / 31)\n    big_df = pd.DataFrame(data_json[\"data\"])\n    tqdm = get_tqdm()\n    for i in tqdm(range(1, page_num)):\n        params.update({\"from\": i * 31})\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.columns = [item[1] for item in data_json[\"config\"][\"all\"]]\n    for item in big_df.columns[2:]:\n        big_df[item] = pd.to_numeric(big_df[item], errors=\"coerce\")\n    return big_df\n\n\ndef macro_china_supply_of_money() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-中国宏观经济数据-货币供应量\n    https://finance.sina.com.cn/mac/#fininfo-1-0-31-1\n    :return: 货币供应量\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://quotes.sina.cn/mac/api/jsonp_v3.php/SINAREMOTECALLCALLBACK1601651495761/MacPage_Service.get_pagedata\"\n    params = {\n        \"cate\": \"fininfo\",\n        \"event\": \"1\",\n        \"from\": \"0\",\n        \"num\": \"31\",\n        \"condition\": \"\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n    page_num = math.ceil(int(data_json[\"count\"]) / 31)\n    big_df = pd.DataFrame(data_json[\"data\"])\n    tqdm = get_tqdm()\n    for i in tqdm(range(1, page_num)):\n        params.update({\"from\": i * 31})\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [item[1] for item in data_json[\"config\"][\"all\"]]\n    for item in big_df.columns[1:]:\n        big_df[item] = pd.to_numeric(big_df[item], errors=\"coerce\")\n    return big_df\n\n\ndef macro_china_foreign_exchange_gold() -> pd.DataFrame:\n    \"\"\"\n    央行黄金和外汇储备\n    https://finance.sina.com.cn/mac/#fininfo-5-0-31-2\n    :return: 央行黄金和外汇储备\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://quotes.sina.cn/mac/api/jsonp_v3.php/SINAREMOTECALLCALLBACK1601651495761/MacPage_Service.get_pagedata\"\n    params = {\n        \"cate\": \"fininfo\",\n        \"event\": \"5\",\n        \"from\": \"0\",\n        \"num\": \"31\",\n        \"condition\": \"\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n    page_num = math.ceil(int(data_json[\"count\"]) / 31)\n    big_df = pd.DataFrame(data_json[\"data\"])\n    tqdm = get_tqdm()\n    for i in tqdm(range(1, page_num), leave=False):\n        params.update({\"from\": i * 31})\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [item[1] for item in data_json[\"config\"][\"all\"]]\n    big_df.sort_values(by=[\"统计时间\"], ignore_index=True, inplace=True)\n    big_df[\"黄金储备\"] = pd.to_numeric(big_df[\"黄金储备\"], errors=\"coerce\")\n    big_df[\"国家外汇储备\"] = pd.to_numeric(big_df[\"国家外汇储备\"], errors=\"coerce\")\n    return big_df\n\n\ndef macro_china_retail_price_index() -> pd.DataFrame:\n    \"\"\"\n    商品零售价格指数\n    https://finance.sina.com.cn/mac/#price-12-0-31-1\n    :return: 商品零售价格指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://quotes.sina.cn/mac/api/jsonp_v3.php/SINAREMOTECALLCALLBACK1601651495761/MacPage_Service.get_pagedata\"\n    params = {\n        \"cate\": \"price\",\n        \"event\": \"12\",\n        \"from\": \"0\",\n        \"num\": \"31\",\n        \"condition\": \"\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n    page_num = math.ceil(int(data_json[\"count\"]) / 31)\n    big_df = pd.DataFrame(data_json[\"data\"])\n    tqdm = get_tqdm()\n    for i in tqdm(range(1, page_num), leave=False):\n        params.update({\"from\": i * 31})\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text[data_text.find(\"{\") : -3])\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [item[1] for item in data_json[\"config\"][\"all\"]]\n    big_df.sort_values(by=[\"统计月份\"], ignore_index=True, inplace=True)\n    big_df[\"零售商品价格指数\"] = pd.to_numeric(\n        big_df[\"零售商品价格指数\"], errors=\"coerce\"\n    )\n    return big_df\n\n\ndef macro_china_real_estate() -> pd.DataFrame:\n    \"\"\"\n    国房景气指数\n    https://data.eastmoney.com/cjsj/hyzs_list_EMM00121987.html\n    :return: 国房景气指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/81.0.4044.138 Safari/537.36\",\n    }\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"1000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_INDUSTRY_INDEX\",\n        \"columns\": \"REPORT_DATE,INDICATOR_VALUE,CHANGE_RATE,CHANGERATE_3M,CHANGERATE_6M,CHANGERATE_1Y,\"\n        \"CHANGERATE_2Y,CHANGERATE_3Y\",\n        \"filter\": '(INDICATOR_ID=\"EMM00121987\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"日期\",\n        \"最新值\",\n        \"涨跌幅\",\n        \"近3月涨跌幅\",\n        \"近6月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"近2年涨跌幅\",\n        \"近3年涨跌幅\",\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df[\"最新值\"] = pd.to_numeric(big_df[\"最新值\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"近3月涨跌幅\"] = pd.to_numeric(big_df[\"近3月涨跌幅\"], errors=\"coerce\")\n    big_df[\"近6月涨跌幅\"] = pd.to_numeric(big_df[\"近6月涨跌幅\"], errors=\"coerce\")\n    big_df[\"近1年涨跌幅\"] = pd.to_numeric(big_df[\"近1年涨跌幅\"], errors=\"coerce\")\n    big_df[\"近2年涨跌幅\"] = pd.to_numeric(big_df[\"近2年涨跌幅\"], errors=\"coerce\")\n    big_df[\"近3年涨跌幅\"] = pd.to_numeric(big_df[\"近3年涨跌幅\"], errors=\"coerce\")\n    big_df.sort_values(by=[\"日期\"], inplace=True)\n    big_df.drop_duplicates(inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    # 企业商品价格指数\n    macro_china_qyspjg_df = macro_china_qyspjg()\n    print(macro_china_qyspjg_df)\n\n    # 外商直接投资数据\n    macro_china_fdi_df = macro_china_fdi()\n    print(macro_china_fdi_df)\n\n    # 社会融资规模增量\n    macro_china_shrzgm_df = macro_china_shrzgm()\n    print(macro_china_shrzgm_df)\n\n    # 城镇调查失业率\n    macro_china_urban_unemployment_df = macro_china_urban_unemployment()\n    print(macro_china_urban_unemployment_df)\n\n    # 金十数据中心-经济指标-中国-国民经济运行状况-经济状况-中国GDP年率报告\n    macro_china_gdp_yearly_df = macro_china_gdp_yearly()\n    print(macro_china_gdp_yearly_df)\n\n    # 金十数据中心-经济指标-中国-国民经济运行状况-物价水平-中国CPI年率报告\n    macro_china_cpi_yearly_df = macro_china_cpi_yearly()\n    print(macro_china_cpi_yearly_df)\n\n    # 金十数据中心-经济指标-中国-国民经济运行状况-物价水平-中国CPI月率报告\n    macro_china_cpi_monthly_df = macro_china_cpi_monthly()\n    print(macro_china_cpi_monthly_df)\n\n    # 金十数据中心-经济指标-中国-国民经济运行状况-物价水平-中国PPI年率报告\n    macro_china_ppi_yearly_df = macro_china_ppi_yearly()\n    print(macro_china_ppi_yearly_df)\n\n    # 金十数据中心-经济指标-中国-贸易状况-以美元计算出口年率报告\n    macro_china_exports_yoy_df = macro_china_exports_yoy()\n    print(macro_china_exports_yoy_df)\n\n    # 金十数据中心-经济指标-中国-贸易状况-以美元计算进口年率\n    macro_china_imports_yoy_df = macro_china_imports_yoy()\n    print(macro_china_imports_yoy_df)\n\n    # 金十数据中心-经济指标-中国-贸易状况-以美元计算贸易帐(亿美元)\n    macro_china_trade_balance_df = macro_china_trade_balance()\n    print(macro_china_trade_balance_df)\n\n    # 金十数据中心-经济指标-中国-产业指标-规模以上工业增加值年率\n    macro_china_industrial_production_yoy_df = macro_china_industrial_production_yoy()\n    print(macro_china_industrial_production_yoy_df)\n\n    # 金十数据中心-经济指标-中国-产业指标-官方制造业PMI\n    macro_china_pmi_yearly_df = macro_china_pmi_yearly()\n    print(macro_china_pmi_yearly_df)\n\n    # 金十数据中心-经济指标-中国-产业指标-财新制造业PMI终值\n    macro_china_cx_pmi_yearly_df = macro_china_cx_pmi_yearly()\n    print(macro_china_cx_pmi_yearly_df)\n\n    # 金十数据中心-经济指标-中国-产业指标-财新服务业PMI\n    macro_china_cx_services_pmi_yearly_df = macro_china_cx_services_pmi_yearly()\n    print(macro_china_cx_services_pmi_yearly_df)\n\n    # 金十数据中心-经济指标-中国-产业指标-中国官方非制造业PMI\n    macro_china_non_man_pmi_df = macro_china_non_man_pmi()\n    print(macro_china_non_man_pmi_df)\n\n    # 金十数据中心-经济指标-中国-金融指标-外汇储备(亿美元)\n    macro_china_fx_reserves_yearly_df = macro_china_fx_reserves_yearly()\n    print(macro_china_fx_reserves_yearly_df)\n\n    # 金十数据中心-经济指标-中国-金融指标-M2货币供应年率\n    macro_china_m2_yearly_df = macro_china_m2_yearly()\n    print(macro_china_m2_yearly_df)\n\n    # 金十数据中心-经济指标-中国-金融指标-上海银行业同业拆借报告\n    macro_china_shibor_all_df = macro_china_shibor_all()\n    print(macro_china_shibor_all_df)\n\n    # 金十数据中心-经济指标-中国-金融指标-人民币香港银行同业拆息\n    macro_china_hk_market_info_df = macro_china_hk_market_info()\n    print(macro_china_hk_market_info_df)\n\n    # 金十数据中心-经济指标-中国-其他-中国日度沿海六大电库存数据\n    macro_china_daily_energy_df = macro_china_daily_energy()\n    print(macro_china_daily_energy_df)\n\n    # 金十数据中心-经济指标-中国-其他-中国人民币汇率中间价报告\n    macro_china_rmb_df = macro_china_rmb()\n    print(macro_china_rmb_df)\n\n    # 金十数据中心-经济指标-中国-其他-深圳融资融券报告\n    macro_china_market_margin_sz_df = macro_china_market_margin_sz()\n    print(macro_china_market_margin_sz_df)\n\n    # 金十数据中心-经济指标-中国-其他-上海融资融券报告\n    macro_china_market_margin_sh_df = macro_china_market_margin_sh()\n    print(macro_china_market_margin_sh_df)\n\n    # 金十数据中心-经济指标-中国-其他-上海黄金交易所报告\n    macro_china_au_report_df = macro_china_au_report()\n    print(macro_china_au_report_df)\n\n    # 中国-新房价指数\n    macro_china_new_house_price_df = macro_china_new_house_price()\n    print(macro_china_new_house_price_df)\n\n    # 中国-企业景气及企业家信心指数\n    macro_china_enterprise_boom_index_df = macro_china_enterprise_boom_index()\n    print(macro_china_enterprise_boom_index_df)\n\n    # 中国-全国税收收入\n    macro_china_national_tax_receipts_df = macro_china_national_tax_receipts()\n    print(macro_china_national_tax_receipts_df)\n\n    # 中国-新增信贷数据\n    macro_china_new_financial_credit_df = macro_china_new_financial_credit()\n    print(macro_china_new_financial_credit_df)\n\n    # 中国-外汇和黄金储备\n    macro_china_fx_gold_df = macro_china_fx_gold()\n    print(macro_china_fx_gold_df)\n\n    macro_china_stock_market_cap_df = macro_china_stock_market_cap()\n    print(macro_china_stock_market_cap_df)\n\n    macro_china_money_supply_df = macro_china_money_supply()\n    print(macro_china_money_supply_df)\n\n    macro_china_cpi_df = macro_china_cpi()\n    print(macro_china_cpi_df)\n\n    macro_china_gdp_df = macro_china_gdp()\n    print(macro_china_gdp_df)\n\n    macro_china_ppi_df = macro_china_ppi()\n    print(macro_china_ppi_df)\n\n    macro_china_pmi_df = macro_china_pmi()\n    print(macro_china_pmi_df)\n\n    macro_china_gdzctz_df = macro_china_gdzctz()\n    print(macro_china_gdzctz_df)\n\n    macro_china_hgjck_df = macro_china_hgjck()\n    print(macro_china_hgjck_df)\n\n    macro_china_czsr_df = macro_china_czsr()\n    print(macro_china_czsr_df)\n\n    macro_china_whxd_df = macro_china_whxd()\n    print(macro_china_whxd_df)\n\n    macro_china_wbck_df = macro_china_wbck()\n    print(macro_china_wbck_df)\n\n    macro_china_xfzxx_df = macro_china_xfzxx()\n    print(macro_china_xfzxx_df)\n\n    macro_china_gyzjz_df = macro_china_gyzjz\n    print(macro_china_gyzjz_df)\n\n    macro_china_reserve_requirement_ratio_df = macro_china_reserve_requirement_ratio()\n    print(macro_china_reserve_requirement_ratio_df)\n\n    macro_china_consumer_goods_retail_df = macro_china_consumer_goods_retail()\n    print(macro_china_consumer_goods_retail_df)\n\n    macro_china_society_electricity_df = macro_china_society_electricity()\n    print(macro_china_society_electricity_df)\n\n    macro_china_society_traffic_volume_df = macro_china_society_traffic_volume()\n    print(macro_china_society_traffic_volume_df)\n\n    macro_china_postal_telecommunicational_df = macro_china_postal_telecommunicational()\n    print(macro_china_postal_telecommunicational_df)\n\n    macro_china_international_tourism_fx_df = macro_china_international_tourism_fx()\n    print(macro_china_international_tourism_fx_df)\n\n    macro_china_passenger_load_factor_df = macro_china_passenger_load_factor()\n    print(macro_china_passenger_load_factor_df)\n\n    macro_china_freight_index_df = macro_china_freight_index()\n    print(macro_china_freight_index_df)\n\n    macro_china_central_bank_balance_df = macro_china_central_bank_balance()\n    print(macro_china_central_bank_balance_df)\n\n    macro_china_insurance_df = macro_china_insurance()\n    print(macro_china_insurance_df)\n\n    macro_china_supply_of_money_df = macro_china_supply_of_money()\n    print(macro_china_supply_of_money_df)\n\n    macro_china_foreign_exchange_gold_df = macro_china_foreign_exchange_gold()\n    print(macro_china_foreign_exchange_gold_df)\n\n    macro_china_retail_price_index_df = macro_china_retail_price_index()\n    print(macro_china_retail_price_index_df)\n\n    macro_china_real_estate_df = macro_china_real_estate()\n    print(macro_china_real_estate_df)\n\n    macro_shipping_bci_df = macro_shipping_bci()\n    print(macro_shipping_bci_df)\n\n    macro_shipping_bdi_df = macro_shipping_bdi()\n    print(macro_shipping_bdi_df)\n\n    macro_shipping_bpi_df = macro_shipping_bpi()\n    print(macro_shipping_bpi_df)\n\n    macro_shipping_bcti_df = macro_shipping_bcti()\n    print(macro_shipping_bcti_df)\n"
  },
  {
    "path": "akshare/economic/macro_china_hk.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/3 16:21\nDesc: 中国-香港-宏观指标\nhttps://data.eastmoney.com/cjsj/foreign_8_0.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef macro_china_hk_core(symbol: str = \"EMG00341602\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-经济数据一览-宏观经济-日本-核心代码\n    https://data.eastmoney.com/cjsj/foreign_1_0.html\n    :param symbol: 代码\n    :type symbol: str\n    :return: 指定 symbol 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_HK\",\n        \"columns\": \"ALL\",\n        \"filter\": f'(INDICATOR_ID=\"{symbol}\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"5000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.rename(\n        columns={\n            \"COUNTRY\": \"-\",\n            \"INDICATOR_ID\": \"-\",\n            \"INDICATOR_NAME\": \"-\",\n            \"REPORT_DATE_CH\": \"时间\",\n            \"REPORT_DATE\": \"-\",\n            \"PUBLISH_DATE\": \"发布日期\",\n            \"VALUE\": \"现值\",\n            \"PRE_VALUE\": \"前值\",\n            \"INDICATOR_IDOLD\": \"-\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"], errors=\"coerce\").dt.date\n    temp_df.sort_values([\"发布日期\"], inplace=True, ignore_index=True)\n    return temp_df\n\n\ndef macro_china_hk_cpi() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据一览-中国香港-消费者物价指数\n    https://data.eastmoney.com/cjsj/foreign_8_0.html\n    :return: 消费者物价指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_china_hk_core(symbol=\"EMG01336996\")\n    return temp_df\n\n\ndef macro_china_hk_cpi_ratio() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据一览-中国香港-消费者物价指数年率\n    https://data.eastmoney.com/cjsj/foreign_8_1.html\n    :return: 消费者物价指数年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_china_hk_core(symbol=\"EMG00059282\")\n    return temp_df\n\n\ndef macro_china_hk_rate_of_unemployment() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据一览-中国香港-失业率\n    https://data.eastmoney.com/cjsj/foreign_8_2.html\n    :return: 失业率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_china_hk_core(symbol=\"EMG00059647\")\n    return temp_df\n\n\ndef macro_china_hk_gbp() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据一览-中国香港-香港 GDP\n    https://data.eastmoney.com/cjsj/foreign_8_3.html\n    :return: 香港 GDP\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_china_hk_core(symbol=\"EMG01337008\")\n    return temp_df\n\n\ndef macro_china_hk_gbp_ratio() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据一览-中国香港-香港 GDP 同比\n    https://data.eastmoney.com/cjsj/foreign_8_4.html\n    :return: 香港 GDP 同比\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_china_hk_core(symbol=\"EMG01337009\")\n    return temp_df\n\n\ndef macro_china_hk_building_volume() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据一览-中国香港-香港楼宇买卖合约数量\n    https://data.eastmoney.com/cjsj/foreign_8_5.html\n    :return: 香港楼宇买卖合约数量\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_china_hk_core(symbol=\"EMG00158055\")\n    return temp_df\n\n\ndef macro_china_hk_building_amount() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据一览-中国香港-香港楼宇买卖合约成交金额\n    https://data.eastmoney.com/cjsj/foreign_8_6.html\n    :return: 香港楼宇买卖合约成交金额\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_china_hk_core(symbol=\"EMG00158066\")\n    return temp_df\n\n\ndef macro_china_hk_trade_diff_ratio() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据一览-中国香港-香港商品贸易差额年率\n    https://data.eastmoney.com/cjsj/foreign_8_7.html\n    :return: 香港商品贸易差额年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_china_hk_core(symbol=\"EMG00157898\")\n    return temp_df\n\n\ndef macro_china_hk_ppi() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据一览-中国香港-香港制造业 PPI 年率\n    https://data.eastmoney.com/cjsj/foreign_8_8.html\n    :return: 香港制造业 PPI 年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_china_hk_core(symbol=\"EMG00157818\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    macro_china_hk_cpi_df = macro_china_hk_cpi()\n    print(macro_china_hk_cpi_df)\n\n    macro_china_hk_cpi_ratio_df = macro_china_hk_cpi_ratio()\n    print(macro_china_hk_cpi_ratio_df)\n\n    macro_china_hk_rate_of_unemployment_df = macro_china_hk_rate_of_unemployment()\n    print(macro_china_hk_rate_of_unemployment_df)\n\n    macro_china_hk_gbp_df = macro_china_hk_gbp()\n    print(macro_china_hk_gbp_df)\n\n    macro_china_hk_gbp_ratio_df = macro_china_hk_gbp_ratio()\n    print(macro_china_hk_gbp_ratio_df)\n\n    marco_china_hk_building_volume_df = macro_china_hk_building_volume()\n    print(marco_china_hk_building_volume_df)\n\n    macro_china_hk_building_amount_df = macro_china_hk_building_amount()\n    print(macro_china_hk_building_amount_df)\n\n    macro_china_hk_trade_diff_ratio_df = macro_china_hk_trade_diff_ratio()\n    print(macro_china_hk_trade_diff_ratio_df)\n\n    macro_china_hk_ppi_df = macro_china_hk_ppi()\n    print(macro_china_hk_ppi_df)\n"
  },
  {
    "path": "akshare/economic/macro_china_nbs.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/6/30 22:00\nDesc: 中国-国家统计局-宏观数据\nhttps://data.stats.gov.cn/easyquery.htm\n\"\"\"\n\nimport time\nfrom functools import lru_cache\nfrom typing import Union, Literal, List, Dict\n\nimport jsonpath as jp\nimport numpy as np\nimport pandas as pd\nimport requests\nimport urllib3\nfrom urllib3.exceptions import InsecureRequestWarning\n\n# 忽略InsecureRequestWarning警告\nurllib3.disable_warnings(InsecureRequestWarning)\n\n\n@lru_cache\ndef _get_nbs_tree(idcode: str, dbcode: str) -> List[Dict]:\n    \"\"\"\n    获取指标目录树\n    :param idcode: 指标编码\n    :param dbcode: 库编码\n    :return:  json数据\n    \"\"\"\n    url = \"https://data.stats.gov.cn/easyquery.htm\"\n    params = {\"id\": idcode, \"dbcode\": dbcode, \"wdcode\": \"zb\", \"m\": \"getTree\"}\n    r = requests.post(url, params=params, verify=False, allow_redirects=True)\n    data_json = r.json()\n    return data_json\n\n\n@lru_cache\ndef _get_nbs_wds_tree(idcode: str, dbcode: str, rowcode: str) -> List[Dict]:\n    \"\"\"\n    获取地区数据的可选指标目录树\n    :param idcode: 指标编码\n    :param dbcode: 库编码\n    :param rowcode: 值为zb是返回地区的编码，值为reg时返回可选指标的编码\n    :return:  json数据\n    \"\"\"\n    url = \"https://data.stats.gov.cn/easyquery.htm\"\n    params = {\n        \"m\": \"getOtherWds\",\n        \"dbcode\": dbcode,\n        \"rowcode\": rowcode,\n        \"colcode\": \"sj\",\n        \"wds\": '[{\"wdcode\":\"zb\",\"valuecode\":\"%s\"}]' % idcode,\n        \"k1\": str(time.time_ns())[:13],\n    }\n    r = requests.post(url, params=params, verify=False, allow_redirects=True)\n    data_json = r.json()\n    data_json = data_json[\"returndata\"][0][\"nodes\"]\n    return data_json\n\n\ndef _get_code_from_nbs_tree(tree: List[Dict], name: str, target: str = \"id\") -> str:\n    \"\"\"\n    根据指标名称从目录树中获取target编码\n    :param tree: 目录树\n    :param name: 指标名称\n    :param target: 指标编码属性名\n    :return: 指标编码\n    \"\"\"\n    expr = f'$[?(@.name == \"{name}\")].{target}'\n    ret = jp.jsonpath(tree, expr)\n    if ret is False:\n        raise ValueError(\"Please check if the data path or indicator is correct.\")\n    return ret[0]\n\n\ndef macro_china_nbs_nation(\n    kind: Literal[\"月度数据\", \"季度数据\", \"年度数据\"], path: str, period: str = \"LAST10\"\n) -> pd.DataFrame:\n    \"\"\"\n    国家统计局全国数据通用接口\n    https://data.stats.gov.cn/easyquery.htm\n    :param kind: 数据类别\n    :param path: 数据路径\n    :param period: 时间区间，例如'LAST10', '2016-2023', '2016-'等\n    :return: 国家统计局统计数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    # 获取dbcode\n    kind_code = {\"月度数据\": \"hgyd\", \"季度数据\": \"hgjd\", \"年度数据\": \"hgnd\"}\n    dbcode = kind_code[kind]\n\n    # 获取最终id\n    parent_tree = _get_nbs_tree(\"zb\", dbcode)\n    path_split = path.replace(\" \", \"\").split(\">\")\n    indicator_id = _get_code_from_nbs_tree(parent_tree, path_split[0])\n    path_split.pop(0)\n    while path_split:\n        temp_tree = _get_nbs_tree(indicator_id, dbcode)\n        indicator_id = _get_code_from_nbs_tree(temp_tree, path_split[0])\n        path_split.pop(0)\n\n    # 请求数据\n    url = \"https://data.stats.gov.cn/easyquery.htm\"\n    params = {\n        \"m\": \"QueryData\",\n        \"dbcode\": dbcode,\n        \"rowcode\": \"zb\",\n        \"colcode\": \"sj\",\n        \"wds\": \"[]\",\n        \"dfwds\": '[{\"wdcode\":\"zb\",\"valuecode\":\"%s\"}, '\n        '{\"wdcode\":\"sj\",\"valuecode\":\"%s\"}]' % (indicator_id, period),\n        \"k1\": str(time.time_ns())[:13],\n    }\n    r = requests.get(url, params=params, verify=False, allow_redirects=True)\n    data_json = r.json()\n\n    # 整理为dataframe\n    temp_df = pd.DataFrame(data_json[\"returndata\"][\"datanodes\"])\n    temp_df[\"data\"] = temp_df[\"data\"].apply(\n        lambda x: x[\"data\"] if x[\"hasdata\"] else None\n    )\n\n    wdnodes = data_json[\"returndata\"][\"wdnodes\"]\n    wn_df_list = []\n    for wn in wdnodes:\n        wn_df_list.append(\n            pd.DataFrame(wn[\"nodes\"])\n            .assign(\n                funit=lambda df: df[\"unit\"].apply(lambda x: \"(\" + x + \")\" if x else x)\n            )\n            .assign(fname=lambda df: df[\"cname\"] + df[\"funit\"]),\n        )\n\n    row_name, column_name = (\n        wn_df_list[0][\"fname\"],\n        wn_df_list[1][\"fname\"],\n    )\n\n    data_ndarray = np.reshape(temp_df[\"data\"], (len(row_name), len(column_name)))\n    data_df = pd.DataFrame(data=data_ndarray, columns=column_name, index=row_name)\n    data_df.index.name = None\n    data_df.columns.name = None\n\n    return data_df\n\n\ndef macro_china_nbs_region(\n    kind: Literal[\n        \"分省月度数据\",\n        \"分省季度数据\",\n        \"分省年度数据\",\n        \"主要城市月度价格\",\n        \"主要城市年度数据\",\n        \"港澳台月度数据\",\n        \"港澳台年度数据\",\n    ],\n    path: str,\n    indicator: Union[str, None],\n    region: Union[str, None] = None,\n    period: str = \"LAST10\",\n) -> pd.DataFrame:\n    \"\"\"\n    国家统计局地区数据通用接口\n    https://data.stats.gov.cn/easyquery.htm\n    :param kind: 数据类别\n    :param path: 数据路径\n    :param indicator: 指定指标\n    :param region:  指定地区 当指定region时，将symbol设为None可以同时获得所有可选指标的值\n    :param period: 时间区间，例如'LAST10', '2016-2023', '2016-'等\n    :return: 国家统计局统计数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if indicator is None and region is None:\n        raise AssertionError(\"The indicator and region parameters cannot both be None.\")\n\n    # 获取dbcode\n    kind_dict = {\n        \"分省月度数据\": \"fsyd\",\n        \"分省季度数据\": \"fsjd\",\n        \"分省年度数据\": \"fsnd\",\n        \"主要城市月度价格\": \"csyd\",\n        \"主要城市年度数据\": \"csnd\",\n        \"港澳台月度数据\": \"gatyd\",\n        \"港澳台年度数据\": \"gatnd\",\n    }\n    dbcode = kind_dict[kind]\n\n    # 获取最终id\n    parent_tree = _get_nbs_tree(\"zb\", dbcode)\n    path_split = path.replace(\" \", \"\").split(\">\")\n    indicator_id = _get_code_from_nbs_tree(parent_tree, path_split[0])\n    path_split.pop(0)\n    while path_split:\n        temp_tree = _get_nbs_tree(indicator_id, dbcode)\n        indicator_id = _get_code_from_nbs_tree(temp_tree, path_split[0])\n        path_split.pop(0)\n\n    # 参数设定\n    if region is None:\n        indicator_tree = _get_nbs_wds_tree(indicator_id, dbcode, \"reg\")\n        indicator_id = _get_code_from_nbs_tree(indicator_tree, indicator, target=\"code\")\n        rowcode = \"reg\"\n        colcode = \"sj\"\n        wds = '[{\"wdcode\":\"zb\",\"valuecode\":\"%s\"}]' % indicator_id\n        dfwds = '[{\"wdcode\":\"sj\",\"valuecode\":\"%s\"}]' % period\n    else:\n        if indicator is not None:\n            indicator_tree = _get_nbs_wds_tree(indicator_id, dbcode, \"reg\")\n            indicator_id = _get_code_from_nbs_tree(\n                indicator_tree, indicator, target=\"code\"\n            )\n        region_tree = _get_nbs_wds_tree(indicator_id, dbcode, \"zb\")\n        region_id = _get_code_from_nbs_tree(region_tree, region, target=\"code\")\n        rowcode = \"zb\"\n        colcode = \"sj\"\n        wds = '[{\"wdcode\":\"reg\",\"valuecode\":\"%s\"}]' % region_id\n        dfwds = (\n            '[{\"wdcode\":\"zb\",\"valuecode\":\"%s\"}, '\n            '{\"wdcode\":\"sj\",\"valuecode\":\"%s\"}]' % (indicator_id, period)\n        )\n\n    # 请求数据\n    url = \"https://data.stats.gov.cn/easyquery.htm\"\n    params = {\n        \"m\": \"QueryData\",\n        \"dbcode\": dbcode,\n        \"rowcode\": rowcode,\n        \"colcode\": colcode,\n        \"wds\": wds,\n        \"dfwds\": dfwds,\n        \"k1\": str(time.time_ns())[:13],\n    }\n    r = requests.get(url, params=params, verify=False, allow_redirects=True)\n    data_json = r.json()\n\n    # 整理为dataframe\n    temp_df = pd.DataFrame(data_json[\"returndata\"][\"datanodes\"])\n    temp_df[\"data\"] = temp_df[\"data\"].apply(\n        lambda x: x[\"data\"] if x[\"hasdata\"] else None\n    )\n\n    wdnodes = data_json[\"returndata\"][\"wdnodes\"]\n    wn_df_list = []\n    for wn in wdnodes:\n        wn_df_list.append(\n            pd.DataFrame(wn[\"nodes\"])\n            .assign(\n                funit=lambda df: df[\"unit\"].apply(lambda x: \"(\" + x + \")\" if x else x)\n            )\n            .assign(fname=lambda df: df[\"cname\"] + df[\"funit\"]),\n        )\n\n    if region is None:\n        row_name, column_name = wn_df_list[1][\"fname\"], wn_df_list[2][\"fname\"]\n        title_name = wn_df_list[0][\"fname\"][0]\n    else:\n        row_name, column_name = wn_df_list[0][\"fname\"], wn_df_list[2][\"fname\"]\n        title_name = wn_df_list[1][\"fname\"][0]\n\n    data_ndarray = np.reshape(temp_df[\"data\"], (len(row_name), len(column_name)))\n    data_df = pd.DataFrame(data=data_ndarray, columns=column_name, index=row_name)\n    data_df.index.name = None\n    data_df.columns.name = title_name\n\n    return data_df\n\n\nif __name__ == \"__main__\":\n    macro_china_nbs_nation_df = macro_china_nbs_nation(\n        kind=\"月度数据\",\n        path=\"工业 > 工业分大类行业出口交货值(2018-至今) > 废弃资源综合利用业\",\n        period=\"LAST5\",\n    )\n    print(macro_china_nbs_nation_df)\n\n    macro_china_nbs_region_df = macro_china_nbs_region(\n        kind=\"分省季度数据\",\n        path=\"人民生活 > 居民人均可支配收入\",\n        period=\"2018-2022\",\n        indicator=None,\n        region=\"北京市\",\n    )\n    print(macro_china_nbs_region_df)\n\n    macro_china_nbs_region_df = macro_china_nbs_region(\n        kind=\"分省季度数据\",\n        path=\"国民经济核算 > 地区生产总值\",\n        period=\"2018-\",\n        indicator=\"地区生产总值_累计值(亿元)\",\n    )\n    print(macro_china_nbs_region_df)\n"
  },
  {
    "path": "akshare/economic/macro_constitute.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/3 16:08\nDesc: 金十数据-数据中心-主要机构-宏观经济\nhttps://datacenter.jin10.com/\n\"\"\"\n\nimport datetime\nimport time\n\nimport pandas as pd\nimport requests\nfrom tqdm import tqdm\n\n\ndef macro_cons_gold() -> pd.DataFrame:\n    \"\"\"\n    全球最大黄金 ETF—SPDR Gold Trust 持仓报告, 数据区间从 20041118-至今\n    https://datacenter.jin10.com/reportType/dc_etf_gold\n    :return: 持仓报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n    url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n    params = {\n        \"category\": \"etf\",\n        \"attr_id\": \"1\",\n        \"max_date\": \"\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    big_df = pd.DataFrame()\n    while True:\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        if not data_json[\"data\"][\"values\"]:\n            break\n        temp_df = pd.DataFrame(data_json[\"data\"][\"values\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n        last_date_str = temp_df.iat[-1, 0]\n        last_date_str = (\n            (\n                datetime.datetime.strptime(last_date_str, \"%Y-%m-%d\")\n                - datetime.timedelta(days=1)\n            )\n            .date()\n            .isoformat()\n        )\n        params.update({\"max_date\": f\"{last_date_str}\"})\n    big_df.columns = [\n        \"日期\",\n        \"总库存\",\n        \"增持/减持\",\n        \"总价值\",\n    ]\n    big_df[\"商品\"] = \"黄金\"\n    big_df = big_df[\n        [\n            \"商品\",\n            \"日期\",\n            \"总库存\",\n            \"增持/减持\",\n            \"总价值\",\n        ]\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df[\"总库存\"] = pd.to_numeric(big_df[\"总库存\"], errors=\"coerce\")\n    big_df[\"增持/减持\"] = pd.to_numeric(big_df[\"增持/减持\"], errors=\"coerce\")\n    big_df[\"总价值\"] = pd.to_numeric(big_df[\"总价值\"], errors=\"coerce\")\n    big_df.sort_values([\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef macro_cons_silver() -> pd.DataFrame:\n    \"\"\"\n    全球最大白银 ETF—SPDR Gold Trust 持仓报告, 数据区间从 20041118-至今\n    https://datacenter.jin10.com/reportType/dc_etf_sliver\n    :return: 持仓报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n    url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n    params = {\n        \"category\": \"etf\",\n        \"attr_id\": \"2\",\n        \"max_date\": \"\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    big_df = pd.DataFrame()\n    while True:\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        if not data_json[\"data\"][\"values\"]:\n            break\n        temp_df = pd.DataFrame(data_json[\"data\"][\"values\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n        last_date_str = temp_df.iat[-1, 0]\n        last_date_str = (\n            (\n                datetime.datetime.strptime(last_date_str, \"%Y-%m-%d\")\n                - datetime.timedelta(days=1)\n            )\n            .date()\n            .isoformat()\n        )\n        params.update({\"max_date\": f\"{last_date_str}\"})\n    big_df.columns = [\n        \"日期\",\n        \"总库存\",\n        \"增持/减持\",\n        \"总价值\",\n    ]\n    big_df[\"商品\"] = \"白银\"\n    big_df = big_df[\n        [\n            \"商品\",\n            \"日期\",\n            \"总库存\",\n            \"增持/减持\",\n            \"总价值\",\n        ]\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df[\"总库存\"] = pd.to_numeric(big_df[\"总库存\"], errors=\"coerce\")\n    big_df[\"增持/减持\"] = pd.to_numeric(big_df[\"增持/减持\"], errors=\"coerce\")\n    big_df[\"总价值\"] = pd.to_numeric(big_df[\"总价值\"], errors=\"coerce\")\n    big_df.sort_values([\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef macro_cons_opec_month() -> pd.DataFrame:\n    \"\"\"\n    欧佩克报告-月度, 数据区间从 20170118-至今\n    这里返回的具体索引日期的数据为上一个月的数据, 由于某些国家的数据有缺失\n    只选择有数据的国家返回\n    20200312:fix:由于 “厄瓜多尔” 已经有几个月没有更新数据，在这里加以剔除\n    https://datacenter.jin10.com/reportType/dc_opec_report\n    :return: 欧佩克报告-月度\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    big_df = pd.DataFrame()\n    headers = {\n        \"accept\": \"*/*\",\n        \"accept-encoding\": \"gzip, deflate, br\",\n        \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"cache-control\": \"no-cache\",\n        \"origin\": \"https://datacenter.jin10.com\",\n        \"pragma\": \"no-cache\",\n        \"referer\": \"https://datacenter.jin10.com/reportType/dc_opec_report\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-site\": \"same-site\",\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/79.0.3945.117 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"\",\n        \"x-version\": \"1.0.0\",\n    }\n    res = requests.get(\n        url=f\"https://datacenter-api.jin10.com/reports/dates?category=opec&_={str(int(round(t * 1000)))}\",\n        headers=headers,\n    )  # 日期序列\n    all_date_list = res.json()[\"data\"]\n    bar = tqdm(reversed(all_date_list))\n    for item in bar:\n        bar.set_description(f\"Please wait for a moment, now downloading {item}'s data\")\n        res = requests.get(\n            url=f\"https://datacenter-api.jin10.com/reports/list?\"\n            f\"category=opec&date={item}&_={str(int(round(t * 1000)))}\",\n            headers=headers,\n        )\n        temp_df = pd.DataFrame(\n            res.json()[\"data\"][\"values\"],\n            columns=pd.DataFrame(res.json()[\"data\"][\"keys\"])[\"name\"].tolist(),\n        ).T\n        temp_df.columns = temp_df.iloc[0, :]\n        temp_df = temp_df.iloc[1:, :]\n        try:\n            temp_df = temp_df[\n                [\n                    \"阿尔及利亚\",\n                    \"安哥拉\",\n                    \"加蓬\",\n                    \"伊朗\",\n                    \"伊拉克\",\n                    \"科威特\",\n                    \"利比亚\",\n                    \"尼日利亚\",\n                    \"沙特\",\n                    \"阿联酋\",\n                    \"委内瑞拉\",\n                    \"欧佩克产量\",\n                ]\n            ].iloc[-2, :]\n        except:  # noqa: E722\n            temp_df = temp_df[\n                [\n                    \"阿尔及利亚\",\n                    \"安哥拉\",\n                    \"加蓬\",\n                    \"伊朗\",\n                    \"伊拉克\",\n                    \"科威特\",\n                    \"利比亚\",\n                    \"尼日利亚\",\n                    \"沙特\",\n                    \"阿联酋\",\n                    \"委内瑞拉\",\n                    \"欧佩克产量\",\n                ]\n            ].iloc[-1, :]\n        temp_df.dropna(inplace=True)\n        big_df[temp_df.name] = temp_df\n    big_df = big_df.T\n    big_df = big_df.astype(float)\n    big_df.reset_index(inplace=True)\n    big_df.rename(columns={\"index\": \"日期\"}, inplace=True)\n    big_df.columns.name = None\n    return big_df\n\n\nif __name__ == \"__main__\":\n    macro_cons_gold_df = macro_cons_gold()\n    print(macro_cons_gold_df)\n\n    macro_cons_silver_df = macro_cons_silver()\n    print(macro_cons_silver_df)\n\n    macro_cons_opec_month_df = macro_cons_opec_month()\n    print(macro_cons_opec_month_df)\n"
  },
  {
    "path": "akshare/economic/macro_euro.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/3 17:08\nDesc: 金十数据中心-经济指标-欧元区\n金十数据中心-经济指标-欧元区-国民经济运行状况-经济状况\n金十数据中心-经济指标-欧元区-国民经济运行状况-物价水平\n金十数据中心-经济指标-欧元区-国民经济运行状况-劳动力市场\n金十数据中心-经济指标-欧元区-贸易状况\n金十数据中心-经济指标-欧元区-产业指标\n金十数据中心-经济指标-欧元区-领先指标\n\"\"\"\n\nimport time\n\nimport pandas as pd\nimport requests\nfrom tqdm import tqdm\n\n\n# 金十数据中心-经济指标-欧元区-国民经济运行状况\n# 金十数据中心-经济指标-欧元区-国民经济运行状况-经济状况\n# 金十数据中心-经济指标-欧元区-国民经济运行状况-经济状况-欧元区季度GDP年率报告\ndef macro_euro_gdp_yoy() -> pd.DataFrame:\n    \"\"\"\n    欧元区季度 GDP 年率报告, 数据区间从 20131114-至今\n    https://datacenter.jin10.com/reportType/dc_eurozone_gdp_yoy\n    :return: 欧元区季度 GDP 年率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    ec = 84\n    url = \"https://datacenter-api.jin10.com/reports/dates\"\n    params = {\"category\": \"ec\", \"attr_id\": ec}\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    date_list = data_json[\"data\"]\n    date_point_list = [item for num, item in enumerate(date_list) if num % 20 == 0]\n    big_df = pd.DataFrame()\n    for date in tqdm(date_point_list, leave=False):\n        url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n        params = {\n            \"max_date\": f\"{date}\",\n            \"category\": \"ec\",\n            \"attr_id\": ec,\n        }\n        headers = {\n            \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/107.0.0.0 Safari/537.36\",\n            \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n            \"x-csrf-token\": \"x-csrf-token\",\n            \"x-version\": \"1.0.0\",\n        }\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            data_json[\"data\"][\"values\"],\n            columns=[item[\"name\"] for item in data_json[\"data\"][\"keys\"]],\n        )\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n\n    big_df[\"商品\"] = \"欧元区季度GDP年率\"\n\n    big_df = big_df[[\"商品\", \"日期\", \"今值\", \"预测值\", \"前值\"]]\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"])\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"])\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"])\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-欧元区-国民经济运行状况-物价水平-欧元区CPI月率报告\ndef macro_euro_cpi_mom() -> pd.DataFrame:\n    \"\"\"\n    欧元区 CPI 月率报告, 数据区间从 19900301-至今\n    https://datacenter.jin10.com/reportType/dc_eurozone_cpi_mom\n    https://cdn.jin10.com/dc/reports/dc_eurozone_cpi_mom_all.js?v=1578578318\n    :return: 欧元区CPI月率报告\n    :rtype: pandas.Series\n    \"\"\"\n    ec = 84\n    url = \"https://datacenter-api.jin10.com/reports/dates\"\n    params = {\"category\": \"ec\", \"attr_id\": ec}\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    date_list = data_json[\"data\"]\n    date_point_list = [item for num, item in enumerate(date_list) if num % 20 == 0]\n    big_df = pd.DataFrame()\n    for date in tqdm(date_point_list, leave=False):\n        url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n        params = {\n            \"max_date\": f\"{date}\",\n            \"category\": \"ec\",\n            \"attr_id\": ec,\n        }\n        headers = {\n            \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/107.0.0.0 Safari/537.36\",\n            \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n            \"x-csrf-token\": \"x-csrf-token\",\n            \"x-version\": \"1.0.0\",\n        }\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            data_json[\"data\"][\"values\"],\n            columns=[item[\"name\"] for item in data_json[\"data\"][\"keys\"]],\n        )\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df[\"商品\"] = \"欧元区CPI月率\"\n    big_df = big_df[[\"商品\", \"日期\", \"今值\", \"预测值\", \"前值\"]]\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"])\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"])\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"])\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-欧元区-国民经济运行状况-物价水平-欧元区CPI年率报告\ndef macro_euro_cpi_yoy() -> pd.DataFrame:\n    \"\"\"\n    欧元区CPI年率报告, 数据区间从19910201-至今\n    https://datacenter.jin10.com/reportType/dc_eurozone_cpi_yoy\n    https://cdn.jin10.com/dc/reports/dc_eurozone_cpi_yoy_all.js?v=1578578404\n    :return: 欧元区CPI年率报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    ec = 8\n    url = \"https://datacenter-api.jin10.com/reports/dates\"\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": ec,\n    }\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    date_list = data_json[\"data\"]\n    date_point_list = [item for num, item in enumerate(date_list) if num % 20 == 0]\n    big_df = pd.DataFrame()\n    for date in tqdm(date_point_list, leave=False):\n        url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n        params = {\n            \"max_date\": f\"{date}\",\n            \"category\": \"ec\",\n            \"attr_id\": ec,\n        }\n        headers = {\n            \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/107.0.0.0 Safari/537.36\",\n            \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n            \"x-csrf-token\": \"x-csrf-token\",\n            \"x-version\": \"1.0.0\",\n        }\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            data_json[\"data\"][\"values\"],\n            columns=[item[\"name\"] for item in data_json[\"data\"][\"keys\"]],\n        )\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df[\"商品\"] = \"欧元区CPI年率\"\n    big_df = big_df[[\"商品\", \"日期\", \"今值\", \"预测值\", \"前值\"]]\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"])\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"])\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"])\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-欧元区-国民经济运行状况-物价水平-欧元区PPI月率报告\ndef macro_euro_ppi_mom() -> pd.DataFrame:\n    \"\"\"\n    欧元区PPI月率报告, 数据区间从19810301-至今\n    https://datacenter.jin10.com/reportType/dc_eurozone_ppi_mom\n    https://cdn.jin10.com/dc/reports/dc_eurozone_ppi_mom_all.js?v=1578578493\n    :return: 欧元区PPI月率报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    ec = 36\n    url = \"https://datacenter-api.jin10.com/reports/dates\"\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": ec,\n    }\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    date_list = data_json[\"data\"]\n    date_point_list = [item for num, item in enumerate(date_list) if num % 20 == 0]\n    big_df = pd.DataFrame()\n    for date in tqdm(date_point_list, leave=False):\n        url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n        params = {\n            \"max_date\": f\"{date}\",\n            \"category\": \"ec\",\n            \"attr_id\": ec,\n        }\n        headers = {\n            \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/107.0.0.0 Safari/537.36\",\n            \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n            \"x-csrf-token\": \"x-csrf-token\",\n            \"x-version\": \"1.0.0\",\n        }\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            data_json[\"data\"][\"values\"],\n            columns=[item[\"name\"] for item in data_json[\"data\"][\"keys\"]],\n        )\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df[\"商品\"] = \"欧元区PPI月率\"\n    big_df = big_df[[\"商品\", \"日期\", \"今值\", \"预测值\", \"前值\"]]\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"])\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"])\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"])\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-欧元区-国民经济运行状况-物价水平-欧元区零售销售月率报告\ndef macro_euro_retail_sales_mom() -> pd.DataFrame:\n    \"\"\"\n    欧元区零售销售月率报告, 数据区间从20000301-至今\n    https://datacenter.jin10.com/reportType/dc_eurozone_retail_sales_mom\n    https://cdn.jin10.com/dc/reports/dc_eurozone_retail_sales_mom_all.js?v=1578578576\n    :return: 欧元区零售销售月率报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    ec = 38\n    url = \"https://datacenter-api.jin10.com/reports/dates\"\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": ec,\n    }\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    date_list = data_json[\"data\"]\n    date_point_list = [item for num, item in enumerate(date_list) if num % 20 == 0]\n    big_df = pd.DataFrame()\n    for date in tqdm(date_point_list, leave=False):\n        url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n        params = {\n            \"max_date\": f\"{date}\",\n            \"category\": \"ec\",\n            \"attr_id\": ec,\n        }\n        headers = {\n            \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/107.0.0.0 Safari/537.36\",\n            \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n            \"x-csrf-token\": \"x-csrf-token\",\n            \"x-version\": \"1.0.0\",\n        }\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            data_json[\"data\"][\"values\"],\n            columns=[item[\"name\"] for item in data_json[\"data\"][\"keys\"]],\n        )\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df[\"商品\"] = \"欧元区零售销售月率\"\n    big_df = big_df[[\"商品\", \"日期\", \"今值\", \"预测值\", \"前值\"]]\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"])\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"])\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"])\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-欧元区-国民经济运行状况-劳动力市场-欧元区季调后就业人数季率报告\ndef macro_euro_employment_change_qoq() -> pd.DataFrame:\n    \"\"\"\n    欧元区季调后就业人数季率报告, 数据区间从20083017-至今\n    https://datacenter.jin10.com/reportType/dc_eurozone_employment_change_qoq\n    https://cdn.jin10.com/dc/reports/dc_eurozone_employment_change_qoq_all.js?v=1578578699\n    :return: 欧元区季调后就业人数季率报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    ec = 14\n    url = \"https://datacenter-api.jin10.com/reports/dates\"\n    params = {\"category\": \"ec\", \"attr_id\": ec}\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    date_list = data_json[\"data\"]\n    date_point_list = [item for num, item in enumerate(date_list) if num % 20 == 0]\n    big_df = pd.DataFrame()\n    for date in tqdm(date_point_list, leave=False):\n        url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n        params = {\n            \"max_date\": f\"{date}\",\n            \"category\": \"ec\",\n            \"attr_id\": ec,\n        }\n        headers = {\n            \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/107.0.0.0 Safari/537.36\",\n            \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n            \"x-csrf-token\": \"x-csrf-token\",\n            \"x-version\": \"1.0.0\",\n        }\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            data_json[\"data\"][\"values\"],\n            columns=[item[\"name\"] for item in data_json[\"data\"][\"keys\"]],\n        )\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df[\"商品\"] = \"欧元区季调后就业人数季率\"\n    big_df = big_df[[\"商品\", \"日期\", \"今值\", \"预测值\", \"前值\"]]\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"])\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"])\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"])\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-欧元区-国民经济运行状况-劳动力市场-欧元区失业率报告\ndef macro_euro_unemployment_rate_mom() -> pd.DataFrame:\n    \"\"\"\n    欧元区失业率报告, 数据区间从19980501-至今\n    https://datacenter.jin10.com/reportType/dc_eurozone_unemployment_rate_mom\n    https://cdn.jin10.com/dc/reports/dc_eurozone_unemployment_rate_mom_all.js?v=1578578767\n    :return: 欧元区失业率报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    ec = 46\n    url = \"https://datacenter-api.jin10.com/reports/dates\"\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": ec,\n    }\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    date_list = data_json[\"data\"]\n    date_point_list = [item for num, item in enumerate(date_list) if num % 20 == 0]\n    big_df = pd.DataFrame()\n    for date in tqdm(date_point_list, leave=False):\n        url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n        params = {\n            \"max_date\": f\"{date}\",\n            \"category\": \"ec\",\n            \"attr_id\": ec,\n        }\n        headers = {\n            \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/107.0.0.0 Safari/537.36\",\n            \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n            \"x-csrf-token\": \"x-csrf-token\",\n            \"x-version\": \"1.0.0\",\n        }\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            data_json[\"data\"][\"values\"],\n            columns=[item[\"name\"] for item in data_json[\"data\"][\"keys\"]],\n        )\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df[\"商品\"] = \"欧元区失业率\"\n    big_df = big_df[[\"商品\", \"日期\", \"今值\", \"预测值\", \"前值\"]]\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"])\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"])\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"])\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-欧元区-贸易状况-欧元区未季调贸易帐报告\ndef macro_euro_trade_balance() -> pd.DataFrame:\n    \"\"\"\n    欧元区未季调贸易帐报告, 数据区间从19990201-至今\n    https://datacenter.jin10.com/reportType/dc_eurozone_trade_balance_mom\n    https://cdn.jin10.com/dc/reports/dc_eurozone_trade_balance_mom_all.js?v=1578577862\n    :return: 欧元区未季调贸易帐报告-今值(亿欧元)\n    :rtype: pandas.Series\n    \"\"\"\n    ec = 43\n    url = \"https://datacenter-api.jin10.com/reports/dates\"\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": ec,\n    }\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    date_list = data_json[\"data\"]\n    date_point_list = [item for num, item in enumerate(date_list) if num % 20 == 0]\n    big_df = pd.DataFrame()\n    for date in tqdm(date_point_list, leave=False):\n        url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n        params = {\n            \"max_date\": f\"{date}\",\n            \"category\": \"ec\",\n            \"attr_id\": ec,\n        }\n        headers = {\n            \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/107.0.0.0 Safari/537.36\",\n            \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n            \"x-csrf-token\": \"x-csrf-token\",\n            \"x-version\": \"1.0.0\",\n        }\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            data_json[\"data\"][\"values\"],\n            columns=[item[\"name\"] for item in data_json[\"data\"][\"keys\"]],\n        )\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df[\"商品\"] = \"欧元区未季调贸易帐\"\n    big_df = big_df[[\"商品\", \"日期\", \"今值\", \"预测值\", \"前值\"]]\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"])\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"])\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"])\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-欧元区-贸易状况-欧元区经常帐报告\ndef macro_euro_current_account_mom() -> pd.DataFrame:\n    \"\"\"\n    欧元区经常帐报告, 数据区间从20080221-至今, 前两个值需要去掉\n    https://datacenter.jin10.com/reportType/dc_eurozone_current_account_mom\n    https://cdn.jin10.com/dc/reports/dc_eurozone_current_account_mom_all.js?v=1578577976\n    :return: 欧元区经常帐报告-今值(亿欧元)\n    :rtype: pandas.Series\n    \"\"\"\n    ec = 11\n    url = \"https://datacenter-api.jin10.com/reports/dates\"\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": ec,\n    }\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    date_list = data_json[\"data\"]\n    date_point_list = [item for num, item in enumerate(date_list) if num % 20 == 0]\n    big_df = pd.DataFrame()\n    for date in tqdm(date_point_list, leave=False):\n        url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n        params = {\n            \"max_date\": f\"{date}\",\n            \"category\": \"ec\",\n            \"attr_id\": ec,\n        }\n        headers = {\n            \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/107.0.0.0 Safari/537.36\",\n            \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n            \"x-csrf-token\": \"x-csrf-token\",\n            \"x-version\": \"1.0.0\",\n        }\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            data_json[\"data\"][\"values\"],\n            columns=[item[\"name\"] for item in data_json[\"data\"][\"keys\"]],\n        )\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df[\"商品\"] = \"欧元区经常帐\"\n    big_df = big_df[[\"商品\", \"日期\", \"今值\", \"预测值\", \"前值\"]]\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"])\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"])\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"])\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-欧元区-产业指标-欧元区工业产出月率报告\ndef macro_euro_industrial_production_mom() -> pd.DataFrame:\n    \"\"\"\n    欧元区工业产出月率报告, 数据区间从19910301-至今\n    https://datacenter.jin10.com/reportType/dc_eurozone_industrial_production_mom\n    https://cdn.jin10.com/dc/reports/dc_eurozone_industrial_production_mom_all.js?v=1578577377\n    :return: 欧元区工业产出月率报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    ec = 19\n    url = \"https://datacenter-api.jin10.com/reports/dates\"\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": ec,\n    }\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    date_list = data_json[\"data\"]\n    date_point_list = [item for num, item in enumerate(date_list) if num % 20 == 0]\n    big_df = pd.DataFrame()\n    for date in tqdm(date_point_list, leave=False):\n        url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n        params = {\n            \"max_date\": f\"{date}\",\n            \"category\": \"ec\",\n            \"attr_id\": ec,\n        }\n        headers = {\n            \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/107.0.0.0 Safari/537.36\",\n            \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n            \"x-csrf-token\": \"x-csrf-token\",\n            \"x-version\": \"1.0.0\",\n        }\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            data_json[\"data\"][\"values\"],\n            columns=[item[\"name\"] for item in data_json[\"data\"][\"keys\"]],\n        )\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df[\"商品\"] = \"欧元区工业产出月率\"\n    big_df = big_df[[\"商品\", \"日期\", \"今值\", \"预测值\", \"前值\"]]\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"])\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"])\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"])\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-欧元区-产业指标-欧元区制造业PMI初值报告\ndef macro_euro_manufacturing_pmi() -> pd.DataFrame:\n    \"\"\"\n    欧元区制造业PMI初值报告, 数据区间从20080222-至今\n    https://datacenter.jin10.com/reportType/dc_eurozone_manufacturing_pmi\n    https://cdn.jin10.com/dc/reports/dc_eurozone_manufacturing_pmi_all.js?v=1578577537\n    :return: 欧元区制造业PMI初值报告-今值\n    :rtype: pandas.Series\n    \"\"\"\n    ec = 30\n    url = \"https://datacenter-api.jin10.com/reports/dates\"\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": ec,\n    }\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    date_list = data_json[\"data\"]\n    date_point_list = [item for num, item in enumerate(date_list) if num % 20 == 0]\n    big_df = pd.DataFrame()\n    for date in tqdm(date_point_list, leave=False):\n        url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n        params = {\n            \"max_date\": f\"{date}\",\n            \"category\": \"ec\",\n            \"attr_id\": ec,\n        }\n        headers = {\n            \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/107.0.0.0 Safari/537.36\",\n            \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n            \"x-csrf-token\": \"x-csrf-token\",\n            \"x-version\": \"1.0.0\",\n        }\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            data_json[\"data\"][\"values\"],\n            columns=[item[\"name\"] for item in data_json[\"data\"][\"keys\"]],\n        )\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df[\"商品\"] = \"欧元区制造业PMI初值\"\n    big_df = big_df[[\"商品\", \"日期\", \"今值\", \"预测值\", \"前值\"]]\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"])\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"])\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"])\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-欧元区-产业指标-欧元区服务业PMI终值报告\ndef macro_euro_services_pmi() -> pd.DataFrame:\n    \"\"\"\n    欧元区服务业PMI终值报告, 数据区间从 20080222-至今\n    https://datacenter.jin10.com/reportType/dc_eurozone_services_pmi\n    https://cdn.jin10.com/dc/reports/dc_eurozone_services_pmi_all.js?v=1578577639\n    :return: 欧元区服务业PMI终值报告-今值\n    :rtype: pandas.Series\n    \"\"\"\n    ec = 41\n    url = \"https://datacenter-api.jin10.com/reports/dates\"\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": ec,\n    }\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    date_list = data_json[\"data\"]\n    date_point_list = [item for num, item in enumerate(date_list) if num % 20 == 0]\n    big_df = pd.DataFrame()\n    for date in tqdm(date_point_list, leave=False):\n        url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n        params = {\n            \"max_date\": f\"{date}\",\n            \"category\": \"ec\",\n            \"attr_id\": ec,\n        }\n        headers = {\n            \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/107.0.0.0 Safari/537.36\",\n            \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n            \"x-csrf-token\": \"x-csrf-token\",\n            \"x-version\": \"1.0.0\",\n        }\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            data_json[\"data\"][\"values\"],\n            columns=[item[\"name\"] for item in data_json[\"data\"][\"keys\"]],\n        )\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df[\"商品\"] = \"欧元区服务业PMI终值\"\n    big_df = big_df[[\"商品\", \"日期\", \"今值\", \"预测值\", \"前值\"]]\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"])\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"])\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"])\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-欧元区-领先指标-欧元区ZEW经济景气指数报告\ndef macro_euro_zew_economic_sentiment() -> pd.DataFrame:\n    \"\"\"\n    欧元区ZEW经济景气指数报告, 数据区间从20080212-至今\n    https://datacenter.jin10.com/reportType/dc_eurozone_zew_economic_sentiment\n    https://cdn.jin10.com/dc/reports/dc_eurozone_zew_economic_sentiment_all.js?v=1578577013\n    :return: 欧元区ZEW经济景气指数报告-今值\n    :rtype: pandas.Series\n    \"\"\"\n    ec = 48\n    url = \"https://datacenter-api.jin10.com/reports/dates\"\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": ec,\n    }\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    date_list = data_json[\"data\"]\n    date_point_list = [item for num, item in enumerate(date_list) if num % 20 == 0]\n    big_df = pd.DataFrame()\n    for date in tqdm(date_point_list, leave=False):\n        url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n        params = {\n            \"max_date\": f\"{date}\",\n            \"category\": \"ec\",\n            \"attr_id\": ec,\n        }\n        headers = {\n            \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/107.0.0.0 Safari/537.36\",\n            \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n            \"x-csrf-token\": \"x-csrf-token\",\n            \"x-version\": \"1.0.0\",\n        }\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            data_json[\"data\"][\"values\"],\n            columns=[item[\"name\"] for item in data_json[\"data\"][\"keys\"]],\n        )\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df[\"商品\"] = \"欧元区ZEW经济景气指数\"\n    big_df = big_df[[\"商品\", \"日期\", \"今值\", \"预测值\", \"前值\"]]\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"])\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"])\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"])\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-欧元区-领先指标-欧元区Sentix投资者信心指数报告\ndef macro_euro_sentix_investor_confidence() -> pd.DataFrame:\n    \"\"\"\n    欧元区Sentix投资者信心指数报告, 数据区间从20020801-至今\n    https://datacenter.jin10.com/reportType/dc_eurozone_sentix_investor_confidence\n    https://cdn.jin10.com/dc/reports/dc_eurozone_sentix_investor_confidence_all.js?v=1578577195\n    :return: 欧元区Sentix投资者信心指数报告-今值\n    :rtype: pandas.Series\n    \"\"\"\n    ec = 40\n    url = \"https://datacenter-api.jin10.com/reports/dates\"\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": ec,\n    }\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    date_list = data_json[\"data\"]\n    date_point_list = [item for num, item in enumerate(date_list) if num % 20 == 0]\n    big_df = pd.DataFrame()\n    for date in tqdm(date_point_list, leave=False):\n        url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n        params = {\n            \"max_date\": f\"{date}\",\n            \"category\": \"ec\",\n            \"attr_id\": ec,\n        }\n        headers = {\n            \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/107.0.0.0 Safari/537.36\",\n            \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n            \"x-csrf-token\": \"x-csrf-token\",\n            \"x-version\": \"1.0.0\",\n        }\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            data_json[\"data\"][\"values\"],\n            columns=[item[\"name\"] for item in data_json[\"data\"][\"keys\"]],\n        )\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df[\"商品\"] = \"欧元区Sentix投资者信心指数\"\n    big_df = big_df[[\"商品\", \"日期\", \"今值\", \"预测值\", \"前值\"]]\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"])\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"])\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"])\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"]).dt.date\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-伦敦金属交易所(LME)-持仓报告\ndef macro_euro_lme_holding() -> pd.DataFrame:\n    \"\"\"\n    伦敦金属交易所(LME)-持仓报告, 数据区间从 20151022-至今\n    https://datacenter.jin10.com/reportType/dc_lme_traders_report\n    https://cdn.jin10.com/data_center/reports/lme_position.json?_=1591533934658\n    :return: 伦敦金属交易所(LME)-持仓报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\"_\": str(int(round(t * 1000)))}\n    r = requests.get(\n        url=\"https://cdn.jin10.com/data_center/reports/lme_position.json\", params=params\n    )\n    json_data = r.json()\n    temp_df = pd.DataFrame(json_data[\"values\"]).T\n    temp_df.fillna(value=\"[0, 0, 0]\", inplace=True)\n    big_df = pd.DataFrame()\n    for item in temp_df.columns:\n        for i in range(3):\n            inner_temp_df = temp_df.loc[:, item].apply(lambda x: eval(str(x))[i])\n            inner_temp_df.name = inner_temp_df.name + \"-\" + json_data[\"keys\"][i][\"name\"]\n            big_df = pd.concat(objs=[big_df, inner_temp_df], axis=1)\n    big_df = big_df.astype(\"float\")\n    big_df = big_df.iloc[:-1, :].copy()\n    big_df.reset_index(inplace=True)\n    big_df.rename(columns={\"index\": \"日期\"}, inplace=True)\n    big_df.sort_values(by=[\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-伦敦金属交易所(LME)-库存报告\ndef macro_euro_lme_stock() -> pd.DataFrame:\n    \"\"\"\n    伦敦金属交易所(LME)-库存报告, 数据区间从 20140702-至今\n    https://datacenter.jin10.com/reportType/dc_lme_report\n    https://cdn.jin10.com/data_center/reports/lme_stock.json?_=1591535304783\n    :return: 伦敦金属交易所(LME)-库存报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\"_\": str(int(round(t * 1000)))}\n    r = requests.get(\n        url=\"https://cdn.jin10.com/data_center/reports/lme_stock.json\", params=params\n    )\n    json_data = r.json()\n    temp_df = pd.DataFrame(json_data[\"values\"]).T\n    big_df = pd.DataFrame()\n    for item in temp_df.columns:\n        for i in range(3):\n            inner_temp_df = temp_df.loc[:, item].apply(lambda x: eval(str(x))[i])\n            inner_temp_df.name = inner_temp_df.name + \"-\" + json_data[\"keys\"][i][\"name\"]\n            big_df = pd.concat(objs=[big_df, inner_temp_df], axis=1)\n    big_df.sort_index(inplace=True)\n    big_df.reset_index(inplace=True)\n    big_df.rename(columns={\"index\": \"日期\"}, inplace=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    # 金十数据中心-经济指标-欧元区-国民经济运行状况\n    # 金十数据中心-经济指标-欧元区-国民经济运行状况-经济状况\n    # 金十数据中心-经济指标-欧元区-国民经济运行状况-经济状况-欧元区季度GDP年率报告\n    macro_euro_gdp_yoy_df = macro_euro_gdp_yoy()\n    print(macro_euro_gdp_yoy_df)\n\n    # 金十数据中心-经济指标-欧元区-国民经济运行状况-物价水平\n    # 金十数据中心-经济指标-欧元区-国民经济运行状况-物价水平-欧元区CPI月率报告\n    macro_euro_cpi_mom_df = macro_euro_cpi_mom()\n    print(macro_euro_cpi_mom_df)\n    # 金十数据中心-经济指标-欧元区-国民经济运行状况-物价水平-欧元区CPI年率报告\n    macro_euro_cpi_yoy_df = macro_euro_cpi_yoy()\n    print(macro_euro_cpi_yoy_df)\n    # 金十数据中心-经济指标-欧元区-国民经济运行状况-物价水平-欧元区PPI月率报告\n    macro_euro_ppi_mom_df = macro_euro_ppi_mom()\n    print(macro_euro_ppi_mom_df)\n    # 金十数据中心-经济指标-欧元区-国民经济运行状况-物价水平-欧元区零售销售月率报告\n    macro_euro_retail_sales_mom_df = macro_euro_retail_sales_mom()\n    print(macro_euro_retail_sales_mom_df)\n\n    # 金十数据中心-经济指标-欧元区-国民经济运行状况-劳动力市场\n    # 金十数据中心-经济指标-欧元区-国民经济运行状况-劳动力市场-欧元区季调后就业人数季率报告\n    macro_euro_employment_change_qoq_df = macro_euro_employment_change_qoq()\n    print(macro_euro_employment_change_qoq_df)\n    # 金十数据中心-经济指标-欧元区-国民经济运行状况-劳动力市场-欧元区失业率报告\n    macro_euro_unemployment_rate_mom_df = macro_euro_unemployment_rate_mom()\n    print(macro_euro_unemployment_rate_mom_df)\n    # 金十数据中心-经济指标-欧元区-贸易状况\n    # 金十数据中心-经济指标-欧元区-贸易状况-欧元区未季调贸易帐报告\n    macro_euro_trade_balance_df = macro_euro_trade_balance()\n    print(macro_euro_trade_balance_df)\n    # 金十数据中心-经济指标-欧元区-贸易状况-欧元区经常帐报告\n    macro_euro_current_account_mom_df = macro_euro_current_account_mom()\n    print(macro_euro_current_account_mom_df)\n    # 金十数据中心-经济指标-欧元区-产业指标\n    # 金十数据中心-经济指标-欧元区-产业指标-欧元区工业产出月率报告\n    macro_euro_industrial_production_mom_df = macro_euro_industrial_production_mom()\n    print(macro_euro_industrial_production_mom_df)\n    # 金十数据中心-经济指标-欧元区-产业指标-欧元区制造业PMI初值报告\n    macro_euro_manufacturing_pmi_df = macro_euro_manufacturing_pmi()\n    print(macro_euro_manufacturing_pmi_df)\n\n    # 金十数据中心-经济指标-欧元区-产业指标-欧元区服务业PMI终值报告\n    macro_euro_services_pmi_df = macro_euro_services_pmi()\n    print(macro_euro_services_pmi_df)\n\n    # 金十数据中心-经济指标-欧元区-领先指标\n    # 金十数据中心-经济指标-欧元区-领先指标-欧元区ZEW经济景气指数报告\n    macro_euro_zew_economic_sentiment_df = macro_euro_zew_economic_sentiment()\n    print(macro_euro_zew_economic_sentiment_df)\n\n    # 金十数据中心-经济指标-欧元区-领先指标-欧元区Sentix投资者信心指数报告\n    macro_euro_sentix_investor_confidence_df = macro_euro_sentix_investor_confidence()\n    print(macro_euro_sentix_investor_confidence_df)\n\n    # 金十数据中心-伦敦金属交易所(LME)-持仓报告\n    macro_euro_lme_holding_df = macro_euro_lme_holding()\n    print(macro_euro_lme_holding_df)\n\n    # 金十数据中心-伦敦金属交易所(LME)-库存报告\n    macro_euro_lme_stock_df = macro_euro_lme_stock()\n    print(macro_euro_lme_stock_df)\n"
  },
  {
    "path": "akshare/economic/macro_finance_ths.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/10/21 20:00\nDesc: 同花顺-数据中心-宏观数据-股票筹资\nhttps://data.10jqka.com.cn/macro/finance/\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\n\ndef macro_stock_finance() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-宏观数据-股票筹资\n    https://data.10jqka.com.cn/macro/finance/\n    :return: 股票筹资\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://data.10jqka.com.cn/macro/finance/\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36\"\n    }\n    r = requests.get(url, headers=headers)\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df.rename(\n        columns={\n            \"月份\": \"月份\",\n            \"募集资金(亿元)\": \"募集资金\",\n            \"首发募集资金(亿元)\": \"首发募集资金\",\n            \"增发募集资金(亿元)\": \"增发募集资金\",\n            \"配股募集资金(亿元)\": \"配股募集资金\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\"月份\", \"募集资金\", \"首发募集资金\", \"增发募集资金\", \"配股募集资金\"]\n    ]\n    temp_df[\"募集资金\"] = pd.to_numeric(temp_df[\"募集资金\"], errors=\"coerce\")\n    temp_df[\"首发募集资金\"] = pd.to_numeric(temp_df[\"首发募集资金\"], errors=\"coerce\")\n    temp_df[\"增发募集资金\"] = pd.to_numeric(temp_df[\"增发募集资金\"], errors=\"coerce\")\n    temp_df[\"配股募集资金\"] = pd.to_numeric(temp_df[\"配股募集资金\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"月份\"], inplace=True, ignore_index=True)\n    return temp_df\n\n\ndef macro_rmb_loan() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-宏观数据-新增人民币贷款\n    https://data.10jqka.com.cn/macro/loan/\n    :return: 新增人民币贷款\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://data.10jqka.com.cn/macro/loan/\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36\"\n    }\n    r = requests.get(url, headers=headers)\n    temp_df = pd.read_html(StringIO(r.text), skiprows=0)[0]\n    temp_df.columns = [\n        \"月份\",\n        \"新增人民币贷款-总额\",\n        \"新增人民币贷款-同比\",\n        \"新增人民币贷款-环比\",\n        \"累计人民币贷款-总额\",\n        \"累计人民币贷款-同比\",\n    ]\n    temp_df[\"新增人民币贷款-总额\"] = pd.to_numeric(\n        temp_df[\"新增人民币贷款-总额\"], errors=\"coerce\"\n    )\n    temp_df[\"累计人民币贷款-总额\"] = pd.to_numeric(\n        temp_df[\"累计人民币贷款-总额\"], errors=\"coerce\"\n    )\n    temp_df.sort_values(by=[\"月份\"], inplace=True, ignore_index=True)\n    return temp_df\n\n\ndef macro_rmb_deposit() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-宏观数据-人民币存款余额\n    https://data.10jqka.com.cn/macro/rmb/\n    :return: 人民币存款余额\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://data.10jqka.com.cn/macro/rmb/\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36\"\n    }\n    r = requests.get(url, headers=headers)\n    temp_df = pd.read_html(StringIO(r.text), skiprows=0)[0]\n    temp_df.columns = [\n        \"月份\",\n        \"新增存款-数量\",\n        \"新增存款-同比\",\n        \"新增存款-环比\",\n        \"新增企业存款-数量\",\n        \"新增企业存款-同比\",\n        \"新增企业存款-环比\",\n        \"新增储蓄存款-数量\",\n        \"新增储蓄存款-同比\",\n        \"新增储蓄存款-环比\",\n        \"新增其他存款-数量\",\n        \"新增其他存款-同比\",\n        \"新增其他存款-环比\",\n    ]\n    temp_df[\"新增存款-数量\"] = pd.to_numeric(temp_df[\"新增存款-数量\"], errors=\"coerce\")\n    temp_df[\"新增企业存款-数量\"] = pd.to_numeric(\n        temp_df[\"新增企业存款-数量\"], errors=\"coerce\"\n    )\n    temp_df[\"新增企业存款-数量\"] = pd.to_numeric(\n        temp_df[\"新增企业存款-数量\"], errors=\"coerce\"\n    )\n    temp_df[\"新增储蓄存款-数量\"] = pd.to_numeric(\n        temp_df[\"新增储蓄存款-数量\"], errors=\"coerce\"\n    )\n    temp_df[\"新增其他存款-数量\"] = pd.to_numeric(\n        temp_df[\"新增其他存款-数量\"], errors=\"coerce\"\n    )\n    temp_df.sort_values(by=[\"月份\"], inplace=True, ignore_index=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    macro_stock_finance_df = macro_stock_finance()\n    print(macro_stock_finance_df)\n\n    macro_rmb_loan_df = macro_rmb_loan()\n    print(macro_rmb_loan_df)\n\n    macro_rmb_deposit_df = macro_rmb_deposit()\n    print(macro_rmb_deposit_df)\n"
  },
  {
    "path": "akshare/economic/macro_germany.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/11/5 17:08\nDesc: 东方财富-德国-经济数据\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef macro_germany_core(symbol: str = \"EMG00179154\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-经济数据一览-宏观经济-德国-核心代码\n    https://data.eastmoney.com/cjsj/foreign_1_0.html\n    :param symbol: 代码\n    :type symbol: str\n    :return: 指定 symbol 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_GER\",\n        \"columns\": \"ALL\",\n        \"filter\": f'(INDICATOR_ID=\"{symbol}\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"5000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.rename(\n        columns={\n            \"COUNTRY\": \"-\",\n            \"INDICATOR_ID\": \"-\",\n            \"INDICATOR_NAME\": \"-\",\n            \"REPORT_DATE_CH\": \"时间\",\n            \"REPORT_DATE\": \"-\",\n            \"PUBLISH_DATE\": \"发布日期\",\n            \"VALUE\": \"现值\",\n            \"PRE_VALUE\": \"前值\",\n            \"INDICATOR_IDOLD\": \"-\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"])\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"])\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"]).dt.date\n    temp_df.sort_values([\"发布日期\"], inplace=True, ignore_index=True)\n    return temp_df\n\n\n# 东方财富-德国-经济数据-IFO商业景气指数\ndef macro_germany_ifo() -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-经济数据一览-德国-IFO商业景气指数\n    https://data.eastmoney.com/cjsj/foreign_1_0.html\n    :return: IFO商业景气指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_germany_core(symbol=\"EMG00179154\")\n    return temp_df\n\n\n# 东方财富-德国-经济数据-消费者物价指数月率终值\ndef macro_germany_cpi_monthly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-经济数据一览-德国-消费者物价指数月率终值\n    https://data.eastmoney.com/cjsj/foreign_1_1.html\n    :return: 消费者物价指数月率终值\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_germany_core(symbol=\"EMG00009758\")\n    return temp_df\n\n\n# 东方财富-德国-经济数据-消费者物价指数年率终值\ndef macro_germany_cpi_yearly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-经济数据一览-德国-消费者物价指数年率终值\n    https://data.eastmoney.com/cjsj/foreign_1_2.html\n    :return: 消费者物价指数年率终值\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_germany_core(symbol=\"EMG00009756\")\n    return temp_df\n\n\n# 东方财富-德国-经济数据-贸易帐(季调后)\ndef macro_germany_trade_adjusted() -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-经济数据一览-德国-贸易帐(季调后)\n    https://data.eastmoney.com/cjsj/foreign_1_3.html\n    :return: 贸易帐(季调后)\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_germany_core(symbol=\"EMG00009753\")\n    return temp_df\n\n\n# 东方财富-德国-经济数据-GDP\ndef macro_germany_gdp() -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-经济数据一览-德国-GDP\n    https://data.eastmoney.com/cjsj/foreign_1_4.html\n    :return: GDP\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_germany_core(symbol=\"EMG00009720\")\n    return temp_df\n\n\n# 东方财富-德国-经济数据-实际零售销售月率\ndef macro_germany_retail_sale_monthly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-经济数据一览-德国-实际零售销售月率\n    https://data.eastmoney.com/cjsj/foreign_1_5.html\n    :return: 实际零售销售月率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_germany_core(symbol=\"EMG01333186\")\n    return temp_df\n\n\n# 东方财富-德国-经济数据-实际零售销售年率\ndef macro_germany_retail_sale_yearly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-经济数据一览-德国-实际零售销售年率\n    https://data.eastmoney.com/cjsj/foreign_1_6.html\n    :return: 实际零售销售年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_germany_core(symbol=\"EMG01333192\")\n    return temp_df\n\n\n# 东方财富-德国-经济数据-ZEW 经济景气指数\ndef macro_germany_zew() -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-经济数据一览-德国-ZEW 经济景气指数\n    https://data.eastmoney.com/cjsj/foreign_1_7.html\n    :return: ZEW 经济景气指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_germany_core(symbol=\"EMG00172577\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    macro_germany_ifo_df = macro_germany_ifo()\n    print(macro_germany_ifo_df)\n\n    macro_germany_cpi_monthly_df = macro_germany_cpi_monthly()\n    print(macro_germany_cpi_monthly_df)\n\n    macro_germany_cpi_yearly_df = macro_germany_cpi_yearly()\n    print(macro_germany_cpi_yearly_df)\n\n    macro_germany_trade_adjusted_df = macro_germany_trade_adjusted()\n    print(macro_germany_trade_adjusted_df)\n\n    macro_germany_gdp_df = macro_germany_gdp()\n    print(macro_germany_gdp_df)\n\n    macro_germany_retail_sale_monthly_df = macro_germany_retail_sale_monthly()\n    print(macro_germany_retail_sale_monthly_df)\n\n    macro_germany_retail_sale_yearly_df = macro_germany_retail_sale_yearly()\n    print(macro_germany_retail_sale_yearly_df)\n\n    macro_germany_zew_df = macro_germany_zew()\n    print(macro_germany_zew_df)\n"
  },
  {
    "path": "akshare/economic/macro_info_ws.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/5/15 18:20\nDesc: 华尔街见闻-日历-宏观\nhttps://wallstreetcn.com/calendar\n\"\"\"\n\nfrom datetime import datetime, timedelta\n\nimport numpy as np\nimport pandas as pd\nimport requests\n\n\ndef __convert_date_format(date: str) -> str:\n    \"\"\"\n    将日期字符串从格式'%Y%m%d'转换为格式'%Y-%m-%d %H:%M:%S'。\n\n    :param date: 日期字符串,格式为'%Y%m%d'\n    :return: 转换后的日期字符串,格式为'%Y-%m-%d %H:%M:%S'\n    \"\"\"\n    datetime_obj = datetime.strptime(date, \"%Y%m%d\")\n    return datetime_obj.strftime(\"%Y-%m-%d %H:%M:%S\")\n\n\ndef __format_date(date: str) -> int:\n    \"\"\"\n    将日期字符串转换为Unix时间戳。\n\n    :param date: 日期字符串,格式为'%Y-%m-%d %H:%M:%S'\n    :return: Unix时间戳\n    \"\"\"\n    datetime_obj = datetime.strptime(date, \"%Y-%m-%d %H:%M:%S\")\n    return int(datetime_obj.timestamp())\n\n\ndef macro_info_ws(date: str = \"20240514\") -> pd.DataFrame:\n    \"\"\"\n    华尔街见闻-日历-宏观\n    https://wallstreetcn.com/calendar\n    :param date: 日期\n    :type date: str\n    :return: 日历-宏观\n    :rtype: pandas.DataFrame\n    \"\"\"\n    date = __convert_date_format(date)\n    url = \"https://api-one-wscn.awtmt.com/apiv1/finance/macrodatas\"\n    datetime_obj = datetime.strptime(date, \"%Y-%m-%d %H:%M:%S\")\n    one_day = timedelta(days=1)\n    new_datetime = datetime_obj + one_day\n    date_str = new_datetime.strftime(\"%Y-%m-%d %H:%M:%S\")\n    params = {\"start\": __format_date(date), \"end\": __format_date(date_str)}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"items\"])\n    temp_df[\"public_date\"] = pd.to_datetime(\n        temp_df[\"public_date\"], errors=\"coerce\", unit=\"s\", utc=True\n    ).dt.tz_convert(\"Asia/Shanghai\")\n    temp_df[\"public_date\"] = temp_df[\"public_date\"].dt.strftime(\"%Y-%m-%d %H:%M:%S\")\n    temp_df = temp_df.rename(\n        columns={\n            \"public_date\": \"时间\",\n            \"country\": \"地区\",\n            \"title\": \"事件\",\n            \"importance\": \"重要性\",\n            \"actual\": \"今值\",\n            \"forecast\": \"预期\",\n            \"previous\": \"前值\",\n            \"revised\": \"修正\",\n            \"uri\": \"链接\",\n        }\n    )\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"地区\",\n            \"事件\",\n            \"重要性\",\n            \"今值\",\n            \"预期\",\n            \"前值\",\n            \"修正\",\n            \"链接\",\n        ]\n    ]\n    temp_df[\"今值\"] = pd.to_numeric(temp_df[\"今值\"], errors=\"coerce\")\n    temp_df[\"预期\"] = pd.to_numeric(temp_df[\"预期\"], errors=\"coerce\")\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"修正\"] = pd.to_numeric(temp_df[\"修正\"], errors=\"coerce\")\n    temp_df[\"前值\"] = np.where(\n        temp_df[\"修正\"].notnull(), temp_df[\"修正\"], temp_df[\"前值\"]\n    )\n    del temp_df[\"修正\"]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    macro_info_ws_df = macro_info_ws(date=\"20240514\")\n    print(macro_info_ws_df)\n"
  },
  {
    "path": "akshare/economic/macro_japan.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/3 16:00\nDesc: 东方财富-经济数据-日本\nhttps://data.eastmoney.com/cjsj/foreign_3_0.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef macro_japan_core(symbol: str = \"EMG00341602\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-经济数据一览-宏观经济-日本-核心代码\n    https://data.eastmoney.com/cjsj/foreign_1_0.html\n    :param symbol: 代码\n    :type symbol: str\n    :return: 指定 symbol 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_JPAN\",\n        \"columns\": \"ALL\",\n        \"filter\": f'(INDICATOR_ID=\"{symbol}\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"5000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.rename(\n        columns={\n            \"COUNTRY\": \"-\",\n            \"INDICATOR_ID\": \"-\",\n            \"INDICATOR_NAME\": \"-\",\n            \"REPORT_DATE_CH\": \"时间\",\n            \"REPORT_DATE\": \"-\",\n            \"PUBLISH_DATE\": \"发布日期\",\n            \"VALUE\": \"现值\",\n            \"PRE_VALUE\": \"前值\",\n            \"INDICATOR_IDOLD\": \"-\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"], errors=\"coerce\").dt.date\n    temp_df.sort_values([\"发布日期\"], inplace=True, ignore_index=True)\n    return temp_df\n\n\n# 央行公布利率决议\ndef macro_japan_bank_rate() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-日本-央行公布利率决议\n    https://data.eastmoney.com/cjsj/foreign_3_0.html\n    :return: 央行公布利率决议\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_japan_core(symbol=\"EMG00342252\")\n    return temp_df\n\n\n# 全国消费者物价指数年率\ndef macro_japan_cpi_yearly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-日本-全国消费者物价指数年率\n    https://data.eastmoney.com/cjsj/foreign_3_1.html\n    :return: 全国消费者物价指数年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_japan_core(symbol=\"EMG00005004\")\n    return temp_df\n\n\n# 全国核心消费者物价指数年率\ndef macro_japan_core_cpi_yearly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-日本-全国核心消费者物价指数年率\n    https://data.eastmoney.com/cjsj/foreign_2_2.html\n    :return: 全国核心消费者物价指数年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_japan_core(symbol=\"EMG00158099\")\n    return temp_df\n\n\n# 失业率\ndef macro_japan_unemployment_rate() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-日本-失业率\n    https://data.eastmoney.com/cjsj/foreign_2_3.html\n    :return: 失业率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_japan_core(symbol=\"EMG00005047\")\n    return temp_df\n\n\n# 领先指标终值\ndef macro_japan_head_indicator() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-日本-领先指标终值\n    https://data.eastmoney.com/cjsj/foreign_3_4.html\n    :return: 领先指标终值\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_japan_core(symbol=\"EMG00005117\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    macro_japan_bank_rate_df = macro_japan_bank_rate()\n    print(macro_japan_bank_rate_df)\n\n    macro_japan_cpi_yearly_df = macro_japan_cpi_yearly()\n    print(macro_japan_cpi_yearly_df)\n\n    macro_japan_core_cpi_yearly_df = macro_japan_core_cpi_yearly()\n    print(macro_japan_core_cpi_yearly_df)\n\n    macro_japan_unemployment_rate_df = macro_japan_unemployment_rate()\n    print(macro_japan_unemployment_rate_df)\n\n    macro_japan_head_indicator_df = macro_japan_head_indicator()\n    print(macro_japan_head_indicator_df)\n"
  },
  {
    "path": "akshare/economic/macro_other.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/3 16:36\nDesc: 金十数据-其他-加密货币实时行情\n\"\"\"\n\nfrom datetime import datetime\n\nimport pandas as pd\nimport requests\n\n\ndef crypto_js_spot() -> pd.DataFrame:\n    \"\"\"\n    主流加密货币的实时行情数据, 一次请求返回具体某一时刻行情数据\n    https://datacenter.jin10.com/reportType/dc_bitcoin_current\n    :return: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-api.jin10.com/crypto_currency/list\"\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n    r = requests.get(url, headers=headers)\n    data_json = r.json()\n    data_df = pd.DataFrame(data_json[\"data\"])\n    data_df[\"reported_at\"] = pd.to_datetime(data_df[\"reported_at\"])\n    data_df.columns = [\n        \"市场\",\n        \"交易品种\",\n        \"最近报价\",\n        \"涨跌额\",\n        \"涨跌幅\",\n        \"24小时最高\",\n        \"24小时最低\",\n        \"24小时成交量\",\n        \"更新时间\",\n    ]\n    data_df[\"最近报价\"] = pd.to_numeric(data_df[\"最近报价\"], errors=\"coerce\")\n    data_df[\"涨跌额\"] = pd.to_numeric(data_df[\"涨跌额\"], errors=\"coerce\")\n    data_df[\"涨跌幅\"] = pd.to_numeric(data_df[\"涨跌幅\"], errors=\"coerce\")\n    data_df[\"24小时最高\"] = pd.to_numeric(data_df[\"24小时最高\"], errors=\"coerce\")\n    data_df[\"24小时最低\"] = pd.to_numeric(data_df[\"24小时最低\"], errors=\"coerce\")\n    data_df[\"24小时成交量\"] = pd.to_numeric(data_df[\"24小时成交量\"], errors=\"coerce\")\n    data_df[\"更新时间\"] = data_df[\"更新时间\"].astype(str)\n    return data_df\n\n\ndef macro_fx_sentiment(\n    start_date: str = \"20221011\", end_date: str = \"20221017\"\n) -> pd.DataFrame:\n    \"\"\"\n    金十数据-外汇-投机情绪报告\n    外汇投机情绪报告显示当前市场多空仓位比例，数据由8家交易平台提供，涵盖11个主要货币对和1个黄金品种。\n    报告内容: 品种: 澳元兑日元、澳元兑美元、欧元兑美元、欧元兑澳元、欧元兑日元、英镑兑美元、英镑兑日元、纽元兑美元、美元兑加元、美元兑瑞郎、美元兑日元以及现货黄金兑美元。\n             数据: 由Shark - fx整合全球8家交易平台（ 包括 Oanda、 FXCM、 Insta、 Dukas、 MyFxBook以及FiboGroup） 的多空投机仓位数据而成。\n    名词释义: 外汇投机情绪报告显示当前市场多空仓位比例，数据由8家交易平台提供，涵盖11个主要货币对和1个黄金品种。\n    工具使用策略: Shark-fx声明表示，基于“主流通常都是错误的”的事实，当空头头寸超过60%，交易者就应该建立多头仓位； 同理，当市场多头头寸超过60%，交易者则应该建立空头仓位。此外，当多空仓位比例接近50%的情况下，我们则倾向于建议交易者不要进场，保持观望。\n    https://datacenter.jin10.com/reportType/dc_ssi_trends\n    :param start_date: 具体交易日\n    :type start_date: str\n    :param end_date: 具体交易日, 与 end_date 相同\n    :type end_date: str\n    :return: 投机情绪报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    start_date = \"-\".join([start_date[:4], start_date[4:6], start_date[6:]])\n    end_date = \"-\".join([end_date[:4], end_date[4:6], end_date[6:]])\n    url = \"https://datacenter-api.jin10.com/sentiment/datas\"\n    params = {\n        \"start_date\": start_date,\n        \"end_date\": end_date,\n        \"currency_pair\": \"\",\n    }\n    headers = {\n        \"accept\": \"*/*\",\n        \"accept-encoding\": \"\",\n        \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"cache-control\": \"no-cache\",\n        \"origin\": \"https://datacenter.jin10.com\",\n        \"pragma\": \"no-cache\",\n        \"referer\": \"https://datacenter.jin10.com/reportType/dc_ssi_trends\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-site\": \"same-site\",\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/79.0.3945.130 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"\",\n        \"x-version\": \"1.0.0\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"values\"]).T\n    temp_df.reset_index(inplace=True)\n    temp_df.rename(columns={\"index\": \"date\"}, inplace=True)\n    for col in temp_df.columns[1:]:\n        temp_df[col] = pd.to_numeric(temp_df[col], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    crypto_js_spot_df = crypto_js_spot()\n    print(crypto_js_spot_df)\n\n    test_date = datetime.now().date().isoformat().replace(\"-\", \"\")\n\n    macro_fx_sentiment_df = macro_fx_sentiment(start_date=test_date, end_date=test_date)\n    print(macro_fx_sentiment_df)\n"
  },
  {
    "path": "akshare/economic/macro_swiss.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/11/8 10:00\nDesc: 东方财富-经济数据-瑞士\nhttp://data.eastmoney.com/cjsj/foreign_2_0.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef macro_swiss_core(symbol: str = \"EMG00341602\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-经济数据一览-宏观经济-瑞士-核心代码\n    https://data.eastmoney.com/cjsj/foreign_1_0.html\n    :param symbol: 代码\n    :type symbol: str\n    :return: 指定 symbol 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_CH\",\n        \"columns\": \"ALL\",\n        \"filter\": f'(INDICATOR_ID=\"{symbol}\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"5000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.rename(\n        columns={\n            \"COUNTRY\": \"-\",\n            \"INDICATOR_ID\": \"-\",\n            \"INDICATOR_NAME\": \"-\",\n            \"REPORT_DATE_CH\": \"时间\",\n            \"REPORT_DATE\": \"-\",\n            \"PUBLISH_DATE\": \"发布日期\",\n            \"VALUE\": \"现值\",\n            \"PRE_VALUE\": \"前值\",\n            \"INDICATOR_IDOLD\": \"-\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"])\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"])\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"]).dt.date\n    temp_df.sort_values([\"发布日期\"], inplace=True, ignore_index=True)\n    return temp_df\n\n\n# SVME采购经理人指数\ndef macro_swiss_svme():\n    \"\"\"\n    东方财富-经济数据-瑞士-SVME采购经理人指数\n    http://data.eastmoney.com/cjsj/foreign_2_0.html\n    :return: SVME采购经理人指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_swiss_core(symbol=\"EMG00341602\")\n    return temp_df\n\n\n# 贸易帐\ndef macro_swiss_trade():\n    \"\"\"\n    东方财富-经济数据-瑞士-贸易帐\n    http://data.eastmoney.com/cjsj/foreign_2_1.html\n    :return: 贸易帐\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_swiss_core(symbol=\"EMG00341603\")\n    return temp_df\n\n\n# 消费者物价指数年率\ndef macro_swiss_cpi_yearly():\n    \"\"\"\n    东方财富-经济数据-瑞士-消费者物价指数年率\n    http://data.eastmoney.com/cjsj/foreign_2_2.html\n    :return: 消费者物价指数年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_swiss_core(symbol=\"EMG00341604\")\n    return temp_df\n\n\n# GDP季率\ndef macro_swiss_gdp_quarterly():\n    \"\"\"\n    东方财富-经济数据-瑞士-GDP季率\n    http://data.eastmoney.com/cjsj/foreign_2_3.html\n    :return: GDP季率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_swiss_core(symbol=\"EMG00341600\")\n    return temp_df\n\n\n# GDP年率\ndef macro_swiss_gbd_yearly():\n    \"\"\"\n    东方财富-经济数据-瑞士-GDP 年率\n    http://data.eastmoney.com/cjsj/foreign_2_4.html\n    :return: GDP年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_swiss_core(symbol=\"EMG00341601\")\n    return temp_df\n\n\n# 央行公布利率决议\ndef macro_swiss_gbd_bank_rate():\n    \"\"\"\n    东方财富-经济数据-瑞士-央行公布利率决议\n    http://data.eastmoney.com/cjsj/foreign_2_5.html\n    :return: 央行公布利率决议\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_swiss_core(symbol=\"EMG00341606\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    macro_swiss_svme_df = macro_swiss_svme()\n    print(macro_swiss_svme_df)\n\n    macro_swiss_trade_df = macro_swiss_trade()\n    print(macro_swiss_trade_df)\n\n    macro_swiss_cpi_yearly_df = macro_swiss_cpi_yearly()\n    print(macro_swiss_cpi_yearly_df)\n\n    macro_swiss_gdp_quarterly_df = macro_swiss_gdp_quarterly()\n    print(macro_swiss_gdp_quarterly_df)\n\n    macro_swiss_gbd_yearly_df = macro_swiss_gbd_yearly()\n    print(macro_swiss_gbd_yearly_df)\n\n    macro_swiss_gbd_bank_rate_df = macro_swiss_gbd_bank_rate()\n    print(macro_swiss_gbd_bank_rate_df)\n"
  },
  {
    "path": "akshare/economic/macro_uk.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/11/12 17:14\nDesc: 东方财富-经济数据-英国\nhttps://data.eastmoney.com/cjsj/foreign_4_0.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef macro_uk_core(symbol: str = \"EMG00010348\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-经济数据一览-宏观经济-英国-核心代码\n    https://data.eastmoney.com/cjsj/foreign_4_0.html\n    :param symbol: 代码\n    :type symbol: str\n    :return: 指定 symbol 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_BRITAIN\",\n        \"columns\": \"ALL\",\n        \"filter\": f'(INDICATOR_ID=\"{symbol}\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"5000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.rename(\n        columns={\n            \"COUNTRY\": \"-\",\n            \"INDICATOR_ID\": \"-\",\n            \"INDICATOR_NAME\": \"-\",\n            \"REPORT_DATE_CH\": \"时间\",\n            \"REPORT_DATE\": \"-\",\n            \"PUBLISH_DATE\": \"发布日期\",\n            \"VALUE\": \"现值\",\n            \"PRE_VALUE\": \"前值\",\n            \"INDICATOR_IDOLD\": \"-\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"])\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"])\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"]).dt.date\n    temp_df.sort_values([\"发布日期\"], inplace=True, ignore_index=True)\n    return temp_df\n\n\n# Halifax房价指数月率\ndef macro_uk_halifax_monthly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-英国-Halifax 房价指数月率\n    https://data.eastmoney.com/cjsj/foreign_4_0.html\n    :return: Halifax 房价指数月率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_uk_core(symbol=\"EMG00342256\")\n    return temp_df\n\n\n# Halifax 房价指数年率\ndef macro_uk_halifax_yearly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-英国-Halifax 房价指数年率\n    https://data.eastmoney.com/cjsj/foreign_4_1.html\n    :return: Halifax房价指数年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_uk_core(symbol=\"EMG00010370\")\n    return temp_df\n\n\n# 贸易帐\ndef macro_uk_trade() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-英国-贸易帐\n    https://data.eastmoney.com/cjsj/foreign_4_2.html\n    :return: 贸易帐\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_uk_core(symbol=\"EMG00158309\")\n    return temp_df\n\n\n# 央行公布利率决议\ndef macro_uk_bank_rate() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-英国-央行公布利率决议\n    https://data.eastmoney.com/cjsj/foreign_4_3.html\n    :return: 央行公布利率决议\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_uk_core(symbol=\"EMG00342253\")\n    return temp_df\n\n\n# 核心消费者物价指数年率\ndef macro_uk_core_cpi_yearly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-英国-核心消费者物价指数年率\n    https://data.eastmoney.com/cjsj/foreign_4_4.html\n    :return: 核心消费者物价指数年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_uk_core(symbol=\"EMG00010279\")\n    return temp_df\n\n\n# 核心消费者物价指数月率\ndef macro_uk_core_cpi_monthly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-英国-核心消费者物价指数月率\n    https://data.eastmoney.com/cjsj/foreign_4_5.html\n    :return: 核心消费者物价指数月率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_uk_core(symbol=\"EMG00010291\")\n    return temp_df\n\n\n# 消费者物价指数年率\ndef macro_uk_cpi_yearly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-英国-消费者物价指数年率\n    https://data.eastmoney.com/cjsj/foreign_4_6.html\n    :return: 消费者物价指数年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_uk_core(symbol=\"EMG00010267\")\n    return temp_df\n\n\n# 消费者物价指数月率\ndef macro_uk_cpi_monthly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-英国-消费者物价指数月率\n    https://data.eastmoney.com/cjsj/foreign_4_7.html\n    :return: 消费者物价指数月率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_uk_core(symbol=\"EMG00010291\")\n    return temp_df\n\n\n# 零售销售月率\ndef macro_uk_retail_monthly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-英国-零售销售月率\n    https://data.eastmoney.com/cjsj/foreign_4_8.html\n    :return: 零售销售月率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_uk_core(symbol=\"EMG00158298\")\n    return temp_df\n\n\n# 零售销售年率\ndef macro_uk_retail_yearly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-英国-零售销售年率\n    https://data.eastmoney.com/cjsj/foreign_4_9.html\n    :return: 零售销售年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_uk_core(symbol=\"EMG00158297\")\n    return temp_df\n\n\n# Rightmove 房价指数年率\ndef macro_uk_rightmove_yearly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-英国-Rightmove 房价指数年率\n    https://data.eastmoney.com/cjsj/foreign_4_10.html\n    :return: Rightmove 房价指数年率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_uk_core(symbol=\"EMG00341608\")\n    return temp_df\n\n\n# Rightmove 房价指数月率\ndef macro_uk_rightmove_monthly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-英国-Rightmove 房价指数月率\n    https://data.eastmoney.com/cjsj/foreign_4_11.html\n    :return: Rightmove 房价指数月率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_uk_core(symbol=\"EMG00341607\")\n    return temp_df\n\n\n# GDP 季率初值\ndef macro_uk_gdp_quarterly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-英国-GDP 季率初值\n    https://data.eastmoney.com/cjsj/foreign_4_12.html\n    :return: GDP 季率初值\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_uk_core(symbol=\"EMG00158277\")\n    return temp_df\n\n\n# GDP 年率初值\ndef macro_uk_gdp_yearly() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-英国-GDP 年率初值\n    https://data.eastmoney.com/cjsj/foreign_4_13.html\n    :return: GDP 年率初值\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_uk_core(symbol=\"EMG00158276\")\n    return temp_df\n\n\n# 失业率\ndef macro_uk_unemployment_rate() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据-英国-失业率\n    https://data.eastmoney.com/cjsj/foreign_4_14.html\n    :return: 失业率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = macro_uk_core(symbol=\"EMG00010348\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    macro_uk_halifax_monthly_df = macro_uk_halifax_monthly()\n    print(macro_uk_halifax_monthly_df)\n\n    macro_uk_halifax_yearly_df = macro_uk_halifax_yearly()\n    print(macro_uk_halifax_yearly_df)\n\n    macro_uk_trade_df = macro_uk_trade()\n    print(macro_uk_trade_df)\n\n    macro_uk_bank_rate_df = macro_uk_bank_rate()\n    print(macro_uk_bank_rate_df)\n\n    macro_uk_core_cpi_yearly_df = macro_uk_core_cpi_yearly()\n    print(macro_uk_core_cpi_yearly_df)\n\n    macro_uk_core_cpi_monthly_df = macro_uk_core_cpi_monthly()\n    print(macro_uk_core_cpi_monthly_df)\n\n    macro_uk_cpi_yearly_df = macro_uk_cpi_yearly()\n    print(macro_uk_cpi_yearly_df)\n\n    macro_uk_cpi_monthly_df = macro_uk_cpi_monthly()\n    print(macro_uk_cpi_monthly_df)\n\n    macro_uk_retail_monthly_df = macro_uk_retail_monthly()\n    print(macro_uk_retail_monthly_df)\n\n    macro_uk_retail_yearly_df = macro_uk_retail_yearly()\n    print(macro_uk_retail_yearly_df)\n\n    macro_uk_rightmove_yearly_df = macro_uk_rightmove_yearly()\n    print(macro_uk_rightmove_yearly_df)\n\n    macro_uk_rightmove_monthly_df = macro_uk_rightmove_monthly()\n    print(macro_uk_rightmove_monthly_df)\n\n    macro_uk_gdp_quarterly_df = macro_uk_gdp_quarterly()\n    print(macro_uk_gdp_quarterly_df)\n\n    macro_uk_gdp_yearly_df = macro_uk_gdp_yearly()\n    print(macro_uk_gdp_yearly_df)\n\n    macro_uk_unemployment_rate_df = macro_uk_unemployment_rate()\n    print(macro_uk_unemployment_rate_df)\n"
  },
  {
    "path": "akshare/economic/macro_usa.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/4 18:00\nDesc: 金十数据中心-经济指标-美国\nhttps://datacenter.jin10.com/economic\n\"\"\"\n\nimport datetime\nimport time\n\nimport pandas as pd\nimport requests\n\n\ndef __macro_usa_base_func(symbol: str, params: dict) -> pd.DataFrame:\n    \"\"\"\n    金十数据中心-经济指标-美国-基础函数\n    https://datacenter.jin10.com/economic\n    :return: 美国经济指标数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(action=\"ignore\", category=FutureWarning)\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n    url = \"https://datacenter-api.jin10.com/reports/list_v2\"\n    params = params\n    big_df = pd.DataFrame()\n    while True:\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        if not data_json[\"data\"][\"values\"]:\n            break\n        temp_df = pd.DataFrame(data_json[\"data\"][\"values\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n        last_date_str = temp_df.iat[-1, 0]\n        last_date_str = (\n            (\n                datetime.datetime.strptime(last_date_str, \"%Y-%m-%d\")\n                - datetime.timedelta(days=1)\n            )\n            .date()\n            .isoformat()\n        )\n        params.update({\"max_date\": f\"{last_date_str}\"})\n    big_df.columns = [\n        \"日期\",\n        \"今值\",\n        \"预测值\",\n        \"前值\",\n    ]\n    big_df[\"商品\"] = symbol\n    big_df = big_df[\n        [\n            \"商品\",\n            \"日期\",\n            \"今值\",\n            \"预测值\",\n            \"前值\",\n        ]\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df[\"今值\"] = pd.to_numeric(big_df[\"今值\"], errors=\"coerce\")\n    big_df[\"预测值\"] = pd.to_numeric(big_df[\"预测值\"], errors=\"coerce\")\n    big_df[\"前值\"] = pd.to_numeric(big_df[\"前值\"], errors=\"coerce\")\n    big_df.sort_values([\"日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\n# 东方财富-美国-未决房屋销售月率\ndef macro_usa_phs() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据一览-美国-未决房屋销售月率\n    https://data.eastmoney.com/cjsj/foreign_0_5.html\n    :return: 未决房屋销售月率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_USA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00342249\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"时间\",\n        \"-\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"前值\",\n            \"现值\",\n            \"发布日期\",\n        ]\n    ]\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\n# 东方财富-经济指标-美国-物价水平-美国核心CPI月率报告\ndef macro_usa_cpi_yoy() -> pd.DataFrame:\n    \"\"\"\n    东方财富-经济数据一览-美国-CPI年率, 数据区间从 2008-至今\n    https://data.eastmoney.com/cjsj/foreign_0_12.html\n    :return: 美国 CPI 年率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_ECONOMICVALUE_USA\",\n        \"columns\": \"ALL\",\n        \"filter\": '(INDICATOR_ID=\"EMG00000733\")',\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    data_list = data_json[\"result\"][\"data\"]\n    temp_df = pd.DataFrame(\n        data_list, columns=[\"REPORT_DATE\", \"PUBLISH_DATE\", \"VALUE\", \"PRE_VALUE\"]\n    )\n    temp_df.columns = [\n        \"时间\",\n        \"发布日期\",\n        \"现值\",\n        \"前值\",\n    ]\n    temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"], errors=\"coerce\").dt.date\n    temp_df[\"发布日期\"] = pd.to_datetime(temp_df[\"发布日期\"], errors=\"coerce\").dt.date\n    temp_df[\"前值\"] = pd.to_numeric(temp_df[\"前值\"], errors=\"coerce\")\n    temp_df[\"现值\"] = pd.to_numeric(temp_df[\"现值\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"时间\"], inplace=True, ignore_index=True)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-经济状况-美国GDP\ndef macro_usa_gdp_monthly() -> pd.DataFrame:\n    \"\"\"\n    金十数据-美国国内生产总值(GDP)报告, 数据区间从 20080228-至今\n    https://datacenter.jin10.com/reportType/dc_usa_gdp\n    :return: 美国国内生产总值(GDP)\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"53\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国国内生产总值(GDP)\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-物价水平-美国CPI月率报告\ndef macro_usa_cpi_monthly() -> pd.DataFrame:\n    \"\"\"\n    美国 CPI 月率报告, 数据区间从 19700101-至今\n    https://datacenter.jin10.com/reportType/dc_usa_cpi\n    :return: 美国 CPI 月率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"9\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国CPI月率\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-物价水平-美国核心CPI月率报告\ndef macro_usa_core_cpi_monthly() -> pd.DataFrame:\n    \"\"\"\n    美国核心 CPI 月率报告, 数据区间从 19700101-至今\n    https://datacenter.jin10.com/reportType/dc_usa_core_cpi\n    :return: 美国核心CPI月率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"6\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国核心CPI月率\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-物价水平-美国个人支出月率报告\ndef macro_usa_personal_spending() -> pd.DataFrame:\n    \"\"\"\n    美国个人支出月率报告, 数据区间从19700101-至今\n    https://datacenter.jin10.com/reportType/dc_usa_personal_spending\n    :return: 美国个人支出月率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"35\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国个人支出月率\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-物价水平-美国零售销售月率报告\ndef macro_usa_retail_sales() -> pd.DataFrame:\n    \"\"\"\n    美国零售销售月率报告, 数据区间从 19920301-至今\n    https://datacenter.jin10.com/reportType/dc_usa_retail_sales\n    :return: 美国零售销售月率报告-今值(%)\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"39\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国零售销售月率\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-物价水平-美国进口物价指数报告\ndef macro_usa_import_price() -> pd.DataFrame:\n    \"\"\"\n    美国进口物价指数报告, 数据区间从19890201-至今\n    https://datacenter.jin10.com/reportType/dc_usa_import_price\n    :return: 美国进口物价指数报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"18\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国进口物价指数\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-物价水平-美国出口价格指数报告\ndef macro_usa_export_price() -> pd.DataFrame:\n    \"\"\"\n    美国出口价格指数报告, 数据区间从19890201-至今\n    https://datacenter.jin10.com/reportType/dc_usa_export_price\n    https://cdn.jin10.com/dc/reports/dc_usa_export_price_all.js?v=1578741832\n    :return: 美国出口价格指数报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"79\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国出口价格指数\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-劳动力市场-LMCI\ndef macro_usa_lmci() -> pd.DataFrame:\n    \"\"\"\n    美联储劳动力市场状况指数报告, 数据区间从 20141006-至今\n    https://datacenter.jin10.com/reportType/dc_usa_lmci\n    :return: 美联储劳动力市场状况指数报告-今值(%)\n    :rtype: pandas.Series\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"93\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美联储劳动力市场状况指数\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-劳动力市场-失业率-美国失业率报告\ndef macro_usa_unemployment_rate() -> pd.DataFrame:\n    \"\"\"\n    美国失业率报告, 数据区间从 19700101-至今\n    https://datacenter.jin10.com/reportType/dc_usa_unemployment_rate\n    :return: 获取美国失业率报告\n    :rtype: pandas.Series\n    \"\"\"\n    t = time.time()\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": \"47\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国失业率\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-劳动力市场-失业率-美国挑战者企业裁员人数报告\ndef macro_usa_job_cuts() -> pd.DataFrame:\n    \"\"\"\n    美国挑战者企业裁员人数报告, 数据区间从 19940201-至今\n    https://datacenter.jin10.com/reportType/dc_usa_job_cuts\n    :return: 美国挑战者企业裁员人数报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": \"78\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国挑战者企业裁员人数\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-劳动力市场-就业人口-美国非农就业人数报告\ndef macro_usa_non_farm() -> pd.DataFrame:\n    \"\"\"\n    美国非农就业人数报告, 数据区间从19700102-至今\n    https://datacenter.jin10.com/reportType/dc_nonfarm_payrolls\n    :return: 美国非农就业人数报告\n    :rtype: pandas.Series\n    \"\"\"\n    t = time.time()\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": \"33\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国非农就业人数\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-劳动力市场-就业人口-美国ADP就业人数报告\ndef macro_usa_adp_employment() -> pd.DataFrame:\n    \"\"\"\n    美国ADP就业人数报告, 数据区间从 20010601-至今\n    https://datacenter.jin10.com/reportType/dc_adp_nonfarm_employment\n    :return: 美国ADP就业人数报告\n    :rtype: pandas.Series\n    \"\"\"\n    t = time.time()\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": \"1\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国ADP就业人数\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-劳动力市场-消费者收入与支出-美国核心PCE物价指数年率报告\ndef macro_usa_core_pce_price() -> pd.DataFrame:\n    \"\"\"\n    美国核心PCE物价指数年率报告, 数据区间从 19700101-至今\n    https://datacenter.jin10.com/reportType/dc_usa_core_pce_price\n    :return: 美国核心PCE物价指数年率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": \"80\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国核心PCE物价指数年率\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-劳动力市场-消费者收入与支出-美国实际个人消费支出季率初值报告\ndef macro_usa_real_consumer_spending() -> pd.DataFrame:\n    \"\"\"\n    美国实际个人消费支出季率初值报告, 数据区间从 20131107-至今\n    https://datacenter.jin10.com/reportType/dc_usa_real_consumer_spending\n    :return: 美国实际个人消费支出季率初值报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": \"81\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(\n        symbol=\"美国实际个人消费支出季率初值\", params=params\n    )\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-贸易状况-美国贸易帐报告\ndef macro_usa_trade_balance() -> pd.DataFrame:\n    \"\"\"\n    美国贸易帐报告, 数据区间从 19700101-至今\n    https://datacenter.jin10.com/reportType/dc_usa_trade_balance\n    :return: 美国贸易帐报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": \"42\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国贸易帐报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-贸易状况-美国经常帐报告\ndef macro_usa_current_account() -> pd.DataFrame:\n    \"\"\"\n    美国经常帐报告, 数据区间从 20080317-至今\n    https://datacenter.jin10.com/reportType/dc_usa_current_account\n    :return: 美国经常帐报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"category\": \"ec\",\n        \"attr_id\": \"12\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国经常账报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-制造业-贝克休斯钻井报告\ndef macro_usa_rig_count() -> pd.DataFrame:\n    \"\"\"\n    贝克休斯钻井报告, 数据区间从 20080317-至今\n    https://datacenter.jin10.com/reportType/dc_rig_count_summary\n    :return: 贝克休斯钻井报告-当周\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\"_\": t}\n    res = requests.get(\n        url=\"https://cdn.jin10.com/data_center/reports/baker.json\", params=params\n    )\n    temp_df = pd.DataFrame(res.json().get(\"values\")).T\n    big_df = pd.DataFrame()\n    big_df[\"钻井总数_钻井数\"] = temp_df[\"钻井总数\"].apply(lambda x: x[0])\n    big_df[\"钻井总数_变化\"] = temp_df[\"钻井总数\"].apply(lambda x: x[1])\n    big_df[\"美国石油钻井_钻井数\"] = temp_df[\"美国石油钻井\"].apply(lambda x: x[0])\n    big_df[\"美国石油钻井_变化\"] = temp_df[\"美国石油钻井\"].apply(lambda x: x[1])\n    big_df[\"混合钻井_钻井数\"] = temp_df[\"混合钻井\"].apply(lambda x: x[0])\n    big_df[\"混合钻井_变化\"] = temp_df[\"混合钻井\"].apply(lambda x: x[1])\n    big_df[\"美国天然气钻井_钻井数\"] = temp_df[\"美国天然气钻井\"].apply(lambda x: x[0])\n    big_df[\"美国天然气钻井_变化\"] = temp_df[\"美国天然气钻井\"].apply(lambda x: x[1])\n    big_df = big_df.astype(\"float\")\n    big_df.reset_index(inplace=True)\n    big_df.rename(columns={\"index\": \"日期\"}, inplace=True)\n    big_df.sort_values(by=[\"日期\"], inplace=True, ignore_index=True)\n    return big_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-制造业-美国生产者物价指数(PPI)报告\ndef macro_usa_ppi() -> pd.DataFrame:\n    \"\"\"\n    美国生产者物价指数(PPI)报告, 数据区间从 20080226-至今\n    https://datacenter.jin10.com/reportType/dc_usa_ppi\n    :return: 美国生产者物价指数(PPI)报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"37\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国生产者物价指数\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-制造业-美国核心生产者物价指数(PPI)报告\ndef macro_usa_core_ppi() -> pd.DataFrame:\n    \"\"\"\n    美国核心生产者物价指数(PPI)报告, 数据区间从20080318-至今\n    https://datacenter.jin10.com/reportType/dc_usa_core_ppi\n    :return: 美国核心生产者物价指数(PPI)报告-今值(%)\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"7\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国核心生产者物价指数\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-制造业-美国API原油库存报告\ndef macro_usa_api_crude_stock() -> pd.DataFrame:\n    \"\"\"\n    美国 API 原油库存报告, 数据区间从 20120328-至今\n    https://datacenter.jin10.com/reportType/dc_usa_api_crude_stock\n    https://cdn.jin10.com/dc/reports/dc_usa_api_crude_stock_all.js?v=1578743859\n    :return: 美国API原油库存报告-今值(万桶)\n    :rtype: pandas.Series\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"69\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国API原油库存\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-制造业-美国Markit制造业PMI初值报告\ndef macro_usa_pmi() -> pd.DataFrame:\n    \"\"\"\n    美国 Markit 制造业 PMI 初值报告, 数据区间从 20120601-至今\n    https://datacenter.jin10.com/reportType/dc_usa_pmi\n    :return: 美国 Markit 制造业 PMI 初值报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"74\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国Markit制造业PMI报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-制造业-美国ISM制造业PMI报告\ndef macro_usa_ism_pmi() -> pd.DataFrame:\n    \"\"\"\n    美国 ISM 制造业 PMI 报告, 数据区间从 19700101-至今\n    https://datacenter.jin10.com/reportType/dc_usa_ism_pmi\n    :return: 美国 ISM 制造业 PMI 报告-今值\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"28\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国ISM制造业PMI报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-工业-美国工业产出月率报告\ndef macro_usa_industrial_production() -> pd.DataFrame:\n    \"\"\"\n    美国工业产出月率报告, 数据区间从 19700101-至今\n    https://datacenter.jin10.com/reportType/dc_usa_industrial_production\n    :return: 美国工业产出月率报告-今值(%)\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"20\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国工业产出月率报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-工业-美国耐用品订单月率报告\ndef macro_usa_durable_goods_orders() -> pd.DataFrame:\n    \"\"\"\n    美国耐用品订单月率报告, 数据区间从 20080227-至今\n    https://datacenter.jin10.com/reportType/dc_usa_durable_goods_orders\n    :return: 美国耐用品订单月率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"13\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国耐用品订单月率报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-工业-美国工厂订单月率报告\ndef macro_usa_factory_orders() -> pd.DataFrame:\n    \"\"\"\n    美国工厂订单月率报告, 数据区间从 19920401-至今\n    https://datacenter.jin10.com/reportType/dc_usa_factory_orders\n    :return: 美国工厂订单月率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"16\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国工厂订单月率报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-服务业-美国Markit服务业PMI初值报告\ndef macro_usa_services_pmi() -> pd.DataFrame:\n    \"\"\"\n    美国Markit服务业PMI初值报告, 数据区间从 20120701-至今\n    https://datacenter.jin10.com/reportType/dc_usa_services_pmi\n    :return: 美国Markit服务业PMI初值报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"89\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国Markit服务业PMI初值报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-服务业-美国商业库存月率报告\ndef macro_usa_business_inventories() -> pd.DataFrame:\n    \"\"\"\n    美国商业库存月率报告, 数据区间从 19920301-至今\n    https://datacenter.jin10.com/reportType/dc_usa_business_inventories\n    :return: 美国商业库存月率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"4\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国商业库存月率报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-服务业-美国ISM非制造业PMI报告\ndef macro_usa_ism_non_pmi() -> pd.DataFrame:\n    \"\"\"\n    美国ISM非制造业PMI报告, 数据区间从 19970801-至今\n    https://datacenter.jin10.com/reportType/dc_usa_ism_non_pmi\n    :return: 美国ISM非制造业PMI报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"29\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国ISM非制造业PMI报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-房地产-美国NAHB房产市场指数报告\ndef macro_usa_nahb_house_market_index() -> pd.DataFrame:\n    \"\"\"\n    美国NAHB房产市场指数报告, 数据区间从 19850201-至今\n    https://datacenter.jin10.com/reportType/dc_usa_nahb_house_market_index\n    :return: 美国NAHB房产市场指数报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"31\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国NAHB房产市场指数报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-房地产-美国新屋开工总数年化报告\ndef macro_usa_house_starts() -> pd.DataFrame:\n    \"\"\"\n    美国新屋开工总数年化报告, 数据区间从 19700101-至今\n    https://datacenter.jin10.com/reportType/dc_usa_house_starts\n    :return: 美国新屋开工总数年化报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"17\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国新屋开工总数年化报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-房地产-美国新屋销售总数年化报告\ndef macro_usa_new_home_sales() -> pd.DataFrame:\n    \"\"\"\n    美国新屋销售总数年化报告, 数据区间从 19700101-至今\n    https://datacenter.jin10.com/reportType/dc_usa_new_home_sales\n    :return: 美国新屋销售总数年化报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"32\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国新屋销售总数年化报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-房地产-美国营建许可总数报告\ndef macro_usa_building_permits() -> pd.DataFrame:\n    \"\"\"\n    美国营建许可总数报告, 数据区间从 20080220-至今\n    https://datacenter.jin10.com/reportType/dc_usa_building_permits\n    :return: 美国营建许可总数报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"3\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国营建许可总数报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-房地产-美国成屋销售总数年化报告\ndef macro_usa_exist_home_sales() -> pd.DataFrame:\n    \"\"\"\n    美国成屋销售总数年化报告, 数据区间从 19700101-至今\n    https://datacenter.jin10.com/reportType/dc_usa_exist_home_sales\n    :return: 美国成屋销售总数年化报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"15\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国成屋销售总数年化报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-房地产-美国FHFA房价指数月率报告\ndef macro_usa_house_price_index() -> pd.DataFrame:\n    \"\"\"\n    美国FHFA房价指数月率报告, 数据区间从 19910301-至今\n    https://datacenter.jin10.com/reportType/dc_usa_house_price_index\n    :return: 美国FHFA房价指数月率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"51\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国FHFA房价指数月率报告\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-房地产-美国S&P/CS20座大城市房价指数年率报告\ndef macro_usa_spcs20() -> pd.DataFrame:\n    \"\"\"\n    美国S&P/CS20座大城市房价指数年率报告, 数据区间从 20010201-至今\n    https://datacenter.jin10.com/reportType/dc_usa_spcs20\n    :return: 美国S&P/CS20座大城市房价指数年率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"52\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(\n        symbol=\"美国S&P/CS20座大城市房价指数年率\", params=params\n    )\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-产业指标-房地产-美国成屋签约销售指数月率报告\ndef macro_usa_pending_home_sales() -> pd.DataFrame:\n    \"\"\"\n    美国成屋签约销售指数月率报告, 数据区间从 20010301-至今\n    https://datacenter.jin10.com/reportType/dc_usa_pending_home_sales\n    :return: 美国成屋签约销售指数月率报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"34\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(\n        symbol=\"美国成屋签约销售指数月率报告\", params=params\n    )\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-领先指标-美国谘商会消费者信心指数报告\ndef macro_usa_cb_consumer_confidence() -> pd.DataFrame:\n    \"\"\"\n    金十数据中心-经济指标-美国-领先指标-美国谘商会消费者信心指数报告, 数据区间从 19700101-至今\n    https://datacenter.jin10.com/reportType/dc_usa_cb_consumer_confidence\n    :return: 美国谘商会消费者信心指数报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"5\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国谘商会消费者信心指数\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-领先指标-美国NFIB小型企业信心指数报告\ndef macro_usa_nfib_small_business() -> pd.DataFrame:\n    \"\"\"\n    美国NFIB小型企业信心指数报告, 数据区间从 19750201-至今\n    https://datacenter.jin10.com/reportType/dc_usa_nfib_small_business\n    :return: 美国NFIB小型企业信心指数报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"63\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(\n        symbol=\"美国NFIB小型企业信心指数报告\", params=params\n    )\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-领先指标-美国密歇根大学消费者信心指数初值报告\ndef macro_usa_michigan_consumer_sentiment() -> pd.DataFrame:\n    \"\"\"\n    美国密歇根大学消费者信心指数初值报告, 数据区间从 19700301-至今\n    https://datacenter.jin10.com/reportType/dc_usa_michigan_consumer_sentiment\n    :return: 美国密歇根大学消费者信心指数初值报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"50\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(\n        symbol=\"美国密歇根大学消费者信心指数初值报告\", params=params\n    )\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-其他-美国EIA原油库存报告\ndef macro_usa_eia_crude_rate() -> pd.DataFrame:\n    \"\"\"\n    美国 EIA 原油库存报告, 数据区间从 19950801-至今\n    https://datacenter.jin10.com/reportType/dc_eia_crude_oil\n    :return: 美国 EIA 原油库存报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"10\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国EIA原油库存\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-其他-美国初请失业金人数报告\ndef macro_usa_initial_jobless() -> pd.DataFrame:\n    \"\"\"\n    美国初请失业金人数报告, 数据区间从 19700101-至今\n    https://datacenter.jin10.com/reportType/dc_initial_jobless\n    :return: 美国 EIA 原油库存报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\n        \"max_date\": \"\",\n        \"category\": \"ec\",\n        \"attr_id\": \"44\",\n        \"_\": str(int(round(t * 1000))),\n    }\n    temp_df = __macro_usa_base_func(symbol=\"美国初请失业金人数\", params=params)\n    return temp_df\n\n\n# 金十数据中心-经济指标-美国-其他-美国原油产量报告\ndef macro_usa_crude_inner() -> pd.DataFrame:\n    \"\"\"\n    美国原油产量报告, 数据区间从 19830107-至今\n    https://datacenter.jin10.com/reportType/dc_eia_crude_oil_produce\n    :return: 美国原油产量报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\"_\": t}\n    res = requests.get(\n        url=\"https://cdn.jin10.com/data_center/reports/usa_oil.json\", params=params\n    )\n    temp_df = pd.DataFrame(res.json().get(\"values\")).T\n    big_df = pd.DataFrame()\n    big_df[\"美国国内原油总量-产量\"] = temp_df[\"美国国内原油总量\"].apply(lambda x: x[0])\n    big_df[\"美国国内原油总量-变化\"] = temp_df[\"美国国内原油总量\"].apply(lambda x: x[1])\n    big_df[\"美国本土48州原油产量-产量\"] = temp_df[\"美国本土48州原油产量\"].apply(\n        lambda x: x[0]\n    )\n    big_df[\"美国本土48州原油产量-变化\"] = temp_df[\"美国本土48州原油产量\"].apply(\n        lambda x: x[1]\n    )\n    big_df[\"美国阿拉斯加州原油产量-产量\"] = temp_df[\"美国阿拉斯加州原油产量\"].apply(\n        lambda x: x[0]\n    )\n    big_df[\"美国阿拉斯加州原油产量-变化\"] = temp_df[\"美国阿拉斯加州原油产量\"].apply(\n        lambda x: x[1]\n    )\n    big_df = big_df.astype(\"float\")\n    big_df.reset_index(inplace=True)\n    big_df.rename(columns={\"index\": \"日期\"}, inplace=True)\n    big_df.sort_values(by=[\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-美国商品期货交易委员会CFTC外汇类非商业持仓报告\ndef macro_usa_cftc_nc_holding() -> pd.DataFrame:\n    \"\"\"\n    美国商品期货交易委员会CFTC外汇类非商业持仓报告, 数据区间从 19830107-至今\n    https://datacenter.jin10.com/reportType/dc_cftc_nc_report\n    :return: 美国商品期货交易委员会CFTC外汇类非商业持仓报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\"_\": str(int(round(t * 1000)))}\n    r = requests.get(\n        url=\"https://cdn.jin10.com/data_center/reports/cftc_4.json\", params=params\n    )\n    json_data = r.json()\n    temp_df = pd.DataFrame(json_data[\"values\"]).T\n    temp_df.fillna(value=\"[0, 0, 0]\", inplace=True)\n    big_df = pd.DataFrame()\n    for item in temp_df.columns:\n        for i in range(3):\n            inner_temp_df = temp_df.loc[:, item].apply(lambda x: eval(str(x))[i])\n            inner_temp_df.name = inner_temp_df.name + \"-\" + json_data[\"keys\"][i][\"name\"]\n            big_df = pd.concat(objs=[big_df, inner_temp_df], axis=1)\n    big_df = big_df.astype(\"float\")\n    big_df.reset_index(inplace=True)\n    big_df.rename(columns={\"index\": \"日期\"}, inplace=True)\n    big_df.sort_values(by=[\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-美国商品期货交易委员会CFTC商品类非商业持仓报告\ndef macro_usa_cftc_c_holding() -> pd.DataFrame:\n    \"\"\"\n    美国商品期货交易委员会CFTC商品类非商业持仓报告, 数据区间从 19830107-至今\n    https://datacenter.jin10.com/reportType/dc_cftc_c_report\n    :return: 美国商品期货交易委员会CFTC外汇类非商业持仓报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\"_\": str(int(round(t * 1000)))}\n    r = requests.get(\n        url=\"https://cdn.jin10.com/data_center/reports/cftc_2.json\", params=params\n    )\n    json_data = r.json()\n    temp_df = pd.DataFrame(json_data[\"values\"]).T\n    temp_df.fillna(value=\"[0, 0, 0]\", inplace=True)\n    big_df = pd.DataFrame()\n    for item in temp_df.columns:\n        for i in range(3):\n            inner_temp_df = temp_df.loc[:, item].apply(lambda x: eval(str(x))[i])\n            inner_temp_df.name = inner_temp_df.name + \"-\" + json_data[\"keys\"][i][\"name\"]\n            big_df = pd.concat(objs=[big_df, inner_temp_df], axis=1)\n    big_df = big_df.astype(\"float\")\n    big_df.reset_index(inplace=True)\n    big_df.rename(columns={\"index\": \"日期\"}, inplace=True)\n    big_df.sort_values(by=[\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-美国商品期货交易委员会CFTC外汇类商业持仓报告\ndef macro_usa_cftc_merchant_currency_holding() -> pd.DataFrame:\n    \"\"\"\n    美国商品期货交易委员会CFTC外汇类商业持仓报告, 数据区间从 19860115-至今\n    https://datacenter.jin10.com/reportType/dc_cftc_merchant_currency\n    :return: 美国商品期货交易委员会CFTC外汇类商业持仓报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\"_\": str(int(round(t * 1000)))}\n    r = requests.get(\n        url=\"https://cdn.jin10.com/data_center/reports/cftc_3.json\", params=params\n    )\n    json_data = r.json()\n    temp_df = pd.DataFrame(json_data[\"values\"]).T\n    temp_df.fillna(value=\"[0, 0, 0]\", inplace=True)\n    big_df = pd.DataFrame()\n    for item in temp_df.columns:\n        for i in range(3):\n            inner_temp_df = temp_df.loc[:, item].apply(lambda x: eval(str(x))[i])\n            inner_temp_df.name = inner_temp_df.name + \"-\" + json_data[\"keys\"][i][\"name\"]\n            big_df = pd.concat(objs=[big_df, inner_temp_df], axis=1)\n    big_df = big_df.astype(\"float\")\n    big_df.reset_index(inplace=True)\n    big_df.rename(columns={\"index\": \"日期\"}, inplace=True)\n    big_df.sort_values(by=[\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-美国商品期货交易委员会CFTC商品类商业持仓报告\ndef macro_usa_cftc_merchant_goods_holding() -> pd.DataFrame:\n    \"\"\"\n    美国商品期货交易委员会CFTC商品类商业持仓报告, 数据区间从 19860115-至今\n    https://datacenter.jin10.com/reportType/dc_cftc_merchant_goods\n    :return: 美国商品期货交易委员会CFTC商品类商业持仓报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\"_\": str(int(round(t * 1000)))}\n    r = requests.get(\n        url=\"https://cdn.jin10.com/data_center/reports/cftc_1.json\", params=params\n    )\n    json_data = r.json()\n    temp_df = pd.DataFrame(json_data[\"values\"]).T\n    temp_df.fillna(value=\"[0, 0, 0]\", inplace=True)\n    big_df = pd.DataFrame()\n    for item in temp_df.columns:\n        for i in range(3):\n            inner_temp_df = temp_df.loc[:, item].apply(lambda x: eval(str(x))[i])\n            inner_temp_df.name = inner_temp_df.name + \"-\" + json_data[\"keys\"][i][\"name\"]\n            big_df = pd.concat(objs=[big_df, inner_temp_df], axis=1)\n    big_df = big_df.astype(\"float\")\n    big_df.reset_index(inplace=True)\n    big_df.rename(columns={\"index\": \"日期\"}, inplace=True)\n    big_df.sort_values(by=[\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\n# 金十数据中心-CME-贵金属\ndef macro_usa_cme_merchant_goods_holding():\n    \"\"\"\n    CME-贵金属, 数据区间从 20180405-至今\n    https://datacenter.jin10.com/org\n    :return: CME-贵金属\n    :rtype: pandas.DataFrame\n    \"\"\"\n    t = time.time()\n    params = {\"_\": str(int(round(t * 1000)))}\n    r = requests.get(\n        url=\"https://cdn.jin10.com/data_center/reports/cme_3.json\", params=params\n    )\n    json_data = r.json()\n    big_df = pd.DataFrame()\n    for item in json_data[\"values\"].keys():\n        temp_df = pd.DataFrame(json_data[\"values\"][item])\n        temp_df[\"日期\"] = item\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.columns = [\"pz\", \"tc\", \"-\", \"-\", \"-\", \"成交量\", \"-\", \"-\", \"日期\"]\n    big_df[\"品种\"] = big_df[\"pz\"] + \"-\" + big_df[\"tc\"]\n    big_df = big_df[[\"日期\", \"品种\", \"成交量\"]]\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    # 东方财富-经济指标-美国-未决房屋销售月率\n    macro_usa_phs_df = macro_usa_phs()\n    print(macro_usa_phs_df)\n\n    # 金十数据中心-经济指标-美国-经济状况-美国GDP\n    macro_usa_gdp_monthly_df = macro_usa_gdp_monthly()\n    print(macro_usa_gdp_monthly_df)\n\n    # 金十数据中心-经济指标-美国-物价水平-美国CPI月率报告\n    macro_usa_cpi_monthly_df = macro_usa_cpi_monthly()\n    print(macro_usa_cpi_monthly_df)\n\n    # 金十数据中心-经济指标-美国-物价水平-美国核心CPI月率报告\n    macro_usa_core_cpi_monthly_df = macro_usa_core_cpi_monthly()\n    print(macro_usa_core_cpi_monthly_df)\n\n    # 金十数据中心-经济指标-美国-物价水平-美国个人支出月率报告\n    macro_usa_personal_spending_df = macro_usa_personal_spending()\n    print(macro_usa_personal_spending_df)\n\n    # 金十数据中心-经济指标-美国-物价水平-美国零售销售月率报告\n    macro_usa_retail_sales_df = macro_usa_retail_sales()\n    print(macro_usa_retail_sales_df)\n\n    # 金十数据中心-经济指标-美国-物价水平-美国进口物价指数报告\n    macro_usa_import_price_df = macro_usa_import_price()\n    print(macro_usa_import_price_df)\n\n    # 金十数据中心-经济指标-美国-物价水平-美国出口价格指数报告\n    macro_usa_export_price_df = macro_usa_export_price()\n    print(macro_usa_export_price_df)\n\n    # 金十数据中心-经济指标-美国-劳动力市场-LMCI\n    macro_usa_lmci_df = macro_usa_lmci()\n    print(macro_usa_lmci_df)\n\n    # 金十数据中心-经济指标-美国-劳动力市场-失业率-美国失业率报告\n    macro_usa_unemployment_rate_df = macro_usa_unemployment_rate()\n    print(macro_usa_unemployment_rate_df)\n\n    # 金十数据中心-经济指标-美国-劳动力市场-失业率-美国挑战者企业裁员人数报告\n    macro_usa_job_cuts_df = macro_usa_job_cuts()\n    print(macro_usa_job_cuts_df)\n\n    # 金十数据中心-经济指标-美国-劳动力市场-就业人口-美国非农就业人数报告\n    macro_usa_non_farm_df = macro_usa_non_farm()\n    print(macro_usa_non_farm_df)\n\n    # 金十数据中心-经济指标-美国-劳动力市场-就业人口-美国ADP就业人数报告\n    macro_usa_adp_employment_df = macro_usa_adp_employment()\n    print(macro_usa_adp_employment_df)\n\n    # 金十数据中心-经济指标-美国-劳动力市场-消费者收入与支出-美国核心PCE物价指数年率报告\n    macro_usa_core_pce_price_df = macro_usa_core_pce_price()\n    print(macro_usa_core_pce_price_df)\n\n    # 金十数据中心-经济指标-美国-劳动力市场-消费者收入与支出-美国实际个人消费支出季率初值报告\n    macro_usa_real_consumer_spending_df = macro_usa_real_consumer_spending()\n    print(macro_usa_real_consumer_spending_df)\n\n    # 金十数据中心-经济指标-美国-贸易状况-美国贸易帐报告\n    macro_usa_trade_balance_df = macro_usa_trade_balance()\n    print(macro_usa_trade_balance_df)\n\n    # 金十数据中心-经济指标-美国-贸易状况-美国经常帐报告\n    macro_usa_current_account_df = macro_usa_current_account()\n    print(macro_usa_current_account_df)\n\n    # 金十数据中心-经济指标-美国-产业指标-制造业-贝克休斯钻井报告\n    macro_usa_rig_count_df = macro_usa_rig_count()\n    print(macro_usa_rig_count_df)\n\n    # 金十数据中心-经济指标-美国-产业指标-制造业-美国生产者物价指数(PPI)报告\n    macro_usa_ppi_df = macro_usa_ppi()\n    print(macro_usa_ppi_df)\n\n    # 金十数据中心-经济指标-美国-产业指标-制造业-美国核心生产者物价指数(PPI)报告\n    macro_usa_core_ppi_df = macro_usa_core_ppi()\n    print(macro_usa_core_ppi_df)\n\n    # 金十数据中心-经济指标-美国-产业指标-制造业-美国API原油库存报告\n    macro_usa_api_crude_stock_df = macro_usa_api_crude_stock()\n    print(macro_usa_api_crude_stock_df)\n\n    # 金十数据中心-经济指标-美国-产业指标-制造业-美国Markit制造业PMI初值报告\n    macro_usa_pmi_df = macro_usa_pmi()\n    print(macro_usa_pmi_df)\n\n    # 金十数据中心-经济指标-美国-产业指标-制造业-美国ISM制造业PMI报告\n    macro_usa_ism_pmi_df = macro_usa_ism_pmi()\n    print(macro_usa_ism_pmi_df)\n\n    # 金十数据中心-经济指标-美国-产业指标-房地产-美国NAHB房产市场指数报告\n    macro_usa_nahb_house_market_index_df = macro_usa_nahb_house_market_index()\n    print(macro_usa_nahb_house_market_index_df)\n\n    # 金十数据中心-经济指标-美国-产业指标-房地产-美国新屋开工总数年化报告\n    macro_usa_house_starts_df = macro_usa_house_starts()\n    print(macro_usa_house_starts_df)\n\n    # 金十数据中心-经济指标-美国-产业指标-房地产-美国新屋销售总数年化报告\n    macro_usa_new_home_sales_df = macro_usa_new_home_sales()\n    print(macro_usa_new_home_sales_df)\n\n    # 金十数据中心-经济指标-美国-产业指标-房地产-美国营建许可总数报告\n    macro_usa_building_permits_df = macro_usa_building_permits()\n    print(macro_usa_building_permits_df)\n\n    # 金十数据中心-经济指标-美国-产业指标-房地产-美国成屋销售总数年化报告\n    macro_usa_exist_home_sales_df = macro_usa_exist_home_sales()\n    print(macro_usa_exist_home_sales_df)\n\n    # 金十数据中心-经济指标-美国-产业指标-房地产-美国FHFA房价指数月率报告\n    macro_usa_house_price_index_df = macro_usa_house_price_index()\n    print(macro_usa_house_price_index_df)\n\n    # 金十数据中心-经济指标-美国-产业指标-房地产-美国S&P/CS20座大城市房价指数年率报告\n    macro_usa_spcs20_df = macro_usa_spcs20()\n    print(macro_usa_spcs20_df)\n\n    # 金十数据中心-经济指标-美国-产业指标-房地产-美国成屋签约销售指数月率报告\n    macro_usa_pending_home_sales_df = macro_usa_pending_home_sales()\n    print(macro_usa_pending_home_sales_df)\n\n    # 金十数据中心-经济指标-美国-领先指标-美国谘商会消费者信心指数报告\n    macro_usa_cb_consumer_confidence_df = macro_usa_cb_consumer_confidence()\n    print(macro_usa_cb_consumer_confidence_df)\n\n    # 金十数据中心-经济指标-美国-领先指标-美国NFIB小型企业信心指数报告\n    macro_usa_nfib_small_business_df = macro_usa_nfib_small_business()\n    print(macro_usa_nfib_small_business_df)\n\n    # 金十数据中心-经济指标-美国-领先指标-美国密歇根大学消费者信心指数初值报告\n    macro_usa_michigan_consumer_sentiment_df = macro_usa_michigan_consumer_sentiment()\n    print(macro_usa_michigan_consumer_sentiment_df)\n\n    # 金十数据中心-经济指标-美国-其他-美国EIA原油库存报告\n    macro_usa_eia_crude_rate_df = macro_usa_eia_crude_rate()\n    print(macro_usa_eia_crude_rate_df)\n\n    # 金十数据中心-经济指标-美国-其他-美国初请失业金人数报告\n    macro_usa_initial_jobless_df = macro_usa_initial_jobless()\n    print(macro_usa_initial_jobless_df)\n\n    # 金十数据中心-经济指标-美国-其他-美国原油产量报告\n    macro_usa_crude_inner_df = macro_usa_crude_inner()\n    print(macro_usa_crude_inner_df)\n\n    # 金十数据中心-美国商品期货交易委员会CFTC外汇类非商业持仓报告\n    macro_usa_cftc_nc_holding_df = macro_usa_cftc_nc_holding()\n    print(macro_usa_cftc_nc_holding_df)\n\n    # 金十数据中心-美国商品期货交易委员会CFTC商品类非商业持仓报告\n    macro_usa_cftc_c_holding_df = macro_usa_cftc_c_holding()\n    print(macro_usa_cftc_c_holding_df)\n\n    # 金十数据中心-美国商品期货交易委员会CFTC外汇类商业持仓报告\n    macro_usa_cftc_merchant_currency_holding_df = (\n        macro_usa_cftc_merchant_currency_holding()\n    )\n    print(macro_usa_cftc_merchant_currency_holding_df)\n\n    # 金十数据中心-美国商品期货交易委员会CFTC商品类商业持仓报告\n    macro_usa_cftc_merchant_goods_holding_df = macro_usa_cftc_merchant_goods_holding()\n    print(macro_usa_cftc_merchant_goods_holding_df)\n\n    # 金十数据中心-CME-贵金属\n    macro_usa_cme_merchant_goods_holding_df = macro_usa_cme_merchant_goods_holding()\n    print(macro_usa_cme_merchant_goods_holding_df)\n"
  },
  {
    "path": "akshare/economic/marco_cnbs.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/8/14 11:10\nDesc: 国家金融与发展实验室-中国宏观杠杆率数据\nhttp://114.115.232.154:8080/\n\"\"\"\n\nimport pandas as pd\n\n\ndef macro_cnbs() -> pd.DataFrame:\n    \"\"\"\n    国家金融与发展实验室-中国宏观杠杆率数据\n    http://114.115.232.154:8080/\n    :return: 中国宏观杠杆率数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://114.115.232.154:8080/handler/download.ashx\"\n    temp_df = pd.read_excel(\n        url, sheet_name=\"Data\", header=0, skiprows=1, engine=\"openpyxl\"\n    )\n\n    temp_df[\"Period\"] = pd.to_datetime(temp_df[\"Period\"]).dt.strftime(\"%Y-%m\")\n    temp_df.dropna(axis=1, inplace=True)\n\n    temp_df.rename(\n        columns={\n            \"Period\": \"年份\",\n            \"Household\": \"居民部门\",\n            \"Non-financial corporations\": \"非金融企业部门\",\n            \"Central government \": \"中央政府\",\n            \"Local government\": \"地方政府\",\n            \"General government\": \"政府部门\",\n            \"Non financial sector\": \"实体经济部门\",\n            \"Financial sector(asset side)\": \"金融部门资产方\",\n            \"Financial sector(liability side)\": \"金融部门负债方\",\n        },\n        inplace=True,\n    )\n\n    column_order = [\n        \"年份\",\n        \"居民部门\",\n        \"非金融企业部门\",\n        \"政府部门\",\n        \"中央政府\",\n        \"地方政府\",\n        \"实体经济部门\",\n        \"金融部门资产方\",\n        \"金融部门负债方\",\n    ]\n    temp_df = temp_df.reindex(columns=column_order)\n    temp_df[\"居民部门\"] = pd.to_numeric(temp_df[\"居民部门\"], errors=\"coerce\")\n    temp_df[\"非金融企业部门\"] = pd.to_numeric(\n        temp_df[\"非金融企业部门\"], errors=\"coerce\"\n    )\n    temp_df[\"政府部门\"] = pd.to_numeric(temp_df[\"政府部门\"], errors=\"coerce\")\n    temp_df[\"中央政府\"] = pd.to_numeric(temp_df[\"中央政府\"], errors=\"coerce\")\n    temp_df[\"地方政府\"] = pd.to_numeric(temp_df[\"地方政府\"], errors=\"coerce\")\n    temp_df[\"实体经济部门\"] = pd.to_numeric(temp_df[\"实体经济部门\"], errors=\"coerce\")\n    temp_df[\"金融部门资产方\"] = pd.to_numeric(\n        temp_df[\"金融部门资产方\"], errors=\"coerce\"\n    )\n    temp_df[\"金融部门负债方\"] = pd.to_numeric(\n        temp_df[\"金融部门负债方\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    macro_cnbs_df = macro_cnbs()\n    print(macro_cnbs_df)\n"
  },
  {
    "path": "akshare/energy/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/12/17 16:54\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/energy/energy_carbon.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/6/25 15:00\nDesc: 碳排放交易\n北京市碳排放权电子交易平台-北京市碳排放权公开交易行情\nhttps://www.bjets.com.cn/article/jyxx/\n\n深圳碳排放交易所-国内碳情\nhttp://www.cerx.cn/dailynewsCN/index.htm\n\n深圳碳排放交易所-国际碳情\nhttp://www.cerx.cn/dailynewsOuter/index.htm\n\n湖北碳排放权交易中心-现货交易数据-配额-每日概况\nhttp://www.cerx.cn/dailynewsOuter/index.htm\n\n广州碳排放权交易中心-行情信息\nhttp://www.cnemission.com/article/hqxx/\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\nfrom tqdm import tqdm\n\nfrom akshare.utils import demjson\nfrom akshare.utils.cons import headers\n\n\ndef energy_carbon_domestic(symbol: str = \"湖北\") -> pd.DataFrame:\n    \"\"\"\n    碳交易网-行情信息\n    http://www.tanjiaoyi.com/\n    :param symbol: choice of {'湖北', '上海', '北京', '重庆', '广东', '天津', '深圳', '福建'}\n    :type symbol: str\n    :return: 行情信息\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://k.tanjiaoyi.com:8080/KDataController/getHouseDatasInAverage.do\"\n    params = {\n        \"lcnK\": \"53f75bfcefff58e4046ccfa42171636c\",\n        \"brand\": \"TAN\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"(\") + 1 : -1])\n    temp_df = pd.DataFrame(data_json[symbol])\n    temp_df.columns = [\n        \"成交价\",\n        \"_\",\n        \"成交量\",\n        \"地点\",\n        \"成交额\",\n        \"日期\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"成交价\",\n            \"成交量\",\n            \"成交额\",\n            \"地点\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"成交价\"] = pd.to_numeric(temp_df[\"成交价\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef energy_carbon_bj() -> pd.DataFrame:\n    \"\"\"\n    北京市碳排放权电子交易平台-北京市碳排放权公开交易行情\n    https://www.bjets.com.cn/article/jyxx/\n    :return: 北京市碳排放权公开交易行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.bjets.com.cn/article/jyxx/\"\n    r = requests.get(url, verify=False, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    total_page = (\n        soup.find(\"table\")\n        .find(\"script\")\n        .string.split(\"=\")[-1]\n        .strip()\n        .strip(\";\")\n        .strip('\"')\n    )\n    temp_df = pd.DataFrame()\n    for i in tqdm(\n        range(1, int(total_page) + 1),\n        desc=\"Please wait for a moment\",\n        leave=False,\n    ):\n        if i == 1:\n            i = \"\"\n        url = f\"https://www.bjets.com.cn/article/jyxx/?{i}\"\n        r = requests.get(url, verify=False, headers=headers)\n        r.encoding = \"utf-8\"\n        df = pd.read_html(StringIO(r.text))[0]\n        temp_df = pd.concat(objs=[temp_df, df], ignore_index=True)\n    temp_df.columns = [\"日期\", \"成交量\", \"成交均价\", \"成交额\"]\n    temp_df[\"成交单位\"] = (\n        temp_df[\"成交额\"]\n        .str.split(\"(\", expand=True)\n        .iloc[:, 1]\n        .str.split(\"）\", expand=True)\n        .iloc[:, 0]\n        .str.split(\")\", expand=True)\n        .iloc[:, 0]\n    )\n    temp_df[\"成交额\"] = (\n        temp_df[\"成交额\"]\n        .str.split(\"(\", expand=True)\n        .iloc[:, 0]\n        .str.split(\"（\", expand=True)\n        .iloc[:, 0]\n    )\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交均价\"] = pd.to_numeric(temp_df[\"成交均价\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = temp_df[\"成交额\"].str.replace(\",\", \"\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df.sort_values(by=\"日期\", inplace=True)\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\ndef energy_carbon_sz() -> pd.DataFrame:\n    \"\"\"\n    深圳碳排放交易所-国内碳情\n    http://www.cerx.cn/dailynewsCN/index.htm\n    :return: 国内碳情每日行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://www.cerx.cn/dailynewsCN/index.htm\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    page_num = int(soup.find(attrs={\"class\": \"pagebar\"}).find_all(\"option\")[-1].text)\n    big_df = pd.read_html(StringIO(r.text), header=0)[0]\n    for page in tqdm(\n        range(2, page_num + 1), desc=\"Please wait for a moment\", leave=False\n    ):\n        url = f\"http://www.cerx.cn/dailynewsCN/index_{page}.htm\"\n        r = requests.get(url, headers=headers)\n        temp_df = pd.read_html(StringIO(r.text), header=0)[0]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df[\"交易日期\"] = pd.to_datetime(big_df[\"交易日期\"], errors=\"coerce\").dt.date\n    big_df[\"开盘价\"] = pd.to_numeric(big_df[\"开盘价\"], errors=\"coerce\")\n    big_df[\"最高价\"] = pd.to_numeric(big_df[\"最高价\"], errors=\"coerce\")\n    big_df[\"最低价\"] = pd.to_numeric(big_df[\"最低价\"], errors=\"coerce\")\n    big_df[\"成交均价\"] = pd.to_numeric(big_df[\"成交均价\"], errors=\"coerce\")\n    big_df[\"收盘价\"] = pd.to_numeric(big_df[\"收盘价\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    big_df[\"成交额\"] = pd.to_numeric(big_df[\"成交额\"], errors=\"coerce\")\n    big_df.sort_values(by=\"交易日期\", inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef energy_carbon_eu() -> pd.DataFrame:\n    \"\"\"\n    深圳碳排放交易所-国际碳情\n    http://www.cerx.cn/dailynewsOuter/index.htm\n    :return: 国际碳情每日行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://www.cerx.cn/dailynewsOuter/index.htm\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    page_num = int(soup.find(attrs={\"class\": \"pagebar\"}).find_all(\"option\")[-1].text)\n    big_df = pd.read_html(StringIO(r.text), header=0)[0]\n    for page in tqdm(\n        range(2, page_num + 1), desc=\"Please wait for a moment\", leave=False\n    ):\n        url = f\"http://www.cerx.cn/dailynewsOuter/index_{page}.htm\"\n        r = requests.get(url)\n        temp_df = pd.read_html(StringIO(r.text), header=0)[0]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df[\"交易日期\"] = pd.to_datetime(big_df[\"交易日期\"], errors=\"coerce\").dt.date\n    big_df[\"开盘价\"] = pd.to_numeric(big_df[\"开盘价\"], errors=\"coerce\")\n    big_df[\"最高价\"] = pd.to_numeric(big_df[\"最高价\"], errors=\"coerce\")\n    big_df[\"最低价\"] = pd.to_numeric(big_df[\"最低价\"], errors=\"coerce\")\n    big_df[\"成交均价\"] = pd.to_numeric(big_df[\"成交均价\"], errors=\"coerce\")\n    big_df[\"收盘价\"] = pd.to_numeric(big_df[\"收盘价\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    big_df[\"成交额\"] = pd.to_numeric(big_df[\"成交额\"], errors=\"coerce\")\n    big_df.sort_values(by=\"交易日期\", inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef energy_carbon_hb() -> pd.DataFrame:\n    \"\"\"\n    湖北碳排放权交易中心-现货交易数据-配额-每日概况\n    http://www.hbets.cn/list/13.html?page=42\n    :return: 现货交易数据-配额-每日概况行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.hbets.cn/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    data_text = (\n        soup.find(name=\"div\", attrs={\"class\": \"threeLeft\"}).find_all(\"script\")[1].text\n    )\n    start_pos = data_text.find(\"cjj = '[\") + 7  # 找到 JSON 数组开始的位置\n    end_pos = data_text.rfind(\"cjj =\") - 31  # 找到 JSON 数组结束的位置\n    data_json = demjson.decode(data_text[start_pos:end_pos])\n    temp_df = pd.DataFrame.from_dict(data_json)\n    temp_df.rename(\n        columns={\n            \"riqi\": \"日期\",\n            \"cjj\": \"成交价\",\n            \"cjl\": \"成交量\",\n            \"zx\": \"最新\",\n            \"zd\": \"涨跌\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"成交价\",\n            \"成交量\",\n            \"最新\",\n            \"涨跌\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"成交价\"] = pd.to_numeric(temp_df[\"成交价\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"最新\"] = pd.to_numeric(temp_df[\"最新\"], errors=\"coerce\")\n    temp_df[\"涨跌\"] = pd.to_numeric(temp_df[\"涨跌\"], errors=\"coerce\")\n    return temp_df\n\n\ndef energy_carbon_gz() -> pd.DataFrame:\n    \"\"\"\n    广州碳排放权交易中心-行情信息\n    http://www.cnemission.com/article/hqxx/\n    :return: 行情信息数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://ets.cnemission.com/carbon/portalIndex/markethistory\"\n    params = {\n        \"Top\": \"1\",\n        \"beginTime\": \"2010-01-01\",\n        \"endTime\": \"2030-09-12\",\n    }\n    r = requests.get(url, params=params)\n    temp_df = pd.read_html(StringIO(r.text), header=0)[1]\n    temp_df.columns = [\n        \"日期\",\n        \"品种\",\n        \"开盘价\",\n        \"收盘价\",\n        \"最高价\",\n        \"最低价\",\n        \"涨跌\",\n        \"涨跌幅\",\n        \"成交数量\",\n        \"成交金额\",\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(\n        temp_df[\"日期\"], format=\"%Y%m%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"开盘价\"] = pd.to_numeric(temp_df[\"开盘价\"], errors=\"coerce\")\n    temp_df[\"收盘价\"] = pd.to_numeric(temp_df[\"收盘价\"], errors=\"coerce\")\n    temp_df[\"最高价\"] = pd.to_numeric(temp_df[\"最高价\"], errors=\"coerce\")\n    temp_df[\"最低价\"] = pd.to_numeric(temp_df[\"最低价\"], errors=\"coerce\")\n    temp_df[\"涨跌\"] = pd.to_numeric(temp_df[\"涨跌\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = temp_df[\"涨跌幅\"].str.strip(\"%\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"成交数量\"] = pd.to_numeric(temp_df[\"成交数量\"], errors=\"coerce\")\n    temp_df[\"成交金额\"] = pd.to_numeric(temp_df[\"成交金额\"], errors=\"coerce\")\n    temp_df.sort_values(by=\"日期\", inplace=True)\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    energy_carbon_domestic_df = energy_carbon_domestic(symbol=\"湖北\")\n    print(energy_carbon_domestic_df)\n\n    energy_carbon_domestic_df = energy_carbon_domestic(symbol=\"深圳\")\n    print(energy_carbon_domestic_df)\n\n    energy_carbon_bj_df = energy_carbon_bj()\n    print(energy_carbon_bj_df)\n\n    energy_carbon_sz_df = energy_carbon_sz()\n    print(energy_carbon_sz_df)\n\n    energy_carbon_eu_df = energy_carbon_eu()\n    print(energy_carbon_eu_df)\n\n    energy_carbon_hb_df = energy_carbon_hb()\n    print(energy_carbon_hb_df)\n\n    energy_carbon_gz_df = energy_carbon_gz()\n    print(energy_carbon_gz_df)\n"
  },
  {
    "path": "akshare/energy/energy_oil_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/1/20 23:00\nDesc: 东方财富-数据中心-中国油价\nhttps://data.eastmoney.com/cjsj/oil_default.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef energy_oil_hist() -> pd.DataFrame:\n    \"\"\"\n    汽柴油历史调价信息\n    https://data.eastmoney.com/cjsj/oil_default.html\n    :return: 汽柴油历史调价信息\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPTA_WEB_YJ_BD\",\n        \"columns\": \"ALL\",\n        \"sortColumns\": \"dim_date\",\n        \"sortTypes\": \"-1\",\n        \"token\": \"894050c76af8597a853f5b408b759f5d\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"1000\",\n        \"source\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\"调整日期\", \"汽油价格\", \"柴油价格\", \"汽油涨跌\", \"柴油涨跌\"]\n    temp_df[\"调整日期\"] = pd.to_datetime(temp_df[\"调整日期\"], errors=\"coerce\").dt.date\n    temp_df[\"汽油价格\"] = pd.to_numeric(temp_df[\"汽油价格\"], errors=\"coerce\")\n    temp_df[\"柴油价格\"] = pd.to_numeric(temp_df[\"柴油价格\"], errors=\"coerce\")\n    temp_df[\"汽油涨跌\"] = pd.to_numeric(temp_df[\"汽油涨跌\"], errors=\"coerce\")\n    temp_df[\"柴油涨跌\"] = pd.to_numeric(temp_df[\"柴油涨跌\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"调整日期\"], inplace=True)\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\ndef energy_oil_detail(date: str = \"20220517\") -> pd.DataFrame:\n    \"\"\"\n    全国各地区的汽油和柴油油价\n    https://data.eastmoney.com/cjsj/oil_default.html\n    :param date: 可以调用 ak.energy_oil_hist() 得到可以获取油价的调整时间\n    :type date: str\n    :return: oil price at specific date\n    :rtype: pandas.DataFrame\n    \"\"\"\n    date = \"-\".join([date[:4], date[4:6], date[6:]])\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPTA_WEB_YJ_JH\",\n        \"columns\": \"ALL\",\n        \"filter\": f\"(dim_date='{date}')\",\n        \"sortColumns\": \"cityname\",\n        \"sortTypes\": \"1\",\n        \"token\": \"894050c76af8597a853f5b408b759f5d\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"1000\",\n        \"source\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"]).iloc[:, 1:]\n    temp_df.columns = [\n        \"日期\",\n        \"地区\",\n        \"V_0\",\n        \"V_92\",\n        \"V_95\",\n        \"V_89\",\n        \"ZDE_0\",\n        \"ZDE_92\",\n        \"ZDE_95\",\n        \"ZDE_89\",\n        \"QE_0\",\n        \"QE_92\",\n        \"QE_95\",\n        \"QE_89\",\n        \"首字母\",\n    ]\n    del temp_df[\"首字母\"]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"V_0\"] = pd.to_numeric(temp_df[\"V_0\"], errors=\"coerce\")\n    temp_df[\"V_92\"] = pd.to_numeric(temp_df[\"V_92\"], errors=\"coerce\")\n    temp_df[\"V_95\"] = pd.to_numeric(temp_df[\"V_95\"], errors=\"coerce\")\n    temp_df[\"V_89\"] = pd.to_numeric(temp_df[\"V_89\"], errors=\"coerce\")\n    temp_df[\"ZDE_0\"] = pd.to_numeric(temp_df[\"ZDE_0\"], errors=\"coerce\")\n    temp_df[\"ZDE_92\"] = pd.to_numeric(temp_df[\"ZDE_92\"], errors=\"coerce\")\n    temp_df[\"ZDE_95\"] = pd.to_numeric(temp_df[\"ZDE_95\"], errors=\"coerce\")\n    temp_df[\"ZDE_89\"] = pd.to_numeric(temp_df[\"ZDE_89\"], errors=\"coerce\")\n    temp_df[\"QE_0\"] = pd.to_numeric(temp_df[\"QE_0\"], errors=\"coerce\")\n    temp_df[\"QE_92\"] = pd.to_numeric(temp_df[\"QE_92\"], errors=\"coerce\")\n    temp_df[\"QE_95\"] = pd.to_numeric(temp_df[\"QE_95\"], errors=\"coerce\")\n    temp_df[\"QE_89\"] = pd.to_numeric(temp_df[\"QE_89\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    energy_oil_hist_df = energy_oil_hist()\n    print(energy_oil_hist_df)\n\n    energy_oil_detail_df = energy_oil_detail(date=\"20240118\")\n    print(energy_oil_detail_df)\n"
  },
  {
    "path": "akshare/event/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2020/1/23 9:07\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/event/cons.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/9/24 15:22\nDesc: 百度地图慧眼-迁徙城市代码映射\n\"\"\"\n\nprovince_dict = {\n    \"820000\": \"澳门\",\n    \"810000\": \"香港\",\n    \"710000\": \"台湾省\",\n    \"650000\": \"新疆维吾尔自治区\",\n    \"640000\": \"宁夏回族自治区\",\n    \"630000\": \"青海省\",\n    \"620000\": \"甘肃省\",\n    \"610000\": \"陕西省\",\n    \"540000\": \"西藏自治区\",\n    \"530000\": \"云南省\",\n    \"520000\": \"贵州省\",\n    \"510000\": \"四川省\",\n    \"500000\": \"重庆市\",\n    \"460000\": \"海南省\",\n    \"450000\": \"广西壮族自治区\",\n    \"440000\": \"广东省\",\n    \"430000\": \"湖南省\",\n    \"420000\": \"湖北省\",\n    \"410000\": \"河南省\",\n    \"370000\": \"山东省\",\n    \"360000\": \"江西省\",\n    \"350000\": \"福建省\",\n    \"340000\": \"安徽省\",\n    \"330000\": \"浙江省\",\n    \"320000\": \"江苏省\",\n    \"310000\": \"上海市\",\n    \"230000\": \"黑龙江省\",\n    \"220000\": \"吉林省\",\n    \"210000\": \"辽宁省\",\n    \"150000\": \"内蒙古自治区\",\n    \"140000\": \"山西省\",\n    \"130000\": \"河北省\",\n    \"120000\": \"天津市\",\n    \"110000\": \"北京市\",\n}\n\ncity_dict = {\n    \"520300\": \"遵义市\",\n    \"510300\": \"自贡市\",\n    \"370300\": \"淄博市\",\n    \"512000\": \"资阳市\",\n    \"411700\": \"驻马店市\",\n    \"430200\": \"株洲市\",\n    \"440400\": \"珠海市\",\n    \"411600\": \"周口市\",\n    \"330900\": \"舟山市\",\n    \"500100\": \"重庆市\",\n    \"500200\": \"重庆市\",\n    \"640500\": \"中卫市\",\n    \"442000\": \"中山市\",\n    \"410100\": \"郑州市\",\n    \"321100\": \"镇江市\",\n    \"441200\": \"肇庆市\",\n    \"530600\": \"昭通市\",\n    \"140400\": \"长治市\",\n    \"430100\": \"长沙市\",\n    \"220100\": \"长春市\",\n    \"350600\": \"漳州市\",\n    \"719007\": \"彰化县\",\n    \"620700\": \"张掖市\",\n    \"130700\": \"张家口市\",\n    \"430800\": \"张家界市\",\n    \"440800\": \"湛江市\",\n    \"370400\": \"枣庄市\",\n    \"140800\": \"运城市\",\n    \"719008\": \"云林县\",\n    \"445300\": \"云浮市\",\n    \"430600\": \"岳阳市\",\n    \"530400\": \"玉溪市\",\n    \"632700\": \"玉树藏族自治州\",\n    \"450900\": \"玉林市\",\n    \"610800\": \"榆林市\",\n    \"431100\": \"永州市\",\n    \"210800\": \"营口市\",\n    \"360600\": \"鹰潭市\",\n    \"640100\": \"银川市\",\n    \"430900\": \"益阳市\",\n    \"719005\": \"宜兰县\",\n    \"360900\": \"宜春市\",\n    \"420500\": \"宜昌市\",\n    \"511500\": \"宜宾市\",\n    \"654000\": \"伊犁哈萨克自治州\",\n    \"230700\": \"伊春市\",\n    \"140300\": \"阳泉市\",\n    \"441700\": \"阳江市\",\n    \"321000\": \"扬州市\",\n    \"320900\": \"盐城市\",\n    \"222400\": \"延边朝鲜族自治州\",\n    \"610600\": \"延安市\",\n    \"370600\": \"烟台市\",\n    \"511800\": \"雅安市\",\n    \"341800\": \"宣城市\",\n    \"411000\": \"许昌市\",\n    \"320300\": \"徐州市\",\n    \"341300\": \"宿州市\",\n    \"321300\": \"宿迁市\",\n    \"152200\": \"兴安盟\",\n    \"130500\": \"邢台市\",\n    \"411500\": \"信阳市\",\n    \"719004\": \"新竹县\",\n    \"719002\": \"新竹市\",\n    \"360500\": \"新余市\",\n    \"410700\": \"新乡市\",\n    \"710300\": \"新北市\",\n    \"140900\": \"忻州市\",\n    \"420900\": \"孝感市\",\n    \"420600\": \"襄阳市\",\n    \"433100\": \"湘西土家族苗族自治州\",\n    \"430300\": \"湘潭市\",\n    \"810000\": \"香港\",\n    \"610400\": \"咸阳市\",\n    \"421200\": \"咸宁市\",\n    \"429004\": \"仙桃市\",\n    \"152500\": \"锡林郭勒盟\",\n    \"532800\": \"西双版纳傣族自治州\",\n    \"630100\": \"西宁市\",\n    \"610100\": \"西安市\",\n    \"620600\": \"武威市\",\n    \"420100\": \"武汉市\",\n    \"469001\": \"五指山市\",\n    \"659004\": \"五家渠市\",\n    \"450400\": \"梧州市\",\n    \"640300\": \"吴忠市\",\n    \"340200\": \"芜湖市\",\n    \"320200\": \"无锡市\",\n    \"650100\": \"乌鲁木齐市\",\n    \"150900\": \"乌兰察布市\",\n    \"150300\": \"乌海市\",\n    \"532600\": \"文山壮族苗族自治州\",\n    \"469005\": \"文昌市\",\n    \"330300\": \"温州市\",\n    \"610500\": \"渭南市\",\n    \"370700\": \"潍坊市\",\n    \"371000\": \"威海市\",\n    \"469006\": \"万宁市\",\n    \"469022\": \"屯昌县\",\n    \"650400\": \"吐鲁番市\",\n    \"659003\": \"图木舒克市\",\n    \"520600\": \"铜仁市\",\n    \"340700\": \"铜陵市\",\n    \"610200\": \"铜川市\",\n    \"150500\": \"通辽市\",\n    \"220500\": \"通化市\",\n    \"659006\": \"铁门关市\",\n    \"211200\": \"铁岭市\",\n    \"620500\": \"天水市\",\n    \"429006\": \"天门市\",\n    \"120100\": \"天津市\",\n    \"710600\": \"桃园市\",\n    \"130200\": \"唐山市\",\n    \"321200\": \"泰州市\",\n    \"370900\": \"泰安市\",\n    \"140100\": \"太原市\",\n    \"331000\": \"台州市\",\n    \"710400\": \"台中市\",\n    \"710500\": \"台南市\",\n    \"719012\": \"台东县\",\n    \"710100\": \"台北市\",\n    \"654200\": \"塔城地区\",\n    \"510900\": \"遂宁市\",\n    \"421300\": \"随州市\",\n    \"231200\": \"绥化市\",\n    \"320500\": \"苏州市\",\n    \"220700\": \"松原市\",\n    \"220300\": \"四平市\",\n    \"140600\": \"朔州市\",\n    \"230500\": \"双鸭山市\",\n    \"659007\": \"双河市\",\n    \"640200\": \"石嘴山市\",\n    \"130100\": \"石家庄市\",\n    \"659001\": \"石河子市\",\n    \"420300\": \"十堰市\",\n    \"210100\": \"沈阳市\",\n    \"429021\": \"神农架林区\",\n    \"440300\": \"深圳市\",\n    \"330600\": \"绍兴市\",\n    \"430500\": \"邵阳市\",\n    \"440200\": \"韶关市\",\n    \"361100\": \"上饶市\",\n    \"310100\": \"上海市\",\n    \"411400\": \"商丘市\",\n    \"611000\": \"商洛市\",\n    \"441500\": \"汕尾市\",\n    \"440500\": \"汕头市\",\n    \"540500\": \"山南市\",\n    \"350200\": \"厦门市\",\n    \"460200\": \"三亚市\",\n    \"460300\": \"三沙市\",\n    \"350400\": \"三明市\",\n    \"411200\": \"三门峡市\",\n    \"371100\": \"日照市\",\n    \"540200\": \"日喀则市\",\n    \"350500\": \"泉州市\",\n    \"530300\": \"曲靖市\",\n    \"330800\": \"衢州市\",\n    \"469030\": \"琼中黎族苗族自治县\",\n    \"469002\": \"琼海市\",\n    \"621000\": \"庆阳市\",\n    \"441800\": \"清远市\",\n    \"370200\": \"青岛市\",\n    \"130300\": \"秦皇岛市\",\n    \"450700\": \"钦州市\",\n    \"522300\": \"黔西南布依族苗族自治州\",\n    \"522700\": \"黔南布依族苗族自治州\",\n    \"522600\": \"黔东南苗族侗族自治州\",\n    \"429005\": \"潜江市\",\n    \"230200\": \"齐齐哈尔市\",\n    \"230900\": \"七台河市\",\n    \"530800\": \"普洱市\",\n    \"410900\": \"濮阳市\",\n    \"350300\": \"莆田市\",\n    \"360300\": \"萍乡市\",\n    \"719011\": \"屏东县\",\n    \"620800\": \"平凉市\",\n    \"410400\": \"平顶山市\",\n    \"719014\": \"澎湖县\",\n    \"211100\": \"盘锦市\",\n    \"510400\": \"攀枝花市\",\n    \"533300\": \"怒江傈僳族自治州\",\n    \"350900\": \"宁德市\",\n    \"330200\": \"宁波市\",\n    \"511000\": \"内江市\",\n    \"411300\": \"南阳市\",\n    \"719009\": \"南投县\",\n    \"320600\": \"南通市\",\n    \"350700\": \"南平市\",\n    \"450100\": \"南宁市\",\n    \"320100\": \"南京市\",\n    \"511300\": \"南充市\",\n    \"360100\": \"南昌市\",\n    \"540600\": \"那曲市\",\n    \"231000\": \"牡丹江市\",\n    \"719006\": \"苗栗县\",\n    \"510700\": \"绵阳市\",\n    \"441400\": \"梅州市\",\n    \"511400\": \"眉山市\",\n    \"440900\": \"茂名市\",\n    \"340500\": \"马鞍山市\",\n    \"141100\": \"吕梁市\",\n    \"411100\": \"漯河市\",\n    \"410300\": \"洛阳市\",\n    \"510500\": \"泸州市\",\n    \"431300\": \"娄底市\",\n    \"621200\": \"陇南市\",\n    \"350800\": \"龙岩市\",\n    \"520200\": \"六盘水市\",\n    \"341500\": \"六安市\",\n    \"450200\": \"柳州市\",\n    \"469028\": \"陵水黎族自治县\",\n    \"371300\": \"临沂市\",\n    \"622900\": \"临夏回族自治州\",\n    \"469024\": \"临高县\",\n    \"141000\": \"临汾市\",\n    \"530900\": \"临沧市\",\n    \"540400\": \"林芝市\",\n    \"371500\": \"聊城市\",\n    \"220400\": \"辽源市\",\n    \"211000\": \"辽阳市\",\n    \"513400\": \"凉山彝族自治州\",\n    \"320700\": \"连云港市\",\n    \"331100\": \"丽水市\",\n    \"530700\": \"丽江市\",\n    \"511100\": \"乐山市\",\n    \"469027\": \"乐东黎族自治县\",\n    \"131000\": \"廊坊市\",\n    \"620100\": \"兰州市\",\n    \"451300\": \"来宾市\",\n    \"540100\": \"拉萨市\",\n    \"659009\": \"昆玉市\",\n    \"530100\": \"昆明市\",\n    \"653000\": \"克孜勒苏柯尔克孜自治州\",\n    \"650200\": \"克拉玛依市\",\n    \"659008\": \"可克达拉市\",\n    \"410200\": \"开封市\",\n    \"653100\": \"喀什地区\",\n    \"620900\": \"酒泉市\",\n    \"360400\": \"九江市\",\n    \"360200\": \"景德镇市\",\n    \"421000\": \"荆州市\",\n    \"420800\": \"荆门市\",\n    \"140700\": \"晋中市\",\n    \"140500\": \"晋城市\",\n    \"210700\": \"锦州市\",\n    \"330700\": \"金华市\",\n    \"620300\": \"金昌市\",\n    \"445200\": \"揭阳市\",\n    \"410800\": \"焦作市\",\n    \"440700\": \"江门市\",\n    \"620200\": \"嘉峪关市\",\n    \"719010\": \"嘉义县\",\n    \"719003\": \"嘉义市\",\n    \"330400\": \"嘉兴市\",\n    \"230800\": \"佳木斯市\",\n    \"419001\": \"济源市\",\n    \"370800\": \"济宁市\",\n    \"370100\": \"济南市\",\n    \"220200\": \"吉林市\",\n    \"360800\": \"吉安市\",\n    \"719001\": \"基隆市\",\n    \"230300\": \"鸡西市\",\n    \"441300\": \"惠州市\",\n    \"420200\": \"黄石市\",\n    \"341000\": \"黄山市\",\n    \"632300\": \"黄南藏族自治州\",\n    \"421100\": \"黄冈市\",\n    \"340400\": \"淮南市\",\n    \"340600\": \"淮北市\",\n    \"320800\": \"淮安市\",\n    \"431200\": \"怀化市\",\n    \"719013\": \"花莲县\",\n    \"330500\": \"湖州市\",\n    \"211400\": \"葫芦岛市\",\n    \"150700\": \"呼伦贝尔市\",\n    \"150100\": \"呼和浩特市\",\n    \"532500\": \"红河哈尼族彝族自治州\",\n    \"430400\": \"衡阳市\",\n    \"131100\": \"衡水市\",\n    \"231100\": \"黑河市\",\n    \"230400\": \"鹤岗市\",\n    \"410600\": \"鹤壁市\",\n    \"451100\": \"贺州市\",\n    \"371700\": \"菏泽市\",\n    \"441600\": \"河源市\",\n    \"451200\": \"河池市\",\n    \"653200\": \"和田地区\",\n    \"340100\": \"合肥市\",\n    \"330100\": \"杭州市\",\n    \"610700\": \"汉中市\",\n    \"130400\": \"邯郸市\",\n    \"632800\": \"海西蒙古族藏族自治州\",\n    \"632500\": \"海南藏族自治州\",\n    \"460100\": \"海口市\",\n    \"630200\": \"海东市\",\n    \"632200\": \"海北藏族自治州\",\n    \"650500\": \"哈密市\",\n    \"230100\": \"哈尔滨市\",\n    \"632600\": \"果洛藏族自治州\",\n    \"450300\": \"桂林市\",\n    \"520100\": \"贵阳市\",\n    \"450800\": \"贵港市\",\n    \"440100\": \"广州市\",\n    \"510800\": \"广元市\",\n    \"511600\": \"广安市\",\n    \"640400\": \"固原市\",\n    \"710200\": \"高雄市\",\n    \"360700\": \"赣州市\",\n    \"513300\": \"甘孜藏族自治州\",\n    \"623000\": \"甘南藏族自治州\",\n    \"341200\": \"阜阳市\",\n    \"210900\": \"阜新市\",\n    \"361000\": \"抚州市\",\n    \"210400\": \"抚顺市\",\n    \"350100\": \"福州市\",\n    \"440600\": \"佛山市\",\n    \"450600\": \"防城港市\",\n    \"422800\": \"恩施土家族苗族自治州\",\n    \"420700\": \"鄂州市\",\n    \"150600\": \"鄂尔多斯市\",\n    \"370500\": \"东营市\",\n    \"441900\": \"东莞市\",\n    \"469007\": \"东方市\",\n    \"621100\": \"定西市\",\n    \"469021\": \"定安县\",\n    \"533400\": \"迪庆藏族自治州\",\n    \"371400\": \"德州市\",\n    \"510600\": \"德阳市\",\n    \"533100\": \"德宏傣族景颇族自治州\",\n    \"460400\": \"儋州市\",\n    \"210600\": \"丹东市\",\n    \"232700\": \"大兴安岭地区\",\n    \"140200\": \"大同市\",\n    \"230600\": \"大庆市\",\n    \"210200\": \"大连市\",\n    \"532900\": \"大理白族自治州\",\n    \"511700\": \"达州市\",\n    \"532300\": \"楚雄彝族自治州\",\n    \"341100\": \"滁州市\",\n    \"451400\": \"崇左市\",\n    \"150400\": \"赤峰市\",\n    \"341700\": \"池州市\",\n    \"469023\": \"澄迈县\",\n    \"130800\": \"承德市\",\n    \"510100\": \"成都市\",\n    \"431000\": \"郴州市\",\n    \"445100\": \"潮州市\",\n    \"211300\": \"朝阳市\",\n    \"320400\": \"常州市\",\n    \"430700\": \"常德市\",\n    \"469026\": \"昌江黎族自治县\",\n    \"652300\": \"昌吉回族自治州\",\n    \"540300\": \"昌都市\",\n    \"130900\": \"沧州市\",\n    \"652700\": \"博尔塔拉蒙古自治州\",\n    \"341600\": \"亳州市\",\n    \"371600\": \"滨州市\",\n    \"520500\": \"毕节市\",\n    \"210500\": \"本溪市\",\n    \"659005\": \"北屯市\",\n    \"110100\": \"北京市\",\n    \"450500\": \"北海市\",\n    \"469029\": \"保亭黎族苗族自治县\",\n    \"530500\": \"保山市\",\n    \"130600\": \"保定市\",\n    \"610300\": \"宝鸡市\",\n    \"150200\": \"包头市\",\n    \"340300\": \"蚌埠市\",\n    \"451000\": \"百色市\",\n    \"620400\": \"白银市\",\n    \"220600\": \"白山市\",\n    \"469025\": \"白沙黎族自治县\",\n    \"220800\": \"白城市\",\n    \"511900\": \"巴中市\",\n    \"652800\": \"巴音郭楞蒙古自治州\",\n    \"150800\": \"巴彦淖尔市\",\n    \"820000\": \"澳门\",\n    \"210300\": \"鞍山市\",\n    \"410500\": \"安阳市\",\n    \"520400\": \"安顺市\",\n    \"340800\": \"安庆市\",\n    \"610900\": \"安康市\",\n    \"542500\": \"阿里地区\",\n    \"654300\": \"阿勒泰地区\",\n    \"152900\": \"阿拉善盟\",\n    \"659002\": \"阿拉尔市\",\n    \"652900\": \"阿克苏地区\",\n    \"513200\": \"阿坝藏族羌族自治州\",\n}\n"
  },
  {
    "path": "akshare/event/migration.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/5/12 22:30\nDesc: 百度地图慧眼-百度迁徙数据\n\"\"\"\n\nimport json\n\nimport pandas as pd\nimport requests\n\nfrom akshare.event.cons import province_dict, city_dict\n\n\ndef migration_area_baidu(\n    area: str = \"重庆市\", indicator: str = \"move_in\", date: str = \"20230922\"\n) -> pd.DataFrame:\n    \"\"\"\n    百度地图慧眼-百度迁徙-XXX迁入地详情\n    百度地图慧眼-百度迁徙-XXX迁出地详情\n    以上展示 top100 结果，如不够 100 则展示全部\n    迁入来源地比例: 从 xx 地迁入到当前区域的人数与当前区域迁入总人口的比值\n    迁出目的地比例: 从当前区域迁出到 xx 的人口与从当前区域迁出总人口的比值\n    https://qianxi.baidu.com/?from=shoubai#city=0\n    :param area: 可以输入 省份 或者 具体城市 但是需要用全称\n    :type area: str\n    :param indicator: move_in 迁入 move_out 迁出\n    :type indicator: str\n    :param date: 查询的日期 20200101 以后的时间\n    :type date: str\n    :return: 迁入地详情/迁出地详情的前 50 个\n    :rtype: pandas.DataFrame\n    \"\"\"\n    city_dict.update(province_dict)\n    inner_dict = dict(zip(city_dict.values(), city_dict.keys()))\n    if inner_dict[area] in province_dict.keys():\n        dt_flag = \"province\"\n    else:\n        dt_flag = \"city\"\n    url = \"https://huiyan.baidu.com/migration/cityrank.jsonp\"\n    params = {\n        \"dt\": dt_flag,\n        \"id\": inner_dict[area],\n        \"type\": indicator,\n        \"date\": date,\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text[r.text.find(\"({\") + 1 : r.text.rfind(\");\")]\n    data_json = json.loads(data_text)\n    temp_df = pd.DataFrame(data_json[\"data\"][\"list\"])\n    temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n    return temp_df\n\n\ndef migration_scale_baidu(\n    area: str = \"广州市\",\n    indicator: str = \"move_in\",\n) -> pd.DataFrame:\n    \"\"\"\n    百度地图慧眼-百度迁徙-迁徙规模\n    迁徙规模指数：反映迁入或迁出人口规模，城市间可横向对比城市迁徙边界采用该城市行政区划，包含该城市管辖的区、县、乡、村\n    https://qianxi.baidu.com/?from=shoubai#city=0\n    :param area: 可以输入 省份 或者 具体城市 但是需要用全称\n    :type area: str\n    :param indicator: move_in 迁入 move_out 迁出\n    :type indicator: str\n    :return: 时间序列的迁徙规模指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    city_dict.update(province_dict)\n    inner_dict = dict(zip(city_dict.values(), city_dict.keys()))\n    if inner_dict[area] in province_dict.keys():\n        dt_flag = \"province\"\n    else:\n        dt_flag = \"city\"\n    url = \"https://huiyan.baidu.com/migration/historycurve.jsonp\"\n    params = {\n        \"dt\": dt_flag,\n        \"id\": inner_dict[area],\n        \"type\": indicator,\n    }\n    r = requests.get(url, params=params)\n    json_data = json.loads(r.text[r.text.find(\"({\") + 1 : r.text.rfind(\");\")])\n    temp_df = pd.DataFrame.from_dict(json_data[\"data\"][\"list\"], orient=\"index\")\n    temp_df.index = pd.to_datetime(temp_df.index)\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\"日期\", \"迁徙规模指数\"]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"迁徙规模指数\"] = pd.to_numeric(temp_df[\"迁徙规模指数\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    migration_area_baidu_df = migration_area_baidu(\n        area=\"杭州市\", indicator=\"move_out\", date=\"20240401\"\n    )\n    print(migration_area_baidu_df)\n\n    migration_scale_baidu_df = migration_scale_baidu(\n        area=\"广州市\",\n        indicator=\"move_in\",\n    )\n    print(migration_scale_baidu_df)\n"
  },
  {
    "path": "akshare/exceptions.py",
    "content": "\"\"\"\nAKShare 异常处理模块\n\"\"\"\n\n\nclass AkshareException(Exception):\n    \"\"\"Base exception for akshare library\"\"\"\n\n    def __init__(self, message):\n        self.message = message\n        super().__init__(self.message)\n\n\nclass APIError(AkshareException):\n    \"\"\"Raised when API request fails\"\"\"\n\n    def __init__(self, message, status_code=None):\n        self.status_code = status_code\n        super().__init__(f\"API Error: {message} (Status code: {status_code})\")\n\n\nclass DataParsingError(AkshareException):\n    \"\"\"Raised when data parsing fails\"\"\"\n\n    pass\n\n\nclass InvalidParameterError(AkshareException):\n    \"\"\"Raised when an invalid parameter is provided\"\"\"\n\n    pass\n\n\nclass NetworkError(AkshareException):\n    \"\"\"Raised when network-related issues occur\"\"\"\n\n    pass\n\n\nclass RateLimitError(AkshareException):\n    \"\"\"Raised when API rate limit is exceeded\"\"\"\n\n    pass\n"
  },
  {
    "path": "akshare/file_fold/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/9/30 13:58\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/file_fold/calendar.json",
    "content": "[\n  \"19901219\",\n  \"19901220\",\n  \"19901221\",\n  \"19901224\",\n  \"19901225\",\n  \"19901226\",\n  \"19901227\",\n  \"19901228\",\n  \"19901231\",\n  \"19910102\",\n  \"19910103\",\n  \"19910104\",\n  \"19910107\",\n  \"19910108\",\n  \"19910109\",\n  \"19910110\",\n  \"19910111\",\n  \"19910114\",\n  \"19910115\",\n  \"19910116\",\n  \"19910117\",\n  \"19910118\",\n  \"19910121\",\n  \"19910122\",\n  \"19910123\",\n  \"19910124\",\n  \"19910125\",\n  \"19910128\",\n  \"19910129\",\n  \"19910130\",\n  \"19910131\",\n  \"19910201\",\n  \"19910204\",\n  \"19910205\",\n  \"19910206\",\n  \"19910207\",\n  \"19910208\",\n  \"19910211\",\n  \"19910212\",\n  \"19910213\",\n  \"19910214\",\n  \"19910219\",\n  \"19910220\",\n  \"19910221\",\n  \"19910222\",\n  \"19910225\",\n  \"19910226\",\n  \"19910227\",\n  \"19910228\",\n  \"19910301\",\n  \"19910304\",\n  \"19910305\",\n  \"19910306\",\n  \"19910307\",\n  \"19910308\",\n  \"19910311\",\n  \"19910312\",\n  \"19910313\",\n  \"19910314\",\n  \"19910315\",\n  \"19910318\",\n  \"19910319\",\n  \"19910320\",\n  \"19910321\",\n  \"19910322\",\n  \"19910325\",\n  \"19910326\",\n  \"19910327\",\n  \"19910328\",\n  \"19910329\",\n  \"19910401\",\n  \"19910402\",\n  \"19910403\",\n  \"19910404\",\n  \"19910405\",\n  \"19910408\",\n  \"19910409\",\n  \"19910410\",\n  \"19910411\",\n  \"19910412\",\n  \"19910415\",\n  \"19910416\",\n  \"19910417\",\n  \"19910418\",\n  \"19910419\",\n  \"19910422\",\n  \"19910423\",\n  \"19910424\",\n  \"19910425\",\n  \"19910426\",\n  \"19910429\",\n  \"19910430\",\n  \"19910502\",\n  \"19910503\",\n  \"19910506\",\n  \"19910507\",\n  \"19910508\",\n  \"19910509\",\n  \"19910510\",\n  \"19910513\",\n  \"19910514\",\n  \"19910515\",\n  \"19910516\",\n  \"19910517\",\n  \"19910520\",\n  \"19910521\",\n  \"19910522\",\n  \"19910523\",\n  \"19910524\",\n  \"19910527\",\n  \"19910528\",\n  \"19910529\",\n  \"19910530\",\n  \"19910531\",\n  \"19910603\",\n  \"19910604\",\n  \"19910605\",\n  \"19910606\",\n  \"19910607\",\n  \"19910610\",\n  \"19910611\",\n  \"19910612\",\n  \"19910613\",\n  \"19910614\",\n  \"19910617\",\n  \"19910618\",\n  \"19910619\",\n  \"19910620\",\n  \"19910621\",\n  \"19910624\",\n  \"19910625\",\n  \"19910626\",\n  \"19910627\",\n  \"19910628\",\n  \"19910701\",\n  \"19910702\",\n  \"19910703\",\n  \"19910704\",\n  \"19910705\",\n  \"19910708\",\n  \"19910709\",\n  \"19910710\",\n  \"19910711\",\n  \"19910712\",\n  \"19910715\",\n  \"19910716\",\n  \"19910717\",\n  \"19910718\",\n  \"19910719\",\n  \"19910722\",\n  \"19910723\",\n  \"19910724\",\n  \"19910725\",\n  \"19910726\",\n  \"19910729\",\n  \"19910730\",\n  \"19910731\",\n  \"19910801\",\n  \"19910802\",\n  \"19910805\",\n  \"19910806\",\n  \"19910807\",\n  \"19910808\",\n  \"19910809\",\n  \"19910812\",\n  \"19910813\",\n  \"19910814\",\n  \"19910815\",\n  \"19910816\",\n  \"19910819\",\n  \"19910820\",\n  \"19910821\",\n  \"19910822\",\n  \"19910823\",\n  \"19910826\",\n  \"19910827\",\n  \"19910828\",\n  \"19910829\",\n  \"19910830\",\n  \"19910902\",\n  \"19910903\",\n  \"19910904\",\n  \"19910905\",\n  \"19910906\",\n  \"19910909\",\n  \"19910910\",\n  \"19910911\",\n  \"19910912\",\n  \"19910913\",\n  \"19910916\",\n  \"19910917\",\n  \"19910918\",\n  \"19910919\",\n  \"19910920\",\n  \"19910923\",\n  \"19910924\",\n  \"19910925\",\n  \"19910926\",\n  \"19910927\",\n  \"19910930\",\n  \"19911003\",\n  \"19911004\",\n  \"19911007\",\n  \"19911008\",\n  \"19911009\",\n  \"19911010\",\n  \"19911011\",\n  \"19911014\",\n  \"19911015\",\n  \"19911016\",\n  \"19911017\",\n  \"19911018\",\n  \"19911021\",\n  \"19911022\",\n  \"19911023\",\n  \"19911024\",\n  \"19911025\",\n  \"19911028\",\n  \"19911029\",\n  \"19911030\",\n  \"19911031\",\n  \"19911101\",\n  \"19911104\",\n  \"19911105\",\n  \"19911106\",\n  \"19911107\",\n  \"19911108\",\n  \"19911111\",\n  \"19911112\",\n  \"19911113\",\n  \"19911114\",\n  \"19911115\",\n  \"19911118\",\n  \"19911119\",\n  \"19911120\",\n  \"19911121\",\n  \"19911122\",\n  \"19911125\",\n  \"19911126\",\n  \"19911127\",\n  \"19911128\",\n  \"19911129\",\n  \"19911202\",\n  \"19911203\",\n  \"19911204\",\n  \"19911205\",\n  \"19911206\",\n  \"19911209\",\n  \"19911210\",\n  \"19911211\",\n  \"19911212\",\n  \"19911213\",\n  \"19911216\",\n  \"19911217\",\n  \"19911218\",\n  \"19911219\",\n  \"19911220\",\n  \"19911223\",\n  \"19911224\",\n  \"19911225\",\n  \"19911226\",\n  \"19911227\",\n  \"19911230\",\n  \"19911231\",\n  \"19920102\",\n  \"19920103\",\n  \"19920106\",\n  \"19920107\",\n  \"19920108\",\n  \"19920109\",\n  \"19920110\",\n  \"19920113\",\n  \"19920114\",\n  \"19920115\",\n  \"19920116\",\n  \"19920117\",\n  \"19920120\",\n  \"19920121\",\n  \"19920122\",\n  \"19920123\",\n  \"19920124\",\n  \"19920127\",\n  \"19920128\",\n  \"19920129\",\n  \"19920130\",\n  \"19920131\",\n  \"19920203\",\n  \"19920207\",\n  \"19920210\",\n  \"19920211\",\n  \"19920212\",\n  \"19920213\",\n  \"19920214\",\n  \"19920217\",\n  \"19920218\",\n  \"19920219\",\n  \"19920220\",\n  \"19920221\",\n  \"19920224\",\n  \"19920225\",\n  \"19920226\",\n  \"19920227\",\n  \"19920228\",\n  \"19920302\",\n  \"19920303\",\n  \"19920304\",\n  \"19920305\",\n  \"19920306\",\n  \"19920309\",\n  \"19920310\",\n  \"19920311\",\n  \"19920312\",\n  \"19920313\",\n  \"19920316\",\n  \"19920317\",\n  \"19920318\",\n  \"19920319\",\n  \"19920320\",\n  \"19920323\",\n  \"19920324\",\n  \"19920325\",\n  \"19920326\",\n  \"19920327\",\n  \"19920330\",\n  \"19920331\",\n  \"19920401\",\n  \"19920402\",\n  \"19920403\",\n  \"19920406\",\n  \"19920407\",\n  \"19920408\",\n  \"19920409\",\n  \"19920410\",\n  \"19920413\",\n  \"19920414\",\n  \"19920415\",\n  \"19920416\",\n  \"19920417\",\n  \"19920420\",\n  \"19920421\",\n  \"19920422\",\n  \"19920423\",\n  \"19920424\",\n  \"19920427\",\n  \"19920428\",\n  \"19920429\",\n  \"19920430\",\n  \"19920504\",\n  \"19920505\",\n  \"19920506\",\n  \"19920507\",\n  \"19920508\",\n  \"19920511\",\n  \"19920512\",\n  \"19920513\",\n  \"19920514\",\n  \"19920515\",\n  \"19920518\",\n  \"19920519\",\n  \"19920520\",\n  \"19920521\",\n  \"19920522\",\n  \"19920525\",\n  \"19920526\",\n  \"19920527\",\n  \"19920528\",\n  \"19920529\",\n  \"19920601\",\n  \"19920602\",\n  \"19920603\",\n  \"19920604\",\n  \"19920605\",\n  \"19920608\",\n  \"19920609\",\n  \"19920610\",\n  \"19920611\",\n  \"19920612\",\n  \"19920615\",\n  \"19920616\",\n  \"19920617\",\n  \"19920618\",\n  \"19920619\",\n  \"19920622\",\n  \"19920623\",\n  \"19920624\",\n  \"19920625\",\n  \"19920626\",\n  \"19920629\",\n  \"19920630\",\n  \"19920701\",\n  \"19920702\",\n  \"19920703\",\n  \"19920706\",\n  \"19920707\",\n  \"19920708\",\n  \"19920709\",\n  \"19920710\",\n  \"19920713\",\n  \"19920714\",\n  \"19920715\",\n  \"19920716\",\n  \"19920717\",\n  \"19920720\",\n  \"19920721\",\n  \"19920722\",\n  \"19920723\",\n  \"19920724\",\n  \"19920727\",\n  \"19920728\",\n  \"19920729\",\n  \"19920730\",\n  \"19920731\",\n  \"19920803\",\n  \"19920804\",\n  \"19920805\",\n  \"19920806\",\n  \"19920807\",\n  \"19920810\",\n  \"19920811\",\n  \"19920812\",\n  \"19920813\",\n  \"19920814\",\n  \"19920817\",\n  \"19920818\",\n  \"19920819\",\n  \"19920820\",\n  \"19920821\",\n  \"19920824\",\n  \"19920825\",\n  \"19920826\",\n  \"19920827\",\n  \"19920828\",\n  \"19920831\",\n  \"19920901\",\n  \"19920902\",\n  \"19920903\",\n  \"19920904\",\n  \"19920907\",\n  \"19920908\",\n  \"19920909\",\n  \"19920910\",\n  \"19920911\",\n  \"19920914\",\n  \"19920915\",\n  \"19920916\",\n  \"19920917\",\n  \"19920918\",\n  \"19920921\",\n  \"19920922\",\n  \"19920923\",\n  \"19920924\",\n  \"19920925\",\n  \"19920928\",\n  \"19920929\",\n  \"19920930\",\n  \"19921005\",\n  \"19921006\",\n  \"19921007\",\n  \"19921008\",\n  \"19921009\",\n  \"19921012\",\n  \"19921013\",\n  \"19921014\",\n  \"19921015\",\n  \"19921016\",\n  \"19921019\",\n  \"19921020\",\n  \"19921021\",\n  \"19921022\",\n  \"19921023\",\n  \"19921026\",\n  \"19921027\",\n  \"19921028\",\n  \"19921029\",\n  \"19921030\",\n  \"19921102\",\n  \"19921103\",\n  \"19921104\",\n  \"19921105\",\n  \"19921106\",\n  \"19921109\",\n  \"19921110\",\n  \"19921111\",\n  \"19921112\",\n  \"19921113\",\n  \"19921116\",\n  \"19921117\",\n  \"19921118\",\n  \"19921119\",\n  \"19921120\",\n  \"19921123\",\n  \"19921124\",\n  \"19921125\",\n  \"19921126\",\n  \"19921127\",\n  \"19921130\",\n  \"19921201\",\n  \"19921202\",\n  \"19921203\",\n  \"19921204\",\n  \"19921207\",\n  \"19921208\",\n  \"19921209\",\n  \"19921210\",\n  \"19921211\",\n  \"19921214\",\n  \"19921215\",\n  \"19921216\",\n  \"19921217\",\n  \"19921218\",\n  \"19921221\",\n  \"19921222\",\n  \"19921223\",\n  \"19921224\",\n  \"19921225\",\n  \"19921228\",\n  \"19921229\",\n  \"19921230\",\n  \"19921231\",\n  \"19930104\",\n  \"19930105\",\n  \"19930106\",\n  \"19930107\",\n  \"19930108\",\n  \"19930111\",\n  \"19930112\",\n  \"19930113\",\n  \"19930114\",\n  \"19930115\",\n  \"19930118\",\n  \"19930119\",\n  \"19930120\",\n  \"19930121\",\n  \"19930122\",\n  \"19930127\",\n  \"19930128\",\n  \"19930129\",\n  \"19930201\",\n  \"19930202\",\n  \"19930203\",\n  \"19930204\",\n  \"19930205\",\n  \"19930208\",\n  \"19930209\",\n  \"19930210\",\n  \"19930211\",\n  \"19930212\",\n  \"19930215\",\n  \"19930216\",\n  \"19930217\",\n  \"19930218\",\n  \"19930219\",\n  \"19930222\",\n  \"19930223\",\n  \"19930224\",\n  \"19930225\",\n  \"19930226\",\n  \"19930301\",\n  \"19930302\",\n  \"19930303\",\n  \"19930304\",\n  \"19930305\",\n  \"19930308\",\n  \"19930309\",\n  \"19930310\",\n  \"19930311\",\n  \"19930312\",\n  \"19930315\",\n  \"19930316\",\n  \"19930317\",\n  \"19930318\",\n  \"19930319\",\n  \"19930322\",\n  \"19930323\",\n  \"19930324\",\n  \"19930325\",\n  \"19930326\",\n  \"19930329\",\n  \"19930330\",\n  \"19930331\",\n  \"19930401\",\n  \"19930402\",\n  \"19930405\",\n  \"19930406\",\n  \"19930407\",\n  \"19930408\",\n  \"19930409\",\n  \"19930412\",\n  \"19930413\",\n  \"19930414\",\n  \"19930415\",\n  \"19930416\",\n  \"19930419\",\n  \"19930420\",\n  \"19930421\",\n  \"19930422\",\n  \"19930423\",\n  \"19930426\",\n  \"19930427\",\n  \"19930428\",\n  \"19930429\",\n  \"19930430\",\n  \"19930503\",\n  \"19930504\",\n  \"19930505\",\n  \"19930506\",\n  \"19930507\",\n  \"19930510\",\n  \"19930511\",\n  \"19930512\",\n  \"19930513\",\n  \"19930514\",\n  \"19930517\",\n  \"19930518\",\n  \"19930519\",\n  \"19930520\",\n  \"19930521\",\n  \"19930524\",\n  \"19930525\",\n  \"19930526\",\n  \"19930527\",\n  \"19930528\",\n  \"19930531\",\n  \"19930601\",\n  \"19930602\",\n  \"19930603\",\n  \"19930604\",\n  \"19930607\",\n  \"19930608\",\n  \"19930609\",\n  \"19930610\",\n  \"19930611\",\n  \"19930614\",\n  \"19930615\",\n  \"19930616\",\n  \"19930617\",\n  \"19930618\",\n  \"19930621\",\n  \"19930622\",\n  \"19930623\",\n  \"19930624\",\n  \"19930625\",\n  \"19930628\",\n  \"19930629\",\n  \"19930630\",\n  \"19930701\",\n  \"19930702\",\n  \"19930705\",\n  \"19930706\",\n  \"19930707\",\n  \"19930708\",\n  \"19930709\",\n  \"19930712\",\n  \"19930713\",\n  \"19930714\",\n  \"19930715\",\n  \"19930716\",\n  \"19930719\",\n  \"19930720\",\n  \"19930721\",\n  \"19930722\",\n  \"19930723\",\n  \"19930726\",\n  \"19930727\",\n  \"19930728\",\n  \"19930729\",\n  \"19930730\",\n  \"19930802\",\n  \"19930803\",\n  \"19930804\",\n  \"19930805\",\n  \"19930806\",\n  \"19930809\",\n  \"19930810\",\n  \"19930811\",\n  \"19930812\",\n  \"19930813\",\n  \"19930816\",\n  \"19930817\",\n  \"19930818\",\n  \"19930819\",\n  \"19930820\",\n  \"19930823\",\n  \"19930824\",\n  \"19930825\",\n  \"19930826\",\n  \"19930827\",\n  \"19930830\",\n  \"19930831\",\n  \"19930901\",\n  \"19930902\",\n  \"19930903\",\n  \"19930906\",\n  \"19930907\",\n  \"19930908\",\n  \"19930909\",\n  \"19930910\",\n  \"19930913\",\n  \"19930914\",\n  \"19930915\",\n  \"19930916\",\n  \"19930917\",\n  \"19930920\",\n  \"19930921\",\n  \"19930922\",\n  \"19930923\",\n  \"19930924\",\n  \"19930927\",\n  \"19930928\",\n  \"19930929\",\n  \"19930930\",\n  \"19931004\",\n  \"19931005\",\n  \"19931006\",\n  \"19931007\",\n  \"19931008\",\n  \"19931011\",\n  \"19931012\",\n  \"19931013\",\n  \"19931014\",\n  \"19931015\",\n  \"19931018\",\n  \"19931019\",\n  \"19931020\",\n  \"19931021\",\n  \"19931022\",\n  \"19931025\",\n  \"19931026\",\n  \"19931027\",\n  \"19931028\",\n  \"19931029\",\n  \"19931101\",\n  \"19931102\",\n  \"19931103\",\n  \"19931104\",\n  \"19931105\",\n  \"19931108\",\n  \"19931109\",\n  \"19931110\",\n  \"19931111\",\n  \"19931112\",\n  \"19931115\",\n  \"19931116\",\n  \"19931117\",\n  \"19931118\",\n  \"19931119\",\n  \"19931122\",\n  \"19931123\",\n  \"19931124\",\n  \"19931125\",\n  \"19931126\",\n  \"19931129\",\n  \"19931130\",\n  \"19931201\",\n  \"19931202\",\n  \"19931203\",\n  \"19931206\",\n  \"19931207\",\n  \"19931208\",\n  \"19931209\",\n  \"19931210\",\n  \"19931213\",\n  \"19931214\",\n  \"19931215\",\n  \"19931216\",\n  \"19931217\",\n  \"19931220\",\n  \"19931221\",\n  \"19931222\",\n  \"19931223\",\n  \"19931224\",\n  \"19931227\",\n  \"19931228\",\n  \"19931229\",\n  \"19931230\",\n  \"19931231\",\n  \"19940103\",\n  \"19940104\",\n  \"19940105\",\n  \"19940106\",\n  \"19940107\",\n  \"19940110\",\n  \"19940111\",\n  \"19940112\",\n  \"19940113\",\n  \"19940114\",\n  \"19940117\",\n  \"19940118\",\n  \"19940119\",\n  \"19940120\",\n  \"19940121\",\n  \"19940124\",\n  \"19940125\",\n  \"19940126\",\n  \"19940127\",\n  \"19940128\",\n  \"19940131\",\n  \"19940201\",\n  \"19940202\",\n  \"19940203\",\n  \"19940204\",\n  \"19940214\",\n  \"19940215\",\n  \"19940216\",\n  \"19940217\",\n  \"19940218\",\n  \"19940221\",\n  \"19940222\",\n  \"19940223\",\n  \"19940224\",\n  \"19940225\",\n  \"19940228\",\n  \"19940301\",\n  \"19940302\",\n  \"19940303\",\n  \"19940304\",\n  \"19940307\",\n  \"19940308\",\n  \"19940309\",\n  \"19940310\",\n  \"19940311\",\n  \"19940314\",\n  \"19940315\",\n  \"19940316\",\n  \"19940317\",\n  \"19940318\",\n  \"19940321\",\n  \"19940322\",\n  \"19940323\",\n  \"19940324\",\n  \"19940325\",\n  \"19940328\",\n  \"19940329\",\n  \"19940330\",\n  \"19940331\",\n  \"19940401\",\n  \"19940404\",\n  \"19940405\",\n  \"19940406\",\n  \"19940407\",\n  \"19940408\",\n  \"19940411\",\n  \"19940412\",\n  \"19940413\",\n  \"19940414\",\n  \"19940415\",\n  \"19940418\",\n  \"19940419\",\n  \"19940420\",\n  \"19940421\",\n  \"19940422\",\n  \"19940425\",\n  \"19940426\",\n  \"19940427\",\n  \"19940428\",\n  \"19940429\",\n  \"19940503\",\n  \"19940504\",\n  \"19940505\",\n  \"19940506\",\n  \"19940509\",\n  \"19940510\",\n  \"19940511\",\n  \"19940512\",\n  \"19940513\",\n  \"19940516\",\n  \"19940517\",\n  \"19940518\",\n  \"19940519\",\n  \"19940520\",\n  \"19940523\",\n  \"19940524\",\n  \"19940525\",\n  \"19940526\",\n  \"19940527\",\n  \"19940530\",\n  \"19940531\",\n  \"19940601\",\n  \"19940602\",\n  \"19940603\",\n  \"19940606\",\n  \"19940607\",\n  \"19940608\",\n  \"19940609\",\n  \"19940610\",\n  \"19940613\",\n  \"19940614\",\n  \"19940615\",\n  \"19940616\",\n  \"19940617\",\n  \"19940620\",\n  \"19940621\",\n  \"19940622\",\n  \"19940623\",\n  \"19940624\",\n  \"19940627\",\n  \"19940628\",\n  \"19940629\",\n  \"19940630\",\n  \"19940701\",\n  \"19940704\",\n  \"19940705\",\n  \"19940706\",\n  \"19940707\",\n  \"19940708\",\n  \"19940711\",\n  \"19940712\",\n  \"19940713\",\n  \"19940714\",\n  \"19940715\",\n  \"19940718\",\n  \"19940719\",\n  \"19940720\",\n  \"19940721\",\n  \"19940722\",\n  \"19940725\",\n  \"19940726\",\n  \"19940727\",\n  \"19940728\",\n  \"19940729\",\n  \"19940801\",\n  \"19940802\",\n  \"19940803\",\n  \"19940804\",\n  \"19940805\",\n  \"19940808\",\n  \"19940809\",\n  \"19940810\",\n  \"19940811\",\n  \"19940812\",\n  \"19940815\",\n  \"19940816\",\n  \"19940817\",\n  \"19940818\",\n  \"19940819\",\n  \"19940822\",\n  \"19940823\",\n  \"19940824\",\n  \"19940825\",\n  \"19940826\",\n  \"19940829\",\n  \"19940830\",\n  \"19940831\",\n  \"19940901\",\n  \"19940902\",\n  \"19940905\",\n  \"19940906\",\n  \"19940907\",\n  \"19940908\",\n  \"19940909\",\n  \"19940912\",\n  \"19940913\",\n  \"19940914\",\n  \"19940915\",\n  \"19940916\",\n  \"19940919\",\n  \"19940920\",\n  \"19940921\",\n  \"19940922\",\n  \"19940923\",\n  \"19940926\",\n  \"19940927\",\n  \"19940928\",\n  \"19940929\",\n  \"19940930\",\n  \"19941005\",\n  \"19941006\",\n  \"19941007\",\n  \"19941010\",\n  \"19941011\",\n  \"19941012\",\n  \"19941013\",\n  \"19941014\",\n  \"19941017\",\n  \"19941018\",\n  \"19941019\",\n  \"19941020\",\n  \"19941021\",\n  \"19941024\",\n  \"19941025\",\n  \"19941026\",\n  \"19941027\",\n  \"19941028\",\n  \"19941031\",\n  \"19941101\",\n  \"19941102\",\n  \"19941103\",\n  \"19941104\",\n  \"19941107\",\n  \"19941108\",\n  \"19941109\",\n  \"19941110\",\n  \"19941111\",\n  \"19941114\",\n  \"19941115\",\n  \"19941116\",\n  \"19941117\",\n  \"19941118\",\n  \"19941121\",\n  \"19941122\",\n  \"19941123\",\n  \"19941124\",\n  \"19941125\",\n  \"19941128\",\n  \"19941129\",\n  \"19941130\",\n  \"19941201\",\n  \"19941202\",\n  \"19941205\",\n  \"19941206\",\n  \"19941207\",\n  \"19941208\",\n  \"19941209\",\n  \"19941212\",\n  \"19941213\",\n  \"19941214\",\n  \"19941215\",\n  \"19941216\",\n  \"19941219\",\n  \"19941220\",\n  \"19941221\",\n  \"19941222\",\n  \"19941223\",\n  \"19941226\",\n  \"19941227\",\n  \"19941228\",\n  \"19941229\",\n  \"19941230\",\n  \"19950103\",\n  \"19950104\",\n  \"19950105\",\n  \"19950106\",\n  \"19950109\",\n  \"19950110\",\n  \"19950111\",\n  \"19950112\",\n  \"19950113\",\n  \"19950116\",\n  \"19950117\",\n  \"19950118\",\n  \"19950119\",\n  \"19950120\",\n  \"19950123\",\n  \"19950124\",\n  \"19950125\",\n  \"19950126\",\n  \"19950127\",\n  \"19950206\",\n  \"19950207\",\n  \"19950208\",\n  \"19950209\",\n  \"19950210\",\n  \"19950213\",\n  \"19950214\",\n  \"19950215\",\n  \"19950216\",\n  \"19950217\",\n  \"19950220\",\n  \"19950221\",\n  \"19950222\",\n  \"19950223\",\n  \"19950224\",\n  \"19950227\",\n  \"19950228\",\n  \"19950301\",\n  \"19950302\",\n  \"19950303\",\n  \"19950306\",\n  \"19950307\",\n  \"19950308\",\n  \"19950309\",\n  \"19950310\",\n  \"19950313\",\n  \"19950314\",\n  \"19950315\",\n  \"19950316\",\n  \"19950317\",\n  \"19950320\",\n  \"19950321\",\n  \"19950322\",\n  \"19950323\",\n  \"19950324\",\n  \"19950327\",\n  \"19950328\",\n  \"19950329\",\n  \"19950330\",\n  \"19950331\",\n  \"19950403\",\n  \"19950404\",\n  \"19950405\",\n  \"19950406\",\n  \"19950407\",\n  \"19950410\",\n  \"19950411\",\n  \"19950412\",\n  \"19950413\",\n  \"19950414\",\n  \"19950417\",\n  \"19950418\",\n  \"19950419\",\n  \"19950420\",\n  \"19950421\",\n  \"19950424\",\n  \"19950425\",\n  \"19950426\",\n  \"19950427\",\n  \"19950428\",\n  \"19950502\",\n  \"19950503\",\n  \"19950504\",\n  \"19950505\",\n  \"19950508\",\n  \"19950509\",\n  \"19950510\",\n  \"19950511\",\n  \"19950512\",\n  \"19950515\",\n  \"19950516\",\n  \"19950517\",\n  \"19950518\",\n  \"19950519\",\n  \"19950522\",\n  \"19950523\",\n  \"19950524\",\n  \"19950525\",\n  \"19950526\",\n  \"19950529\",\n  \"19950530\",\n  \"19950531\",\n  \"19950601\",\n  \"19950602\",\n  \"19950605\",\n  \"19950606\",\n  \"19950607\",\n  \"19950608\",\n  \"19950609\",\n  \"19950612\",\n  \"19950613\",\n  \"19950614\",\n  \"19950615\",\n  \"19950616\",\n  \"19950619\",\n  \"19950620\",\n  \"19950621\",\n  \"19950622\",\n  \"19950623\",\n  \"19950626\",\n  \"19950627\",\n  \"19950628\",\n  \"19950629\",\n  \"19950630\",\n  \"19950703\",\n  \"19950704\",\n  \"19950705\",\n  \"19950706\",\n  \"19950707\",\n  \"19950710\",\n  \"19950711\",\n  \"19950712\",\n  \"19950713\",\n  \"19950714\",\n  \"19950717\",\n  \"19950718\",\n  \"19950719\",\n  \"19950720\",\n  \"19950721\",\n  \"19950724\",\n  \"19950725\",\n  \"19950726\",\n  \"19950727\",\n  \"19950728\",\n  \"19950731\",\n  \"19950801\",\n  \"19950802\",\n  \"19950803\",\n  \"19950804\",\n  \"19950807\",\n  \"19950808\",\n  \"19950809\",\n  \"19950810\",\n  \"19950811\",\n  \"19950814\",\n  \"19950815\",\n  \"19950816\",\n  \"19950817\",\n  \"19950818\",\n  \"19950821\",\n  \"19950822\",\n  \"19950823\",\n  \"19950824\",\n  \"19950825\",\n  \"19950828\",\n  \"19950829\",\n  \"19950830\",\n  \"19950831\",\n  \"19950901\",\n  \"19950904\",\n  \"19950905\",\n  \"19950906\",\n  \"19950907\",\n  \"19950908\",\n  \"19950911\",\n  \"19950912\",\n  \"19950913\",\n  \"19950914\",\n  \"19950915\",\n  \"19950918\",\n  \"19950919\",\n  \"19950920\",\n  \"19950921\",\n  \"19950922\",\n  \"19950925\",\n  \"19950926\",\n  \"19950927\",\n  \"19950928\",\n  \"19950929\",\n  \"19951004\",\n  \"19951005\",\n  \"19951006\",\n  \"19951009\",\n  \"19951010\",\n  \"19951011\",\n  \"19951012\",\n  \"19951013\",\n  \"19951016\",\n  \"19951017\",\n  \"19951018\",\n  \"19951019\",\n  \"19951020\",\n  \"19951023\",\n  \"19951024\",\n  \"19951025\",\n  \"19951026\",\n  \"19951027\",\n  \"19951030\",\n  \"19951031\",\n  \"19951101\",\n  \"19951102\",\n  \"19951103\",\n  \"19951106\",\n  \"19951107\",\n  \"19951108\",\n  \"19951109\",\n  \"19951110\",\n  \"19951113\",\n  \"19951114\",\n  \"19951115\",\n  \"19951116\",\n  \"19951117\",\n  \"19951120\",\n  \"19951121\",\n  \"19951122\",\n  \"19951123\",\n  \"19951124\",\n  \"19951127\",\n  \"19951128\",\n  \"19951129\",\n  \"19951130\",\n  \"19951201\",\n  \"19951204\",\n  \"19951205\",\n  \"19951206\",\n  \"19951207\",\n  \"19951208\",\n  \"19951211\",\n  \"19951212\",\n  \"19951213\",\n  \"19951214\",\n  \"19951215\",\n  \"19951218\",\n  \"19951219\",\n  \"19951220\",\n  \"19951221\",\n  \"19951222\",\n  \"19951225\",\n  \"19951226\",\n  \"19951227\",\n  \"19951228\",\n  \"19951229\",\n  \"19960102\",\n  \"19960103\",\n  \"19960104\",\n  \"19960105\",\n  \"19960108\",\n  \"19960109\",\n  \"19960110\",\n  \"19960111\",\n  \"19960112\",\n  \"19960115\",\n  \"19960116\",\n  \"19960117\",\n  \"19960118\",\n  \"19960119\",\n  \"19960122\",\n  \"19960123\",\n  \"19960124\",\n  \"19960125\",\n  \"19960126\",\n  \"19960129\",\n  \"19960130\",\n  \"19960131\",\n  \"19960201\",\n  \"19960202\",\n  \"19960205\",\n  \"19960206\",\n  \"19960207\",\n  \"19960208\",\n  \"19960209\",\n  \"19960212\",\n  \"19960213\",\n  \"19960214\",\n  \"19960215\",\n  \"19960216\",\n  \"19960304\",\n  \"19960305\",\n  \"19960306\",\n  \"19960307\",\n  \"19960308\",\n  \"19960311\",\n  \"19960312\",\n  \"19960313\",\n  \"19960314\",\n  \"19960315\",\n  \"19960318\",\n  \"19960319\",\n  \"19960320\",\n  \"19960321\",\n  \"19960322\",\n  \"19960325\",\n  \"19960326\",\n  \"19960327\",\n  \"19960328\",\n  \"19960329\",\n  \"19960401\",\n  \"19960402\",\n  \"19960403\",\n  \"19960404\",\n  \"19960405\",\n  \"19960408\",\n  \"19960409\",\n  \"19960410\",\n  \"19960411\",\n  \"19960412\",\n  \"19960415\",\n  \"19960416\",\n  \"19960417\",\n  \"19960418\",\n  \"19960419\",\n  \"19960422\",\n  \"19960423\",\n  \"19960424\",\n  \"19960425\",\n  \"19960426\",\n  \"19960429\",\n  \"19960430\",\n  \"19960502\",\n  \"19960503\",\n  \"19960506\",\n  \"19960507\",\n  \"19960508\",\n  \"19960509\",\n  \"19960510\",\n  \"19960513\",\n  \"19960514\",\n  \"19960515\",\n  \"19960516\",\n  \"19960517\",\n  \"19960520\",\n  \"19960521\",\n  \"19960522\",\n  \"19960523\",\n  \"19960524\",\n  \"19960527\",\n  \"19960528\",\n  \"19960529\",\n  \"19960530\",\n  \"19960531\",\n  \"19960603\",\n  \"19960604\",\n  \"19960605\",\n  \"19960606\",\n  \"19960607\",\n  \"19960610\",\n  \"19960611\",\n  \"19960612\",\n  \"19960613\",\n  \"19960614\",\n  \"19960617\",\n  \"19960618\",\n  \"19960619\",\n  \"19960620\",\n  \"19960621\",\n  \"19960624\",\n  \"19960625\",\n  \"19960626\",\n  \"19960627\",\n  \"19960628\",\n  \"19960701\",\n  \"19960702\",\n  \"19960703\",\n  \"19960704\",\n  \"19960705\",\n  \"19960708\",\n  \"19960709\",\n  \"19960710\",\n  \"19960711\",\n  \"19960712\",\n  \"19960715\",\n  \"19960716\",\n  \"19960717\",\n  \"19960718\",\n  \"19960719\",\n  \"19960722\",\n  \"19960723\",\n  \"19960724\",\n  \"19960725\",\n  \"19960726\",\n  \"19960729\",\n  \"19960730\",\n  \"19960731\",\n  \"19960801\",\n  \"19960802\",\n  \"19960805\",\n  \"19960806\",\n  \"19960807\",\n  \"19960808\",\n  \"19960809\",\n  \"19960812\",\n  \"19960813\",\n  \"19960814\",\n  \"19960815\",\n  \"19960816\",\n  \"19960819\",\n  \"19960820\",\n  \"19960821\",\n  \"19960822\",\n  \"19960823\",\n  \"19960826\",\n  \"19960827\",\n  \"19960828\",\n  \"19960829\",\n  \"19960830\",\n  \"19960902\",\n  \"19960903\",\n  \"19960904\",\n  \"19960905\",\n  \"19960906\",\n  \"19960909\",\n  \"19960910\",\n  \"19960911\",\n  \"19960912\",\n  \"19960913\",\n  \"19960916\",\n  \"19960917\",\n  \"19960918\",\n  \"19960919\",\n  \"19960920\",\n  \"19960923\",\n  \"19960924\",\n  \"19960925\",\n  \"19960926\",\n  \"19960927\",\n  \"19961003\",\n  \"19961004\",\n  \"19961007\",\n  \"19961008\",\n  \"19961009\",\n  \"19961010\",\n  \"19961011\",\n  \"19961014\",\n  \"19961015\",\n  \"19961016\",\n  \"19961017\",\n  \"19961018\",\n  \"19961021\",\n  \"19961022\",\n  \"19961023\",\n  \"19961024\",\n  \"19961025\",\n  \"19961028\",\n  \"19961029\",\n  \"19961030\",\n  \"19961031\",\n  \"19961101\",\n  \"19961104\",\n  \"19961105\",\n  \"19961106\",\n  \"19961107\",\n  \"19961108\",\n  \"19961111\",\n  \"19961112\",\n  \"19961113\",\n  \"19961114\",\n  \"19961115\",\n  \"19961118\",\n  \"19961119\",\n  \"19961120\",\n  \"19961121\",\n  \"19961122\",\n  \"19961125\",\n  \"19961126\",\n  \"19961127\",\n  \"19961128\",\n  \"19961129\",\n  \"19961202\",\n  \"19961203\",\n  \"19961204\",\n  \"19961205\",\n  \"19961206\",\n  \"19961209\",\n  \"19961210\",\n  \"19961211\",\n  \"19961212\",\n  \"19961213\",\n  \"19961216\",\n  \"19961217\",\n  \"19961218\",\n  \"19961219\",\n  \"19961220\",\n  \"19961223\",\n  \"19961224\",\n  \"19961225\",\n  \"19961226\",\n  \"19961227\",\n  \"19961230\",\n  \"19961231\",\n  \"19970102\",\n  \"19970103\",\n  \"19970106\",\n  \"19970107\",\n  \"19970108\",\n  \"19970109\",\n  \"19970110\",\n  \"19970113\",\n  \"19970114\",\n  \"19970115\",\n  \"19970116\",\n  \"19970117\",\n  \"19970120\",\n  \"19970121\",\n  \"19970122\",\n  \"19970123\",\n  \"19970124\",\n  \"19970127\",\n  \"19970128\",\n  \"19970129\",\n  \"19970130\",\n  \"19970131\",\n  \"19970217\",\n  \"19970218\",\n  \"19970219\",\n  \"19970220\",\n  \"19970221\",\n  \"19970224\",\n  \"19970225\",\n  \"19970226\",\n  \"19970227\",\n  \"19970228\",\n  \"19970303\",\n  \"19970304\",\n  \"19970305\",\n  \"19970306\",\n  \"19970307\",\n  \"19970310\",\n  \"19970311\",\n  \"19970312\",\n  \"19970313\",\n  \"19970314\",\n  \"19970317\",\n  \"19970318\",\n  \"19970319\",\n  \"19970320\",\n  \"19970321\",\n  \"19970324\",\n  \"19970325\",\n  \"19970326\",\n  \"19970327\",\n  \"19970328\",\n  \"19970331\",\n  \"19970401\",\n  \"19970402\",\n  \"19970403\",\n  \"19970404\",\n  \"19970407\",\n  \"19970408\",\n  \"19970409\",\n  \"19970410\",\n  \"19970411\",\n  \"19970414\",\n  \"19970415\",\n  \"19970416\",\n  \"19970417\",\n  \"19970418\",\n  \"19970421\",\n  \"19970422\",\n  \"19970423\",\n  \"19970424\",\n  \"19970425\",\n  \"19970428\",\n  \"19970429\",\n  \"19970430\",\n  \"19970505\",\n  \"19970506\",\n  \"19970507\",\n  \"19970508\",\n  \"19970509\",\n  \"19970512\",\n  \"19970513\",\n  \"19970514\",\n  \"19970515\",\n  \"19970516\",\n  \"19970519\",\n  \"19970520\",\n  \"19970521\",\n  \"19970522\",\n  \"19970523\",\n  \"19970526\",\n  \"19970527\",\n  \"19970528\",\n  \"19970529\",\n  \"19970530\",\n  \"19970602\",\n  \"19970603\",\n  \"19970604\",\n  \"19970605\",\n  \"19970606\",\n  \"19970609\",\n  \"19970610\",\n  \"19970611\",\n  \"19970612\",\n  \"19970613\",\n  \"19970616\",\n  \"19970617\",\n  \"19970618\",\n  \"19970619\",\n  \"19970620\",\n  \"19970623\",\n  \"19970624\",\n  \"19970625\",\n  \"19970626\",\n  \"19970627\",\n  \"19970702\",\n  \"19970703\",\n  \"19970704\",\n  \"19970707\",\n  \"19970708\",\n  \"19970709\",\n  \"19970710\",\n  \"19970711\",\n  \"19970714\",\n  \"19970715\",\n  \"19970716\",\n  \"19970717\",\n  \"19970718\",\n  \"19970721\",\n  \"19970722\",\n  \"19970723\",\n  \"19970724\",\n  \"19970725\",\n  \"19970728\",\n  \"19970729\",\n  \"19970730\",\n  \"19970731\",\n  \"19970801\",\n  \"19970804\",\n  \"19970805\",\n  \"19970806\",\n  \"19970807\",\n  \"19970808\",\n  \"19970811\",\n  \"19970812\",\n  \"19970813\",\n  \"19970814\",\n  \"19970815\",\n  \"19970818\",\n  \"19970819\",\n  \"19970820\",\n  \"19970821\",\n  \"19970822\",\n  \"19970825\",\n  \"19970826\",\n  \"19970827\",\n  \"19970828\",\n  \"19970829\",\n  \"19970901\",\n  \"19970902\",\n  \"19970903\",\n  \"19970904\",\n  \"19970905\",\n  \"19970908\",\n  \"19970909\",\n  \"19970910\",\n  \"19970911\",\n  \"19970912\",\n  \"19970915\",\n  \"19970916\",\n  \"19970917\",\n  \"19970918\",\n  \"19970919\",\n  \"19970922\",\n  \"19970923\",\n  \"19970924\",\n  \"19970925\",\n  \"19970926\",\n  \"19970929\",\n  \"19970930\",\n  \"19971006\",\n  \"19971007\",\n  \"19971008\",\n  \"19971009\",\n  \"19971010\",\n  \"19971013\",\n  \"19971014\",\n  \"19971015\",\n  \"19971016\",\n  \"19971017\",\n  \"19971020\",\n  \"19971021\",\n  \"19971022\",\n  \"19971023\",\n  \"19971024\",\n  \"19971027\",\n  \"19971028\",\n  \"19971029\",\n  \"19971030\",\n  \"19971031\",\n  \"19971103\",\n  \"19971104\",\n  \"19971105\",\n  \"19971106\",\n  \"19971107\",\n  \"19971110\",\n  \"19971111\",\n  \"19971112\",\n  \"19971113\",\n  \"19971114\",\n  \"19971117\",\n  \"19971118\",\n  \"19971119\",\n  \"19971120\",\n  \"19971121\",\n  \"19971124\",\n  \"19971125\",\n  \"19971126\",\n  \"19971127\",\n  \"19971128\",\n  \"19971201\",\n  \"19971202\",\n  \"19971203\",\n  \"19971204\",\n  \"19971205\",\n  \"19971208\",\n  \"19971209\",\n  \"19971210\",\n  \"19971211\",\n  \"19971212\",\n  \"19971215\",\n  \"19971216\",\n  \"19971217\",\n  \"19971218\",\n  \"19971219\",\n  \"19971222\",\n  \"19971223\",\n  \"19971224\",\n  \"19971225\",\n  \"19971226\",\n  \"19971229\",\n  \"19971230\",\n  \"19971231\",\n  \"19980105\",\n  \"19980106\",\n  \"19980107\",\n  \"19980108\",\n  \"19980109\",\n  \"19980112\",\n  \"19980113\",\n  \"19980114\",\n  \"19980115\",\n  \"19980116\",\n  \"19980119\",\n  \"19980120\",\n  \"19980121\",\n  \"19980122\",\n  \"19980123\",\n  \"19980209\",\n  \"19980210\",\n  \"19980211\",\n  \"19980212\",\n  \"19980213\",\n  \"19980216\",\n  \"19980217\",\n  \"19980218\",\n  \"19980219\",\n  \"19980220\",\n  \"19980223\",\n  \"19980224\",\n  \"19980225\",\n  \"19980226\",\n  \"19980227\",\n  \"19980302\",\n  \"19980303\",\n  \"19980304\",\n  \"19980305\",\n  \"19980306\",\n  \"19980309\",\n  \"19980310\",\n  \"19980311\",\n  \"19980312\",\n  \"19980313\",\n  \"19980316\",\n  \"19980317\",\n  \"19980318\",\n  \"19980319\",\n  \"19980320\",\n  \"19980323\",\n  \"19980324\",\n  \"19980325\",\n  \"19980326\",\n  \"19980327\",\n  \"19980330\",\n  \"19980331\",\n  \"19980401\",\n  \"19980402\",\n  \"19980403\",\n  \"19980406\",\n  \"19980407\",\n  \"19980408\",\n  \"19980409\",\n  \"19980410\",\n  \"19980413\",\n  \"19980414\",\n  \"19980415\",\n  \"19980416\",\n  \"19980417\",\n  \"19980420\",\n  \"19980421\",\n  \"19980422\",\n  \"19980423\",\n  \"19980424\",\n  \"19980427\",\n  \"19980428\",\n  \"19980429\",\n  \"19980430\",\n  \"19980504\",\n  \"19980505\",\n  \"19980506\",\n  \"19980507\",\n  \"19980508\",\n  \"19980511\",\n  \"19980512\",\n  \"19980513\",\n  \"19980514\",\n  \"19980515\",\n  \"19980518\",\n  \"19980519\",\n  \"19980520\",\n  \"19980521\",\n  \"19980522\",\n  \"19980525\",\n  \"19980526\",\n  \"19980527\",\n  \"19980528\",\n  \"19980529\",\n  \"19980601\",\n  \"19980602\",\n  \"19980603\",\n  \"19980604\",\n  \"19980605\",\n  \"19980608\",\n  \"19980609\",\n  \"19980610\",\n  \"19980611\",\n  \"19980612\",\n  \"19980615\",\n  \"19980616\",\n  \"19980617\",\n  \"19980618\",\n  \"19980619\",\n  \"19980622\",\n  \"19980623\",\n  \"19980624\",\n  \"19980625\",\n  \"19980626\",\n  \"19980629\",\n  \"19980630\",\n  \"19980701\",\n  \"19980702\",\n  \"19980703\",\n  \"19980706\",\n  \"19980707\",\n  \"19980708\",\n  \"19980709\",\n  \"19980710\",\n  \"19980713\",\n  \"19980714\",\n  \"19980715\",\n  \"19980716\",\n  \"19980717\",\n  \"19980720\",\n  \"19980721\",\n  \"19980722\",\n  \"19980723\",\n  \"19980724\",\n  \"19980727\",\n  \"19980728\",\n  \"19980729\",\n  \"19980730\",\n  \"19980731\",\n  \"19980803\",\n  \"19980804\",\n  \"19980805\",\n  \"19980806\",\n  \"19980807\",\n  \"19980810\",\n  \"19980811\",\n  \"19980812\",\n  \"19980813\",\n  \"19980814\",\n  \"19980817\",\n  \"19980818\",\n  \"19980819\",\n  \"19980820\",\n  \"19980821\",\n  \"19980824\",\n  \"19980825\",\n  \"19980826\",\n  \"19980827\",\n  \"19980828\",\n  \"19980831\",\n  \"19980901\",\n  \"19980902\",\n  \"19980903\",\n  \"19980904\",\n  \"19980907\",\n  \"19980908\",\n  \"19980909\",\n  \"19980910\",\n  \"19980911\",\n  \"19980914\",\n  \"19980915\",\n  \"19980916\",\n  \"19980917\",\n  \"19980918\",\n  \"19980921\",\n  \"19980922\",\n  \"19980923\",\n  \"19980924\",\n  \"19980925\",\n  \"19980928\",\n  \"19980929\",\n  \"19980930\",\n  \"19981005\",\n  \"19981006\",\n  \"19981007\",\n  \"19981008\",\n  \"19981009\",\n  \"19981012\",\n  \"19981013\",\n  \"19981014\",\n  \"19981015\",\n  \"19981016\",\n  \"19981019\",\n  \"19981020\",\n  \"19981021\",\n  \"19981022\",\n  \"19981023\",\n  \"19981026\",\n  \"19981027\",\n  \"19981028\",\n  \"19981029\",\n  \"19981030\",\n  \"19981102\",\n  \"19981103\",\n  \"19981104\",\n  \"19981105\",\n  \"19981106\",\n  \"19981109\",\n  \"19981110\",\n  \"19981111\",\n  \"19981112\",\n  \"19981113\",\n  \"19981116\",\n  \"19981117\",\n  \"19981118\",\n  \"19981119\",\n  \"19981120\",\n  \"19981123\",\n  \"19981124\",\n  \"19981125\",\n  \"19981126\",\n  \"19981127\",\n  \"19981130\",\n  \"19981201\",\n  \"19981202\",\n  \"19981203\",\n  \"19981204\",\n  \"19981207\",\n  \"19981208\",\n  \"19981209\",\n  \"19981210\",\n  \"19981211\",\n  \"19981214\",\n  \"19981215\",\n  \"19981216\",\n  \"19981217\",\n  \"19981218\",\n  \"19981221\",\n  \"19981222\",\n  \"19981223\",\n  \"19981224\",\n  \"19981225\",\n  \"19981228\",\n  \"19981229\",\n  \"19981230\",\n  \"19981231\",\n  \"19990104\",\n  \"19990105\",\n  \"19990106\",\n  \"19990107\",\n  \"19990108\",\n  \"19990111\",\n  \"19990112\",\n  \"19990113\",\n  \"19990114\",\n  \"19990115\",\n  \"19990118\",\n  \"19990119\",\n  \"19990120\",\n  \"19990121\",\n  \"19990122\",\n  \"19990125\",\n  \"19990126\",\n  \"19990127\",\n  \"19990128\",\n  \"19990129\",\n  \"19990201\",\n  \"19990202\",\n  \"19990203\",\n  \"19990204\",\n  \"19990205\",\n  \"19990208\",\n  \"19990209\",\n  \"19990301\",\n  \"19990302\",\n  \"19990303\",\n  \"19990304\",\n  \"19990305\",\n  \"19990308\",\n  \"19990309\",\n  \"19990310\",\n  \"19990311\",\n  \"19990312\",\n  \"19990315\",\n  \"19990316\",\n  \"19990317\",\n  \"19990318\",\n  \"19990319\",\n  \"19990322\",\n  \"19990323\",\n  \"19990324\",\n  \"19990325\",\n  \"19990326\",\n  \"19990329\",\n  \"19990330\",\n  \"19990331\",\n  \"19990401\",\n  \"19990402\",\n  \"19990405\",\n  \"19990406\",\n  \"19990407\",\n  \"19990408\",\n  \"19990409\",\n  \"19990412\",\n  \"19990413\",\n  \"19990414\",\n  \"19990415\",\n  \"19990416\",\n  \"19990419\",\n  \"19990420\",\n  \"19990421\",\n  \"19990422\",\n  \"19990423\",\n  \"19990426\",\n  \"19990427\",\n  \"19990428\",\n  \"19990429\",\n  \"19990430\",\n  \"19990504\",\n  \"19990505\",\n  \"19990506\",\n  \"19990507\",\n  \"19990510\",\n  \"19990511\",\n  \"19990512\",\n  \"19990513\",\n  \"19990514\",\n  \"19990517\",\n  \"19990518\",\n  \"19990519\",\n  \"19990520\",\n  \"19990521\",\n  \"19990524\",\n  \"19990525\",\n  \"19990526\",\n  \"19990527\",\n  \"19990528\",\n  \"19990531\",\n  \"19990601\",\n  \"19990602\",\n  \"19990603\",\n  \"19990604\",\n  \"19990607\",\n  \"19990608\",\n  \"19990609\",\n  \"19990610\",\n  \"19990611\",\n  \"19990614\",\n  \"19990615\",\n  \"19990616\",\n  \"19990617\",\n  \"19990618\",\n  \"19990621\",\n  \"19990622\",\n  \"19990623\",\n  \"19990624\",\n  \"19990625\",\n  \"19990628\",\n  \"19990629\",\n  \"19990630\",\n  \"19990701\",\n  \"19990702\",\n  \"19990705\",\n  \"19990706\",\n  \"19990707\",\n  \"19990708\",\n  \"19990709\",\n  \"19990712\",\n  \"19990713\",\n  \"19990714\",\n  \"19990715\",\n  \"19990716\",\n  \"19990719\",\n  \"19990720\",\n  \"19990721\",\n  \"19990722\",\n  \"19990723\",\n  \"19990726\",\n  \"19990727\",\n  \"19990728\",\n  \"19990729\",\n  \"19990730\",\n  \"19990802\",\n  \"19990803\",\n  \"19990804\",\n  \"19990805\",\n  \"19990806\",\n  \"19990809\",\n  \"19990810\",\n  \"19990811\",\n  \"19990812\",\n  \"19990813\",\n  \"19990816\",\n  \"19990817\",\n  \"19990818\",\n  \"19990819\",\n  \"19990820\",\n  \"19990823\",\n  \"19990824\",\n  \"19990825\",\n  \"19990826\",\n  \"19990827\",\n  \"19990830\",\n  \"19990831\",\n  \"19990901\",\n  \"19990902\",\n  \"19990903\",\n  \"19990906\",\n  \"19990907\",\n  \"19990908\",\n  \"19990909\",\n  \"19990910\",\n  \"19990913\",\n  \"19990914\",\n  \"19990915\",\n  \"19990916\",\n  \"19990917\",\n  \"19990920\",\n  \"19990921\",\n  \"19990922\",\n  \"19990923\",\n  \"19990924\",\n  \"19990927\",\n  \"19990928\",\n  \"19990929\",\n  \"19990930\",\n  \"19991008\",\n  \"19991011\",\n  \"19991012\",\n  \"19991013\",\n  \"19991014\",\n  \"19991015\",\n  \"19991018\",\n  \"19991019\",\n  \"19991020\",\n  \"19991021\",\n  \"19991022\",\n  \"19991025\",\n  \"19991026\",\n  \"19991027\",\n  \"19991028\",\n  \"19991029\",\n  \"19991101\",\n  \"19991102\",\n  \"19991103\",\n  \"19991104\",\n  \"19991105\",\n  \"19991108\",\n  \"19991109\",\n  \"19991110\",\n  \"19991111\",\n  \"19991112\",\n  \"19991115\",\n  \"19991116\",\n  \"19991117\",\n  \"19991118\",\n  \"19991119\",\n  \"19991122\",\n  \"19991123\",\n  \"19991124\",\n  \"19991125\",\n  \"19991126\",\n  \"19991129\",\n  \"19991130\",\n  \"19991201\",\n  \"19991202\",\n  \"19991203\",\n  \"19991206\",\n  \"19991207\",\n  \"19991208\",\n  \"19991209\",\n  \"19991210\",\n  \"19991213\",\n  \"19991214\",\n  \"19991215\",\n  \"19991216\",\n  \"19991217\",\n  \"19991221\",\n  \"19991222\",\n  \"19991223\",\n  \"19991224\",\n  \"19991227\",\n  \"19991228\",\n  \"19991229\",\n  \"19991230\",\n  \"20000104\",\n  \"20000105\",\n  \"20000106\",\n  \"20000107\",\n  \"20000110\",\n  \"20000111\",\n  \"20000112\",\n  \"20000113\",\n  \"20000114\",\n  \"20000117\",\n  \"20000118\",\n  \"20000119\",\n  \"20000120\",\n  \"20000121\",\n  \"20000124\",\n  \"20000125\",\n  \"20000126\",\n  \"20000127\",\n  \"20000128\",\n  \"20000214\",\n  \"20000215\",\n  \"20000216\",\n  \"20000217\",\n  \"20000218\",\n  \"20000221\",\n  \"20000222\",\n  \"20000223\",\n  \"20000224\",\n  \"20000225\",\n  \"20000228\",\n  \"20000229\",\n  \"20000301\",\n  \"20000302\",\n  \"20000303\",\n  \"20000306\",\n  \"20000307\",\n  \"20000308\",\n  \"20000309\",\n  \"20000310\",\n  \"20000313\",\n  \"20000314\",\n  \"20000315\",\n  \"20000316\",\n  \"20000317\",\n  \"20000320\",\n  \"20000321\",\n  \"20000322\",\n  \"20000323\",\n  \"20000324\",\n  \"20000327\",\n  \"20000328\",\n  \"20000329\",\n  \"20000330\",\n  \"20000331\",\n  \"20000403\",\n  \"20000404\",\n  \"20000405\",\n  \"20000406\",\n  \"20000407\",\n  \"20000410\",\n  \"20000411\",\n  \"20000412\",\n  \"20000413\",\n  \"20000414\",\n  \"20000417\",\n  \"20000418\",\n  \"20000419\",\n  \"20000420\",\n  \"20000421\",\n  \"20000424\",\n  \"20000425\",\n  \"20000426\",\n  \"20000427\",\n  \"20000428\",\n  \"20000508\",\n  \"20000509\",\n  \"20000510\",\n  \"20000511\",\n  \"20000512\",\n  \"20000515\",\n  \"20000516\",\n  \"20000517\",\n  \"20000518\",\n  \"20000519\",\n  \"20000522\",\n  \"20000523\",\n  \"20000524\",\n  \"20000525\",\n  \"20000526\",\n  \"20000529\",\n  \"20000530\",\n  \"20000531\",\n  \"20000601\",\n  \"20000602\",\n  \"20000605\",\n  \"20000606\",\n  \"20000607\",\n  \"20000608\",\n  \"20000609\",\n  \"20000612\",\n  \"20000613\",\n  \"20000614\",\n  \"20000615\",\n  \"20000616\",\n  \"20000619\",\n  \"20000620\",\n  \"20000621\",\n  \"20000622\",\n  \"20000623\",\n  \"20000626\",\n  \"20000627\",\n  \"20000628\",\n  \"20000629\",\n  \"20000630\",\n  \"20000703\",\n  \"20000704\",\n  \"20000705\",\n  \"20000706\",\n  \"20000707\",\n  \"20000710\",\n  \"20000711\",\n  \"20000712\",\n  \"20000713\",\n  \"20000714\",\n  \"20000717\",\n  \"20000718\",\n  \"20000719\",\n  \"20000720\",\n  \"20000721\",\n  \"20000724\",\n  \"20000725\",\n  \"20000726\",\n  \"20000727\",\n  \"20000728\",\n  \"20000731\",\n  \"20000801\",\n  \"20000802\",\n  \"20000803\",\n  \"20000804\",\n  \"20000807\",\n  \"20000808\",\n  \"20000809\",\n  \"20000810\",\n  \"20000811\",\n  \"20000814\",\n  \"20000815\",\n  \"20000816\",\n  \"20000817\",\n  \"20000818\",\n  \"20000821\",\n  \"20000822\",\n  \"20000823\",\n  \"20000824\",\n  \"20000825\",\n  \"20000828\",\n  \"20000829\",\n  \"20000830\",\n  \"20000831\",\n  \"20000901\",\n  \"20000904\",\n  \"20000905\",\n  \"20000906\",\n  \"20000907\",\n  \"20000908\",\n  \"20000911\",\n  \"20000912\",\n  \"20000913\",\n  \"20000914\",\n  \"20000915\",\n  \"20000918\",\n  \"20000919\",\n  \"20000920\",\n  \"20000921\",\n  \"20000922\",\n  \"20000925\",\n  \"20000926\",\n  \"20000927\",\n  \"20000928\",\n  \"20000929\",\n  \"20001009\",\n  \"20001010\",\n  \"20001011\",\n  \"20001012\",\n  \"20001013\",\n  \"20001016\",\n  \"20001017\",\n  \"20001018\",\n  \"20001019\",\n  \"20001020\",\n  \"20001023\",\n  \"20001024\",\n  \"20001025\",\n  \"20001026\",\n  \"20001027\",\n  \"20001030\",\n  \"20001031\",\n  \"20001101\",\n  \"20001102\",\n  \"20001103\",\n  \"20001106\",\n  \"20001107\",\n  \"20001108\",\n  \"20001109\",\n  \"20001110\",\n  \"20001113\",\n  \"20001114\",\n  \"20001115\",\n  \"20001116\",\n  \"20001117\",\n  \"20001120\",\n  \"20001121\",\n  \"20001122\",\n  \"20001123\",\n  \"20001124\",\n  \"20001127\",\n  \"20001128\",\n  \"20001129\",\n  \"20001130\",\n  \"20001201\",\n  \"20001204\",\n  \"20001205\",\n  \"20001206\",\n  \"20001207\",\n  \"20001208\",\n  \"20001211\",\n  \"20001212\",\n  \"20001213\",\n  \"20001214\",\n  \"20001215\",\n  \"20001218\",\n  \"20001219\",\n  \"20001220\",\n  \"20001221\",\n  \"20001222\",\n  \"20001225\",\n  \"20001226\",\n  \"20001227\",\n  \"20001228\",\n  \"20001229\",\n  \"20010102\",\n  \"20010103\",\n  \"20010104\",\n  \"20010105\",\n  \"20010108\",\n  \"20010109\",\n  \"20010110\",\n  \"20010111\",\n  \"20010112\",\n  \"20010115\",\n  \"20010116\",\n  \"20010117\",\n  \"20010118\",\n  \"20010119\",\n  \"20010205\",\n  \"20010206\",\n  \"20010207\",\n  \"20010208\",\n  \"20010209\",\n  \"20010212\",\n  \"20010213\",\n  \"20010214\",\n  \"20010215\",\n  \"20010216\",\n  \"20010219\",\n  \"20010220\",\n  \"20010221\",\n  \"20010222\",\n  \"20010223\",\n  \"20010226\",\n  \"20010227\",\n  \"20010228\",\n  \"20010301\",\n  \"20010302\",\n  \"20010305\",\n  \"20010306\",\n  \"20010307\",\n  \"20010308\",\n  \"20010309\",\n  \"20010312\",\n  \"20010313\",\n  \"20010314\",\n  \"20010315\",\n  \"20010316\",\n  \"20010319\",\n  \"20010320\",\n  \"20010321\",\n  \"20010322\",\n  \"20010323\",\n  \"20010326\",\n  \"20010327\",\n  \"20010328\",\n  \"20010329\",\n  \"20010330\",\n  \"20010402\",\n  \"20010403\",\n  \"20010404\",\n  \"20010405\",\n  \"20010406\",\n  \"20010409\",\n  \"20010410\",\n  \"20010411\",\n  \"20010412\",\n  \"20010413\",\n  \"20010416\",\n  \"20010417\",\n  \"20010418\",\n  \"20010419\",\n  \"20010420\",\n  \"20010423\",\n  \"20010424\",\n  \"20010425\",\n  \"20010426\",\n  \"20010427\",\n  \"20010430\",\n  \"20010508\",\n  \"20010509\",\n  \"20010510\",\n  \"20010511\",\n  \"20010514\",\n  \"20010515\",\n  \"20010516\",\n  \"20010517\",\n  \"20010518\",\n  \"20010521\",\n  \"20010522\",\n  \"20010523\",\n  \"20010524\",\n  \"20010525\",\n  \"20010528\",\n  \"20010529\",\n  \"20010530\",\n  \"20010531\",\n  \"20010601\",\n  \"20010604\",\n  \"20010605\",\n  \"20010606\",\n  \"20010607\",\n  \"20010608\",\n  \"20010611\",\n  \"20010612\",\n  \"20010613\",\n  \"20010614\",\n  \"20010615\",\n  \"20010618\",\n  \"20010619\",\n  \"20010620\",\n  \"20010621\",\n  \"20010622\",\n  \"20010625\",\n  \"20010626\",\n  \"20010627\",\n  \"20010628\",\n  \"20010629\",\n  \"20010702\",\n  \"20010703\",\n  \"20010704\",\n  \"20010705\",\n  \"20010706\",\n  \"20010709\",\n  \"20010710\",\n  \"20010711\",\n  \"20010712\",\n  \"20010713\",\n  \"20010716\",\n  \"20010717\",\n  \"20010718\",\n  \"20010719\",\n  \"20010720\",\n  \"20010723\",\n  \"20010724\",\n  \"20010725\",\n  \"20010726\",\n  \"20010727\",\n  \"20010730\",\n  \"20010731\",\n  \"20010801\",\n  \"20010802\",\n  \"20010803\",\n  \"20010806\",\n  \"20010807\",\n  \"20010808\",\n  \"20010809\",\n  \"20010810\",\n  \"20010813\",\n  \"20010814\",\n  \"20010815\",\n  \"20010816\",\n  \"20010817\",\n  \"20010820\",\n  \"20010821\",\n  \"20010822\",\n  \"20010823\",\n  \"20010824\",\n  \"20010827\",\n  \"20010828\",\n  \"20010829\",\n  \"20010830\",\n  \"20010831\",\n  \"20010903\",\n  \"20010904\",\n  \"20010905\",\n  \"20010906\",\n  \"20010907\",\n  \"20010910\",\n  \"20010911\",\n  \"20010912\",\n  \"20010913\",\n  \"20010914\",\n  \"20010917\",\n  \"20010918\",\n  \"20010919\",\n  \"20010920\",\n  \"20010921\",\n  \"20010924\",\n  \"20010925\",\n  \"20010926\",\n  \"20010927\",\n  \"20010928\",\n  \"20011008\",\n  \"20011009\",\n  \"20011010\",\n  \"20011011\",\n  \"20011012\",\n  \"20011015\",\n  \"20011016\",\n  \"20011017\",\n  \"20011018\",\n  \"20011019\",\n  \"20011022\",\n  \"20011023\",\n  \"20011024\",\n  \"20011025\",\n  \"20011026\",\n  \"20011029\",\n  \"20011030\",\n  \"20011031\",\n  \"20011101\",\n  \"20011102\",\n  \"20011105\",\n  \"20011106\",\n  \"20011107\",\n  \"20011108\",\n  \"20011109\",\n  \"20011112\",\n  \"20011113\",\n  \"20011114\",\n  \"20011115\",\n  \"20011116\",\n  \"20011119\",\n  \"20011120\",\n  \"20011121\",\n  \"20011122\",\n  \"20011123\",\n  \"20011126\",\n  \"20011127\",\n  \"20011128\",\n  \"20011129\",\n  \"20011130\",\n  \"20011203\",\n  \"20011204\",\n  \"20011205\",\n  \"20011206\",\n  \"20011207\",\n  \"20011210\",\n  \"20011211\",\n  \"20011212\",\n  \"20011213\",\n  \"20011214\",\n  \"20011217\",\n  \"20011218\",\n  \"20011219\",\n  \"20011220\",\n  \"20011221\",\n  \"20011224\",\n  \"20011225\",\n  \"20011226\",\n  \"20011227\",\n  \"20011228\",\n  \"20011231\",\n  \"20020104\",\n  \"20020107\",\n  \"20020108\",\n  \"20020109\",\n  \"20020110\",\n  \"20020111\",\n  \"20020114\",\n  \"20020115\",\n  \"20020116\",\n  \"20020117\",\n  \"20020118\",\n  \"20020121\",\n  \"20020122\",\n  \"20020123\",\n  \"20020124\",\n  \"20020125\",\n  \"20020128\",\n  \"20020129\",\n  \"20020130\",\n  \"20020131\",\n  \"20020201\",\n  \"20020204\",\n  \"20020205\",\n  \"20020206\",\n  \"20020207\",\n  \"20020208\",\n  \"20020225\",\n  \"20020226\",\n  \"20020227\",\n  \"20020228\",\n  \"20020301\",\n  \"20020304\",\n  \"20020305\",\n  \"20020306\",\n  \"20020307\",\n  \"20020308\",\n  \"20020311\",\n  \"20020312\",\n  \"20020313\",\n  \"20020314\",\n  \"20020315\",\n  \"20020318\",\n  \"20020319\",\n  \"20020320\",\n  \"20020321\",\n  \"20020322\",\n  \"20020325\",\n  \"20020326\",\n  \"20020327\",\n  \"20020328\",\n  \"20020329\",\n  \"20020401\",\n  \"20020402\",\n  \"20020403\",\n  \"20020404\",\n  \"20020405\",\n  \"20020408\",\n  \"20020409\",\n  \"20020410\",\n  \"20020411\",\n  \"20020412\",\n  \"20020415\",\n  \"20020416\",\n  \"20020417\",\n  \"20020418\",\n  \"20020419\",\n  \"20020422\",\n  \"20020423\",\n  \"20020424\",\n  \"20020425\",\n  \"20020426\",\n  \"20020429\",\n  \"20020430\",\n  \"20020508\",\n  \"20020509\",\n  \"20020510\",\n  \"20020513\",\n  \"20020514\",\n  \"20020515\",\n  \"20020516\",\n  \"20020517\",\n  \"20020520\",\n  \"20020521\",\n  \"20020522\",\n  \"20020523\",\n  \"20020524\",\n  \"20020527\",\n  \"20020528\",\n  \"20020529\",\n  \"20020530\",\n  \"20020531\",\n  \"20020603\",\n  \"20020604\",\n  \"20020605\",\n  \"20020606\",\n  \"20020607\",\n  \"20020610\",\n  \"20020611\",\n  \"20020612\",\n  \"20020613\",\n  \"20020614\",\n  \"20020617\",\n  \"20020618\",\n  \"20020619\",\n  \"20020620\",\n  \"20020621\",\n  \"20020624\",\n  \"20020625\",\n  \"20020626\",\n  \"20020627\",\n  \"20020628\",\n  \"20020701\",\n  \"20020702\",\n  \"20020703\",\n  \"20020704\",\n  \"20020705\",\n  \"20020708\",\n  \"20020709\",\n  \"20020710\",\n  \"20020711\",\n  \"20020712\",\n  \"20020715\",\n  \"20020716\",\n  \"20020717\",\n  \"20020718\",\n  \"20020719\",\n  \"20020722\",\n  \"20020723\",\n  \"20020724\",\n  \"20020725\",\n  \"20020726\",\n  \"20020729\",\n  \"20020730\",\n  \"20020731\",\n  \"20020801\",\n  \"20020802\",\n  \"20020805\",\n  \"20020806\",\n  \"20020807\",\n  \"20020808\",\n  \"20020809\",\n  \"20020812\",\n  \"20020813\",\n  \"20020814\",\n  \"20020815\",\n  \"20020816\",\n  \"20020819\",\n  \"20020820\",\n  \"20020821\",\n  \"20020822\",\n  \"20020823\",\n  \"20020826\",\n  \"20020827\",\n  \"20020828\",\n  \"20020829\",\n  \"20020830\",\n  \"20020902\",\n  \"20020903\",\n  \"20020904\",\n  \"20020905\",\n  \"20020906\",\n  \"20020909\",\n  \"20020910\",\n  \"20020911\",\n  \"20020912\",\n  \"20020913\",\n  \"20020916\",\n  \"20020917\",\n  \"20020918\",\n  \"20020919\",\n  \"20020920\",\n  \"20020923\",\n  \"20020924\",\n  \"20020925\",\n  \"20020926\",\n  \"20020927\",\n  \"20021008\",\n  \"20021009\",\n  \"20021010\",\n  \"20021011\",\n  \"20021014\",\n  \"20021015\",\n  \"20021016\",\n  \"20021017\",\n  \"20021018\",\n  \"20021021\",\n  \"20021022\",\n  \"20021023\",\n  \"20021024\",\n  \"20021025\",\n  \"20021028\",\n  \"20021029\",\n  \"20021030\",\n  \"20021031\",\n  \"20021101\",\n  \"20021104\",\n  \"20021105\",\n  \"20021106\",\n  \"20021107\",\n  \"20021108\",\n  \"20021111\",\n  \"20021112\",\n  \"20021113\",\n  \"20021114\",\n  \"20021115\",\n  \"20021118\",\n  \"20021119\",\n  \"20021120\",\n  \"20021121\",\n  \"20021122\",\n  \"20021125\",\n  \"20021126\",\n  \"20021127\",\n  \"20021128\",\n  \"20021129\",\n  \"20021202\",\n  \"20021203\",\n  \"20021204\",\n  \"20021205\",\n  \"20021206\",\n  \"20021209\",\n  \"20021210\",\n  \"20021211\",\n  \"20021212\",\n  \"20021213\",\n  \"20021216\",\n  \"20021217\",\n  \"20021218\",\n  \"20021219\",\n  \"20021220\",\n  \"20021223\",\n  \"20021224\",\n  \"20021225\",\n  \"20021226\",\n  \"20021227\",\n  \"20021230\",\n  \"20021231\",\n  \"20030102\",\n  \"20030103\",\n  \"20030106\",\n  \"20030107\",\n  \"20030108\",\n  \"20030109\",\n  \"20030110\",\n  \"20030113\",\n  \"20030114\",\n  \"20030115\",\n  \"20030116\",\n  \"20030117\",\n  \"20030120\",\n  \"20030121\",\n  \"20030122\",\n  \"20030123\",\n  \"20030124\",\n  \"20030127\",\n  \"20030128\",\n  \"20030129\",\n  \"20030210\",\n  \"20030211\",\n  \"20030212\",\n  \"20030213\",\n  \"20030214\",\n  \"20030217\",\n  \"20030218\",\n  \"20030219\",\n  \"20030220\",\n  \"20030221\",\n  \"20030224\",\n  \"20030225\",\n  \"20030226\",\n  \"20030227\",\n  \"20030228\",\n  \"20030303\",\n  \"20030304\",\n  \"20030305\",\n  \"20030306\",\n  \"20030307\",\n  \"20030310\",\n  \"20030311\",\n  \"20030312\",\n  \"20030313\",\n  \"20030314\",\n  \"20030317\",\n  \"20030318\",\n  \"20030319\",\n  \"20030320\",\n  \"20030321\",\n  \"20030324\",\n  \"20030325\",\n  \"20030326\",\n  \"20030327\",\n  \"20030328\",\n  \"20030331\",\n  \"20030401\",\n  \"20030402\",\n  \"20030403\",\n  \"20030404\",\n  \"20030407\",\n  \"20030408\",\n  \"20030409\",\n  \"20030410\",\n  \"20030411\",\n  \"20030414\",\n  \"20030415\",\n  \"20030416\",\n  \"20030417\",\n  \"20030418\",\n  \"20030421\",\n  \"20030422\",\n  \"20030423\",\n  \"20030424\",\n  \"20030425\",\n  \"20030428\",\n  \"20030429\",\n  \"20030430\",\n  \"20030512\",\n  \"20030513\",\n  \"20030514\",\n  \"20030515\",\n  \"20030516\",\n  \"20030519\",\n  \"20030520\",\n  \"20030521\",\n  \"20030522\",\n  \"20030523\",\n  \"20030526\",\n  \"20030527\",\n  \"20030528\",\n  \"20030529\",\n  \"20030530\",\n  \"20030602\",\n  \"20030603\",\n  \"20030604\",\n  \"20030605\",\n  \"20030606\",\n  \"20030609\",\n  \"20030610\",\n  \"20030611\",\n  \"20030612\",\n  \"20030613\",\n  \"20030616\",\n  \"20030617\",\n  \"20030618\",\n  \"20030619\",\n  \"20030620\",\n  \"20030623\",\n  \"20030624\",\n  \"20030625\",\n  \"20030626\",\n  \"20030627\",\n  \"20030630\",\n  \"20030701\",\n  \"20030702\",\n  \"20030703\",\n  \"20030704\",\n  \"20030707\",\n  \"20030708\",\n  \"20030709\",\n  \"20030710\",\n  \"20030711\",\n  \"20030714\",\n  \"20030715\",\n  \"20030716\",\n  \"20030717\",\n  \"20030718\",\n  \"20030721\",\n  \"20030722\",\n  \"20030723\",\n  \"20030724\",\n  \"20030725\",\n  \"20030728\",\n  \"20030729\",\n  \"20030730\",\n  \"20030731\",\n  \"20030801\",\n  \"20030804\",\n  \"20030805\",\n  \"20030806\",\n  \"20030807\",\n  \"20030808\",\n  \"20030811\",\n  \"20030812\",\n  \"20030813\",\n  \"20030814\",\n  \"20030815\",\n  \"20030818\",\n  \"20030819\",\n  \"20030820\",\n  \"20030821\",\n  \"20030822\",\n  \"20030825\",\n  \"20030826\",\n  \"20030827\",\n  \"20030828\",\n  \"20030829\",\n  \"20030901\",\n  \"20030902\",\n  \"20030903\",\n  \"20030904\",\n  \"20030905\",\n  \"20030908\",\n  \"20030909\",\n  \"20030910\",\n  \"20030911\",\n  \"20030912\",\n  \"20030915\",\n  \"20030916\",\n  \"20030917\",\n  \"20030918\",\n  \"20030919\",\n  \"20030922\",\n  \"20030923\",\n  \"20030924\",\n  \"20030925\",\n  \"20030926\",\n  \"20030929\",\n  \"20030930\",\n  \"20031008\",\n  \"20031009\",\n  \"20031010\",\n  \"20031013\",\n  \"20031014\",\n  \"20031015\",\n  \"20031016\",\n  \"20031017\",\n  \"20031020\",\n  \"20031021\",\n  \"20031022\",\n  \"20031023\",\n  \"20031024\",\n  \"20031027\",\n  \"20031028\",\n  \"20031029\",\n  \"20031030\",\n  \"20031031\",\n  \"20031103\",\n  \"20031104\",\n  \"20031105\",\n  \"20031106\",\n  \"20031107\",\n  \"20031110\",\n  \"20031111\",\n  \"20031112\",\n  \"20031113\",\n  \"20031114\",\n  \"20031117\",\n  \"20031118\",\n  \"20031119\",\n  \"20031120\",\n  \"20031121\",\n  \"20031124\",\n  \"20031125\",\n  \"20031126\",\n  \"20031127\",\n  \"20031128\",\n  \"20031201\",\n  \"20031202\",\n  \"20031203\",\n  \"20031204\",\n  \"20031205\",\n  \"20031208\",\n  \"20031209\",\n  \"20031210\",\n  \"20031211\",\n  \"20031212\",\n  \"20031215\",\n  \"20031216\",\n  \"20031217\",\n  \"20031218\",\n  \"20031219\",\n  \"20031222\",\n  \"20031223\",\n  \"20031224\",\n  \"20031225\",\n  \"20031226\",\n  \"20031229\",\n  \"20031230\",\n  \"20031231\",\n  \"20040102\",\n  \"20040105\",\n  \"20040106\",\n  \"20040107\",\n  \"20040108\",\n  \"20040109\",\n  \"20040112\",\n  \"20040113\",\n  \"20040114\",\n  \"20040115\",\n  \"20040116\",\n  \"20040129\",\n  \"20040130\",\n  \"20040202\",\n  \"20040203\",\n  \"20040204\",\n  \"20040205\",\n  \"20040206\",\n  \"20040209\",\n  \"20040210\",\n  \"20040211\",\n  \"20040212\",\n  \"20040213\",\n  \"20040216\",\n  \"20040217\",\n  \"20040218\",\n  \"20040219\",\n  \"20040220\",\n  \"20040223\",\n  \"20040224\",\n  \"20040225\",\n  \"20040226\",\n  \"20040227\",\n  \"20040301\",\n  \"20040302\",\n  \"20040303\",\n  \"20040304\",\n  \"20040305\",\n  \"20040308\",\n  \"20040309\",\n  \"20040310\",\n  \"20040311\",\n  \"20040312\",\n  \"20040315\",\n  \"20040316\",\n  \"20040317\",\n  \"20040318\",\n  \"20040319\",\n  \"20040322\",\n  \"20040323\",\n  \"20040324\",\n  \"20040325\",\n  \"20040326\",\n  \"20040329\",\n  \"20040330\",\n  \"20040331\",\n  \"20040401\",\n  \"20040402\",\n  \"20040405\",\n  \"20040406\",\n  \"20040407\",\n  \"20040408\",\n  \"20040409\",\n  \"20040412\",\n  \"20040413\",\n  \"20040414\",\n  \"20040415\",\n  \"20040416\",\n  \"20040419\",\n  \"20040420\",\n  \"20040421\",\n  \"20040422\",\n  \"20040423\",\n  \"20040426\",\n  \"20040427\",\n  \"20040428\",\n  \"20040429\",\n  \"20040430\",\n  \"20040510\",\n  \"20040511\",\n  \"20040512\",\n  \"20040513\",\n  \"20040514\",\n  \"20040517\",\n  \"20040518\",\n  \"20040519\",\n  \"20040520\",\n  \"20040521\",\n  \"20040524\",\n  \"20040525\",\n  \"20040526\",\n  \"20040527\",\n  \"20040528\",\n  \"20040531\",\n  \"20040601\",\n  \"20040602\",\n  \"20040603\",\n  \"20040604\",\n  \"20040607\",\n  \"20040608\",\n  \"20040609\",\n  \"20040610\",\n  \"20040611\",\n  \"20040614\",\n  \"20040615\",\n  \"20040616\",\n  \"20040617\",\n  \"20040618\",\n  \"20040621\",\n  \"20040622\",\n  \"20040623\",\n  \"20040624\",\n  \"20040625\",\n  \"20040628\",\n  \"20040629\",\n  \"20040630\",\n  \"20040701\",\n  \"20040702\",\n  \"20040705\",\n  \"20040706\",\n  \"20040707\",\n  \"20040708\",\n  \"20040709\",\n  \"20040712\",\n  \"20040713\",\n  \"20040714\",\n  \"20040715\",\n  \"20040716\",\n  \"20040719\",\n  \"20040720\",\n  \"20040721\",\n  \"20040722\",\n  \"20040723\",\n  \"20040726\",\n  \"20040727\",\n  \"20040728\",\n  \"20040729\",\n  \"20040730\",\n  \"20040802\",\n  \"20040803\",\n  \"20040804\",\n  \"20040805\",\n  \"20040806\",\n  \"20040809\",\n  \"20040810\",\n  \"20040811\",\n  \"20040812\",\n  \"20040813\",\n  \"20040816\",\n  \"20040817\",\n  \"20040818\",\n  \"20040819\",\n  \"20040820\",\n  \"20040823\",\n  \"20040824\",\n  \"20040825\",\n  \"20040826\",\n  \"20040827\",\n  \"20040830\",\n  \"20040831\",\n  \"20040901\",\n  \"20040902\",\n  \"20040903\",\n  \"20040906\",\n  \"20040907\",\n  \"20040908\",\n  \"20040909\",\n  \"20040910\",\n  \"20040913\",\n  \"20040914\",\n  \"20040915\",\n  \"20040916\",\n  \"20040917\",\n  \"20040920\",\n  \"20040921\",\n  \"20040922\",\n  \"20040923\",\n  \"20040924\",\n  \"20040927\",\n  \"20040928\",\n  \"20040929\",\n  \"20040930\",\n  \"20041008\",\n  \"20041011\",\n  \"20041012\",\n  \"20041013\",\n  \"20041014\",\n  \"20041015\",\n  \"20041018\",\n  \"20041019\",\n  \"20041020\",\n  \"20041021\",\n  \"20041022\",\n  \"20041025\",\n  \"20041026\",\n  \"20041027\",\n  \"20041028\",\n  \"20041029\",\n  \"20041101\",\n  \"20041102\",\n  \"20041103\",\n  \"20041104\",\n  \"20041105\",\n  \"20041108\",\n  \"20041109\",\n  \"20041110\",\n  \"20041111\",\n  \"20041112\",\n  \"20041115\",\n  \"20041116\",\n  \"20041117\",\n  \"20041118\",\n  \"20041119\",\n  \"20041122\",\n  \"20041123\",\n  \"20041124\",\n  \"20041125\",\n  \"20041126\",\n  \"20041129\",\n  \"20041130\",\n  \"20041201\",\n  \"20041202\",\n  \"20041203\",\n  \"20041206\",\n  \"20041207\",\n  \"20041208\",\n  \"20041209\",\n  \"20041210\",\n  \"20041213\",\n  \"20041214\",\n  \"20041215\",\n  \"20041216\",\n  \"20041217\",\n  \"20041220\",\n  \"20041221\",\n  \"20041222\",\n  \"20041223\",\n  \"20041224\",\n  \"20041227\",\n  \"20041228\",\n  \"20041229\",\n  \"20041230\",\n  \"20041231\",\n  \"20050104\",\n  \"20050105\",\n  \"20050106\",\n  \"20050107\",\n  \"20050110\",\n  \"20050111\",\n  \"20050112\",\n  \"20050113\",\n  \"20050114\",\n  \"20050117\",\n  \"20050118\",\n  \"20050119\",\n  \"20050120\",\n  \"20050121\",\n  \"20050124\",\n  \"20050125\",\n  \"20050126\",\n  \"20050127\",\n  \"20050128\",\n  \"20050131\",\n  \"20050201\",\n  \"20050202\",\n  \"20050203\",\n  \"20050204\",\n  \"20050216\",\n  \"20050217\",\n  \"20050218\",\n  \"20050221\",\n  \"20050222\",\n  \"20050223\",\n  \"20050224\",\n  \"20050225\",\n  \"20050228\",\n  \"20050301\",\n  \"20050302\",\n  \"20050303\",\n  \"20050304\",\n  \"20050307\",\n  \"20050308\",\n  \"20050309\",\n  \"20050310\",\n  \"20050311\",\n  \"20050314\",\n  \"20050315\",\n  \"20050316\",\n  \"20050317\",\n  \"20050318\",\n  \"20050321\",\n  \"20050322\",\n  \"20050323\",\n  \"20050324\",\n  \"20050325\",\n  \"20050328\",\n  \"20050329\",\n  \"20050330\",\n  \"20050331\",\n  \"20050401\",\n  \"20050404\",\n  \"20050405\",\n  \"20050406\",\n  \"20050407\",\n  \"20050408\",\n  \"20050411\",\n  \"20050412\",\n  \"20050413\",\n  \"20050414\",\n  \"20050415\",\n  \"20050418\",\n  \"20050419\",\n  \"20050420\",\n  \"20050421\",\n  \"20050422\",\n  \"20050425\",\n  \"20050426\",\n  \"20050427\",\n  \"20050428\",\n  \"20050429\",\n  \"20050509\",\n  \"20050510\",\n  \"20050511\",\n  \"20050512\",\n  \"20050513\",\n  \"20050516\",\n  \"20050517\",\n  \"20050518\",\n  \"20050519\",\n  \"20050520\",\n  \"20050523\",\n  \"20050524\",\n  \"20050525\",\n  \"20050526\",\n  \"20050527\",\n  \"20050530\",\n  \"20050531\",\n  \"20050601\",\n  \"20050602\",\n  \"20050603\",\n  \"20050606\",\n  \"20050607\",\n  \"20050608\",\n  \"20050609\",\n  \"20050610\",\n  \"20050613\",\n  \"20050614\",\n  \"20050615\",\n  \"20050616\",\n  \"20050617\",\n  \"20050620\",\n  \"20050621\",\n  \"20050622\",\n  \"20050623\",\n  \"20050624\",\n  \"20050627\",\n  \"20050628\",\n  \"20050629\",\n  \"20050630\",\n  \"20050701\",\n  \"20050704\",\n  \"20050705\",\n  \"20050706\",\n  \"20050707\",\n  \"20050708\",\n  \"20050711\",\n  \"20050712\",\n  \"20050713\",\n  \"20050714\",\n  \"20050715\",\n  \"20050718\",\n  \"20050719\",\n  \"20050720\",\n  \"20050721\",\n  \"20050722\",\n  \"20050725\",\n  \"20050726\",\n  \"20050727\",\n  \"20050728\",\n  \"20050729\",\n  \"20050801\",\n  \"20050802\",\n  \"20050803\",\n  \"20050804\",\n  \"20050805\",\n  \"20050808\",\n  \"20050809\",\n  \"20050810\",\n  \"20050811\",\n  \"20050812\",\n  \"20050815\",\n  \"20050816\",\n  \"20050817\",\n  \"20050818\",\n  \"20050819\",\n  \"20050822\",\n  \"20050823\",\n  \"20050824\",\n  \"20050825\",\n  \"20050826\",\n  \"20050829\",\n  \"20050830\",\n  \"20050831\",\n  \"20050901\",\n  \"20050902\",\n  \"20050905\",\n  \"20050906\",\n  \"20050907\",\n  \"20050908\",\n  \"20050909\",\n  \"20050912\",\n  \"20050913\",\n  \"20050914\",\n  \"20050915\",\n  \"20050916\",\n  \"20050919\",\n  \"20050920\",\n  \"20050921\",\n  \"20050922\",\n  \"20050923\",\n  \"20050926\",\n  \"20050927\",\n  \"20050928\",\n  \"20050929\",\n  \"20050930\",\n  \"20051010\",\n  \"20051011\",\n  \"20051012\",\n  \"20051013\",\n  \"20051014\",\n  \"20051017\",\n  \"20051018\",\n  \"20051019\",\n  \"20051020\",\n  \"20051021\",\n  \"20051024\",\n  \"20051025\",\n  \"20051026\",\n  \"20051027\",\n  \"20051028\",\n  \"20051031\",\n  \"20051101\",\n  \"20051102\",\n  \"20051103\",\n  \"20051104\",\n  \"20051107\",\n  \"20051108\",\n  \"20051109\",\n  \"20051110\",\n  \"20051111\",\n  \"20051114\",\n  \"20051115\",\n  \"20051116\",\n  \"20051117\",\n  \"20051118\",\n  \"20051121\",\n  \"20051122\",\n  \"20051123\",\n  \"20051124\",\n  \"20051125\",\n  \"20051128\",\n  \"20051129\",\n  \"20051130\",\n  \"20051201\",\n  \"20051202\",\n  \"20051205\",\n  \"20051206\",\n  \"20051207\",\n  \"20051208\",\n  \"20051209\",\n  \"20051212\",\n  \"20051213\",\n  \"20051214\",\n  \"20051215\",\n  \"20051216\",\n  \"20051219\",\n  \"20051220\",\n  \"20051221\",\n  \"20051222\",\n  \"20051223\",\n  \"20051226\",\n  \"20051227\",\n  \"20051228\",\n  \"20051229\",\n  \"20051230\",\n  \"20060104\",\n  \"20060105\",\n  \"20060106\",\n  \"20060109\",\n  \"20060110\",\n  \"20060111\",\n  \"20060112\",\n  \"20060113\",\n  \"20060116\",\n  \"20060117\",\n  \"20060118\",\n  \"20060119\",\n  \"20060120\",\n  \"20060123\",\n  \"20060124\",\n  \"20060125\",\n  \"20060206\",\n  \"20060207\",\n  \"20060208\",\n  \"20060209\",\n  \"20060210\",\n  \"20060213\",\n  \"20060214\",\n  \"20060215\",\n  \"20060216\",\n  \"20060217\",\n  \"20060220\",\n  \"20060221\",\n  \"20060222\",\n  \"20060223\",\n  \"20060224\",\n  \"20060227\",\n  \"20060228\",\n  \"20060301\",\n  \"20060302\",\n  \"20060303\",\n  \"20060306\",\n  \"20060307\",\n  \"20060308\",\n  \"20060309\",\n  \"20060310\",\n  \"20060313\",\n  \"20060314\",\n  \"20060315\",\n  \"20060316\",\n  \"20060317\",\n  \"20060320\",\n  \"20060321\",\n  \"20060322\",\n  \"20060323\",\n  \"20060324\",\n  \"20060327\",\n  \"20060328\",\n  \"20060329\",\n  \"20060330\",\n  \"20060331\",\n  \"20060403\",\n  \"20060404\",\n  \"20060405\",\n  \"20060406\",\n  \"20060407\",\n  \"20060410\",\n  \"20060411\",\n  \"20060412\",\n  \"20060413\",\n  \"20060414\",\n  \"20060417\",\n  \"20060418\",\n  \"20060419\",\n  \"20060420\",\n  \"20060421\",\n  \"20060424\",\n  \"20060425\",\n  \"20060426\",\n  \"20060427\",\n  \"20060428\",\n  \"20060508\",\n  \"20060509\",\n  \"20060510\",\n  \"20060511\",\n  \"20060512\",\n  \"20060515\",\n  \"20060516\",\n  \"20060517\",\n  \"20060518\",\n  \"20060519\",\n  \"20060522\",\n  \"20060523\",\n  \"20060524\",\n  \"20060525\",\n  \"20060526\",\n  \"20060529\",\n  \"20060530\",\n  \"20060531\",\n  \"20060601\",\n  \"20060602\",\n  \"20060605\",\n  \"20060606\",\n  \"20060607\",\n  \"20060608\",\n  \"20060609\",\n  \"20060612\",\n  \"20060613\",\n  \"20060614\",\n  \"20060615\",\n  \"20060616\",\n  \"20060619\",\n  \"20060620\",\n  \"20060621\",\n  \"20060622\",\n  \"20060623\",\n  \"20060626\",\n  \"20060627\",\n  \"20060628\",\n  \"20060629\",\n  \"20060630\",\n  \"20060703\",\n  \"20060704\",\n  \"20060705\",\n  \"20060706\",\n  \"20060707\",\n  \"20060710\",\n  \"20060711\",\n  \"20060712\",\n  \"20060713\",\n  \"20060714\",\n  \"20060717\",\n  \"20060718\",\n  \"20060719\",\n  \"20060720\",\n  \"20060721\",\n  \"20060724\",\n  \"20060725\",\n  \"20060726\",\n  \"20060727\",\n  \"20060728\",\n  \"20060731\",\n  \"20060801\",\n  \"20060802\",\n  \"20060803\",\n  \"20060804\",\n  \"20060807\",\n  \"20060808\",\n  \"20060809\",\n  \"20060810\",\n  \"20060811\",\n  \"20060814\",\n  \"20060815\",\n  \"20060816\",\n  \"20060817\",\n  \"20060818\",\n  \"20060821\",\n  \"20060822\",\n  \"20060823\",\n  \"20060824\",\n  \"20060825\",\n  \"20060828\",\n  \"20060829\",\n  \"20060830\",\n  \"20060831\",\n  \"20060901\",\n  \"20060904\",\n  \"20060905\",\n  \"20060906\",\n  \"20060907\",\n  \"20060908\",\n  \"20060911\",\n  \"20060912\",\n  \"20060913\",\n  \"20060914\",\n  \"20060915\",\n  \"20060918\",\n  \"20060919\",\n  \"20060920\",\n  \"20060921\",\n  \"20060922\",\n  \"20060925\",\n  \"20060926\",\n  \"20060927\",\n  \"20060928\",\n  \"20060929\",\n  \"20061009\",\n  \"20061010\",\n  \"20061011\",\n  \"20061012\",\n  \"20061013\",\n  \"20061016\",\n  \"20061017\",\n  \"20061018\",\n  \"20061019\",\n  \"20061020\",\n  \"20061023\",\n  \"20061024\",\n  \"20061025\",\n  \"20061026\",\n  \"20061027\",\n  \"20061030\",\n  \"20061031\",\n  \"20061101\",\n  \"20061102\",\n  \"20061103\",\n  \"20061106\",\n  \"20061107\",\n  \"20061108\",\n  \"20061109\",\n  \"20061110\",\n  \"20061113\",\n  \"20061114\",\n  \"20061115\",\n  \"20061116\",\n  \"20061117\",\n  \"20061120\",\n  \"20061121\",\n  \"20061122\",\n  \"20061123\",\n  \"20061124\",\n  \"20061127\",\n  \"20061128\",\n  \"20061129\",\n  \"20061130\",\n  \"20061201\",\n  \"20061204\",\n  \"20061205\",\n  \"20061206\",\n  \"20061207\",\n  \"20061208\",\n  \"20061211\",\n  \"20061212\",\n  \"20061213\",\n  \"20061214\",\n  \"20061215\",\n  \"20061218\",\n  \"20061219\",\n  \"20061220\",\n  \"20061221\",\n  \"20061222\",\n  \"20061225\",\n  \"20061226\",\n  \"20061227\",\n  \"20061228\",\n  \"20061229\",\n  \"20070104\",\n  \"20070105\",\n  \"20070108\",\n  \"20070109\",\n  \"20070110\",\n  \"20070111\",\n  \"20070112\",\n  \"20070115\",\n  \"20070116\",\n  \"20070117\",\n  \"20070118\",\n  \"20070119\",\n  \"20070122\",\n  \"20070123\",\n  \"20070124\",\n  \"20070125\",\n  \"20070126\",\n  \"20070129\",\n  \"20070130\",\n  \"20070131\",\n  \"20070201\",\n  \"20070202\",\n  \"20070205\",\n  \"20070206\",\n  \"20070207\",\n  \"20070208\",\n  \"20070209\",\n  \"20070212\",\n  \"20070213\",\n  \"20070214\",\n  \"20070215\",\n  \"20070216\",\n  \"20070226\",\n  \"20070227\",\n  \"20070228\",\n  \"20070301\",\n  \"20070302\",\n  \"20070305\",\n  \"20070306\",\n  \"20070307\",\n  \"20070308\",\n  \"20070309\",\n  \"20070312\",\n  \"20070313\",\n  \"20070314\",\n  \"20070315\",\n  \"20070316\",\n  \"20070319\",\n  \"20070320\",\n  \"20070321\",\n  \"20070322\",\n  \"20070323\",\n  \"20070326\",\n  \"20070327\",\n  \"20070328\",\n  \"20070329\",\n  \"20070330\",\n  \"20070402\",\n  \"20070403\",\n  \"20070404\",\n  \"20070405\",\n  \"20070406\",\n  \"20070409\",\n  \"20070410\",\n  \"20070411\",\n  \"20070412\",\n  \"20070413\",\n  \"20070416\",\n  \"20070417\",\n  \"20070418\",\n  \"20070419\",\n  \"20070420\",\n  \"20070423\",\n  \"20070424\",\n  \"20070425\",\n  \"20070426\",\n  \"20070427\",\n  \"20070430\",\n  \"20070508\",\n  \"20070509\",\n  \"20070510\",\n  \"20070511\",\n  \"20070514\",\n  \"20070515\",\n  \"20070516\",\n  \"20070517\",\n  \"20070518\",\n  \"20070521\",\n  \"20070522\",\n  \"20070523\",\n  \"20070524\",\n  \"20070525\",\n  \"20070528\",\n  \"20070529\",\n  \"20070530\",\n  \"20070531\",\n  \"20070601\",\n  \"20070604\",\n  \"20070605\",\n  \"20070606\",\n  \"20070607\",\n  \"20070608\",\n  \"20070611\",\n  \"20070612\",\n  \"20070613\",\n  \"20070614\",\n  \"20070615\",\n  \"20070618\",\n  \"20070619\",\n  \"20070620\",\n  \"20070621\",\n  \"20070622\",\n  \"20070625\",\n  \"20070626\",\n  \"20070627\",\n  \"20070628\",\n  \"20070629\",\n  \"20070702\",\n  \"20070703\",\n  \"20070704\",\n  \"20070705\",\n  \"20070706\",\n  \"20070709\",\n  \"20070710\",\n  \"20070711\",\n  \"20070712\",\n  \"20070713\",\n  \"20070716\",\n  \"20070717\",\n  \"20070718\",\n  \"20070719\",\n  \"20070720\",\n  \"20070723\",\n  \"20070724\",\n  \"20070725\",\n  \"20070726\",\n  \"20070727\",\n  \"20070730\",\n  \"20070731\",\n  \"20070801\",\n  \"20070802\",\n  \"20070803\",\n  \"20070806\",\n  \"20070807\",\n  \"20070808\",\n  \"20070809\",\n  \"20070810\",\n  \"20070813\",\n  \"20070814\",\n  \"20070815\",\n  \"20070816\",\n  \"20070817\",\n  \"20070820\",\n  \"20070821\",\n  \"20070822\",\n  \"20070823\",\n  \"20070824\",\n  \"20070827\",\n  \"20070828\",\n  \"20070829\",\n  \"20070830\",\n  \"20070831\",\n  \"20070903\",\n  \"20070904\",\n  \"20070905\",\n  \"20070906\",\n  \"20070907\",\n  \"20070910\",\n  \"20070911\",\n  \"20070912\",\n  \"20070913\",\n  \"20070914\",\n  \"20070917\",\n  \"20070918\",\n  \"20070919\",\n  \"20070920\",\n  \"20070921\",\n  \"20070924\",\n  \"20070925\",\n  \"20070926\",\n  \"20070927\",\n  \"20070928\",\n  \"20071008\",\n  \"20071009\",\n  \"20071010\",\n  \"20071011\",\n  \"20071012\",\n  \"20071015\",\n  \"20071016\",\n  \"20071017\",\n  \"20071018\",\n  \"20071019\",\n  \"20071022\",\n  \"20071023\",\n  \"20071024\",\n  \"20071025\",\n  \"20071026\",\n  \"20071029\",\n  \"20071030\",\n  \"20071031\",\n  \"20071101\",\n  \"20071102\",\n  \"20071105\",\n  \"20071106\",\n  \"20071107\",\n  \"20071108\",\n  \"20071109\",\n  \"20071112\",\n  \"20071113\",\n  \"20071114\",\n  \"20071115\",\n  \"20071116\",\n  \"20071119\",\n  \"20071120\",\n  \"20071121\",\n  \"20071122\",\n  \"20071123\",\n  \"20071126\",\n  \"20071127\",\n  \"20071128\",\n  \"20071129\",\n  \"20071130\",\n  \"20071203\",\n  \"20071204\",\n  \"20071205\",\n  \"20071206\",\n  \"20071207\",\n  \"20071210\",\n  \"20071211\",\n  \"20071212\",\n  \"20071213\",\n  \"20071214\",\n  \"20071217\",\n  \"20071218\",\n  \"20071219\",\n  \"20071220\",\n  \"20071221\",\n  \"20071224\",\n  \"20071225\",\n  \"20071226\",\n  \"20071227\",\n  \"20071228\",\n  \"20080102\",\n  \"20080103\",\n  \"20080104\",\n  \"20080107\",\n  \"20080108\",\n  \"20080109\",\n  \"20080110\",\n  \"20080111\",\n  \"20080114\",\n  \"20080115\",\n  \"20080116\",\n  \"20080117\",\n  \"20080118\",\n  \"20080121\",\n  \"20080122\",\n  \"20080123\",\n  \"20080124\",\n  \"20080125\",\n  \"20080128\",\n  \"20080129\",\n  \"20080130\",\n  \"20080131\",\n  \"20080201\",\n  \"20080204\",\n  \"20080205\",\n  \"20080213\",\n  \"20080214\",\n  \"20080215\",\n  \"20080218\",\n  \"20080219\",\n  \"20080220\",\n  \"20080221\",\n  \"20080222\",\n  \"20080225\",\n  \"20080226\",\n  \"20080227\",\n  \"20080228\",\n  \"20080229\",\n  \"20080303\",\n  \"20080304\",\n  \"20080305\",\n  \"20080306\",\n  \"20080307\",\n  \"20080310\",\n  \"20080311\",\n  \"20080312\",\n  \"20080313\",\n  \"20080314\",\n  \"20080317\",\n  \"20080318\",\n  \"20080319\",\n  \"20080320\",\n  \"20080321\",\n  \"20080324\",\n  \"20080325\",\n  \"20080326\",\n  \"20080327\",\n  \"20080328\",\n  \"20080331\",\n  \"20080401\",\n  \"20080402\",\n  \"20080403\",\n  \"20080407\",\n  \"20080408\",\n  \"20080409\",\n  \"20080410\",\n  \"20080411\",\n  \"20080414\",\n  \"20080415\",\n  \"20080416\",\n  \"20080417\",\n  \"20080418\",\n  \"20080421\",\n  \"20080422\",\n  \"20080423\",\n  \"20080424\",\n  \"20080425\",\n  \"20080428\",\n  \"20080429\",\n  \"20080430\",\n  \"20080505\",\n  \"20080506\",\n  \"20080507\",\n  \"20080508\",\n  \"20080509\",\n  \"20080512\",\n  \"20080513\",\n  \"20080514\",\n  \"20080515\",\n  \"20080516\",\n  \"20080519\",\n  \"20080520\",\n  \"20080521\",\n  \"20080522\",\n  \"20080523\",\n  \"20080526\",\n  \"20080527\",\n  \"20080528\",\n  \"20080529\",\n  \"20080530\",\n  \"20080602\",\n  \"20080603\",\n  \"20080604\",\n  \"20080605\",\n  \"20080606\",\n  \"20080610\",\n  \"20080611\",\n  \"20080612\",\n  \"20080613\",\n  \"20080616\",\n  \"20080617\",\n  \"20080618\",\n  \"20080619\",\n  \"20080620\",\n  \"20080623\",\n  \"20080624\",\n  \"20080625\",\n  \"20080626\",\n  \"20080627\",\n  \"20080630\",\n  \"20080701\",\n  \"20080702\",\n  \"20080703\",\n  \"20080704\",\n  \"20080707\",\n  \"20080708\",\n  \"20080709\",\n  \"20080710\",\n  \"20080711\",\n  \"20080714\",\n  \"20080715\",\n  \"20080716\",\n  \"20080717\",\n  \"20080718\",\n  \"20080721\",\n  \"20080722\",\n  \"20080723\",\n  \"20080724\",\n  \"20080725\",\n  \"20080728\",\n  \"20080729\",\n  \"20080730\",\n  \"20080731\",\n  \"20080801\",\n  \"20080804\",\n  \"20080805\",\n  \"20080806\",\n  \"20080807\",\n  \"20080808\",\n  \"20080811\",\n  \"20080812\",\n  \"20080813\",\n  \"20080814\",\n  \"20080815\",\n  \"20080818\",\n  \"20080819\",\n  \"20080820\",\n  \"20080821\",\n  \"20080822\",\n  \"20080825\",\n  \"20080826\",\n  \"20080827\",\n  \"20080828\",\n  \"20080829\",\n  \"20080901\",\n  \"20080902\",\n  \"20080903\",\n  \"20080904\",\n  \"20080905\",\n  \"20080908\",\n  \"20080909\",\n  \"20080910\",\n  \"20080911\",\n  \"20080912\",\n  \"20080916\",\n  \"20080917\",\n  \"20080918\",\n  \"20080919\",\n  \"20080922\",\n  \"20080923\",\n  \"20080924\",\n  \"20080925\",\n  \"20080926\",\n  \"20081006\",\n  \"20081007\",\n  \"20081008\",\n  \"20081009\",\n  \"20081010\",\n  \"20081013\",\n  \"20081014\",\n  \"20081015\",\n  \"20081016\",\n  \"20081017\",\n  \"20081020\",\n  \"20081021\",\n  \"20081022\",\n  \"20081023\",\n  \"20081024\",\n  \"20081027\",\n  \"20081028\",\n  \"20081029\",\n  \"20081030\",\n  \"20081031\",\n  \"20081103\",\n  \"20081104\",\n  \"20081105\",\n  \"20081106\",\n  \"20081107\",\n  \"20081110\",\n  \"20081111\",\n  \"20081112\",\n  \"20081113\",\n  \"20081114\",\n  \"20081117\",\n  \"20081118\",\n  \"20081119\",\n  \"20081120\",\n  \"20081121\",\n  \"20081124\",\n  \"20081125\",\n  \"20081126\",\n  \"20081127\",\n  \"20081128\",\n  \"20081201\",\n  \"20081202\",\n  \"20081203\",\n  \"20081204\",\n  \"20081205\",\n  \"20081208\",\n  \"20081209\",\n  \"20081210\",\n  \"20081211\",\n  \"20081212\",\n  \"20081215\",\n  \"20081216\",\n  \"20081217\",\n  \"20081218\",\n  \"20081219\",\n  \"20081222\",\n  \"20081223\",\n  \"20081224\",\n  \"20081225\",\n  \"20081226\",\n  \"20081229\",\n  \"20081230\",\n  \"20081231\",\n  \"20090105\",\n  \"20090106\",\n  \"20090107\",\n  \"20090108\",\n  \"20090109\",\n  \"20090112\",\n  \"20090113\",\n  \"20090114\",\n  \"20090115\",\n  \"20090116\",\n  \"20090119\",\n  \"20090120\",\n  \"20090121\",\n  \"20090122\",\n  \"20090123\",\n  \"20090202\",\n  \"20090203\",\n  \"20090204\",\n  \"20090205\",\n  \"20090206\",\n  \"20090209\",\n  \"20090210\",\n  \"20090211\",\n  \"20090212\",\n  \"20090213\",\n  \"20090216\",\n  \"20090217\",\n  \"20090218\",\n  \"20090219\",\n  \"20090220\",\n  \"20090223\",\n  \"20090224\",\n  \"20090225\",\n  \"20090226\",\n  \"20090227\",\n  \"20090302\",\n  \"20090303\",\n  \"20090304\",\n  \"20090305\",\n  \"20090306\",\n  \"20090309\",\n  \"20090310\",\n  \"20090311\",\n  \"20090312\",\n  \"20090313\",\n  \"20090316\",\n  \"20090317\",\n  \"20090318\",\n  \"20090319\",\n  \"20090320\",\n  \"20090323\",\n  \"20090324\",\n  \"20090325\",\n  \"20090326\",\n  \"20090327\",\n  \"20090330\",\n  \"20090331\",\n  \"20090401\",\n  \"20090402\",\n  \"20090403\",\n  \"20090407\",\n  \"20090408\",\n  \"20090409\",\n  \"20090410\",\n  \"20090413\",\n  \"20090414\",\n  \"20090415\",\n  \"20090416\",\n  \"20090417\",\n  \"20090420\",\n  \"20090421\",\n  \"20090422\",\n  \"20090423\",\n  \"20090424\",\n  \"20090427\",\n  \"20090428\",\n  \"20090429\",\n  \"20090430\",\n  \"20090504\",\n  \"20090505\",\n  \"20090506\",\n  \"20090507\",\n  \"20090508\",\n  \"20090511\",\n  \"20090512\",\n  \"20090513\",\n  \"20090514\",\n  \"20090515\",\n  \"20090518\",\n  \"20090519\",\n  \"20090520\",\n  \"20090521\",\n  \"20090522\",\n  \"20090525\",\n  \"20090526\",\n  \"20090527\",\n  \"20090601\",\n  \"20090602\",\n  \"20090603\",\n  \"20090604\",\n  \"20090605\",\n  \"20090608\",\n  \"20090609\",\n  \"20090610\",\n  \"20090611\",\n  \"20090612\",\n  \"20090615\",\n  \"20090616\",\n  \"20090617\",\n  \"20090618\",\n  \"20090619\",\n  \"20090622\",\n  \"20090623\",\n  \"20090624\",\n  \"20090625\",\n  \"20090626\",\n  \"20090629\",\n  \"20090630\",\n  \"20090701\",\n  \"20090702\",\n  \"20090703\",\n  \"20090706\",\n  \"20090707\",\n  \"20090708\",\n  \"20090709\",\n  \"20090710\",\n  \"20090713\",\n  \"20090714\",\n  \"20090715\",\n  \"20090716\",\n  \"20090717\",\n  \"20090720\",\n  \"20090721\",\n  \"20090722\",\n  \"20090723\",\n  \"20090724\",\n  \"20090727\",\n  \"20090728\",\n  \"20090729\",\n  \"20090730\",\n  \"20090731\",\n  \"20090803\",\n  \"20090804\",\n  \"20090805\",\n  \"20090806\",\n  \"20090807\",\n  \"20090810\",\n  \"20090811\",\n  \"20090812\",\n  \"20090813\",\n  \"20090814\",\n  \"20090817\",\n  \"20090818\",\n  \"20090819\",\n  \"20090820\",\n  \"20090821\",\n  \"20090824\",\n  \"20090825\",\n  \"20090826\",\n  \"20090827\",\n  \"20090828\",\n  \"20090831\",\n  \"20090901\",\n  \"20090902\",\n  \"20090903\",\n  \"20090904\",\n  \"20090907\",\n  \"20090908\",\n  \"20090909\",\n  \"20090910\",\n  \"20090911\",\n  \"20090914\",\n  \"20090915\",\n  \"20090916\",\n  \"20090917\",\n  \"20090918\",\n  \"20090921\",\n  \"20090922\",\n  \"20090923\",\n  \"20090924\",\n  \"20090925\",\n  \"20090928\",\n  \"20090929\",\n  \"20090930\",\n  \"20091009\",\n  \"20091012\",\n  \"20091013\",\n  \"20091014\",\n  \"20091015\",\n  \"20091016\",\n  \"20091019\",\n  \"20091020\",\n  \"20091021\",\n  \"20091022\",\n  \"20091023\",\n  \"20091026\",\n  \"20091027\",\n  \"20091028\",\n  \"20091029\",\n  \"20091030\",\n  \"20091102\",\n  \"20091103\",\n  \"20091104\",\n  \"20091105\",\n  \"20091106\",\n  \"20091109\",\n  \"20091110\",\n  \"20091111\",\n  \"20091112\",\n  \"20091113\",\n  \"20091116\",\n  \"20091117\",\n  \"20091118\",\n  \"20091119\",\n  \"20091120\",\n  \"20091123\",\n  \"20091124\",\n  \"20091125\",\n  \"20091126\",\n  \"20091127\",\n  \"20091130\",\n  \"20091201\",\n  \"20091202\",\n  \"20091203\",\n  \"20091204\",\n  \"20091207\",\n  \"20091208\",\n  \"20091209\",\n  \"20091210\",\n  \"20091211\",\n  \"20091214\",\n  \"20091215\",\n  \"20091216\",\n  \"20091217\",\n  \"20091218\",\n  \"20091221\",\n  \"20091222\",\n  \"20091223\",\n  \"20091224\",\n  \"20091225\",\n  \"20091228\",\n  \"20091229\",\n  \"20091230\",\n  \"20091231\",\n  \"20100104\",\n  \"20100105\",\n  \"20100106\",\n  \"20100107\",\n  \"20100108\",\n  \"20100111\",\n  \"20100112\",\n  \"20100113\",\n  \"20100114\",\n  \"20100115\",\n  \"20100118\",\n  \"20100119\",\n  \"20100120\",\n  \"20100121\",\n  \"20100122\",\n  \"20100125\",\n  \"20100126\",\n  \"20100127\",\n  \"20100128\",\n  \"20100129\",\n  \"20100201\",\n  \"20100202\",\n  \"20100203\",\n  \"20100204\",\n  \"20100205\",\n  \"20100208\",\n  \"20100209\",\n  \"20100210\",\n  \"20100211\",\n  \"20100212\",\n  \"20100222\",\n  \"20100223\",\n  \"20100224\",\n  \"20100225\",\n  \"20100226\",\n  \"20100301\",\n  \"20100302\",\n  \"20100303\",\n  \"20100304\",\n  \"20100305\",\n  \"20100308\",\n  \"20100309\",\n  \"20100310\",\n  \"20100311\",\n  \"20100312\",\n  \"20100315\",\n  \"20100316\",\n  \"20100317\",\n  \"20100318\",\n  \"20100319\",\n  \"20100322\",\n  \"20100323\",\n  \"20100324\",\n  \"20100325\",\n  \"20100326\",\n  \"20100329\",\n  \"20100330\",\n  \"20100331\",\n  \"20100401\",\n  \"20100402\",\n  \"20100406\",\n  \"20100407\",\n  \"20100408\",\n  \"20100409\",\n  \"20100412\",\n  \"20100413\",\n  \"20100414\",\n  \"20100415\",\n  \"20100416\",\n  \"20100419\",\n  \"20100420\",\n  \"20100421\",\n  \"20100422\",\n  \"20100423\",\n  \"20100426\",\n  \"20100427\",\n  \"20100428\",\n  \"20100429\",\n  \"20100430\",\n  \"20100504\",\n  \"20100505\",\n  \"20100506\",\n  \"20100507\",\n  \"20100510\",\n  \"20100511\",\n  \"20100512\",\n  \"20100513\",\n  \"20100514\",\n  \"20100517\",\n  \"20100518\",\n  \"20100519\",\n  \"20100520\",\n  \"20100521\",\n  \"20100524\",\n  \"20100525\",\n  \"20100526\",\n  \"20100527\",\n  \"20100528\",\n  \"20100531\",\n  \"20100601\",\n  \"20100602\",\n  \"20100603\",\n  \"20100604\",\n  \"20100607\",\n  \"20100608\",\n  \"20100609\",\n  \"20100610\",\n  \"20100611\",\n  \"20100617\",\n  \"20100618\",\n  \"20100621\",\n  \"20100622\",\n  \"20100623\",\n  \"20100624\",\n  \"20100625\",\n  \"20100628\",\n  \"20100629\",\n  \"20100630\",\n  \"20100701\",\n  \"20100702\",\n  \"20100705\",\n  \"20100706\",\n  \"20100707\",\n  \"20100708\",\n  \"20100709\",\n  \"20100712\",\n  \"20100713\",\n  \"20100714\",\n  \"20100715\",\n  \"20100716\",\n  \"20100719\",\n  \"20100720\",\n  \"20100721\",\n  \"20100722\",\n  \"20100723\",\n  \"20100726\",\n  \"20100727\",\n  \"20100728\",\n  \"20100729\",\n  \"20100730\",\n  \"20100802\",\n  \"20100803\",\n  \"20100804\",\n  \"20100805\",\n  \"20100806\",\n  \"20100809\",\n  \"20100810\",\n  \"20100811\",\n  \"20100812\",\n  \"20100813\",\n  \"20100816\",\n  \"20100817\",\n  \"20100818\",\n  \"20100819\",\n  \"20100820\",\n  \"20100823\",\n  \"20100824\",\n  \"20100825\",\n  \"20100826\",\n  \"20100827\",\n  \"20100830\",\n  \"20100831\",\n  \"20100901\",\n  \"20100902\",\n  \"20100903\",\n  \"20100906\",\n  \"20100907\",\n  \"20100908\",\n  \"20100909\",\n  \"20100910\",\n  \"20100913\",\n  \"20100914\",\n  \"20100915\",\n  \"20100916\",\n  \"20100917\",\n  \"20100920\",\n  \"20100921\",\n  \"20100927\",\n  \"20100928\",\n  \"20100929\",\n  \"20100930\",\n  \"20101008\",\n  \"20101011\",\n  \"20101012\",\n  \"20101013\",\n  \"20101014\",\n  \"20101015\",\n  \"20101018\",\n  \"20101019\",\n  \"20101020\",\n  \"20101021\",\n  \"20101022\",\n  \"20101025\",\n  \"20101026\",\n  \"20101027\",\n  \"20101028\",\n  \"20101029\",\n  \"20101101\",\n  \"20101102\",\n  \"20101103\",\n  \"20101104\",\n  \"20101105\",\n  \"20101108\",\n  \"20101109\",\n  \"20101110\",\n  \"20101111\",\n  \"20101112\",\n  \"20101115\",\n  \"20101116\",\n  \"20101117\",\n  \"20101118\",\n  \"20101119\",\n  \"20101122\",\n  \"20101123\",\n  \"20101124\",\n  \"20101125\",\n  \"20101126\",\n  \"20101129\",\n  \"20101130\",\n  \"20101201\",\n  \"20101202\",\n  \"20101203\",\n  \"20101206\",\n  \"20101207\",\n  \"20101208\",\n  \"20101209\",\n  \"20101210\",\n  \"20101213\",\n  \"20101214\",\n  \"20101215\",\n  \"20101216\",\n  \"20101217\",\n  \"20101220\",\n  \"20101221\",\n  \"20101222\",\n  \"20101223\",\n  \"20101224\",\n  \"20101227\",\n  \"20101228\",\n  \"20101229\",\n  \"20101230\",\n  \"20101231\",\n  \"20110104\",\n  \"20110105\",\n  \"20110106\",\n  \"20110107\",\n  \"20110110\",\n  \"20110111\",\n  \"20110112\",\n  \"20110113\",\n  \"20110114\",\n  \"20110117\",\n  \"20110118\",\n  \"20110119\",\n  \"20110120\",\n  \"20110121\",\n  \"20110124\",\n  \"20110125\",\n  \"20110126\",\n  \"20110127\",\n  \"20110128\",\n  \"20110131\",\n  \"20110201\",\n  \"20110209\",\n  \"20110210\",\n  \"20110211\",\n  \"20110214\",\n  \"20110215\",\n  \"20110216\",\n  \"20110217\",\n  \"20110218\",\n  \"20110221\",\n  \"20110222\",\n  \"20110223\",\n  \"20110224\",\n  \"20110225\",\n  \"20110228\",\n  \"20110301\",\n  \"20110302\",\n  \"20110303\",\n  \"20110304\",\n  \"20110307\",\n  \"20110308\",\n  \"20110309\",\n  \"20110310\",\n  \"20110311\",\n  \"20110314\",\n  \"20110315\",\n  \"20110316\",\n  \"20110317\",\n  \"20110318\",\n  \"20110321\",\n  \"20110322\",\n  \"20110323\",\n  \"20110324\",\n  \"20110325\",\n  \"20110328\",\n  \"20110329\",\n  \"20110330\",\n  \"20110331\",\n  \"20110401\",\n  \"20110406\",\n  \"20110407\",\n  \"20110408\",\n  \"20110411\",\n  \"20110412\",\n  \"20110413\",\n  \"20110414\",\n  \"20110415\",\n  \"20110418\",\n  \"20110419\",\n  \"20110420\",\n  \"20110421\",\n  \"20110422\",\n  \"20110425\",\n  \"20110426\",\n  \"20110427\",\n  \"20110428\",\n  \"20110429\",\n  \"20110503\",\n  \"20110504\",\n  \"20110505\",\n  \"20110506\",\n  \"20110509\",\n  \"20110510\",\n  \"20110511\",\n  \"20110512\",\n  \"20110513\",\n  \"20110516\",\n  \"20110517\",\n  \"20110518\",\n  \"20110519\",\n  \"20110520\",\n  \"20110523\",\n  \"20110524\",\n  \"20110525\",\n  \"20110526\",\n  \"20110527\",\n  \"20110530\",\n  \"20110531\",\n  \"20110601\",\n  \"20110602\",\n  \"20110603\",\n  \"20110607\",\n  \"20110608\",\n  \"20110609\",\n  \"20110610\",\n  \"20110613\",\n  \"20110614\",\n  \"20110615\",\n  \"20110616\",\n  \"20110617\",\n  \"20110620\",\n  \"20110621\",\n  \"20110622\",\n  \"20110623\",\n  \"20110624\",\n  \"20110627\",\n  \"20110628\",\n  \"20110629\",\n  \"20110630\",\n  \"20110701\",\n  \"20110704\",\n  \"20110705\",\n  \"20110706\",\n  \"20110707\",\n  \"20110708\",\n  \"20110711\",\n  \"20110712\",\n  \"20110713\",\n  \"20110714\",\n  \"20110715\",\n  \"20110718\",\n  \"20110719\",\n  \"20110720\",\n  \"20110721\",\n  \"20110722\",\n  \"20110725\",\n  \"20110726\",\n  \"20110727\",\n  \"20110728\",\n  \"20110729\",\n  \"20110801\",\n  \"20110802\",\n  \"20110803\",\n  \"20110804\",\n  \"20110805\",\n  \"20110808\",\n  \"20110809\",\n  \"20110810\",\n  \"20110811\",\n  \"20110812\",\n  \"20110815\",\n  \"20110816\",\n  \"20110817\",\n  \"20110818\",\n  \"20110819\",\n  \"20110822\",\n  \"20110823\",\n  \"20110824\",\n  \"20110825\",\n  \"20110826\",\n  \"20110829\",\n  \"20110830\",\n  \"20110831\",\n  \"20110901\",\n  \"20110902\",\n  \"20110905\",\n  \"20110906\",\n  \"20110907\",\n  \"20110908\",\n  \"20110909\",\n  \"20110913\",\n  \"20110914\",\n  \"20110915\",\n  \"20110916\",\n  \"20110919\",\n  \"20110920\",\n  \"20110921\",\n  \"20110922\",\n  \"20110923\",\n  \"20110926\",\n  \"20110927\",\n  \"20110928\",\n  \"20110929\",\n  \"20110930\",\n  \"20111010\",\n  \"20111011\",\n  \"20111012\",\n  \"20111013\",\n  \"20111014\",\n  \"20111017\",\n  \"20111018\",\n  \"20111019\",\n  \"20111020\",\n  \"20111021\",\n  \"20111024\",\n  \"20111025\",\n  \"20111026\",\n  \"20111027\",\n  \"20111028\",\n  \"20111031\",\n  \"20111101\",\n  \"20111102\",\n  \"20111103\",\n  \"20111104\",\n  \"20111107\",\n  \"20111108\",\n  \"20111109\",\n  \"20111110\",\n  \"20111111\",\n  \"20111114\",\n  \"20111115\",\n  \"20111116\",\n  \"20111117\",\n  \"20111118\",\n  \"20111121\",\n  \"20111122\",\n  \"20111123\",\n  \"20111124\",\n  \"20111125\",\n  \"20111128\",\n  \"20111129\",\n  \"20111130\",\n  \"20111201\",\n  \"20111202\",\n  \"20111205\",\n  \"20111206\",\n  \"20111207\",\n  \"20111208\",\n  \"20111209\",\n  \"20111212\",\n  \"20111213\",\n  \"20111214\",\n  \"20111215\",\n  \"20111216\",\n  \"20111219\",\n  \"20111220\",\n  \"20111221\",\n  \"20111222\",\n  \"20111223\",\n  \"20111226\",\n  \"20111227\",\n  \"20111228\",\n  \"20111229\",\n  \"20111230\",\n  \"20120104\",\n  \"20120105\",\n  \"20120106\",\n  \"20120109\",\n  \"20120110\",\n  \"20120111\",\n  \"20120112\",\n  \"20120113\",\n  \"20120116\",\n  \"20120117\",\n  \"20120118\",\n  \"20120119\",\n  \"20120120\",\n  \"20120130\",\n  \"20120131\",\n  \"20120201\",\n  \"20120202\",\n  \"20120203\",\n  \"20120206\",\n  \"20120207\",\n  \"20120208\",\n  \"20120209\",\n  \"20120210\",\n  \"20120213\",\n  \"20120214\",\n  \"20120215\",\n  \"20120216\",\n  \"20120217\",\n  \"20120220\",\n  \"20120221\",\n  \"20120222\",\n  \"20120223\",\n  \"20120224\",\n  \"20120227\",\n  \"20120228\",\n  \"20120229\",\n  \"20120301\",\n  \"20120302\",\n  \"20120305\",\n  \"20120306\",\n  \"20120307\",\n  \"20120308\",\n  \"20120309\",\n  \"20120312\",\n  \"20120313\",\n  \"20120314\",\n  \"20120315\",\n  \"20120316\",\n  \"20120319\",\n  \"20120320\",\n  \"20120321\",\n  \"20120322\",\n  \"20120323\",\n  \"20120326\",\n  \"20120327\",\n  \"20120328\",\n  \"20120329\",\n  \"20120330\",\n  \"20120405\",\n  \"20120406\",\n  \"20120409\",\n  \"20120410\",\n  \"20120411\",\n  \"20120412\",\n  \"20120413\",\n  \"20120416\",\n  \"20120417\",\n  \"20120418\",\n  \"20120419\",\n  \"20120420\",\n  \"20120423\",\n  \"20120424\",\n  \"20120425\",\n  \"20120426\",\n  \"20120427\",\n  \"20120502\",\n  \"20120503\",\n  \"20120504\",\n  \"20120507\",\n  \"20120508\",\n  \"20120509\",\n  \"20120510\",\n  \"20120511\",\n  \"20120514\",\n  \"20120515\",\n  \"20120516\",\n  \"20120517\",\n  \"20120518\",\n  \"20120521\",\n  \"20120522\",\n  \"20120523\",\n  \"20120524\",\n  \"20120525\",\n  \"20120528\",\n  \"20120529\",\n  \"20120530\",\n  \"20120531\",\n  \"20120601\",\n  \"20120604\",\n  \"20120605\",\n  \"20120606\",\n  \"20120607\",\n  \"20120608\",\n  \"20120611\",\n  \"20120612\",\n  \"20120613\",\n  \"20120614\",\n  \"20120615\",\n  \"20120618\",\n  \"20120619\",\n  \"20120620\",\n  \"20120621\",\n  \"20120625\",\n  \"20120626\",\n  \"20120627\",\n  \"20120628\",\n  \"20120629\",\n  \"20120702\",\n  \"20120703\",\n  \"20120704\",\n  \"20120705\",\n  \"20120706\",\n  \"20120709\",\n  \"20120710\",\n  \"20120711\",\n  \"20120712\",\n  \"20120713\",\n  \"20120716\",\n  \"20120717\",\n  \"20120718\",\n  \"20120719\",\n  \"20120720\",\n  \"20120723\",\n  \"20120724\",\n  \"20120725\",\n  \"20120726\",\n  \"20120727\",\n  \"20120730\",\n  \"20120731\",\n  \"20120801\",\n  \"20120802\",\n  \"20120803\",\n  \"20120806\",\n  \"20120807\",\n  \"20120808\",\n  \"20120809\",\n  \"20120810\",\n  \"20120813\",\n  \"20120814\",\n  \"20120815\",\n  \"20120816\",\n  \"20120817\",\n  \"20120820\",\n  \"20120821\",\n  \"20120822\",\n  \"20120823\",\n  \"20120824\",\n  \"20120827\",\n  \"20120828\",\n  \"20120829\",\n  \"20120830\",\n  \"20120831\",\n  \"20120903\",\n  \"20120904\",\n  \"20120905\",\n  \"20120906\",\n  \"20120907\",\n  \"20120910\",\n  \"20120911\",\n  \"20120912\",\n  \"20120913\",\n  \"20120914\",\n  \"20120917\",\n  \"20120918\",\n  \"20120919\",\n  \"20120920\",\n  \"20120921\",\n  \"20120924\",\n  \"20120925\",\n  \"20120926\",\n  \"20120927\",\n  \"20120928\",\n  \"20121008\",\n  \"20121009\",\n  \"20121010\",\n  \"20121011\",\n  \"20121012\",\n  \"20121015\",\n  \"20121016\",\n  \"20121017\",\n  \"20121018\",\n  \"20121019\",\n  \"20121022\",\n  \"20121023\",\n  \"20121024\",\n  \"20121025\",\n  \"20121026\",\n  \"20121029\",\n  \"20121030\",\n  \"20121031\",\n  \"20121101\",\n  \"20121102\",\n  \"20121105\",\n  \"20121106\",\n  \"20121107\",\n  \"20121108\",\n  \"20121109\",\n  \"20121112\",\n  \"20121113\",\n  \"20121114\",\n  \"20121115\",\n  \"20121116\",\n  \"20121119\",\n  \"20121120\",\n  \"20121121\",\n  \"20121122\",\n  \"20121123\",\n  \"20121126\",\n  \"20121127\",\n  \"20121128\",\n  \"20121129\",\n  \"20121130\",\n  \"20121203\",\n  \"20121204\",\n  \"20121205\",\n  \"20121206\",\n  \"20121207\",\n  \"20121210\",\n  \"20121211\",\n  \"20121212\",\n  \"20121213\",\n  \"20121214\",\n  \"20121217\",\n  \"20121218\",\n  \"20121219\",\n  \"20121220\",\n  \"20121221\",\n  \"20121224\",\n  \"20121225\",\n  \"20121226\",\n  \"20121227\",\n  \"20121228\",\n  \"20121231\",\n  \"20130104\",\n  \"20130107\",\n  \"20130108\",\n  \"20130109\",\n  \"20130110\",\n  \"20130111\",\n  \"20130114\",\n  \"20130115\",\n  \"20130116\",\n  \"20130117\",\n  \"20130118\",\n  \"20130121\",\n  \"20130122\",\n  \"20130123\",\n  \"20130124\",\n  \"20130125\",\n  \"20130128\",\n  \"20130129\",\n  \"20130130\",\n  \"20130131\",\n  \"20130201\",\n  \"20130204\",\n  \"20130205\",\n  \"20130206\",\n  \"20130207\",\n  \"20130208\",\n  \"20130218\",\n  \"20130219\",\n  \"20130220\",\n  \"20130221\",\n  \"20130222\",\n  \"20130225\",\n  \"20130226\",\n  \"20130227\",\n  \"20130228\",\n  \"20130301\",\n  \"20130304\",\n  \"20130305\",\n  \"20130306\",\n  \"20130307\",\n  \"20130308\",\n  \"20130311\",\n  \"20130312\",\n  \"20130313\",\n  \"20130314\",\n  \"20130315\",\n  \"20130318\",\n  \"20130319\",\n  \"20130320\",\n  \"20130321\",\n  \"20130322\",\n  \"20130325\",\n  \"20130326\",\n  \"20130327\",\n  \"20130328\",\n  \"20130329\",\n  \"20130401\",\n  \"20130402\",\n  \"20130403\",\n  \"20130408\",\n  \"20130409\",\n  \"20130410\",\n  \"20130411\",\n  \"20130412\",\n  \"20130415\",\n  \"20130416\",\n  \"20130417\",\n  \"20130418\",\n  \"20130419\",\n  \"20130422\",\n  \"20130423\",\n  \"20130424\",\n  \"20130425\",\n  \"20130426\",\n  \"20130502\",\n  \"20130503\",\n  \"20130506\",\n  \"20130507\",\n  \"20130508\",\n  \"20130509\",\n  \"20130510\",\n  \"20130513\",\n  \"20130514\",\n  \"20130515\",\n  \"20130516\",\n  \"20130517\",\n  \"20130520\",\n  \"20130521\",\n  \"20130522\",\n  \"20130523\",\n  \"20130524\",\n  \"20130527\",\n  \"20130528\",\n  \"20130529\",\n  \"20130530\",\n  \"20130531\",\n  \"20130603\",\n  \"20130604\",\n  \"20130605\",\n  \"20130606\",\n  \"20130607\",\n  \"20130613\",\n  \"20130614\",\n  \"20130617\",\n  \"20130618\",\n  \"20130619\",\n  \"20130620\",\n  \"20130621\",\n  \"20130624\",\n  \"20130625\",\n  \"20130626\",\n  \"20130627\",\n  \"20130628\",\n  \"20130701\",\n  \"20130702\",\n  \"20130703\",\n  \"20130704\",\n  \"20130705\",\n  \"20130708\",\n  \"20130709\",\n  \"20130710\",\n  \"20130711\",\n  \"20130712\",\n  \"20130715\",\n  \"20130716\",\n  \"20130717\",\n  \"20130718\",\n  \"20130719\",\n  \"20130722\",\n  \"20130723\",\n  \"20130724\",\n  \"20130725\",\n  \"20130726\",\n  \"20130729\",\n  \"20130730\",\n  \"20130731\",\n  \"20130801\",\n  \"20130802\",\n  \"20130805\",\n  \"20130806\",\n  \"20130807\",\n  \"20130808\",\n  \"20130809\",\n  \"20130812\",\n  \"20130813\",\n  \"20130814\",\n  \"20130815\",\n  \"20130816\",\n  \"20130819\",\n  \"20130820\",\n  \"20130821\",\n  \"20130822\",\n  \"20130823\",\n  \"20130826\",\n  \"20130827\",\n  \"20130828\",\n  \"20130829\",\n  \"20130830\",\n  \"20130902\",\n  \"20130903\",\n  \"20130904\",\n  \"20130905\",\n  \"20130906\",\n  \"20130909\",\n  \"20130910\",\n  \"20130911\",\n  \"20130912\",\n  \"20130913\",\n  \"20130916\",\n  \"20130917\",\n  \"20130918\",\n  \"20130923\",\n  \"20130924\",\n  \"20130925\",\n  \"20130926\",\n  \"20130927\",\n  \"20130930\",\n  \"20131008\",\n  \"20131009\",\n  \"20131010\",\n  \"20131011\",\n  \"20131014\",\n  \"20131015\",\n  \"20131016\",\n  \"20131017\",\n  \"20131018\",\n  \"20131021\",\n  \"20131022\",\n  \"20131023\",\n  \"20131024\",\n  \"20131025\",\n  \"20131028\",\n  \"20131029\",\n  \"20131030\",\n  \"20131031\",\n  \"20131101\",\n  \"20131104\",\n  \"20131105\",\n  \"20131106\",\n  \"20131107\",\n  \"20131108\",\n  \"20131111\",\n  \"20131112\",\n  \"20131113\",\n  \"20131114\",\n  \"20131115\",\n  \"20131118\",\n  \"20131119\",\n  \"20131120\",\n  \"20131121\",\n  \"20131122\",\n  \"20131125\",\n  \"20131126\",\n  \"20131127\",\n  \"20131128\",\n  \"20131129\",\n  \"20131202\",\n  \"20131203\",\n  \"20131204\",\n  \"20131205\",\n  \"20131206\",\n  \"20131209\",\n  \"20131210\",\n  \"20131211\",\n  \"20131212\",\n  \"20131213\",\n  \"20131216\",\n  \"20131217\",\n  \"20131218\",\n  \"20131219\",\n  \"20131220\",\n  \"20131223\",\n  \"20131224\",\n  \"20131225\",\n  \"20131226\",\n  \"20131227\",\n  \"20131230\",\n  \"20131231\",\n  \"20140102\",\n  \"20140103\",\n  \"20140106\",\n  \"20140107\",\n  \"20140108\",\n  \"20140109\",\n  \"20140110\",\n  \"20140113\",\n  \"20140114\",\n  \"20140115\",\n  \"20140116\",\n  \"20140117\",\n  \"20140120\",\n  \"20140121\",\n  \"20140122\",\n  \"20140123\",\n  \"20140124\",\n  \"20140127\",\n  \"20140128\",\n  \"20140129\",\n  \"20140130\",\n  \"20140207\",\n  \"20140210\",\n  \"20140211\",\n  \"20140212\",\n  \"20140213\",\n  \"20140214\",\n  \"20140217\",\n  \"20140218\",\n  \"20140219\",\n  \"20140220\",\n  \"20140221\",\n  \"20140224\",\n  \"20140225\",\n  \"20140226\",\n  \"20140227\",\n  \"20140228\",\n  \"20140303\",\n  \"20140304\",\n  \"20140305\",\n  \"20140306\",\n  \"20140307\",\n  \"20140310\",\n  \"20140311\",\n  \"20140312\",\n  \"20140313\",\n  \"20140314\",\n  \"20140317\",\n  \"20140318\",\n  \"20140319\",\n  \"20140320\",\n  \"20140321\",\n  \"20140324\",\n  \"20140325\",\n  \"20140326\",\n  \"20140327\",\n  \"20140328\",\n  \"20140331\",\n  \"20140401\",\n  \"20140402\",\n  \"20140403\",\n  \"20140404\",\n  \"20140408\",\n  \"20140409\",\n  \"20140410\",\n  \"20140411\",\n  \"20140414\",\n  \"20140415\",\n  \"20140416\",\n  \"20140417\",\n  \"20140418\",\n  \"20140421\",\n  \"20140422\",\n  \"20140423\",\n  \"20140424\",\n  \"20140425\",\n  \"20140428\",\n  \"20140429\",\n  \"20140430\",\n  \"20140505\",\n  \"20140506\",\n  \"20140507\",\n  \"20140508\",\n  \"20140509\",\n  \"20140512\",\n  \"20140513\",\n  \"20140514\",\n  \"20140515\",\n  \"20140516\",\n  \"20140519\",\n  \"20140520\",\n  \"20140521\",\n  \"20140522\",\n  \"20140523\",\n  \"20140526\",\n  \"20140527\",\n  \"20140528\",\n  \"20140529\",\n  \"20140530\",\n  \"20140603\",\n  \"20140604\",\n  \"20140605\",\n  \"20140606\",\n  \"20140609\",\n  \"20140610\",\n  \"20140611\",\n  \"20140612\",\n  \"20140613\",\n  \"20140616\",\n  \"20140617\",\n  \"20140618\",\n  \"20140619\",\n  \"20140620\",\n  \"20140623\",\n  \"20140624\",\n  \"20140625\",\n  \"20140626\",\n  \"20140627\",\n  \"20140630\",\n  \"20140701\",\n  \"20140702\",\n  \"20140703\",\n  \"20140704\",\n  \"20140707\",\n  \"20140708\",\n  \"20140709\",\n  \"20140710\",\n  \"20140711\",\n  \"20140714\",\n  \"20140715\",\n  \"20140716\",\n  \"20140717\",\n  \"20140718\",\n  \"20140721\",\n  \"20140722\",\n  \"20140723\",\n  \"20140724\",\n  \"20140725\",\n  \"20140728\",\n  \"20140729\",\n  \"20140730\",\n  \"20140731\",\n  \"20140801\",\n  \"20140804\",\n  \"20140805\",\n  \"20140806\",\n  \"20140807\",\n  \"20140808\",\n  \"20140811\",\n  \"20140812\",\n  \"20140813\",\n  \"20140814\",\n  \"20140815\",\n  \"20140818\",\n  \"20140819\",\n  \"20140820\",\n  \"20140821\",\n  \"20140822\",\n  \"20140825\",\n  \"20140826\",\n  \"20140827\",\n  \"20140828\",\n  \"20140829\",\n  \"20140901\",\n  \"20140902\",\n  \"20140903\",\n  \"20140904\",\n  \"20140905\",\n  \"20140909\",\n  \"20140910\",\n  \"20140911\",\n  \"20140912\",\n  \"20140915\",\n  \"20140916\",\n  \"20140917\",\n  \"20140918\",\n  \"20140919\",\n  \"20140922\",\n  \"20140923\",\n  \"20140924\",\n  \"20140925\",\n  \"20140926\",\n  \"20140929\",\n  \"20140930\",\n  \"20141008\",\n  \"20141009\",\n  \"20141010\",\n  \"20141013\",\n  \"20141014\",\n  \"20141015\",\n  \"20141016\",\n  \"20141017\",\n  \"20141020\",\n  \"20141021\",\n  \"20141022\",\n  \"20141023\",\n  \"20141024\",\n  \"20141027\",\n  \"20141028\",\n  \"20141029\",\n  \"20141030\",\n  \"20141031\",\n  \"20141103\",\n  \"20141104\",\n  \"20141105\",\n  \"20141106\",\n  \"20141107\",\n  \"20141110\",\n  \"20141111\",\n  \"20141112\",\n  \"20141113\",\n  \"20141114\",\n  \"20141117\",\n  \"20141118\",\n  \"20141119\",\n  \"20141120\",\n  \"20141121\",\n  \"20141124\",\n  \"20141125\",\n  \"20141126\",\n  \"20141127\",\n  \"20141128\",\n  \"20141201\",\n  \"20141202\",\n  \"20141203\",\n  \"20141204\",\n  \"20141205\",\n  \"20141208\",\n  \"20141209\",\n  \"20141210\",\n  \"20141211\",\n  \"20141212\",\n  \"20141215\",\n  \"20141216\",\n  \"20141217\",\n  \"20141218\",\n  \"20141219\",\n  \"20141222\",\n  \"20141223\",\n  \"20141224\",\n  \"20141225\",\n  \"20141226\",\n  \"20141229\",\n  \"20141230\",\n  \"20141231\",\n  \"20150105\",\n  \"20150106\",\n  \"20150107\",\n  \"20150108\",\n  \"20150109\",\n  \"20150112\",\n  \"20150113\",\n  \"20150114\",\n  \"20150115\",\n  \"20150116\",\n  \"20150119\",\n  \"20150120\",\n  \"20150121\",\n  \"20150122\",\n  \"20150123\",\n  \"20150126\",\n  \"20150127\",\n  \"20150128\",\n  \"20150129\",\n  \"20150130\",\n  \"20150202\",\n  \"20150203\",\n  \"20150204\",\n  \"20150205\",\n  \"20150206\",\n  \"20150209\",\n  \"20150210\",\n  \"20150211\",\n  \"20150212\",\n  \"20150213\",\n  \"20150216\",\n  \"20150217\",\n  \"20150225\",\n  \"20150226\",\n  \"20150227\",\n  \"20150302\",\n  \"20150303\",\n  \"20150304\",\n  \"20150305\",\n  \"20150306\",\n  \"20150309\",\n  \"20150310\",\n  \"20150311\",\n  \"20150312\",\n  \"20150313\",\n  \"20150316\",\n  \"20150317\",\n  \"20150318\",\n  \"20150319\",\n  \"20150320\",\n  \"20150323\",\n  \"20150324\",\n  \"20150325\",\n  \"20150326\",\n  \"20150327\",\n  \"20150330\",\n  \"20150331\",\n  \"20150401\",\n  \"20150402\",\n  \"20150403\",\n  \"20150407\",\n  \"20150408\",\n  \"20150409\",\n  \"20150410\",\n  \"20150413\",\n  \"20150414\",\n  \"20150415\",\n  \"20150416\",\n  \"20150417\",\n  \"20150420\",\n  \"20150421\",\n  \"20150422\",\n  \"20150423\",\n  \"20150424\",\n  \"20150427\",\n  \"20150428\",\n  \"20150429\",\n  \"20150430\",\n  \"20150504\",\n  \"20150505\",\n  \"20150506\",\n  \"20150507\",\n  \"20150508\",\n  \"20150511\",\n  \"20150512\",\n  \"20150513\",\n  \"20150514\",\n  \"20150515\",\n  \"20150518\",\n  \"20150519\",\n  \"20150520\",\n  \"20150521\",\n  \"20150522\",\n  \"20150525\",\n  \"20150526\",\n  \"20150527\",\n  \"20150528\",\n  \"20150529\",\n  \"20150601\",\n  \"20150602\",\n  \"20150603\",\n  \"20150604\",\n  \"20150605\",\n  \"20150608\",\n  \"20150609\",\n  \"20150610\",\n  \"20150611\",\n  \"20150612\",\n  \"20150615\",\n  \"20150616\",\n  \"20150617\",\n  \"20150618\",\n  \"20150619\",\n  \"20150623\",\n  \"20150624\",\n  \"20150625\",\n  \"20150626\",\n  \"20150629\",\n  \"20150630\",\n  \"20150701\",\n  \"20150702\",\n  \"20150703\",\n  \"20150706\",\n  \"20150707\",\n  \"20150708\",\n  \"20150709\",\n  \"20150710\",\n  \"20150713\",\n  \"20150714\",\n  \"20150715\",\n  \"20150716\",\n  \"20150717\",\n  \"20150720\",\n  \"20150721\",\n  \"20150722\",\n  \"20150723\",\n  \"20150724\",\n  \"20150727\",\n  \"20150728\",\n  \"20150729\",\n  \"20150730\",\n  \"20150731\",\n  \"20150803\",\n  \"20150804\",\n  \"20150805\",\n  \"20150806\",\n  \"20150807\",\n  \"20150810\",\n  \"20150811\",\n  \"20150812\",\n  \"20150813\",\n  \"20150814\",\n  \"20150817\",\n  \"20150818\",\n  \"20150819\",\n  \"20150820\",\n  \"20150821\",\n  \"20150824\",\n  \"20150825\",\n  \"20150826\",\n  \"20150827\",\n  \"20150828\",\n  \"20150831\",\n  \"20150901\",\n  \"20150902\",\n  \"20150907\",\n  \"20150908\",\n  \"20150909\",\n  \"20150910\",\n  \"20150911\",\n  \"20150914\",\n  \"20150915\",\n  \"20150916\",\n  \"20150917\",\n  \"20150918\",\n  \"20150921\",\n  \"20150922\",\n  \"20150923\",\n  \"20150924\",\n  \"20150925\",\n  \"20150928\",\n  \"20150929\",\n  \"20150930\",\n  \"20151008\",\n  \"20151009\",\n  \"20151012\",\n  \"20151013\",\n  \"20151014\",\n  \"20151015\",\n  \"20151016\",\n  \"20151019\",\n  \"20151020\",\n  \"20151021\",\n  \"20151022\",\n  \"20151023\",\n  \"20151026\",\n  \"20151027\",\n  \"20151028\",\n  \"20151029\",\n  \"20151030\",\n  \"20151102\",\n  \"20151103\",\n  \"20151104\",\n  \"20151105\",\n  \"20151106\",\n  \"20151109\",\n  \"20151110\",\n  \"20151111\",\n  \"20151112\",\n  \"20151113\",\n  \"20151116\",\n  \"20151117\",\n  \"20151118\",\n  \"20151119\",\n  \"20151120\",\n  \"20151123\",\n  \"20151124\",\n  \"20151125\",\n  \"20151126\",\n  \"20151127\",\n  \"20151130\",\n  \"20151201\",\n  \"20151202\",\n  \"20151203\",\n  \"20151204\",\n  \"20151207\",\n  \"20151208\",\n  \"20151209\",\n  \"20151210\",\n  \"20151211\",\n  \"20151214\",\n  \"20151215\",\n  \"20151216\",\n  \"20151217\",\n  \"20151218\",\n  \"20151221\",\n  \"20151222\",\n  \"20151223\",\n  \"20151224\",\n  \"20151225\",\n  \"20151228\",\n  \"20151229\",\n  \"20151230\",\n  \"20151231\",\n  \"20160104\",\n  \"20160105\",\n  \"20160106\",\n  \"20160107\",\n  \"20160108\",\n  \"20160111\",\n  \"20160112\",\n  \"20160113\",\n  \"20160114\",\n  \"20160115\",\n  \"20160118\",\n  \"20160119\",\n  \"20160120\",\n  \"20160121\",\n  \"20160122\",\n  \"20160125\",\n  \"20160126\",\n  \"20160127\",\n  \"20160128\",\n  \"20160129\",\n  \"20160201\",\n  \"20160202\",\n  \"20160203\",\n  \"20160204\",\n  \"20160205\",\n  \"20160215\",\n  \"20160216\",\n  \"20160217\",\n  \"20160218\",\n  \"20160219\",\n  \"20160222\",\n  \"20160223\",\n  \"20160224\",\n  \"20160225\",\n  \"20160226\",\n  \"20160229\",\n  \"20160301\",\n  \"20160302\",\n  \"20160303\",\n  \"20160304\",\n  \"20160307\",\n  \"20160308\",\n  \"20160309\",\n  \"20160310\",\n  \"20160311\",\n  \"20160314\",\n  \"20160315\",\n  \"20160316\",\n  \"20160317\",\n  \"20160318\",\n  \"20160321\",\n  \"20160322\",\n  \"20160323\",\n  \"20160324\",\n  \"20160325\",\n  \"20160328\",\n  \"20160329\",\n  \"20160330\",\n  \"20160331\",\n  \"20160401\",\n  \"20160405\",\n  \"20160406\",\n  \"20160407\",\n  \"20160408\",\n  \"20160411\",\n  \"20160412\",\n  \"20160413\",\n  \"20160414\",\n  \"20160415\",\n  \"20160418\",\n  \"20160419\",\n  \"20160420\",\n  \"20160421\",\n  \"20160422\",\n  \"20160425\",\n  \"20160426\",\n  \"20160427\",\n  \"20160428\",\n  \"20160429\",\n  \"20160503\",\n  \"20160504\",\n  \"20160505\",\n  \"20160506\",\n  \"20160509\",\n  \"20160510\",\n  \"20160511\",\n  \"20160512\",\n  \"20160513\",\n  \"20160516\",\n  \"20160517\",\n  \"20160518\",\n  \"20160519\",\n  \"20160520\",\n  \"20160523\",\n  \"20160524\",\n  \"20160525\",\n  \"20160526\",\n  \"20160527\",\n  \"20160530\",\n  \"20160531\",\n  \"20160601\",\n  \"20160602\",\n  \"20160603\",\n  \"20160606\",\n  \"20160607\",\n  \"20160608\",\n  \"20160613\",\n  \"20160614\",\n  \"20160615\",\n  \"20160616\",\n  \"20160617\",\n  \"20160620\",\n  \"20160621\",\n  \"20160622\",\n  \"20160623\",\n  \"20160624\",\n  \"20160627\",\n  \"20160628\",\n  \"20160629\",\n  \"20160630\",\n  \"20160701\",\n  \"20160704\",\n  \"20160705\",\n  \"20160706\",\n  \"20160707\",\n  \"20160708\",\n  \"20160711\",\n  \"20160712\",\n  \"20160713\",\n  \"20160714\",\n  \"20160715\",\n  \"20160718\",\n  \"20160719\",\n  \"20160720\",\n  \"20160721\",\n  \"20160722\",\n  \"20160725\",\n  \"20160726\",\n  \"20160727\",\n  \"20160728\",\n  \"20160729\",\n  \"20160801\",\n  \"20160802\",\n  \"20160803\",\n  \"20160804\",\n  \"20160805\",\n  \"20160808\",\n  \"20160809\",\n  \"20160810\",\n  \"20160811\",\n  \"20160812\",\n  \"20160815\",\n  \"20160816\",\n  \"20160817\",\n  \"20160818\",\n  \"20160819\",\n  \"20160822\",\n  \"20160823\",\n  \"20160824\",\n  \"20160825\",\n  \"20160826\",\n  \"20160829\",\n  \"20160830\",\n  \"20160831\",\n  \"20160901\",\n  \"20160902\",\n  \"20160905\",\n  \"20160906\",\n  \"20160907\",\n  \"20160908\",\n  \"20160909\",\n  \"20160912\",\n  \"20160913\",\n  \"20160914\",\n  \"20160919\",\n  \"20160920\",\n  \"20160921\",\n  \"20160922\",\n  \"20160923\",\n  \"20160926\",\n  \"20160927\",\n  \"20160928\",\n  \"20160929\",\n  \"20160930\",\n  \"20161010\",\n  \"20161011\",\n  \"20161012\",\n  \"20161013\",\n  \"20161014\",\n  \"20161017\",\n  \"20161018\",\n  \"20161019\",\n  \"20161020\",\n  \"20161021\",\n  \"20161024\",\n  \"20161025\",\n  \"20161026\",\n  \"20161027\",\n  \"20161028\",\n  \"20161031\",\n  \"20161101\",\n  \"20161102\",\n  \"20161103\",\n  \"20161104\",\n  \"20161107\",\n  \"20161108\",\n  \"20161109\",\n  \"20161110\",\n  \"20161111\",\n  \"20161114\",\n  \"20161115\",\n  \"20161116\",\n  \"20161117\",\n  \"20161118\",\n  \"20161121\",\n  \"20161122\",\n  \"20161123\",\n  \"20161124\",\n  \"20161125\",\n  \"20161128\",\n  \"20161129\",\n  \"20161130\",\n  \"20161201\",\n  \"20161202\",\n  \"20161205\",\n  \"20161206\",\n  \"20161207\",\n  \"20161208\",\n  \"20161209\",\n  \"20161212\",\n  \"20161213\",\n  \"20161214\",\n  \"20161215\",\n  \"20161216\",\n  \"20161219\",\n  \"20161220\",\n  \"20161221\",\n  \"20161222\",\n  \"20161223\",\n  \"20161226\",\n  \"20161227\",\n  \"20161228\",\n  \"20161229\",\n  \"20161230\",\n  \"20170103\",\n  \"20170104\",\n  \"20170105\",\n  \"20170106\",\n  \"20170109\",\n  \"20170110\",\n  \"20170111\",\n  \"20170112\",\n  \"20170113\",\n  \"20170116\",\n  \"20170117\",\n  \"20170118\",\n  \"20170119\",\n  \"20170120\",\n  \"20170123\",\n  \"20170124\",\n  \"20170125\",\n  \"20170126\",\n  \"20170203\",\n  \"20170206\",\n  \"20170207\",\n  \"20170208\",\n  \"20170209\",\n  \"20170210\",\n  \"20170213\",\n  \"20170214\",\n  \"20170215\",\n  \"20170216\",\n  \"20170217\",\n  \"20170220\",\n  \"20170221\",\n  \"20170222\",\n  \"20170223\",\n  \"20170224\",\n  \"20170227\",\n  \"20170228\",\n  \"20170301\",\n  \"20170302\",\n  \"20170303\",\n  \"20170306\",\n  \"20170307\",\n  \"20170308\",\n  \"20170309\",\n  \"20170310\",\n  \"20170313\",\n  \"20170314\",\n  \"20170315\",\n  \"20170316\",\n  \"20170317\",\n  \"20170320\",\n  \"20170321\",\n  \"20170322\",\n  \"20170323\",\n  \"20170324\",\n  \"20170327\",\n  \"20170328\",\n  \"20170329\",\n  \"20170330\",\n  \"20170331\",\n  \"20170405\",\n  \"20170406\",\n  \"20170407\",\n  \"20170410\",\n  \"20170411\",\n  \"20170412\",\n  \"20170413\",\n  \"20170414\",\n  \"20170417\",\n  \"20170418\",\n  \"20170419\",\n  \"20170420\",\n  \"20170421\",\n  \"20170424\",\n  \"20170425\",\n  \"20170426\",\n  \"20170427\",\n  \"20170428\",\n  \"20170502\",\n  \"20170503\",\n  \"20170504\",\n  \"20170505\",\n  \"20170508\",\n  \"20170509\",\n  \"20170510\",\n  \"20170511\",\n  \"20170512\",\n  \"20170515\",\n  \"20170516\",\n  \"20170517\",\n  \"20170518\",\n  \"20170519\",\n  \"20170522\",\n  \"20170523\",\n  \"20170524\",\n  \"20170525\",\n  \"20170526\",\n  \"20170531\",\n  \"20170601\",\n  \"20170602\",\n  \"20170605\",\n  \"20170606\",\n  \"20170607\",\n  \"20170608\",\n  \"20170609\",\n  \"20170612\",\n  \"20170613\",\n  \"20170614\",\n  \"20170615\",\n  \"20170616\",\n  \"20170619\",\n  \"20170620\",\n  \"20170621\",\n  \"20170622\",\n  \"20170623\",\n  \"20170626\",\n  \"20170627\",\n  \"20170628\",\n  \"20170629\",\n  \"20170630\",\n  \"20170703\",\n  \"20170704\",\n  \"20170705\",\n  \"20170706\",\n  \"20170707\",\n  \"20170710\",\n  \"20170711\",\n  \"20170712\",\n  \"20170713\",\n  \"20170714\",\n  \"20170717\",\n  \"20170718\",\n  \"20170719\",\n  \"20170720\",\n  \"20170721\",\n  \"20170724\",\n  \"20170725\",\n  \"20170726\",\n  \"20170727\",\n  \"20170728\",\n  \"20170731\",\n  \"20170801\",\n  \"20170802\",\n  \"20170803\",\n  \"20170804\",\n  \"20170807\",\n  \"20170808\",\n  \"20170809\",\n  \"20170810\",\n  \"20170811\",\n  \"20170814\",\n  \"20170815\",\n  \"20170816\",\n  \"20170817\",\n  \"20170818\",\n  \"20170821\",\n  \"20170822\",\n  \"20170823\",\n  \"20170824\",\n  \"20170825\",\n  \"20170828\",\n  \"20170829\",\n  \"20170830\",\n  \"20170831\",\n  \"20170901\",\n  \"20170904\",\n  \"20170905\",\n  \"20170906\",\n  \"20170907\",\n  \"20170908\",\n  \"20170911\",\n  \"20170912\",\n  \"20170913\",\n  \"20170914\",\n  \"20170915\",\n  \"20170918\",\n  \"20170919\",\n  \"20170920\",\n  \"20170921\",\n  \"20170922\",\n  \"20170925\",\n  \"20170926\",\n  \"20170927\",\n  \"20170928\",\n  \"20170929\",\n  \"20171009\",\n  \"20171010\",\n  \"20171011\",\n  \"20171012\",\n  \"20171013\",\n  \"20171016\",\n  \"20171017\",\n  \"20171018\",\n  \"20171019\",\n  \"20171020\",\n  \"20171023\",\n  \"20171024\",\n  \"20171025\",\n  \"20171026\",\n  \"20171027\",\n  \"20171030\",\n  \"20171031\",\n  \"20171101\",\n  \"20171102\",\n  \"20171103\",\n  \"20171106\",\n  \"20171107\",\n  \"20171108\",\n  \"20171109\",\n  \"20171110\",\n  \"20171113\",\n  \"20171114\",\n  \"20171115\",\n  \"20171116\",\n  \"20171117\",\n  \"20171120\",\n  \"20171121\",\n  \"20171122\",\n  \"20171123\",\n  \"20171124\",\n  \"20171127\",\n  \"20171128\",\n  \"20171129\",\n  \"20171130\",\n  \"20171201\",\n  \"20171204\",\n  \"20171205\",\n  \"20171206\",\n  \"20171207\",\n  \"20171208\",\n  \"20171211\",\n  \"20171212\",\n  \"20171213\",\n  \"20171214\",\n  \"20171215\",\n  \"20171218\",\n  \"20171219\",\n  \"20171220\",\n  \"20171221\",\n  \"20171222\",\n  \"20171225\",\n  \"20171226\",\n  \"20171227\",\n  \"20171228\",\n  \"20171229\",\n  \"20180102\",\n  \"20180103\",\n  \"20180104\",\n  \"20180105\",\n  \"20180108\",\n  \"20180109\",\n  \"20180110\",\n  \"20180111\",\n  \"20180112\",\n  \"20180115\",\n  \"20180116\",\n  \"20180117\",\n  \"20180118\",\n  \"20180119\",\n  \"20180122\",\n  \"20180123\",\n  \"20180124\",\n  \"20180125\",\n  \"20180126\",\n  \"20180129\",\n  \"20180130\",\n  \"20180131\",\n  \"20180201\",\n  \"20180202\",\n  \"20180205\",\n  \"20180206\",\n  \"20180207\",\n  \"20180208\",\n  \"20180209\",\n  \"20180212\",\n  \"20180213\",\n  \"20180214\",\n  \"20180222\",\n  \"20180223\",\n  \"20180226\",\n  \"20180227\",\n  \"20180228\",\n  \"20180301\",\n  \"20180302\",\n  \"20180305\",\n  \"20180306\",\n  \"20180307\",\n  \"20180308\",\n  \"20180309\",\n  \"20180312\",\n  \"20180313\",\n  \"20180314\",\n  \"20180315\",\n  \"20180316\",\n  \"20180319\",\n  \"20180320\",\n  \"20180321\",\n  \"20180322\",\n  \"20180323\",\n  \"20180326\",\n  \"20180327\",\n  \"20180328\",\n  \"20180329\",\n  \"20180330\",\n  \"20180402\",\n  \"20180403\",\n  \"20180404\",\n  \"20180409\",\n  \"20180410\",\n  \"20180411\",\n  \"20180412\",\n  \"20180413\",\n  \"20180416\",\n  \"20180417\",\n  \"20180418\",\n  \"20180419\",\n  \"20180420\",\n  \"20180423\",\n  \"20180424\",\n  \"20180425\",\n  \"20180426\",\n  \"20180427\",\n  \"20180502\",\n  \"20180503\",\n  \"20180504\",\n  \"20180507\",\n  \"20180508\",\n  \"20180509\",\n  \"20180510\",\n  \"20180511\",\n  \"20180514\",\n  \"20180515\",\n  \"20180516\",\n  \"20180517\",\n  \"20180518\",\n  \"20180521\",\n  \"20180522\",\n  \"20180523\",\n  \"20180524\",\n  \"20180525\",\n  \"20180528\",\n  \"20180529\",\n  \"20180530\",\n  \"20180531\",\n  \"20180601\",\n  \"20180604\",\n  \"20180605\",\n  \"20180606\",\n  \"20180607\",\n  \"20180608\",\n  \"20180611\",\n  \"20180612\",\n  \"20180613\",\n  \"20180614\",\n  \"20180615\",\n  \"20180619\",\n  \"20180620\",\n  \"20180621\",\n  \"20180622\",\n  \"20180625\",\n  \"20180626\",\n  \"20180627\",\n  \"20180628\",\n  \"20180629\",\n  \"20180702\",\n  \"20180703\",\n  \"20180704\",\n  \"20180705\",\n  \"20180706\",\n  \"20180709\",\n  \"20180710\",\n  \"20180711\",\n  \"20180712\",\n  \"20180713\",\n  \"20180716\",\n  \"20180717\",\n  \"20180718\",\n  \"20180719\",\n  \"20180720\",\n  \"20180723\",\n  \"20180724\",\n  \"20180725\",\n  \"20180726\",\n  \"20180727\",\n  \"20180730\",\n  \"20180731\",\n  \"20180801\",\n  \"20180802\",\n  \"20180803\",\n  \"20180806\",\n  \"20180807\",\n  \"20180808\",\n  \"20180809\",\n  \"20180810\",\n  \"20180813\",\n  \"20180814\",\n  \"20180815\",\n  \"20180816\",\n  \"20180817\",\n  \"20180820\",\n  \"20180821\",\n  \"20180822\",\n  \"20180823\",\n  \"20180824\",\n  \"20180827\",\n  \"20180828\",\n  \"20180829\",\n  \"20180830\",\n  \"20180831\",\n  \"20180903\",\n  \"20180904\",\n  \"20180905\",\n  \"20180906\",\n  \"20180907\",\n  \"20180910\",\n  \"20180911\",\n  \"20180912\",\n  \"20180913\",\n  \"20180914\",\n  \"20180917\",\n  \"20180918\",\n  \"20180919\",\n  \"20180920\",\n  \"20180921\",\n  \"20180925\",\n  \"20180926\",\n  \"20180927\",\n  \"20180928\",\n  \"20181008\",\n  \"20181009\",\n  \"20181010\",\n  \"20181011\",\n  \"20181012\",\n  \"20181015\",\n  \"20181016\",\n  \"20181017\",\n  \"20181018\",\n  \"20181019\",\n  \"20181022\",\n  \"20181023\",\n  \"20181024\",\n  \"20181025\",\n  \"20181026\",\n  \"20181029\",\n  \"20181030\",\n  \"20181031\",\n  \"20181101\",\n  \"20181102\",\n  \"20181105\",\n  \"20181106\",\n  \"20181107\",\n  \"20181108\",\n  \"20181109\",\n  \"20181112\",\n  \"20181113\",\n  \"20181114\",\n  \"20181115\",\n  \"20181116\",\n  \"20181119\",\n  \"20181120\",\n  \"20181121\",\n  \"20181122\",\n  \"20181123\",\n  \"20181126\",\n  \"20181127\",\n  \"20181128\",\n  \"20181129\",\n  \"20181130\",\n  \"20181203\",\n  \"20181204\",\n  \"20181205\",\n  \"20181206\",\n  \"20181207\",\n  \"20181210\",\n  \"20181211\",\n  \"20181212\",\n  \"20181213\",\n  \"20181214\",\n  \"20181217\",\n  \"20181218\",\n  \"20181219\",\n  \"20181220\",\n  \"20181221\",\n  \"20181224\",\n  \"20181225\",\n  \"20181226\",\n  \"20181227\",\n  \"20181228\",\n  \"20190102\",\n  \"20190103\",\n  \"20190104\",\n  \"20190107\",\n  \"20190108\",\n  \"20190109\",\n  \"20190110\",\n  \"20190111\",\n  \"20190114\",\n  \"20190115\",\n  \"20190116\",\n  \"20190117\",\n  \"20190118\",\n  \"20190121\",\n  \"20190122\",\n  \"20190123\",\n  \"20190124\",\n  \"20190125\",\n  \"20190128\",\n  \"20190129\",\n  \"20190130\",\n  \"20190131\",\n  \"20190201\",\n  \"20190211\",\n  \"20190212\",\n  \"20190213\",\n  \"20190214\",\n  \"20190215\",\n  \"20190218\",\n  \"20190219\",\n  \"20190220\",\n  \"20190221\",\n  \"20190222\",\n  \"20190225\",\n  \"20190226\",\n  \"20190227\",\n  \"20190228\",\n  \"20190301\",\n  \"20190304\",\n  \"20190305\",\n  \"20190306\",\n  \"20190307\",\n  \"20190308\",\n  \"20190311\",\n  \"20190312\",\n  \"20190313\",\n  \"20190314\",\n  \"20190315\",\n  \"20190318\",\n  \"20190319\",\n  \"20190320\",\n  \"20190321\",\n  \"20190322\",\n  \"20190325\",\n  \"20190326\",\n  \"20190327\",\n  \"20190328\",\n  \"20190329\",\n  \"20190401\",\n  \"20190402\",\n  \"20190403\",\n  \"20190404\",\n  \"20190408\",\n  \"20190409\",\n  \"20190410\",\n  \"20190411\",\n  \"20190412\",\n  \"20190415\",\n  \"20190416\",\n  \"20190417\",\n  \"20190418\",\n  \"20190419\",\n  \"20190422\",\n  \"20190423\",\n  \"20190424\",\n  \"20190425\",\n  \"20190426\",\n  \"20190429\",\n  \"20190430\",\n  \"20190506\",\n  \"20190507\",\n  \"20190508\",\n  \"20190509\",\n  \"20190510\",\n  \"20190513\",\n  \"20190514\",\n  \"20190515\",\n  \"20190516\",\n  \"20190517\",\n  \"20190520\",\n  \"20190521\",\n  \"20190522\",\n  \"20190523\",\n  \"20190524\",\n  \"20190527\",\n  \"20190528\",\n  \"20190529\",\n  \"20190530\",\n  \"20190531\",\n  \"20190603\",\n  \"20190604\",\n  \"20190605\",\n  \"20190606\",\n  \"20190610\",\n  \"20190611\",\n  \"20190612\",\n  \"20190613\",\n  \"20190614\",\n  \"20190617\",\n  \"20190618\",\n  \"20190619\",\n  \"20190620\",\n  \"20190621\",\n  \"20190624\",\n  \"20190625\",\n  \"20190626\",\n  \"20190627\",\n  \"20190628\",\n  \"20190701\",\n  \"20190702\",\n  \"20190703\",\n  \"20190704\",\n  \"20190705\",\n  \"20190708\",\n  \"20190709\",\n  \"20190710\",\n  \"20190711\",\n  \"20190712\",\n  \"20190715\",\n  \"20190716\",\n  \"20190717\",\n  \"20190718\",\n  \"20190719\",\n  \"20190722\",\n  \"20190723\",\n  \"20190724\",\n  \"20190725\",\n  \"20190726\",\n  \"20190729\",\n  \"20190730\",\n  \"20190731\",\n  \"20190801\",\n  \"20190802\",\n  \"20190805\",\n  \"20190806\",\n  \"20190807\",\n  \"20190808\",\n  \"20190809\",\n  \"20190812\",\n  \"20190813\",\n  \"20190814\",\n  \"20190815\",\n  \"20190816\",\n  \"20190819\",\n  \"20190820\",\n  \"20190821\",\n  \"20190822\",\n  \"20190823\",\n  \"20190826\",\n  \"20190827\",\n  \"20190828\",\n  \"20190829\",\n  \"20190830\",\n  \"20190902\",\n  \"20190903\",\n  \"20190904\",\n  \"20190905\",\n  \"20190906\",\n  \"20190909\",\n  \"20190910\",\n  \"20190911\",\n  \"20190912\",\n  \"20190916\",\n  \"20190917\",\n  \"20190918\",\n  \"20190919\",\n  \"20190920\",\n  \"20190923\",\n  \"20190924\",\n  \"20190925\",\n  \"20190926\",\n  \"20190927\",\n  \"20190930\",\n  \"20191008\",\n  \"20191009\",\n  \"20191010\",\n  \"20191011\",\n  \"20191014\",\n  \"20191015\",\n  \"20191016\",\n  \"20191017\",\n  \"20191018\",\n  \"20191021\",\n  \"20191022\",\n  \"20191023\",\n  \"20191024\",\n  \"20191025\",\n  \"20191028\",\n  \"20191029\",\n  \"20191030\",\n  \"20191031\",\n  \"20191101\",\n  \"20191104\",\n  \"20191105\",\n  \"20191106\",\n  \"20191107\",\n  \"20191108\",\n  \"20191111\",\n  \"20191112\",\n  \"20191113\",\n  \"20191114\",\n  \"20191115\",\n  \"20191118\",\n  \"20191119\",\n  \"20191120\",\n  \"20191121\",\n  \"20191122\",\n  \"20191125\",\n  \"20191126\",\n  \"20191127\",\n  \"20191128\",\n  \"20191129\",\n  \"20191202\",\n  \"20191203\",\n  \"20191204\",\n  \"20191205\",\n  \"20191206\",\n  \"20191209\",\n  \"20191210\",\n  \"20191211\",\n  \"20191212\",\n  \"20191213\",\n  \"20191216\",\n  \"20191217\",\n  \"20191218\",\n  \"20191219\",\n  \"20191220\",\n  \"20191223\",\n  \"20191224\",\n  \"20191225\",\n  \"20191226\",\n  \"20191227\",\n  \"20191230\",\n  \"20191231\",\n  \"20200102\",\n  \"20200103\",\n  \"20200106\",\n  \"20200107\",\n  \"20200108\",\n  \"20200109\",\n  \"20200110\",\n  \"20200113\",\n  \"20200114\",\n  \"20200115\",\n  \"20200116\",\n  \"20200117\",\n  \"20200120\",\n  \"20200121\",\n  \"20200122\",\n  \"20200123\",\n  \"20200203\",\n  \"20200204\",\n  \"20200205\",\n  \"20200206\",\n  \"20200207\",\n  \"20200210\",\n  \"20200211\",\n  \"20200212\",\n  \"20200213\",\n  \"20200214\",\n  \"20200217\",\n  \"20200218\",\n  \"20200219\",\n  \"20200220\",\n  \"20200221\",\n  \"20200224\",\n  \"20200225\",\n  \"20200226\",\n  \"20200227\",\n  \"20200228\",\n  \"20200302\",\n  \"20200303\",\n  \"20200304\",\n  \"20200305\",\n  \"20200306\",\n  \"20200309\",\n  \"20200310\",\n  \"20200311\",\n  \"20200312\",\n  \"20200313\",\n  \"20200316\",\n  \"20200317\",\n  \"20200318\",\n  \"20200319\",\n  \"20200320\",\n  \"20200323\",\n  \"20200324\",\n  \"20200325\",\n  \"20200326\",\n  \"20200327\",\n  \"20200330\",\n  \"20200331\",\n  \"20200401\",\n  \"20200402\",\n  \"20200403\",\n  \"20200407\",\n  \"20200408\",\n  \"20200409\",\n  \"20200410\",\n  \"20200413\",\n  \"20200414\",\n  \"20200415\",\n  \"20200416\",\n  \"20200417\",\n  \"20200420\",\n  \"20200421\",\n  \"20200422\",\n  \"20200423\",\n  \"20200424\",\n  \"20200427\",\n  \"20200428\",\n  \"20200429\",\n  \"20200430\",\n  \"20200506\",\n  \"20200507\",\n  \"20200508\",\n  \"20200511\",\n  \"20200512\",\n  \"20200513\",\n  \"20200514\",\n  \"20200515\",\n  \"20200518\",\n  \"20200519\",\n  \"20200520\",\n  \"20200521\",\n  \"20200522\",\n  \"20200525\",\n  \"20200526\",\n  \"20200527\",\n  \"20200528\",\n  \"20200529\",\n  \"20200601\",\n  \"20200602\",\n  \"20200603\",\n  \"20200604\",\n  \"20200605\",\n  \"20200608\",\n  \"20200609\",\n  \"20200610\",\n  \"20200611\",\n  \"20200612\",\n  \"20200615\",\n  \"20200616\",\n  \"20200617\",\n  \"20200618\",\n  \"20200619\",\n  \"20200622\",\n  \"20200623\",\n  \"20200624\",\n  \"20200629\",\n  \"20200630\",\n  \"20200701\",\n  \"20200702\",\n  \"20200703\",\n  \"20200706\",\n  \"20200707\",\n  \"20200708\",\n  \"20200709\",\n  \"20200710\",\n  \"20200713\",\n  \"20200714\",\n  \"20200715\",\n  \"20200716\",\n  \"20200717\",\n  \"20200720\",\n  \"20200721\",\n  \"20200722\",\n  \"20200723\",\n  \"20200724\",\n  \"20200727\",\n  \"20200728\",\n  \"20200729\",\n  \"20200730\",\n  \"20200731\",\n  \"20200803\",\n  \"20200804\",\n  \"20200805\",\n  \"20200806\",\n  \"20200807\",\n  \"20200810\",\n  \"20200811\",\n  \"20200812\",\n  \"20200813\",\n  \"20200814\",\n  \"20200817\",\n  \"20200818\",\n  \"20200819\",\n  \"20200820\",\n  \"20200821\",\n  \"20200824\",\n  \"20200825\",\n  \"20200826\",\n  \"20200827\",\n  \"20200828\",\n  \"20200831\",\n  \"20200901\",\n  \"20200902\",\n  \"20200903\",\n  \"20200904\",\n  \"20200907\",\n  \"20200908\",\n  \"20200909\",\n  \"20200910\",\n  \"20200911\",\n  \"20200914\",\n  \"20200915\",\n  \"20200916\",\n  \"20200917\",\n  \"20200918\",\n  \"20200921\",\n  \"20200922\",\n  \"20200923\",\n  \"20200924\",\n  \"20200925\",\n  \"20200928\",\n  \"20200929\",\n  \"20200930\",\n  \"20201009\",\n  \"20201012\",\n  \"20201013\",\n  \"20201014\",\n  \"20201015\",\n  \"20201016\",\n  \"20201019\",\n  \"20201020\",\n  \"20201021\",\n  \"20201022\",\n  \"20201023\",\n  \"20201026\",\n  \"20201027\",\n  \"20201028\",\n  \"20201029\",\n  \"20201030\",\n  \"20201102\",\n  \"20201103\",\n  \"20201104\",\n  \"20201105\",\n  \"20201106\",\n  \"20201109\",\n  \"20201110\",\n  \"20201111\",\n  \"20201112\",\n  \"20201113\",\n  \"20201116\",\n  \"20201117\",\n  \"20201118\",\n  \"20201119\",\n  \"20201120\",\n  \"20201123\",\n  \"20201124\",\n  \"20201125\",\n  \"20201126\",\n  \"20201127\",\n  \"20201130\",\n  \"20201201\",\n  \"20201202\",\n  \"20201203\",\n  \"20201204\",\n  \"20201207\",\n  \"20201208\",\n  \"20201209\",\n  \"20201210\",\n  \"20201211\",\n  \"20201214\",\n  \"20201215\",\n  \"20201216\",\n  \"20201217\",\n  \"20201218\",\n  \"20201221\",\n  \"20201222\",\n  \"20201223\",\n  \"20201224\",\n  \"20201225\",\n  \"20201228\",\n  \"20201229\",\n  \"20201230\",\n  \"20201231\",\n  \"20210104\",\n  \"20210105\",\n  \"20210106\",\n  \"20210107\",\n  \"20210108\",\n  \"20210111\",\n  \"20210112\",\n  \"20210113\",\n  \"20210114\",\n  \"20210115\",\n  \"20210118\",\n  \"20210119\",\n  \"20210120\",\n  \"20210121\",\n  \"20210122\",\n  \"20210125\",\n  \"20210126\",\n  \"20210127\",\n  \"20210128\",\n  \"20210129\",\n  \"20210201\",\n  \"20210202\",\n  \"20210203\",\n  \"20210204\",\n  \"20210205\",\n  \"20210208\",\n  \"20210209\",\n  \"20210210\",\n  \"20210218\",\n  \"20210219\",\n  \"20210222\",\n  \"20210223\",\n  \"20210224\",\n  \"20210225\",\n  \"20210226\",\n  \"20210301\",\n  \"20210302\",\n  \"20210303\",\n  \"20210304\",\n  \"20210305\",\n  \"20210308\",\n  \"20210309\",\n  \"20210310\",\n  \"20210311\",\n  \"20210312\",\n  \"20210315\",\n  \"20210316\",\n  \"20210317\",\n  \"20210318\",\n  \"20210319\",\n  \"20210322\",\n  \"20210323\",\n  \"20210324\",\n  \"20210325\",\n  \"20210326\",\n  \"20210329\",\n  \"20210330\",\n  \"20210331\",\n  \"20210401\",\n  \"20210402\",\n  \"20210406\",\n  \"20210407\",\n  \"20210408\",\n  \"20210409\",\n  \"20210412\",\n  \"20210413\",\n  \"20210414\",\n  \"20210415\",\n  \"20210416\",\n  \"20210419\",\n  \"20210420\",\n  \"20210421\",\n  \"20210422\",\n  \"20210423\",\n  \"20210426\",\n  \"20210427\",\n  \"20210428\",\n  \"20210429\",\n  \"20210430\",\n  \"20210506\",\n  \"20210507\",\n  \"20210510\",\n  \"20210511\",\n  \"20210512\",\n  \"20210513\",\n  \"20210514\",\n  \"20210517\",\n  \"20210518\",\n  \"20210519\",\n  \"20210520\",\n  \"20210521\",\n  \"20210524\",\n  \"20210525\",\n  \"20210526\",\n  \"20210527\",\n  \"20210528\",\n  \"20210531\",\n  \"20210601\",\n  \"20210602\",\n  \"20210603\",\n  \"20210604\",\n  \"20210607\",\n  \"20210608\",\n  \"20210609\",\n  \"20210610\",\n  \"20210611\",\n  \"20210615\",\n  \"20210616\",\n  \"20210617\",\n  \"20210618\",\n  \"20210621\",\n  \"20210622\",\n  \"20210623\",\n  \"20210624\",\n  \"20210625\",\n  \"20210628\",\n  \"20210629\",\n  \"20210630\",\n  \"20210701\",\n  \"20210702\",\n  \"20210705\",\n  \"20210706\",\n  \"20210707\",\n  \"20210708\",\n  \"20210709\",\n  \"20210712\",\n  \"20210713\",\n  \"20210714\",\n  \"20210715\",\n  \"20210716\",\n  \"20210719\",\n  \"20210720\",\n  \"20210721\",\n  \"20210722\",\n  \"20210723\",\n  \"20210726\",\n  \"20210727\",\n  \"20210728\",\n  \"20210729\",\n  \"20210730\",\n  \"20210802\",\n  \"20210803\",\n  \"20210804\",\n  \"20210805\",\n  \"20210806\",\n  \"20210809\",\n  \"20210810\",\n  \"20210811\",\n  \"20210812\",\n  \"20210813\",\n  \"20210816\",\n  \"20210817\",\n  \"20210818\",\n  \"20210819\",\n  \"20210820\",\n  \"20210823\",\n  \"20210824\",\n  \"20210825\",\n  \"20210826\",\n  \"20210827\",\n  \"20210830\",\n  \"20210831\",\n  \"20210901\",\n  \"20210902\",\n  \"20210903\",\n  \"20210906\",\n  \"20210907\",\n  \"20210908\",\n  \"20210909\",\n  \"20210910\",\n  \"20210913\",\n  \"20210914\",\n  \"20210915\",\n  \"20210916\",\n  \"20210917\",\n  \"20210922\",\n  \"20210923\",\n  \"20210924\",\n  \"20210927\",\n  \"20210928\",\n  \"20210929\",\n  \"20210930\",\n  \"20211008\",\n  \"20211011\",\n  \"20211012\",\n  \"20211013\",\n  \"20211014\",\n  \"20211015\",\n  \"20211018\",\n  \"20211019\",\n  \"20211020\",\n  \"20211021\",\n  \"20211022\",\n  \"20211025\",\n  \"20211026\",\n  \"20211027\",\n  \"20211028\",\n  \"20211029\",\n  \"20211101\",\n  \"20211102\",\n  \"20211103\",\n  \"20211104\",\n  \"20211105\",\n  \"20211108\",\n  \"20211109\",\n  \"20211110\",\n  \"20211111\",\n  \"20211112\",\n  \"20211115\",\n  \"20211116\",\n  \"20211117\",\n  \"20211118\",\n  \"20211119\",\n  \"20211122\",\n  \"20211123\",\n  \"20211124\",\n  \"20211125\",\n  \"20211126\",\n  \"20211129\",\n  \"20211130\",\n  \"20211201\",\n  \"20211202\",\n  \"20211203\",\n  \"20211206\",\n  \"20211207\",\n  \"20211208\",\n  \"20211209\",\n  \"20211210\",\n  \"20211213\",\n  \"20211214\",\n  \"20211215\",\n  \"20211216\",\n  \"20211217\",\n  \"20211220\",\n  \"20211221\",\n  \"20211222\",\n  \"20211223\",\n  \"20211224\",\n  \"20211227\",\n  \"20211228\",\n  \"20211229\",\n  \"20211230\",\n  \"20211231\",\n  \"20220104\",\n  \"20220105\",\n  \"20220106\",\n  \"20220107\",\n  \"20220110\",\n  \"20220111\",\n  \"20220112\",\n  \"20220113\",\n  \"20220114\",\n  \"20220117\",\n  \"20220118\",\n  \"20220119\",\n  \"20220120\",\n  \"20220121\",\n  \"20220124\",\n  \"20220125\",\n  \"20220126\",\n  \"20220127\",\n  \"20220128\",\n  \"20220207\",\n  \"20220208\",\n  \"20220209\",\n  \"20220210\",\n  \"20220211\",\n  \"20220214\",\n  \"20220215\",\n  \"20220216\",\n  \"20220217\",\n  \"20220218\",\n  \"20220221\",\n  \"20220222\",\n  \"20220223\",\n  \"20220224\",\n  \"20220225\",\n  \"20220228\",\n  \"20220301\",\n  \"20220302\",\n  \"20220303\",\n  \"20220304\",\n  \"20220307\",\n  \"20220308\",\n  \"20220309\",\n  \"20220310\",\n  \"20220311\",\n  \"20220314\",\n  \"20220315\",\n  \"20220316\",\n  \"20220317\",\n  \"20220318\",\n  \"20220321\",\n  \"20220322\",\n  \"20220323\",\n  \"20220324\",\n  \"20220325\",\n  \"20220328\",\n  \"20220329\",\n  \"20220330\",\n  \"20220331\",\n  \"20220401\",\n  \"20220406\",\n  \"20220407\",\n  \"20220408\",\n  \"20220411\",\n  \"20220412\",\n  \"20220413\",\n  \"20220414\",\n  \"20220415\",\n  \"20220418\",\n  \"20220419\",\n  \"20220420\",\n  \"20220421\",\n  \"20220422\",\n  \"20220425\",\n  \"20220426\",\n  \"20220427\",\n  \"20220428\",\n  \"20220429\",\n  \"20220505\",\n  \"20220506\",\n  \"20220509\",\n  \"20220510\",\n  \"20220511\",\n  \"20220512\",\n  \"20220513\",\n  \"20220516\",\n  \"20220517\",\n  \"20220518\",\n  \"20220519\",\n  \"20220520\",\n  \"20220523\",\n  \"20220524\",\n  \"20220525\",\n  \"20220526\",\n  \"20220527\",\n  \"20220530\",\n  \"20220531\",\n  \"20220601\",\n  \"20220602\",\n  \"20220606\",\n  \"20220607\",\n  \"20220608\",\n  \"20220609\",\n  \"20220610\",\n  \"20220613\",\n  \"20220614\",\n  \"20220615\",\n  \"20220616\",\n  \"20220617\",\n  \"20220620\",\n  \"20220621\",\n  \"20220622\",\n  \"20220623\",\n  \"20220624\",\n  \"20220627\",\n  \"20220628\",\n  \"20220629\",\n  \"20220630\",\n  \"20220701\",\n  \"20220704\",\n  \"20220705\",\n  \"20220706\",\n  \"20220707\",\n  \"20220708\",\n  \"20220711\",\n  \"20220712\",\n  \"20220713\",\n  \"20220714\",\n  \"20220715\",\n  \"20220718\",\n  \"20220719\",\n  \"20220720\",\n  \"20220721\",\n  \"20220722\",\n  \"20220725\",\n  \"20220726\",\n  \"20220727\",\n  \"20220728\",\n  \"20220729\",\n  \"20220801\",\n  \"20220802\",\n  \"20220803\",\n  \"20220804\",\n  \"20220805\",\n  \"20220808\",\n  \"20220809\",\n  \"20220810\",\n  \"20220811\",\n  \"20220812\",\n  \"20220815\",\n  \"20220816\",\n  \"20220817\",\n  \"20220818\",\n  \"20220819\",\n  \"20220822\",\n  \"20220823\",\n  \"20220824\",\n  \"20220825\",\n  \"20220826\",\n  \"20220829\",\n  \"20220830\",\n  \"20220831\",\n  \"20220901\",\n  \"20220902\",\n  \"20220905\",\n  \"20220906\",\n  \"20220907\",\n  \"20220908\",\n  \"20220909\",\n  \"20220913\",\n  \"20220914\",\n  \"20220915\",\n  \"20220916\",\n  \"20220919\",\n  \"20220920\",\n  \"20220921\",\n  \"20220922\",\n  \"20220923\",\n  \"20220926\",\n  \"20220927\",\n  \"20220928\",\n  \"20220929\",\n  \"20220930\",\n  \"20221010\",\n  \"20221011\",\n  \"20221012\",\n  \"20221013\",\n  \"20221014\",\n  \"20221017\",\n  \"20221018\",\n  \"20221019\",\n  \"20221020\",\n  \"20221021\",\n  \"20221024\",\n  \"20221025\",\n  \"20221026\",\n  \"20221027\",\n  \"20221028\",\n  \"20221031\",\n  \"20221101\",\n  \"20221102\",\n  \"20221103\",\n  \"20221104\",\n  \"20221107\",\n  \"20221108\",\n  \"20221109\",\n  \"20221110\",\n  \"20221111\",\n  \"20221114\",\n  \"20221115\",\n  \"20221116\",\n  \"20221117\",\n  \"20221118\",\n  \"20221121\",\n  \"20221122\",\n  \"20221123\",\n  \"20221124\",\n  \"20221125\",\n  \"20221128\",\n  \"20221129\",\n  \"20221130\",\n  \"20221201\",\n  \"20221202\",\n  \"20221205\",\n  \"20221206\",\n  \"20221207\",\n  \"20221208\",\n  \"20221209\",\n  \"20221212\",\n  \"20221213\",\n  \"20221214\",\n  \"20221215\",\n  \"20221216\",\n  \"20221219\",\n  \"20221220\",\n  \"20221221\",\n  \"20221222\",\n  \"20221223\",\n  \"20221226\",\n  \"20221227\",\n  \"20221228\",\n  \"20221229\",\n  \"20221230\",\n  \"20230103\",\n  \"20230104\",\n  \"20230105\",\n  \"20230106\",\n  \"20230109\",\n  \"20230110\",\n  \"20230111\",\n  \"20230112\",\n  \"20230113\",\n  \"20230116\",\n  \"20230117\",\n  \"20230118\",\n  \"20230119\",\n  \"20230120\",\n  \"20230130\",\n  \"20230131\",\n  \"20230201\",\n  \"20230202\",\n  \"20230203\",\n  \"20230206\",\n  \"20230207\",\n  \"20230208\",\n  \"20230209\",\n  \"20230210\",\n  \"20230213\",\n  \"20230214\",\n  \"20230215\",\n  \"20230216\",\n  \"20230217\",\n  \"20230220\",\n  \"20230221\",\n  \"20230222\",\n  \"20230223\",\n  \"20230224\",\n  \"20230227\",\n  \"20230228\",\n  \"20230301\",\n  \"20230302\",\n  \"20230303\",\n  \"20230306\",\n  \"20230307\",\n  \"20230308\",\n  \"20230309\",\n  \"20230310\",\n  \"20230313\",\n  \"20230314\",\n  \"20230315\",\n  \"20230316\",\n  \"20230317\",\n  \"20230320\",\n  \"20230321\",\n  \"20230322\",\n  \"20230323\",\n  \"20230324\",\n  \"20230327\",\n  \"20230328\",\n  \"20230329\",\n  \"20230330\",\n  \"20230331\",\n  \"20230403\",\n  \"20230404\",\n  \"20230406\",\n  \"20230407\",\n  \"20230410\",\n  \"20230411\",\n  \"20230412\",\n  \"20230413\",\n  \"20230414\",\n  \"20230417\",\n  \"20230418\",\n  \"20230419\",\n  \"20230420\",\n  \"20230421\",\n  \"20230424\",\n  \"20230425\",\n  \"20230426\",\n  \"20230427\",\n  \"20230428\",\n  \"20230504\",\n  \"20230505\",\n  \"20230508\",\n  \"20230509\",\n  \"20230510\",\n  \"20230511\",\n  \"20230512\",\n  \"20230515\",\n  \"20230516\",\n  \"20230517\",\n  \"20230518\",\n  \"20230519\",\n  \"20230522\",\n  \"20230523\",\n  \"20230524\",\n  \"20230525\",\n  \"20230526\",\n  \"20230529\",\n  \"20230530\",\n  \"20230531\",\n  \"20230601\",\n  \"20230602\",\n  \"20230605\",\n  \"20230606\",\n  \"20230607\",\n  \"20230608\",\n  \"20230609\",\n  \"20230612\",\n  \"20230613\",\n  \"20230614\",\n  \"20230615\",\n  \"20230616\",\n  \"20230619\",\n  \"20230620\",\n  \"20230621\",\n  \"20230626\",\n  \"20230627\",\n  \"20230628\",\n  \"20230629\",\n  \"20230630\",\n  \"20230703\",\n  \"20230704\",\n  \"20230705\",\n  \"20230706\",\n  \"20230707\",\n  \"20230710\",\n  \"20230711\",\n  \"20230712\",\n  \"20230713\",\n  \"20230714\",\n  \"20230717\",\n  \"20230718\",\n  \"20230719\",\n  \"20230720\",\n  \"20230721\",\n  \"20230724\",\n  \"20230725\",\n  \"20230726\",\n  \"20230727\",\n  \"20230728\",\n  \"20230731\",\n  \"20230801\",\n  \"20230802\",\n  \"20230803\",\n  \"20230804\",\n  \"20230807\",\n  \"20230808\",\n  \"20230809\",\n  \"20230810\",\n  \"20230811\",\n  \"20230814\",\n  \"20230815\",\n  \"20230816\",\n  \"20230817\",\n  \"20230818\",\n  \"20230821\",\n  \"20230822\",\n  \"20230823\",\n  \"20230824\",\n  \"20230825\",\n  \"20230828\",\n  \"20230829\",\n  \"20230830\",\n  \"20230831\",\n  \"20230901\",\n  \"20230904\",\n  \"20230905\",\n  \"20230906\",\n  \"20230907\",\n  \"20230908\",\n  \"20230911\",\n  \"20230912\",\n  \"20230913\",\n  \"20230914\",\n  \"20230915\",\n  \"20230918\",\n  \"20230919\",\n  \"20230920\",\n  \"20230921\",\n  \"20230922\",\n  \"20230925\",\n  \"20230926\",\n  \"20230927\",\n  \"20230928\",\n  \"20231009\",\n  \"20231010\",\n  \"20231011\",\n  \"20231012\",\n  \"20231013\",\n  \"20231016\",\n  \"20231017\",\n  \"20231018\",\n  \"20231019\",\n  \"20231020\",\n  \"20231023\",\n  \"20231024\",\n  \"20231025\",\n  \"20231026\",\n  \"20231027\",\n  \"20231030\",\n  \"20231031\",\n  \"20231101\",\n  \"20231102\",\n  \"20231103\",\n  \"20231106\",\n  \"20231107\",\n  \"20231108\",\n  \"20231109\",\n  \"20231110\",\n  \"20231113\",\n  \"20231114\",\n  \"20231115\",\n  \"20231116\",\n  \"20231117\",\n  \"20231120\",\n  \"20231121\",\n  \"20231122\",\n  \"20231123\",\n  \"20231124\",\n  \"20231127\",\n  \"20231128\",\n  \"20231129\",\n  \"20231130\",\n  \"20231201\",\n  \"20231204\",\n  \"20231205\",\n  \"20231206\",\n  \"20231207\",\n  \"20231208\",\n  \"20231211\",\n  \"20231212\",\n  \"20231213\",\n  \"20231214\",\n  \"20231215\",\n  \"20231218\",\n  \"20231219\",\n  \"20231220\",\n  \"20231221\",\n  \"20231222\",\n  \"20231225\",\n  \"20231226\",\n  \"20231227\",\n  \"20231228\",\n  \"20231229\",\n  \"20240102\",\n  \"20240103\",\n  \"20240104\",\n  \"20240105\",\n  \"20240108\",\n  \"20240109\",\n  \"20240110\",\n  \"20240111\",\n  \"20240112\",\n  \"20240115\",\n  \"20240116\",\n  \"20240117\",\n  \"20240118\",\n  \"20240119\",\n  \"20240122\",\n  \"20240123\",\n  \"20240124\",\n  \"20240125\",\n  \"20240126\",\n  \"20240129\",\n  \"20240130\",\n  \"20240131\",\n  \"20240201\",\n  \"20240202\",\n  \"20240205\",\n  \"20240206\",\n  \"20240207\",\n  \"20240208\",\n  \"20240219\",\n  \"20240220\",\n  \"20240221\",\n  \"20240222\",\n  \"20240223\",\n  \"20240226\",\n  \"20240227\",\n  \"20240228\",\n  \"20240229\",\n  \"20240301\",\n  \"20240304\",\n  \"20240305\",\n  \"20240306\",\n  \"20240307\",\n  \"20240308\",\n  \"20240311\",\n  \"20240312\",\n  \"20240313\",\n  \"20240314\",\n  \"20240315\",\n  \"20240318\",\n  \"20240319\",\n  \"20240320\",\n  \"20240321\",\n  \"20240322\",\n  \"20240325\",\n  \"20240326\",\n  \"20240327\",\n  \"20240328\",\n  \"20240329\",\n  \"20240401\",\n  \"20240402\",\n  \"20240403\",\n  \"20240408\",\n  \"20240409\",\n  \"20240410\",\n  \"20240411\",\n  \"20240412\",\n  \"20240415\",\n  \"20240416\",\n  \"20240417\",\n  \"20240418\",\n  \"20240419\",\n  \"20240422\",\n  \"20240423\",\n  \"20240424\",\n  \"20240425\",\n  \"20240426\",\n  \"20240429\",\n  \"20240430\",\n  \"20240506\",\n  \"20240507\",\n  \"20240508\",\n  \"20240509\",\n  \"20240510\",\n  \"20240513\",\n  \"20240514\",\n  \"20240515\",\n  \"20240516\",\n  \"20240517\",\n  \"20240520\",\n  \"20240521\",\n  \"20240522\",\n  \"20240523\",\n  \"20240524\",\n  \"20240527\",\n  \"20240528\",\n  \"20240529\",\n  \"20240530\",\n  \"20240531\",\n  \"20240603\",\n  \"20240604\",\n  \"20240605\",\n  \"20240606\",\n  \"20240607\",\n  \"20240611\",\n  \"20240612\",\n  \"20240613\",\n  \"20240614\",\n  \"20240617\",\n  \"20240618\",\n  \"20240619\",\n  \"20240620\",\n  \"20240621\",\n  \"20240624\",\n  \"20240625\",\n  \"20240626\",\n  \"20240627\",\n  \"20240628\",\n  \"20240701\",\n  \"20240702\",\n  \"20240703\",\n  \"20240704\",\n  \"20240705\",\n  \"20240708\",\n  \"20240709\",\n  \"20240710\",\n  \"20240711\",\n  \"20240712\",\n  \"20240715\",\n  \"20240716\",\n  \"20240717\",\n  \"20240718\",\n  \"20240719\",\n  \"20240722\",\n  \"20240723\",\n  \"20240724\",\n  \"20240725\",\n  \"20240726\",\n  \"20240729\",\n  \"20240730\",\n  \"20240731\",\n  \"20240801\",\n  \"20240802\",\n  \"20240805\",\n  \"20240806\",\n  \"20240807\",\n  \"20240808\",\n  \"20240809\",\n  \"20240812\",\n  \"20240813\",\n  \"20240814\",\n  \"20240815\",\n  \"20240816\",\n  \"20240819\",\n  \"20240820\",\n  \"20240821\",\n  \"20240822\",\n  \"20240823\",\n  \"20240826\",\n  \"20240827\",\n  \"20240828\",\n  \"20240829\",\n  \"20240830\",\n  \"20240902\",\n  \"20240903\",\n  \"20240904\",\n  \"20240905\",\n  \"20240906\",\n  \"20240909\",\n  \"20240910\",\n  \"20240911\",\n  \"20240912\",\n  \"20240913\",\n  \"20240918\",\n  \"20240919\",\n  \"20240920\",\n  \"20240923\",\n  \"20240924\",\n  \"20240925\",\n  \"20240926\",\n  \"20240927\",\n  \"20240930\",\n  \"20241008\",\n  \"20241009\",\n  \"20241010\",\n  \"20241011\",\n  \"20241014\",\n  \"20241015\",\n  \"20241016\",\n  \"20241017\",\n  \"20241018\",\n  \"20241021\",\n  \"20241022\",\n  \"20241023\",\n  \"20241024\",\n  \"20241025\",\n  \"20241028\",\n  \"20241029\",\n  \"20241030\",\n  \"20241031\",\n  \"20241101\",\n  \"20241104\",\n  \"20241105\",\n  \"20241106\",\n  \"20241107\",\n  \"20241108\",\n  \"20241111\",\n  \"20241112\",\n  \"20241113\",\n  \"20241114\",\n  \"20241115\",\n  \"20241118\",\n  \"20241119\",\n  \"20241120\",\n  \"20241121\",\n  \"20241122\",\n  \"20241125\",\n  \"20241126\",\n  \"20241127\",\n  \"20241128\",\n  \"20241129\",\n  \"20241202\",\n  \"20241203\",\n  \"20241204\",\n  \"20241205\",\n  \"20241206\",\n  \"20241209\",\n  \"20241210\",\n  \"20241211\",\n  \"20241212\",\n  \"20241213\",\n  \"20241216\",\n  \"20241217\",\n  \"20241218\",\n  \"20241219\",\n  \"20241220\",\n  \"20241223\",\n  \"20241224\",\n  \"20241225\",\n  \"20241226\",\n  \"20241227\",\n  \"20241230\",\n  \"20241231\",\n  \"20250102\",\n  \"20250103\",\n  \"20250106\",\n  \"20250107\",\n  \"20250108\",\n  \"20250109\",\n  \"20250110\",\n  \"20250113\",\n  \"20250114\",\n  \"20250115\",\n  \"20250116\",\n  \"20250117\",\n  \"20250120\",\n  \"20250121\",\n  \"20250122\",\n  \"20250123\",\n  \"20250124\",\n  \"20250127\",\n  \"20250205\",\n  \"20250206\",\n  \"20250207\",\n  \"20250210\",\n  \"20250211\",\n  \"20250212\",\n  \"20250213\",\n  \"20250214\",\n  \"20250217\",\n  \"20250218\",\n  \"20250219\",\n  \"20250220\",\n  \"20250221\",\n  \"20250224\",\n  \"20250225\",\n  \"20250226\",\n  \"20250227\",\n  \"20250228\",\n  \"20250303\",\n  \"20250304\",\n  \"20250305\",\n  \"20250306\",\n  \"20250307\",\n  \"20250310\",\n  \"20250311\",\n  \"20250312\",\n  \"20250313\",\n  \"20250314\",\n  \"20250317\",\n  \"20250318\",\n  \"20250319\",\n  \"20250320\",\n  \"20250321\",\n  \"20250324\",\n  \"20250325\",\n  \"20250326\",\n  \"20250327\",\n  \"20250328\",\n  \"20250331\",\n  \"20250401\",\n  \"20250402\",\n  \"20250403\",\n  \"20250407\",\n  \"20250408\",\n  \"20250409\",\n  \"20250410\",\n  \"20250411\",\n  \"20250414\",\n  \"20250415\",\n  \"20250416\",\n  \"20250417\",\n  \"20250418\",\n  \"20250421\",\n  \"20250422\",\n  \"20250423\",\n  \"20250424\",\n  \"20250425\",\n  \"20250428\",\n  \"20250429\",\n  \"20250430\",\n  \"20250506\",\n  \"20250507\",\n  \"20250508\",\n  \"20250509\",\n  \"20250512\",\n  \"20250513\",\n  \"20250514\",\n  \"20250515\",\n  \"20250516\",\n  \"20250519\",\n  \"20250520\",\n  \"20250521\",\n  \"20250522\",\n  \"20250523\",\n  \"20250526\",\n  \"20250527\",\n  \"20250528\",\n  \"20250529\",\n  \"20250530\",\n  \"20250603\",\n  \"20250604\",\n  \"20250605\",\n  \"20250606\",\n  \"20250609\",\n  \"20250610\",\n  \"20250611\",\n  \"20250612\",\n  \"20250613\",\n  \"20250616\",\n  \"20250617\",\n  \"20250618\",\n  \"20250619\",\n  \"20250620\",\n  \"20250623\",\n  \"20250624\",\n  \"20250625\",\n  \"20250626\",\n  \"20250627\",\n  \"20250630\",\n  \"20250701\",\n  \"20250702\",\n  \"20250703\",\n  \"20250704\",\n  \"20250707\",\n  \"20250708\",\n  \"20250709\",\n  \"20250710\",\n  \"20250711\",\n  \"20250714\",\n  \"20250715\",\n  \"20250716\",\n  \"20250717\",\n  \"20250718\",\n  \"20250721\",\n  \"20250722\",\n  \"20250723\",\n  \"20250724\",\n  \"20250725\",\n  \"20250728\",\n  \"20250729\",\n  \"20250730\",\n  \"20250731\",\n  \"20250801\",\n  \"20250804\",\n  \"20250805\",\n  \"20250806\",\n  \"20250807\",\n  \"20250808\",\n  \"20250811\",\n  \"20250812\",\n  \"20250813\",\n  \"20250814\",\n  \"20250815\",\n  \"20250818\",\n  \"20250819\",\n  \"20250820\",\n  \"20250821\",\n  \"20250822\",\n  \"20250825\",\n  \"20250826\",\n  \"20250827\",\n  \"20250828\",\n  \"20250829\",\n  \"20250901\",\n  \"20250902\",\n  \"20250903\",\n  \"20250904\",\n  \"20250905\",\n  \"20250908\",\n  \"20250909\",\n  \"20250910\",\n  \"20250911\",\n  \"20250912\",\n  \"20250915\",\n  \"20250916\",\n  \"20250917\",\n  \"20250918\",\n  \"20250919\",\n  \"20250922\",\n  \"20250923\",\n  \"20250924\",\n  \"20250925\",\n  \"20250926\",\n  \"20250929\",\n  \"20250930\",\n  \"20251009\",\n  \"20251010\",\n  \"20251013\",\n  \"20251014\",\n  \"20251015\",\n  \"20251016\",\n  \"20251017\",\n  \"20251020\",\n  \"20251021\",\n  \"20251022\",\n  \"20251023\",\n  \"20251024\",\n  \"20251027\",\n  \"20251028\",\n  \"20251029\",\n  \"20251030\",\n  \"20251031\",\n  \"20251103\",\n  \"20251104\",\n  \"20251105\",\n  \"20251106\",\n  \"20251107\",\n  \"20251110\",\n  \"20251111\",\n  \"20251112\",\n  \"20251113\",\n  \"20251114\",\n  \"20251117\",\n  \"20251118\",\n  \"20251119\",\n  \"20251120\",\n  \"20251121\",\n  \"20251124\",\n  \"20251125\",\n  \"20251126\",\n  \"20251127\",\n  \"20251128\",\n  \"20251201\",\n  \"20251202\",\n  \"20251203\",\n  \"20251204\",\n  \"20251205\",\n  \"20251208\",\n  \"20251209\",\n  \"20251210\",\n  \"20251211\",\n  \"20251212\",\n  \"20251215\",\n  \"20251216\",\n  \"20251217\",\n  \"20251218\",\n  \"20251219\",\n  \"20251222\",\n  \"20251223\",\n  \"20251224\",\n  \"20251225\",\n  \"20251226\",\n  \"20251229\",\n  \"20251230\",\n  \"20251231\",\n  \"20260105\",\n  \"20260106\",\n  \"20260107\",\n  \"20260108\",\n  \"20260109\",\n  \"20260112\",\n  \"20260113\",\n  \"20260114\",\n  \"20260115\",\n  \"20260116\",\n  \"20260119\",\n  \"20260120\",\n  \"20260121\",\n  \"20260122\",\n  \"20260123\",\n  \"20260126\",\n  \"20260127\",\n  \"20260128\",\n  \"20260129\",\n  \"20260130\",\n  \"20260202\",\n  \"20260203\",\n  \"20260204\",\n  \"20260205\",\n  \"20260206\",\n  \"20260209\",\n  \"20260210\",\n  \"20260211\",\n  \"20260212\",\n  \"20260213\",\n  \"20260224\",\n  \"20260225\",\n  \"20260226\",\n  \"20260227\",\n  \"20260302\",\n  \"20260303\",\n  \"20260304\",\n  \"20260305\",\n  \"20260306\",\n  \"20260309\",\n  \"20260310\",\n  \"20260311\",\n  \"20260312\",\n  \"20260313\",\n  \"20260316\",\n  \"20260317\",\n  \"20260318\",\n  \"20260319\",\n  \"20260320\",\n  \"20260323\",\n  \"20260324\",\n  \"20260325\",\n  \"20260326\",\n  \"20260327\",\n  \"20260330\",\n  \"20260331\",\n  \"20260401\",\n  \"20260402\",\n  \"20260403\",\n  \"20260407\",\n  \"20260408\",\n  \"20260409\",\n  \"20260410\",\n  \"20260413\",\n  \"20260414\",\n  \"20260415\",\n  \"20260416\",\n  \"20260417\",\n  \"20260420\",\n  \"20260421\",\n  \"20260422\",\n  \"20260423\",\n  \"20260424\",\n  \"20260427\",\n  \"20260428\",\n  \"20260429\",\n  \"20260430\",\n  \"20260506\",\n  \"20260507\",\n  \"20260508\",\n  \"20260511\",\n  \"20260512\",\n  \"20260513\",\n  \"20260514\",\n  \"20260515\",\n  \"20260518\",\n  \"20260519\",\n  \"20260520\",\n  \"20260521\",\n  \"20260522\",\n  \"20260525\",\n  \"20260526\",\n  \"20260527\",\n  \"20260528\",\n  \"20260529\",\n  \"20260601\",\n  \"20260602\",\n  \"20260603\",\n  \"20260604\",\n  \"20260605\",\n  \"20260608\",\n  \"20260609\",\n  \"20260610\",\n  \"20260611\",\n  \"20260612\",\n  \"20260615\",\n  \"20260616\",\n  \"20260617\",\n  \"20260618\",\n  \"20260622\",\n  \"20260623\",\n  \"20260624\",\n  \"20260625\",\n  \"20260626\",\n  \"20260629\",\n  \"20260630\",\n  \"20260701\",\n  \"20260702\",\n  \"20260703\",\n  \"20260706\",\n  \"20260707\",\n  \"20260708\",\n  \"20260709\",\n  \"20260710\",\n  \"20260713\",\n  \"20260714\",\n  \"20260715\",\n  \"20260716\",\n  \"20260717\",\n  \"20260720\",\n  \"20260721\",\n  \"20260722\",\n  \"20260723\",\n  \"20260724\",\n  \"20260727\",\n  \"20260728\",\n  \"20260729\",\n  \"20260730\",\n  \"20260731\",\n  \"20260803\",\n  \"20260804\",\n  \"20260805\",\n  \"20260806\",\n  \"20260807\",\n  \"20260810\",\n  \"20260811\",\n  \"20260812\",\n  \"20260813\",\n  \"20260814\",\n  \"20260817\",\n  \"20260818\",\n  \"20260819\",\n  \"20260820\",\n  \"20260821\",\n  \"20260824\",\n  \"20260825\",\n  \"20260826\",\n  \"20260827\",\n  \"20260828\",\n  \"20260831\",\n  \"20260901\",\n  \"20260902\",\n  \"20260903\",\n  \"20260904\",\n  \"20260907\",\n  \"20260908\",\n  \"20260909\",\n  \"20260910\",\n  \"20260911\",\n  \"20260914\",\n  \"20260915\",\n  \"20260916\",\n  \"20260917\",\n  \"20260918\",\n  \"20260921\",\n  \"20260922\",\n  \"20260923\",\n  \"20260924\",\n  \"20260928\",\n  \"20260929\",\n  \"20260930\",\n  \"20261008\",\n  \"20261009\",\n  \"20261012\",\n  \"20261013\",\n  \"20261014\",\n  \"20261015\",\n  \"20261016\",\n  \"20261019\",\n  \"20261020\",\n  \"20261021\",\n  \"20261022\",\n  \"20261023\",\n  \"20261026\",\n  \"20261027\",\n  \"20261028\",\n  \"20261029\",\n  \"20261030\",\n  \"20261102\",\n  \"20261103\",\n  \"20261104\",\n  \"20261105\",\n  \"20261106\",\n  \"20261109\",\n  \"20261110\",\n  \"20261111\",\n  \"20261112\",\n  \"20261113\",\n  \"20261116\",\n  \"20261117\",\n  \"20261118\",\n  \"20261119\",\n  \"20261120\",\n  \"20261123\",\n  \"20261124\",\n  \"20261125\",\n  \"20261126\",\n  \"20261127\",\n  \"20261130\",\n  \"20261201\",\n  \"20261202\",\n  \"20261203\",\n  \"20261204\",\n  \"20261207\",\n  \"20261208\",\n  \"20261209\",\n  \"20261210\",\n  \"20261211\",\n  \"20261214\",\n  \"20261215\",\n  \"20261216\",\n  \"20261217\",\n  \"20261218\",\n  \"20261221\",\n  \"20261222\",\n  \"20261223\",\n  \"20261224\",\n  \"20261225\",\n  \"20261228\",\n  \"20261229\",\n  \"20261230\",\n  \"20261231\"\n]\n"
  },
  {
    "path": "akshare/forex/__init__.py",
    "content": ""
  },
  {
    "path": "akshare/forex/cons.py",
    "content": "symbol_market_map = {\n    \"EURCNYC\": 120,\n    \"JPYZAR\": 119,\n    \"NZDCNYC\": 120,\n    \"CNYRUBC\": 120,\n    \"AUDCNYC\": 120,\n    \"JPYGBP\": 119,\n    \"JPYSGD\": 119,\n    \"JPYCNH\": 133,\n    \"JPYAUD\": 119,\n    \"USDBRL\": 119,\n    \"JPYEUR\": 119,\n    \"JPYTRY\": 119,\n    \"JPYCAD\": 119,\n    \"CHFZAR\": 119,\n    \"JPYHKD\": 119,\n    \"SEKEUR\": 119,\n    \"JPYUSD\": 119,\n    \"GBPCNYC\": 120,\n    \"JPYNZD\": 119,\n    \"CHFGBP\": 119,\n    \"USDIDR\": 119,\n    \"CHFSGD\": 119,\n    \"USDPLN\": 119,\n    \"CHFCNH\": 133,\n    \"SEKUSD\": 119,\n    \"CHFAUD\": 119,\n    \"USDKRW\": 119,\n    \"EURPLN\": 119,\n    \"USDHUF\": 119,\n    \"CHFCAD\": 119,\n    \"USDTHB\": 119,\n    \"CHFEUR\": 119,\n    \"JPYCNYC\": 120,\n    \"EURHUF\": 119,\n    \"CHFHKD\": 119,\n    \"SGDCNYC\": 120,\n    \"CHFUSD\": 119,\n    \"USDINR\": 119,\n    \"USDCZK\": 119,\n    \"CHFNZD\": 119,\n    \"USDMXN\": 119,\n    \"GBPPLN\": 119,\n    \"USDZAR\": 119,\n    \"JPYCHF\": 119,\n    \"EURCZK\": 119,\n    \"EURZAR\": 119,\n    \"CADCNYC\": 120,\n    \"NOKEUR\": 119,\n    \"NZDGBP\": 119,\n    \"NOKUSD\": 119,\n    \"NZDSGD\": 119,\n    \"USDGBP\": 119,\n    \"HKDGBP\": 119,\n    \"NZDCNH\": 133,\n    \"NZDAUD\": 119,\n    \"HKDSGD\": 119,\n    \"CNYSARC\": 120,\n    \"USDSGD\": 119,\n    \"CNYAEDC\": 120,\n    \"EURGBP\": 119,\n    \"CADGBP\": 119,\n    \"USDCNH\": 133,\n    \"CNYTRYC\": 120,\n    \"CADSGD\": 119,\n    \"USDAUD\": 119,\n    \"GBPZAR\": 119,\n    \"EURSGD\": 119,\n    \"HKDCNH\": 133,\n    \"NZDCAD\": 119,\n    \"CADCNH\": 133,\n    \"HKDAUD\": 119,\n    \"NZDEUR\": 119,\n    \"EURCNH\": 133,\n    \"EURAUD\": 119,\n    \"NZDHKD\": 119,\n    \"CADAUD\": 119,\n    \"AUDGBP\": 119,\n    \"USDDKK\": 119,\n    \"HKDCAD\": 119,\n    \"USDCAD\": 119,\n    \"AUDSGD\": 119,\n    \"USDTRY\": 119,\n    \"EURTRY\": 119,\n    \"USDEUR\": 119,\n    \"NZDUSD\": 119,\n    \"SGDGBP\": 119,\n    \"USDHKD\": 119,\n    \"AUDCNH\": 133,\n    \"EURDKK\": 119,\n    \"USDARS\": 119,\n    \"USDSAR\": 119,\n    \"TRYUSD\": 119,\n    \"TRYEUR\": 119,\n    \"SARUSD\": 119,\n    \"INRUSD\": 119,\n    \"HUFUSD\": 119,\n    \"HUFEUR\": 119,\n    \"HKDUSD\": 119,\n    \"HKDEUR\": 119,\n    \"HKDCNYC\": 120,\n    \"EURCAD\": 119,\n    \"DKKUSD\": 119,\n    \"DKKEUR\": 119,\n    \"CNYMOPC\": 120,\n    \"CNHSGD\": 133,\n    \"CNHGBP\": 133,\n    \"CNHAUD\": 133,\n    \"CADEUR\": 119,\n    \"SGDCNH\": 133,\n    \"EURHKD\": 119,\n    \"CADHKD\": 119,\n    \"USDCNYC\": 120,\n    \"GBPSGD\": 119,\n    \"EURUSD\": 119,\n    \"SGDAUD\": 119,\n    \"HKDNZD\": 119,\n    \"USDNZD\": 119,\n    \"GBPCNH\": 133,\n    \"CADUSD\": 119,\n    \"AUDCAD\": 119,\n    \"CNYTHBC\": 120,\n    \"CNHEUR\": 133,\n    \"GBPAUD\": 119,\n    \"AUDEUR\": 119,\n    \"CADNZD\": 119,\n    \"EURNZD\": 119,\n    \"CNHCAD\": 133,\n    \"AUDHKD\": 119,\n    \"SGDCAD\": 119,\n    \"AUDUSD\": 119,\n    \"SGDEUR\": 119,\n    \"CNHHKD\": 133,\n    \"GBPCAD\": 119,\n    \"CNHUSD\": 133,\n    \"SGDHKD\": 119,\n    \"GBPEUR\": 119,\n    \"SGDUSD\": 119,\n    \"AUDNZD\": 119,\n    \"GBPHKD\": 119,\n    \"GBPUSD\": 119,\n    \"CNHNZD\": 133,\n    \"CHFCNYC\": 120,\n    \"SGDNZD\": 119,\n    \"ZARGBP\": 119,\n    \"USDNOK\": 119,\n    \"GBPNZD\": 119,\n    \"CZKEUR\": 119,\n    \"EURNOK\": 119,\n    \"CHFJPY\": 119,\n    \"NZDCHF\": 119,\n    \"PLNGBP\": 119,\n    \"HKDCHF\": 119,\n    \"ZARUSD\": 119,\n    \"USDCHF\": 119,\n    \"ZAREUR\": 119,\n    \"MXNUSD\": 119,\n    \"EURCHF\": 119,\n    \"CADCHF\": 119,\n    \"CZKUSD\": 119,\n    \"CNYKRWC\": 120,\n    \"CNHCHF\": 133,\n    \"AUDCHF\": 119,\n    \"PLNEUR\": 119,\n    \"CNYMXNC\": 120,\n    \"SGDCHF\": 119,\n    \"PLNUSD\": 119,\n    \"USDSEK\": 119,\n    \"GBPCHF\": 119,\n    \"EURSEK\": 119,\n    \"CNYMYRC\": 120,\n    \"NZDJPY\": 119,\n    \"ZARCHF\": 119,\n    \"USDJPY\": 119,\n    \"THBUSD\": 119,\n    \"HKDJPY\": 119,\n    \"EURJPY\": 119,\n    \"CADJPY\": 119,\n    \"AUDJPY\": 119,\n    \"TRYJPY\": 119,\n    \"CNHJPY\": 133,\n    \"SGDJPY\": 119,\n    \"GBPJPY\": 119,\n    \"CNYZARC\": 120,\n    \"ZARJPY\": 119,\n    \"USDRUB\": 119,\n    \"CNYDKKC\": 120,\n    \"CNYNOKC\": 120,\n    \"CNYHUFC\": 120,\n    \"CNYPLNC\": 120,\n    \"CNYSEKC\": 120,\n}\n"
  },
  {
    "path": "akshare/forex/forex_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/6/23 15:00\nDesc: 东方财富网-行情中心-外汇市场-所有汇率\nhttps://quote.eastmoney.com/center/gridlist.html#forex_all\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.forex.cons import symbol_market_map\nfrom akshare.utils.func import fetch_paginated_data\n\n\ndef forex_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-外汇市场-所有汇率-实时行情数据\n    https://quote.eastmoney.com/center/gridlist.html#forex_all\n    :return: 实时行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"np\": \"1\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fs\": \"m:119,m:120,m:133\",\n        \"fields\": \"f12,f13,f14,f1,f2,f4,f3,f152,f17,f18,f15,f16\",\n        \"fid\": \"f3\",\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"dect\": \"1\",\n        \"wbp2u\": \"|0|0|0|web\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"f12\": \"代码\",\n            \"f14\": \"名称\",\n            \"f17\": \"今开\",\n            \"f4\": \"涨跌额\",\n            \"f3\": \"涨跌幅\",\n            \"f2\": \"最新价\",\n            \"f15\": \"最高\",\n            \"f16\": \"最低\",\n            \"f18\": \"昨收\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"昨收\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    return temp_df\n\n\ndef forex_hist_em(symbol: str = \"USDCNH\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-外汇市场-所有汇率-历史行情数据\n    https://quote.eastmoney.com/cnyrate/EURCNYC.html\n    :param symbol: 品种代码；可以通过 ak.forex_spot_em() 来获取所有可获取历史行情数据的品种代码\n    :type symbol: str\n    :return: 历史行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n    market_code = symbol_market_map[symbol]\n    params = {\n        \"secid\": f\"{market_code}.{symbol}\",\n        \"klt\": \"101\",\n        \"fqt\": \"1\",\n        \"lmt\": \"50000\",\n        \"end\": \"20500000\",\n        \"iscca\": \"1\",\n        \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64\",\n        \"ut\": \"f057cbcbce2a86e2866ab8877db1d059\",\n        \"forcect\": 1,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df[\"code\"] = data_json[\"data\"][\"code\"]\n    temp_df[\"name\"] = data_json[\"data\"][\"name\"]\n    temp_df.columns = [\n        \"日期\",\n        \"今开\",\n        \"最新价\",\n        \"最高\",\n        \"最低\",\n        \"-\",\n        \"-\",\n        \"振幅\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"代码\",\n        \"名称\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"代码\",\n            \"名称\",\n            \"今开\",\n            \"最新价\",\n            \"最高\",\n            \"最低\",\n            \"振幅\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    forex_spot_em_df = forex_spot_em()\n    print(forex_spot_em_df)\n\n    forex_hist_em_df = forex_hist_em(symbol=\"USDCNH\")\n    print(forex_hist_em_df)\n"
  },
  {
    "path": "akshare/fortune/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/12/10 21:55\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/fortune/fortune_500.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/8/4 17:22\nDesc: 历年世界 500 强榜单数据\nhttps://www.fortunechina.com/fortune500/index.htm\n特殊情况说明：\n2010年由于网页端没有公布公司所属的国家, 故 2010 年数据没有国家这列\n\"\"\"\n\nfrom functools import lru_cache\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\nfrom tqdm import tqdm\n\n\n@lru_cache()\ndef _fortune_rank_year_url_map() -> dict:\n    \"\"\"\n    年份和网址映射\n    https://www.fortunechina.com/fortune500/index.htm\n    :return: 年份和网址映射\n    :rtype: dict\n    \"\"\"\n    url = \"https://www.fortunechina.com/fortune500/index.htm\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    url_2023 = \"https://www.fortunechina.com/fortune500/c/2023-08/02/content_436874.htm\"\n    node_list = soup.find_all(name=\"div\", attrs={\"class\": \"swiper-slide\"})\n    url_list = [item.find(\"a\")[\"href\"] for item in node_list]\n    year_list = [item.find(\"a\").text for item in node_list]\n    year_url_map = dict(zip(year_list, url_list))\n    year_url_map[\"2023\"] = url_2023\n    return year_url_map\n\n\ndef fortune_rank(year: str = \"2015\") -> pd.DataFrame:\n    \"\"\"\n    财富 500 强公司从 1996 年开始的排行榜\n    https://www.fortunechina.com/fortune500/index.htm\n    :param year: str 年份\n    :return: pandas.DataFrame\n    \"\"\"\n    year_url_map = _fortune_rank_year_url_map()\n    url = year_url_map[year]\n    r = requests.get(url)\n    r.encoding = \"utf-8\"\n    if int(year) < 2007:\n        df = pd.read_html(StringIO(r.text))[0].iloc[1:-1,]\n        df.columns = pd.read_html(StringIO(r.text))[0].iloc[0, :].tolist()\n        return df\n    elif 2006 < int(year) < 2010:\n        df = pd.read_html(StringIO(r.text))[0].iloc[1:,]\n        df.columns = pd.read_html(StringIO(r.text))[0].iloc[0, :].tolist()\n        for page in tqdm(range(2, 11), leave=False):\n            # page =2\n            r = requests.get(url.rsplit(\".\", maxsplit=1)[0] + \"_\" + str(page) + \".htm\")\n            r.encoding = \"utf-8\"\n            temp_df = pd.read_html(StringIO(r.text))[0].iloc[1:,]\n            temp_df.columns = pd.read_html(StringIO(r.text))[0].iloc[0, :].tolist()\n            df = pd.concat(objs=[df, temp_df], ignore_index=True)\n        return df\n    else:\n        df = pd.read_html(StringIO(r.text))[0]\n        return df\n\n\nif __name__ == \"__main__\":\n    fortune_rank_df = fortune_rank(year=\"2023\")  # 2010 不一样\n    print(fortune_rank_df)\n\n    fortune_rank_df = fortune_rank(year=\"2022\")  # 2010 不一样\n    print(fortune_rank_df)\n\n    fortune_rank_df = fortune_rank(year=\"2008\")  # 2010 不一样\n    print(fortune_rank_df)\n\n    fortune_rank_df = fortune_rank(year=\"2008\")  # 2010 不一样\n    print(fortune_rank_df)\n\n    fortune_rank_df = fortune_rank(year=\"2009\")  # 2010 不一样\n    print(fortune_rank_df)\n\n    for item in range(1996, 2008):\n        print(item)\n        fortune_rank_df = fortune_rank(year=str(item))  # 2010 不一样\n        print(fortune_rank_df)\n\n    for item in range(2010, 2023):\n        print(item)\n        fortune_rank_df = fortune_rank(year=str(item))  # 2010 不一样\n        print(fortune_rank_df)\n"
  },
  {
    "path": "akshare/fortune/fortune_bloomberg.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/4/10 18:24\nDesc: 彭博亿万富豪指数\nhttps://www.bloomberg.com/billionaires/\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef index_bloomberg_billionaires_hist(year: str = \"2021\") -> pd.DataFrame:\n    \"\"\"\n    Bloomberg Billionaires Index\n    https://stats.areppim.com/stats/links_billionairexlists.htm\n    :param year: choice of {\"2021\", \"2019\", \"2018\", ...}\n    :type year: str\n    :return: 彭博亿万富豪指数历史数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://stats.areppim.com/listes/list_billionairesx{year[-2:]}xwor.htm\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, \"lxml\")\n    trs = soup.findAll(\"table\")[0].findAll(\"tr\")\n    heads = trs[1]\n    if \"Rank\" not in heads.text:\n        heads = trs[0]\n    dic_keys = []\n    dic = {}\n    for head in heads:\n        head = head.text\n        dic_keys.append(head)\n    for dic_key in dic_keys:\n        dic[dic_key] = []\n\n    for ll in trs:\n        item = ll.findAll(\"td\")\n        for i in range(len(item)):\n            v = item[i].text\n            if i == 0 and not v.isdigit():\n                break\n            dic[dic_keys[i]].append(v)\n\n    temp_df = pd.DataFrame(dic)\n    temp_df = temp_df.rename(\n        {\n            \"Rank\": \"rank\",\n            \"Name\": \"name\",\n            \"Age\": \"age\",\n            \"Citizenship\": \"country\",\n            \"Country\": \"country\",\n            \"Net Worth(bil US$)\": \"total_net_worth\",\n            \"Total net worth$Billion\": \"total_net_worth\",\n            \"$ Last change\": \"last_change\",\n            \"$ YTD change\": \"ytd_change\",\n            \"Industry\": \"industry\",\n        },\n        axis=1,\n    )\n    return temp_df\n\n\ndef index_bloomberg_billionaires() -> pd.DataFrame:\n    \"\"\"\n    Bloomberg Billionaires Index\n    https://www.bloomberg.com/billionaires/\n    :return: 彭博亿万富豪指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.bloomberg.com/billionaires\"\n    headers = {\n        \"accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\",\n        \"accept-encoding\": \"gzip, deflate, br\",\n        \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"cache-control\": \"no-cache\",\n        \"pragma\": \"no-cache\",\n        \"sec-fetch-dest\": \"document\",\n        \"sec-fetch-mode\": \"navigate\",\n        \"sec-fetch-site\": \"same-origin\",\n        \"sec-fetch-user\": \"?1\",\n        \"upgrade-insecure-requests\": \"1\",\n        \"referer\": \"https://www.bloomberg.com/\",\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, \"lxml\")\n    big_content_list = list()\n    soup_node = soup.find(attrs={\"class\": \"table-chart\"}).find_all(\n        attrs={\"class\": \"table-row\"}\n    )\n    for row in soup_node:\n        temp_content_list = row.text.strip().replace(\"\\n\", \"\").split(\"  \")\n        content_list = [item for item in temp_content_list if item != \"\"]\n        big_content_list.append(content_list)\n    temp_df = pd.DataFrame(big_content_list)\n    temp_df.columns = [\n        \"rank\",\n        \"name\",\n        \"total_net_worth\",\n        \"last_change\",\n        \"YTD_change\",\n        \"country\",\n        \"industry\",\n    ]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    index_bloomberg_billionaires_df = index_bloomberg_billionaires()\n    print(index_bloomberg_billionaires_df)\n\n    index_bloomberg_billionaires_hist_df = index_bloomberg_billionaires_hist(\n        year=\"2021\"\n    )\n    print(index_bloomberg_billionaires_hist_df)\n"
  },
  {
    "path": "akshare/fortune/fortune_forbes_500.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/1/26 15:10\nDesc: 福布斯中国-榜单\nhttps://www.forbeschina.com/lists\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef forbes_rank(symbol: str = \"2021福布斯中国创投人100\") -> pd.DataFrame:\n    \"\"\"\n    福布斯中国-榜单\n    https://www.forbeschina.com/lists\n    https://www.forbeschina.com/lists/1750\n    :param symbol: choice of {\"2020福布斯美国富豪榜\", \"2020福布斯新加坡富豪榜\", \"2020福布斯中国名人榜\", *}\n    :type symbol: str\n    :return: 具体指标的榜单\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.forbeschina.com/lists\"\n    r = requests.get(url, verify=False)\n    soup = BeautifulSoup(r.text, \"lxml\")\n    need_list = [\n        item.find_all(\"a\") for item in soup.find_all(\"div\", attrs={\"class\": \"col-sm-4\"})\n    ]\n    all_list = []\n    for item in need_list:\n        all_list.extend(item)\n    name_url_dict = dict(\n        zip(\n            [item.text.strip() for item in all_list],\n            [\"https://www.forbeschina.com\" + item[\"href\"] for item in all_list],\n        )\n    )\n    r = requests.get(name_url_dict[symbol], verify=False)\n    temp_df = pd.read_html(r.text)[0]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    forbes_rank_df = forbes_rank(symbol=\"2021福布斯中国香港富豪榜\")\n    print(forbes_rank_df)\n"
  },
  {
    "path": "akshare/fortune/fortune_hurun.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/12/22 20:00\nDesc: 胡润排行榜\nhttps://www.hurun.net/\n\"\"\"\n\nimport warnings\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef hurun_rank(indicator: str = \"胡润百富榜\", year: str = \"2023\") -> pd.DataFrame:\n    \"\"\"\n    胡润排行榜\n    https://www.hurun.net/CN/HuList/Index?num=3YwKs889SRIm\n    :param indicator: choice of {\"胡润百富榜\", \"胡润全球富豪榜\", \"胡润印度榜\", \"胡润全球独角兽榜\", \"全球瞪羚企业榜\", \"胡润Under30s创业领袖榜\", \"胡润中国500强民营企业\", \"胡润世界500强\", \"胡润艺术榜\"}\n    :type indicator: str\n    :param year: 指定年份; {\"胡润百富榜\": \"2014-至今\", \"胡润全球富豪榜\": \"2019-至今\", \"胡润印度榜\": \"2018-至今\", \"胡润全球独角兽榜\": \"2019-至今\", \"中国瞪羚企业榜\": \"2021-至今\", \"全球瞪羚企业榜\": \"2021-至今\", \"胡润Under30s创业领袖榜\": \"2019-至今\", \"胡润中国500强民营企业\": \"2019-至今\", \"胡润世界500强\": \"2020-至今\", \"胡润艺术榜\": \"2019-至今\"}\n    :type year: str\n    :return: 指定 indicator 和 year 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.hurun.net/zh-CN/Rank/HsRankDetails?pagetype=rich\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, \"lxml\")\n    url_list = []\n    for item in soup.find_all(\"ul\", attrs={\"class\": \"dropdown-menu\"}):\n        for inner_item in item.find_all(\"a\"):\n            url_list.append(\"https://www.hurun.net\" + inner_item[\"href\"])\n    name_list = []\n    for item in soup.find_all(\"ul\", attrs={\"class\": \"dropdown-menu\"}):\n        for inner_item in item.find_all(\"a\"):\n            name_list.append(inner_item.text.strip())\n\n    name_url_map = dict(zip(name_list, url_list))\n    r = requests.get(name_url_map[indicator])\n    soup = BeautifulSoup(r.text, \"lxml\")\n    code_list = [\n        item[\"value\"].split(\"=\")[2]\n        for item in soup.find(attrs={\"id\": \"exampleFormControlSelect1\"}).find_all(\n            \"option\"\n        )\n    ]\n    year_list = [\n        item.text.split(\" \")[0]\n        for item in soup.find(attrs={\"id\": \"exampleFormControlSelect1\"}).find_all(\n            \"option\"\n        )\n    ]\n    year_code_map = dict(zip(year_list, code_list))\n    params = {\n        \"num\": year_code_map[year],\n        \"search\": \"\",\n        \"offset\": \"0\",\n        \"limit\": \"20000\",\n    }\n    if year == \"2018\":\n        warnings.warn(\"正在下载中\")\n        offset = 0\n        limit = 20\n        big_df = pd.DataFrame()\n        while offset < 2200:\n            try:\n                params.update(\n                    {\n                        \"offset\": offset,\n                        \"limit\": limit,\n                    }\n                )\n                url = \"https://www.hurun.net/zh-CN/Rank/HsRankDetailsList\"\n                r = requests.get(url, params=params)\n                data_json = r.json()\n                temp_df = pd.DataFrame(data_json[\"rows\"])\n                offset = offset + 20\n                big_df = pd.concat([big_df, temp_df], ignore_index=True)\n            except requests.exceptions.JSONDecodeError:\n                offset = offset + 40\n                continue\n        big_df.rename(\n            columns={\n                \"hs_Rank_Rich_Ranking\": \"排名\",\n                \"hs_Rank_Rich_Wealth\": \"财富\",\n                \"hs_Rank_Rich_Ranking_Change\": \"排名变化\",\n                \"hs_Rank_Rich_ChaName_Cn\": \"姓名\",\n                \"hs_Rank_Rich_ComName_Cn\": \"企业\",\n                \"hs_Rank_Rich_Industry_Cn\": \"行业\",\n            },\n            inplace=True,\n        )\n        big_df = big_df[\n            [\n                \"排名\",\n                \"财富\",\n                \"姓名\",\n                \"企业\",\n                \"行业\",\n            ]\n        ]\n        return big_df\n    url = \"https://www.hurun.net/zh-CN/Rank/HsRankDetailsList\"\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"rows\"])\n    if indicator == \"胡润百富榜\":\n        temp_df.rename(\n            columns={\n                \"hs_Rank_Rich_Ranking\": \"排名\",\n                \"hs_Rank_Rich_Wealth\": \"财富\",\n                \"hs_Rank_Rich_Ranking_Change\": \"排名变化\",\n                \"hs_Rank_Rich_ChaName_Cn\": \"姓名\",\n                \"hs_Rank_Rich_ComName_Cn\": \"企业\",\n                \"hs_Rank_Rich_Industry_Cn\": \"行业\",\n            },\n            inplace=True,\n        )\n        temp_df = temp_df[\n            [\n                \"排名\",\n                \"财富\",\n                \"姓名\",\n                \"企业\",\n                \"行业\",\n            ]\n        ]\n    elif indicator == \"胡润全球富豪榜\":\n        temp_df.rename(\n            columns={\n                \"hs_Rank_Global_Ranking\": \"排名\",\n                \"hs_Rank_Global_Wealth\": \"财富\",\n                \"hs_Rank_Global_Ranking_Change\": \"排名变化\",\n                \"hs_Rank_Global_ChaName_Cn\": \"姓名\",\n                \"hs_Rank_Global_ComName_Cn\": \"企业\",\n                \"hs_Rank_Global_Industry_Cn\": \"行业\",\n            },\n            inplace=True,\n        )\n        temp_df = temp_df[\n            [\n                \"排名\",\n                \"财富\",\n                \"姓名\",\n                \"企业\",\n                \"行业\",\n            ]\n        ]\n    elif indicator == \"胡润印度榜\":\n        temp_df.rename(\n            columns={\n                \"hs_Rank_India_Ranking\": \"排名\",\n                \"hs_Rank_India_Wealth\": \"财富\",\n                \"hs_Rank_India_Ranking_Change\": \"排名变化\",\n                \"hs_Rank_India_ChaName_Cn\": \"姓名\",\n                \"hs_Rank_India_ComName_Cn\": \"企业\",\n                \"hs_Rank_India_Industry_Cn\": \"行业\",\n            },\n            inplace=True,\n        )\n        temp_df = temp_df[\n            [\n                \"排名\",\n                \"财富\",\n                \"姓名\",\n                \"企业\",\n                \"行业\",\n            ]\n        ]\n    elif indicator == \"胡润全球独角兽榜\":\n        temp_df.rename(\n            columns={\n                \"hs_Rank_Unicorn_Ranking\": \"排名\",\n                \"hs_Rank_Unicorn_Wealth\": \"财富\",\n                \"hs_Rank_Unicorn_Ranking_Change\": \"排名变化\",\n                \"hs_Rank_Unicorn_ChaName_Cn\": \"姓名\",\n                \"hs_Rank_Unicorn_ComName_Cn\": \"企业\",\n                \"hs_Rank_Unicorn_Industry_Cn\": \"行业\",\n            },\n            inplace=True,\n        )\n        temp_df = temp_df[\n            [\n                \"排名\",\n                \"财富\",\n                \"姓名\",\n                \"企业\",\n                \"行业\",\n            ]\n        ]\n    elif indicator == \"中国瞪羚企业榜\":\n        temp_df.rename(\n            columns={\n                \"hs_Rank_CGazelles_ComHeadquarters_Cn\": \"企业总部\",\n                \"hs_Rank_CGazelles_Name_Cn\": \"掌门人/联合创始人\",\n                \"hs_Rank_CGazelles_ComName_Cn\": \"企业信息\",\n                \"hs_Rank_CGazelles_Industry_Cn\": \"行业\",\n            },\n            inplace=True,\n        )\n        temp_df = temp_df[\n            [\n                \"企业信息\",\n                \"掌门人/联合创始人\",\n                \"企业总部\",\n                \"行业\",\n            ]\n        ]\n    elif indicator == \"全球瞪羚企业榜\":\n        temp_df.rename(\n            columns={\n                \"hs_Rank_GGazelles_ComHeadquarters_Cn\": \"企业总部\",\n                \"hs_Rank_GGazelles_Name_Cn\": \"掌门人/联合创始人\",\n                \"hs_Rank_GGazelles_ComName_Cn\": \"企业信息\",\n                \"hs_Rank_GGazelles_Industry_Cn\": \"行业\",\n            },\n            inplace=True,\n        )\n        temp_df = temp_df[\n            [\n                \"企业信息\",\n                \"掌门人/联合创始人\",\n                \"企业总部\",\n                \"行业\",\n            ]\n        ]\n    elif indicator == \"胡润Under30s创业领袖榜\":\n        temp_df.rename(\n            columns={\n                \"hs_Rank_U30_ComHeadquarters_Cn\": \"企业总部\",\n                \"hs_Rank_U30_ChaName_Cn\": \"姓名\",\n                \"hs_Rank_U30_ComName_Cn\": \"企业信息\",\n                \"hs_Rank_U30_Industry_Cn\": \"行业\",\n            },\n            inplace=True,\n        )\n        temp_df = temp_df[\n            [\n                \"姓名\",\n                \"企业信息\",\n                \"企业总部\",\n                \"行业\",\n            ]\n        ]\n    elif indicator == \"胡润中国500强民营企业\":\n        temp_df.rename(\n            columns={\n                \"hs_Rank_CTop500_Ranking\": \"排名\",\n                \"hs_Rank_CTop500_Wealth\": \"企业估值\",\n                \"hs_Rank_CTop500_Ranking_Change\": \"排名变化\",\n                \"hs_Rank_CTop500_ChaName_Cn\": \"CEO\",\n                \"hs_Rank_CTop500_ComName_Cn\": \"企业信息\",\n                \"hs_Rank_CTop500_Industry_Cn\": \"行业\",\n            },\n            inplace=True,\n        )\n        temp_df = temp_df[\n            [\n                \"排名\",\n                \"排名变化\",\n                \"企业估值\",\n                \"企业信息\",\n                \"CEO\",\n                \"行业\",\n            ]\n        ]\n    elif indicator == \"胡润世界500强\":\n        temp_df.rename(\n            columns={\n                \"hs_Rank_GTop500_Ranking\": \"排名\",\n                \"hs_Rank_GTop500_Wealth\": \"企业估值\",\n                \"hs_Rank_GTop500_Ranking_Change\": \"排名变化\",\n                \"hs_Rank_GTop500_ChaName_Cn\": \"CEO\",\n                \"hs_Rank_GTop500_ComName_Cn\": \"企业信息\",\n                \"hs_Rank_GTop500_Industry_Cn\": \"行业\",\n            },\n            inplace=True,\n        )\n        temp_df = temp_df[\n            [\n                \"排名\",\n                \"排名变化\",\n                \"企业估值\",\n                \"企业信息\",\n                \"CEO\",\n                \"行业\",\n            ]\n        ]\n    elif indicator == \"胡润艺术榜\":\n        temp_df.rename(\n            columns={\n                \"hs_Rank_Art_Ranking\": \"排名\",\n                \"hs_Rank_Art_Turnover\": \"成交额\",\n                \"hs_Rank_Art_Ranking_Change\": \"排名变化\",\n                \"hs_Rank_Art_Name_Cn\": \"姓名\",\n                \"hs_Rank_Art_Age\": \"年龄\",\n                \"hs_Rank_Art_ArtCategory_Cn\": \"艺术类别\",\n            },\n            inplace=True,\n        )\n        temp_df = temp_df[\n            [\n                \"排名\",\n                \"排名变化\",\n                \"成交额\",\n                \"姓名\",\n                \"年龄\",\n                \"艺术类别\",\n            ]\n        ]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    hurun_rank_df = hurun_rank(indicator=\"胡润百富榜\", year=\"2023\")\n    print(hurun_rank_df)\n\n    hurun_rank_df = hurun_rank(indicator=\"胡润全球富豪榜\", year=\"2023\")\n    print(hurun_rank_df)\n\n    hurun_rank_df = hurun_rank(indicator=\"胡润全球独角兽榜\", year=\"2023\")\n    print(hurun_rank_df)\n\n    hurun_rank_df = hurun_rank(indicator=\"胡润印度榜\", year=\"2021\")\n    print(hurun_rank_df)\n\n    hurun_rank_df = hurun_rank(indicator=\"全球瞪羚企业榜\", year=\"2021\")\n    print(hurun_rank_df)\n\n    hurun_rank_df = hurun_rank(indicator=\"胡润Under30s创业领袖榜\", year=\"2021\")\n    print(hurun_rank_df)\n\n    hurun_rank_df = hurun_rank(indicator=\"胡润世界500强\", year=\"2022\")\n    print(hurun_rank_df)\n\n    hurun_rank_df = hurun_rank(indicator=\"胡润艺术榜\", year=\"2023\")\n    print(hurun_rank_df)\n"
  },
  {
    "path": "akshare/fortune/fortune_xincaifu_500.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/10/30 21:12\nDesc: 新财富 500 人富豪榜\nhttp://www.xcf.cn/zhuanti/ztzz/hdzt1/500frb/index.html\n\"\"\"\n\nimport json\n\nimport pandas as pd\nimport requests\n\n\ndef xincaifu_rank(year: str = \"2022\") -> pd.DataFrame:\n    \"\"\"\n    新财富 500 人富豪榜\n    http://www.xcf.cn/zhuanti/ztzz/hdzt1/500frb/index.html\n    :param year: 具体排名年份, 数据从 2003-至今\n    :type year: str\n    :return: 排行榜\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://service.ikuyu.cn/XinCaiFu2/pcremoting/bdListAction.do\"\n    params = {\n        \"method\": \"getPage\",\n        \"callback\": \"jsonpCallback\",\n        \"sortBy\": \"\",\n        \"order\": \"\",\n        \"type\": \"4\",\n        \"keyword\": \"\",\n        \"pageSize\": \"1000\",\n        \"year\": year,\n        \"pageNo\": \"1\",\n        \"from\": \"jsonp\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = json.loads(data_text[data_text.find(\"{\") : -1])\n    temp_df = pd.DataFrame(data_json[\"data\"][\"rows\"])\n    temp_df.columns\n    temp_df.rename(\n        columns={\n            \"assets\": \"财富\",\n            \"year\": \"年份\",\n            \"sex\": \"性别\",\n            \"name\": \"姓名\",\n            \"rank\": \"排名\",\n            \"company\": \"主要公司\",\n            \"industry\": \"相关行业\",\n            \"id\": \"-\",\n            \"addr\": \"公司总部\",\n            \"rankLst\": \"-\",\n            \"age\": \"年龄\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"排名\",\n            \"财富\",\n            \"姓名\",\n            \"主要公司\",\n            \"相关行业\",\n            \"公司总部\",\n            \"性别\",\n            \"年龄\",\n            \"年份\",\n        ]\n    ]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    xincaifu_rank_df = xincaifu_rank(year=\"2022\")\n    print(xincaifu_rank_df)\n"
  },
  {
    "path": "akshare/fund/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/9/30 13:58\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/fund/fund_amac.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/29 16:00\nDesc: 中国证券投资基金业协会-信息公示数据\n中国证券投资基金业协会-新版: https://gs.amac.org.cn\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\nheaders = {\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n    \"Chrome/123.0.0.0 Safari/537.36\",\n    \"Content-Type\": \"application/json\",\n}\n\n\ndef _get_pages(url: str = \"\", payload: str = \"\") -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-私募基金管理人公示 页数\n    暂时不使用本函数, 直接可以获取所有数据\n    \"\"\"\n    res = requests.post(url=url, json=payload, headers=headers)\n    res.encoding = \"utf-8\"\n    json_df = res.json()\n    return json_df[\"totalPages\"]\n\n\ndef get_data(url: str = \"\", payload: str = \"\") -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-私募基金管理人公示\n    \"\"\"\n    res = requests.post(url=url, json=payload, headers=headers)\n    res.encoding = \"utf-8\"\n    json_df = res.json()\n    return json_df\n\n\n# 中国证券投资基金业协会-信息公示-会员信息\n# 中国证券投资基金业协会-信息公示-会员信息-会员机构综合查询\ndef amac_member_info() -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-会员信息-会员机构综合查询\n    https://gs.amac.org.cn/amac-infodisc/res/pof/member/index.html\n    :return: 会员机构综合查询\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://gs.amac.org.cn/amac-infodisc/api/pof/pofMember\"\n    params = {\n        \"rand\": \"0.7665138514630696\",\n        \"page\": \"1\",\n        \"size\": \"20\",\n    }\n    r = requests.post(url, params=params, json={}, headers=headers)\n    data_json = r.json()\n    total_page = data_json[\"totalPages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(0, int(total_page)), leave=False):\n        params.update({\"page\": page})\n        r = requests.post(url, params=params, json={}, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"content\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    keys_list = [\n        \"managerName\",\n        \"memberBehalf\",\n        \"memberType\",\n        \"memberCode\",\n        \"memberDate\",\n        \"primaryInvestType\",\n        \"markStar\",\n    ]  # 定义要取的 value 的 keys\n    manager_data_out = pd.DataFrame(big_df)\n    manager_data_out = manager_data_out[keys_list]\n    manager_data_out.columns = [\n        \"机构（会员）名称\",\n        \"会员代表\",\n        \"会员类型\",\n        \"会员编号\",\n        \"入会时间\",\n        \"机构类型\",\n        \"是否星标\",\n    ]\n    manager_data_out[\"入会时间\"] = pd.to_datetime(\n        manager_data_out[\"入会时间\"], unit=\"ms\"\n    ).dt.date\n    return manager_data_out\n\n\n# 中国证券投资基金业协会-信息公示-从业人员信息\n# 中国证券投资基金业协会-信息公示-从业人员信息-基金从业人员资格注册信息\ndef amac_person_fund_org_list(symbol: str = \"公募基金管理公司\") -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-从业人员信息-基金从业人员资格注册信息\n    https://gs.amac.org.cn/amac-infodisc/res/pof/person/personOrgList.html\n    :param symbol: choice of {\"公募基金管理公司\", \"公募基金管理公司资管子公司\", \"商业银行\", \"证券公司\", \"证券公司子公司\",\n    \"私募基金管理人\", \"保险公司子公司\", \"保险公司\", \"外包服务机构\", \"期货公司\", \"期货公司资管子公司\", \"媒体机构\",\n    \"证券投资咨询机构\", \"评价机构\", \"外资私募证券基金管理人\", \"支付结算\", \"独立服务机构\", \"地方自律组织\", \"境外机构\",\n    \"律师事务所\", \"会计师事务所\", \"交易所\", \"独立第三方销售机构\", \"证券公司资管子公司\", \"证券公司私募基金子公司\", \"其他\"}\n    :type symbol: str\n    :return: 基金从业人员资格注册信息\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"保险公司子公司\": \"bxgszgs\",\n        \"期货公司资管子公司\": \"qhgszgzgs\",\n        \"公募基金管理公司资管子公司\": \"gmjjglgszgzgs\",\n        \"商业银行\": \"syyh\",\n        \"交易所\": \"jys\",\n        \"证券公司私募基金子公司\": \"zqgssmjjzgs\",\n        \"地方自律组织\": \"dfzlzz\",\n        \"证券公司\": \"zqgs\",\n        \"评价机构\": \"pjjg\",\n        \"独立第三方销售机构\": \"dldsfxsjg\",\n        \"证券投资咨询机构\": \"zqtzzxjg\",\n        \"外资私募证券基金管理人\": \"wzsmzqjjglr\",\n        \"境外机构\": \"jwjg\",\n        \"证券公司子公司\": \"zqgszgs\",\n        \"公募基金管理公司\": \"gmjjglgs\",\n        \"媒体机构\": \"mtjg\",\n        \"支付结算\": \"zfjs\",\n        \"证券公司资管子公司\": \"zqgszgzgs\",\n        \"会计师事务所\": \"kjssws\",\n        \"独立服务机构\": \"dlfwjg\",\n        \"律师事务所\": \"lssws\",\n        \"期货公司\": \"qhgs\",\n        \"保险公司\": \"bxgs\",\n        \"其他\": \"qt\",\n        \"外包服务机构\": \"wbfwjg\",\n        \"私募基金管理人\": \"smjjglr\",\n    }\n    url = \"https://gs.amac.org.cn/amac-infodisc/api/pof/personOrg\"\n    params = {\n        \"rand\": \"0.7665138514630696\",\n        \"page\": \"1\",\n        \"size\": \"20\",\n    }\n    r = requests.post(\n        url,\n        params=params,\n        json={\"orgType\": symbol_map[symbol], \"page\": \"1\"},\n        headers=headers,\n    )\n    data_json = r.json()\n    total_page = data_json[\"totalPages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(0, int(total_page)), leave=False):\n        params.update({\"page\": page})\n        r = requests.post(\n            url,\n            params=params,\n            json={\"orgType\": symbol_map[symbol], \"page\": \"1\"},\n            verify=False,\n            headers=headers,\n        )\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"content\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    keys_list = [\n        \"orgName\",\n        \"orgType\",\n        \"workerTotalNum\",\n        \"operNum\",\n        \"salesmanNum\",\n        \"investmentManagerNum\",\n        \"fundManagerNum\",\n    ]  # 定义要取的 value 的 keys\n    manager_data_out = pd.DataFrame(big_df)\n    manager_data_out = manager_data_out[keys_list]\n    manager_data_out.reset_index(inplace=True)\n    manager_data_out[\"index\"] = manager_data_out.index + 1\n    manager_data_out.columns = [\n        \"序号\",\n        \"机构名称\",\n        \"机构类型\",\n        \"员工人数\",\n        \"基金从业资格\",\n        \"基金销售业务资格\",\n        \"基金经理\",\n        \"投资经理\",\n    ]\n    manager_data_out[\"员工人数\"] = pd.to_numeric(manager_data_out[\"员工人数\"])\n    manager_data_out[\"基金从业资格\"] = pd.to_numeric(manager_data_out[\"基金从业资格\"])\n    manager_data_out[\"基金销售业务资格\"] = pd.to_numeric(\n        manager_data_out[\"基金销售业务资格\"]\n    )\n    manager_data_out[\"基金经理\"] = pd.to_numeric(manager_data_out[\"基金经理\"])\n    manager_data_out[\"投资经理\"] = pd.to_numeric(manager_data_out[\"投资经理\"])\n    return manager_data_out\n\n\n# 中国证券投资基金业协会-信息公示-从业人员信息-债券投资交易相关人员公示\ndef amac_person_bond_org_list() -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-从业人员信息-债券投资交易相关人员公示\n    https://human.amac.org.cn/web/org/personPublicity.html\n    :return: 债券投资交易相关人员公示\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import urllib3\n    import ssl\n\n    ctx = ssl.create_default_context()\n    ctx.options |= ssl.OP_LEGACY_SERVER_CONNECT\n    # 使用自定义的 SSL 上下文发起 HTTPS 请求\n    http = urllib3.PoolManager(ssl_context=ctx)\n\n    url = \"https://human.amac.org.cn/web/api/publicityAddress?rand=0.6288001872566391&pageNum=1&pageSize=5000\"\n    r = http.request(method=\"GET\", url=url)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"list\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = range(1, len(temp_df) + 1)\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"_\",\n        \"机构名称\",\n        \"机构类型\",\n        \"公示网址\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"机构类型\",\n            \"机构名称\",\n            \"公示网址\",\n        ]\n    ]\n    return temp_df\n\n\n# 中国证券投资基金业协会-信息公示-私募基金管理人公示\n# 中国证券投资基金业协会-信息公示-私募基金管理人公示-私募基金管理人综合查询\ndef amac_manager_info() -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-私募基金管理人公示-私募基金管理人综合查询\n    https://gs.amac.org.cn/amac-infodisc/res/pof/manager/index.html\n    :return: 私募基金管理人综合查询\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://gs.amac.org.cn/amac-infodisc/api/pof/manager\"\n    params = {\n        \"rand\": \"0.7665138514630696\",\n        \"page\": \"1\",\n        \"size\": \"100\",\n    }\n    r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n    data_json = r.json()\n    total_page = data_json[\"totalPages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(0, int(total_page)), leave=False):\n        params.update({\"page\": page})\n        r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"content\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    keys_list = [\n        \"managerName\",\n        \"artificialPersonName\",\n        \"primaryInvestType\",\n        \"registerProvince\",\n        \"registerNo\",\n        \"establishDate\",\n        \"registerDate\",\n    ]  # 定义要取的 value 的 keys\n    manager_data_out = pd.DataFrame(big_df)\n    manager_data_out = manager_data_out[keys_list]\n    manager_data_out.columns = [\n        \"私募基金管理人名称\",\n        \"法定代表人/执行事务合伙人(委派代表)姓名\",\n        \"机构类型\",\n        \"注册地\",\n        \"登记编号\",\n        \"成立时间\",\n        \"登记时间\",\n    ]\n    manager_data_out[\"成立时间\"] = pd.to_datetime(\n        manager_data_out[\"成立时间\"], unit=\"ms\"\n    ).dt.date\n    manager_data_out[\"登记时间\"] = pd.to_datetime(\n        manager_data_out[\"登记时间\"], unit=\"ms\"\n    ).dt.date\n    return manager_data_out\n\n\n# 中国证券投资基金业协会-信息公示-私募基金管理人公示-私募基金管理人分类公示\ndef amac_manager_classify_info() -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-私募基金管理人公示-私募基金管理人分类公示\n    https://gs.amac.org.cn/amac-infodisc/res/pof/manager/managerList.html\n    :return: 私募基金管理人分类公示\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://gs.amac.org.cn/amac-infodisc/api/pof/manager\"\n    params = {\n        \"rand\": \"0.7665138514630696\",\n        \"page\": \"1\",\n        \"size\": \"100\",\n    }\n    r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n    data_json = r.json()\n    total_page = data_json[\"totalPages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(0, int(total_page)), leave=False):\n        params.update({\"page\": page})\n        r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"content\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    keys_list = [\n        \"managerName\",\n        \"artificialPersonName\",\n        \"primaryInvestType\",\n        \"registerNo\",\n        \"registerProvince\",\n        \"officeAdrAgg\",\n        \"establishDate\",\n        \"registerDate\",\n        \"fundCount\",\n        \"memberType\",\n        \"hasSpecialTips\",\n        \"hasCreditTips\",\n    ]  # 定义要取的 value 的 keys\n    manager_data_out = pd.DataFrame(big_df)\n    manager_data_out = manager_data_out[keys_list]\n    manager_data_out.columns = [\n        \"私募基金管理人名称\",\n        \"法定代表人/执行事务合伙人(委派代表)姓名\",\n        \"机构类型\",\n        \"登记编号\",\n        \"注册地\",\n        \"办公地\",\n        \"成立时间\",\n        \"登记时间\",\n        \"在管基金数量\",\n        \"会员类型\",\n        \"是否有提示信息\",\n        \"是否有诚信信息\",\n    ]\n    manager_data_out[\"成立时间\"] = pd.to_datetime(\n        manager_data_out[\"成立时间\"], unit=\"ms\"\n    ).dt.date\n    manager_data_out[\"登记时间\"] = pd.to_datetime(\n        manager_data_out[\"登记时间\"], unit=\"ms\"\n    ).dt.date\n    manager_data_out[\"在管基金数量\"] = pd.to_numeric(manager_data_out[\"在管基金数量\"])\n    manager_data_out[\"是否有提示信息\"] = manager_data_out[\"是否有提示信息\"].map(\n        {True: \"是\", False: \"否\"}\n    )\n    manager_data_out[\"是否有诚信信息\"] = manager_data_out[\"是否有诚信信息\"].map(\n        {True: \"是\", False: \"否\"}\n    )\n    return manager_data_out\n\n\n# 中国证券投资基金业协会-信息公示-私募基金管理人公示-证券公司私募基金子公司管理人信息公示\ndef amac_member_sub_info() -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-私募基金管理人公示-证券公司私募基金子公司管理人信息公示\n    https://gs.amac.org.cn/amac-infodisc/res/pof/member/index.html?primaryInvestType=private\n    :return: 证券公司私募基金子公司管理人信息公示\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://gs.amac.org.cn/amac-infodisc/api/pof/pofMember\"\n    params = {\n        \"rand\": \"0.7665138514630696\",\n        \"page\": \"1\",\n        \"size\": \"100\",\n    }\n    r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n    data_json = r.json()\n    total_page = data_json[\"totalPages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(0, int(total_page)), leave=False):\n        params.update({\"page\": page})\n        r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"content\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    keys_list = [\n        \"managerName\",\n        \"memberBehalf\",\n        \"memberType\",\n        \"memberCode\",\n        \"memberDate\",\n        \"primaryInvestType\",\n    ]  # 定义要取的 value 的 keys\n    manager_data_out = pd.DataFrame(big_df)\n    manager_data_out = manager_data_out[keys_list]\n    manager_data_out.columns = [\n        \"机构（会员）名称\",\n        \"会员代表\",\n        \"会员类型\",\n        \"会员编号\",\n        \"入会时间\",\n        \"公司类型\",\n    ]\n    manager_data_out[\"入会时间\"] = pd.to_datetime(\n        manager_data_out[\"入会时间\"], unit=\"ms\"\n    ).dt.date\n    return manager_data_out\n\n\n# 中国证券投资基金业协会-信息公示-基金产品\n# 中国证券投资基金业协会-信息公示-基金产品-私募基金管理人基金产品\ndef amac_fund_info(start_page: str = \"1\", end_page: str = \"2000\") -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-基金产品-私募基金管理人基金产品\n    https://gs.amac.org.cn/amac-infodisc/res/pof/fund/index.html\n    :param start_page: 开始页码, 获取指定页码直接的数据\n    :type start_page: str\n    :param end_page: 结束页码, 获取指定页码直接的数据\n    :type end_page: str\n    :return: 私募基金管理人基金产品\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://gs.amac.org.cn/amac-infodisc/api/pof/fund\"\n    params = {\n        \"rand\": \"0.7665138514630696\",\n        \"page\": \"1\",\n        \"size\": \"100\",\n    }\n    r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n    data_json = r.json()\n    total_page = int(data_json[\"totalPages\"])\n    if total_page > int(end_page):\n        real_end_page = int(end_page)\n    else:\n        real_end_page = total_page\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(int(start_page) - 1, real_end_page), leave=False):\n        params.update({\"page\": page})\n        r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"content\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    keys_list = [\n        \"fundName\",\n        \"managerName\",\n        \"managerType\",\n        \"workingState\",\n        \"putOnRecordDate\",\n        \"establishDate\",\n        \"mandatorName\",\n    ]  # 定义要取的 value 的 keys\n    manager_data_out = big_df[keys_list].copy()\n    manager_data_out.columns = [\n        \"基金名称\",\n        \"私募基金管理人名称\",\n        \"私募基金管理人类型\",\n        \"运行状态\",\n        \"备案时间\",\n        \"建立时间\",\n        \"托管人名称\",\n    ]\n    manager_data_out[\"建立时间\"] = pd.to_datetime(\n        manager_data_out[\"建立时间\"], unit=\"ms\"\n    ).dt.date\n    manager_data_out[\"备案时间\"] = pd.to_datetime(\n        manager_data_out[\"备案时间\"], unit=\"ms\"\n    ).dt.date\n    return manager_data_out\n\n\n# 中国证券投资基金业协会-信息公示-基金产品-证券公司集合资管产品公示\ndef amac_securities_info() -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-基金产品公示-证券公司集合资管产品公示\n    https://gs.amac.org.cn/amac-infodisc/res/pof/securities/index.html\n    :return: 证券公司集合资管产品公示\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://gs.amac.org.cn/amac-infodisc/api/pof/securities\"\n    params = {\n        \"rand\": \"0.7665138514630696\",\n        \"page\": \"1\",\n        \"size\": \"100\",\n    }\n    r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n    data_json = r.json()\n    total_page = data_json[\"totalPages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(0, int(total_page)), leave=False):\n        params.update({\"page\": page})\n        r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"content\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    keys_list = [\n        \"cpmc\",\n        \"cpbm\",\n        \"gljg\",\n        \"slrq\",\n        \"dqr\",\n        \"tzlx\",\n        \"sffj\",\n        \"tgjg\",\n        \"barq\",\n        \"yzzt\",\n    ]  # 定义要取的 value 的 keys\n    manager_data_out = pd.DataFrame(big_df)\n    manager_data_out = manager_data_out[keys_list]\n    manager_data_out.columns = [\n        \"产品名称\",\n        \"产品编码\",\n        \"管理人名称\",\n        \"成立日期\",\n        \"到期时间\",\n        \"投资类型\",\n        \"是否分级\",\n        \"托管人名称\",\n        \"备案日期\",\n        \"运作状态\",\n    ]\n    return manager_data_out\n\n\n# 中国证券投资基金业协会-信息公示-基金产品-证券公司直投基金\ndef amac_aoin_info() -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-基金产品公示-证券公司直投基金\n    https://gs.amac.org.cn/amac-infodisc/res/aoin/product/index.html\n    :return: 证券公司直投基金\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://gs.amac.org.cn/amac-infodisc/api/aoin/product\"\n    params = {\n        \"rand\": \"0.7665138514630696\",\n        \"page\": \"1\",\n        \"size\": \"100\",\n    }\n    r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n    data_json = r.json()\n    total_page = data_json[\"totalPages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(0, int(total_page)), leave=False):\n        params.update({\"page\": page})\n        r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"content\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    keys_list = [\n        \"code\",\n        \"name\",\n        \"aoinName\",\n        \"managerName\",\n        \"createDate\",\n    ]  # 定义要取的 value 的 keys\n    manager_data_out = pd.DataFrame(big_df)\n    manager_data_out = manager_data_out[keys_list]\n    manager_data_out.columns = [\n        \"产品编码\",\n        \"产品名称\",\n        \"直投子公司\",\n        \"管理机构\",\n        \"设立日期\",\n    ]\n    manager_data_out[\"设立日期\"] = pd.to_datetime(\n        manager_data_out[\"设立日期\"], unit=\"ms\"\n    ).dt.date\n    return manager_data_out\n\n\n# 中国证券投资基金业协会-信息公示-基金产品公示-证券公司私募投资基金\ndef amac_fund_sub_info() -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-基金产品公示-证券公司私募投资基金\n    https://gs.amac.org.cn/amac-infodisc/res/pof/subfund/index.html\n    :return: 证券公司私募投资基金\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://gs.amac.org.cn/amac-infodisc/api/pof/subfund\"\n    params = {\n        \"rand\": \"0.7665138514630696\",\n        \"page\": \"1\",\n        \"size\": \"100\",\n    }\n    r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n    data_json = r.json()\n    total_page = data_json[\"totalPages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(0, int(total_page)), leave=False):\n        params.update({\"page\": page})\n        r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"content\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    keys_list = [\n        \"productCode\",\n        \"productName\",\n        \"mgrName\",\n        \"trustee\",\n        \"foundDate\",\n        \"registeredDate\",\n    ]  # 定义要取的 value 的 keys\n    manager_data_out = pd.DataFrame(big_df)\n    manager_data_out = manager_data_out[keys_list]\n    manager_data_out.columns = [\n        \"产品编码\",\n        \"产品名称\",\n        \"私募基金管理人名称\",\n        \"托管人名称\",\n        \"成立日期\",\n        \"备案日期\",\n    ]\n    manager_data_out[\"备案日期\"] = pd.to_datetime(\n        manager_data_out[\"备案日期\"], unit=\"ms\"\n    ).dt.date\n    manager_data_out[\"成立日期\"] = pd.to_datetime(\n        manager_data_out[\"成立日期\"], unit=\"ms\"\n    ).dt.date\n    return manager_data_out\n\n\n# 中国证券投资基金业协会-信息公示-基金产品公示-基金公司及子公司集合资管产品公示\ndef amac_fund_account_info() -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-基金产品公示-基金公司及子公司集合资管产品公示\n    https://gs.amac.org.cn/amac-infodisc/res/fund/account/index.html\n    :return: 基金公司及子公司集合资管产品公示\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(action=\"ignore\", category=FutureWarning)\n\n    url = \"https://gs.amac.org.cn/amac-infodisc/api/fund/account\"\n    params = {\n        \"rand\": \"0.7665138514630696\",\n        \"page\": \"1\",\n        \"size\": \"100\",\n    }\n    r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n    data_json = r.json()\n    total_page = data_json[\"totalPages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(0, int(total_page)), leave=False):\n        params.update({\"page\": page})\n        r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"content\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    keys_list = [\n        \"registerDate\",\n        \"registerCode\",\n        \"name\",\n        \"manager\",\n    ]  # 定义要取的 value 的 keys\n    manager_data_out = pd.DataFrame(big_df)\n    manager_data_out = manager_data_out[keys_list]\n    manager_data_out.columns = [\n        \"成立日期\",\n        \"产品编码\",\n        \"产品名称\",\n        \"管理人名称\",\n    ]\n    manager_data_out[\"成立日期\"] = pd.to_datetime(\n        manager_data_out[\"成立日期\"], unit=\"ms\"\n    ).dt.date\n    return manager_data_out\n\n\n# 中国证券投资基金业协会-信息公示-基金产品公示-资产支持专项计划\ndef amac_fund_abs() -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-基金产品公示-资产支持专项计划公示信息\n    https://gs.amac.org.cn/amac-infodisc/res/fund/abs/index.html\n    :return: 资产支持专项计划公示信息\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://gs.amac.org.cn/amac-infodisc/api/fund/abs\"\n    params = {\n        \"rand\": \"0.7665138514630696\",\n        \"page\": \"1\",\n        \"size\": \"100\",\n    }\n    r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n    data_json = r.json()\n    total_page = data_json[\"totalPages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(0, int(total_page)), leave=False):\n        params.update({\"page\": page})\n        r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"content\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = range(1, len(big_df) + 1)\n    big_df.columns = [\n        \"编号\",\n        \"_\",\n        \"_\",\n        \"专项计划全称\",\n        \"备案编号\",\n        \"管理人\",\n        \"托管人\",\n        \"备案通过时间\",\n        \"成立日期\",\n        \"预期到期时间\",\n    ]\n    big_df[\"备案通过时间\"] = pd.to_datetime(big_df[\"备案通过时间\"], unit=\"ms\").dt.date\n    big_df[\"成立日期\"] = pd.to_datetime(big_df[\"成立日期\"], unit=\"ms\").dt.date\n    big_df[\"预期到期时间\"] = pd.to_datetime(\n        big_df[\"预期到期时间\"], unit=\"ms\", errors=\"coerce\"\n    ).dt.date\n    big_df = big_df[\n        [\n            \"编号\",\n            \"备案编号\",\n            \"专项计划全称\",\n            \"管理人\",\n            \"托管人\",\n            \"成立日期\",\n            \"预期到期时间\",\n            \"备案通过时间\",\n        ]\n    ]\n    return big_df\n\n\n# 中国证券投资基金业协会-信息公示-基金产品公示-期货公司集合资管产品公示\ndef amac_futures_info() -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-基金产品公示-期货公司集合资管产品公示\n    https://gs.amac.org.cn/amac-infodisc/res/pof/futures/index.html\n    :return: 期货公司集合资管产品公示\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://gs.amac.org.cn/amac-infodisc/api/pof/futures\"\n    params = {\n        \"rand\": \"0.7665138514630696\",\n        \"page\": \"1\",\n        \"size\": \"100\",\n    }\n    r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n    data_json = r.json()\n    total_page = data_json[\"totalPages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(0, int(total_page)), leave=False):\n        params.update({\"page\": page})\n        r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"content\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    keys_list = [\n        \"mpiName\",\n        \"mpiProductCode\",\n        \"aoiName\",\n        \"mpiTrustee\",\n        \"mpiCreateDate\",\n        \"tzlx\",\n        \"sfjgh\",\n        \"registeredDate\",\n        \"dueDate\",\n        \"fundStatus\",\n    ]  # 定义要取的 value 的 keys\n    manager_data_out = pd.DataFrame(big_df)\n    manager_data_out = manager_data_out[keys_list]\n    manager_data_out.columns = [\n        \"产品名称\",\n        \"产品编码\",\n        \"管理人名称\",\n        \"托管人名称\",\n        \"成立日期\",\n        \"投资类型\",\n        \"是否分级\",\n        \"备案日期\",\n        \"到期日\",\n        \"运作状态\",\n    ]\n    return manager_data_out\n\n\n# 中国证券投资基金业协会-信息公示-诚信信息\n# 中国证券投资基金业协会-信息公示-诚信信息-已注销私募基金管理人名单\ndef amac_manager_cancelled_info() -> pd.DataFrame:\n    \"\"\"\n    中国证券投资基金业协会-信息公示-诚信信息公示-已注销私募基金管理人名单\n    https://gs.amac.org.cn/amac-infodisc/res/cancelled/manager/index.html\n    主动注销: 100\n    依公告注销: 200\n    协会注销: 300\n    :return: 已注销私募基金管理人名单\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://gs.amac.org.cn/amac-infodisc/api/cancelled/manager\"\n    params = {\n        \"rand\": \"0.7665138514630696\",\n        \"page\": \"1\",\n        \"size\": \"100\",\n    }\n    r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n    data_json = r.json()\n    total_page = data_json[\"totalPages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(0, int(total_page)), leave=False):\n        params.update({\"page\": page})\n        r = requests.post(url, params=params, json={}, verify=False, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"content\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    keys_list = [\n        \"orgName\",\n        \"orgCode\",\n        \"orgSignDate\",\n        \"cancelDate\",\n        \"status\",\n    ]  # 定义要取的 value 的 keys\n    manager_data_out = pd.DataFrame(big_df)\n    manager_data_out = manager_data_out[keys_list]\n    manager_data_out.columns = [\n        \"管理人名称\",\n        \"统一社会信用代码\",\n        \"登记时间\",\n        \"注销时间\",\n        \"注销类型\",\n    ]\n    manager_data_out[\"登记时间\"] = pd.to_datetime(\n        manager_data_out[\"登记时间\"], unit=\"ms\"\n    ).dt.date\n    manager_data_out[\"注销时间\"] = pd.to_datetime(\n        manager_data_out[\"注销时间\"], unit=\"ms\"\n    ).dt.date\n    manager_data_out.sort_values([\"注销时间\"], ignore_index=True, inplace=True)\n    return manager_data_out\n\n\nif __name__ == \"__main__\":\n    # 中国证券投资基金业协会-信息公示-会员信息\n    # 中国证券投资基金业协会-信息公示-会员信息-会员机构综合查询\n    amac_member_info_df = amac_member_info()\n    print(amac_member_info_df)\n\n    # 中国证券投资基金业协会-信息公示-从业人员信息\n    # 中国证券投资基金业协会-信息公示-从业人员信息-基金从业人员资格注册信息\n    amac_person_fund_org_list_df = amac_person_fund_org_list(symbol=\"公募基金管理公司\")\n    print(amac_person_fund_org_list_df)\n\n    # 中国证券投资基金业协会-信息公示-从业人员信息\n    # 中国证券投资基金业协会-信息公示-从业人员信息-债券投资交易相关人员公示\n    amac_person_bond_org_list_df = amac_person_bond_org_list()\n    print(amac_person_bond_org_list_df)\n\n    # 中国证券投资基金业协会-信息公示-私募基金管理人公示\n    # 中国证券投资基金业协会-信息公示-私募基金管理人公示-私募基金管理人综合查询\n    amac_manager_info_df = amac_manager_info()\n    print(amac_manager_info_df)\n\n    # 中国证券投资基金业协会-信息公示-私募基金管理人公示-私募基金管理人分类公示\n    amac_manager_classify_info_df = amac_manager_classify_info()\n    print(amac_manager_classify_info_df)\n\n    # 中国证券投资基金业协会-信息公示-私募基金管理人公示-证券公司私募基金子公司管理人信息公示\n    amac_member_sub_info_df = amac_member_sub_info()\n    print(amac_member_sub_info_df)\n\n    # 中国证券投资基金业协会-信息公示-基金产品\n    # 中国证券投资基金业协会-信息公示-基金产品-私募基金管理人基金产品\n    amac_fund_info_df = amac_fund_info(start_page=\"1\", end_page=\"100\")\n    print(amac_fund_info_df)\n\n    example_df = amac_fund_info_df[\n        amac_fund_info_df[\"私募基金管理人名称\"].str.contains(\"聚宽\")\n    ]\n    print(example_df)\n\n    # 中国证券投资基金业协会-信息公示-基金产品-证券公司集合资管产品公示\n    amac_securities_info_df = amac_securities_info()\n    print(amac_securities_info_df)\n\n    # 中国证券投资基金业协会-信息公示-基金产品-证券公司直投基金\n    amac_aoin_info_df = amac_aoin_info()\n    print(amac_aoin_info_df)\n\n    # 中国证券投资基金业协会-信息公示-基金产品公示-证券公司私募投资基金\n    amac_fund_sub_info_df = amac_fund_sub_info()\n    print(amac_fund_sub_info_df)\n\n    # 中国证券投资基金业协会-信息公示-基金产品公示-基金公司及子公司集合资管产品公示\n    amac_fund_account_info_df = amac_fund_account_info()\n    print(amac_fund_account_info_df)\n\n    # 中国证券投资基金业协会-信息公示-基金产品公示-资产支持专项计划\n    amac_fund_abs_df = amac_fund_abs()\n    print(amac_fund_abs_df)\n\n    # 中国证券投资基金业协会-信息公示-基金产品公示-期货公司集合资管产品公示\n    amac_futures_info_df = amac_futures_info()\n    print(amac_futures_info_df)\n\n    # 中国证券投资基金业协会-信息公示-诚信信息\n    # 中国证券投资基金业协会-信息公示-诚信信息-已注销私募基金管理人名单\n    amac_manager_cancelled_info_df = amac_manager_cancelled_info()\n    print(amac_manager_cancelled_info_df)\n"
  },
  {
    "path": "akshare/fund/fund_announcement_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/9/20 17:40\nDesc: 东方财富网站-天天基金网-基金档案-基金公告\nhttps://fundf10.eastmoney.com/jjgg_000001.html\n\"\"\"\n\nimport time\n\nimport pandas as pd\nimport requests\n\n\ndef fund_announcement_dividend_em(symbol: str = \"000001\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网站-天天基金网-基金档案-基金公告-分红配送\n    https://fundf10.eastmoney.com/jjgg_000001_2.html\n    :param symbol: 基金代码; 可以通过调用 ak.fund_name_em() 接口获取\n    :type symbol: str\n    :return: 分红配送-公告列表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://api.fund.eastmoney.com/f10/JJGG\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/80.0.3987.149 Safari/537.36\",\n        \"Referer\": f\"http://fundf10.eastmoney.com/jjgg_{symbol}_2.html\",\n    }\n    params = {\n        \"fundcode\": symbol,\n        \"pageIndex\": \"1\",\n        \"pageSize\": \"1000\",\n        \"type\": \"2\",\n        \"_\": round(time.time() * 1000),\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"Data\"])\n    temp_df.columns = [\n        \"基金代码\",\n        \"公告标题\",\n        \"基金名称\",\n        \"_\",\n        \"_\",\n        \"公告日期\",\n        \"_\",\n        \"报告ID\",\n    ]\n    temp_df = temp_df[[\"基金代码\", \"公告标题\", \"基金名称\", \"公告日期\", \"报告ID\"]]\n    temp_df.sort_values(by=[\"公告日期\"], inplace=True, ignore_index=True)\n    temp_df[\"公告日期\"] = pd.to_datetime(temp_df[\"公告日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\ndef fund_announcement_report_em(symbol: str = \"000001\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网站-天天基金网-基金档案-基金公告-定期报告\n    https://fundf10.eastmoney.com/jjgg_000001_3.html\n    :param symbol: 基金代码; 可以通过调用 ak.fund_name_em() 接口获取\n    :type symbol: str\n    :return: 定期报告-公告列表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://api.fund.eastmoney.com/f10/JJGG\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/80.0.3987.149 Safari/537.36\",\n        \"Referer\": f\"http://fundf10.eastmoney.com/jjgg_{symbol}_3.html\",\n    }\n    params = {\n        \"fundcode\": symbol,\n        \"pageIndex\": \"1\",\n        \"pageSize\": \"1000\",\n        \"type\": \"3\",\n        \"_\": round(time.time() * 1000),\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"Data\"])\n    temp_df.columns = [\n        \"基金代码\",\n        \"公告标题\",\n        \"基金名称\",\n        \"_\",\n        \"_\",\n        \"公告日期\",\n        \"_\",\n        \"报告ID\",\n    ]\n    temp_df = temp_df[[\"基金代码\", \"公告标题\", \"基金名称\", \"公告日期\", \"报告ID\"]]\n    temp_df.sort_values(by=[\"公告日期\"], inplace=True, ignore_index=True)\n    temp_df[\"公告日期\"] = pd.to_datetime(temp_df[\"公告日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\ndef fund_announcement_personnel_em(symbol: str = \"000001\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网站-天天基金网-基金档案-基金公告-人事调整\n    https://fundf10.eastmoney.com/jjgg_000001_4.html\n    :param symbol: 基金代码; 可以通过调用 ak.fund_name_em() 接口获取\n    :type symbol: str\n    :return: 人事调整-公告列表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://api.fund.eastmoney.com/f10/JJGG\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36\",\n        \"Referer\": f\"http://fundf10.eastmoney.com/jjgg_{symbol}_4.html\",\n    }\n    params = {\n        \"fundcode\": symbol,\n        \"pageIndex\": \"1\",\n        \"pageSize\": \"1000\",\n        \"type\": \"4\",\n        \"_\": round(time.time() * 1000),\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"Data\"])\n    temp_df.columns = [\n        \"基金代码\",\n        \"公告标题\",\n        \"基金名称\",\n        \"_\",\n        \"_\",\n        \"公告日期\",\n        \"_\",\n        \"报告ID\",\n    ]\n    temp_df = temp_df[[\"基金代码\", \"公告标题\", \"基金名称\", \"公告日期\", \"报告ID\"]]\n    temp_df.sort_values(by=[\"公告日期\"], inplace=True, ignore_index=True)\n    temp_df[\"公告日期\"] = pd.to_datetime(temp_df[\"公告日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fund_announcement_dividend_em_df = fund_announcement_dividend_em(symbol=\"000001\")\n    print(fund_announcement_dividend_em_df)\n\n    fund_announcement_report_em_df = fund_announcement_report_em(symbol=\"000001\")\n    print(fund_announcement_report_em_df)\n\n    fund_announcement_personnel_em_df = fund_announcement_personnel_em(symbol=\"000001\")\n    print(fund_announcement_personnel_em_df)\n"
  },
  {
    "path": "akshare/fund/fund_aum_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/11/11 16:30\nDesc: 东方财富-基金\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\n\ndef fund_aum_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富-基金-基金公司排名列表\n    https://fund.eastmoney.com/Company/lsgm.html\n    :return: 基金公司排名列表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/Company/home/gspmlist\"\n    params = {\"fundType\": \"0\"}\n    r = requests.get(url, params=params)\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    del temp_df[\"相关链接\"]\n    del temp_df[\"天相评级\"]\n    temp_df.columns = [\n        \"序号\",\n        \"基金公司\",\n        \"成立时间\",\n        \"全部管理规模\",\n        \"全部基金数\",\n        \"全部经理数\",\n    ]\n    expanded_df = temp_df[\"全部管理规模\"].str.split(\" \", expand=True)\n    temp_df[\"全部管理规模\"] = expanded_df.iloc[:, 0].str.replace(\",\", \"\")\n    temp_df[\"更新日期\"] = expanded_df.iloc[:, 1]\n    temp_df[\"全部管理规模\"] = pd.to_numeric(temp_df[\"全部管理规模\"], errors=\"coerce\")\n    temp_df[\"全部基金数\"] = pd.to_numeric(temp_df[\"全部基金数\"], errors=\"coerce\")\n    temp_df[\"全部经理数\"] = pd.to_numeric(temp_df[\"全部经理数\"], errors=\"coerce\")\n    temp_df[\"成立时间\"] = pd.to_datetime(temp_df[\"成立时间\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\ndef fund_aum_trend_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富-基金-基金市场管理规模走势图\n    https://fund.eastmoney.com/Company/default.html\n    :return: 基金市场管理规模走势图\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/Company/home/GetFundTotalScaleForChart\"\n    payload = {\"fundType\": \"0\"}\n    r = requests.get(url, data=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame()\n    temp_df[\"date\"] = data_json[\"x\"]\n    temp_df[\"value\"] = data_json[\"y\"]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_aum_hist_em(year: str = \"2023\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-基金-基金公司历年管理规模排行列表\n    https://fund.eastmoney.com/Company/lsgm.html\n    :param year: query year\n    :type year: str\n    :return: 基金公司历年管理规模排行列表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/Company/home/HistoryScaleTable\"\n    params = {\"year\": year}\n    r = requests.get(url, params=params)\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df.columns = [\n        \"序号\",\n        \"基金公司\",\n        \"总规模\",\n        \"股票型\",\n        \"混合型\",\n        \"债券型\",\n        \"指数型\",\n        \"QDII\",\n        \"货币型\",\n    ]\n    temp_df[\"总规模\"] = pd.to_numeric(temp_df[\"总规模\"], errors=\"coerce\")\n    temp_df[\"股票型\"] = pd.to_numeric(temp_df[\"股票型\"], errors=\"coerce\")\n    temp_df[\"混合型\"] = pd.to_numeric(temp_df[\"混合型\"], errors=\"coerce\")\n    temp_df[\"债券型\"] = pd.to_numeric(temp_df[\"债券型\"], errors=\"coerce\")\n    temp_df[\"指数型\"] = pd.to_numeric(temp_df[\"指数型\"], errors=\"coerce\")\n    temp_df[\"QDII\"] = pd.to_numeric(temp_df[\"QDII\"], errors=\"coerce\")\n    temp_df[\"货币型\"] = pd.to_numeric(temp_df[\"货币型\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fund_aum_em_df = fund_aum_em()\n    print(fund_aum_em_df)\n\n    fund_aum_trend_em_df = fund_aum_trend_em()\n    print(fund_aum_trend_em_df)\n\n    fund_em_aum_hist_df = fund_aum_hist_em(year=\"2023\")\n    print(fund_em_aum_hist_df)\n"
  },
  {
    "path": "akshare/fund/fund_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/1/20 17:00\nDesc: 东方财富网站-天天基金网-基金数据-开放式基金净值\nhttps://fund.eastmoney.com/manager/default.html#dt14;mcreturnjson;ftall;pn20;pi1;scabbname;stasc\n1.基金经理基本数据, 建议包含:基金经理代码,基金经理姓名,从业起始日期,现任基金公司,管理资产总规模,上述数据可在\"基金经理列表:\nhttps://fund.eastmoney.com/manager/default.html#dt14;mcreturnjson;ftall;pn20;pi1;scabbname;stasc 和\n\"基金经理理档案如:https://fund.eastmoney.com/manager/30040164.html 获取.\n2.基金经理任职数据:可调取全部或特定经理,管理的基金数据,建议包含:基金经理代码,基金经理姓名,基金代码,基金简称,\n经理位次(在当前基金的经理中排第几位),起始任职时间,截止任职时间,任职回报.在特定基金的经理信息中可以获取如:\nhttps://fundf10.eastmoney.com/jjjl_001810.html\n3.在接口：fund_basic\"公募基金列表\"增加数据\"基金经理代码\"(或第一基金经理代码),\n\"基金经理姓名\"(或第一基金经理姓名),\"当前基金经理人数\",\"当前经理任职起始时间\".\n用户ID:269993\n\"\"\"\n\nimport json\nimport math\nimport time\nfrom io import StringIO\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\nfrom akshare.utils import demjson\nfrom akshare.utils.cons import headers\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef fund_purchase_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网站-天天基金网-基金数据-基金申购状态\n    https://fund.eastmoney.com/Fund_sgzt_bzdm.html#fcode,asc_1\n    :return: 基金申购状态\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx\"\n    params = {\n        \"t\": \"8\",\n        \"page\": \"1,50000\",\n        \"js\": \"reData\",\n        \"sort\": \"fcode,asc\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_text = r.text\n    data_json = demjson.decode(data_text.strip(\"var reData=\"))\n    temp_df = pd.DataFrame(data_json[\"datas\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    temp_df.columns = [\n        \"序号\",\n        \"基金代码\",\n        \"基金简称\",\n        \"基金类型\",\n        \"最新净值/万份收益\",\n        \"最新净值/万份收益-报告时间\",\n        \"申购状态\",\n        \"赎回状态\",\n        \"下一开放日\",\n        \"购买起点\",\n        \"日累计限定金额\",\n        \"-\",\n        \"-\",\n        \"手续费\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"基金代码\",\n            \"基金简称\",\n            \"基金类型\",\n            \"最新净值/万份收益\",\n            \"最新净值/万份收益-报告时间\",\n            \"申购状态\",\n            \"赎回状态\",\n            \"下一开放日\",\n            \"购买起点\",\n            \"日累计限定金额\",\n            \"手续费\",\n        ]\n    ]\n    temp_df[\"下一开放日\"] = pd.to_datetime(\n        temp_df[\"下一开放日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"最新净值/万份收益\"] = pd.to_numeric(\n        temp_df[\"最新净值/万份收益\"], errors=\"coerce\"\n    )\n    temp_df[\"购买起点\"] = pd.to_numeric(temp_df[\"购买起点\"], errors=\"coerce\")\n    temp_df[\"日累计限定金额\"] = pd.to_numeric(\n        temp_df[\"日累计限定金额\"], errors=\"coerce\"\n    )\n    temp_df[\"手续费\"] = temp_df[\"手续费\"].str.strip(\"%\")\n    temp_df[\"手续费\"] = pd.to_numeric(temp_df[\"手续费\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_name_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网站-天天基金网-基金数据-所有基金的名称和类型\n    https://fund.eastmoney.com/manager/default.html#dt14;mcreturnjson;ftall;pn20;pi1;scabbname;stasc\n    :return: 所有基金的名称和类型\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/js/fundcode_search.js\"\n    r = requests.get(url, headers=headers)\n    text_data = r.text\n    data_json = demjson.decode(text_data.strip(\"var r = \")[:-1])\n    temp_df = pd.DataFrame(data_json)\n    temp_df.columns = [\"基金代码\", \"拼音缩写\", \"基金简称\", \"基金类型\", \"拼音全称\"]\n    return temp_df\n\n\ndef fund_info_index_em(\n    symbol: str = \"沪深指数\", indicator: str = \"被动指数型\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网站-天天基金网-基金数据-基金信息-指数型\n    https://fund.eastmoney.com/trade/zs.html\n    :param symbol: choice of {\"全部\", \"沪深指数\", \"行业主题\", \"大盘指数\", \"中盘指数\", \"小盘指数\", \"股票指数\", \"债券指数\"}\n    :type symbol: str\n    :param indicator: choice of {\"全部\", \"被动指数型\", \"增强指数型\"}\n    :type indicator: str\n    :return: 基金信息-指数型\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"全部\": \"\",\n        \"沪深指数\": \"053\",\n        \"行业主题\": \"054\",\n        \"大盘指数\": \"01\",\n        \"中盘指数\": \"02\",\n        \"小盘指数\": \"03\",\n        \"股票指数\": \"050|001\",\n        \"债券指数\": \"050|003\",\n    }\n    indicator_map = {\n        \"全部\": \"\",\n        \"被动指数型\": \"051\",\n        \"增强指数型\": \"052\",\n    }\n    url = \"https://api.fund.eastmoney.com/FundTradeRank/GetRankList\"\n    if symbol in {\"股票指数\", \"债券指数\"}:\n        params = {\n            \"ft\": \"zs\",\n            \"sc\": \"1n\",\n            \"st\": \"desc\",\n            \"pi\": \"1\",\n            \"pn\": \"10000\",\n            \"cp\": \"\",\n            \"ct\": \"\",\n            \"cd\": \"\",\n            \"ms\": \"\",\n            \"fr\": symbol_map[symbol].split(\"|\")[0],\n            \"plevel\": \"\",\n            \"fst\": \"\",\n            \"ftype\": symbol_map[symbol].split(\"|\")[1],\n            \"fr1\": indicator_map[indicator],\n            \"fl\": \"0\",\n            \"isab\": \"1\",\n        }\n    else:\n        params = {\n            \"ft\": \"zs\",\n            \"sc\": \"1n\",\n            \"st\": \"desc\",\n            \"pi\": \"1\",\n            \"pn\": \"10000\",\n            \"cp\": \"\",\n            \"ct\": \"\",\n            \"cd\": \"\",\n            \"ms\": \"\",\n            \"fr\": symbol_map[symbol].split(\"|\")[0],\n            \"plevel\": \"\",\n            \"fst\": \"\",\n            \"ftype\": \"\",\n            \"fr1\": indicator_map[indicator],\n            \"fl\": \"0\",\n            \"isab\": \"1\",\n        }\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Host\": \"api.fund.eastmoney.com\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://fund.eastmoney.com/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/103.0.0.0 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    data_json = json.loads(data_json[\"Data\"])\n    temp_df = pd.DataFrame([item.split(\"|\") for item in data_json[\"datas\"]])\n    temp_df.columns = [\n        \"基金代码\",\n        \"基金名称\",\n        \"-\",\n        \"日期\",\n        \"单位净值\",\n        \"日增长率\",\n        \"近1周\",\n        \"近1月\",\n        \"近3月\",\n        \"近6月\",\n        \"近1年\",\n        \"近2年\",\n        \"近3年\",\n        \"今年来\",\n        \"成立来\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"手续费\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"起购金额\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"基金代码\",\n            \"基金名称\",\n            \"单位净值\",\n            \"日期\",\n            \"日增长率\",\n            \"近1周\",\n            \"近1月\",\n            \"近3月\",\n            \"近6月\",\n            \"近1年\",\n            \"近2年\",\n            \"近3年\",\n            \"今年来\",\n            \"成立来\",\n            \"手续费\",\n            \"起购金额\",\n        ]\n    ]\n    temp_df[\"跟踪标的\"] = symbol\n    temp_df[\"跟踪方式\"] = indicator\n\n    temp_df[\"单位净值\"] = pd.to_numeric(temp_df[\"单位净值\"], errors=\"coerce\")\n    temp_df[\"日增长率\"] = pd.to_numeric(temp_df[\"日增长率\"], errors=\"coerce\")\n    temp_df[\"近1周\"] = pd.to_numeric(temp_df[\"近1周\"], errors=\"coerce\")\n    temp_df[\"近1月\"] = pd.to_numeric(temp_df[\"近1月\"], errors=\"coerce\")\n    temp_df[\"近3月\"] = pd.to_numeric(temp_df[\"近3月\"], errors=\"coerce\")\n    temp_df[\"近6月\"] = pd.to_numeric(temp_df[\"近6月\"], errors=\"coerce\")\n    temp_df[\"近1年\"] = pd.to_numeric(temp_df[\"近1年\"], errors=\"coerce\")\n    temp_df[\"近2年\"] = pd.to_numeric(temp_df[\"近2年\"], errors=\"coerce\")\n    temp_df[\"近3年\"] = pd.to_numeric(temp_df[\"近3年\"], errors=\"coerce\")\n    temp_df[\"今年来\"] = pd.to_numeric(temp_df[\"今年来\"], errors=\"coerce\")\n    temp_df[\"成立来\"] = pd.to_numeric(temp_df[\"成立来\"], errors=\"coerce\")\n    temp_df[\"手续费\"] = pd.to_numeric(temp_df[\"手续费\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_open_fund_daily_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-天天基金网-基金数据-开放式基金净值\n    https://fund.eastmoney.com/fund.html#os_0;isall_0;ft_;pt_1\n    :return: 当前交易日的所有开放式基金净值数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx\"\n    params = {\n        \"t\": \"1\",\n        \"lx\": \"1\",\n        \"letter\": \"\",\n        \"gsid\": \"\",\n        \"text\": \"\",\n        \"sort\": \"zdf,desc\",\n        \"page\": \"1,50000\",\n        \"dt\": \"1580914040623\",\n        \"atfc\": \"\",\n        \"onlySale\": \"0\",\n    }\n    res = requests.get(url, params=params, headers=headers)\n    text_data = res.text\n    data_json = demjson.decode(text_data.strip(\"var db=\"))\n    temp_df = pd.DataFrame(data_json[\"datas\"])\n    show_day = data_json[\"showday\"]\n    temp_df.columns = [\n        \"基金代码\",\n        \"基金简称\",\n        \"-\",\n        f\"{show_day[0]}-单位净值\",\n        f\"{show_day[0]}-累计净值\",\n        f\"{show_day[1]}-单位净值\",\n        f\"{show_day[1]}-累计净值\",\n        \"日增长值\",\n        \"日增长率\",\n        \"申购状态\",\n        \"赎回状态\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"手续费\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    data_df = temp_df[\n        [\n            \"基金代码\",\n            \"基金简称\",\n            f\"{show_day[0]}-单位净值\",\n            f\"{show_day[0]}-累计净值\",\n            f\"{show_day[1]}-单位净值\",\n            f\"{show_day[1]}-累计净值\",\n            \"日增长值\",\n            \"日增长率\",\n            \"申购状态\",\n            \"赎回状态\",\n            \"手续费\",\n        ]\n    ]\n    return data_df\n\n\ndef fund_open_fund_info_em(\n    symbol: str = \"710001\", indicator: str = \"单位净值走势\", period: str = \"成立来\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-天天基金网-基金数据-开放式基金净值\n    https://fund.eastmoney.com/fund.html\n    :param symbol: 基金代码; 可以通过调用 ak.fund_open_fund_daily_em() 获取所有开放式基金代码\n    :type symbol: str\n    :param indicator: 需要获取的指标\n    :type indicator: str\n    :param period: \"成立来\"; choice of {\"1月\", \"3月\", \"6月\", \"1年\", \"3年\", \"5年\", \"今年来\", \"成立来\"}\n    :type period: str\n    :return: 指定基金指定指标的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    from akshare.utils.cons import headers\n\n    url = f\"https://fund.eastmoney.com/pingzhongdata/{symbol}.js\"  # 各类数据都在里面\n    r = requests.get(url, headers=headers)\n    data_text = r.text\n\n    js_code = py_mini_racer.MiniRacer()\n    js_code.eval(data_text)\n\n    # 单位净值走势\n    if indicator == \"单位净值走势\":\n        data_json = js_code.execute(\"Data_netWorthTrend\")\n        temp_df = pd.DataFrame(data_json)\n        if temp_df.empty:\n            return pd.DataFrame()\n        temp_df[\"x\"] = pd.to_datetime(temp_df[\"x\"], unit=\"ms\", utc=True).dt.tz_convert(\n            \"Asia/Shanghai\"\n        )\n        temp_df[\"x\"] = temp_df[\"x\"].dt.date\n        temp_df.columns = [\n            \"净值日期\",\n            \"单位净值\",\n            \"日增长率\",\n            \"_\",\n        ]\n        temp_df = temp_df[\n            [\n                \"净值日期\",\n                \"单位净值\",\n                \"日增长率\",\n            ]\n        ]\n        temp_df[\"净值日期\"] = pd.to_datetime(\n            temp_df[\"净值日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"单位净值\"] = pd.to_numeric(temp_df[\"单位净值\"], errors=\"coerce\")\n        temp_df[\"日增长率\"] = pd.to_numeric(temp_df[\"日增长率\"], errors=\"coerce\")\n        return temp_df\n\n    # 累计净值走势\n    if indicator == \"累计净值走势\":\n        data_json = js_code.execute(\"Data_ACWorthTrend\")\n        temp_df = pd.DataFrame(data_json)\n        if temp_df.empty:\n            return pd.DataFrame()\n        temp_df.columns = [\"x\", \"y\"]\n        temp_df[\"x\"] = pd.to_datetime(temp_df[\"x\"], unit=\"ms\", utc=True).dt.tz_convert(\n            \"Asia/Shanghai\"\n        )\n        temp_df[\"x\"] = temp_df[\"x\"].dt.date\n        temp_df.columns = [\n            \"净值日期\",\n            \"累计净值\",\n        ]\n        temp_df = temp_df[\n            [\n                \"净值日期\",\n                \"累计净值\",\n            ]\n        ]\n        temp_df[\"净值日期\"] = pd.to_datetime(\n            temp_df[\"净值日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"累计净值\"] = pd.to_numeric(temp_df[\"累计净值\"], errors=\"coerce\")\n        return temp_df\n\n    # 每万份收益\n    if indicator == \"每万份收益\":\n        data_json = js_code.execute(\"Data_millionCopiesIncome\")\n        temp_df = pd.DataFrame(data_json)\n        if temp_df.empty:\n            return pd.DataFrame()\n        temp_df.columns = [\"x\", \"y\"]\n        temp_df[\"x\"] = pd.to_datetime(temp_df[\"x\"], unit=\"ms\", utc=True).dt.tz_convert(\n            \"Asia/Shanghai\"\n        )\n        temp_df[\"x\"] = temp_df[\"x\"].dt.date\n        temp_df.columns = [\n            \"净值日期\",\n            \"每万份收益\",\n        ]\n        temp_df = temp_df[\n            [\n                \"净值日期\",\n                \"每万份收益\",\n            ]\n        ]\n        temp_df[\"净值日期\"] = pd.to_datetime(\n            temp_df[\"净值日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"每万份收益\"] = pd.to_numeric(temp_df[\"每万份收益\"], errors=\"coerce\")\n        return temp_df\n\n    # 7日年化收益率\n    if indicator == \"7日年化收益率\":\n        data_json = js_code.execute(\"Data_sevenDaysYearIncome\")\n        temp_df = pd.DataFrame(data_json)\n        if temp_df.empty:\n            return pd.DataFrame()\n        temp_df.columns = [\"x\", \"y\"]\n        temp_df[\"x\"] = pd.to_datetime(temp_df[\"x\"], unit=\"ms\", utc=True).dt.tz_convert(\n            \"Asia/Shanghai\"\n        )\n        temp_df[\"x\"] = temp_df[\"x\"].dt.date\n        temp_df.columns = [\n            \"净值日期\",\n            \"7日年化收益率\",\n        ]\n        temp_df = temp_df[\n            [\n                \"净值日期\",\n                \"7日年化收益率\",\n            ]\n        ]\n        temp_df[\"净值日期\"] = pd.to_datetime(\n            temp_df[\"净值日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"7日年化收益率\"] = pd.to_numeric(\n            temp_df[\"7日年化收益率\"], errors=\"coerce\"\n        )\n        return temp_df\n\n    # 累计收益率走势\n    if indicator == \"累计收益率走势\":\n        url = \"https://api.fund.eastmoney.com/pinzhong/LJSYLZS\"\n        headers = {\"Referer\": \"https://fund.eastmoney.com/\"}\n        period_map = {\n            \"1月\": \"m\",\n            \"3月\": \"q\",\n            \"6月\": \"hy\",\n            \"1年\": \"y\",\n            \"3年\": \"try\",\n            \"5年\": \"fiy\",\n            \"今年来\": \"sy\",\n            \"成立来\": \"se\",\n        }\n        params = {\n            \"fundCode\": symbol,\n            \"indexcode\": \"000300\",\n            \"type\": period_map[period],\n        }\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"Data\"][0][\"data\"])\n        temp_df.columns = [\"日期\", \"累计收益率\"]\n        temp_df[\"日期\"] = pd.to_datetime(\n            temp_df[\"日期\"], unit=\"ms\", utc=True\n        ).dt.tz_convert(\"Asia/Shanghai\")\n        temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n        temp_df[\"累计收益率\"] = pd.to_numeric(temp_df[\"累计收益率\"], errors=\"coerce\")\n        return temp_df\n\n    # 同类排名走势\n    if indicator == \"同类排名走势\":\n        data_json = js_code.execute(\"Data_rateInSimilarType\")\n        temp_df = pd.DataFrame(data_json)\n        temp_df[\"x\"] = pd.to_datetime(temp_df[\"x\"], unit=\"ms\", utc=True).dt.tz_convert(\n            \"Asia/Shanghai\"\n        )\n        temp_df[\"x\"] = temp_df[\"x\"].dt.date\n        temp_df.columns = [\n            \"报告日期\",\n            \"同类型排名-每日近三月排名\",\n            \"总排名-每日近三月排名\",\n        ]\n        temp_df = temp_df[\n            [\n                \"报告日期\",\n                \"同类型排名-每日近三月排名\",\n                \"总排名-每日近三月排名\",\n            ]\n        ]\n        temp_df[\"报告日期\"] = pd.to_datetime(\n            temp_df[\"报告日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"同类型排名-每日近三月排名\"] = pd.to_numeric(\n            temp_df[\"同类型排名-每日近三月排名\"], errors=\"coerce\"\n        )\n        temp_df[\"总排名-每日近三月排名\"] = pd.to_numeric(\n            temp_df[\"总排名-每日近三月排名\"], errors=\"coerce\"\n        )\n        return temp_df\n\n    # 同类排名百分比\n    if indicator == \"同类排名百分比\":\n        data_json = js_code.execute(\"Data_rateInSimilarPersent\")\n        temp_df = pd.DataFrame(data_json)\n        temp_df.columns = [\"x\", \"y\"]\n        temp_df[\"x\"] = pd.to_datetime(temp_df[\"x\"], unit=\"ms\", utc=True).dt.tz_convert(\n            \"Asia/Shanghai\"\n        )\n        temp_df[\"x\"] = temp_df[\"x\"].dt.date\n        temp_df.columns = [\n            \"报告日期\",\n            \"同类型排名-每日近3月收益排名百分比\",\n        ]\n        temp_df = temp_df[\n            [\n                \"报告日期\",\n                \"同类型排名-每日近3月收益排名百分比\",\n            ]\n        ]\n        temp_df[\"报告日期\"] = pd.to_datetime(\n            temp_df[\"报告日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"同类型排名-每日近3月收益排名百分比\"] = pd.to_numeric(\n            temp_df[\"同类型排名-每日近3月收益排名百分比\"], errors=\"coerce\"\n        )\n        return temp_df\n\n    # 分红送配详情\n    if indicator == \"分红送配详情\":\n        url = f\"https://fundf10.eastmoney.com/fhsp_{symbol}.html\"\n        r = requests.get(url, headers=headers)\n        table_num = len(pd.read_html(StringIO(r.text)))\n        if table_num == 3:\n            temp_df = pd.read_html(StringIO(r.text))[1]\n        else:\n            temp_df = pd.read_html(StringIO(r.text))[0]\n        if temp_df.iloc[0, 1] == \"暂无分红信息!\":\n            return pd.DataFrame()\n        else:\n            return temp_df\n\n    # 拆分详情\n    if indicator == \"拆分详情\":\n        url = f\"https://fundf10.eastmoney.com/fhsp_{symbol}.html\"\n        r = requests.get(url, headers=headers)\n        table_num = len(pd.read_html(StringIO(r.text)))\n        if table_num == 3:\n            temp_df = pd.read_html(StringIO(r.text))[2]\n        else:\n            temp_df = pd.read_html(StringIO(r.text))[1]\n        if temp_df.iloc[0, 1] == \"暂无拆分信息!\":\n            return pd.DataFrame()\n        else:\n            return temp_df\n    return pd.DataFrame()\n\n\ndef fund_money_fund_daily_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-天天基金网-基金数据-货币型基金收益\n    https://fund.eastmoney.com/HBJJ_pjsyl.html\n    :return: 当前交易日的所有货币型基金收益数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/HBJJ_pjsyl.html\"\n    r = requests.get(url, headers=headers)\n    r.encoding = \"gb2312\"\n    show_day = pd.read_html(StringIO(r.text))[1].iloc[0, 5:11].tolist()\n    temp_df = pd.read_html(StringIO(r.text))[1].iloc[1:, 2:]\n    temp_df_columns = temp_df.iloc[0, :].tolist()[1:]\n    temp_df = temp_df.iloc[1:, 1:]\n    temp_df.columns = temp_df_columns\n    temp_df[\"基金简称\"] = temp_df[\"基金简称\"].str.strip(\"基金吧档案\")\n    temp_df.columns = [\n        \"基金代码\",\n        \"基金简称\",\n        f\"{show_day[0]}-万份收益\",\n        f\"{show_day[1]}-7日年化%\",\n        f\"{show_day[2]}-单位净值\",\n        f\"{show_day[3]}-万份收益\",\n        f\"{show_day[4]}-7日年化%\",\n        f\"{show_day[5]}-单位净值\",\n        \"日涨幅\",\n        \"成立日期\",\n        \"基金经理\",\n        \"手续费\",\n        \"可购全部\",\n    ]\n    return temp_df\n\n\ndef fund_money_fund_info_em(symbol: str = \"000009\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-天天基金网-基金数据-货币型基金收益-历史净值数据\n    https://fundf10.eastmoney.com/jjjz_004186.html\n    :param symbol: 货币型基金代码, 可以通过 fund_money_fund_daily_em 来获取\n    :type symbol: str\n    :return: 东方财富网站-天天基金网-基金数据-货币型基金收益-历史净值数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://api.fund.eastmoney.com/f10/lsjz\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/80.0.3987.149 Safari/537.36\",\n        \"Referer\": f\"https://fundf10.eastmoney.com/jjjz_{symbol}.html\",\n        \"Host\": \"api.fund.eastmoney.com\",\n    }\n    params = {\n        \"fundCode\": symbol,\n        \"pageIndex\": \"1\",\n        \"pageSize\": \"20\",\n        \"startDate\": \"\",\n        \"endDate\": \"\",\n        \"_\": round(time.time() * 1000),\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    total_page = math.ceil(int(data_json[\"TotalCount\"]) / 20)\n    tqdm = get_tqdm()\n    big_list = []\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageIndex\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"Data\"][\"LSJZList\"])\n        big_list.append(temp_df)\n    big_df = pd.concat(big_list, ignore_index=True)\n    big_df.columns = [\n        \"净值日期\",\n        \"每万份收益\",\n        \"7日年化收益率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"申购状态\",\n        \"赎回状态\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df.sort_values(by=[\"净值日期\"], inplace=True, ignore_index=True)\n    big_df = big_df[[\"净值日期\", \"每万份收益\", \"7日年化收益率\", \"申购状态\", \"赎回状态\"]]\n    big_df[\"净值日期\"] = pd.to_datetime(big_df[\"净值日期\"], errors=\"coerce\").dt.date\n    big_df[\"每万份收益\"] = pd.to_numeric(big_df[\"每万份收益\"], errors=\"coerce\")\n    big_df[\"7日年化收益率\"] = pd.to_numeric(big_df[\"7日年化收益率\"], errors=\"coerce\")\n    return big_df\n\n\ndef fund_financial_fund_daily_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网站-天天基金网-基金数据-理财型基金收益\n    # 该接口暂无数据\n    https://fund.eastmoney.com/lcjj.html#1_1__0__ljjz,desc_1_os1\n    :return: 当前交易日的所有理财型基金收益\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://api.fund.eastmoney.com/FundNetValue/GetLCJJJZ\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/80.0.3987.149 Safari/537.36\",\n        \"Referer\": \"https://fund.eastmoney.com/lcjj.html\",\n    }\n    params = {\n        \"letter\": \"\",\n        \"jjgsid\": \"0\",\n        \"searchtext\": \"\",\n        \"sort\": \"ljjz,desc\",\n        \"page\": \"1,100\",\n        \"AttentionCodes\": \"\",\n        \"cycle\": \"\",\n        \"OnlySale\": \"1\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"Data\"][\"List\"])\n    if temp_df.empty:\n        return pd.DataFrame()\n    show_day = data_json[\"Data\"][\"showday\"]\n    data_df = temp_df[\n        [\n            \"Id\",\n            \"actualsyi\",\n            \"cycle\",\n            \"fcode\",\n            \"kfr\",\n            \"mui\",\n            \"shortname\",\n            \"syi\",\n            \"zrmui\",\n            \"zrsyi\",\n        ]\n    ]\n    data_df.columns = [\n        \"序号\",\n        \"上一期年化收益率\",\n        \"封闭期\",\n        \"基金代码\",\n        \"申购状态\",\n        f\"{show_day[0]}-万份收益\",\n        \"基金简称\",\n        f\"{show_day[0]}-7日年华\",\n        f\"{show_day[1]}-万份收益\",\n        f\"{show_day[1]}-7日年华\",\n    ]\n    data_df = data_df[\n        [\n            \"序号\",\n            \"基金代码\",\n            \"基金简称\",\n            \"上一期年化收益率\",\n            f\"{show_day[0]}-万份收益\",\n            f\"{show_day[0]}-7日年华\",\n            f\"{show_day[1]}-万份收益\",\n            f\"{show_day[1]}-7日年华\",\n            \"封闭期\",\n            \"申购状态\",\n        ]\n    ]\n    return data_df\n\n\ndef fund_financial_fund_info_em(symbol: str = \"000134\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网站-天天基金网-基金数据-理财型基金收益-历史净值明细\n    https://fundf10.eastmoney.com/jjjz_000791.html\n    :param symbol: 理财型基金代码, 可以通过 ak.fund_financial_fund_daily_em() 来获取\n    :type symbol: str\n    :return: 东方财富网站-天天基金网-基金数据-理财型基金收益-历史净值明细\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://api.fund.eastmoney.com/f10/lsjz\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/80.0.3987.149 Safari/537.36\",\n        \"Referer\": f\"https://fundf10.eastmoney.com/jjjz_{symbol}.html\",\n    }\n    params = {\n        \"callback\": \"jQuery18307915911837995662_1588249228826\",\n        \"fundCode\": symbol,\n        \"pageIndex\": \"1\",\n        \"pageSize\": \"10000\",\n        \"startDate\": \"\",\n        \"endDate\": \"\",\n        \"_\": round(time.time() * 1000),\n    }\n    r = requests.get(url, params=params, headers=headers)\n    text_data = r.text\n    data_json = demjson.decode(text_data[text_data.find(\"{\") : -1])\n    temp_df = pd.DataFrame(data_json[\"Data\"][\"LSJZList\"])\n    temp_df.columns = [\n        \"净值日期\",\n        \"单位净值\",\n        \"累计净值\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"日增长率\",\n        \"申购状态\",\n        \"赎回状态\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"分红送配\",\n    ]\n    temp_df = temp_df[\n        [\n            \"净值日期\",\n            \"单位净值\",\n            \"累计净值\",\n            \"日增长率\",\n            \"申购状态\",\n            \"赎回状态\",\n            \"分红送配\",\n        ]\n    ]\n    temp_df.sort_values([\"净值日期\"], inplace=True, ignore_index=True)\n    temp_df[\"净值日期\"] = pd.to_datetime(temp_df[\"净值日期\"]).dt.date\n    temp_df[\"单位净值\"] = pd.to_numeric(temp_df[\"单位净值\"], errors=\"coerce\")\n    temp_df[\"累计净值\"] = pd.to_numeric(temp_df[\"累计净值\"], errors=\"coerce\")\n    temp_df[\"日增长率\"] = pd.to_numeric(temp_df[\"日增长率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_graded_fund_daily_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网站-天天基金网-基金数据-分级基金净值\n    https://fund.eastmoney.com/fjjj.html#1_1__0__zdf,desc_1\n    :return: 当前交易日的所有分级基金净值\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/80.0.3987.149 Safari/537.36\",\n        \"Referer\": \"https://fund.eastmoney.com/fjjj.html\",\n    }\n    params = {\n        \"t\": \"1\",\n        \"lx\": \"9\",\n        \"letter\": \"\",\n        \"gsid\": \"0\",\n        \"text\": \"\",\n        \"sort\": \"zdf,desc\",\n        \"page\": \"1,10000\",\n        \"dt\": \"1580914040623\",\n        \"atfc\": \"\",\n    }\n    res = requests.get(url, params=params, headers=headers)\n    text_data = res.text\n    data_json = demjson.decode(text_data.strip(\"var db=\"))\n    temp_df = pd.DataFrame(data_json[\"datas\"])\n    show_day = data_json[\"showday\"]\n    temp_df.columns = [\n        \"基金代码\",\n        \"基金简称\",\n        \"-\",\n        f\"{show_day[0]}-单位净值\",\n        f\"{show_day[0]}-累计净值\",\n        f\"{show_day[1]}--单位净值\",\n        f\"{show_day[1]}--累计净值\",\n        \"日增长值\",\n        \"日增长率\",\n        \"市价\",\n        \"折价率\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"手续费\",\n    ]\n    data_df = temp_df[\n        [\n            \"基金代码\",\n            \"基金简称\",\n            f\"{show_day[0]}-单位净值\",\n            f\"{show_day[0]}-累计净值\",\n            f\"{show_day[1]}--单位净值\",\n            f\"{show_day[1]}--累计净值\",\n            \"日增长值\",\n            \"日增长率\",\n            \"市价\",\n            \"折价率\",\n            \"手续费\",\n        ]\n    ]\n    return data_df\n\n\ndef fund_graded_fund_info_em(symbol: str = \"150232\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网站-天天基金网-基金数据-分级基金净值-历史净值明细\n    https://fundf10.eastmoney.com/jjjz_150232.html\n    :param symbol: 分级基金代码, 可以通过 ak.fund_money_fund_daily_em() 来获取\n    :type symbol: str\n    :return: 东方财富网站-天天基金网-基金数据-分级基金净值-历史净值明细\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://api.fund.eastmoney.com/f10/lsjz\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/80.0.3987.149 Safari/537.36\",\n        \"Referer\": f\"https://fundf10.eastmoney.com/jjjz_{symbol}.html\",\n    }\n    params = {\n        \"fundCode\": symbol,\n        \"pageIndex\": \"1\",\n        \"pageSize\": \"20\",\n        \"startDate\": \"\",\n        \"endDate\": \"\",\n        \"_\": round(time.time() * 1000),\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    total_page = math.ceil(int(data_json[\"TotalCount\"]) / 20)\n    tqdm = get_tqdm()\n    big_list = []\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageIndex\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"Data\"][\"LSJZList\"])\n        big_list.append(temp_df)\n    big_df = pd.concat(big_list, ignore_index=True)\n    big_df.columns = [\n        \"净值日期\",\n        \"单位净值\",\n        \"累计净值\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"日增长率\",\n        \"申购状态\",\n        \"赎回状态\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df.sort_values(by=[\"净值日期\"], inplace=True, ignore_index=True)\n    big_df = big_df[\n        [\"净值日期\", \"单位净值\", \"累计净值\", \"日增长率\", \"申购状态\", \"赎回状态\"]\n    ]\n    big_df[\"净值日期\"] = pd.to_datetime(big_df[\"净值日期\"], errors=\"coerce\").dt.date\n    big_df[\"单位净值\"] = pd.to_numeric(big_df[\"单位净值\"], errors=\"coerce\")\n    big_df[\"累计净值\"] = pd.to_numeric(big_df[\"累计净值\"], errors=\"coerce\")\n    big_df[\"日增长率\"] = pd.to_numeric(big_df[\"日增长率\"], errors=\"coerce\")\n    return big_df\n\n\ndef fund_etf_fund_daily_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-天天基金网-基金数据-场内交易基金\n    https://fund.eastmoney.com/cnjy_dwjz.html\n    :return: 当前交易日的所有场内交易基金数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/cnjy_dwjz.html\"\n    r = requests.get(url, headers=headers)\n    r.encoding = \"gb2312\"\n    show_day = pd.read_html(StringIO(r.text))[1].iloc[0, 6:10].tolist()\n    temp_df = pd.read_html(StringIO(r.text))[1].iloc[1:, 2:]\n    temp_df_columns = temp_df.iloc[0, :].tolist()[1:]\n    temp_df = temp_df.iloc[1:, 1:]\n    temp_df.columns = temp_df_columns\n    temp_df[\"基金简称\"] = temp_df[\"基金简称\"].str.replace(\"行情吧档案\", \"\")\n    temp_df.reset_index(inplace=True, drop=True)\n    temp_df.columns = [\n        \"基金代码\",\n        \"基金简称\",\n        \"类型\",\n        f\"{show_day[0]}-单位净值\",\n        f\"{show_day[0]}-累计净值\",\n        f\"{show_day[2]}-单位净值\",\n        f\"{show_day[2]}-累计净值\",\n        \"增长值\",\n        \"增长率\",\n        \"市价\",\n        \"折价率\",\n    ]\n    return temp_df\n\n\ndef fund_etf_fund_info_em(\n    fund: str = \"511280\",\n    start_date: str = \"20000101\",\n    end_date: str = \"20500101\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网站-天天基金网-基金数据-场内交易基金-历史净值明细\n    https://fundf10.eastmoney.com/jjjz_511280.html\n    :param fund: 场内交易基金代码, 可以通过 fund_etf_fund_daily_em 来获取\n    :type fund: str\n    :param start_date: 开始统计时间\n    :type start_date: str\n    :param end_date: 结束统计时间\n    :type end_date: str\n    :return: 东方财富网站-天天基金网-基金数据-场内交易基金-历史净值明细\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://api.fund.eastmoney.com/f10/lsjz\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/80.0.3987.149 Safari/537.36\",\n        \"Referer\": f\"https://fundf10.eastmoney.com/jjjz_{fund}.html\",\n    }\n    params = {\n        \"fundCode\": fund,\n        \"pageIndex\": \"1\",\n        \"pageSize\": \"20\",\n        \"startDate\": \"-\".join([start_date[:4], start_date[4:6], start_date[6:]]),\n        \"endDate\": \"-\".join([end_date[:4], end_date[4:6], end_date[6:]]),\n        \"_\": round(time.time() * 1000),\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    total_page = math.ceil(data_json[\"TotalCount\"] / 20)\n    df_list = []\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageIndex\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"Data\"][\"LSJZList\"])\n        df_list.append(temp_df)\n    big_df = pd.concat(df_list)\n    big_df.columns = [\n        \"净值日期\",\n        \"单位净值\",\n        \"累计净值\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"日增长率\",\n        \"申购状态\",\n        \"赎回状态\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\"净值日期\", \"单位净值\", \"累计净值\", \"日增长率\", \"申购状态\", \"赎回状态\"]\n    ]\n    big_df[\"净值日期\"] = pd.to_datetime(big_df[\"净值日期\"], errors=\"coerce\").dt.date\n    big_df[\"单位净值\"] = pd.to_numeric(big_df[\"单位净值\"], errors=\"coerce\")\n    big_df[\"累计净值\"] = pd.to_numeric(big_df[\"累计净值\"], errors=\"coerce\")\n    big_df[\"日增长率\"] = pd.to_numeric(big_df[\"日增长率\"], errors=\"coerce\")\n    big_df.sort_values([\"净值日期\"], inplace=True, ignore_index=True)\n    return big_df\n\n\ndef fund_value_estimation_em(symbol: str = \"全部\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-净值估算\n    https://fund.eastmoney.com/fundguzhi.html\n    :param symbol: choice of {'全部', '股票型', '混合型', '债券型', '指数型', 'QDII', 'ETF联接', 'LOF', '场内交易基金'}\n    :type symbol: str\n    :return: 近期净值估算数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"全部\": 1,\n        \"股票型\": 2,\n        \"混合型\": 3,\n        \"债券型\": 4,\n        \"指数型\": 5,\n        \"QDII\": 6,\n        \"ETF联接\": 7,\n        \"LOF\": 8,\n        \"场内交易基金\": 9,\n    }\n    url = \"https://api.fund.eastmoney.com/FundGuZhi/GetFundGZList\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/81.0.4044.138 Safari/537.36\",\n        \"Referer\": \"https://fund.eastmoney.com/\",\n    }\n    params = {\n        \"type\": symbol_map[symbol],\n        \"sort\": \"3\",\n        \"orderType\": \"desc\",\n        \"canbuy\": \"0\",\n        \"pageIndex\": \"1\",\n        \"pageSize\": \"20000\",\n        \"_\": int(time.time() * 1000),\n    }\n    r = requests.get(url, params=params, headers=headers)\n    json_data = r.json()\n    temp_df = pd.DataFrame(json_data[\"Data\"][\"list\"])\n    value_day = json_data[\"Data\"][\"gzrq\"]\n    cal_day = json_data[\"Data\"][\"gxrq\"]\n    temp_df.columns = [\n        \"基金代码\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"基金类型\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"估算日期\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"_\",\n        \"-\",\n        \"-\",\n        \"估算偏差\",\n        f\"{cal_day}-估算数据-估算值\",\n        f\"{cal_day}-估算数据-估算增长率\",\n        f\"{cal_day}-公布数据-日增长率\",\n        f\"{value_day}-单位净值\",\n        f\"{cal_day}-公布数据-单位净值\",\n        \"-\",\n        \"基金名称\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"基金代码\",\n            \"基金名称\",\n            f\"{cal_day}-估算数据-估算值\",\n            f\"{cal_day}-估算数据-估算增长率\",\n            f\"{cal_day}-公布数据-单位净值\",\n            f\"{cal_day}-公布数据-日增长率\",\n            \"估算偏差\",\n            f\"{value_day}-单位净值\",\n        ]\n    ]\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = range(1, len(temp_df) + 1)\n    temp_df.rename(columns={\"index\": \"序号\"}, inplace=True)\n    return temp_df\n\n\ndef fund_hk_fund_hist_em(\n    code: str = \"1002200683\", symbol: str = \"历史净值明细\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-天天基金网-基金数据-香港基金-历史净值明细(分红送配详情)\n    https://overseas.1234567.com.cn/f10/FundJz/968092#FHPS\n    :param code: 通过 ak.fund_em_hk_rank() 获取\n    :type code: str\n    :param symbol: choice of {\"历史净值明细\", \"分红送配详情\"}\n    :type symbol: str\n    :return: 香港基金-历史净值明细(分红送配详情)\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://overseas.1234567.com.cn/overseasapi/OpenApiHander.ashx\"\n    if symbol == \"历史净值明细\":\n        params = {\n            \"api\": \"HKFDApi\",\n            \"m\": \"MethodJZ\",\n            \"hkfcode\": f\"{code}\",\n            \"action\": \"2\",\n            \"pageindex\": \"0\",\n            \"pagesize\": \"1000\",\n            \"date1\": \"\",\n            \"date2\": \"\",\n        }\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_one_df = pd.DataFrame(data_json[\"Data\"])\n        temp_one_df.columns = [\n            \"_\",\n            \"_\",\n            \"_\",\n            \"净值日期\",\n            \"单位净值\",\n            \"_\",\n            \"日增长值\",\n            \"日增长率\",\n            \"_\",\n            \"单位\",\n            \"_\",\n        ]\n        temp_one_df = temp_one_df[\n            [\n                \"净值日期\",\n                \"单位净值\",\n                \"日增长值\",\n                \"日增长率\",\n                \"单位\",\n            ]\n        ]\n    else:\n        params = {\n            \"api\": \"HKFDApi\",\n            \"m\": \"MethodJZ\",\n            \"hkfcode\": f\"{code}\",\n            \"action\": \"3\",\n            \"pageindex\": \"0\",\n            \"pagesize\": \"1000\",\n            \"date1\": \"\",\n            \"date2\": \"\",\n        }\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_one_df = pd.DataFrame(data_json[\"Data\"])\n        temp_one_df.columns = [\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"年份\",\n            \"分红金额\",\n            \"除息日\",\n            \"权益登记日\",\n            \"分红发放日\",\n            \"_\",\n            \"单位\",\n            \"_\",\n            \"_\",\n        ]\n        temp_one_df = temp_one_df[\n            [\n                \"年份\",\n                \"权益登记日\",\n                \"除息日\",\n                \"分红发放日\",\n                \"分红金额\",\n                \"单位\",\n            ]\n        ]\n    return temp_one_df\n\n\nif __name__ == \"__main__\":\n    fund_purchase_em_df = fund_purchase_em()\n    print(fund_purchase_em_df)\n\n    fund_name_em_df = fund_name_em()\n    print(fund_name_em_df)\n\n    fund_info_index_em_df = fund_info_index_em(symbol=\"债券指数\", indicator=\"全部\")\n    print(fund_info_index_em_df)\n\n    fund_open_fund_daily_em_df = fund_open_fund_daily_em()\n    print(fund_open_fund_daily_em_df)\n    time.sleep(3)\n\n    fund_open_fund_info_em_df = fund_open_fund_info_em(\n        symbol=\"710001\", indicator=\"单位净值走势\"\n    )\n    print(fund_open_fund_info_em_df)\n    time.sleep(3)\n\n    fund_open_fund_info_em_df = fund_open_fund_info_em(\n        symbol=\"502010\", indicator=\"累计净值走势\", period=\"成立来\"\n    )\n    print(fund_open_fund_info_em_df)\n    time.sleep(3)\n\n    fund_open_fund_info_em_df = fund_open_fund_info_em(\n        symbol=\"710001\", indicator=\"累计收益率走势\", period=\"成立来\"\n    )\n    print(fund_open_fund_info_em_df)\n    time.sleep(3)\n\n    fund_open_fund_info_em_df = fund_open_fund_info_em(\n        symbol=\"710001\", indicator=\"同类排名走势\"\n    )\n    print(fund_open_fund_info_em_df)\n    time.sleep(3)\n\n    fund_open_fund_info_em_df = fund_open_fund_info_em(\n        symbol=\"710001\", indicator=\"同类排名百分比\"\n    )\n    print(fund_open_fund_info_em_df)\n    time.sleep(3)\n\n    fund_open_fund_info_em_df = fund_open_fund_info_em(\n        symbol=\"014164\", indicator=\"分红送配详情\"\n    )\n    print(fund_open_fund_info_em_df)\n    time.sleep(3)\n\n    fund_open_fund_info_em_df = fund_open_fund_info_em(\n        symbol=\"005561\", indicator=\"拆分详情\"\n    )\n    print(fund_open_fund_info_em_df)\n\n    fund_money_fund_daily_em_df = fund_money_fund_daily_em()\n    print(fund_money_fund_daily_em_df)\n\n    fund_money_fund_info_em_df = fund_money_fund_info_em(symbol=\"000009\")\n    print(fund_money_fund_info_em_df)\n\n    fund_financial_fund_daily_em_df = fund_financial_fund_daily_em()\n    print(fund_financial_fund_daily_em_df)\n\n    fund_financial_fund_info_em_df = fund_financial_fund_info_em(symbol=\"000134\")\n    print(fund_financial_fund_info_em_df)\n\n    fund_graded_fund_daily_em_df = fund_graded_fund_daily_em()\n    print(fund_graded_fund_daily_em_df)\n\n    fund_graded_fund_info_em_df = fund_graded_fund_info_em(symbol=\"150232\")\n    print(fund_graded_fund_info_em_df)\n\n    fund_etf_fund_daily_em_df = fund_etf_fund_daily_em()\n    print(fund_etf_fund_daily_em_df)\n\n    fund_etf_fund_info_em_df = fund_etf_fund_info_em(\n        fund=\"511280\", start_date=\"20000101\", end_date=\"20500101\"\n    )\n    print(fund_etf_fund_info_em_df)\n\n    fund_value_estimation_em_df = fund_value_estimation_em(symbol=\"混合型\")\n    print(fund_value_estimation_em_df)\n\n    fund_hk_fund_hist_em_df = fund_hk_fund_hist_em(\n        code=\"1002200683\", symbol=\"历史净值明细\"\n    )\n    print(fund_hk_fund_hist_em_df)\n\n    fund_hk_fund_hist_em_df = fund_hk_fund_hist_em(\n        code=\"1002200683\", symbol=\"分红送配详情\"\n    )\n    print(fund_hk_fund_hist_em_df)\n"
  },
  {
    "path": "akshare/fund/fund_etf_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/2/15 22:00\nDesc: 东方财富-ETF行情\nhttps://quote.eastmoney.com/sh513500.html\n\"\"\"\n\nfrom functools import lru_cache\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.func import fetch_paginated_data\n\n\n@lru_cache()\ndef _fund_etf_code_id_map_em() -> dict:\n    \"\"\"\n    东方财富-ETF代码和市场标识映射\n    https://quote.eastmoney.com/center/gridlist.html#fund_etf\n    :return: ETF 代码和市场标识映射\n    :rtype: dict\n    \"\"\"\n    url = \"https://88.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"wbp2u\": \"|0|0|0|web\",\n        \"fid\": \"f3\",\n        \"fs\": \"b:MK0021,b:MK0022,b:MK0023,b:MK0024\",\n        \"fields\": \"f3,f12,f13\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_dict = dict(zip(temp_df[\"f12\"], temp_df[\"f13\"]))\n    return temp_dict\n\n\ndef fund_etf_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富-ETF 实时行情\n    https://quote.eastmoney.com/center/gridlist.html#fund_etf\n    :return: ETF 实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://88.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"wbp2u\": \"|0|0|0|web\",\n        \"fid\": \"f12\",\n        \"fs\": \"b:MK0021,b:MK0022,b:MK0023,b:MK0024,b:MK0827\",\n        \"fields\": (\n            \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,\"\n            \"f12,f13,f14,f15,f16,f17,f18,f20,f21,\"\n            \"f23,f24,f25,f22,f11,f30,f31,f32,f33,\"\n            \"f34,f35,f38,f62,f63,f64,f65,f66,f69,\"\n            \"f72,f75,f78,f81,f84,f87,f115,f124,f128,\"\n            \"f136,f152,f184,f297,f402,f441\"\n        ),\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.rename(\n        columns={\n            \"f12\": \"代码\",\n            \"f14\": \"名称\",\n            \"f2\": \"最新价\",\n            \"f4\": \"涨跌额\",\n            \"f3\": \"涨跌幅\",\n            \"f5\": \"成交量\",\n            \"f6\": \"成交额\",\n            \"f7\": \"振幅\",\n            \"f17\": \"开盘价\",\n            \"f15\": \"最高价\",\n            \"f16\": \"最低价\",\n            \"f18\": \"昨收\",\n            \"f8\": \"换手率\",\n            \"f10\": \"量比\",\n            \"f30\": \"现手\",\n            \"f31\": \"买一\",\n            \"f32\": \"卖一\",\n            \"f33\": \"委比\",\n            \"f34\": \"外盘\",\n            \"f35\": \"内盘\",\n            \"f62\": \"主力净流入-净额\",\n            \"f184\": \"主力净流入-净占比\",\n            \"f66\": \"超大单净流入-净额\",\n            \"f69\": \"超大单净流入-净占比\",\n            \"f72\": \"大单净流入-净额\",\n            \"f75\": \"大单净流入-净占比\",\n            \"f78\": \"中单净流入-净额\",\n            \"f81\": \"中单净流入-净占比\",\n            \"f84\": \"小单净流入-净额\",\n            \"f87\": \"小单净流入-净占比\",\n            \"f38\": \"最新份额\",\n            \"f21\": \"流通市值\",\n            \"f20\": \"总市值\",\n            \"f402\": \"基金折价率\",\n            \"f441\": \"IOPV实时估值\",\n            \"f297\": \"数据日期\",\n            \"f124\": \"更新时间\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"IOPV实时估值\",\n            \"基金折价率\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"成交量\",\n            \"成交额\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"昨收\",\n            \"振幅\",\n            \"换手率\",\n            \"量比\",\n            \"委比\",\n            \"外盘\",\n            \"内盘\",\n            \"主力净流入-净额\",\n            \"主力净流入-净占比\",\n            \"超大单净流入-净额\",\n            \"超大单净流入-净占比\",\n            \"大单净流入-净额\",\n            \"大单净流入-净占比\",\n            \"中单净流入-净额\",\n            \"中单净流入-净占比\",\n            \"小单净流入-净额\",\n            \"小单净流入-净占比\",\n            \"现手\",\n            \"买一\",\n            \"卖一\",\n            \"最新份额\",\n            \"流通市值\",\n            \"总市值\",\n            \"数据日期\",\n            \"更新时间\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"开盘价\"] = pd.to_numeric(temp_df[\"开盘价\"], errors=\"coerce\")\n    temp_df[\"最高价\"] = pd.to_numeric(temp_df[\"最高价\"], errors=\"coerce\")\n    temp_df[\"最低价\"] = pd.to_numeric(temp_df[\"最低价\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"量比\"] = pd.to_numeric(temp_df[\"量比\"], errors=\"coerce\")\n    temp_df[\"委比\"] = pd.to_numeric(temp_df[\"委比\"], errors=\"coerce\")\n    temp_df[\"外盘\"] = pd.to_numeric(temp_df[\"外盘\"], errors=\"coerce\")\n    temp_df[\"内盘\"] = pd.to_numeric(temp_df[\"内盘\"], errors=\"coerce\")\n    temp_df[\"流通市值\"] = pd.to_numeric(temp_df[\"流通市值\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"现手\"] = pd.to_numeric(temp_df[\"现手\"], errors=\"coerce\")\n    temp_df[\"买一\"] = pd.to_numeric(temp_df[\"买一\"], errors=\"coerce\")\n    temp_df[\"卖一\"] = pd.to_numeric(temp_df[\"卖一\"], errors=\"coerce\")\n    temp_df[\"最新份额\"] = pd.to_numeric(temp_df[\"最新份额\"], errors=\"coerce\")\n    temp_df[\"IOPV实时估值\"] = pd.to_numeric(temp_df[\"IOPV实时估值\"], errors=\"coerce\")\n    temp_df[\"基金折价率\"] = pd.to_numeric(temp_df[\"基金折价率\"], errors=\"coerce\")\n    temp_df[\"主力净流入-净额\"] = pd.to_numeric(\n        temp_df[\"主力净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"主力净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"主力净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"超大单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"超大单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"超大单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"超大单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"大单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"大单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"大单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"大单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"中单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"中单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"中单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"中单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"小单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"小单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"小单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"小单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"数据日期\"] = pd.to_datetime(\n        temp_df[\"数据日期\"], format=\"%Y%m%d\", errors=\"coerce\"\n    )\n    temp_df[\"更新时间\"] = (\n        pd.to_datetime(temp_df[\"更新时间\"], unit=\"s\", errors=\"coerce\")\n        .dt.tz_localize(\"UTC\")\n        .dt.tz_convert(\"Asia/Shanghai\")\n    )\n    return temp_df\n\n\ndef get_market_id(symbol: str) -> int:\n    \"\"\"\n    东方财富-ETF市场标识判断\n    :param symbol: ETF 代码\n    :type symbol: str\n    :return: ETF 代码和市场标识（1:上证 0:深证）\n    :rtype: int\n    \"\"\"\n    if symbol.startswith((\"0\", \"1\", \"3\", \"2\", \"5\", \"6\")):\n        if symbol.startswith((\"5\", \"6\")):\n            return 1\n        else:\n            return 0\n    else:\n        return 1\n\n\ndef fund_etf_hist_em(\n    symbol: str = \"159707\",\n    period: str = \"daily\",\n    start_date: str = \"19700101\",\n    end_date: str = \"20500101\",\n    adjust: str = \"\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-ETF行情\n    https://quote.eastmoney.com/sz159707.html\n    :param symbol: ETF 代码\n    :type symbol: str\n    :param period: choice of {'daily', 'weekly', 'monthly'}\n    :type period: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :param adjust: choice of {\"qfq\": \"前复权\", \"hfq\": \"后复权\", \"\": \"不复权\"}\n    :type adjust: str\n    :return: 每日行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    # code_id_dict = _fund_etf_code_id_map_em()\n    adjust_dict = {\"qfq\": \"1\", \"hfq\": \"2\", \"\": \"0\"}\n    period_dict = {\"daily\": \"101\", \"weekly\": \"102\", \"monthly\": \"103\"}\n    url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n    params = {\n        \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116\",\n        \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n        \"klt\": period_dict[period],\n        \"fqt\": adjust_dict[adjust],\n        \"beg\": start_date,\n        \"end\": end_date,\n    }\n    try:\n        # market_id = code_id_dict[symbol]\n        market_id = get_market_id(symbol)\n        params.update({\"secid\": f\"{market_id}.{symbol}\"})\n        r = requests.get(url, timeout=15, params=params)\n        data_json = r.json()\n    except KeyError:\n        market_id = 1\n        params.update({\"secid\": f\"{market_id}.{symbol}\"})\n        r = requests.get(url, timeout=15, params=params)\n        data_json = r.json()\n        if not data_json[\"data\"]:\n            market_id = 0\n            params.update({\"secid\": f\"{market_id}.{symbol}\"})\n            r = requests.get(url, timeout=15, params=params)\n            data_json = r.json()\n    if not (data_json[\"data\"] and data_json[\"data\"][\"klines\"]):\n        return pd.DataFrame()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df.columns = [\n        \"日期\",\n        \"开盘\",\n        \"收盘\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"换手率\",\n    ]\n    temp_df.index = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\")\n    temp_df.reset_index(inplace=True, drop=True)\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_etf_hist_min_em(\n    symbol: str = \"159707\",\n    start_date: str = \"1979-09-01 09:32:00\",\n    end_date: str = \"2222-01-01 09:32:00\",\n    period: str = \"5\",\n    adjust: str = \"\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-ETF 行情\n    https://quote.eastmoney.com/sz159707.html\n    :param symbol: ETF 代码\n    :type symbol: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :param period: choice of {\"1\", \"5\", \"15\", \"30\", \"60\"}\n    :type period: str\n    :param adjust: choice of {'', 'qfq', 'hfq'}\n    :type adjust: str\n    :return: 每日分时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    # code_id_dict = _fund_etf_code_id_map_em()\n    # 商品期货类 ETF\n    # code_id_dict.update(\n    #     {\n    #         \"159980\": \"0\",\n    #         \"159981\": \"0\",\n    #         \"159985\": \"0\",\n    #         \"511090\": \"1\",\n    #         \"511220\": \"1\",\n    #         \"511380\": \"1\",\n    #     }\n    # )\n    adjust_map = {\n        \"\": \"0\",\n        \"qfq\": \"1\",\n        \"hfq\": \"2\",\n    }\n    if period == \"1\":\n        url = \"https://push2his.eastmoney.com/api/qt/stock/trends2/get\"\n        params = {\n            \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58\",\n            \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n            \"ndays\": \"5\",\n            \"iscr\": \"0\",\n            \"secid\": f\"{get_market_id(symbol)}.{symbol}\",\n        }\n        r = requests.get(url, timeout=15, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"trends\"]]\n        )\n        temp_df.columns = [\n            \"时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"均价\",\n        ]\n        temp_df.index = pd.to_datetime(temp_df[\"时间\"])\n        temp_df = temp_df[start_date:end_date]\n        temp_df.reset_index(drop=True, inplace=True)\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"均价\"] = pd.to_numeric(temp_df[\"均价\"], errors=\"coerce\")\n        temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"]).astype(str)\n        return temp_df\n    else:\n        url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n        params = {\n            \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n            \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n            \"klt\": period,\n            \"fqt\": adjust_map[adjust],\n            \"secid\": f\"{get_market_id(symbol)}.{symbol}\",\n            \"beg\": \"0\",\n            \"end\": \"20500000\",\n        }\n        r = requests.get(url, timeout=15, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"klines\"]]\n        )\n        temp_df.columns = [\n            \"时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"换手率\",\n        ]\n        temp_df.index = pd.to_datetime(temp_df[\"时间\"])\n        temp_df = temp_df[start_date:end_date]\n        temp_df.reset_index(drop=True, inplace=True)\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n        temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n        temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n        temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n        temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"]).astype(str)\n        temp_df = temp_df[\n            [\n                \"时间\",\n                \"开盘\",\n                \"收盘\",\n                \"最高\",\n                \"最低\",\n                \"涨跌幅\",\n                \"涨跌额\",\n                \"成交量\",\n                \"成交额\",\n                \"振幅\",\n                \"换手率\",\n            ]\n        ]\n        return temp_df\n\n\nif __name__ == \"__main__\":\n    fund_etf_spot_em_df = fund_etf_spot_em()\n    print(fund_etf_spot_em_df)\n\n    fund_etf_hist_hfq_em_df = fund_etf_hist_em(\n        symbol=\"513500\",\n        period=\"daily\",\n        start_date=\"20000101\",\n        end_date=\"20230201\",\n        adjust=\"hfq\",\n    )\n    print(fund_etf_hist_hfq_em_df)\n\n    fund_etf_hist_qfq_em_df = fund_etf_hist_em(\n        symbol=\"511010\",\n        period=\"daily\",\n        start_date=\"20000101\",\n        end_date=\"20230718\",\n        adjust=\"\",\n    )\n    print(fund_etf_hist_qfq_em_df)\n\n    fund_etf_hist_em_df = fund_etf_hist_em(\n        symbol=\"159985\",\n        period=\"daily\",\n        start_date=\"20000101\",\n        end_date=\"20231211\",\n        adjust=\"\",\n    )\n    print(fund_etf_hist_em_df)\n\n    fund_etf_hist_min_em_df = fund_etf_hist_min_em(\n        symbol=\"511380\",\n        period=\"1\",\n        adjust=\"\",\n        start_date=\"2025-03-10 09:30:00\",\n        end_date=\"2025-03-10 17:40:00\",\n    )\n    print(fund_etf_hist_min_em_df)\n"
  },
  {
    "path": "akshare/fund/fund_etf_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/11/10 15:30\nDesc: 新浪财经-基金行情\nhttps://vip.stock.finance.sina.com.cn/fund_center/index.html#jjhqetf\n\"\"\"\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\nfrom akshare.stock.cons import hk_js_decode\nfrom akshare.utils import demjson\n\n\ndef fund_etf_category_sina(symbol: str = \"LOF基金\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-基金列表\n    https://vip.stock.finance.sina.com.cn/fund_center/index.html#jjhqetf\n    :param symbol: choice of {\"封闭式基金\", \"ETF基金\", \"LOF基金\"}\n    :type symbol: str\n    :return: 指定 symbol 的基金列表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    fund_map = {\n        \"封闭式基金\": \"close_fund\",\n        \"ETF基金\": \"etf_hq_fund\",\n        \"LOF基金\": \"lof_hq_fund\",\n    }\n    url = (\n        \"https://vip.stock.finance.sina.com.cn/quotes_service/api/jsonp.php/\"\n        \"IO.XSRV2.CallbackList['da_yPT46_Ll7K6WD']/Market_Center.getHQNodeDataSimple\"\n    )\n    params = {\n        \"page\": \"1\",\n        \"num\": \"5000\",\n        \"sort\": \"symbol\",\n        \"asc\": \"0\",\n        \"node\": fund_map[symbol],\n        \"[object HTMLDivElement]\": \"qvvne\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"([\") + 1 : -2])\n    temp_df = pd.DataFrame(data_json)\n    if symbol == \"封闭式基金\":\n        temp_df.columns = [\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"买入\",\n            \"卖出\",\n            \"昨收\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"_\",\n            \"_\",\n        ]\n    else:\n        temp_df.columns = [\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"买入\",\n            \"卖出\",\n            \"昨收\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"买入\",\n            \"卖出\",\n            \"昨收\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"买入\"] = pd.to_numeric(temp_df[\"买入\"], errors=\"coerce\")\n    temp_df[\"卖出\"] = pd.to_numeric(temp_df[\"卖出\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_etf_hist_sina(symbol: str = \"sh510050\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-基金-ETF 基金-日行情数据\n    https://finance.sina.com.cn/fund/quotes/159996/bc.shtml\n    :param symbol: 基金名称, 可以通过 ak.fund_etf_category_sina() 函数获取\n    :type symbol: str\n    :return: 日行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        f\"https://finance.sina.com.cn/realstock/company/{symbol}/hisdata_klc2/klc_kl.js\"\n    )\n    r = requests.get(url)\n    js_code = py_mini_racer.MiniRacer()\n    js_code.eval(hk_js_decode)\n    dict_list = js_code.call(\n        \"d\", r.text.split(\"=\")[1].split(\";\")[0].replace('\"', \"\")\n    )  # 执行js解密代码\n    temp_df = pd.DataFrame(dict_list)\n    if temp_df.empty:  # 处理获取数据为空的问题\n        return pd.DataFrame()\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.tz_localize(\n        None\n    )\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"volume\"] = pd.to_numeric(temp_df[\"volume\"], errors=\"coerce\")\n\n    # 转换日期列为日期类型\n    temp_df[\"date\"] = temp_df[\"date\"].dt.date\n    temp_df = temp_df.sort_values(by=\"date\", ascending=True)\n    return temp_df\n\n\ndef fund_etf_dividend_sina(symbol: str = \"sh510050\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-基金-ETF 基金-累计分红\n    https://finance.sina.com.cn/fund/quotes/510050/bc.shtml\n    :param symbol: 基金名称, 可以通过 ak.fund_etf_category_sina() 函数获取\n    :type symbol: str\n    :return: 累计分红\n    :rtype: pandas.DataFrame\n    \"\"\"\n    # 构建复权数据URL\n    factor_url = f\"https://finance.sina.com.cn/realstock/company/{symbol}/hfq.js\"\n    r = requests.get(factor_url)\n    text = r.text\n    if text.startswith(\"var\"):\n        json_str = text.split(\"=\")[1].strip().rsplit(\"}\", maxsplit=1)[0].strip()\n        data = eval(json_str + \"}\")  # 这里使用eval而不是json.loads因为数据格式特殊\n\n        if isinstance(data, dict) and \"data\" in data:\n            df = pd.DataFrame(data[\"data\"])\n            # 重命名列\n            df.columns = [\"date\", \"f\", \"s\", \"u\"] if len(df.columns) == 4 else df.columns\n            # 移除1900-01-01的数据\n            df = df[df[\"date\"] != \"1900-01-01\"]\n            # 转换日期\n            df[\"date\"] = pd.to_datetime(df[\"date\"])\n            # 转换数值类型\n            df[[\"f\", \"s\", \"u\"]] = df[[\"f\", \"s\", \"u\"]].astype(float)\n            # 按日期排序\n            df = df.sort_values(by=\"date\", ascending=True, ignore_index=True)\n            temp_df = df[[\"date\", \"u\"]].copy()\n            temp_df.columns = [\"日期\", \"累计分红\"]\n            temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n            return temp_df\n        else:\n            return pd.DataFrame()\n    else:\n        return pd.DataFrame()\n\n\nif __name__ == \"__main__\":\n    fund_etf_category_sina_df = fund_etf_category_sina(symbol=\"封闭式基金\")\n    print(fund_etf_category_sina_df)\n\n    fund_etf_category_sina_df = fund_etf_category_sina(symbol=\"ETF基金\")\n    print(fund_etf_category_sina_df)\n\n    fund_etf_category_sina_df = fund_etf_category_sina(symbol=\"LOF基金\")\n    print(fund_etf_category_sina_df)\n\n    fund_etf_hist_sina_df = fund_etf_hist_sina(symbol=\"sh510050\")\n    print(fund_etf_hist_sina_df)\n\n    fund_etf_dividend_sina_df = fund_etf_dividend_sina(symbol=\"sh510050\")\n    print(fund_etf_dividend_sina_df)\n"
  },
  {
    "path": "akshare/fund/fund_etf_sse.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/1/20 15:00\nDesc: 上海证券交易所-ETF基金份额数据\nhttps://www.sse.com.cn/assortment/fund/etf/list/scale/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef fund_etf_scale_sse(date: str = \"20250115\") -> pd.DataFrame:\n    \"\"\"\n    上海证券交易所-产品-基金产品-ETF产品-ETF产品列表-基金规模\n    https://www.sse.com.cn/assortment/fund/etf/list/scale/\n    :param date: 统计日期, 默认为空返回最新数据, 格式如 \"20250115\"\n    :type date: str\n    :return: ETF基金份额数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    data_str = \"-\".join([date[:4], date[4:6], date[6:]])\n    url = \"https://query.sse.com.cn/commonQuery.do\"\n    params = {\n        \"isPagination\": \"true\",\n        \"pageHelp.pageSize\": \"10000\",\n        \"pageHelp.pageNo\": \"1\",\n        \"pageHelp.beginPage\": \"1\",\n        \"pageHelp.cacheSize\": \"1\",\n        \"pageHelp.endPage\": \"1\",\n        \"sqlId\": \"COMMON_SSE_ZQPZ_ETFZL_XXPL_ETFGM_SEARCH_L\",\n        \"STAT_DATE\": data_str,\n    }\n    headers = {\n        \"Referer\": \"https://www.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/88.0.4324.150 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"])\n    temp_df.rename(\n        columns={\n            \"NUM\": \"序号\",\n            \"SEC_CODE\": \"基金代码\",\n            \"SEC_NAME\": \"基金简称\",\n            \"ETF_TYPE\": \"ETF类型\",\n            \"STAT_DATE\": \"统计日期\",\n            \"TOT_VOL\": \"基金份额\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"基金代码\",\n            \"基金简称\",\n            \"ETF类型\",\n            \"统计日期\",\n            \"基金份额\",\n        ]\n    ]\n    temp_df[\"序号\"] = pd.to_numeric(temp_df[\"序号\"], errors=\"coerce\")\n    temp_df[\"统计日期\"] = pd.to_datetime(temp_df[\"统计日期\"], errors=\"coerce\").dt.date\n    temp_df[\"基金份额\"] = pd.to_numeric(temp_df[\"基金份额\"], errors=\"coerce\") * 10000\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fund_etf_scale_sse_df = fund_etf_scale_sse(date=\"20250115\")\n    print(fund_etf_scale_sse_df)\n"
  },
  {
    "path": "akshare/fund/fund_etf_szse.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/1/20 15:00\nDesc: 深圳证券交易所-ETF基金份额数据\nhttps://fund.szse.cn/marketdata/fundslist/index.html\n\"\"\"\n\nimport warnings\n\nimport pandas as pd\nimport requests\n\n\ndef fund_etf_scale_szse() -> pd.DataFrame:\n    \"\"\"\n    深圳证券交易所-基金产品-基金列表-ETF基金份额\n    https://fund.szse.cn/marketdata/fundslist/index.html\n    :return: ETF基金份额数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.szse.cn/api/report/ShowReport\"\n    params = {\n        \"SHOWTYPE\": \"xlsx\",\n        \"CATALOGID\": \"1000_lf\",\n        \"TABKEY\": \"tab1\",\n        \"random\": \"0.07610353191740105\",\n    }\n    headers = {\n        \"Referer\": \"https://fund.szse.cn/marketdata/fundslist/index.html\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/88.0.4324.150 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    with warnings.catch_warnings(record=True):\n        warnings.simplefilter(\"always\")\n        temp_df = pd.read_excel(r.content, engine=\"openpyxl\", dtype={\"基金代码\": str})\n    temp_df.rename(\n        columns={\n            \"当前规模(份)\": \"基金份额\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"基金代码\",\n            \"基金简称\",\n            \"基金类别\",\n            \"投资类别\",\n            \"上市日期\",\n            \"基金份额\",\n            \"基金管理人\",\n            \"基金发起人\",\n            \"基金托管人\",\n            \"净值\",\n        ]\n    ]\n    temp_df[\"上市日期\"] = pd.to_datetime(temp_df[\"上市日期\"], errors=\"coerce\").dt.date\n    temp_df[\"基金份额\"] = (\n        temp_df[\"基金份额\"].astype(str).str.replace(\",\", \"\", regex=False)\n    )\n    temp_df[\"基金份额\"] = pd.to_numeric(temp_df[\"基金份额\"], errors=\"coerce\")\n    temp_df[\"净值\"] = pd.to_numeric(temp_df[\"净值\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fund_etf_scale_szse_df = fund_etf_scale_szse()\n    print(fund_etf_scale_szse_df)\n"
  },
  {
    "path": "akshare/fund/fund_etf_ths.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/2/10 16:00\nDesc: 同花顺理财-基金数据-每日净值-ETF\nhttps://fund.10jqka.com.cn/datacenter/jz/kfs/etf/\n\"\"\"\n\nimport json\n\nimport pandas as pd\nimport requests\n\n\ndef fund_etf_category_ths(symbol: str = \"ETF\", date: str = \"\") -> pd.DataFrame:\n    \"\"\"\n    同花顺理财-基金数据-每日净值-实时行情\n    https://fund.10jqka.com.cn/datacenter/jz/\n    :param symbol: 基金类型; choice of {\"股票型\", \"债券型\", \"混合型\", \"ETF\", \"LOF\", \"QDII\", \"保本型\", \"指数型\", \"\"}; \"\" 表示全部\n    :type symbol: str\n    :param date: 查询日期\n    :type date: str\n    :return: 基金实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"股票型\": \"gpx\",\n        \"债券型\": \"zqx\",\n        \"混合型\": \"hhx\",\n        \"ETF\": \"ETF\",\n        \"LOF\": \"LOF\",\n        \"QDII\": \"QDII\",\n        \"保本型\": \"bbx\",\n        \"指数型\": \"zsx\",\n        \"\": \"all\",\n    }\n    inner_symbol = symbol_map.get(symbol, \"ETF\")\n    inner_date = \"-\".join([date[:4], date[4:6], date[6:]]) if date != \"\" else 0\n    url = (\n        f\"https://fund.10jqka.com.cn/data/Net/info/\"\n        f\"{inner_symbol}_rate_desc_{inner_date}_0_1_9999_0_0_0_jsonp_g.html\"\n    )\n    r = requests.get(url, timeout=15)\n    data_text = r.text[2:-1]\n    data_json = json.loads(data_text)\n    temp_df = pd.DataFrame(data_json[\"data\"][\"data\"]).T\n    temp_df.reset_index(inplace=True, drop=True)\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df[\"index\"] + 1\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"code\": \"基金代码\",\n            \"typename\": \"基金类型\",\n            \"net\": \"当前-单位净值\",\n            \"name\": \"基金名称\",\n            \"totalnet\": \"当前-累计净值\",\n            \"newnet\": \"最新-单位净值\",\n            \"newtotalnet\": \"最新-累计净值\",\n            \"newdate\": \"最新-交易日\",\n            \"net1\": \"前一日-单位净值\",\n            \"totalnet1\": \"前一日-累计净值\",\n            \"ranges\": \"增长值\",\n            \"rate\": \"增长率\",\n            \"shstat\": \"赎回状态\",\n            \"sgstat\": \"申购状态\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"基金代码\",\n            \"基金名称\",\n            \"当前-单位净值\",\n            \"当前-累计净值\",\n            \"前一日-单位净值\",\n            \"前一日-累计净值\",\n            \"增长值\",\n            \"增长率\",\n            \"赎回状态\",\n            \"申购状态\",\n            \"最新-交易日\",\n            \"最新-单位净值\",\n            \"最新-累计净值\",\n            \"基金类型\",\n        ]\n    ]\n    query_date = inner_date if inner_date != 0 else temp_df[\"最新-交易日\"][0]\n    temp_df[\"查询日期\"] = query_date\n    temp_df[\"查询日期\"] = pd.to_datetime(temp_df[\"查询日期\"], errors=\"coerce\").dt.date\n    temp_df[\"当前-单位净值\"] = pd.to_numeric(temp_df[\"当前-单位净值\"], errors=\"coerce\")\n    temp_df[\"当前-累计净值\"] = pd.to_numeric(temp_df[\"当前-累计净值\"], errors=\"coerce\")\n    temp_df[\"前一日-单位净值\"] = pd.to_numeric(\n        temp_df[\"前一日-单位净值\"], errors=\"coerce\"\n    )\n    temp_df[\"前一日-累计净值\"] = pd.to_numeric(\n        temp_df[\"前一日-累计净值\"], errors=\"coerce\"\n    )\n    temp_df[\"增长值\"] = pd.to_numeric(temp_df[\"增长值\"], errors=\"coerce\")\n    temp_df[\"增长率\"] = pd.to_numeric(temp_df[\"增长率\"], errors=\"coerce\")\n    temp_df[\"最新-单位净值\"] = pd.to_numeric(temp_df[\"最新-单位净值\"], errors=\"coerce\")\n    temp_df[\"最新-累计净值\"] = pd.to_numeric(temp_df[\"最新-累计净值\"], errors=\"coerce\")\n    temp_df[\"最新-交易日\"] = pd.to_datetime(\n        temp_df[\"最新-交易日\"], errors=\"coerce\"\n    ).dt.date\n    return temp_df\n\n\ndef fund_etf_spot_ths(date: str = \"\") -> pd.DataFrame:\n    \"\"\"\n    同花顺理财-基金数据-每日净值-ETF-实时行情\n    https://fund.10jqka.com.cn/datacenter/jz/kfs/etf/\n    :param date: 查询日期\n    :type date: str\n    :return: ETF 实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    return fund_etf_category_ths(date=date, symbol=\"ETF\")\n\n\nif __name__ == \"__main__\":\n    fund_etf_category_ths_df = fund_etf_category_ths(date=\"20240620\", symbol=\"股票型\")\n    print(fund_etf_category_ths_df)\n\n    fund_etf_category_ths_df = fund_etf_category_ths(date=\"20240620\", symbol=\"债券型\")\n    print(fund_etf_category_ths_df)\n\n    fund_etf_category_ths_df = fund_etf_category_ths(date=\"20240620\", symbol=\"混合型\")\n    print(fund_etf_category_ths_df)\n\n    fund_etf_category_ths_df = fund_etf_category_ths(date=\"20240620\", symbol=\"ETF\")\n    print(fund_etf_category_ths_df)\n\n    fund_etf_category_ths_df = fund_etf_category_ths(date=\"20240620\", symbol=\"LOF\")\n    print(fund_etf_category_ths_df)\n\n    fund_etf_category_ths_df = fund_etf_category_ths(date=\"20240620\", symbol=\"QDII\")\n    print(fund_etf_category_ths_df)\n\n    fund_etf_category_ths_df = fund_etf_category_ths(date=\"20240620\", symbol=\"保本型\")\n    print(fund_etf_category_ths_df)\n\n    fund_etf_category_ths_df = fund_etf_category_ths(date=\"20240620\", symbol=\"指数型\")\n    print(fund_etf_category_ths_df)\n\n    fund_etf_category_ths_df = fund_etf_category_ths(date=\"20240620\", symbol=\"\")\n    print(fund_etf_category_ths_df)\n\n    fund_etf_spot_ths_df = fund_etf_spot_ths(date=\"20240620\")\n    print(fund_etf_spot_ths_df)\n"
  },
  {
    "path": "akshare/fund/fund_fee_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/12/22 17:00\nDesc: 天天基金-基金档案\nhttps://fundf10.eastmoney.com/jjfl_015641.html\n\"\"\"\n\nimport re\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef fund_fee_em(symbol: str = \"015641\", indicator: str = \"认购费率\") -> pd.DataFrame:\n    \"\"\"\n    天天基金-基金档案-购买信息\n    https://fundf10.eastmoney.com/jjfl_015641.html\n    :param symbol: 基金代码\n    :type symbol: str\n    :param indicator: choice of {\"交易状态\", \"申购与赎回金额\", \"交易确认日\", \"运作费用\", \"认购费率（前端）\", \"认购费率（后端）\",\"申购费率（前端）\", \"赎回费率\"}\n    :type indicator: str\n    :return: 交易规则\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://fundf10.eastmoney.com/jjfl_{symbol}.html\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, features=\"html.parser\")\n    tables_dict = {}\n    title_elements = soup.find_all(name=\"h4\", class_=\"t\")\n    for title_elem in title_elements:\n        title_text = title_elem.get_text(strip=True)\n        title_text = re.sub(r\"\\s+\", \" \", title_text).strip()\n        if title_text == \"申购与赎回金额\":\n            next_table = title_elem.find_all_next(\"table\")[0]\n            next_next_table = title_elem.find_all_next(\"table\")[1]\n            table_html = str(next_table)\n            next_table_html = str(next_next_table)\n            df_1 = pd.read_html(StringIO(table_html))[0]\n            df_2 = pd.read_html(StringIO(next_table_html))[0]\n            df = pd.concat(objs=[df_1, df_2], ignore_index=True)\n            tables_dict[title_text] = df\n            continue\n        else:\n            next_table = title_elem.find_next(\"table\")\n\n        if next_table:\n            try:\n                # 将表格转换为HTML字符串，然后使用pd.read_html读取\n                table_html = str(next_table)\n                df = pd.read_html(StringIO(table_html))[0]\n                tables_dict[title_text] = df\n            except Exception as e:\n                print(\"Error:\", e)\n                continue\n\n    if indicator == \"交易状态\":\n        temp_df = tables_dict[indicator]\n    elif indicator == \"申购与赎回金额\":\n        temp_df = tables_dict[indicator]\n    elif indicator == \"交易确认日\":\n        temp_df = tables_dict[indicator]\n    elif indicator == \"运作费用\":\n        temp_df = tables_dict[indicator]\n    elif indicator == \"认购费率（后端）\":\n        temp_df = tables_dict[indicator]\n    elif indicator == \"认购费率（前端）\":\n        temp_df = tables_dict[indicator]\n        temp_df[[\"原费率\", \"天天基金优惠费率\"]] = temp_df[\n            \"原费率|天天基金优惠费率\"\n        ].str.split(\"|\", expand=True)\n        del temp_df[\"原费率|天天基金优惠费率\"]\n        temp_df.loc[3, \"天天基金优惠费率\"] = temp_df.loc[3, \"原费率\"]\n        temp_df[\"原费率\"] = temp_df[\"原费率\"].str.strip()\n        temp_df[\"天天基金优惠费率\"] = temp_df[\"天天基金优惠费率\"].str.strip()\n    elif indicator == \"申购费率（前端）\":\n        temp_df = tables_dict[indicator]\n        if \"原费率|天天基金优惠费率 银行卡购买|活期宝购买\" not in temp_df.columns:\n            # assert temp_df.columns.tolist() == [\"适用金额\", \"适用期限\", \"费率\"]\n            return temp_df\n        splited = temp_df[\"原费率|天天基金优惠费率 银行卡购买|活期宝购买\"].str.split(\n            \"|\", expand=True\n        )\n        if splited.shape[1] == 1:\n            temp_df.rename(\n                columns={\"原费率|天天基金优惠费率 银行卡购买|活期宝购买\": \"原费率\"},\n                inplace=True,\n            )\n            temp_df[\"天天基金优惠费率-银行卡购买\"] = temp_df[\"原费率\"]\n            temp_df[\"天天基金优惠费率-活期宝购买\"] = temp_df[\"原费率\"]\n        else:\n            temp_df[\n                [\"原费率\", \"天天基金优惠费率-银行卡购买\", \"天天基金优惠费率-活期宝购买\"]\n            ] = splited\n            temp_df[\"天天基金优惠费率-银行卡购买\"] = temp_df[\n                \"天天基金优惠费率-银行卡购买\"\n            ].fillna(temp_df[\"原费率\"])\n            temp_df[\"天天基金优惠费率-活期宝购买\"] = temp_df[\n                \"天天基金优惠费率-活期宝购买\"\n            ].fillna(temp_df[\"原费率\"])\n            del temp_df[\"原费率|天天基金优惠费率 银行卡购买|活期宝购买\"]\n        temp_df[\"原费率\"] = temp_df[\"原费率\"].str.strip()\n        temp_df[\"天天基金优惠费率-银行卡购买\"] = temp_df[\n            \"天天基金优惠费率-银行卡购买\"\n        ].str.strip()\n        temp_df[\"天天基金优惠费率-活期宝购买\"] = temp_df[\n            \"天天基金优惠费率-活期宝购买\"\n        ].str.strip()\n    elif indicator in (\"赎回费率\", \"赎回费率（前端）\", \"赎回费率（后端）\"):\n        temp_df = tables_dict[indicator]\n        if \"原费率|天天基金优惠费率\" in temp_df.columns:\n            temp_df[[\"原费率\", \"天天基金优惠费率\"]] = temp_df[\n                \"原费率|天天基金优惠费率\"\n            ].str.split(\"|\", expand=True)\n            del temp_df[\"原费率|天天基金优惠费率\"]\n    else:\n        temp_df = pd.DataFrame([])\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fund_fee_em_df = fund_fee_em(symbol=\"019005\", indicator=\"交易状态\")\n    print(fund_fee_em_df)\n\n    fund_fee_em_df = fund_fee_em(symbol=\"019005\", indicator=\"申购与赎回金额\")\n    print(fund_fee_em_df)\n\n    fund_fee_em_df = fund_fee_em(symbol=\"019005\", indicator=\"交易确认日\")\n    print(fund_fee_em_df)\n\n    fund_fee_em_df = fund_fee_em(symbol=\"019005\", indicator=\"运作费用\")\n    print(fund_fee_em_df)\n\n    fund_fee_em_df = fund_fee_em(symbol=\"019005\", indicator=\"认购费率（前端）\")\n    print(fund_fee_em_df)\n\n    fund_fee_em_df = fund_fee_em(symbol=\"019005\", indicator=\"申购费率（前端）\")\n    print(fund_fee_em_df)\n\n    fund_fee_em_df = fund_fee_em(symbol=\"000011\", indicator=\"赎回费率\")\n    print(fund_fee_em_df)\n\n    fund_fee_em_df = fund_fee_em(symbol=\"018403\", indicator=\"赎回费率\")\n    print(fund_fee_em_df)\n\n    fund_fee_em_df = fund_fee_em(symbol=\"100035\", indicator=\"赎回费率（前端）\")\n    print(fund_fee_em_df)\n\n    fund_fee_em_df = fund_fee_em(symbol=\"022364\", indicator=\"申购费率（前端）\")\n    print(fund_fee_em_df)\n\n    fund_fee_em_df = fund_fee_em(symbol=\"022365\", indicator=\"申购费率（前端）\")\n    print(fund_fee_em_df)\n\n    fund_fee_em_df = fund_fee_em(symbol=\"006030\", indicator=\"申购费率（前端）\")\n    print(fund_fee_em_df)\n\n    fund_fee_em_df = fund_fee_em(symbol=\"022568\", indicator=\"申购费率（前端）\")\n    print(fund_fee_em_df)\n\n    fund_fee_em_df = fund_fee_em(symbol=\"960029\", indicator=\"申购费率（前端）\")\n    print(fund_fee_em_df)\n\n    fund_fee_em_df = fund_fee_em(symbol=\"000011\", indicator=\"认购费率（后端）\")\n    print(fund_fee_em_df)\n"
  },
  {
    "path": "akshare/fund/fund_fhsp_em.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2026/2/22 13:00\nDesc: 天天基金网-基金数据-分红送配\nhttps://fund.eastmoney.com/data/fundfenhong.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef fund_fh_em(\n    year: str = \"2025\",\n    typ: str = \"\",\n    rank: str = \"BZDM\",\n    sort: str = \"asc\",\n    page: int = -1,\n) -> pd.DataFrame:\n    \"\"\"\n    天天基金网-基金数据-分红送配-基金分红\n    https://fund.eastmoney.com/data/fundfenhong.html#DJR,desc,1,,,\n    :param year: 查询年份\n    :type year: str\n    :param typ: 基金类型；空串表示全部; choice of {\"指数型-其他\", \"指数型-海外股票\", \"指数型-固收\", \"指数型-股票\", \"债券型-中短债\",\n    \"债券型-长债\", \"债券型-理财\", \"债券型-混合债\", \"债券型-混合一级\", \"债券型-混合二级\", \"货币型-普通货币\", \"货币型-浮动净值\",\n    \"混合型-平衡\", \"混合型-偏债\", \"混合型-偏股\", \"混合型-灵活\", \"混合型-绝对收益\", \"股票型\", \"REITs\", \"Reits\", \"QDII-商品\",\n    \"QDII-普通股票\", \"QDII-混合债\", \"QDII-混合偏股\", \"QDII-纯债\", \"QDII-REITs\", \"FOF\"}\n    :type typ: str\n    :param rank: 排序字段；choice of {\"BZDM\", \"ABBNAME\", \"DJR\", \"FSRQ\", \"FHFCZ\", \"FFR\"}; \"BZDM\": 基金代码,\n    \"ABBNAME\": 基金简称, \"DJR\": 权益登记日, \"FSRQ\": 除息日期, \"FHFCZ\": 分红(元/份), \"FFR\": 分红发放日\n    :type rank: str\n    :param sort: 排序方向；排序方式; choice of {\"asc\", \"desc\"}\n    :type sort: str\n    :param page: 查询页数；请求第page页数据; -1 表示全部页面\n    :type page: int\n    :return: 基金分红\n    :rtype: pandas.DataFrame\n    \"\"\"\n\n    def get_df_from_response(response):\n        text = response.text\n        return pd.DataFrame(eval(text[text.find(\"[[\"): text.find(\";var jjfh_jjgs\")]))\n\n    url = \"https://fund.eastmoney.com/Data/funddataIndex_Interface.aspx\"\n    params = {\n        \"dt\": \"8\",\n        \"page\": \"1\" if page == -1 else str(page),\n        \"rank\": rank,\n        \"sort\": sort,\n        \"gs\": \"\",\n        \"ftype\": typ,\n        \"year\": year,\n    }\n    r = requests.get(url, params=params)\n    data_list = [get_df_from_response(r)]\n    if page == -1:\n        data_text = r.text\n        total_page = eval(data_text[data_text.find(\"=\") + 1: data_text.find(\";\")])[0]\n        tqdm = get_tqdm()\n        for p in tqdm(range(2, total_page + 1), leave=False):\n            params.update({\"page\": str(p)})\n            r = requests.get(url, params=params)\n            data_list.append(get_df_from_response(r))\n    big_df = pd.concat(objs=data_list, ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    # 处理空数据时报错的问题\n    if big_df.empty:\n        big_df = big_df.reindex(\n            columns=[\n                \"序号\",\n                \"基金代码\",\n                \"基金简称\",\n                \"权益登记日\",\n                \"除息日期\",\n                \"分红\",\n                \"分红发放日\",\n                \"-\",\n            ]\n        )\n    big_df.columns = [\n        \"序号\",\n        \"基金代码\",\n        \"基金简称\",\n        \"权益登记日\",\n        \"除息日期\",\n        \"分红\",\n        \"分红发放日\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\"序号\", \"基金代码\", \"基金简称\", \"权益登记日\", \"除息日期\", \"分红\", \"分红发放日\"]\n    ]\n    big_df[\"权益登记日\"] = pd.to_datetime(big_df[\"权益登记日\"]).dt.date\n    big_df[\"除息日期\"] = pd.to_datetime(big_df[\"除息日期\"]).dt.date\n    big_df[\"分红发放日\"] = pd.to_datetime(big_df[\"分红发放日\"]).dt.date\n    big_df[\"分红\"] = pd.to_numeric(big_df[\"分红\"])\n    return big_df\n\n\ndef fund_cf_em(\n    year: str = \"2025\",\n    typ: str = \"\",\n    rank: str = \"FSRQ\",\n    sort: str = \"desc\",\n    page: int = -1,\n) -> pd.DataFrame:\n    \"\"\"\n    天天基金网-基金数据-分红送配-基金拆分\n    https://fund.eastmoney.com/data/fundchaifen.html#FSRQ,desc,1,,,\n    :param year: 查询年份\n    :type year: str\n    :param typ: 基金类型；空串表示全部; choice of {\"\", \"指数型-其他\", \"指数型-海外股票\", \"指数型-固收\", \"指数型-股票\",\n    \"债券型-中短债\", \"债券型-长债\", \"债券型-可转债\", \"债券型-混合债\", \"债券型-混合一级\", \"债券型-混合二级\",\n    \"商品（不含QDII）\", \"货币型\", \"混合型-平衡\", \"混合型-偏债\", \"混合型-偏股\", \"混合型-灵活\", \"股票型\", \"QDII\", \"FOF\"}\n    :type typ: str\n    :param rank: 排序字段；choice of {\"BZDM\", \"ABBNAME\", \"FSRQ\", \"FHFCZ\"}; \"BZDM\": 基金代码,\n    \"ABBNAME\": 基金简称, \"FSRQ\": 拆分折算日, \"FHFCZ\": 拆分折算(每份)\n    :type rank: str\n    :param sort: 排序方向；choice of {\"asc\", \"desc\"}\n    :type sort: str\n    :param page: 查询页数；请求第page页数据; -1 表示全部页面\n    :type page: int\n    :return: 基金拆分\n    :rtype: pandas.DataFrame\n    \"\"\"\n\n    def get_df_from_response(response):\n        text = response.text\n        code = text[text.find(\"[[\"): text.find(\";var jjcf_jjgs\")]\n        if code:\n            return pd.DataFrame(eval(code))\n        return pd.DataFrame()\n\n    url = \"https://fund.eastmoney.com/Data/funddataIndex_Interface.aspx\"\n    params = {\n        \"dt\": \"9\",\n        \"page\": \"1\" if page == -1 else str(page),\n        \"rank\": rank,\n        \"sort\": sort,\n        \"gs\": \"\",\n        \"ftype\": typ,\n        \"year\": year,\n    }\n    r = requests.get(url, params=params)\n    data_list = [get_df_from_response(r)]\n    if page == -1:\n        data_text = r.text\n        total_page = eval(data_text[data_text.find(\"=\") + 1: data_text.find(\";\")])[0]\n        tqdm = get_tqdm()\n        for p in tqdm(range(2, total_page + 1), leave=False):\n            params.update({\"page\": str(p)})\n            r = requests.get(url, params=params)\n            data_list.append(get_df_from_response(r))\n    big_df = pd.concat(objs=data_list, ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df.loc[:, \"index\"] = big_df[\"index\"] + 1\n    # 处理空数据时报错的问题\n    if big_df.empty:\n        big_df = big_df.reindex(\n            columns=[\n                \"序号\",\n                \"基金代码\",\n                \"基金简称\",\n                \"拆分折算日\",\n                \"拆分类型\",\n                \"拆分折算\",\n                \"-\",\n            ]\n        )\n    big_df.columns = [\n        \"序号\",\n        \"基金代码\",\n        \"基金简称\",\n        \"拆分折算日\",\n        \"拆分类型\",\n        \"拆分折算\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\"序号\", \"基金代码\", \"基金简称\", \"拆分折算日\", \"拆分类型\", \"拆分折算\"]\n    ]\n    big_df[\"拆分折算日\"] = pd.to_datetime(big_df[\"拆分折算日\"]).dt.date\n    big_df[\"拆分折算\"] = pd.to_numeric(big_df[\"拆分折算\"], errors=\"coerce\")\n    return big_df\n\n\ndef fund_fh_rank_em() -> pd.DataFrame:\n    \"\"\"\n    天天基金网-基金数据-分红送配-基金分红排行\n    https://fund.eastmoney.com/data/fundleijifenhong.html\n    :return: 基金分红排行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/Data/funddataIndex_Interface.aspx\"\n    params = {\n        \"dt\": \"10\",\n        \"page\": \"1\",\n        \"rank\": \"FHFCZ\",\n        \"sort\": \"desc\",\n        \"gs\": \"\",\n        \"ftype\": \"\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    total_page = eval(data_text[data_text.find(\"=\") + 1: data_text.find(\";\")])[0]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"page\": str(page)})\n        r = requests.get(url, params=params)\n        data_text = r.text\n        temp_list = eval(\n            data_text[data_text.find(\"[[\"): data_text.find(\";var fhph_jjgs\")]\n        )\n        temp_df = pd.DataFrame(temp_list)\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    # 处理空数据时报错的问题\n    if big_df.empty:\n        big_df = big_df.reindex(\n            columns=[\n                \"序号\",\n                \"基金代码\",\n                \"基金简称\",\n                \"累计分红\",\n                \"累计次数\",\n                \"成立日期\",\n                \"-\",\n            ]\n        )\n    big_df.columns = [\n        \"序号\",\n        \"基金代码\",\n        \"基金简称\",\n        \"累计分红\",\n        \"累计次数\",\n        \"成立日期\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\"序号\", \"基金代码\", \"基金简称\", \"累计分红\", \"累计次数\", \"成立日期\"]\n    ]\n    big_df[\"成立日期\"] = pd.to_datetime(big_df[\"成立日期\"]).dt.date\n    big_df[\"累计分红\"] = pd.to_numeric(big_df[\"累计分红\"], errors=\"coerce\")\n    big_df[\"累计次数\"] = pd.to_numeric(big_df[\"累计次数\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    fund_fh_em_df = fund_fh_em(year=\"2025\")\n    print(fund_fh_em_df)\n\n    fund_cf_em_df = fund_cf_em(year=\"2025\")\n    print(fund_cf_em_df)\n\n    fund_fh_rank_em_df = fund_fh_rank_em()\n    print(fund_fh_rank_em_df)\n"
  },
  {
    "path": "akshare/fund/fund_init_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/11/7 18:30\nDesc: 基金数据-新发基金-新成立基金\nhttps://fund.eastmoney.com/data/xinfound.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils import demjson\n\n\ndef fund_new_found_em() -> pd.DataFrame:\n    \"\"\"\n    基金数据-新发基金-新成立基金\n    https://fund.eastmoney.com/data/xinfound.html\n    :return: 新成立基金\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/data/FundNewIssue.aspx\"\n    params = {\n        \"t\": \"xcln\",\n        \"sort\": \"jzrgq,desc\",\n        \"y\": \"\",\n        \"page\": \"1,50000\",\n        \"isbuy\": \"1\",\n        \"v\": \"0.4069919776543214\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text.strip(\"var newfunddata=\"))\n    temp_df = pd.DataFrame(data_json[\"datas\"])\n    temp_df.columns = [\n        \"基金代码\",\n        \"基金简称\",\n        \"发行公司\",\n        \"_\",\n        \"基金类型\",\n        \"募集份额\",\n        \"成立日期\",\n        \"成立来涨幅\",\n        \"基金经理\",\n        \"申购状态\",\n        \"集中认购期\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"优惠费率\",\n    ]\n    temp_df = temp_df[\n        [\n            \"基金代码\",\n            \"基金简称\",\n            \"发行公司\",\n            \"基金类型\",\n            \"集中认购期\",\n            \"募集份额\",\n            \"成立日期\",\n            \"成立来涨幅\",\n            \"基金经理\",\n            \"申购状态\",\n            \"优惠费率\",\n        ]\n    ]\n    temp_df[\"募集份额\"] = pd.to_numeric(temp_df[\"募集份额\"], errors=\"coerce\")\n    temp_df[\"成立日期\"] = pd.to_datetime(temp_df[\"成立日期\"], errors=\"coerce\").dt.date\n    temp_df[\"成立来涨幅\"] = pd.to_numeric(\n        temp_df[\"成立来涨幅\"].str.replace(\",\", \"\"), errors=\"coerce\"\n    )\n    temp_df[\"优惠费率\"] = temp_df[\"优惠费率\"].str.strip(\"%\")\n    temp_df[\"优惠费率\"] = pd.to_numeric(temp_df[\"优惠费率\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fund_new_found_em_df = fund_new_found_em()\n    print(fund_new_found_em_df)\n"
  },
  {
    "path": "akshare/fund/fund_init_ths.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/2/27\nDesc: 同花顺-新发基金\nhttps://fund.10jqka.com.cn/datacenter/xfjj/\n\"\"\"\n\nimport json\n\nimport pandas as pd\nimport requests\n\n\ndef fund_new_found_ths(symbol: str = \"全部\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-基金数据-新发基金\n    https://fund.10jqka.com.cn/datacenter/xfjj/\n    :param symbol: 选择基金类型; choice of {\"全部\", \"发行中\", \"将发行\"}\n    :type symbol: str\n    :return: 新发基金数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.10jqka.com.cn/datacenter/xfjj/\"\n    r = requests.get(url, timeout=15)\n    r.encoding = \"utf-8\"\n\n    # 从页面中提取 jsonData\n    # 找到 jsonData= 的位置\n    start_idx = r.text.find(\"jsonData=\")\n    if start_idx == -1:\n        raise ValueError(\"未找到 jsonData，可能页面结构已变化\")\n\n    # 找到第一个 {\n    start_bracket = r.text.find(\"{\", start_idx)\n    if start_bracket == -1:\n        raise ValueError(\"未找到 JSON 开始括号\")\n\n    # 通过计数括号找到完整的JSON对象\n    count = 0\n    end_idx = start_bracket\n    for i in range(start_bracket, len(r.text)):\n        if r.text[i] == \"{\":\n            count += 1\n        elif r.text[i] == \"}\":\n            count -= 1\n            if count == 0:\n                end_idx = i + 1\n                break\n\n    if end_idx == start_bracket:\n        raise ValueError(\"未找到完整的 JSON 对象\")\n\n    json_str = r.text[start_bracket:end_idx]\n    data_json = json.loads(json_str)\n\n    # 转换为 DataFrame\n    temp_df = pd.DataFrame(data_json).T\n    temp_df.reset_index(inplace=True, drop=True)\n\n    # 根据 symbol 筛选数据\n    if symbol == \"发行中\":\n        # 发行中: zzfx=1\n        temp_df = temp_df[temp_df[\"zzfx\"] == 1]\n    elif symbol == \"将发行\":\n        # 将发行: zzfx != 1 (即 buy=0 且起始日在未来)\n        temp_df = temp_df[temp_df[\"zzfx\"] != 1]\n\n    # 提取 manager 字段（可能是数组）\n    if \"manager\" in temp_df.columns:\n        temp_df[\"manager\"] = temp_df[\"manager\"].apply(\n            lambda x: x[0] if isinstance(x, list) and len(x) > 0 else (x if pd.notna(x) else \"\")\n        )\n\n    # 重命名列\n    temp_df.rename(\n        columns={\n            \"code\": \"基金代码\",\n            \"name\": \"基金名称\",\n            \"type\": \"投资类型\",\n            \"jjlx\": \"基金类型\",\n            \"tzfg\": \"投资风格\",\n            \"start\": \"募集起始日\",\n            \"end\": \"募集终止日\",\n            \"orgname\": \"管理人\",\n            \"manager\": \"基金经理\",\n            \"zgrgfl\": \"认购费率\",\n            \"zdrg\": \"最低认购\",\n            \"zdje\": \"认购金额\",\n            \"zzfx\": \"发行中\",\n            \"buy\": \"可购买\",\n        },\n        inplace=True,\n    )\n\n    # 选择需要的列\n    columns_order = [\n        \"基金代码\",\n        \"基金名称\",\n        \"投资类型\",\n        \"募集起始日\",\n        \"募集终止日\",\n        \"管理人\",\n        \"基金经理\",\n        \"认购费率\",\n        \"最低认购\",\n        \"基金类型\",\n        \"投资风格\",\n    ]\n\n    # 只保留存在的列\n    existing_columns = [col for col in columns_order if col in temp_df.columns]\n    temp_df = temp_df[existing_columns]\n\n    # 数据类型转换\n    if \"募集起始日\" in temp_df.columns:\n        temp_df[\"募集起始日\"] = pd.to_datetime(temp_df[\"募集起始日\"], errors=\"coerce\").dt.date\n    if \"募集终止日\" in temp_df.columns:\n        temp_df[\"募集终止日\"] = pd.to_datetime(temp_df[\"募集终止日\"], errors=\"coerce\").dt.date\n    if \"认购费率\" in temp_df.columns:\n        temp_df[\"认购费率\"] = pd.to_numeric(temp_df[\"认购费率\"], errors=\"coerce\")\n    if \"最低认购\" in temp_df.columns:\n        temp_df[\"最低认购\"] = pd.to_numeric(temp_df[\"最低认购\"], errors=\"coerce\")\n\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    # 测试获取全部新发基金\n    fund_new_found_ths_df = fund_new_found_ths(symbol=\"全部\")\n    print(fund_new_found_ths_df)\n\n    # 测试获取发行中的基金\n    fund_new_found_ths_issue_df = fund_new_found_ths(symbol=\"发行中\")\n    print(fund_new_found_ths_issue_df)\n\n    # 测试获取将发行的基金\n    fund_new_found_ths_future_df = fund_new_found_ths(symbol=\"将发行\")\n    print(fund_new_found_ths_future_df)\n"
  },
  {
    "path": "akshare/fund/fund_lof_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/11 17:00\nDesc: 东方财富-LOF 行情\nhttps://quote.eastmoney.com/center/gridlist.html#fund_lof\nhttps://quote.eastmoney.com/sz166009.html\n\"\"\"\n\nfrom functools import lru_cache\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.func import fetch_paginated_data\n\n\n@lru_cache()\ndef _fund_lof_code_id_map_em() -> dict:\n    \"\"\"\n    东方财富-LOF 代码和市场标识映射\n    https://quote.eastmoney.com/center/gridlist.html#fund_lof\n    :return: LOF 代码和市场标识映射\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://2.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"wbp2u\": \"|0|0|0|web\",\n        \"fid\": \"f12\",\n        \"fs\": \"b:MK0404,b:MK0405,b:MK0406,b:MK0407\",\n        \"fields\": \"f3,f12,f13\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_dict = dict(zip(temp_df[\"f12\"], temp_df[\"f13\"]))\n    return temp_dict\n\n\ndef fund_lof_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富-LOF 实时行情\n    https://quote.eastmoney.com/center/gridlist.html#fund_lof\n    :return: LOF 实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://88.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"wbp2u\": \"|0|0|0|web\",\n        \"fid\": \"f3\",\n        \"fs\": \"b:MK0404,b:MK0405,b:MK0406,b:MK0407\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,\"\n        \"f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.rename(\n        columns={\n            \"f12\": \"代码\",\n            \"f14\": \"名称\",\n            \"f2\": \"最新价\",\n            \"f4\": \"涨跌额\",\n            \"f3\": \"涨跌幅\",\n            \"f5\": \"成交量\",\n            \"f6\": \"成交额\",\n            \"f17\": \"开盘价\",\n            \"f15\": \"最高价\",\n            \"f16\": \"最低价\",\n            \"f18\": \"昨收\",\n            \"f8\": \"换手率\",\n            \"f21\": \"流通市值\",\n            \"f20\": \"总市值\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"成交量\",\n            \"成交额\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"昨收\",\n            \"换手率\",\n            \"流通市值\",\n            \"总市值\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"开盘价\"] = pd.to_numeric(temp_df[\"开盘价\"], errors=\"coerce\")\n    temp_df[\"最高价\"] = pd.to_numeric(temp_df[\"最高价\"], errors=\"coerce\")\n    temp_df[\"最低价\"] = pd.to_numeric(temp_df[\"最低价\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"流通市值\"] = pd.to_numeric(temp_df[\"流通市值\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_lof_hist_em(\n    symbol: str = \"166009\",\n    period: str = \"daily\",\n    start_date: str = \"19700101\",\n    end_date: str = \"20500101\",\n    adjust: str = \"\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-LOF 行情\n    https://quote.eastmoney.com/sz166009.html\n    :param symbol: LOF 代码\n    :type symbol: str\n    :param period: choice of {'daily', 'weekly', 'monthly'}\n    :type period: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :param adjust: choice of {\"qfq\": \"前复权\", \"hfq\": \"后复权\", \"\": \"不复权\"}\n    :type adjust: str\n    :return: 每日行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    code_id_dict = _fund_lof_code_id_map_em()\n    adjust_dict = {\"qfq\": \"1\", \"hfq\": \"2\", \"\": \"0\"}\n    period_dict = {\"daily\": \"101\", \"weekly\": \"102\", \"monthly\": \"103\"}\n    url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n    params = {\n        \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116\",\n        \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n        \"klt\": period_dict[period],\n        \"fqt\": adjust_dict[adjust],\n        \"secid\": f\"{code_id_dict[symbol]}.{symbol}\",\n        \"beg\": start_date,\n        \"end\": end_date,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    if not (data_json[\"data\"] and data_json[\"data\"][\"klines\"]):\n        return pd.DataFrame()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df.columns = [\n        \"日期\",\n        \"开盘\",\n        \"收盘\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"换手率\",\n    ]\n    temp_df.index = pd.to_datetime(temp_df[\"日期\"])\n    temp_df.reset_index(inplace=True, drop=True)\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_lof_hist_min_em(\n    symbol: str = \"166009\",\n    start_date: str = \"1979-09-01 09:32:00\",\n    end_date: str = \"2222-01-01 09:32:00\",\n    period: str = \"5\",\n    adjust: str = \"\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-LOF 分时行情\n    https://quote.eastmoney.com/sz166009.html\n    :param symbol: LOF 代码\n    :type symbol: str\n    :param start_date: 开始日期时间\n    :type start_date: str\n    :param end_date: 结束日期时间\n    :type end_date: str\n    :param period: choice of {\"1\", \"5\", \"15\", \"30\", \"60\"}\n    :type period: str\n    :param adjust: choice of {'', 'qfq', 'hfq'}\n    :type adjust: str\n    :return: 每日分时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    code_id_dict = _fund_lof_code_id_map_em()\n    adjust_map = {\n        \"\": \"0\",\n        \"qfq\": \"1\",\n        \"hfq\": \"2\",\n    }\n    if period == \"1\":\n        url = \"https://push2his.eastmoney.com/api/qt/stock/trends2/get\"\n        params = {\n            \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58\",\n            \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n            \"ndays\": \"5\",\n            \"iscr\": \"0\",\n            \"secid\": f\"{code_id_dict[symbol]}.{symbol}\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"trends\"]]\n        )\n        temp_df.columns = [\n            \"时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"均价\",\n        ]\n        temp_df.index = pd.to_datetime(temp_df[\"时间\"])\n        temp_df = temp_df[start_date:end_date]\n        temp_df.reset_index(drop=True, inplace=True)\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"均价\"] = pd.to_numeric(temp_df[\"均价\"], errors=\"coerce\")\n        temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"]).astype(str)\n        return temp_df\n    else:\n        url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n        params = {\n            \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n            \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n            \"klt\": period,\n            \"fqt\": adjust_map[adjust],\n            \"secid\": f\"{code_id_dict[symbol]}.{symbol}\",\n            \"beg\": \"0\",\n            \"end\": \"20500000\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"klines\"]]\n        )\n        temp_df.columns = [\n            \"时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"换手率\",\n        ]\n        temp_df.index = pd.to_datetime(temp_df[\"时间\"])\n        temp_df = temp_df[start_date:end_date]\n        temp_df.reset_index(drop=True, inplace=True)\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n        temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n        temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n        temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n        temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"]).astype(str)\n        temp_df = temp_df[\n            [\n                \"时间\",\n                \"开盘\",\n                \"收盘\",\n                \"最高\",\n                \"最低\",\n                \"涨跌幅\",\n                \"涨跌额\",\n                \"成交量\",\n                \"成交额\",\n                \"振幅\",\n                \"换手率\",\n            ]\n        ]\n        return temp_df\n\n\nif __name__ == \"__main__\":\n    fund_lof_spot_em_df = fund_lof_spot_em()\n    print(fund_lof_spot_em_df)\n\n    fund_lof_hist_em_df = fund_lof_hist_em(\n        symbol=\"166009\",\n        period=\"daily\",\n        start_date=\"20000101\",\n        end_date=\"20230703\",\n        adjust=\"\",\n    )\n    print(fund_lof_hist_em_df)\n\n    fund_lof_hist_qfq_em_df = fund_lof_hist_em(\n        symbol=\"166009\",\n        period=\"daily\",\n        start_date=\"20000101\",\n        end_date=\"20230703\",\n        adjust=\"qfq\",\n    )\n    print(fund_lof_hist_qfq_em_df)\n\n    fund_lof_hist_em_df = fund_lof_hist_em(\n        symbol=\"166009\",\n        period=\"daily\",\n        start_date=\"20000101\",\n        end_date=\"20250311\",\n        adjust=\"hfq\",\n    )\n    print(fund_lof_hist_em_df)\n\n    fund_lof_hist_min_em_df = fund_lof_hist_min_em(\n        symbol=\"166009\",\n        period=\"1\",\n        adjust=\"\",\n        start_date=\"2025-03-11 09:30:00\",\n        end_date=\"2025-03-11 14:40:00\",\n    )\n    print(fund_lof_hist_min_em_df)\n"
  },
  {
    "path": "akshare/fund/fund_manager.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/9/14 18:00\nDesc: 基金经理大全\nhttps://fund.eastmoney.com/manager/default.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils import demjson\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef fund_manager_em() -> pd.DataFrame:\n    \"\"\"\n    天天基金网-基金数据-基金经理大全\n    https://fund.eastmoney.com/manager/default.html\n    :return: 基金经理大全\n    :rtype: pandas.DataFrame\n    \"\"\"\n    big_df = pd.DataFrame()\n    url = \"https://fund.eastmoney.com/Data/FundDataPortfolio_Interface.aspx\"\n    params = {\n        \"dt\": \"14\",\n        \"mc\": \"returnjson\",\n        \"ft\": \"all\",\n        \"pn\": \"500\",\n        \"pi\": \"1\",\n        \"sc\": \"abbname\",\n        \"st\": \"asc\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text.strip(\"var returnjson= \"))\n    total_page = data_json[\"pages\"]\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pi\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text.strip(\"var returnjson= \"))\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = range(1, len(big_df) + 1)\n    big_df.columns = [\n        \"序号\",\n        \"_\",\n        \"姓名\",\n        \"_\",\n        \"所属公司\",\n        \"现任基金代码\",\n        \"现任基金\",\n        \"累计从业时间\",\n        \"现任基金最佳回报\",\n        \"_\",\n        \"_\",\n        \"现任基金资产总规模\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"姓名\",\n            \"所属公司\",\n            \"现任基金代码\",\n            \"现任基金\",\n            \"累计从业时间\",\n            \"现任基金资产总规模\",\n            \"现任基金最佳回报\",\n        ]\n    ]\n    big_df[\"现任基金最佳回报\"] = (\n        big_df[\"现任基金最佳回报\"].str.split(\"%\", expand=True).iloc[:, 0]\n    )\n    big_df[\"现任基金资产总规模\"] = (\n        big_df[\"现任基金资产总规模\"].str.split(\"亿元\", expand=True).iloc[:, 0]\n    )\n    big_df[\"累计从业时间\"] = pd.to_numeric(big_df[\"累计从业时间\"], errors=\"coerce\")\n    big_df[\"现任基金最佳回报\"] = pd.to_numeric(\n        big_df[\"现任基金最佳回报\"], errors=\"coerce\"\n    )\n    big_df[\"现任基金资产总规模\"] = pd.to_numeric(\n        big_df[\"现任基金资产总规模\"], errors=\"coerce\"\n    )\n    big_df[\"现任基金代码\"] = big_df[\"现任基金代码\"].apply(lambda x: x.split(\",\"))\n    big_df[\"现任基金\"] = big_df[\"现任基金\"].apply(lambda x: x.split(\",\"))\n    big_df = big_df.explode(column=[\"现任基金代码\", \"现任基金\"])\n    big_df.reset_index(drop=True, inplace=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    fund_manager_em_df = fund_manager_em()\n    print(fund_manager_em_df)\n"
  },
  {
    "path": "akshare/fund/fund_overview_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/9/16 21:00\nDesc: 天天基金-基金档案\nhttps://fundf10.eastmoney.com/jbgk_015641.html\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\n\ndef fund_overview_em(symbol: str = \"015641\") -> pd.DataFrame:\n    \"\"\"\n    天天基金-基金档案-基本概况\n    https://fundf10.eastmoney.com/jbgk_015641.html\n    :param symbol: 基金代码\n    :type symbol: str\n    :return: 基本概况\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://fundf10.eastmoney.com/jbgk_{symbol}.html\"\n    r = requests.get(url)\n    html_content = pd.read_html(StringIO(r.text))\n\n    if len(html_content) == 0:\n        temp_df = pd.DataFrame([])\n    else:\n        df_dict = {}\n        # 最后一个表格的数据是我们想要的，按照Key-Value的形式存储\n        for _, row in html_content[-1].iterrows():\n            df_dict[row[0]] = row[1]\n            df_dict[row[2]] = row[3]\n        temp_df = pd.DataFrame([df_dict])\n\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fund_overview_em_df = fund_overview_em(symbol=\"015641\")\n    print(fund_overview_em_df)\n"
  },
  {
    "path": "akshare/fund/fund_portfolio_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/6/7 20:00\nDesc: 天天基金网-基金档案-投资组合\nhttps://fundf10.eastmoney.com/ccmx_000001.html\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.utils import demjson\n\n\ndef fund_portfolio_hold_em(symbol: str = \"000001\", date: str = \"2024\") -> pd.DataFrame:\n    \"\"\"\n    天天基金网-基金档案-投资组合-基金持仓\n    https://fundf10.eastmoney.com/ccmx_000001.html\n    :param symbol: 基金代码\n    :type symbol: str\n    :param date: 查询年份\n    :type date: str\n    :return: 基金持仓\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fundf10.eastmoney.com/FundArchivesDatas.aspx\"\n    params = {\n        \"type\": \"jjcc\",\n        \"code\": symbol,\n        \"topline\": \"10000\",\n        \"year\": date,\n        \"month\": \"\",\n        \"rt\": \"0.913877030254846\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -1])\n    soup = BeautifulSoup(data_json[\"content\"], features=\"lxml\")\n    item_label = [\n        item.text.split(\"\\xa0\\xa0\")[1]\n        for item in soup.find_all(name=\"h4\", attrs={\"class\": \"t\"})\n    ]\n\n    column_name = [\n        \"序号\",\n        \"股票代码\",\n        \"股票名称\",\n        \"占净值比例\",\n        \"持股数\",\n        \"持仓市值\",\n        \"季度\",\n    ]\n    big_df = pd.DataFrame(columns=column_name)\n\n    for item in range(len(item_label)):\n        temp_df = pd.read_html(\n            StringIO(data_json[\"content\"]), converters={\"股票代码\": str}\n        )[item]\n        del temp_df[\"相关资讯\"]\n        temp_df.rename(columns={\"占净值 比例\": \"占净值比例\"}, inplace=True)\n        temp_df[\"占净值比例\"] = (\n            temp_df[\"占净值比例\"].str.split(\"%\", expand=True).iloc[:, 0]\n        )\n        temp_df.rename(\n            columns={\"持股数（万股）\": \"持股数\", \"持仓市值（万元）\": \"持仓市值\"},\n            inplace=True,\n        )\n        temp_df.rename(\n            columns={\"持股数 （万股）\": \"持股数\", \"持仓市值 （万元）\": \"持仓市值\"},\n            inplace=True,\n        )\n        temp_df.rename(\n            columns={\"持股数（万股）\": \"持股数\", \"持仓市值（万元人民币）\": \"持仓市值\"},\n            inplace=True,\n        )\n        temp_df.rename(\n            columns={\n                \"持股数 （万股）\": \"持股数\",\n                \"持仓市值 （万元人民币）\": \"持仓市值\",\n            },\n            inplace=True,\n        )\n\n        temp_df[\"季度\"] = item_label[item]\n        temp_df = temp_df[column_name]\n        big_df = (\n            pd.concat(objs=[temp_df, big_df], ignore_index=True)\n            if not big_df.empty\n            else temp_df\n        )\n\n    if not big_df.empty:\n        big_df[\"占净值比例\"] = pd.to_numeric(big_df[\"占净值比例\"], errors=\"coerce\")\n        big_df[\"持股数\"] = pd.to_numeric(big_df[\"持股数\"], errors=\"coerce\")\n        big_df[\"持仓市值\"] = pd.to_numeric(big_df[\"持仓市值\"], errors=\"coerce\")\n        del big_df[\"序号\"]\n        big_df.reset_index(inplace=True, drop=False)\n        big_df[\"index\"] = big_df[\"index\"] + 1\n        big_df.rename(columns={\"index\": \"序号\"}, inplace=True)\n    return big_df\n\n\ndef fund_portfolio_bond_hold_em(\n    symbol: str = \"000001\", date: str = \"2023\"\n) -> pd.DataFrame:\n    \"\"\"\n    天天基金网-基金档案-投资组合-债券持仓\n    https://fundf10.eastmoney.com/ccmx1_000001.html\n    :param symbol: 基金代码\n    :type symbol: str\n    :param date: 查询年份\n    :type date: str\n    :return: 债券持仓\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fundf10.eastmoney.com/FundArchivesDatas.aspx\"\n    params = {\n        \"type\": \"zqcc\",\n        \"code\": symbol,\n        \"year\": date,\n        \"rt\": \"0.913877030254846\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -1])\n    soup = BeautifulSoup(data_json[\"content\"], features=\"lxml\")\n    item_label = [\n        item.text.split(\"\\xa0\\xa0\")[1]\n        for item in soup.find_all(name=\"h4\", attrs={\"class\": \"t\"})\n    ]\n    big_df = pd.DataFrame()\n    for item in range(len(item_label)):\n        temp_df = pd.read_html(\n            StringIO(data_json[\"content\"]), converters={\"债券代码\": str}\n        )[item]\n        temp_df[\"占净值比例\"] = (\n            temp_df[\"占净值比例\"].str.split(\"%\", expand=True).iloc[:, 0]\n        )\n        temp_df.rename(columns={\"持仓市值（万元）\": \"持仓市值\"}, inplace=True)\n        temp_df[\"季度\"] = item_label[item]\n        temp_df = temp_df[\n            [\n                \"序号\",\n                \"债券代码\",\n                \"债券名称\",\n                \"占净值比例\",\n                \"持仓市值\",\n                \"季度\",\n            ]\n        ]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df[\"占净值比例\"] = pd.to_numeric(big_df[\"占净值比例\"], errors=\"coerce\")\n    big_df[\"持仓市值\"] = pd.to_numeric(big_df[\"持仓市值\"], errors=\"coerce\")\n    big_df[\"序号\"] = range(1, len(big_df) + 1)\n    return big_df\n\n\ndef fund_portfolio_industry_allocation_em(\n    symbol: str = \"000001\", date: str = \"2023\"\n) -> pd.DataFrame:\n    \"\"\"\n    天天基金网-基金档案-投资组合-行业配置\n    https://fundf10.eastmoney.com/hytz_000001.html\n    :param symbol: 基金代码\n    :type symbol: str\n    :param date: 查询年份\n    :type date: str\n    :return: 行业配置\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://api.fund.eastmoney.com/f10/HYPZ/\"\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"api.fund.eastmoney.com\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://fundf10.eastmoney.com/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/99.0.4844.82 Safari/537.36\",\n    }\n    params = {\n        \"fundCode\": symbol,\n        \"year\": date,\n        \"callback\": \"jQuery183006997159478989867_1648016188499\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -1])\n    temp_list = []\n    for item in data_json[\"Data\"][\"QuarterInfos\"]:\n        temp_list.extend(item[\"HYPZInfo\"])\n    temp_df = pd.DataFrame(temp_list)\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    temp_df.columns = [\n        \"序号\",\n        \"-\",\n        \"截止时间\",\n        \"-\",\n        \"行业类别\",\n        \"市值\",\n        \"-\",\n        \"占净值比例\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"行业类别\",\n            \"占净值比例\",\n            \"市值\",\n            \"截止时间\",\n        ]\n    ]\n    temp_df[\"市值\"] = pd.to_numeric(temp_df[\"市值\"], errors=\"coerce\")\n    temp_df[\"占净值比例\"] = pd.to_numeric(temp_df[\"占净值比例\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_portfolio_change_em(\n    symbol: str = \"003567\", indicator: str = \"累计买入\", date: str = \"2023\"\n) -> pd.DataFrame:\n    \"\"\"\n    天天基金网-基金档案-投资组合-重大变动\n    https://fundf10.eastmoney.com/ccbd_000001.html\n    :param symbol: 基金代码\n    :type symbol: str\n    :param indicator: choice of {\"累计买入\", \"累计卖出\"}\n    :type indicator: str\n    :param date: 查询年份\n    :type date: str\n    :return: 重大变动\n    :rtype: pandas.DataFrame\n    \"\"\"\n    indicator_map = {\n        \"累计买入\": \"1\",\n        \"累计卖出\": \"2\",\n    }\n    url = \"https://fundf10.eastmoney.com/FundArchivesDatas.aspx\"\n    params = {\n        \"type\": \"zdbd\",\n        \"code\": symbol,\n        \"zdbd\": indicator_map[indicator],\n        \"year\": date,\n        \"rt\": \"0.913877030254846\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -1])\n    soup = BeautifulSoup(data_json[\"content\"], features=\"lxml\")\n    item_label = [\n        item.text.split(\"\\xa0\\xa0\")[1]\n        for item in soup.find_all(name=\"h4\", attrs={\"class\": \"t\"})\n    ]\n    big_df = pd.DataFrame()\n    for item in range(len(item_label)):\n        temp_df = pd.read_html(\n            StringIO(data_json[\"content\"]), converters={\"股票代码\": str}\n        )[item]\n        del temp_df[\"相关资讯\"]\n        temp_df[\"占期初基金资产净值比例（%）\"] = (\n            temp_df[\"占期初基金资产净值比例（%）\"]\n            .str.split(\"%\", expand=True)\n            .iloc[:, 0]\n        )\n        temp_df[\"季度\"] = item_label[item]\n        temp_df.columns = [\n            \"序号\",\n            \"股票代码\",\n            \"股票名称\",\n            \"本期累计买入金额\",\n            \"占期初基金资产净值比例\",\n            \"季度\",\n        ]\n        temp_df = temp_df[\n            [\n                \"序号\",\n                \"股票代码\",\n                \"股票名称\",\n                \"本期累计买入金额\",\n                \"占期初基金资产净值比例\",\n                \"季度\",\n            ]\n        ]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    del big_df[\"序号\"]\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.rename(columns={\"index\": \"序号\"}, inplace=True)\n\n    big_df[\"本期累计买入金额\"] = pd.to_numeric(\n        big_df[\"本期累计买入金额\"], errors=\"coerce\"\n    )\n    big_df[\"占期初基金资产净值比例\"] = pd.to_numeric(\n        big_df[\"占期初基金资产净值比例\"], errors=\"coerce\"\n    )\n    return big_df\n\n\nif __name__ == \"__main__\":\n    fund_portfolio_hold_em_df = fund_portfolio_hold_em(symbol=\"000001\", date=\"2024\")\n    print(fund_portfolio_hold_em_df)\n\n    fund_portfolio_bond_hold_em_df = fund_portfolio_bond_hold_em(\n        symbol=\"000001\", date=\"2023\"\n    )\n    print(fund_portfolio_bond_hold_em_df)\n\n    fund_portfolio_industry_allocation_em_df = fund_portfolio_industry_allocation_em(\n        symbol=\"000001\", date=\"2023\"\n    )\n    print(fund_portfolio_industry_allocation_em_df)\n\n    fund_portfolio_change_em_df = fund_portfolio_change_em(\n        symbol=\"003567\", indicator=\"累计买入\", date=\"2023\"\n    )\n    print(fund_portfolio_change_em_df)\n\n    fund_portfolio_change_em_df = fund_portfolio_change_em(\n        symbol=\"003567\", indicator=\"累计卖出\", date=\"2023\"\n    )\n    print(fund_portfolio_change_em_df)\n"
  },
  {
    "path": "akshare/fund/fund_position_lg.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/4/5 22:05\nDesc: 乐咕乐股-基金仓位\nhttps://legulegu.com/stockdata/fund-position/pos-stock\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.stock_feature.stock_a_indicator import get_token_lg, get_cookie_csrf\n\n\ndef fund_stock_position_lg() -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-基金仓位-股票型基金仓位\n    https://legulegu.com/stockdata/fund-position/pos-stock\n    :return: 股票型基金仓位\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://legulegu.com/api/stockdata/fund-position\"\n    token = get_token_lg()\n    params = {\n        \"token\": token,\n        \"type\": \"pos_stock\",\n        \"category\": \"总仓位\",\n        \"marketId\": \"5\",\n    }\n    r = requests.get(\n        url,\n        params=params,\n        **get_cookie_csrf(url=\"https://legulegu.com/stockdata/fund-position/pos-stock\"),\n    )\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json)\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n    temp_df = temp_df[\n        [\n            \"date\",\n            \"close\",\n            \"position\",\n        ]\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"position\"] = pd.to_numeric(temp_df[\"position\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_balance_position_lg() -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-基金仓位-平衡混合型基金仓位\n    https://legulegu.com/stockdata/fund-position/pos-pingheng\n    :return: 平衡混合型基金仓位\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://legulegu.com/api/stockdata/fund-position\"\n    token = get_token_lg()\n    params = {\n        \"token\": token,\n        \"type\": \"pos_pingheng\",\n        \"category\": \"总仓位\",\n        \"marketId\": \"5\",\n    }\n    r = requests.get(\n        url,\n        params=params,\n        **get_cookie_csrf(\n            url=\"https://legulegu.com/stockdata/fund-position/pos-pingheng\"\n        ),\n    )\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json)\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n    temp_df = temp_df[\n        [\n            \"date\",\n            \"close\",\n            \"position\",\n        ]\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"position\"] = pd.to_numeric(temp_df[\"position\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_linghuo_position_lg() -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-基金仓位-灵活配置型基金仓位\n    https://legulegu.com/stockdata/fund-position/pos-linghuo\n    :return: 灵活配置型基金仓位\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://legulegu.com/api/stockdata/fund-position\"\n    token = get_token_lg()\n    params = {\n        \"token\": token,\n        \"type\": \"pos_linghuo\",\n        \"category\": \"总仓位\",\n        \"marketId\": \"5\",\n    }\n    r = requests.get(\n        url,\n        params=params,\n        **get_cookie_csrf(\n            url=\"https://legulegu.com/stockdata/fund-position/pos-linghuo\"\n        ),\n    )\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json)\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n    temp_df = temp_df[\n        [\n            \"date\",\n            \"close\",\n            \"position\",\n        ]\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"position\"] = pd.to_numeric(temp_df[\"position\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fund_stock_position_lg_df = fund_stock_position_lg()\n    print(fund_stock_position_lg_df)\n\n    fund_balance_position_lg_df = fund_balance_position_lg()\n    print(fund_balance_position_lg_df)\n\n    fund_linghuo_position_lg_df = fund_linghuo_position_lg()\n    print(fund_linghuo_position_lg_df)\n"
  },
  {
    "path": "akshare/fund/fund_rank_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/7/24 13:00\nDesc: 东方财富网-数据中心-开放基金排行\nhttps://fund.eastmoney.com/data/fundranking.html\n名词解释\nhttps://help.1234567.com.cn/list_236.html\n\"\"\"\n\nfrom datetime import datetime, date\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils import demjson\n\n\ndef __one_year_ago(date_str: str) -> date:\n    # 将字符串格式的日期转换为date对象\n    given_date = date(int(date_str[0:4]), int(date_str[4:6]), int(date_str[6:8]))\n\n    try:\n        # 尝试直接设置为前一年，保持相同的月和日\n        one_year_before = given_date.replace(year=given_date.year - 1)\n    except ValueError:\n        # 如果前一年没有相同的月和日（比如2月29日），则设置为2月28日\n        one_year_before = given_date.replace(year=given_date.year - 1, day=28)\n\n    return one_year_before\n\n\ndef fund_open_fund_rank_em(symbol: str = \"全部\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-开放基金排行\n    https://fund.eastmoney.com/data/fundranking.html\n    :param symbol: choice of {\"全部\", \"股票型\", \"混合型\", \"债券型\", \"指数型\", \"QDII\", \"FOF\"}\n    :type symbol: str\n    :return: 开放基金排行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    current_date = datetime.now().date().isoformat()\n    last_date = __one_year_ago(current_date.replace(\"-\", \"\")).isoformat()\n    url = \"https://fund.eastmoney.com/data/rankhandler.aspx\"\n    type_map = {\n        \"全部\": [\"all\", \"1nzf\"],\n        \"股票型\": [\"gp\", \"1nzf\"],\n        \"混合型\": [\"hh\", \"1nzf\"],\n        \"债券型\": [\"zq\", \"1nzf\"],\n        \"指数型\": [\"zs\", \"1nzf\"],\n        \"QDII\": [\"qdii\", \"1nzf\"],\n        \"LOF\": [\"lof\", \"1nzf\"],\n        \"FOF\": [\"fof\", \"1nzf\"],\n    }\n    params = {\n        \"op\": \"ph\",\n        \"dt\": \"kf\",\n        \"ft\": type_map[symbol][0],\n        \"rs\": \"\",\n        \"gs\": \"0\",\n        \"sc\": type_map[symbol][1],\n        \"st\": \"desc\",\n        \"sd\": last_date,\n        \"ed\": current_date,\n        \"qdii\": \"\",\n        \"tabSubtype\": \",,,,,\",\n        \"pi\": \"1\",\n        \"pn\": \"30000\",\n        \"dx\": \"1\",\n        \"v\": \"0.1591891419018292\",\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/81.0.4044.138 Safari/537.36\",\n        \"Referer\": \"https://fund.eastmoney.com/fundguzhi.html\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -1])\n    temp_df = pd.DataFrame(data_json[\"datas\"])\n    temp_df = temp_df.iloc[:, 0].str.split(\",\", expand=True)\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = list(range(1, len(temp_df) + 1))\n    temp_df.columns = [\n        \"序号\",\n        \"基金代码\",\n        \"基金简称\",\n        \"_\",\n        \"日期\",\n        \"单位净值\",\n        \"累计净值\",\n        \"日增长率\",\n        \"近1周\",\n        \"近1月\",\n        \"近3月\",\n        \"近6月\",\n        \"近1年\",\n        \"近2年\",\n        \"近3年\",\n        \"今年来\",\n        \"成立来\",\n        \"_\",\n        \"_\",\n        \"自定义\",\n        \"_\",\n        \"手续费\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"基金代码\",\n            \"基金简称\",\n            \"日期\",\n            \"单位净值\",\n            \"累计净值\",\n            \"日增长率\",\n            \"近1周\",\n            \"近1月\",\n            \"近3月\",\n            \"近6月\",\n            \"近1年\",\n            \"近2年\",\n            \"近3年\",\n            \"今年来\",\n            \"成立来\",\n            \"自定义\",\n            \"手续费\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"单位净值\"] = pd.to_numeric(temp_df[\"单位净值\"], errors=\"coerce\")\n    temp_df[\"累计净值\"] = pd.to_numeric(temp_df[\"累计净值\"], errors=\"coerce\")\n    temp_df[\"日增长率\"] = pd.to_numeric(temp_df[\"日增长率\"], errors=\"coerce\")\n    temp_df[\"近1周\"] = pd.to_numeric(temp_df[\"近1周\"], errors=\"coerce\")\n    temp_df[\"近1月\"] = pd.to_numeric(temp_df[\"近1月\"], errors=\"coerce\")\n    temp_df[\"近3月\"] = pd.to_numeric(temp_df[\"近3月\"], errors=\"coerce\")\n    temp_df[\"近6月\"] = pd.to_numeric(temp_df[\"近6月\"], errors=\"coerce\")\n    temp_df[\"近1年\"] = pd.to_numeric(temp_df[\"近1年\"], errors=\"coerce\")\n    temp_df[\"近2年\"] = pd.to_numeric(temp_df[\"近2年\"], errors=\"coerce\")\n    temp_df[\"近3年\"] = pd.to_numeric(temp_df[\"近3年\"], errors=\"coerce\")\n    temp_df[\"今年来\"] = pd.to_numeric(temp_df[\"今年来\"], errors=\"coerce\")\n    temp_df[\"成立来\"] = pd.to_numeric(temp_df[\"成立来\"], errors=\"coerce\")\n    temp_df[\"自定义\"] = pd.to_numeric(temp_df[\"自定义\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_exchange_rank_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-场内交易基金排行\n    https://fund.eastmoney.com/data/fbsfundranking.html\n    :return: 场内交易基金数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/data/rankhandler.aspx\"\n    params = {\n        \"op\": \"ph\",\n        \"dt\": \"fb\",\n        \"ft\": \"ct\",\n        \"rs\": \"\",\n        \"gs\": \"0\",\n        \"sc\": \"1nzf\",\n        \"st\": \"desc\",\n        \"pi\": \"1\",\n        \"pn\": \"30000\",\n        \"v\": \"0.1591891419018292\",\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/81.0.4044.138 Safari/537.36\",\n        \"Referer\": \"https://fund.eastmoney.com/fundguzhi.html\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    text_data = r.text\n    json_data = demjson.decode(text_data[text_data.find(\"{\") : -1])\n    temp_df = pd.DataFrame(json_data[\"datas\"])\n    temp_df = temp_df.iloc[:, 0].str.split(\",\", expand=True)\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = list(range(1, len(temp_df) + 1))\n    temp_df.columns = [\n        \"序号\",\n        \"基金代码\",\n        \"基金简称\",\n        \"_\",\n        \"日期\",\n        \"单位净值\",\n        \"累计净值\",\n        \"近1周\",\n        \"近1月\",\n        \"近3月\",\n        \"近6月\",\n        \"近1年\",\n        \"近2年\",\n        \"近3年\",\n        \"今年来\",\n        \"成立来\",\n        \"成立日期\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"类型\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"基金代码\",\n            \"基金简称\",\n            \"类型\",\n            \"日期\",\n            \"单位净值\",\n            \"累计净值\",\n            \"近1周\",\n            \"近1月\",\n            \"近3月\",\n            \"近6月\",\n            \"近1年\",\n            \"近2年\",\n            \"近3年\",\n            \"今年来\",\n            \"成立来\",\n            \"成立日期\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"成立日期\"] = pd.to_datetime(temp_df[\"成立日期\"]).dt.date\n    temp_df[\"单位净值\"] = pd.to_numeric(temp_df[\"单位净值\"], errors=\"coerce\")\n    temp_df[\"累计净值\"] = pd.to_numeric(temp_df[\"累计净值\"], errors=\"coerce\")\n    temp_df[\"近1周\"] = pd.to_numeric(temp_df[\"近1周\"], errors=\"coerce\")\n    temp_df[\"近1月\"] = pd.to_numeric(temp_df[\"近1月\"], errors=\"coerce\")\n    temp_df[\"近3月\"] = pd.to_numeric(temp_df[\"近3月\"], errors=\"coerce\")\n    temp_df[\"近6月\"] = pd.to_numeric(temp_df[\"近6月\"], errors=\"coerce\")\n    temp_df[\"近1年\"] = pd.to_numeric(temp_df[\"近1年\"], errors=\"coerce\")\n    temp_df[\"近2年\"] = pd.to_numeric(temp_df[\"近2年\"], errors=\"coerce\")\n    temp_df[\"近3年\"] = pd.to_numeric(temp_df[\"近3年\"], errors=\"coerce\")\n    temp_df[\"今年来\"] = pd.to_numeric(temp_df[\"今年来\"], errors=\"coerce\")\n    temp_df[\"成立来\"] = pd.to_numeric(temp_df[\"成立来\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_money_rank_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-货币型基金排行\n    https://fund.eastmoney.com/data/hbxfundranking.html\n    :return: 货币型基金排行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://api.fund.eastmoney.com/FundRank/GetHbRankList\"\n    params = {\n        \"intCompany\": \"0\",\n        \"MinsgType\": \"\",\n        \"IsSale\": \"1\",\n        \"strSortCol\": \"SYL_1N\",\n        \"orderType\": \"desc\",\n        \"pageIndex\": \"1\",\n        \"pageSize\": \"10000\",\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/81.0.4044.138 Safari/537.36\",\n        \"Referer\": \"https://fund.eastmoney.com/fundguzhi.html\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    json_data = r.json()\n    temp_df = pd.DataFrame(json_data[\"Data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = list(range(1, len(temp_df) + 1))\n    temp_df.columns = [\n        \"序号\",\n        \"近1年\",\n        \"近2年\",\n        \"近3年\",\n        \"近5年\",\n        \"_\",\n        \"_\",\n        \"基金代码\",\n        \"基金简称\",\n        \"日期\",\n        \"万份收益\",\n        \"年化收益率7日\",\n        \"_\",\n        \"年化收益率14日\",\n        \"年化收益率28日\",\n        \"近1月\",\n        \"近3月\",\n        \"近6月\",\n        \"今年来\",\n        \"成立来\",\n        \"_\",\n        \"手续费\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"基金代码\",\n            \"基金简称\",\n            \"日期\",\n            \"万份收益\",\n            \"年化收益率7日\",\n            \"年化收益率14日\",\n            \"年化收益率28日\",\n            \"近1月\",\n            \"近3月\",\n            \"近6月\",\n            \"近1年\",\n            \"近2年\",\n            \"近3年\",\n            \"近5年\",\n            \"今年来\",\n            \"成立来\",\n            \"手续费\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"万份收益\"] = pd.to_numeric(temp_df[\"万份收益\"], errors=\"coerce\")\n    temp_df[\"年化收益率7日\"] = pd.to_numeric(temp_df[\"年化收益率7日\"], errors=\"coerce\")\n    temp_df[\"年化收益率14日\"] = pd.to_numeric(\n        temp_df[\"年化收益率14日\"], errors=\"coerce\"\n    )\n    temp_df[\"年化收益率28日\"] = pd.to_numeric(\n        temp_df[\"年化收益率28日\"], errors=\"coerce\"\n    )\n    temp_df[\"近1月\"] = pd.to_numeric(temp_df[\"近1月\"], errors=\"coerce\")\n    temp_df[\"近3月\"] = pd.to_numeric(temp_df[\"近3月\"], errors=\"coerce\")\n    temp_df[\"近6月\"] = pd.to_numeric(temp_df[\"近6月\"], errors=\"coerce\")\n    temp_df[\"近1年\"] = pd.to_numeric(temp_df[\"近1年\"], errors=\"coerce\")\n    temp_df[\"近2年\"] = pd.to_numeric(temp_df[\"近2年\"], errors=\"coerce\")\n    temp_df[\"近3年\"] = pd.to_numeric(temp_df[\"近3年\"], errors=\"coerce\")\n    temp_df[\"近5年\"] = pd.to_numeric(temp_df[\"近5年\"], errors=\"coerce\")\n    temp_df[\"今年来\"] = pd.to_numeric(temp_df[\"今年来\"], errors=\"coerce\")\n    temp_df[\"成立来\"] = pd.to_numeric(temp_df[\"成立来\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_lcx_rank_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-理财基金排行\n    # 该接口暂时没有数据\n    https://fund.eastmoney.com/data/lcxfundranking.html#t;c0;r;sSYL_Z;ddesc;pn50;f;os1;\n    :return: 理财基金排行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://api.fund.eastmoney.com/FundRank/GetLcRankList\"\n    params = {\n        \"intCompany\": \"0\",\n        \"MinsgType\": \"undefined\",\n        \"IsSale\": \"1\",\n        \"strSortCol\": \"SYL_Z\",\n        \"orderType\": \"desc\",\n        \"pageIndex\": \"1\",\n        \"pageSize\": \"50\",\n        \"FBQ\": \"\",\n        \"callback\": \"jQuery18303264654966943197_1603867158043\",\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/81.0.4044.138 Safari/537.36\",\n        \"Referer\": \"https://fund.eastmoney.com/fundguzhi.html\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    try:\n        data_json = r.json()\n    except:  # noqa: E722\n        return pd.DataFrame()\n    temp_df = pd.DataFrame(data_json[\"Data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = list(range(1, len(temp_df) + 1))\n    temp_df.columns = [\n        \"序号\",\n        \"近1周\",\n        \"基金代码\",\n        \"基金简称\",\n        \"日期\",\n        \"万份收益\",\n        \"年化收益率-7日\",\n        \"_\",\n        \"年化收益率-14日\",\n        \"年化收益率-28日\",\n        \"近1月\",\n        \"近3月\",\n        \"近6月\",\n        \"今年来\",\n        \"成立来\",\n        \"可购买\",\n        \"手续费\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"基金代码\",\n            \"基金简称\",\n            \"日期\",\n            \"万份收益\",\n            \"年化收益率-7日\",\n            \"年化收益率-14日\",\n            \"年化收益率-28日\",\n            \"近1周\",\n            \"近1月\",\n            \"近3月\",\n            \"近6月\",\n            \"今年来\",\n            \"成立来\",\n            \"可购买\",\n            \"手续费\",\n        ]\n    ]\n    return temp_df\n\n\ndef fund_hk_rank_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-香港基金排行\n    https://overseas.1234567.com.cn/FundList\n    :return: 香港基金排行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    format_date = datetime.now().date().isoformat()\n    url = \"https://overseas.1234567.com.cn/overseasapi/OpenApiHander.ashx\"\n    params = {\n        \"api\": \"HKFDApi\",\n        \"m\": \"MethodFundList\",\n        \"action\": \"1\",\n        \"pageindex\": \"0\",\n        \"pagesize\": \"5000\",\n        \"dy\": \"1\",\n        \"date1\": format_date,\n        \"date2\": format_date,\n        \"sortfield\": \"Y\",\n        \"sorttype\": \"-1\",\n        \"isbuy\": \"0\",\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/81.0.4044.138 Safari/537.36\",\n        \"Referer\": \"https://fund.eastmoney.com/fundguzhi.html\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"Data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = list(range(1, len(temp_df) + 1))\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"香港基金代码\",\n        \"基金代码\",\n        \"_\",\n        \"基金简称\",\n        \"可购买\",\n        \"日期\",\n        \"单位净值\",\n        \"日增长率\",\n        \"_\",\n        \"近1周\",\n        \"近1月\",\n        \"近3月\",\n        \"近6月\",\n        \"近1年\",\n        \"近2年\",\n        \"近3年\",\n        \"今年来\",\n        \"成立来\",\n        \"币种\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"基金代码\",\n            \"基金简称\",\n            \"币种\",\n            \"日期\",\n            \"单位净值\",\n            \"日增长率\",\n            \"近1周\",\n            \"近1月\",\n            \"近3月\",\n            \"近6月\",\n            \"近1年\",\n            \"近2年\",\n            \"近3年\",\n            \"今年来\",\n            \"成立来\",\n            \"可购买\",\n            \"香港基金代码\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"单位净值\"] = pd.to_numeric(temp_df[\"单位净值\"], errors=\"coerce\")\n    temp_df[\"日增长率\"] = pd.to_numeric(temp_df[\"日增长率\"], errors=\"coerce\")\n    temp_df[\"近1周\"] = pd.to_numeric(temp_df[\"近1周\"], errors=\"coerce\")\n    temp_df[\"近1月\"] = pd.to_numeric(temp_df[\"近1月\"], errors=\"coerce\")\n    temp_df[\"近3月\"] = pd.to_numeric(temp_df[\"近3月\"], errors=\"coerce\")\n    temp_df[\"近6月\"] = pd.to_numeric(temp_df[\"近6月\"], errors=\"coerce\")\n    temp_df[\"近1年\"] = pd.to_numeric(temp_df[\"近1年\"], errors=\"coerce\")\n    temp_df[\"近2年\"] = pd.to_numeric(temp_df[\"近2年\"], errors=\"coerce\")\n    temp_df[\"近3年\"] = pd.to_numeric(temp_df[\"近3年\"], errors=\"coerce\")\n    temp_df[\"今年来\"] = pd.to_numeric(temp_df[\"今年来\"], errors=\"coerce\")\n    temp_df[\"成立来\"] = pd.to_numeric(temp_df[\"成立来\"], errors=\"coerce\")\n    temp_df[\"成立来\"] = pd.to_numeric(temp_df[\"成立来\"], errors=\"coerce\")\n    temp_df[\"可购买\"] = temp_df[\"可购买\"].map(\n        lambda x: \"可购买\" if x == \"1\" else \"不可购买\"\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol=\"全部\")\n    print(fund_open_fund_rank_em_df)\n\n    fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol=\"股票型\")\n    print(fund_open_fund_rank_em_df)\n\n    fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol=\"混合型\")\n    print(fund_open_fund_rank_em_df)\n\n    fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol=\"债券型\")\n    print(fund_open_fund_rank_em_df)\n\n    fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol=\"指数型\")\n    print(fund_open_fund_rank_em_df)\n\n    fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol=\"QDII\")\n    print(fund_open_fund_rank_em_df)\n\n    fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol=\"FOF\")\n    print(fund_open_fund_rank_em_df)\n\n    fund_exchange_rank_em_df = fund_exchange_rank_em()\n    print(fund_exchange_rank_em_df)\n\n    fund_money_rank_em_df = fund_money_rank_em()\n    print(fund_money_rank_em_df)\n\n    fund_lcx_rank_em_df = fund_lcx_rank_em()\n    print(fund_lcx_rank_em_df)\n\n    fund_hk_rank_em_df = fund_hk_rank_em()\n    print(fund_hk_rank_em_df)\n"
  },
  {
    "path": "akshare/fund/fund_rating.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/12/12 16:30\nDesc: 基金评级\nhttps://fund.eastmoney.com/data/fundrating.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef fund_rating_all() -> pd.DataFrame:\n    \"\"\"\n    天天基金网-基金评级-基金评级总汇\n    https://fund.eastmoney.com/data/fundrating.html\n    :return: 基金评级总汇\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/data/fundrating.html\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    data_text = soup.find(name=\"div\", attrs={\"id\": \"fundinfo\"}).find(\"script\").string\n    data_content = [\n        item.split(\"|\")\n        for item in data_text.split(\"var\")[6]\n        .split(\"=\")[1]\n        .strip()\n        .strip(\";\")\n        .strip('\"')\n        .strip(\"|\")\n        .split(\"|_\")\n    ]\n    temp_df = pd.DataFrame(data_content)\n    temp_df.columns = [\n        \"代码\",\n        \"简称\",\n        \"类型\",\n        \"基金经理\",\n        \"-\",\n        \"基金公司\",\n        \"-\",\n        \"5星评级家数\",\n        \"-\",\n        \"-\",\n        \"招商证券\",\n        \"-\",\n        \"上海证券\",\n        \"-\",\n        \"晨星评级\",\n        \"-\",\n        \"济安金信\",\n        \"-\",\n        \"手续费\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"简称\",\n            \"基金经理\",\n            \"基金公司\",\n            \"5星评级家数\",\n            \"上海证券\",\n            \"招商证券\",\n            \"济安金信\",\n            \"晨星评级\",\n            \"手续费\",\n            \"类型\",\n        ]\n    ]\n    temp_df[\"5星评级家数\"] = pd.to_numeric(temp_df[\"5星评级家数\"], errors=\"coerce\")\n    temp_df[\"上海证券\"] = pd.to_numeric(temp_df[\"上海证券\"], errors=\"coerce\")\n    temp_df[\"招商证券\"] = pd.to_numeric(temp_df[\"招商证券\"], errors=\"coerce\")\n    temp_df[\"济安金信\"] = pd.to_numeric(temp_df[\"济安金信\"], errors=\"coerce\")\n    temp_df[\"晨星评级\"] = pd.to_numeric(temp_df[\"晨星评级\"], errors=\"coerce\")\n    temp_df[\"手续费\"] = (\n        pd.to_numeric(temp_df[\"手续费\"].str.strip(\"%\"), errors=\"coerce\") / 100\n    )\n    return temp_df\n\n\ndef fund_rating_sh(date: str = \"20230630\") -> pd.DataFrame:\n    \"\"\"\n    天天基金网-基金评级-上海证券评级\n    https://fund.eastmoney.com/data/fundrating_3.html\n    :param date: 日期; https://fund.eastmoney.com/data/fundrating_3.html 获取查询日期\n    :type date: str\n    :return: 上海证券评级\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/data/fundrating_3.html\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, \"lxml\")\n    date_list = [\n        item[\"value\"] for item in soup.find(\"select\", attrs={\"id\": \"rqoptions\"})\n    ]\n    date_format = \"-\".join([date[:4], date[4:6], date[6:]])\n    if date_format not in date_list:\n        raise \"请访问 https://fund.eastmoney.com/data/fundrating_3.html 获取查询日期\"\n    url = f\"https://fund.eastmoney.com/data/fundrating_3_{'-'.join([date[:4], date[4:6], date[6:]])}.html\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, \"lxml\")\n    data_text = soup.find(\"div\", attrs={\"id\": \"fundinfo\"}).find(\"script\").string\n    data_content = [\n        item.split(\"|\")\n        for item in data_text.split(\"var\")[1]\n        .split(\"=\")[1]\n        .strip()\n        .strip(\";\")\n        .strip('\"')\n        .strip(\"|\")\n        .split(\"|_\")\n    ]\n    temp_df = pd.DataFrame(data_content)\n    temp_df.columns = [\n        \"代码\",\n        \"简称\",\n        \"类型\",\n        \"基金经理\",\n        \"_\",\n        \"基金公司\",\n        \"_\",\n        \"3年期评级-3年评级\",\n        \"3年期评级-较上期\",\n        \"5年期评级-5年评级\",\n        \"5年期评级-较上期\",\n        \"单位净值\",\n        \"日期\",\n        \"日增长率\",\n        \"近1年涨幅\",\n        \"近3年涨幅\",\n        \"近5年涨幅\",\n        \"手续费\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"简称\",\n            \"基金经理\",\n            \"基金公司\",\n            \"3年期评级-3年评级\",\n            \"3年期评级-较上期\",\n            \"5年期评级-5年评级\",\n            \"5年期评级-较上期\",\n            \"单位净值\",\n            \"日期\",\n            \"日增长率\",\n            \"近1年涨幅\",\n            \"近3年涨幅\",\n            \"近5年涨幅\",\n            \"手续费\",\n            \"类型\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"3年期评级-3年评级\"] = pd.to_numeric(\n        temp_df[\"3年期评级-3年评级\"], errors=\"coerce\"\n    )\n    temp_df[\"3年期评级-较上期\"] = pd.to_numeric(\n        temp_df[\"3年期评级-较上期\"], errors=\"coerce\"\n    )\n    temp_df[\"5年期评级-5年评级\"] = pd.to_numeric(\n        temp_df[\"5年期评级-5年评级\"], errors=\"coerce\"\n    )\n    temp_df[\"5年期评级-较上期\"] = pd.to_numeric(\n        temp_df[\"5年期评级-较上期\"], errors=\"coerce\"\n    )\n    temp_df[\"单位净值\"] = pd.to_numeric(temp_df[\"单位净值\"], errors=\"coerce\")\n    temp_df[\"日增长率\"] = pd.to_numeric(temp_df[\"日增长率\"], errors=\"coerce\")\n    temp_df[\"近1年涨幅\"] = pd.to_numeric(temp_df[\"近1年涨幅\"], errors=\"coerce\")\n    temp_df[\"近3年涨幅\"] = pd.to_numeric(temp_df[\"近3年涨幅\"], errors=\"coerce\")\n    temp_df[\"近5年涨幅\"] = pd.to_numeric(temp_df[\"近5年涨幅\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_rating_zs(date: str = \"20230331\") -> pd.DataFrame:\n    \"\"\"\n    天天基金网-基金评级-招商证券评级\n    https://fund.eastmoney.com/data/fundrating_2.html\n    :param date: 日期; https://fund.eastmoney.com/data/fundrating_2.html 获取查询日期\n    :type date: str\n    :return: 招商证券评级-混合型\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/data/fundrating_2.html\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, \"lxml\")\n    date_list = [\n        item[\"value\"] for item in soup.find(\"select\", attrs={\"id\": \"rqoptions\"})\n    ]\n    date_format = \"-\".join([date[:4], date[4:6], date[6:]])\n    if date_format not in date_list:\n        raise \"请访问 https://fund.eastmoney.com/data/fundrating_2.html 获取查询日期\"\n    url = f\"https://fund.eastmoney.com/data/fundrating_2_{'-'.join([date[:4], date[4:6], date[6:]])}.html\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, \"lxml\")\n    data_text = soup.find(\"div\", attrs={\"id\": \"fundinfo\"}).find(\"script\").string\n    data_content = [\n        item.split(\"|\")\n        for item in data_text.split(\"var\")[1]\n        .split(\"=\")[1]\n        .strip()\n        .strip(\";\")\n        .strip('\"')\n        .strip(\"|\")\n        .split(\"|_\")\n    ]\n    temp_df = pd.DataFrame(data_content)\n    temp_df.columns = [\n        \"代码\",\n        \"简称\",\n        \"_\",\n        \"基金经理\",\n        \"_\",\n        \"基金公司\",\n        \"_\",\n        \"3年期评级-3年评级\",\n        \"3年期评级-较上期\",\n        \"单位净值\",\n        \"日期\",\n        \"日增长率\",\n        \"近1年涨幅\",\n        \"近3年涨幅\",\n        \"近5年涨幅\",\n        \"手续费\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"简称\",\n            \"基金经理\",\n            \"基金公司\",\n            \"3年期评级-3年评级\",\n            \"3年期评级-较上期\",\n            \"单位净值\",\n            \"日期\",\n            \"日增长率\",\n            \"近1年涨幅\",\n            \"近3年涨幅\",\n            \"近5年涨幅\",\n            \"手续费\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"3年期评级-3年评级\"] = pd.to_numeric(\n        temp_df[\"3年期评级-3年评级\"], errors=\"coerce\"\n    )\n    temp_df[\"3年期评级-较上期\"] = pd.to_numeric(\n        temp_df[\"3年期评级-较上期\"], errors=\"coerce\"\n    )\n    temp_df[\"单位净值\"] = pd.to_numeric(temp_df[\"单位净值\"], errors=\"coerce\")\n    temp_df[\"日增长率\"] = pd.to_numeric(temp_df[\"日增长率\"], errors=\"coerce\")\n    temp_df[\"近1年涨幅\"] = pd.to_numeric(temp_df[\"近1年涨幅\"], errors=\"coerce\")\n    temp_df[\"近3年涨幅\"] = pd.to_numeric(temp_df[\"近3年涨幅\"], errors=\"coerce\")\n    temp_df[\"近5年涨幅\"] = pd.to_numeric(temp_df[\"近5年涨幅\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_rating_ja(date: str = \"20230331\") -> pd.DataFrame:\n    \"\"\"\n    天天基金网-基金评级-济安金信评级\n    https://fund.eastmoney.com/data/fundrating_4.html\n    :param date: 日期; https://fund.eastmoney.com/data/fundrating_4.html 获取查询日期\n    :type date: str\n    :return: 济安金信评级\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/data/fundrating_4.html\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, \"lxml\")\n    date_list = [\n        item[\"value\"] for item in soup.find(\"select\", attrs={\"id\": \"rqoptions\"})\n    ]\n    date_format = \"-\".join([date[:4], date[4:6], date[6:]])\n    if date_format not in date_list:\n        raise \"请访问 http://fund.eastmoney.com/data/fundrating_4.html 获取查询日期\"\n    url = f\"https://fund.eastmoney.com/data/fundrating_4_{'-'.join([date[:4], date[4:6], date[6:]])}.html\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, \"lxml\")\n    data_text = soup.find(\"div\", attrs={\"id\": \"fundinfo\"}).find(\"script\").string\n    data_content = [\n        item.split(\"|\")\n        for item in data_text.split(\"var\")[1]\n        .split(\"=\")[1]\n        .strip()\n        .strip(\";\")\n        .strip('\"')\n        .strip(\"|\")\n        .split(\"|_\")\n    ]\n    temp_df = pd.DataFrame(data_content)\n    temp_df.columns = [\n        \"代码\",\n        \"简称\",\n        \"类型\",\n        \"基金经理\",\n        \"_\",\n        \"基金公司\",\n        \"_\",\n        \"3年期评级-3年评级\",\n        \"3年期评级-较上期\",\n        \"单位净值\",\n        \"日期\",\n        \"日增长率\",\n        \"近1年涨幅\",\n        \"近3年涨幅\",\n        \"近5年涨幅\",\n        \"手续费\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"简称\",\n            \"基金经理\",\n            \"基金公司\",\n            \"3年期评级-3年评级\",\n            \"3年期评级-较上期\",\n            \"单位净值\",\n            \"日期\",\n            \"日增长率\",\n            \"近1年涨幅\",\n            \"近3年涨幅\",\n            \"近5年涨幅\",\n            \"手续费\",\n            \"类型\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"3年期评级-3年评级\"] = pd.to_numeric(\n        temp_df[\"3年期评级-3年评级\"], errors=\"coerce\"\n    )\n    temp_df[\"3年期评级-较上期\"] = pd.to_numeric(\n        temp_df[\"3年期评级-较上期\"], errors=\"coerce\"\n    )\n    temp_df[\"单位净值\"] = pd.to_numeric(temp_df[\"单位净值\"], errors=\"coerce\")\n    temp_df[\"日增长率\"] = pd.to_numeric(temp_df[\"日增长率\"], errors=\"coerce\")\n    temp_df[\"近1年涨幅\"] = pd.to_numeric(temp_df[\"近1年涨幅\"], errors=\"coerce\")\n    temp_df[\"近3年涨幅\"] = pd.to_numeric(temp_df[\"近3年涨幅\"], errors=\"coerce\")\n    temp_df[\"近5年涨幅\"] = pd.to_numeric(temp_df[\"近5年涨幅\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fund_rating_all_df = fund_rating_all()\n    print(fund_rating_all_df)\n\n    fund_rating_sh_df = fund_rating_sh(date=\"20230630\")\n    print(fund_rating_sh_df)\n\n    fund_rating_zs_df = fund_rating_zs(date=\"20230331\")\n    print(fund_rating_zs_df)\n\n    fund_rating_ja_df = fund_rating_ja(date=\"20230331\")\n    print(fund_rating_ja_df)\n"
  },
  {
    "path": "akshare/fund/fund_report_cninfo.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/7/24 23:30\nDesc: 巨潮资讯-数据中心-专题统计-基金报表\nhttps://webapi.cninfo.com.cn/#/thematicStatistics\n\"\"\"\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_cninfo(file: str = \"cninfo.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef fund_report_stock_cninfo(date: str = \"20210630\") -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-专题统计-基金报表-基金重仓股\n    https://webapi.cninfo.com.cn/#/thematicStatistics\n    :param date: 报告时间; choice of {\"XXXX0331\", \"XXXX0630\", \"XXXX0930\", \"XXXX1231\"}\n    :type date: str\n    :return: 基金重仓股\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1112\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"rdate\": \"-\".join([date[:4], date[4:6], date[6:]]),\n    }\n    r = requests.post(url, headers=headers, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.rename(\n        columns={\n            \"F003N\": \"持股总市值\",\n            \"F002N\": \"持股总数\",\n            \"F001N\": \"基金覆盖家数\",\n            \"SECNAME\": \"股票简称\",\n            \"ID\": \"序号\",\n            \"SECCODE\": \"股票代码\",\n            \"ENDDATE\": \"报告期\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"报告期\",\n            \"基金覆盖家数\",\n            \"持股总数\",\n            \"持股总市值\",\n        ]\n    ]\n    temp_df[\"报告期\"] = pd.to_datetime(temp_df[\"报告期\"], errors=\"coerce\").dt.date\n    temp_df[\"持股总数\"] = pd.to_numeric(temp_df[\"持股总数\"], errors=\"coerce\")\n    temp_df[\"持股总市值\"] = pd.to_numeric(temp_df[\"持股总市值\"], errors=\"coerce\")\n    temp_df[\"基金覆盖家数\"] = pd.to_numeric(temp_df[\"基金覆盖家数\"], errors=\"coerce\")\n    temp_df[\"序号\"] = range(1, len(temp_df) + 1)\n    return temp_df\n\n\ndef fund_report_industry_allocation_cninfo(date: str = \"20210630\") -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-专题统计-基金报表-基金行业配置\n    https://webapi.cninfo.com.cn/#/thematicStatistics\n    :param date: 报告时间; choice of {\"XXXX0331\", \"XXXX0630\", \"XXXX0930\", \"XXXX1231\"}, 从 2017 年开始\n    :type date: str\n    :return: 基金行业配置\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1113\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"rdate\": \"-\".join([date[:4], date[4:6], date[6:]]),\n    }\n    r = requests.post(url, headers=headers, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.rename(\n        columns={\n            \"F004N\": \"行业规模\",\n            \"F003N\": \"基金覆盖家数\",\n            \"F002V\": \"证监会行业名称\",\n            \"F001V\": \"行业编码\",\n            \"ENDDATE\": \"报告期\",\n            \"F005N\": \"占净资产比例\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"行业编码\",\n            \"证监会行业名称\",\n            \"报告期\",\n            \"基金覆盖家数\",\n            \"行业规模\",\n            \"占净资产比例\",\n        ]\n    ]\n    temp_df[\"报告期\"] = pd.to_datetime(temp_df[\"报告期\"], errors=\"coerce\").dt.date\n    temp_df[\"基金覆盖家数\"] = pd.to_numeric(temp_df[\"基金覆盖家数\"], errors=\"coerce\")\n    temp_df[\"行业规模\"] = pd.to_numeric(temp_df[\"行业规模\"], errors=\"coerce\")\n    temp_df[\"占净资产比例\"] = pd.to_numeric(temp_df[\"占净资产比例\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_report_asset_allocation_cninfo() -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-专题统计-基金报表-基金资产配置\n    https://webapi.cninfo.com.cn/#/thematicStatistics\n    :return: 基金资产配置\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1114\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.post(url, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.rename(\n        columns={\n            \"F001N\": \"基金覆盖家数\",\n            \"F008N\": \"现金货币类占净资产比例\",\n            \"F007N\": \"债券固定收益类占净资产比例\",\n            \"F006N\": \"股票权益类占净资产比例\",\n            \"ENDDATE\": \"报告期\",\n            \"F005N\": \"基金市场净资产规模\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"报告期\",\n            \"基金覆盖家数\",\n            \"股票权益类占净资产比例\",\n            \"债券固定收益类占净资产比例\",\n            \"现金货币类占净资产比例\",\n            \"基金市场净资产规模\",\n        ]\n    ]\n    temp_df[\"报告期\"] = pd.to_datetime(temp_df[\"报告期\"], errors=\"coerce\").dt.date\n    temp_df[\"基金覆盖家数\"] = pd.to_numeric(temp_df[\"基金覆盖家数\"], errors=\"coerce\")\n    temp_df[\"股票权益类占净资产比例\"] = pd.to_numeric(\n        temp_df[\"股票权益类占净资产比例\"], errors=\"coerce\"\n    )\n    temp_df[\"债券固定收益类占净资产比例\"] = pd.to_numeric(\n        temp_df[\"债券固定收益类占净资产比例\"], errors=\"coerce\"\n    )\n    temp_df[\"现金货币类占净资产比例\"] = pd.to_numeric(\n        temp_df[\"现金货币类占净资产比例\"], errors=\"coerce\"\n    )\n    temp_df[\"基金市场净资产规模\"] = pd.to_numeric(\n        temp_df[\"基金市场净资产规模\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fund_report_stock_cninfo_df = fund_report_stock_cninfo(date=\"20210630\")\n    print(fund_report_stock_cninfo_df)\n\n    fund_report_industry_allocation_cninfo_df = fund_report_industry_allocation_cninfo(\n        date=\"20210930\"\n    )\n    print(fund_report_industry_allocation_cninfo_df)\n\n    fund_report_asset_allocation_cninfo_df = fund_report_asset_allocation_cninfo()\n    print(fund_report_asset_allocation_cninfo_df)\n"
  },
  {
    "path": "akshare/fund/fund_scale_em.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2023/10/27 20:30\nDesc: 天天基金网-基金数据-规模份额\nhttps://fund.eastmoney.com/data/cyrjglist.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils import demjson\n\n\ndef fund_scale_change_em() -> pd.DataFrame:\n    \"\"\"\n    天天基金网-基金数据-规模份额-规模变动\n    https://fund.eastmoney.com/data/gmbdlist.html\n    :return: 规模变动\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/data/FundDataPortfolio_Interface.aspx\"\n    params = {\n        \"dt\": \"9\",\n        \"pi\": \"1\",\n        \"pn\": \"50\",\n        \"mc\": \"hypzDetail\",\n        \"st\": \"desc\",\n        \"sc\": \"reportdate\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -1])\n    total_page = data_json[\"pages\"]\n    big_df = pd.DataFrame()\n    for page in range(1, int(total_page) + 1):\n        params.update({\"pi\": page})\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text[data_text.find(\"{\") : -1])\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df[\"index\"] + 1\n    big_df.columns = [\n        \"序号\",\n        \"截止日期\",\n        \"基金家数\",\n        \"期间申购\",\n        \"期间赎回\",\n        \"期末总份额\",\n        \"期末净资产\",\n    ]\n    big_df[\"截止日期\"] = pd.to_datetime(big_df[\"截止日期\"], errors=\"coerce\").dt.date\n    big_df[\"基金家数\"] = pd.to_numeric(big_df[\"基金家数\"], errors=\"coerce\")\n    big_df[\"期间申购\"] = pd.to_numeric(\n        big_df[\"期间申购\"].str.replace(\",\", \"\"), errors=\"coerce\"\n    )\n    big_df[\"期间赎回\"] = pd.to_numeric(\n        big_df[\"期间赎回\"].str.replace(\",\", \"\"), errors=\"coerce\"\n    )\n    big_df[\"期末总份额\"] = pd.to_numeric(\n        big_df[\"期末总份额\"].str.replace(\",\", \"\"), errors=\"coerce\"\n    )\n    big_df[\"期末净资产\"] = pd.to_numeric(\n        big_df[\"期末净资产\"].str.replace(\",\", \"\"), errors=\"coerce\"\n    )\n    return big_df\n\n\ndef fund_hold_structure_em() -> pd.DataFrame:\n    \"\"\"\n    天天基金网-基金数据-规模份额-持有人结构\n    https://fund.eastmoney.com/data/cyrjglist.html\n    :return: 持有人结构\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://fund.eastmoney.com/data/FundDataPortfolio_Interface.aspx\"\n    params = {\n        \"dt\": \"11\",\n        \"pi\": \"1\",\n        \"pn\": \"50\",\n        \"mc\": \"hypzDetail\",\n        \"st\": \"desc\",\n        \"sc\": \"reportdate\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -1])\n    total_page = data_json[\"pages\"]\n    big_df = pd.DataFrame()\n    for page in range(1, int(total_page) + 1):\n        params.update({\"pi\": page})\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text[data_text.find(\"{\") : -1])\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df[\"index\"] + 1\n    big_df.columns = [\n        \"序号\",\n        \"截止日期\",\n        \"基金家数\",\n        \"机构持有比列\",\n        \"个人持有比列\",\n        \"内部持有比列\",\n        \"总份额\",\n    ]\n    big_df[\"截止日期\"] = pd.to_datetime(big_df[\"截止日期\"], errors=\"coerce\").dt.date\n    big_df[\"基金家数\"] = pd.to_numeric(big_df[\"基金家数\"], errors=\"coerce\")\n    big_df[\"机构持有比列\"] = pd.to_numeric(big_df[\"机构持有比列\"], errors=\"coerce\")\n    big_df[\"个人持有比列\"] = pd.to_numeric(big_df[\"个人持有比列\"], errors=\"coerce\")\n    big_df[\"内部持有比列\"] = pd.to_numeric(big_df[\"内部持有比列\"], errors=\"coerce\")\n    big_df[\"总份额\"] = pd.to_numeric(\n        big_df[\"总份额\"].str.replace(\",\", \"\"), errors=\"coerce\"\n    )\n    return big_df\n\n\nif __name__ == \"__main__\":\n    fund_scale_change_em_df = fund_scale_change_em()\n    print(fund_scale_change_em_df)\n\n    fund_hold_structure_em_df = fund_hold_structure_em()\n    print(fund_hold_structure_em_df)\n"
  },
  {
    "path": "akshare/fund/fund_scale_sina.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/9/1 16:20\nDesc: 新浪财经-基金规模\nhttps://vip.stock.finance.sina.com.cn/fund_center/index.html#jjgmall\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils import demjson\n\n\ndef fund_scale_open_sina(symbol: str = \"股票型基金\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-基金数据中心-基金规模-开放式基金\n    https://vip.stock.finance.sina.com.cn/fund_center/index.html#jjhqetf\n    :param symbol: choice of {\"股票型基金\", \"混合型基金\", \"债券型基金\", \"货币型基金\", \"QDII基金\"}\n    :type symbol: str\n    :return: 基金规模\n    :rtype: pandas.DataFrame\n    \"\"\"\n    fund_map = {\n        \"股票型基金\": \"2\",\n        \"混合型基金\": \"1\",\n        \"债券型基金\": \"3\",\n        \"货币型基金\": \"5\",\n        \"QDII基金\": \"6\",\n    }\n    url = (\n        \"http://vip.stock.finance.sina.com.cn/fund_center/data/jsonp.php/IO.XSRV2.\"\n        \"CallbackList['J2cW8KXheoWKdSHc']/NetValueReturn_Service.NetValueReturnOpen\"\n    )\n    params = {\n        \"page\": \"1\",\n        \"num\": \"10000\",\n        \"sort\": \"zmjgm\",\n        \"asc\": \"0\",\n        \"ccode\": \"\",\n        \"type2\": fund_map[symbol],\n        \"type3\": \"\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"({\") + 1 : -2])\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = range(1, len(temp_df) + 1)\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"symbol\": \"基金代码\",\n            \"sname\": \"基金简称\",\n            \"per_nav\": \"-\",\n            \"total_nav\": \"-\",\n            \"three_month\": \"-\",\n            \"six_month\": \"-\",\n            \"one_year\": \"-\",\n            \"form_year\": \"-\",\n            \"form_start\": \"-\",\n            \"name\": \"-\",\n            \"zmjgm\": \"总募集规模\",\n            \"clrq\": \"成立日期\",\n            \"jjjl\": \"基金经理\",\n            \"dwjz\": \"单位净值\",\n            \"ljjz\": \"-\",\n            \"jzrq\": \"更新日期\",\n            \"zjzfe\": \"最近总份额\",\n            \"jjglr_code\": \"-\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"基金代码\",\n            \"基金简称\",\n            \"单位净值\",\n            \"总募集规模\",\n            \"最近总份额\",\n            \"成立日期\",\n            \"基金经理\",\n            \"更新日期\",\n        ]\n    ]\n    temp_df[\"成立日期\"] = pd.to_datetime(temp_df[\"成立日期\"], errors=\"coerce\").dt.date\n    temp_df[\"更新日期\"] = pd.to_datetime(temp_df[\"更新日期\"], errors=\"coerce\").dt.date\n    temp_df[\"单位净值\"] = pd.to_numeric(temp_df[\"单位净值\"], errors=\"coerce\")\n    temp_df[\"总募集规模\"] = pd.to_numeric(temp_df[\"总募集规模\"], errors=\"coerce\")\n    temp_df[\"最近总份额\"] = pd.to_numeric(temp_df[\"最近总份额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_scale_close_sina() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-基金数据中心-基金规模-封闭式基金\n    https://vip.stock.finance.sina.com.cn/fund_center/index.html#jjhqetf\n    :return: 基金规模\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        \"http://vip.stock.finance.sina.com.cn/fund_center/data/jsonp.php/IO.XSRV2.\"\n        \"CallbackList['_bjN6KvXOkfPy2Bu']/NetValueReturn_Service.NetValueReturnClose\"\n    )\n    params = {\n        \"page\": \"1\",\n        \"num\": \"1000\",\n        \"sort\": \"zmjgm\",\n        \"asc\": \"0\",\n        \"ccode\": \"\",\n        \"type2\": \"\",\n        \"type3\": \"\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"({\") + 1 : -2])\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = range(1, len(temp_df) + 1)\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"symbol\": \"基金代码\",\n            \"sname\": \"基金简称\",\n            \"per_nav\": \"-\",\n            \"total_nav\": \"-\",\n            \"three_month\": \"-\",\n            \"six_month\": \"-\",\n            \"one_year\": \"-\",\n            \"form_year\": \"-\",\n            \"form_start\": \"-\",\n            \"name\": \"-\",\n            \"zmjgm\": \"总募集规模\",\n            \"clrq\": \"成立日期\",\n            \"jjjl\": \"基金经理\",\n            \"dwjz\": \"单位净值\",\n            \"ljjz\": \"-\",\n            \"jzrq\": \"更新日期\",\n            \"zjzfe\": \"最近总份额\",\n            \"jjglr_code\": \"-\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"基金代码\",\n            \"基金简称\",\n            \"单位净值\",\n            \"总募集规模\",\n            \"最近总份额\",\n            \"成立日期\",\n            \"基金经理\",\n            \"更新日期\",\n        ]\n    ]\n    temp_df[\"成立日期\"] = pd.to_datetime(temp_df[\"成立日期\"], errors=\"coerce\").dt.date\n    temp_df[\"更新日期\"] = pd.to_datetime(temp_df[\"更新日期\"], errors=\"coerce\").dt.date\n    temp_df[\"单位净值\"] = pd.to_numeric(temp_df[\"单位净值\"], errors=\"coerce\")\n    temp_df[\"总募集规模\"] = pd.to_numeric(temp_df[\"总募集规模\"], errors=\"coerce\")\n    temp_df[\"最近总份额\"] = pd.to_numeric(temp_df[\"最近总份额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_scale_structured_sina() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-基金数据中心-基金规模-分级子基金\n    https://vip.stock.finance.sina.com.cn/fund_center/index.html#jjgmfjall\n    :return: 基金规模\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        \"http://vip.stock.finance.sina.com.cn/fund_center/data/jsonp.php/IO.XSRV2.\"\n        \"CallbackList['cRrwseM7NWX68rDa']/NetValueReturn_Service.NetValueReturnCX\"\n    )\n    params = {\n        \"page\": \"1\",\n        \"num\": \"1000\",\n        \"sort\": \"zmjgm\",\n        \"asc\": \"0\",\n        \"ccode\": \"\",\n        \"type2\": \"\",\n        \"type3\": \"\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"({\") + 1 : -2])\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = range(1, len(temp_df) + 1)\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"symbol\": \"基金代码\",\n            \"sname\": \"基金简称\",\n            \"per_nav\": \"-\",\n            \"total_nav\": \"-\",\n            \"three_month\": \"-\",\n            \"six_month\": \"-\",\n            \"one_year\": \"-\",\n            \"form_year\": \"-\",\n            \"form_start\": \"-\",\n            \"name\": \"-\",\n            \"zmjgm\": \"总募集规模\",\n            \"clrq\": \"成立日期\",\n            \"jjjl\": \"基金经理\",\n            \"dwjz\": \"单位净值\",\n            \"ljjz\": \"-\",\n            \"jzrq\": \"更新日期\",\n            \"zjzfe\": \"最近总份额\",\n            \"jjglr_code\": \"-\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"基金代码\",\n            \"基金简称\",\n            \"单位净值\",\n            \"总募集规模\",\n            \"最近总份额\",\n            \"成立日期\",\n            \"基金经理\",\n            \"更新日期\",\n        ]\n    ]\n    temp_df[\"成立日期\"] = pd.to_datetime(temp_df[\"成立日期\"], errors=\"coerce\").dt.date\n    temp_df[\"更新日期\"] = pd.to_datetime(temp_df[\"更新日期\"], errors=\"coerce\").dt.date\n    temp_df[\"单位净值\"] = pd.to_numeric(temp_df[\"单位净值\"], errors=\"coerce\")\n    temp_df[\"总募集规模\"] = pd.to_numeric(temp_df[\"总募集规模\"], errors=\"coerce\")\n    temp_df[\"最近总份额\"] = pd.to_numeric(temp_df[\"最近总份额\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fund_scale_open_sina_df = fund_scale_open_sina(symbol=\"股票型基金\")\n    print(fund_scale_open_sina_df)\n\n    fund_scale_close_sina_df = fund_scale_close_sina()\n    print(fund_scale_close_sina_df)\n\n    fund_scale_structured_sina_df = fund_scale_structured_sina()\n    print(fund_scale_structured_sina_df)\n\n    fund_scale_open_sina_df = fund_scale_open_sina(symbol=\"股票型基金\")\n    print(fund_scale_open_sina_df)\n"
  },
  {
    "path": "akshare/fund/fund_xq.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/10/27 22:30\nDesc: 雪球基金-基金详情\nhttps://danjuanfunds.com/funding/003545\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef fund_individual_basic_info_xq(\n    symbol: str = \"000001\", timeout: float = None\n) -> pd.DataFrame:\n    \"\"\"\n    雪球基金-基金详情\n    https://danjuanfunds.com/djapi/fund/675091\n    :param symbol: 基金代码\n    :type symbol: str\n    :param timeout: choice of None or a positive float number\n    :type timeout: float\n    :return: 基金信息\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://danjuanfunds.com/djapi/fund/{symbol}\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/80.0.3987.149 Safari/537.36\"\n    }\n    r = requests.get(url, headers=headers, timeout=timeout)\n    json_data = r.json()[\"data\"]\n    temp_df = pd.json_normalize(json_data)\n    temp_df.rename(\n        columns={\n            \"fd_code\": \"基金代码\",\n            \"fd_name\": \"基金名称\",\n            \"fd_full_name\": \"基金全称\",\n            \"found_date\": \"成立时间\",\n            \"totshare\": \"最新规模\",\n            \"keeper_name\": \"基金公司\",\n            \"manager_name\": \"基金经理\",\n            \"trup_name\": \"托管银行\",\n            \"type_desc\": \"基金类型\",\n            \"rating_source\": \"评级机构\",\n            \"rating_desc\": \"基金评级\",\n            \"invest_orientation\": \"投资策略\",\n            \"invest_target\": \"投资目标\",\n            \"performance_bench_mark\": \"业绩比较基准\",\n        },\n        inplace=True,\n    )\n    if \"评级机构\" not in temp_df.columns:\n        temp_df[\"评级机构\"] = pd.NA\n    temp_df = temp_df[\n        [\n            \"基金代码\",\n            \"基金名称\",\n            \"基金全称\",\n            \"成立时间\",\n            \"最新规模\",\n            \"基金公司\",\n            \"基金经理\",\n            \"托管银行\",\n            \"基金类型\",\n            \"评级机构\",\n            \"基金评级\",\n            \"投资策略\",\n            \"投资目标\",\n            \"业绩比较基准\",\n        ]\n    ]\n    temp_df = temp_df.T.reset_index()\n    temp_df.columns = [\"item\", \"value\"]\n    return temp_df\n\n\ndef fund_individual_achievement_xq(\n    symbol: str = \"000001\", timeout: float = None\n) -> pd.DataFrame:\n    \"\"\"\n    雪球基金-基金业绩\n    https://danjuanfunds.com/djapi/fundx/base/fund/achievement/675091\n    :param symbol: 基金代码\n    :type symbol: str\n    :param timeout: choice of None or a positive float number\n    :type timeout: float\n    :return: 基金业绩\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://danjuanfunds.com/djapi/fundx/base/fund/achievement/{symbol}\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/80.0.3987.149 Safari/537.36\"\n    }\n    r = requests.get(url, headers=headers, timeout=timeout)\n    json_data = r.json()[\"data\"]\n    combined_df = None\n    type_dict = {\n        \"annual_performance_list\": \"年度业绩\",\n        \"stage_performance_list\": \"阶段业绩\",\n    }\n    for k, v in type_dict.items():\n        temp_df = pd.DataFrame.from_dict(json_data[k], orient=\"columns\")\n        temp_df[\"type\"] = v\n        temp_df = temp_df[\n            [\n                \"type\",\n                \"period_time\",\n                \"self_nav\",\n                \"self_max_draw_down\",\n                \"self_nav_rank\",\n            ]\n        ]\n        temp_df.columns = [\n            \"业绩类型\",\n            \"周期\",\n            \"本产品区间收益\",\n            \"本产品最大回撒\",\n            \"周期收益同类排名\",\n        ]\n        combined_df = pd.concat([combined_df, temp_df], ignore_index=True)\n    combined_df = combined_df.map(\n        lambda x: x if \"%\" not in str(x) else x.replace(\"%\", \"\")\n    )\n    combined_df[[\"本产品区间收益\", \"本产品最大回撒\"]] = combined_df[\n        [\"本产品区间收益\", \"本产品最大回撒\"]\n    ].astype(float)\n    return combined_df\n\n\ndef fund_individual_analysis_xq(\n    symbol: str = \"000001\", timeout: float = None\n) -> pd.DataFrame:\n    \"\"\"\n    雪球基金-基金数据分析\n    https://danjuanfunds.com/djapi/fund/base/quote/data/index/analysis/675091\n    :param symbol: 基金代码\n    :type symbol: str\n    :param timeout: choice of None or a positive float number\n    :type timeout: float\n    :return: 基金数据分析\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://danjuanfunds.com/djapi/fund/base/quote/data/index/analysis/{symbol}\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/80.0.3987.149 Safari/537.36\"\n    }\n    r = requests.get(url, headers=headers, timeout=timeout)\n    json_data = r.json()[\"data\"][\"index_data_list\"]\n    temp_df = pd.json_normalize(json_data)\n    temp_df = temp_df[\n        [\n            \"index_time_period\",\n            \"investment_cost_performance\",\n            \"risk_control\",\n            \"self_index.volatility_rank\",\n            \"self_index.sharpe_rank\",\n            \"self_index.max_draw_down\",\n        ]\n    ]\n    temp_df.columns = [\n        \"周期\",\n        \"较同类风险收益比\",\n        \"较同类抗风险波动\",\n        \"年化波动率\",\n        \"年化夏普比率\",\n        \"最大回撤\",\n    ]\n    temp_df = temp_df.map(lambda x: x if \"%\" not in str(x) else x.replace(\"%\", \"\"))\n    temp_df[[\"年化波动率\", \"最大回撤\"]] *= 100\n    temp_df[\"较同类风险收益比\"] = pd.to_numeric(\n        temp_df[\"较同类风险收益比\"], errors=\"coerce\"\n    )\n    temp_df[\"较同类抗风险波动\"] = pd.to_numeric(\n        temp_df[\"较同类抗风险波动\"], errors=\"coerce\"\n    )\n    temp_df[\"年化波动率\"] = pd.to_numeric(temp_df[\"年化波动率\"], errors=\"coerce\")\n    temp_df[\"年化夏普比率\"] = pd.to_numeric(temp_df[\"年化夏普比率\"], errors=\"coerce\")\n    temp_df[\"最大回撤\"] = pd.to_numeric(temp_df[\"最大回撤\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_individual_profit_probability_xq(\n    symbol: str = \"000001\", timeout: float = None\n) -> pd.DataFrame:\n    \"\"\"\n    雪球基金-盈利概率-历史任意时点买入，持有满 X 年，盈利概率 Y%\n    https://danjuanfunds.com/djapi/fundx/base/fund/profit/ratio/675091\n    :param symbol: 基金代码\n    :type symbol: str\n    :param timeout: choice of None or a positive float number\n    :type timeout: float\n    :return: 盈利概率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://danjuanfunds.com/djapi/fundx/base/fund/profit/ratio/{symbol}\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/80.0.3987.149 Safari/537.36\"\n    }\n    r = requests.get(url, headers=headers, timeout=timeout)\n    json_data = r.json()[\"data\"][\"data_list\"]\n    temp_df = pd.DataFrame.from_dict(json_data, orient=\"columns\")\n    temp_df = temp_df[\n        [\n            \"holding_time\",\n            \"profit_ratio\",\n            \"average_income\",\n        ]\n    ]\n    temp_df.columns = [\n        \"持有时长\",\n        \"盈利概率\",\n        \"平均收益\",\n    ]\n    temp_df = temp_df.map(lambda x: x if \"%\" not in str(x) else x.replace(\"%\", \"\"))\n    temp_df[\"盈利概率\"] = pd.to_numeric(temp_df[\"盈利概率\"], errors=\"coerce\")\n    temp_df[\"平均收益\"] = pd.to_numeric(temp_df[\"平均收益\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fund_individual_detail_info_xq(\n    symbol: str = \"000001\", timeout: float = None\n) -> pd.DataFrame:\n    \"\"\"\n    雪球基金-交易规则\n    https://danjuanfunds.com/djapi/fund/detail/675091\n    :param symbol: 基金代码\n    :type symbol: str\n    :param timeout: choice of None or a positive float number\n    :type timeout: float\n    :return: 交易规则\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://danjuanfunds.com/djapi/fund/detail/{symbol}\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/80.0.3987.149 Safari/537.36\"\n    }\n    r = requests.get(url, headers=headers, timeout=timeout)\n    json_data = r.json()[\"data\"]\n    combined_df = None\n    rate_type_dict = {\n        \"declare_rate_table\": \"买入规则\",\n        \"withdraw_rate_table\": \"卖出规则\",\n        \"other_rate_table\": \"其他费用\",\n    }\n    for k, v in rate_type_dict.items():\n        temp_df = pd.DataFrame.from_dict(json_data[\"fund_rates\"][k], orient=\"columns\")\n        temp_df[\"rate_type\"] = v\n        temp_df = temp_df[\n            [\n                \"rate_type\",\n                \"name\",\n                \"value\",\n            ]\n        ]\n        temp_df.columns = [\n            \"费用类型\",\n            \"条件或名称\",\n            \"费用\",\n        ]\n        combined_df = pd.concat(objs=[combined_df, temp_df], ignore_index=True)\n        combined_df[\"费用\"] = pd.to_numeric(combined_df[\"费用\"], errors=\"coerce\")\n    return combined_df\n\n\ndef fund_individual_detail_hold_xq(\n    symbol: str = \"002804\", date: str = \"20231231\", timeout: float = None\n) -> pd.DataFrame:\n    \"\"\"\n    雪球基金-持仓\n    https://danjuanfunds.com/rn/fund-detail/archive?id=103&code=002804\n    :param symbol: 基金代码\n    :type symbol: str\n    :param date: 财报日期\n    :type date: str\n    :param timeout: choice of None or a positive float number\n    :type timeout: float\n    :return: 雪球基金-持仓\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://danjuanfunds.com/djapi/fundx/base/fund/record/asset/percent\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/80.0.3987.149 Safari/537.36\"\n    }\n    params = {\n        \"fund_code\": f\"{symbol}\",\n        \"report_date\": f\"{'-'.join([date[:4], date[4:6], date[6:]])}\",\n    }\n    r = requests.get(url, headers=headers, params=params, timeout=timeout)\n    data_json = r.json()\n    temp_df = pd.DataFrame.from_dict(data_json[\"data\"][\"chart_list\"], orient=\"columns\")\n    temp_df = temp_df[\n        [\n            \"type_desc\",\n            \"percent\",\n        ]\n    ]\n    temp_df.columns = [\n        \"资产类型\",\n        \"仓位占比\",\n    ]\n    temp_df[\"仓位占比\"] = pd.to_numeric(temp_df[\"仓位占比\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fund_individual_basic_info_xq_df = fund_individual_basic_info_xq(symbol=\"000005\")\n    print(fund_individual_basic_info_xq_df)\n\n    fund_individual_achievement_xq_df = fund_individual_achievement_xq(symbol=\"000001\")\n    print(fund_individual_achievement_xq_df)\n\n    fund_individual_analysis_xq_df = fund_individual_analysis_xq(symbol=\"000001\")\n    print(fund_individual_analysis_xq_df)\n\n    fund_individual_profit_probability_xq_df = fund_individual_profit_probability_xq(\n        symbol=\"000001\"\n    )\n    print(fund_individual_profit_probability_xq_df)\n\n    fund_individual_detail_info_xq_df = fund_individual_detail_info_xq(symbol=\"000001\")\n    print(fund_individual_detail_info_xq_df)\n\n    fund_individual_detail_hold_xq_df = fund_individual_detail_hold_xq(\n        symbol=\"002804\", date=\"20231231\"\n    )\n    print(fund_individual_detail_hold_xq_df)\n"
  },
  {
    "path": "akshare/futures/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/9/30 13:58\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/futures/cons.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/7/21 15:00\nDesc: 期货配置文件\n\"\"\"\n\nimport datetime\nimport json\nimport os\nimport pickle\nimport re\n\n\nfutures_inventory_em_symbol_dict = {\n    \"a\": \"A\",  # 豆一\n    \"ag\": \"AG\",  # 沪银\n    \"al\": \"AL\",  # 沪铝\n    \"ao\": \"AO\",  # 氧化铝\n    \"AP\": \"AP\",  # 苹果\n    \"au\": \"AU\",  # 沪金\n    \"b\": \"B\",  # 豆二\n    \"bb\": None,  # 胶合板 (new中没有对应)\n    \"bc\": None,  # 国际铜 (new中没有对应)\n    \"br\": \"BR\",  # BR橡胶\n    \"bu\": \"BU\",  # 沥青\n    \"c\": \"C\",  # 玉米\n    \"CF\": \"CF\",  # 棉花/郑棉\n    \"CJ\": \"CJ\",  # 红枣\n    \"cs\": \"CS\",  # 淀粉/玉米淀粉\n    \"cu\": \"CU\",  # 沪铜\n    \"CY\": \"CY\",  # 棉纱\n    \"eb\": \"EB\",  # 苯乙烯\n    \"ec\": \"ec\",  # 集运欧线/集运指数(欧线)\n    \"eg\": \"EG\",  # 乙二醇\n    \"fb\": None,  # 纤维板 (new中没有对应)\n    \"FG\": \"FG\",  # 玻璃\n    \"PL\": \"PL\",  # 丙烯\n    \"fu\": \"FU\",  # 燃料油/燃油\n    \"hc\": \"HC\",  # 热卷\n    \"i\": \"I\",  # 铁矿石\n    \"IC\": \"IC\",  # 中证500\n    \"IF\": \"IF\",  # 沪深300\n    \"IH\": \"IH\",  # 上证50\n    \"IM\": \"IM\",  # 中证1000\n    \"j\": \"J\",  # 焦炭\n    \"jd\": \"JD\",  # 鸡蛋\n    \"jm\": \"JM\",  # 焦煤\n    \"JR\": None,  # 粳稻 (new中没有对应)\n    \"l\": \"L\",  # 塑料\n    \"lc\": \"lc\",  # 碳酸锂\n    \"lh\": \"LH\",  # 生猪\n    \"LR\": None,  # 晚籼稻 (new中没有对应)\n    \"lu\": \"lu\",  # LU燃油/低硫燃料油\n    \"m\": \"M\",  # 豆粕\n    \"MA\": \"MA\",  # 甲醇\n    \"ni\": \"NI\",  # 沪镍/镍\n    \"nr\": \"nr\",  # 20号胶\n    \"OI\": \"OI\",  # 菜籽油/菜油\n    \"p\": \"P\",  # 棕榈油/棕榈\n    \"pb\": \"PB\",  # 沪铅\n    \"PF\": \"PF\",  # 短纤\n    \"pg\": \"PG\",  # 液化气/液化石油气\n    \"PK\": \"PK\",  # 花生\n    \"PM\": None,  # 普麦 (new中没有对应)\n    \"pp\": \"PP\",  # 聚丙烯\n    \"PX\": \"PX\",  # 对二甲苯\n    \"rb\": \"RB\",  # 螺纹钢\n    \"RI\": None,  # 早籼稻 (new中没有对应)\n    \"RM\": \"RM\",  # 菜籽粕/菜粕\n    \"rr\": None,  # 粳米 (new中没有对应)\n    \"RS\": \"RS\",  # 油菜籽/菜籽\n    \"ru\": \"RU\",  # 橡胶\n    \"SA\": \"SA\",  # 纯碱\n    \"sc\": None,  # 原油 (new中没有对应)\n    \"SF\": \"SF\",  # 硅铁\n    \"SH\": \"SH\",  # 烧碱\n    \"si\": \"si\",  # 工业硅\n    \"SM\": \"SM\",  # 锰硅\n    \"sn\": \"SN\",  # 沪锡/锡\n    \"sp\": \"SP\",  # 纸浆\n    \"SR\": \"SR\",  # 白糖\n    \"ss\": \"SS\",  # 不锈钢\n    \"T\": \"T\",  # 十年国债/10年期国债\n    \"TA\": \"TA\",  # PTA\n    \"TF\": \"TF\",  # 五年国债/5年期国债\n    \"TL\": \"TL\",  # 三十年国债/30年期国债期货\n    \"TS\": \"TS\",  # 二年国债/2年期国债\n    \"UR\": \"UR\",  # 尿素\n    \"v\": \"V\",  # PVC\n    \"WH\": None,  # 强麦 (new中没有对应)\n    \"wr\": None,  # 线材 (new中没有对应)\n    \"y\": \"Y\",  # 豆油\n    \"ZC\": None,  # 动力煤 (new中没有对应)\n    \"zn\": \"ZN\",  # 沪锌\n}\n\nhq_sina_spot_headers = {\n    \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,\"\n    \"image/apng,*/*;q=0.8,application/signed-exchange;v=b3\",\n    \"Accept-Encoding\": \"gzip, deflate\",\n    \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    \"Cache-Control\": \"no-cache\",\n    \"Connection\": \"keep-alive\",\n    \"Host\": \"finance.sina.com.cn\",\n    \"Pragma\": \"no-cache\",\n    \"Referer\": \"https://finance.sina.com.cn/futuremarket/\",\n    \"Upgrade-Insecure-Requests\": \"1\",\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n    \"(KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36\",\n}\n\n# zh_sina_spot\nzh_subscribe_exchange_symbol_url = (\n    \"http://vip.stock.finance.sina.com.cn/quotes_service/view/js/qihuohangqing.js\"\n)\nzh_match_main_contract_url = (\n    \"http://vip.stock.finance.sina.com.cn/quotes_service/\"\n    \"api/json_v2.php/Market_Center.getHQFuturesData\"\n)\nzh_match_main_contract_payload = {\n    \"page\": \"1\",\n    \"num\": \"5\",\n    \"sort\": \"position\",\n    \"asc\": \"0\",\n    \"node\": \"001\",\n    \"base\": \"futures\",\n}\nzh_sina_spot_headers = {\n    \"Accept\": \"*/*\",\n    \"Accept-Encoding\": \"gzip, deflate, br\",\n    \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    \"Cache-Control\": \"no-cache\",\n    \"Connection\": \"keep-alive\",\n    \"Host\": \"hq.sinajs.cn\",\n    \"Pragma\": \"no-cache\",\n    \"Referer\": \"https://finance.sina.com.cn/futuremarket/\",\n    \"Sec-Fetch-Mode\": \"no-cors\",\n    \"Sec-Fetch-Site\": \"cross-site\",\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n    \"Chrome/78.0.3904.97 Safari/537.36\",\n}\n\n# 99 期货\ninventory_temp_headers = {\n    \"Accept\": \"image/webp,image/apng,image/*,*/*;q=0.8\",\n    \"Accept-Encoding\": \"gzip, deflate\",\n    \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    \"Connection\": \"keep-alive\",\n    \"Content-Type\": \"application/x-www-form-urlencoded\",\n    \"Cookie\": \"UM_distinctid=16c378978de5cc-02cfeac5f7869b-c343162-1fa400-16c378978df8d7; \"\n    \"__utmz=181566328.1570520149.3.2.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; \"\n    \"ASP.NET_SessionId=wj5gxuzl3fvvr25503tquq55; __utmc=181566328; _fxaid=1D9A634AB9F5D026585\"\n    \"6F7E85E7BC196%1D%2BOOl1inxPE7181fmKs5HCs%2BdLO%2Fq%2FbSvf46UVjo%2BE7w%3D%1DPYphpUa9OlzW\"\n    \"UzatrOQTXLPOVillbwMhTIJas%2ByfkyVL2Hd5XA1GOSslksqDkMTccXvQ2duLNsc0CHT4789JrYNbakJrpzrxL\"\n    \"nwtBC5GCTssKHGEpor6EwAZfWJgBUlCs4JYFcGUnh3jIO69A4LsOlRMOGf4c9cd%2FbohSjTx3VA%3D; __utma\"\n    \"=181566328.1348268634.1564299852.1571066568.1571068391.7; tgw_l7_route=eb1311426274fc07\"\n    \"631b2135a6431f7d; __utmt=1; __utmb=181566328.7.10.1571068391\",\n    \"Host\": \"service.99qh.com\",\n    \"Referer\": \"http://service.99qh.com/Storage/Storage.aspx?page=99qh\",\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n    \"(KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36\",\n}\n\n# 奇货可查\nQHKC_INDEX_URL = \"https://www.qhkch.com/ajax/index_show.php\"\nQHKC_INDEX_TREND_URL = \"https://qhkch.com/ajax/indexes_trend.php\"\nQHKC_INDEX_PROFIT_LOSS_URL = \"https://qhkch.com/ajax/indexes_profit_loss.php\"\nQHKC_FUND_BS_URL = \"https://qhkch.com/ajax/fund_bs_pie.php\"\nQHKC_FUND_POSITION_URL = \"https://qhkch.com/ajax/fund_position_pie.php\"\nQHKC_FUND_POSITION_CHANGE_URL = \"https://qhkch.com/ajax/fund_position_chge_pie.php\"\nQHKC_FUND_DEAL_URL = \"https://qhkch.com/ajax/fund_deal_pie.php\"\nQHKC_FUND_BIG_CHANGE_URL = \"https://qhkch.com/ajax/fund_big_chge.php\"\nQHKC_TOOL_FOREIGN_URL = \"https://qhkch.com/ajax/toolbox_foreign.php\"\nQHKC_TOOL_GDP_URL = \"https://qhkch.com/dist/views/toolbox/gdp.html?v=1.10.7.1\"\n\n# 键值对: 键为交易所代码, 值为具体合约代码\nmarket_exchange_symbols = {\n    \"cffex\": [\"IF\", \"IC\", \"IM\", \"IH\", \"T\", \"TF\", \"TS\", \"TL\"],\n    \"dce\": [\n        \"C\",\n        \"CS\",\n        \"A\",\n        \"B\",\n        \"M\",\n        \"Y\",\n        \"P\",\n        \"FB\",\n        \"BB\",\n        \"JD\",\n        \"L\",\n        \"V\",\n        \"PP\",\n        \"J\",\n        \"JM\",\n        \"I\",\n        \"EG\",\n        \"RR\",\n        \"EB\",  # 20191009\n        \"PG\",\n        \"LH\",  # 20210108 生猪期货\n        \"LG\",  # 20241118 原木期货\n        \"BZ\",  # 20250708 纯苯期货\n    ],\n    \"czce\": [\n        \"WH\",\n        \"PM\",\n        \"CF\",\n        \"SR\",\n        \"TA\",\n        \"OI\",\n        \"RI\",\n        \"MA\",\n        \"ME\",\n        \"FG\",\n        \"RS\",\n        \"RM\",\n        \"ZC\",\n        \"JR\",\n        \"LR\",\n        \"SF\",\n        \"SM\",\n        \"WT\",\n        \"TC\",\n        \"GN\",\n        \"RO\",\n        \"ER\",\n        \"SRX\",\n        \"SRY\",\n        \"WSX\",\n        \"WSY\",\n        \"CY\",\n        \"AP\",\n        \"UR\",\n        \"CJ\",  # 红枣期货\n        \"SA\",  # 纯碱期货\n        \"PK\",  # 20210201 花生期货\n        \"PF\",  # 短纤\n        \"PX\",  # 对二甲苯\n        \"SH\",  # 烧碱\n        \"PR\",  # 瓶片\n        \"PL\",  # 丙烯\n    ],\n    \"shfe\": [\n        \"CU\",\n        \"AL\",\n        \"ZN\",\n        \"PB\",\n        \"NI\",\n        \"SN\",\n        \"AU\",\n        \"AG\",\n        \"RB\",\n        \"WR\",\n        \"HC\",\n        \"FU\",\n        \"BU\",\n        \"RU\",\n        \"SC\",\n        \"NR\",\n        \"SP\",\n        \"SS\",\n        \"LU\",\n        \"BC\",\n        \"AO\",\n        \"BR\",\n        \"EC\",  # 集运指数\n        \"AD\",  # 铸造铝合金期货\n        \"OP\",  # 胶版印刷纸期货\n    ],\n    \"gfex\": [\"SI\", \"LC\", \"PS\"],\n}\n\ncontract_symbols = []\n[contract_symbols.extend(i) for i in market_exchange_symbols.values()]\n\nheaders = {\n    \"Host\": \"www.czce.com.cn\",\n    \"Connection\": \"keep-alive\",\n    \"Cache-Control\": \"max-age=0\",\n    \"Accept\": \"text/html, */*; q=0.01\",\n    \"X-Requested-With\": \"XMLHttpRequest\",\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n    \"Chrome/56.0.2924.87 Safari/537.36\",\n    \"DNT\": \"1\",\n    \"Referer\": \"http://www.super-ping.com/?ping=www.google.com&locale=sc\",\n    \"Accept-Encoding\": \"gzip, deflate, sdch\",\n    \"Accept-Language\": \"zh-CN,zh;q=0.8,ja;q=0.6\",\n}\n\nshfe_headers = {\"User-Agent\": \"Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)\"}\n\ndce_headers = {\n    \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,\"\n    \"*/*;q=0.8,application/signed-exchange;v=b3\",\n    \"Accept-Encoding\": \"gzip, deflate\",\n    \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    \"Cache-Control\": \"max-age=0\",\n    \"Content-Length\": \"71\",\n    \"Content-Type\": \"application/x-www-form-urlencoded\",\n    \"Host\": \"www.dce.com.cn\",\n    \"Origin\": \"http://www.dce.com.cn\",\n    \"Proxy-Connection\": \"keep-alive\",\n    \"Referer\": \"http://www.dce.com.cn/publicweb/quotesdata/weekQuotesCh.html\",\n    \"Upgrade-Insecure-Requests\": \"1\",\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n    \"Chrome/77.0.3865.90 Safari/537.36\",\n}\n\nSYS_SPOT_PRICE_URL = \"http://www.100ppi.com/sf/day-{}.html\"\nSYS_SPOT_PRICE_LATEST_URL = \"http://www.100ppi.com/sf/\"\n\nSHFE_VOL_RANK_URL = \"https://tsite.shfe.com.cn/data/dailydata/kx/pm%s.dat\"\nSHFE_VOL_RANK_URL_20250701 = (\n    \"https://www.shfe.com.cn/data/tradedata/future/dailydata/pm%s.dat\"\n)\nCFFEX_VOL_RANK_URL = \"http://www.cffex.com.cn/sj/ccpm/%s/%s/%s_1.csv\"\nDCE_VOL_RANK_URL_1 = (\n    \"http://portal.dce.com.cn/publicweb/quotesdata/exportMemberDealPosiQuotesData.html?\"\n    \"memberDealPosiQuotes.variety=%s&memberDealPosiQuotes.trade_type=0&contract.cont\"\n    \"ract_id=%s&contract.variety_id=%s&year=%s&month=%s&day=%s&exportFlag=txt\"\n)\nDCE_VOL_RANK_URL_2 = (\n    \"http://portal.dce.com.cn/publicweb/quotesdata/memberDealPosiQuotes.html?memberDeal\"\n    \"PosiQuotes.variety=%s&memberDealPosiQuotes.trade_type=0&contract.contract_id=\"\n    \"all&contract.variety_id=%s&year=%s&month=%s&day=%s\"\n)\nCZCE_VOL_RANK_URL_1 = \"http://www.czce.com.cn/cn/exchange/jyxx/pm/pm%s.html\"\nCZCE_VOL_RANK_URL_2 = \"http://www.czce.com.cn/cn/exchange/%s/datatradeholding/%s.htm\"\nCZCE_VOL_RANK_URL_3 = (\n    \"http://www.czce.com.cn/cn/DFSStaticFiles/Future/%s/%s/FutureDataHolding.htm\"\n)\n\nDCE_RECEIPT_URL = \"http://portal.dce.com.cn/publicweb/quotesdata/wbillWeeklyQuotes.html\"\n\nSHFE_RECEIPT_URL_1 = \"http://tsite.shfe.com.cn/data/dailydata/%sdailystock.html\"\nSHFE_RECEIPT_URL_2 = \"http://tsite.shfe.com.cn/data/dailydata/%sdailystock.dat\"\nSHFE_RECEIPT_URL_20250701 = (\n    \"https://www.shfe.com.cn/data/tradedata/future/dailydata/%sdailystock.dat\"\n)\nCZCE_RECEIPT_URL_1 = \"http://www.czce.com.cn/cn/exchange/jyxx/sheet/sheet%s.html\"\nCZCE_RECEIPT_URL_2 = \"http://www.czce.com.cn/cn/exchange/%s/datawhsheet/%s.htm\"\nCZCE_RECEIPT_URL_3 = (\n    \"http://www.czce.com.cn/cn/DFSStaticFiles/Future/%s/%s/FutureDataWhsheet.htm\"\n)\n\nCFFEX_DAILY_URL = \"http://www.cffex.com.cn/fzjy/mrhq/{}/{}/{}_1.csv\"\nSHFE_DAILY_URL = \"http://tsite.shfe.com.cn/data/dailydata/kx/kx%s.dat\"\nSHFE_DAILY_URL_20250630 = (\n    \"https://www.shfe.com.cn/data/tradedata/future/dailydata/kx%s.dat\"\n)\nSHFE_V_WAP_URL = \"http://tsite.shfe.com.cn/data/dailydata/ck/%sdailyTimePrice.dat\"\nDCE_DAILY_URL = \"http://www.dce.com.cn//publicweb/quotesdata/dayQuotesCh.html\"\nCZCE_DAILY_URL_1 = \"http://www.czce.com.cn/cn/exchange/jyxx/hq/hq%s.html\"\nCZCE_DAILY_URL_2 = \"http://www.czce.com.cn/cn/exchange/%s/datadaily/%s.txt\"\nCZCE_DAILY_URL_3 = (\n    \"http://www.czce.com.cn/cn/DFSStaticFiles/Future/%s/%s/FutureDataDaily.txt\"\n)\n\nDATE_PATTERN = re.compile(r\"^([0-9]{4})[-/]?([0-9]{2})[-/]?([0-9]{2})\")\nFUTURES_SYMBOL_PATTERN = re.compile(r\"(^[A-Za-z]{1,2})[0-9]+\")\n\nCFFEX_COLUMNS = [\n    \"open\",\n    \"high\",\n    \"low\",\n    \"volume\",\n    \"turnover\",\n    \"open_interest\",\n    \"close\",\n    \"settle\",\n    \"change1\",\n    \"change2\",\n]\n\nCZCE_COLUMNS = [\n    \"pre_settle\",\n    \"open\",\n    \"high\",\n    \"low\",\n    \"close\",\n    \"settle\",\n    \"change1\",\n    \"change2\",\n    \"volume\",\n    \"open_interest\",\n    \"oi_chg\",\n    \"turnover\",\n    \"final_settle\",\n]\n\nCZCE_COLUMNS_2 = [\n    \"pre_settle\",\n    \"open\",\n    \"high\",\n    \"low\",\n    \"close\",\n    \"settle\",\n    \"change1\",\n    \"volume\",\n    \"open_interest\",\n    \"oi_chg\",\n    \"turnover\",\n    \"final_settle\",\n]\n\nSHFE_COLUMNS = {\n    \"CLOSEPRICE\": \"close\",\n    \"HIGHESTPRICE\": \"high\",\n    \"LOWESTPRICE\": \"low\",\n    \"OPENINTEREST\": \"open_interest\",\n    \"OPENPRICE\": \"open\",\n    \"PRESETTLEMENTPRICE\": \"pre_settle\",\n    \"SETTLEMENTPRICE\": \"settle\",\n    \"VOLUME\": \"volume\",\n}\n\nSHFE_V_WAP_COLUMNS = {\n    \":B1\": \"date\",\n    \"INSTRUMENT_ID\": \"symbol\",\n    \"TIME\": \"time_range\",\n    \"REF_SETTLEMENT_PRICE\": \"v_wap\",\n}\n\nDCE_COLUMNS = [\n    \"open\",\n    \"high\",\n    \"low\",\n    \"close\",\n    \"pre_settle\",\n    \"settle\",\n    \"change1\",\n    \"change2\",\n    \"volume\",\n    \"open_interest\",\n    \"oi_chg\",\n    \"turnover\",\n]\n\nDCE_OPTION_COLUMNS = [\n    \"open\",\n    \"high\",\n    \"low\",\n    \"close\",\n    \"pre_settle\",\n    \"settle\",\n    \"change1\",\n    \"change2\",\n    \"delta\",\n    \"volume\",\n    \"open_interest\",\n    \"oi_chg\",\n    \"turnover\",\n    \"exercise_volume\",\n]\n\nOUTPUT_COLUMNS = [\n    \"symbol\",\n    \"date\",\n    \"open\",\n    \"high\",\n    \"low\",\n    \"close\",\n    \"volume\",\n    \"open_interest\",\n    \"turnover\",\n    \"settle\",\n    \"pre_settle\",\n    \"variety\",\n]\n\nOPTION_OUTPUT_COLUMNS = [\n    \"symbol\",\n    \"date\",\n    \"open\",\n    \"high\",\n    \"low\",\n    \"close\",\n    \"pre_settle\",\n    \"settle\",\n    \"delta\",\n    \"volume\",\n    \"open_interest\",\n    \"oi_chg\",\n    \"turnover\",\n    \"implied_volatility\",\n    \"exercise_volume\",\n    \"variety\",\n]\n\nDCE_MAP = {\n    \"大豆\": \"A\",\n    \"豆一\": \"A\",\n    \"豆二\": \"B\",\n    \"豆粕\": \"M\",\n    \"豆油\": \"Y\",\n    \"棕榈油\": \"P\",\n    \"玉米\": \"C\",\n    \"玉米淀粉\": \"CS\",\n    \"鸡蛋\": \"JD\",\n    \"纤维板\": \"FB\",\n    \"胶合板\": \"BB\",\n    \"聚乙烯\": \"L\",\n    \"聚氯乙烯\": \"V\",\n    \"聚丙烯\": \"PP\",\n    \"焦炭\": \"J\",\n    \"焦煤\": \"JM\",\n    \"铁矿石\": \"I\",\n    \"乙二醇\": \"EG\",\n    \"粳米\": \"RR\",\n    \"苯乙烯\": \"EB\",\n    \"液化石油气\": \"PG\",\n    \"生猪\": \"LH\",\n    \"原木\": \"LG\",\n    \"纯苯\": \"BZ\",\n    \"聚氯乙烯月均价\": \"VF\",\n    \"聚丙烯月均价\": \"PPF\",\n    \"聚乙烯月均价\": \"LF\",\n}\n\n\ndef convert_date(date):\n    \"\"\"\n    transform a date string to datetime.date object\n    :param date, string, e.g. 2016-01-01, 20160101 or 2016/01/01\n    :return: object of datetime.date(such as 2016-01-01) or None\n    \"\"\"\n    if isinstance(date, datetime.date):\n        return date\n    elif isinstance(date, str):\n        match = DATE_PATTERN.match(date)\n        if match:\n            groups = match.groups()\n            if len(groups) == 3:\n                return datetime.date(\n                    year=int(groups[0]),\n                    month=int(groups[1]),\n                    day=int(groups[2]),\n                )\n    return None\n\n\ndef get_json_path(name, module_file):\n    \"\"\"\n    获取 JSON 配置文件的路径(从模块所在目录查找)\n    :param name: 文件名\n    :param module_file: filename\n    :return: str json_file_path\n    \"\"\"\n    module_folder = os.path.abspath(os.path.dirname(os.path.dirname(module_file)))\n    module_json_path = os.path.join(module_folder, \"file_fold\", name)\n    return module_json_path\n\n\ndef get_pk_path(name, module_file):\n    \"\"\"\n    获取 pickle 配置文件的路径(从模块所在目录查找)\n    :param name: 文件名\n    :param module_file: filename\n    :return: str json_file_path\n    \"\"\"\n    module_folder = os.path.abspath(os.path.dirname(os.path.dirname(module_file)))\n    module_json_path = os.path.join(module_folder, \"file_fold\", name)\n    return module_json_path\n\n\ndef get_pk_data(file_name):\n    \"\"\"\n    获取交易日历至 2019 年结束, 这里的交易日历需要按年更新\n    :return: json\n    \"\"\"\n    setting_file_name = file_name\n    setting_file_path = get_pk_path(setting_file_name, __file__)\n    return pickle.load(open(setting_file_path, \"rb\"))\n\n\ndef get_calendar():\n    \"\"\"\n    获取交易日历, 这里的交易日历需要按年更新, 主要是从新浪获取的\n    :return: 交易日历\n    :rtype: json\n    \"\"\"\n    setting_file_name = \"calendar.json\"\n    setting_file_path = get_json_path(setting_file_name, __file__)\n    with open(setting_file_path, \"r\", encoding=\"utf-8\") as f:\n        data_json = json.load(f)\n    return data_json\n\n\ndef last_trading_day(day):\n    \"\"\"\n    获取前一个交易日\n    :param day: \"%Y%m%d\" or  datetime.date()\n    :return last_day: \"%Y%m%d\" or  datetime.date()\n    \"\"\"\n    calendar = get_calendar()\n\n    if isinstance(day, str):\n        if day not in calendar:\n            print(\"Today is not trading day：\" + day)\n            return False\n        pos = calendar.index(day)\n        last_day = calendar[pos - 1]\n        return last_day\n\n    elif isinstance(day, datetime.date):\n        d_str = day.strftime(\"%Y%m%d\")\n        if d_str not in calendar:\n            print(\"Today is not working day：\" + d_str)\n            return False\n        pos = calendar.index(d_str)\n        last_day = calendar[pos - 1]\n        last_day = datetime.datetime.strptime(last_day, \"%Y%m%d\").date()\n        return last_day\n\n\ndef get_latest_data_date(day):\n    \"\"\"\n    获取最新的有数据的交易日\n    :param day: datetime.datetime\n    :return string YYYYMMDD\n    \"\"\"\n    calendar = get_calendar()\n    if day.strftime(\"%Y%m%d\") in calendar:\n        if day.time() > datetime.time(17, 0, 0):\n            return day.strftime(\"%Y%m%d\")\n        else:\n            return last_trading_day(day.strftime(\"%Y%m%d\"))\n    else:\n        while day.strftime(\"%Y%m%d\") not in calendar:\n            day = day - datetime.timedelta(days=1)\n        return day.strftime(\"%Y%m%d\")\n\n\nif __name__ == \"__main__\":\n    d = datetime.datetime(2018, 10, 5, 17, 1, 0)\n    print(get_latest_data_date(d))\n"
  },
  {
    "path": "akshare/futures/cot.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/7/21 15:00\nDesc: 期货-中国-交易所-会员持仓数据接口\n大连商品交易所、上海期货交易所、郑州商品交易所、中国金融期货交易所、广州期货交易所\n采集前 20 会员持仓数据;\n建议下午 16:30 以后采集当天数据, 避免交易所数据更新不稳定;\n郑州商品交易所格式分为三类\n大连商品交易所有具体合约的持仓排名, 通过 futures_dce_position_rank 获取\n20171228\nhttp://www.czce.com.cn/cn/DFSStaticFiles/Future/2020/20200727/FutureDataHolding.txt\n20100825\nhttp://www.czce.com.cn/cn/exchange/2014/datatradeholding/20140515.txt\n\"\"\"\n\nimport datetime\nimport json\nimport re\nimport time\nimport warnings\nimport zipfile\nfrom io import BytesIO\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.futures import cons\nfrom akshare.futures.requests_fun import requests_link\nfrom akshare.futures.symbol_var import symbol_varieties\n\ncalendar = cons.get_calendar()\nrank_columns = [\n    \"vol_party_name\",\n    \"vol\",\n    \"vol_chg\",\n    \"long_party_name\",\n    \"long_open_interest\",\n    \"long_open_interest_chg\",\n    \"short_party_name\",\n    \"short_open_interest\",\n    \"short_open_interest_chg\",\n]\nintColumns = [\n    \"vol\",\n    \"vol_chg\",\n    \"long_open_interest\",\n    \"long_open_interest_chg\",\n    \"short_open_interest\",\n    \"short_open_interest_chg\",\n]\n\n\ndef get_rank_sum_daily(\n    start_day: str = \"20210510\",\n    end_day: str = \"20210510\",\n    vars_list: list = cons.contract_symbols,\n):\n    \"\"\"\n    采集四个期货交易所前 5、前 10、前 15、前 20 会员持仓排名数据\n    注1：由于上期所和中金所只公布每个品种内部的标的排名，没有公布品种的总排名;\n        所以函数输出的品种排名是由品种中的每个标的加总获得，并不是真实的品种排名列表\n    注2：大商所只公布了品种排名，未公布标的排名\n    :param start_day: 开始日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天\n    :type start_day: str\n    :param end_day: 结束数据 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天\n    :type end_day: str\n    :param vars_list: 合约品种如 ['RB'、'AL'] 等列表为空时为所有商品\n    :type vars_list: list\n    :return:  会员持仓排名数据\n    :rtype: pandas.DataFrame\n    symbol                           标的合约                     string\n    var                              商品品种                     string\n    vol_top5                         成交量前5会员成交量总和         int\n    vol_chg_top5                     成交量前5会员成交量变化总和      int\n    long_open_interest_top5          持多单前5会员持多单总和         int\n    long_open_interest_chg_top5      持多单前5会员持多单变化总和      int\n    short_open_interest_top5         持空单前5会员持空单总和         int\n    short_open_interest_chg_top5     持空单前5会员持空单变化总和      int\n    vol_top10                        成交量前10会员成交量总和        int\n    \"\"\"\n    start_day = (\n        cons.convert_date(start_day) if start_day is not None else datetime.date.today()\n    )\n    end_day = (\n        cons.convert_date(end_day)\n        if end_day is not None\n        else cons.convert_date(cons.get_latest_data_date(datetime.datetime.now()))\n    )\n    records = pd.DataFrame()\n    while start_day <= end_day:\n        print(start_day)\n        if start_day.strftime(\"%Y%m%d\") in calendar:\n            data = get_rank_sum(start_day, vars_list)\n            if data is False:\n                print(\n                    f\"{start_day.strftime('%Y-%m-%d')}日交易所数据连接失败，已超过20次，您的地址被网站墙了，请保存好返回数据，稍后从该日期起重试\"\n                )\n                return records.reset_index(drop=True)\n            records = pd.concat(objs=[records, data], ignore_index=True)\n        else:\n            warnings.warn(f\"{start_day.strftime('%Y%m%d')}非交易日\")\n        start_day += datetime.timedelta(days=1)\n\n    return records.reset_index(drop=True)\n\n\ndef get_rank_sum(date: str = \"20210525\", vars_list: list = cons.contract_symbols):\n    \"\"\"\n    采集五个期货交易所前5、前10、前15、前20会员持仓排名数据\n    注1：由于上期所和中金所只公布每个品种内部的标的排名, 没有公布品种的总排名;\n        所以函数输出的品种排名是由品种中的每个标的加总获得, 并不是真实的品种排名列表\n    注2：大商所只公布了品种排名, 未公布标的排名\n    :param date: 日期 format: YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天\n    :type date: date\n    :param vars_list: 合约品种如 ['RB', 'AL'] 等列表为空时为所有商品\n    :type vars_list: list\n    :return: 持仓排名数据\n    :rtype: pandas.DataFrame\n    symbol                           标的合约                     string\n    var                              商品品种                     string\n    vol_top5                         成交量前5会员成交量总和         int\n    vol_chg_top5                     成交量前5会员成交量变化总和      int\n    long_open_interest_top5          持多单前5会员持多单总和         int\n    long_open_interest_chg_top5      持多单前5会员持多单变化总和      int\n    short_open_interest_top5         持空单前5会员持空单总和         int\n    short_open_interest_chg_top5     持空单前5会员持空单变化总和      int\n    vol_top10                        成交量前10会员成交量总和        int\n    \"\"\"\n    date = cons.convert_date(date) if date is not None else datetime.date.today()\n    if date.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(\"%s非交易日\" % date.strftime(\"%Y%m%d\"))\n        return None\n    dce_var = [i for i in vars_list if i in cons.market_exchange_symbols[\"dce\"]]\n    shfe_var = [i for i in vars_list if i in cons.market_exchange_symbols[\"shfe\"]]\n    czce_var = [i for i in vars_list if i in cons.market_exchange_symbols[\"czce\"]]\n    cffex_var = [i for i in vars_list if i in cons.market_exchange_symbols[\"cffex\"]]\n    gfex_var = [i for i in vars_list if i in cons.market_exchange_symbols[\"gfex\"]]\n    big_dict = {}\n    if len(dce_var) > 0:\n        data = futures_dce_position_rank(date, dce_var)\n        if data is False:\n            return False\n        big_dict.update(data)\n    if len(shfe_var) > 0:\n        data = get_shfe_rank_table(date, shfe_var)\n        if data is False:\n            return False\n        big_dict.update(data)\n    if len(czce_var) > 0:\n        data = get_rank_table_czce(date)\n        if data is False:\n            return False\n        big_dict.update(data)\n    if len(cffex_var) > 0:\n        data = get_cffex_rank_table(date, cffex_var)\n        if data is False:\n            return False\n        big_dict.update(data)\n    if len(gfex_var) > 0:\n        data = futures_gfex_position_rank(date, gfex_var)\n        if data is False:\n            return False\n        big_dict.update(data)\n    records = pd.DataFrame()\n\n    for symbol, table in big_dict.items():\n        table = table.map(lambda x: 0 if x == \"\" else x)\n        for symbol_inner in set(table[\"symbol\"]):\n            var = symbol_varieties(symbol_inner)\n            if var in vars_list:\n                if var in czce_var:\n                    for col in [\n                        item\n                        for item in table.columns\n                        if item.find(\"open_interest\") > -1\n                    ] + [\"vol\", \"vol_chg\"]:\n                        table[col] = [\n                            float(value.replace(\",\", \"\")) if value != \"-\" else 0.0\n                            for value in table[col]\n                        ]\n\n                table_cut = table[table[\"symbol\"] == symbol_inner]\n                table_cut[\"rank\"] = table_cut[\"rank\"].astype(\"float\")\n                table_cut_top5 = table_cut[table_cut[\"rank\"] <= 5]\n                table_cut_top10 = table_cut[table_cut[\"rank\"] <= 10]\n                table_cut_top15 = table_cut[table_cut[\"rank\"] <= 15]\n                table_cut_top20 = table_cut[table_cut[\"rank\"] <= 20]\n\n                big_dict = {\n                    \"symbol\": symbol_inner,\n                    \"variety\": var,\n                    \"vol_top5\": table_cut_top5[\"vol\"].sum(),\n                    \"vol_chg_top5\": table_cut_top5[\"vol_chg\"].sum(),\n                    \"long_open_interest_top5\": table_cut_top5[\n                        \"long_open_interest\"\n                    ].sum(),\n                    \"long_open_interest_chg_top5\": table_cut_top5[\n                        \"long_open_interest_chg\"\n                    ].sum(),\n                    \"short_open_interest_top5\": table_cut_top5[\n                        \"short_open_interest\"\n                    ].sum(),\n                    \"short_open_interest_chg_top5\": table_cut_top5[\n                        \"short_open_interest_chg\"\n                    ].sum(),\n                    \"vol_top10\": table_cut_top10[\"vol\"].sum(),\n                    \"vol_chg_top10\": table_cut_top10[\"vol_chg\"].sum(),\n                    \"long_open_interest_top10\": table_cut_top10[\n                        \"long_open_interest\"\n                    ].sum(),\n                    \"long_open_interest_chg_top10\": table_cut_top10[\n                        \"long_open_interest_chg\"\n                    ].sum(),\n                    \"short_open_interest_top10\": table_cut_top10[\n                        \"short_open_interest\"\n                    ].sum(),\n                    \"short_open_interest_chg_top10\": table_cut_top10[\n                        \"short_open_interest_chg\"\n                    ].sum(),\n                    \"vol_top15\": table_cut_top15[\"vol\"].sum(),\n                    \"vol_chg_top15\": table_cut_top15[\"vol_chg\"].sum(),\n                    \"long_open_interest_top15\": table_cut_top15[\n                        \"long_open_interest\"\n                    ].sum(),\n                    \"long_open_interest_chg_top15\": table_cut_top15[\n                        \"long_open_interest_chg\"\n                    ].sum(),\n                    \"short_open_interest_top15\": table_cut_top15[\n                        \"short_open_interest\"\n                    ].sum(),\n                    \"short_open_interest_chg_top15\": table_cut_top15[\n                        \"short_open_interest_chg\"\n                    ].sum(),\n                    \"vol_top20\": table_cut_top20[\"vol\"].sum(),\n                    \"vol_chg_top20\": table_cut_top20[\"vol_chg\"].sum(),\n                    \"long_open_interest_top20\": table_cut_top20[\n                        \"long_open_interest\"\n                    ].sum(),\n                    \"long_open_interest_chg_top20\": table_cut_top20[\n                        \"long_open_interest_chg\"\n                    ].sum(),\n                    \"short_open_interest_top20\": table_cut_top20[\n                        \"short_open_interest\"\n                    ].sum(),\n                    \"short_open_interest_chg_top20\": table_cut_top20[\n                        \"short_open_interest_chg\"\n                    ].sum(),\n                    \"date\": date.strftime(\"%Y%m%d\"),\n                }\n                records = pd.concat(\n                    [records, pd.DataFrame(big_dict, index=[0])], ignore_index=True\n                )\n\n    if len(big_dict.items()) > 0:\n        add_vars = [\n            i\n            for i in cons.market_exchange_symbols[\"dce\"]\n            + cons.market_exchange_symbols[\"shfe\"]\n            + cons.market_exchange_symbols[\"cffex\"]\n            if i in records[\"variety\"].tolist()\n        ]\n        for var in add_vars:\n            records_cut = records[records[\"variety\"] == var]\n            var_record = pd.DataFrame(records_cut.sum()).T\n            var_record[\"date\"] = date.strftime(\"%Y%m%d\")\n            var_record.loc[:, [\"variety\", \"symbol\"]] = var\n            records = pd.concat([records, var_record], ignore_index=True)\n\n    return records.reset_index(drop=True)\n\n\ndef get_shfe_rank_table(\n    date: str = None, vars_list: list = cons.contract_symbols\n) -> dict:\n    \"\"\"\n    上海期货交易所会员成交及持仓排名表\n    https://www.shfe.com.cn/\n    https://tsite.shfe.com.cn/statements/dataview.html?paramid=kx\n    注：该交易所只公布每个品种内部的标的排名，没有公布品种的总排名\n    数据从 20020107 开始，每交易日 16:30 左右更新数据\n    :param date: 交易日\n    :type date: str\n    :param vars_list: 合约品种如 RB、AL等列表; 为空时为所有商品\n    :type vars_list: list\n    :return: 上海期货交易所会员成交及持仓排名表\n    :rtype: dict\n    rank                        排名                        int\n    vol_party_name              成交量排序的当前名次会员        string(中文)\n    vol                         该会员成交量                  int\n    vol_chg                     该会员成交量变化量             int\n    long_party_name             持多单排序的当前名次会员        string(中文)\n    long_open_interest          该会员持多单                  int\n    long_open_interest_chg      该会员持多单变化量             int\n    short_party_name            持空单排序的当前名次会员        string(中文)\n    short_open_interest         该会员持空单                  int\n    short_open_interest_chg     该会员持空单变化量             int\n    symbol                      标的合约                     string\n    var                         品种                        string\n    date                        日期                        string YYYYMMDD\n    \"\"\"\n    date = cons.convert_date(date) if date is not None else datetime.date.today()\n    if date < datetime.date(year=2002, month=1, day=7):\n        print(\"shfe数据源开始日期为 20020107，跳过\")\n        return {}\n    if date.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(\"%s非交易日\" % date.strftime(\"%Y%m%d\"))\n        return {}\n    url = cons.SHFE_VOL_RANK_URL_20250701 % (date.strftime(\"%Y%m%d\"))\n    r = requests_link(url, encoding=\"utf-8\", headers=cons.shfe_headers)\n    try:\n        context = json.loads(r.text)\n    except:  # noqa: E722\n        return {}\n    df = pd.DataFrame(context[\"o_cursor\"])\n\n    df = df.rename(\n        columns={\n            \"CJ1\": \"vol\",\n            \"CJ1_CHG\": \"vol_chg\",\n            \"CJ2\": \"long_open_interest\",\n            \"CJ2_CHG\": \"long_open_interest_chg\",\n            \"CJ3\": \"short_open_interest\",\n            \"CJ3_CHG\": \"short_open_interest_chg\",\n            \"PARTICIPANTABBR1\": \"vol_party_name\",\n            \"PARTICIPANTABBR2\": \"long_party_name\",\n            \"PARTICIPANTABBR3\": \"short_party_name\",\n            \"PRODUCTNAME\": \"product1\",\n            \"RANK\": \"rank\",\n            \"INSTRUMENTID\": \"symbol\",\n            \"PRODUCTSORTNO\": \"product2\",\n        }\n    )\n\n    if len(df.columns) < 3:\n        return {}\n    df = df.map(lambda x: x.strip() if isinstance(x, str) else x)\n    df = df.map(lambda x: None if x == \"\" else x)\n    df[\"variety\"] = df[\"symbol\"].apply(lambda x: symbol_varieties(x))\n    df = df[df[\"rank\"] > 0]\n    for col in [\n        \"PARTICIPANTID1\",\n        \"PARTICIPANTID2\",\n        \"PARTICIPANTID3\",\n        \"product1\",\n        \"product2\",\n    ]:\n        try:\n            del df[col]\n        except:  # noqa: E722\n            pass\n    get_vars = [var for var in vars_list if var in df[\"variety\"].tolist()]\n    big_dict = {}\n    for var in get_vars:\n        df_var = df[df[\"variety\"] == var]\n        for symbol in set(df_var[\"symbol\"]):\n            df_symbol = df_var[df_var[\"symbol\"] == symbol].copy()\n            df_symbol[\"symbol\"] = df_symbol[\"symbol\"].str.upper()\n            big_dict[symbol] = df_symbol.reset_index(drop=True)\n    return big_dict\n\n\ndef _czce_df_read(url, skip_rows, encoding=\"utf-8\", header=0):\n    \"\"\"\n    郑州商品交易所的网页数据\n    :param header:\n    :type header:\n    :param url: 网站 string\n    :param skip_rows: 去掉前几行 int\n    :param encoding: utf-8 or gbk or gb2312\n    :return: pd.DataFrame\n    \"\"\"\n    headers = {\n        \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,\"\n        \"image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/84.0.4147.89 Safari/537.36\",\n        \"Host\": \"www.czce.com.cn\",\n        \"Cookie\": \"XquW6dFMPxV380S=CAaD3sMkdXv3fUoaJlICIEv0MVegGq5EoMyBcxkOjCgSjmpuovYFuTLtYFcxTZGw; \"\n        \"XquW6dFMPxV380T=5QTTjUlA6f6WiDO7fMGmqNxHBWz.hKIc8lb_tc1o4nHrJM4nsXCAI9VHaKyV_jkHh4cIVvD25kGQAh.\"\n        \"MvLL1SHRA20HCG9mVVHPhAzktNdPK3evjm0NYbTg2Gu_XGGtPhecxLvdFQ0.\"\n        \"JlAxy_z0C15_KdO8kOI18i4K0rFERNPxjXq5qG1Gs.QiOm976wODY.pe8XCQtAsuLYJ.\"\n        \"N4DpTgNfHJp04jhMl0SntHhr.jhh3dFjMXBx.JEHngXBzY6gQAhER7uSKAeSktruxFeuKlebse.vrPghHqWvJm4WPTEvDQ8q\",\n    }\n    r = requests_link(url, encoding, headers=headers)\n\n    data = pd.read_html(\n        StringIO(r.text),\n        match=\".+\",\n        flavor=None,\n        header=header,\n        index_col=0,\n        skiprows=skip_rows,\n        attrs=None,\n        parse_dates=False,\n        thousands=\", \",\n        encoding=\"gbk\",\n        decimal=\".\",\n        converters=None,\n        na_values=None,\n        keep_default_na=True,\n    )\n    return data\n\n\ndef get_rank_table_czce(date: str = \"20251103\") -> dict:\n    \"\"\"\n    郑州商品交易所前 20 会员持仓排名数据明细\n    https://www.czce.com.cn/cn/jysj/ccpm/H077003004index_1.htm\n    注：该交易所既公布了品种排名, 也公布了标的排名\n    :param date: 日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天\n    :return: 持仓排名数据明细\n    :rtype: pandas.DataFrame\n    返回值格式\n    rank                        排名                        int\n    vol_party_name              成交量排序的当前名次会员        string(中文)\n    vol                         该会员成交量                  int\n    vol_chg                     该会员成交量变化量             int\n    long_party_name             持多单排序的当前名次会员        string(中文)\n    long_open_interest               该会员持多单                  int\n    long_open_interest_chg           该会员持多单变化量             int\n    short_party_name            持空单排序的当前名次会员        string(中文)\n    short_open_interest              该会员持空单                  int\n    short_open_interest_chg          该会员持空单变化量             int\n    symbol                      标的合约                     string\n    var                         品种                        string\n    date                        日期                        string YYYYMMDD\n    \"\"\"\n    date = cons.convert_date(date) if date is not None else datetime.date.today()\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/108.0.0.0 Safari/537.36\"\n    }\n    temp_df = pd.DataFrame()\n    if date < datetime.date(2015, 10, 8):\n        print(\"CZCE可获取的数据源开始日期为 20151008, 请输入合适的日期参数\")\n        return {}\n    if date.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(\"%s非交易日\" % date.strftime(\"%Y%m%d\"))\n        return {}\n    if date > datetime.date(year=2025, month=11, day=1):\n        url = (\n            f\"http://www.czce.com.cn/cn/DFSStaticFiles/Future/{date.year}/\"\n            f\"{date.isoformat().replace('-', '')}/FutureDataHolding.xlsx\"\n        )\n    else:\n        url = (\n            f\"http://www.czce.com.cn/cn/DFSStaticFiles/Future/{date.year}/\"\n            f\"{date.isoformat().replace('-', '')}/FutureDataHolding.xls\"\n        )\n    r = requests.get(url, headers=headers)\n    temp_df = pd.read_excel(BytesIO(r.content))\n\n    temp_pinzhong_index = [\n        item + 1\n        for item in temp_df[\n            temp_df.iloc[:, 0].str.contains(\"合计\", na=False)\n        ].index.to_list()\n    ]\n    temp_pinzhong_index.insert(0, 0)\n    temp_pinzhong_index.pop()\n    temp_symbol_index = (\n        temp_df.iloc[temp_pinzhong_index, 0].str.split(\" \", expand=True).iloc[:, 0]\n    )\n    symbol_list = [\n        re.compile(r\"[0-9a-zA-Z_]+\").findall(item)[0]\n        for item in temp_symbol_index.values\n    ]\n    temp_symbol_index_list = temp_symbol_index.index.to_list()\n    big_dict = {}\n    for i in range(len(temp_symbol_index_list) - 1):\n        inner_temp_df = temp_df[\n            temp_symbol_index_list[i] + 2 : temp_symbol_index_list[i + 1] - 1\n        ]\n        inner_temp_df.columns = [\n            \"rank\",\n            \"vol_party_name\",\n            \"vol\",\n            \"vol_chg\",\n            \"long_party_name\",\n            \"long_open_interest\",\n            \"long_open_interest_chg\",\n            \"short_party_name\",\n            \"short_open_interest\",\n            \"short_open_interest_chg\",\n        ]\n        inner_temp_df.reset_index(inplace=True, drop=True)\n        big_dict[symbol_list[i]] = inner_temp_df\n        inner_temp_df = temp_df[temp_symbol_index_list[i + 1] + 2 : -1]\n        inner_temp_df.columns = [\n            \"rank\",\n            \"vol_party_name\",\n            \"vol\",\n            \"vol_chg\",\n            \"long_party_name\",\n            \"long_open_interest\",\n            \"long_open_interest_chg\",\n            \"short_party_name\",\n            \"short_open_interest\",\n            \"short_open_interest_chg\",\n        ]\n        inner_temp_df.reset_index(inplace=True, drop=True)\n        big_dict[symbol_list[-1]] = inner_temp_df\n    new_big_dict = {}\n    for key, value in big_dict.items():\n        value = value.assign(symbol=key)\n        value = value.assign(variety=re.compile(r\"[a-zA-Z_]+\").findall(key)[0])\n        new_big_dict[key] = value\n\n    return new_big_dict\n\n\ndef _get_dce_contract_list(date, var):\n    \"\"\"\n    大连商品交易所取消了品种排名，只提供标的合约排名，需要获取标的合约列表\n    :param date: 日期 datetime.date 对象, 为空时为当天\n    :param var: 合约品种\n    :return: list 公布了持仓排名的合约列表\n    \"\"\"\n    url = \"http://portal.dce.com.cn/publicweb/quotesdata/memberDealPosiQuotes.html\"\n    headers = {\n        \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;\"\n        \"q=0.8,application/signed-exchange;v=b3;q=0.9\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"close\",\n        \"Host\": \"www.dce.com.cn\",\n        \"Origin\": \"http://portal.dce.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Upgrade-Insecure-Requests\": \"1\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/81.0.4044.138 Safari/537.36\",\n    }\n    params = {\n        \"memberDealPosiQuotes.variety\": var.lower(),\n        \"memberDealPosiQuotes.trade_type\": \"0\",\n        \"year\": date.year,\n        \"month\": date.month - 1,\n        \"day\": date.day,\n        \"contract.contract_id\": \"all\",\n        \"contract.variety_id\": var.lower(),\n        \"contract\": \"\",\n    }\n\n    while 1:\n        try:\n            r = requests.post(url, params=params, headers=headers)\n            soup = BeautifulSoup(r.text, \"lxml\")\n            contract_list = [\n                re.findall(\n                    r\"\\d+\",\n                    item[\"onclick\"].strip(\"javascript:setContract_id('\").strip(\"');\"),\n                )[0]\n                for item in soup.find_all(attrs={\"name\": \"contract\"})\n            ]\n            contract_list = [var.lower() + item for item in contract_list]\n            return contract_list  # noqa: E722\n        except:  # noqa: E722\n            time.sleep(5)\n            continue\n\n\ndef get_dce_rank_table(date: str = \"20230706\", vars_list=cons.contract_symbols) -> dict:\n    \"\"\"\n    大连商品交易所前 20 会员持仓排名数据明细, 由于交易所网站问题, 需要 20200720 之后才有数据\n    注: 该交易所只公布标的合约排名\n    :param date: 日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date 对象, 为空时为当天\n    :param vars_list: 合约品种如 RB、AL 等列表为空时为所有商品, 数据从 20060104 开始，每交易日 16:30 左右更新数据\n    :return: 持仓排名\n    :rtype: pandas.DataFrame\n\n    返回值格式\n    rank                        排名                        int\n    vol_party_name              成交量排序的当前名次会员      string(中文)\n    vol                         该会员成交量                 int\n    vol_chg                     该会员成交量变化量            int\n    long_party_name             持多单排序的当前名次会员      string(中文)\n    long_open_interest          该会员持多单                 int\n    long_open_interest_chg      该会员持多单变化量            int\n    short_party_name            持空单排序的当前名次会员       string(中文)\n    short_open_interest         该会员持空单                  int\n    short_open_interest_chg     该会员持空单变化量             int\n    symbol                      标的合约                     string\n    var                         品种                        string\n    date                        日期                        string YYYYMMDD\n    \"\"\"\n    print(\"如果本接口不可用，请使用 ak.futures_dce_position_rank() 接口\")\n    date_string = date\n    date = cons.convert_date(date) if date is not None else datetime.date.today()\n    if date < datetime.date(2006, 1, 4):\n        print(Exception(\"大连商品交易所数据源开始日期为 20060104，跳过\"))\n        return {}\n    if date.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(\"%s非交易日\" % date.strftime(\"%Y%m%d\"))\n        return {}\n    vars_list = [i for i in vars_list if i in cons.market_exchange_symbols[\"dce\"]]\n    big_dict = {}\n    for var in vars_list:\n        # var = 'V'\n        symbol_list = _get_dce_contract_list(date, var)\n        for symbol in symbol_list:\n            # print(symbol)\n            url = cons.DCE_VOL_RANK_URL_1 % (\n                var.lower(),\n                symbol,\n                var.lower(),\n                date.year,\n                date.month - 1,\n                date.day,\n            )\n            try:\n                temp_df = pd.read_excel(url[:-3] + \"excel\", header=0, skiprows=3)\n                temp_df.dropna(how=\"any\", axis=0, inplace=True)\n                temp_df = temp_df.map(lambda x: str(x).replace(\",\", \"\"))\n                del temp_df[\"名次.1\"]\n                del temp_df[\"名次.2\"]\n                temp_df.rename(\n                    columns={\n                        \"名次\": \"rank\",\n                        \"会员简称\": \"vol_party_name\",\n                        \"成交量\": \"vol\",\n                        \"增减\": \"vol_chg\",\n                        \"会员简称.1\": \"long_party_name\",\n                        \"持买单量\": \"long_open_interest\",\n                        \"增减.1\": \"long_open_interest_chg\",\n                        \"会员简称.2\": \"short_party_name\",\n                        \"持卖单量\": \"short_open_interest\",\n                        \"增减.2\": \"short_open_interest_chg\",\n                    },\n                    inplace=True,\n                )\n                temp_df[\"symbol\"] = symbol.upper()\n                temp_df[\"var\"] = var\n                temp_df[\"date\"] = date_string\n                temp_df = temp_df.map(\n                    lambda x: str(x).replace(\"-\", \"0\") if x == \"-\" else x\n                )\n                temp_df[\"rank\"] = range(1, len(temp_df) + 1)\n                temp_df[\"vol\"] = temp_df[\"vol\"].astype(float)\n                temp_df[\"vol_chg\"] = temp_df[\"vol_chg\"].astype(float)\n                temp_df[\"long_open_interest\"] = temp_df[\"long_open_interest\"].astype(\n                    float\n                )\n                temp_df[\"long_open_interest_chg\"] = temp_df[\n                    \"long_open_interest_chg\"\n                ].astype(float)\n                temp_df[\"short_open_interest\"] = temp_df[\"short_open_interest\"].astype(\n                    float\n                )\n                temp_df[\"short_open_interest_chg\"] = temp_df[\n                    \"short_open_interest_chg\"\n                ].astype(float)\n                big_dict[symbol] = temp_df\n            except:  # noqa: E722\n                temp_url = \"http://portal.dce.com.cn/publicweb/quotesdata/memberDealPosiQuotes.html\"\n                payload = {\n                    \"memberDealPosiQuotes.variety\": var.lower(),\n                    \"memberDealPosiQuotes.trade_type\": \"0\",\n                    \"year\": date.year,\n                    \"month\": date.month - 1,\n                    \"day\": str(date.day).zfill(2),\n                    \"contract.contract_id\": symbol,\n                    \"contract.variety_id\": var.lower(),\n                    \"contract\": \"\",\n                }\n                r = requests.post(temp_url, data=payload)\n                if r.status_code != 200:\n                    big_dict[symbol] = {}\n                else:\n                    temp_df = pd.read_html(StringIO(r.text))[1].iloc[:-1, :]\n                    del temp_df[\"名次.1\"]\n                    del temp_df[\"名次.2\"]\n                    temp_df.rename(\n                        columns={\n                            \"名次\": \"rank\",\n                            \"会员简称\": \"vol_party_name\",\n                            \"成交量\": \"vol\",\n                            \"增减\": \"vol_chg\",\n                            \"会员简称.1\": \"long_party_name\",\n                            \"持买单量\": \"long_open_interest\",\n                            \"增减.1\": \"long_open_interest_chg\",\n                            \"会员简称.2\": \"short_party_name\",\n                            \"持卖单量\": \"short_open_interest\",\n                            \"增减.2\": \"short_open_interest_chg\",\n                        },\n                        inplace=True,\n                    )\n                    temp_df[\"symbol\"] = symbol.upper()\n                    temp_df[\"var\"] = var\n                    temp_df[\"date\"] = date_string\n                    temp_df = temp_df.map(\n                        lambda x: str(x).replace(\"-\", \"0\") if x == \"-\" else x\n                    )\n                    temp_df[\"rank\"] = range(1, len(temp_df) + 1)\n                    temp_df[\"vol\"] = temp_df[\"vol\"].astype(float)\n                    temp_df[\"vol_chg\"] = temp_df[\"vol_chg\"].astype(float)\n                    temp_df[\"long_open_interest\"] = temp_df[\n                        \"long_open_interest\"\n                    ].astype(float)\n                    temp_df[\"long_open_interest_chg\"] = temp_df[\n                        \"long_open_interest_chg\"\n                    ].astype(float)\n                    temp_df[\"short_open_interest\"] = temp_df[\n                        \"short_open_interest\"\n                    ].astype(float)\n                    temp_df[\"short_open_interest_chg\"] = temp_df[\n                        \"short_open_interest_chg\"\n                    ].astype(float)\n                    big_dict[symbol] = temp_df\n    return big_dict\n\n\ndef get_cffex_rank_table(date: str = \"20190805\", vars_list=cons.contract_symbols):\n    \"\"\"\n    中国金融期货交易所前 20 会员持仓排名数据明细\n    http://www.cffex.com.cn/ccpm/\n    注：该交易所既公布品种排名，也公布标的排名\n    :param date: 日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天\n    :param vars_list: 合约品种如RB、AL等列表 为空时为所有商品, 数据从20100416开始，每交易日16:30左右更新数据\n    :return: 持仓排名\n    :rtype: pandas.DataFrame\n    :rfield:\n    rank                        排名                        int\n    vol_party_name              成交量排序的当前名次会员        string(中文)\n    vol                         该会员成交量                  int\n    vol_chg                     该会员成交量变化量             int\n    long_party_name             持多单排序的当前名次会员        string(中文)\n    long_open_interest          该会员持多单                  int\n    long_open_interest_chg      该会员持多单变化量             int\n    short_party_name            持空单排序的当前名次会员        string(中文)\n    short_open_interest         该会员持空单                  int\n    short_open_interest_chg     该会员持空单变化量             int\n    symbol                      标的合约                     string\n    var                         品种                        string\n    date                        日期                        string YYYYMMDD\n\n    \"\"\"\n    vars_list = [i for i in vars_list if i in cons.market_exchange_symbols[\"cffex\"]]\n    date = cons.convert_date(date) if date is not None else datetime.date.today()\n    if date < datetime.date(2010, 4, 16):\n        print(Exception(\"CFFEX 数据源开始日期为 20100416，跳过\"))\n        return {}\n    if date.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(\"%s非交易日\" % date.strftime(\"%Y%m%d\"))\n        return {}\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/81.0.4044.138 Safari/537.36\",\n    }\n    big_dict = {}\n    for var in vars_list:\n        # print(var)\n        # var = \"IF\"\n        url = cons.CFFEX_VOL_RANK_URL % (\n            date.strftime(\"%Y%m\"),\n            date.strftime(\"%d\"),\n            var,\n        )\n        # url = 'http://www.cffex.com.cn/sj/ccpm/201908/05/IF_1.csv'\n        # url = 'http://www.cffex.com.cn/sj/ccpm/202308/08/IF_1.csv'\n        r = requests.get(url, headers=headers)\n        # 20200316 开始数据结构变化，统一格式\n        if r.status_code == 200:\n            try:\n                # 当所需要的合约没有数据时\n                temp_df = pd.read_table(BytesIO(r.content), encoding=\"gbk\", header=None)\n            except:  # noqa: E722\n                continue\n            need_index = temp_df.iloc[:, 0].str.contains(\"交易日\")\n            if sum(need_index) > 2:\n                table = temp_df.iloc[temp_df[need_index].index[1] :, 0].str.split(\n                    \",\", expand=True\n                )\n                table.columns = table.iloc[0, :]\n                table = table.iloc[2:, :].copy()\n                table.reset_index(inplace=True, drop=True)\n            else:\n                table = pd.read_csv(BytesIO(r.content), encoding=\"gbk\")\n        else:\n            return\n        table = table.dropna(how=\"any\")\n        table = table.map(lambda x: x.strip() if isinstance(x, str) else x)\n        del table[\"交易日\"]\n        for symbol in set(table[\"合约\"]):\n            table_cut = table[table[\"合约\"] == symbol]\n            table_cut.columns = [\"symbol\", \"rank\"] + rank_columns\n            table_cut = _table_cut_cal(pd.DataFrame(table_cut), symbol)\n            big_dict[symbol] = table_cut.reset_index(drop=True)\n    return big_dict\n\n\ndef _table_cut_cal(table_cut, symbol):\n    \"\"\"\n    表格切分\n    :param table_cut: 需要切分的表格\n    :type table_cut: pandas.DataFrame\n    :param symbol: 具体合约的代码\n    :type symbol: str\n    :return: 表格切分后的结果\n    :rtype: pandas.DataFrame\n    \"\"\"\n    var = symbol_varieties(symbol)\n    table_cut[intColumns + [\"rank\"]] = table_cut[intColumns + [\"rank\"]].astype(int)\n    table_cut_sum = table_cut.sum()\n    table_cut_sum[\"rank\"] = 999\n    for col in [\"vol_party_name\", \"long_party_name\", \"short_party_name\"]:\n        table_cut_sum[col] = None\n    table_cut = pd.concat([table_cut, pd.DataFrame(table_cut_sum).T], sort=True)\n    table_cut[\"symbol\"] = symbol\n    table_cut[\"variety\"] = var\n    table_cut[intColumns + [\"rank\"]] = table_cut[intColumns + [\"rank\"]].astype(int)\n    return table_cut\n\n\ndef futures_dce_position_rank(\n    date: str = \"20160919\", vars_list=cons.contract_symbols\n) -> dict:\n    \"\"\"\n    大连商品交易所-每日持仓排名-具体合约\n    http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/rtj/rcjccpm/index.html\n    :param date: 指定交易日; e.g., \"20200511\"\n    :type date: str\n    :param vars_list: 品种列表\n    :type vars_list: list\n    :return: 指定日期的持仓排名数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    date = cons.convert_date(date) if date is not None else datetime.date.today()\n    if date.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(\"%s非交易日\" % date.strftime(\"%Y%m%d\"))\n        return {}\n    date_str = date.strftime(\"%Y%m%d\")\n    url = \"http://www.dce.com.cn/dcereport/publicweb/dailystat/memberDealPosi/batchDownload\"\n    payload = {\n        \"tradeDate\": date_str,\n        \"varietyId\": \"a\",\n        \"contractId\": \"a2601\",\n        \"tradeType\": \"1\",\n        \"lang\": \"zh\",\n    }\n    r = requests.post(url, json=payload)\n    big_dict = dict()\n    with zipfile.ZipFile(BytesIO(r.content), mode=\"r\") as z:\n        for i in z.namelist():\n            file_name = i\n            if not file_name.startswith(date_str):\n                continue\n            try:\n                data = pd.read_table(z.open(i), header=None, sep=\"\\t\")\n                if sum(data.iloc[:, 0].str.find(\"会员类别\") == 0) > 0:\n                    data = data.iloc[:-6]\n                if len(data) < 12:  # 处理没有活跃合约的情况\n                    big_dict[file_name.split(\"_\")[1]] = pd.DataFrame()\n                    continue\n                temp_filter = data[data.iloc[:, 0].str.find(\"名次\") == 0].index.tolist()\n                if (\n                    temp_filter[1] - temp_filter[0] < 5\n                ):  # 过滤有无成交量但是有买卖持仓的数据, 如 20201105_c2011_成交量_买持仓_卖持仓排名.txt\n                    big_dict[file_name.split(\"_\")[1]] = pd.DataFrame()\n                    continue\n                start_list = data[data.iloc[:, 0].str.find(\"名次\") == 0].index.tolist()\n                data = data.iloc[\n                    start_list[0] :,\n                    data.columns[data.iloc[start_list[0], :].notnull()],\n                ]\n                data.reset_index(inplace=True, drop=True)\n                start_list = data[data.iloc[:, 0].str.find(\"名次\") == 0].index.tolist()\n                end_list = data[\n                    data.iloc[:, 0].str.contains(r\"(?:总计|合计)\", na=False)\n                ].index.tolist()\n                part_one = data[start_list[0] : end_list[0]].iloc[1:, :]\n                part_two = data[start_list[1] : end_list[1]].iloc[1:, :]\n                part_three = data[start_list[2] : end_list[2]].iloc[1:, :]\n                temp_df = pd.concat(\n                    objs=[\n                        part_one.reset_index(drop=True),\n                        part_two.reset_index(drop=True),\n                        part_three.reset_index(drop=True),\n                    ],\n                    axis=1,\n                    ignore_index=True,\n                )\n                temp_df.columns = [\n                    \"名次\",\n                    \"会员简称\",\n                    \"成交量\",\n                    \"增减\",\n                    \"名次\",\n                    \"会员简称\",\n                    \"持买单量\",\n                    \"增减\",\n                    \"名次\",\n                    \"会员简称\",\n                    \"持卖单量\",\n                    \"增减\",\n                ]\n                temp_df[\"rank\"] = range(1, len(temp_df) + 1)\n                del temp_df[\"名次\"]\n                temp_df.columns = [\n                    \"vol_party_name\",\n                    \"vol\",\n                    \"vol_chg\",\n                    \"long_party_name\",\n                    \"long_open_interest\",\n                    \"long_open_interest_chg\",\n                    \"short_party_name\",\n                    \"short_open_interest\",\n                    \"short_open_interest_chg\",\n                    \"rank\",\n                ]\n                temp_df[\"symbol\"] = file_name.split(\"_\")[1].upper()\n                temp_df[\"variety\"] = file_name.split(\"_\")[1][:-4].upper()\n                temp_df = temp_df[\n                    [\n                        \"long_open_interest\",\n                        \"long_open_interest_chg\",\n                        \"long_party_name\",\n                        \"rank\",\n                        \"short_open_interest\",\n                        \"short_open_interest_chg\",\n                        \"short_party_name\",\n                        \"vol\",\n                        \"vol_chg\",\n                        \"vol_party_name\",\n                        \"symbol\",\n                        \"variety\",\n                    ]\n                ]\n                temp_df = temp_df.map(lambda x: str(x).replace(\",\", \"\"))\n                temp_df[\"long_open_interest\"] = pd.to_numeric(\n                    temp_df[\"long_open_interest\"], errors=\"coerce\"\n                )\n                temp_df[\"long_open_interest_chg\"] = pd.to_numeric(\n                    temp_df[\"long_open_interest_chg\"], errors=\"coerce\"\n                )\n                temp_df[\"rank\"] = pd.to_numeric(temp_df[\"rank\"], errors=\"coerce\")\n                temp_df[\"short_open_interest\"] = pd.to_numeric(\n                    temp_df[\"short_open_interest\"], errors=\"coerce\"\n                )\n                temp_df[\"short_open_interest_chg\"] = pd.to_numeric(\n                    temp_df[\"short_open_interest_chg\"], errors=\"coerce\"\n                )\n                temp_df[\"vol\"] = pd.to_numeric(temp_df[\"vol\"], errors=\"coerce\")\n                temp_df[\"vol_chg\"] = pd.to_numeric(temp_df[\"vol_chg\"], errors=\"coerce\")\n                big_dict[file_name.split(\"_\")[1]] = temp_df\n            except UnicodeDecodeError:\n                try:\n                    data = pd.read_table(\n                        z.open(i),\n                        header=None,\n                        sep=\"\\\\s+\",\n                        encoding=\"gb2312\",\n                        skiprows=3,\n                    )\n                except:  # noqa: E722\n                    data = pd.read_table(\n                        z.open(i),\n                        header=None,\n                        sep=\"\\\\s+\",\n                        encoding=\"gb2312\",\n                        skiprows=4,\n                    )\n                start_list = data[data.iloc[:, 0].str.find(\"名次\") == 0].index.tolist()\n                end_list = data[data.iloc[:, 0].str.find(\"总计\") == 0].index.tolist()\n                part_one = data[start_list[0] : end_list[0]].iloc[1:, :]\n                part_two = data[start_list[1] : end_list[1]].iloc[1:, :]\n                part_three = data[start_list[2] : end_list[2]].iloc[1:, :]\n                temp_df = pd.concat(\n                    objs=[\n                        part_one.reset_index(drop=True),\n                        part_two.reset_index(drop=True),\n                        part_three.reset_index(drop=True),\n                    ],\n                    axis=1,\n                    ignore_index=True,\n                )\n                temp_df.columns = [\n                    \"名次\",\n                    \"会员简称\",\n                    \"成交量\",\n                    \"增减\",\n                    \"名次\",\n                    \"会员简称\",\n                    \"持买单量\",\n                    \"增减\",\n                    \"名次\",\n                    \"会员简称\",\n                    \"持卖单量\",\n                    \"增减\",\n                ]\n                temp_df[\"rank\"] = range(1, len(temp_df) + 1)\n                del temp_df[\"名次\"]\n                temp_df.columns = [\n                    \"vol_party_name\",\n                    \"vol\",\n                    \"vol_chg\",\n                    \"long_party_name\",\n                    \"long_open_interest\",\n                    \"long_open_interest_chg\",\n                    \"short_party_name\",\n                    \"short_open_interest\",\n                    \"short_open_interest_chg\",\n                    \"rank\",\n                ]\n                temp_df[\"symbol\"] = file_name.split(\"_\")[1].upper()\n                temp_df[\"variety\"] = file_name.split(\"_\")[1][:-4].upper()\n                temp_df = temp_df[\n                    [\n                        \"long_open_interest\",\n                        \"long_open_interest_chg\",\n                        \"long_party_name\",\n                        \"rank\",\n                        \"short_open_interest\",\n                        \"short_open_interest_chg\",\n                        \"short_party_name\",\n                        \"vol\",\n                        \"vol_chg\",\n                        \"vol_party_name\",\n                        \"symbol\",\n                        \"variety\",\n                    ]\n                ]\n                temp_df = temp_df.map(lambda x: str(x).replace(\",\", \"\"))\n                temp_df[\"long_open_interest\"] = pd.to_numeric(\n                    temp_df[\"long_open_interest\"], errors=\"coerce\"\n                )\n                temp_df[\"long_open_interest_chg\"] = pd.to_numeric(\n                    temp_df[\"long_open_interest_chg\"], errors=\"coerce\"\n                )\n                temp_df[\"rank\"] = pd.to_numeric(temp_df[\"rank\"], errors=\"coerce\")\n                temp_df[\"short_open_interest\"] = pd.to_numeric(\n                    temp_df[\"short_open_interest\"], errors=\"coerce\"\n                )\n                temp_df[\"short_open_interest_chg\"] = pd.to_numeric(\n                    temp_df[\"short_open_interest_chg\"], errors=\"coerce\"\n                )\n                temp_df[\"vol\"] = pd.to_numeric(temp_df[\"vol\"], errors=\"coerce\")\n                temp_df[\"vol_chg\"] = pd.to_numeric(temp_df[\"vol_chg\"], errors=\"coerce\")\n                big_dict[file_name.split(\"_\")[1]] = temp_df\n    dict_keys = list(big_dict.keys())\n    for item in dict_keys:\n        result = re.sub(r\"\\d\", \"\", item)\n        if result.upper() not in vars_list:\n            del big_dict[item]\n    filtered_dict = {k: v for k, v in big_dict.items() if len(v) > 1}\n    return filtered_dict\n\n\ndef futures_dce_position_rank_other(date: str = \"20160104\"):\n    \"\"\"\n    大连商品交易所-每日持仓排名-具体合约-补充\n    http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/rtj/rcjccpm/index.html\n    :param date: 交易日\n    :type date: str\n    :return: 合约具体名称列表\n    :rtype: list\n    \"\"\"\n    date = cons.convert_date(date) if date is not None else datetime.date.today()\n    if date.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(\"%s非交易日\" % date.strftime(\"%Y%m%d\"))\n        return {}\n    url = \"http://www.dce.com.cn/publicweb/quotesdata/memberDealPosiQuotes.html\"\n    payload = {\n        \"memberDealPosiQuotes.variety\": \"c\",\n        \"memberDealPosiQuotes.trade_type\": \"0\",\n        \"year\": date.year,\n        \"month\": date.month - 1,\n        \"day\": date.day,\n        \"contract.contract_id\": \"all\",\n        \"contract.variety_id\": \"c\",\n        \"contract\": \"\",\n    }\n    r = requests.post(url, data=payload)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    symbol_list = [\n        item[\"onclick\"].strip(\"javascript:setVariety(\").strip(\"');\")\n        for item in soup.find_all(attrs={\"class\": \"selBox\"})[-3].find_all(\"input\")\n    ]\n    big_df = dict()\n    for symbol in symbol_list:\n        payload = {\n            \"memberDealPosiQuotes.variety\": symbol,\n            \"memberDealPosiQuotes.trade_type\": \"0\",\n            \"year\": date.year,\n            \"month\": date.month - 1,\n            \"day\": date.day,\n            \"contract.contract_id\": \"all\",\n            \"contract.variety_id\": symbol,\n            \"contract\": \"\",\n        }\n        r = requests.post(url, data=payload)\n        soup = BeautifulSoup(r.text, features=\"lxml\")\n        contract_list = [\n            item[\"onclick\"].strip(\"javascript:setContract_id('\").strip(\"');\")\n            for item in soup.find_all(attrs={\"name\": \"contract\"})\n        ]\n        if contract_list:\n            if len(contract_list[0]) == 4:\n                contract_list = [symbol + item for item in contract_list]\n                for contract in contract_list:\n                    payload = {\n                        \"memberDealPosiQuotes.variety\": symbol,\n                        \"memberDealPosiQuotes.trade_type\": \"0\",\n                        \"year\": date.year,\n                        \"month\": date.month - 1,\n                        \"day\": date.day,\n                        \"contract.contract_id\": contract,\n                        \"contract.variety_id\": symbol,\n                        \"contract\": \"\",\n                    }\n                    r = requests.post(url, data=payload)\n                    temp_df = pd.read_html(StringIO(r.text))[1].iloc[:-1, :]\n                    temp_df.columns = [\n                        \"rank\",\n                        \"vol_party_name\",\n                        \"vol\",\n                        \"vol_chg\",\n                        \"_\",\n                        \"long_party_name\",\n                        \"long_open_interest\",\n                        \"long_open_interest_chg\",\n                        \"_\",\n                        \"short_party_name\",\n                        \"short_open_interest\",\n                        \"short_open_interest_chg\",\n                    ]\n                    temp_df[\"variety\"] = symbol.upper()\n                    temp_df[\"symbol\"] = contract\n                    temp_df = temp_df[\n                        [\n                            \"long_open_interest\",\n                            \"long_open_interest_chg\",\n                            \"long_party_name\",\n                            \"rank\",\n                            \"short_open_interest\",\n                            \"short_open_interest_chg\",\n                            \"short_party_name\",\n                            \"vol\",\n                            \"vol_chg\",\n                            \"vol_party_name\",\n                            \"symbol\",\n                            \"variety\",\n                        ]\n                    ]\n                    big_df[contract] = temp_df\n    return big_df\n\n\ndef __futures_gfex_vars_list() -> list:\n    \"\"\"\n    广州期货交易所-合约品种名称列表\n    http://www.gfex.com.cn/gfex/rcjccpm/hqsj_tjsj.shtml\n    :return: 合约品种名称列表\n    :rtype: list\n    \"\"\"\n    url = \"http://www.gfex.com.cn/u/interfacesWebVariety/loadList\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/119.0.0.0 Safari/537.36\"\n    }\n    r = requests.post(url=url, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    var_list = temp_df[\"varietyId\"].tolist()\n    return var_list\n\n\ndef __futures_gfex_contract_list(symbol: str = \"si\", date: str = \"20240729\") -> list:\n    \"\"\"\n    广州期货交易所-合约具体名称列表\n    http://www.gfex.com.cn/gfex/rcjccpm/hqsj_tjsj.shtml\n    :param symbol: 品种\n    :type symbol: str\n    :param date: 交易日\n    :type date: str\n    :return: 合约具体名称列表\n    :rtype: list\n    \"\"\"\n    url = \"http://www.gfex.com.cn/u/interfacesWebTiMemberDealPosiQuotes/loadListContract_id\"\n    payload = {\n        \"variety\": symbol,\n        \"trade_date\": date,\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/119.0.0.0 Safari/537.36\"\n    }\n    r = requests.post(url=url, data=payload, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    if temp_df.empty:\n        return []\n    contract_list = temp_df.iloc[:, 0].tolist()\n    return contract_list\n\n\ndef __futures_gfex_contract_data(\n    symbol: str = \"si\", contract_id: str = \"si2312\", date: str = \"20231113\"\n) -> pd.DataFrame:\n    \"\"\"\n    广州期货交易所-合约具体数据\n    http://www.gfex.com.cn/gfex/rcjccpm/hqsj_tjsj.shtml\n    :param symbol: 品种\n    :type symbol: str\n    :param contract_id: 具体合约\n    :type contract_id: str\n    :param date: 交易日\n    :type date: str\n    :return: 合约具体数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://www.gfex.com.cn/u/interfacesWebTiMemberDealPosiQuotes/loadList\"\n    payload = {\n        \"trade_date\": date,\n        \"trade_type\": \"0\",\n        \"variety\": symbol,\n        \"contract_id\": contract_id,\n        \"data_type\": \"1\",\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/119.0.0.0 Safari/537.36\"\n    }\n    big_df = pd.DataFrame()\n    for page in range(1, 4):\n        payload.update(\n            {\n                \"data_type\": page,\n            }\n        )\n        r = requests.post(url=url, data=payload, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        if \"qtySub\" in temp_df.columns:\n            temp_df.rename(\n                columns={\n                    \"abbr\": \"vol_party_name\",\n                    \"todayQty\": \"vol\",\n                    \"qtySub\": \"vol_chg\",\n                },\n                inplace=True,\n            )\n        else:\n            temp_df.rename(\n                columns={\n                    \"abbr\": \"vol_party_name\",\n                    \"todayQty\": \"vol\",\n                    \"todayQtyChg\": \"vol_chg\",\n                },\n                inplace=True,\n            )\n        temp_df = temp_df[[\"vol_party_name\", \"vol\", \"vol_chg\"]]\n        big_df = pd.concat(objs=[big_df, temp_df], axis=1, ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df[\"index\"] + 1\n    big_df.columns = [\n        \"rank\",\n        \"vol_party_name\",\n        \"vol\",\n        \"vol_chg\",\n        \"long_party_name\",\n        \"long_open_interest\",\n        \"long_open_interest_chg\",\n        \"short_party_name\",\n        \"short_open_interest\",\n        \"short_open_interest_chg\",\n    ]\n    big_df[\"symbol\"] = contract_id.upper()\n    big_df[\"variety\"] = symbol.upper()\n    big_df = big_df.iloc[:-1, :]\n\n    big_df[\"vol\"] = pd.to_numeric(big_df[\"vol\"], errors=\"coerce\")\n    big_df[\"vol_chg\"] = pd.to_numeric(big_df[\"vol_chg\"], errors=\"coerce\")\n    big_df[\"long_open_interest\"] = pd.to_numeric(\n        big_df[\"long_open_interest\"], errors=\"coerce\"\n    )\n    big_df[\"long_open_interest_chg\"] = pd.to_numeric(\n        big_df[\"long_open_interest_chg\"], errors=\"coerce\"\n    )\n    big_df[\"short_open_interest\"] = pd.to_numeric(\n        big_df[\"short_open_interest\"], errors=\"coerce\"\n    )\n    big_df[\"short_open_interest_chg\"] = pd.to_numeric(\n        big_df[\"short_open_interest_chg\"], errors=\"coerce\"\n    )\n    return big_df\n\n\ndef futures_gfex_position_rank(date: str = \"20231113\", vars_list: list = None):\n    \"\"\"\n    广州期货交易所-日成交持仓排名\n    http://www.gfex.com.cn/gfex/rcjccpm/hqsj_tjsj.shtml\n    :param date: 开始日期; 广州期货交易所的日成交持仓排名从 20231110 开始\n    :type date: str\n    :param vars_list: 商品代码列表\n    :type vars_list: list\n    :return: 日成交持仓排名\n    :rtype: pandas.DataFrame\n    \"\"\"\n    date = cons.convert_date(date) if date is not None else datetime.date.today()\n    if date.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(\"%s非交易日\" % date.strftime(\"%Y%m%d\"))\n        return {}\n    date = date.strftime(\"%Y%m%d\")\n    if vars_list is None:\n        vars_list = __futures_gfex_vars_list()\n    else:\n        vars_list = [item.lower() for item in vars_list]\n    big_dict = {}\n    for item in vars_list:\n        try:\n            futures_contract_list = __futures_gfex_contract_list(\n                symbol=item.lower(), date=date\n            )\n        except:  # noqa: E722\n            return big_dict\n        for name in futures_contract_list:\n            try:\n                temp_df = __futures_gfex_contract_data(\n                    symbol=item.lower(), contract_id=name, date=date\n                )\n                big_dict[name] = temp_df\n            except:  # noqa: E722\n                return big_dict\n    return big_dict\n\n\nif __name__ == \"__main__\":\n    # 郑州商品交易所\n    get_rank_table_czce_df = get_rank_table_czce(date=\"20230109\")\n    print(get_rank_table_czce_df)\n\n    get_rank_table_czce_df = get_rank_table_czce(date=\"20201026\")\n    print(get_rank_table_czce_df)\n\n    # 中国金融期货交易所\n    get_cffex_rank_table_df = get_cffex_rank_table(date=\"20250721\")\n    print(get_cffex_rank_table_df)\n\n    # 上海期货交易所\n    get_shfe_rank_table_df = get_shfe_rank_table(date=\"20240509\")\n    print(get_shfe_rank_table_df)\n\n    # 大连商品交易所-老接口\n    get_dce_rank_table_first_df = get_dce_rank_table(date=\"20131227\")\n    print(get_dce_rank_table_first_df)\n\n    get_dce_rank_table_second_df = get_dce_rank_table(date=\"20171227\")\n    print(get_dce_rank_table_second_df)\n\n    get_dce_rank_table_third_df = get_dce_rank_table(date=\"20200929\")\n    print(get_dce_rank_table_third_df)\n\n    get_dce_rank_table_third_df = get_dce_rank_table(date=\"20230706\")\n    print(get_dce_rank_table_third_df)\n\n    get_dce_rank_table_fourth_df = get_dce_rank_table(date=\"20210517\", vars_list=[\"V\"])\n    print(get_dce_rank_table_fourth_df)\n\n    # 大连商品交易所-新接口\n    futures_dce_detail_dict = futures_dce_position_rank(date=\"20240517\")\n    print(futures_dce_detail_dict)\n\n    futures_dce_position_rank_other_df = futures_dce_position_rank_other(\n        date=\"20200727\"\n    )\n    print(futures_dce_position_rank_other_df)\n\n    # 广州期货交易所\n    futures_gfex_position_rank_df = futures_gfex_position_rank(date=\"20250718\")\n    print(futures_gfex_position_rank_df)\n\n    # 总接口\n    get_rank_sum_daily_df = get_rank_sum_daily(\n        start_day=\"20251031\",\n        end_day=\"20251103\",\n    )\n    print(get_rank_sum_daily_df)\n"
  },
  {
    "path": "akshare/futures/futures_basis.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/12/12 17:00\nDesc: 生意社网站采集大宗商品现货价格及相应基差数据, 数据时间段从 20110104-至今\n备注：现期差 = 现货价格 - 期货价格(这里的期货价格为结算价)\n黄金为 元/克, 白银为 元/千克, 玻璃现货为 元/平方米, 鸡蛋现货为 元/公斤, 鸡蛋期货为 元/500千克, 其余为 元/吨.\n焦炭现货规格是: 一级冶金焦; 焦炭期货规格: 介于一级和二级之间, 焦炭现期差仅供参考.\n铁矿石现货价格是: 湿吨, 铁矿石期货价格是: 干吨\n网页地址: https://www.100ppi.com/sf/\n历史数据可以通过修改 url 地址来获取, 比如: https://www.100ppi.com/sf/day-2017-09-12.html\n发现生意社的 bugs:\n1. 2018-09-12 周三 数据缺失是因为生意社源数据在该交易日缺失: https://www.100ppi.com/sf/day-2018-09-12.html\n\"\"\"\n\nimport datetime\nimport re\nimport time\nimport warnings\nfrom typing import List\n\nimport pandas as pd\n\nfrom akshare.futures import cons\nfrom akshare.futures.requests_fun import pandas_read_html_link\nfrom akshare.futures.symbol_var import chinese_to_english\n\ncalendar = cons.get_calendar()\n\n\ndef futures_spot_price_daily(\n    start_day: str = \"20210201\",\n    end_day: str = \"20210208\",\n    vars_list: list = cons.contract_symbols,\n):\n    \"\"\"\n    指定时间段内大宗商品现货价格及相应基差\n    https://www.100ppi.com/sf/\n    :param start_day: str 开始日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象; 默认为当天\n    :param end_day: str 结束数据 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象; 默认为当天\n    :param vars_list: list 合约品种如 [RB, AL]; 默认参数为所有商品\n    :return: 基差\n    :rtype: pandas.DataFrame\n    展期收益率数据:\n    var               商品品种                      string\n    sp                现货价格                      float\n    near_symbol       临近交割合约                  string\n    near_price        临近交割合约结算价             float\n    dom_symbol        主力合约                      string\n    dom_price         主力合约结算价                 float\n    near_basis        临近交割合约相对现货的基差      float\n    dom_basis         主力合约相对现货的基差          float\n    near_basis_rate   临近交割合约相对现货的基差率    float\n    dom_basis_rate    主力合约相对现货的基差率        float\n    date              日期                          string YYYYMMDD\n    \"\"\"\n    start_day = (\n        cons.convert_date(start_day) if start_day is not None else datetime.date.today()\n    )\n    end_day = (\n        cons.convert_date(end_day)\n        if end_day is not None\n        else cons.convert_date(cons.get_latest_data_date(datetime.datetime.now()))\n    )\n    df_list = []\n    while start_day <= end_day:\n        temp_df = futures_spot_price(start_day, vars_list)\n        if temp_df is False:\n            return pd.concat(df_list).reset_index(drop=True)\n        elif temp_df is not None:\n            df_list.append(temp_df)\n        start_day += datetime.timedelta(days=1)\n    if len(df_list) > 0:\n        temp_df = pd.concat(df_list)\n        temp_df.reset_index(drop=True, inplace=True)\n        return temp_df\n\n\ndef futures_spot_price(\n    date: str = \"20240430\", vars_list: list = cons.contract_symbols\n) -> pd.DataFrame:\n    \"\"\"\n    指定交易日大宗商品现货价格及相应基差\n    https://www.100ppi.com/sf/day-2017-09-12.html\n    :param date: 开始日期 format: YYYY-MM-DD 或 YYYYMMDD 或 datetime.date 对象; 为空时为当天\n    :param vars_list: 合约品种如 RB、AL 等列表 为空时为所有商品\n    :return: pandas.DataFrame\n    展期收益率数据:\n    var              商品品种                     string\n    sp               现货价格                     float\n    near_symbol      临近交割合约                  string\n    near_price       临近交割合约结算价             float\n    dom_symbol       主力合约                     string\n    dom_price        主力合约结算价                float\n    near_basis       临近交割合约相对现货的基差      float\n    dom_basis        主力合约相对现货的基差         float\n    near_basis_rate  临近交割合约相对现货的基差率    float\n    dom_basis_rate   主力合约相对现货的基差率       float\n    date             日期                         string YYYYMMDD\n    \"\"\"\n    date = cons.convert_date(date) if date is not None else datetime.date.today()\n    if date < datetime.date(2011, 1, 4):\n        raise Exception(\n            \"数据源开始日期为 20110104, 请将获取数据时间点设置在 20110104 后\"\n        )\n    if date.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(f\"{date.strftime('%Y%m%d')}非交易日\")\n        return pd.DataFrame()\n    u1 = \"https://www.100ppi.com/sf/\"\n    u2 = f\"https://www.100ppi.com/sf/day-{date.strftime('%Y-%m-%d')}.html\"\n    i = 1\n    while True:\n        for url in [u2, u1]:\n            try:\n                # url = u2\n                headers = {\n                    \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,\"\n                    \"image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\"\n                }\n                r = pandas_read_html_link(url, headers=headers)\n                string = r[0].loc[1, 1]\n                news = \"\".join(re.findall(r\"[0-9]\", string))\n                if news[3:11] == date.strftime(\"%Y%m%d\"):\n                    records = _check_information(r[1], date)\n                    records.index = records[\"symbol\"]\n                    var_list_in_market = [i for i in vars_list if i in records.index]\n                    temp_df = records.loc[var_list_in_market, :]\n                    temp_df.reset_index(drop=True, inplace=True)\n                    return temp_df\n                else:\n                    time.sleep(3)\n            except Exception as e:  # noqa: E722\n                print(\n                    f\"{date.strftime('%Y-%m-%d')}日生意社数据连接失败[错误信息:{e}]，第{str(i)}次尝试，最多5次\"\n                )\n                i += 1\n                if i > 5:\n                    print(\n                        f\"{date.strftime('%Y-%m-%d')}日生意社数据连接失败, 如果当前交易日是 2018-09-12, \"\n                        f\"由于生意社源数据缺失, 无法访问, 否则为重复访问已超过5次，您的地址被网站墙了，\"\n                        f\"请保存好返回数据，稍后从该日期起重试\"\n                    )\n                    return pd.DataFrame()\n\n\ndef _check_information(df_data, date):\n    \"\"\"\n    数据验证和计算模块\n    :param df_data: pandas.DataFrame 采集的数据\n    :param date: datetime.date 具体某一天 YYYYMMDD\n    :return: pandas.DataFrame\n    中间数据\n    symbol  spot_price near_contract  ...  near_basis_rate dom_basis_rate      date\n     CU    49620.00        cu1811  ...        -0.002418      -0.003426  20181108\n     RB     4551.54        rb1811  ...        -0.013521      -0.134359  20181108\n     ZN    22420.00        zn1811  ...        -0.032114      -0.076271  20181108\n     AL    13900.00        al1812  ...         0.005396       0.003957  20181108\n     AU      274.10        au1811  ...         0.005655       0.020430  20181108\n     WR     4806.25        wr1903  ...        -0.180026      -0.237035  20181108\n     RU    10438.89        ru1811  ...        -0.020969       0.084406  20181108\n     PB    18600.00        pb1811  ...        -0.001344      -0.010215  20181108\n     AG     3542.67        ag1811  ...        -0.000754       0.009408  20181108\n     BU     4045.53        bu1811  ...        -0.129904      -0.149679  20181108\n     HC     4043.33        hc1811  ...        -0.035449      -0.088128  20...\n    \"\"\"\n    df_data = df_data.loc[:, [0, 1, 2, 3, 5, 6]]\n    df_data.columns = [\n        \"symbol\",\n        \"spot_price\",\n        \"near_contract\",\n        \"near_contract_price\",\n        \"dominant_contract\",\n        \"dominant_contract_price\",\n    ]\n    records = pd.DataFrame()\n    for string in df_data[\"symbol\"].tolist():\n        news = \"\".join(re.findall(r\"[\\u4e00-\\u9fa5]\", string))\n        if news == \"\":\n            news = string.strip()\n\n        \"\"\"\n        if string == \"PTA\":\n            news = \"PTA\"\n        else:\n            news = \"\".join(re.findall(r\"[\\u4e00-\\u9fa5]\", string))\n        \"\"\"\n\n        if news != \"\" and news not in [\n            \"商品\",\n            \"价格\",\n            \"上海期货交易所\",\n            \"郑州商品交易所\",\n            \"大连商品交易所\",\n            \"广州期货交易所\",\n            # 某些天网站没有数据，比如 20180912，此时返回\"暂无数据\"，但并不是网站被墙了\n            \"暂无数据\",\n        ]:\n            symbol = chinese_to_english(news)\n            record = pd.DataFrame(df_data[df_data[\"symbol\"] == string])\n            record.loc[:, \"symbol\"] = symbol\n            record[\"spot_price\"] = record[\"spot_price\"].astype(float)\n            if (\n                symbol == \"JD\"\n            ):  # 鸡蛋现货为元/公斤, 鸡蛋期货为元/500千克, 其余元/吨(http://www.100ppi.com/sf/)\n                record.loc[:, \"spot_price\"] = float(record[\"spot_price\"].iloc[0]) * 500\n            elif (\n                symbol == \"FG\"\n            ):  # 上表中现货单位为元/平方米, 期货单位为元/吨. 换算公式：元/平方米*80=元/吨(http://www.100ppi.com/sf/959.html)\n                record.loc[:, \"spot_price\"] = float(record[\"spot_price\"].iloc[0]) * 80\n            elif (\n                symbol == \"LH\"\n            ):  # 上表中现货单位为元/公斤, 期货单位为元/吨. 换算公式：元/公斤*1000=元/吨(http://www.100ppi.com/sf/959.html)\n                record.loc[:, \"spot_price\"] = float(record[\"spot_price\"].iloc[0]) * 1000\n            records = pd.concat([records, record])\n\n    # 20241129:如果某日没有数据，直接返回返回空表\n    if records.empty:\n        records = df_data.iloc[0:0]\n        records[\"near_basis\"] = pd.Series(dtype=\"float\")\n        records[\"dom_basis\"] = pd.Series(dtype=\"float\")\n        records[\"near_basis_rate\"] = pd.Series(dtype=\"float\")\n        records[\"dom_basis_rate\"] = pd.Series(dtype=\"float\")\n        records[\"date\"] = pd.Series(dtype=\"object\")\n        return records\n\n    records[[\"near_contract_price\", \"dominant_contract_price\", \"spot_price\"]] = (\n        records[[\"near_contract_price\", \"dominant_contract_price\", \"spot_price\"]\n        ].astype(\"float\")\n    )\n\n    records[\"near_contract\"] = records[\"near_contract\"].replace(\n        r\"[^0-9]*(\\d*)$\", r\"\\g<1>\", regex=True\n    )\n    records[\"dominant_contract\"] = records[\"dominant_contract\"].replace(\n        r\"[^0-9]*(\\d*)$\", r\"\\g<1>\", regex=True\n    )\n\n    records[\"near_month\"] = records.loc[:, \"near_contract\"]\n    records[\"near_contract\"] = records[\"symbol\"] + records.loc[\n        :, \"near_contract\"\n    ].astype(\"int\").astype(\"str\")\n    records[\"dominant_month\"] = records.loc[:, \"dominant_contract\"]\n    records[\"dominant_contract\"] = records[\"symbol\"] + records.loc[\n        :, \"dominant_contract\"\n    ].astype(\"int\").astype(\"str\")\n\n    records[\"near_contract\"] = records[\"near_contract\"].apply(\n        lambda x: (\n            x.lower()\n            if x[:-4]\n            in cons.market_exchange_symbols[\"shfe\"]\n            + cons.market_exchange_symbols[\"dce\"]\n            else x\n        )\n    )\n    records[\"dominant_contract\"] = records[\"dominant_contract\"].apply(\n        lambda x: (\n            x.lower()\n            if x[:-4]\n            in cons.market_exchange_symbols[\"shfe\"]\n            + cons.market_exchange_symbols[\"dce\"]\n            else x\n        )\n    )\n    records[\"near_contract\"] = records[\"near_contract\"].apply(\n        lambda x: (\n            x[:-4] + x[-3:] if x[:-4] in cons.market_exchange_symbols[\"czce\"] else x\n        )\n    )\n    records[\"dominant_contract\"] = records[\"dominant_contract\"].apply(\n        lambda x: (\n            x[:-4] + x[-3:] if x[:-4] in cons.market_exchange_symbols[\"czce\"] else x\n        )\n    )\n\n    records[\"near_basis\"] = records[\"near_contract_price\"] - records[\"spot_price\"]\n    records[\"dom_basis\"] = records[\"dominant_contract_price\"] - records[\"spot_price\"]\n    records[\"near_basis_rate\"] = (\n        records[\"near_contract_price\"] / records[\"spot_price\"] - 1\n    )\n    records[\"dom_basis_rate\"] = (\n        records[\"dominant_contract_price\"] / records[\"spot_price\"] - 1\n    )\n    # records.loc[:, \"date\"] = date.strftime(\"%Y%m%d\")\n    records.insert(0, \"date\", date.strftime(\"%Y%m%d\"))\n    records.reset_index(inplace=True, drop=True)\n    return records\n\n\ndef _join_head(content: pd.DataFrame) -> List:\n    headers = []\n    for s1, s2 in zip(content.iloc[0], content.iloc[1]):\n        if s1 != s2:\n            s = f\"{s1}{s2}\"\n        else:\n            s = s1\n        headers.append(s)\n    return headers\n\n\ndef futures_spot_price_previous(date: str = \"20240430\") -> pd.DataFrame:\n    \"\"\"\n    具体交易日大宗商品现货价格及相应基差\n    https://www.100ppi.com/sf/day-2017-09-12.html\n    :param date: 交易日; 历史日期\n    :type date: str\n    :return: 现货价格及相应基差\n    :rtype: pandas.DataFrame\n    \"\"\"\n    date = cons.convert_date(date) if date is not None else datetime.date.today()\n    if date < datetime.date(2011, 1, 4):\n        raise Exception(\n            \"数据源开始日期为 20110104, 请将获取数据时间点设置在 20110104 后\"\n        )\n    if date.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(f\"{date.strftime('%Y%m%d')}非交易日\")\n        return pd.DataFrame()\n    url = date.strftime(\"https://www.100ppi.com/sf2/day-%Y-%m-%d.html\")\n    headers = {\n        \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,\"\n        \"image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\"\n    }\n    content = pandas_read_html_link(url, headers=headers)\n    main = content[1]\n    # Header\n    header = _join_head(main)\n    # Values\n    values = main[main[4].str.endswith(\"%\")]\n    values.columns = header\n    # Basis\n    # 对于没有数据的天，xml文件中没有数据，所以content[2:-1]可能为空\n    if len(content[2:-1]) > 0:\n        basis = pd.concat(content[2:-1])\n    else:\n        basis = pd.DataFrame(columns=[\"主力合约基差\", \"主力合约基差(%)\"])\n\n    basis.columns = [\"主力合约基差\", \"主力合约基差(%)\"]\n    # 20241125(jasonudu)：因为部分日期，存在多个品种的现货价格，比如20151125的白糖、豆粕、豆油等，\n    # 如果用商品名来merge，会出现重复列名，所以改用index来merge\n    # basis[\"商品\"] = values[\"商品\"].tolist()\n    basis.index = values.index\n    basis = pd.merge(\n        values[[\"商品\", \"现货价格\", \"主力合约代码\", \"主力合约价格\"]],\n        basis,\n        left_index=True,\n        right_index=True,\n    )\n    basis = pd.merge(\n        basis,\n        values[\n            [\n                \"180日内主力基差最高\",\n                \"180日内主力基差最低\",\n                \"180日内主力基差平均\",\n            ]\n        ],\n        left_index=True,\n        right_index=True,\n    )\n    basis.columns = [\n        \"商品\",\n        \"现货价格\",\n        \"主力合约代码\",\n        \"主力合约价格\",\n        \"主力合约基差\",\n        \"主力合约变动百分比\",\n        \"180日内主力基差最高\",\n        \"180日内主力基差最低\",\n        \"180日内主力基差平均\",\n    ]\n    basis[\"主力合约变动百分比\"] = basis[\"主力合约变动百分比\"].str.strip(\"%\")\n    basis.reset_index(inplace=True, drop=True)\n    return basis\n\n\nif __name__ == \"__main__\":\n    futures_spot_price_daily_df = futures_spot_price_daily(\n        start_day=\"20260303\", end_day=\"20260303\", vars_list=['PL']\n    )\n    print(futures_spot_price_daily_df)\n\n    futures_spot_price_df = futures_spot_price(date=\"20260303\")\n    print(futures_spot_price_df)\n\n    futures_spot_price_previous_df = futures_spot_price_previous(date=\"20240430\")\n    print(futures_spot_price_previous_df)\n"
  },
  {
    "path": "akshare/futures/futures_comex_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/11/15 18:00\nDesc: 东方财富网-数据中心-期货期权-COMEX库存数据\nhttps://data.eastmoney.com/pmetal/comex/by.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef futures_comex_inventory(symbol: str = \"黄金\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-期货期权-COMEX库存数据\n    https://data.eastmoney.com/pmetal/comex/by.html\n    :param symbol: choice of {\"黄金\", \"白银\"}\n    :type symbol: str\n    :return: COMEX库存数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"黄金\": \"EMI00069026\",\n        \"白银\": \"EMI00069027\",\n    }\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_FUTUOPT_GOLDSIL\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f'(INDICATOR_ID1=\"{symbol_map[symbol]}\")(@STORAGE_TON<>\"NULL\")',\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], axis=0, ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df[\"index\"] + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"REPORT_DATE\": \"日期\",\n            \"INDICATOR_NAME\": \"-\",\n            \"INDICATOR_ID1\": \"-\",\n            \"STORAGE_TON\": f\"COMEX{symbol}库存量-吨\",\n            \"STORAGE_OUNCE\": f\"COMEX{symbol}库存量-盎司\",\n            \"INDICATOR_ID2\": \"-\",\n            \"NETPOSITION_TON\": \"-\",\n            \"NETPOSITION_OUNCE\": \"-\",\n            \"NETPOSITION_DOLLAR\": \"-\",\n            \"INDICATOR_ID3\": \"-\",\n            \"OPENPOSI_STOCK\": \"-\",\n            \"OPENPOSTOCK_WECHANGE\": \"-\",\n            \"OPENPOSI_STOCK_SUM\": \"-\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"序号\",\n            \"日期\",\n            f\"COMEX{symbol}库存量-吨\",\n            f\"COMEX{symbol}库存量-盎司\",\n        ]\n    ]\n    big_df[f\"COMEX{symbol}库存量-吨\"] = pd.to_numeric(\n        big_df[f\"COMEX{symbol}库存量-吨\"], errors=\"coerce\"\n    )\n    big_df[f\"COMEX{symbol}库存量-盎司\"] = pd.to_numeric(\n        big_df[f\"COMEX{symbol}库存量-盎司\"], errors=\"coerce\"\n    )\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df.sort_values([\"日期\"], inplace=True, ignore_index=True)\n    big_df[\"序号\"] = range(1, len(big_df) + 1)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    futures_comex_inventory_df = futures_comex_inventory(symbol=\"黄金\")\n    print(futures_comex_inventory_df)\n"
  },
  {
    "path": "akshare/futures/futures_comm_ctp.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/7/6 18:00\nDesc: openctp 期货交易费用参照表\nhttp://openctp.cn/fees.html\n\"\"\"\n\nfrom datetime import datetime\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef futures_fees_info() -> pd.DataFrame:\n    \"\"\"\n    openctp 期货交易费用参照表\n    http://openctp.cn/fees.html\n    :return: 期货交易费用参照表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://openctp.cn/fees.html\"\n    r = requests.get(url)\n    r.encoding = \"utf-8\"\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    datetime_str = soup.find(\"p\").string.strip(\"Generated at \").strip(\".\")\n    datetime_raw = datetime.strptime(datetime_str, \"%Y-%m-%d %H:%M:%S\")\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df[\"更新时间\"] = datetime_raw.strftime(\"%Y-%m-%d %H:%M:%S\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_fees_info_df = futures_fees_info()\n    print(futures_fees_info_df)\n"
  },
  {
    "path": "akshare/futures/futures_comm_js.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/2/22 15:45\nDesc: 金十数据-期货手续费\nhttps://www.jin10.com/\n\"\"\"\nimport json\n\nimport pandas as pd\nimport requests\n\n\ndef futures_comm_js(date: str = \"20260213\") -> pd.DataFrame:\n    \"\"\"\n    金十财经-期货手续费\n    https://www.jin10.com/\n    :param date: 日期; 格式为 YYYYMMDD，例如 \"20250213\"\n    :type date: str\n    :return: 期货手续费数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n                      \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"fiXF2nOnDycGutVA\",\n        \"x-version\": \"1.0\",\n        \"referer\": \"https://www.jin10.com/\",\n        \"origin\": \"https://www.jin10.com\",\n    }\n    url = \"https://mp-api.jin10.com/api/dynamic-data/child\"\n    formatted_date = \"-\".join([date[:4], date[4:6], date[6:]])\n    params = {\n        \"tb_name\": \"_vir_26\",\n        \"search\": json.dumps({\"range,date\": f\"{formatted_date},{formatted_date}\", \"status\": 1}),\n        \"order\": \"date,desc\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df = temp_df.rename(\n        columns={\n            \"date\": \"日期\",\n            \"heyue_name\": \"合约品种\",\n            \"heyue_code\": \"合约代码\",\n            \"pub_date_commission\": \"手续费公布时间\",\n            \"pub_date_price\": \"价格公布时间\",\n            \"heyue_price\": \"现价\",\n            \"up_limit_num\": \"涨停板\",\n            \"down_limit_num\": \"跌停板\",\n            \"buy_ratio\": \"保证金/买开\",\n            \"sell_ratio\": \"保证金/卖开\",\n            \"per_lot_price\": \"保证金/每手\",\n            \"per_ratio\": \"每手跳数\",\n            \"buy_commission\": \"开仓\",\n            \"sell_yesterday_commission\": \"平昨\",\n            \"sell_cur_commission\": \"平今\",\n            \"per_commission_price\": \"每跳毛利\",\n            \"per_net_profit\": \"每跳净利\",\n            \"jys\": \"交易所\",\n        }\n    )\n    temp_df = temp_df.drop(\n        columns=[\"id\", \"status\", \"created_at\", \"updated_at\", \"_date\", \"_pub_date_commission\", \"_pub_date_price\"],\n        errors=\"ignore\")\n    temp_df['日期'] = pd.to_datetime(temp_df['日期'], errors=\"coerce\").dt.date\n    temp_df['现价'] = pd.to_numeric(temp_df['现价'], errors=\"coerce\")\n    temp_df['涨停板'] = pd.to_numeric(temp_df['涨停板'], errors=\"coerce\")\n    temp_df['跌停板'] = pd.to_numeric(temp_df['跌停板'], errors=\"coerce\")\n    temp_df['每手跳数'] = pd.to_numeric(temp_df['每手跳数'], errors=\"coerce\")\n    temp_df['每跳毛利'] = pd.to_numeric(temp_df['每跳毛利'], errors=\"coerce\")\n    temp_df['每跳净利'] = pd.to_numeric(temp_df['每跳净利'], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_comm_js_df = futures_comm_js(date=\"20260213\")\n    print(futures_comm_js_df)\n"
  },
  {
    "path": "akshare/futures/futures_comm_qihuo.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/11 17:00\nDesc: 九期网-期货手续费\nhttps://www.9qihuo.com/qihuoshouxufei\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef _futures_comm_qihuo_process(df: pd.DataFrame, name: str = None) -> pd.DataFrame:\n    \"\"\"\n    期货手续费数据细节处理函数\n    https://www.9qihuo.com/qihuoshouxufei\n    :param df: 获取到的 pandas.DataFrame 数据\n    :type df: pandas.DataFrame\n    :param name: 交易所名称\n    :type name: str\n    :return: 处理后的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import urllib3\n\n    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)\n    common_temp_df = df.copy()\n    common_temp_df[\"合约名称\"] = (\n        common_temp_df[\"合约品种\"].str.split(\"(\", expand=True).iloc[:, 0].str.strip()\n    )\n    common_temp_df[\"合约代码\"] = (\n        common_temp_df[\"合约品种\"].str.split(\"(\", expand=True).iloc[:, 1].str.strip(\")\")\n    )\n    common_temp_df[\"涨停板\"] = (\n        common_temp_df[\"涨/跌停板\"].str.split(\"/\", expand=True).iloc[:, 0].str.strip()\n    )\n    common_temp_df[\"跌停板\"] = (\n        common_temp_df[\"涨/跌停板\"].str.split(\"/\", expand=True).iloc[:, 1].str.strip()\n    )\n    common_temp_df[\"保证金-买开\"] = common_temp_df[\"保证金-买开\"].str.strip(\"%\")\n    common_temp_df[\"保证金-卖开\"] = common_temp_df[\"保证金-卖开\"].str.strip(\"%\")\n    common_temp_df[\"保证金-每手\"] = common_temp_df[\"保证金-保证金/每手\"].str.strip(\"元\")\n    common_temp_df[\"手续费\"] = common_temp_df[\"手续费(开+平)\"].str.strip(\"元\")\n    try:\n        temp_df_ratio = (\n            common_temp_df[\"手续费标准-开仓\"][\n                common_temp_df[\"手续费标准-开仓\"].str.contains(\"万分之\")\n            ]\n            .str.split(\"/\", expand=True)\n            .iloc[:, 0]\n            .astype(float)\n            / 10000\n        )\n    except IndexError:\n        temp_df_ratio = pd.NA\n    temp_df_yuan = common_temp_df[\"手续费标准-开仓\"][\n        common_temp_df[\"手续费标准-开仓\"].str.contains(\"元\")\n    ]\n    common_temp_df[\"手续费标准-开仓-万分之\"] = temp_df_ratio\n    common_temp_df[\"手续费标准-开仓-元\"] = temp_df_yuan.str.strip(\"元\")\n    try:\n        temp_df_ratio = (\n            common_temp_df[\"手续费标准-平昨\"][\n                common_temp_df[\"手续费标准-平昨\"].str.contains(\"万分之\")\n            ]\n            .str.split(\"/\", expand=True)\n            .iloc[:, 0]\n            .astype(float)\n            / 10000\n        )\n    except IndexError:\n        temp_df_ratio = pd.NA\n    temp_df_yuan = common_temp_df[\"手续费标准-平昨\"][\n        common_temp_df[\"手续费标准-平昨\"].str.contains(\"元\")\n    ]\n    common_temp_df[\"手续费标准-平昨-万分之\"] = temp_df_ratio\n    common_temp_df[\"手续费标准-平昨-元\"] = temp_df_yuan.str.strip(\"元\")\n    try:\n        temp_df_ratio = (\n            common_temp_df[\"手续费标准-平今\"][\n                common_temp_df[\"手续费标准-平今\"].str.contains(\"万分之\")\n            ]\n            .str.split(\"/\", expand=True)\n            .iloc[:, 0]\n            .astype(float)\n            / 10000\n        )\n    except IndexError:\n        temp_df_ratio = pd.NA\n    temp_df_yuan = common_temp_df[\"手续费标准-平今\"][\n        common_temp_df[\"手续费标准-平今\"].str.contains(\"元\")\n    ]\n    common_temp_df[\"手续费标准-平今-万分之\"] = temp_df_ratio\n    common_temp_df[\"手续费标准-平今-元\"] = temp_df_yuan.str.strip(\"元\")\n    del common_temp_df[\"手续费标准-开仓\"]\n    del common_temp_df[\"手续费标准-平昨\"]\n    del common_temp_df[\"手续费标准-平今\"]\n    del common_temp_df[\"合约品种\"]\n    del common_temp_df[\"涨/跌停板\"]\n    del common_temp_df[\"手续费(开+平)\"]\n    del common_temp_df[\"保证金-保证金/每手\"]\n    common_temp_df[\"交易所名称\"] = name\n    common_temp_df = common_temp_df[\n        [\n            \"交易所名称\",\n            \"合约名称\",\n            \"合约代码\",\n            \"现价\",\n            \"涨停板\",\n            \"跌停板\",\n            \"保证金-买开\",\n            \"保证金-卖开\",\n            \"保证金-每手\",\n            \"手续费标准-开仓-万分之\",\n            \"手续费标准-开仓-元\",\n            \"手续费标准-平昨-万分之\",\n            \"手续费标准-平昨-元\",\n            \"手续费标准-平今-万分之\",\n            \"手续费标准-平今-元\",\n            \"每跳毛利\",\n            \"手续费\",\n            \"每跳净利\",\n            \"备注\",\n        ]\n    ]\n    common_temp_df[\"现价\"] = pd.to_numeric(common_temp_df[\"现价\"])\n    common_temp_df[\"涨停板\"] = pd.to_numeric(common_temp_df[\"涨停板\"])\n    common_temp_df[\"跌停板\"] = pd.to_numeric(common_temp_df[\"跌停板\"])\n    common_temp_df[\"保证金-买开\"] = pd.to_numeric(common_temp_df[\"保证金-买开\"])\n    common_temp_df[\"保证金-卖开\"] = pd.to_numeric(common_temp_df[\"保证金-卖开\"])\n    common_temp_df[\"保证金-每手\"] = pd.to_numeric(common_temp_df[\"保证金-每手\"])\n    # common_temp_df[\"手续费标准-开仓-元\"] = pd.to_numeric(common_temp_df[\"手续费标准-开仓-元\"])\n    # common_temp_df[\"手续费标准-平昨-元\"] = pd.to_numeric(common_temp_df[\"手续费标准-平昨-元\"])\n    # common_temp_df[\"手续费标准-平今-元\"] = pd.to_numeric(common_temp_df[\"手续费标准-平今-元\"])\n    common_temp_df[\"每跳毛利\"] = pd.to_numeric(common_temp_df[\"每跳毛利\"])\n    common_temp_df[\"手续费\"] = pd.to_numeric(common_temp_df[\"手续费\"])\n    common_temp_df[\"每跳净利\"] = pd.to_numeric(common_temp_df[\"每跳净利\"])\n    session = requests.Session()\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/125.0.0.0 Safari/537.36\",\n        \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Connection\": \"keep-alive\",\n        \"Referer\": \"https://www.9qihuo.com/\",\n        \"Sec-Fetch-Dest\": \"document\",\n        \"Sec-Fetch-Mode\": \"navigate\",\n        \"Sec-Fetch-Site\": \"same-origin\",\n        \"Sec-Fetch-User\": \"?1\",\n        \"Upgrade-Insecure-Requests\": \"1\",\n        \"Cache-Control\": \"max-age=0\",\n    }\n    session.get(\"https://www.9qihuo.com/\", headers=headers, timeout=10)\n    r = session.get(\n        \"https://www.9qihuo.com/qihuoshouxufei\", headers=headers, timeout=10\n    )\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    raw_date_text = soup.find(name=\"a\", attrs={\"id\": \"dlink\"}).previous\n    comm_update_time = raw_date_text.split(\"，\")[0].strip(\"（手续费更新时间：\")\n    price_update_time = (\n        raw_date_text.split(\"，\")[1].strip(\"价格更新时间：\").strip(\"。）\")\n    )\n    common_temp_df[\"手续费更新时间\"] = comm_update_time\n    common_temp_df[\"价格更新时间\"] = price_update_time\n    return common_temp_df\n\n\ndef futures_comm_info(symbol: str = \"所有\") -> pd.DataFrame:\n    \"\"\"\n    九期网-期货手续费\n    https://www.9qihuo.com/qihuoshouxufei\n    :param symbol: choice of {\"所有\", \"上海期货交易所\", \"大连商品交易所\", \"郑州商品交易所\", \"上海国际能源交易中心\", \"中国金融期货交易所\", \"广州期货交易所\"}\n    :type symbol: str\n    :return: 期货手续费\n    :rtype: pandas.DataFrame\n    \"\"\"\n    session = requests.Session()\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/125.0.0.0 Safari/537.36\",\n        \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Connection\": \"keep-alive\",\n        \"Referer\": \"https://www.9qihuo.com/\",\n        \"Sec-Fetch-Dest\": \"document\",\n        \"Sec-Fetch-Mode\": \"navigate\",\n        \"Sec-Fetch-Site\": \"same-origin\",\n        \"Sec-Fetch-User\": \"?1\",\n        \"Upgrade-Insecure-Requests\": \"1\",\n        \"Cache-Control\": \"max-age=0\",\n    }\n    session.get(\"https://www.9qihuo.com/\", headers=headers, timeout=10)\n    r = session.get(\n        \"https://www.9qihuo.com/qihuoshouxufei\", headers=headers, timeout=10\n    )\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df.columns = [\n        \"合约品种\",\n        \"现价\",\n        \"涨/跌停板\",\n        \"保证金-买开\",\n        \"保证金-卖开\",\n        \"保证金-保证金/每手\",\n        \"手续费标准-开仓\",\n        \"手续费标准-平昨\",\n        \"手续费标准-平今\",\n        \"每跳毛利\",\n        \"手续费(开+平)\",\n        \"每跳净利\",\n        \"备注\",\n        \"-\",\n        \"-\",\n    ]\n    df_0 = temp_df[temp_df[\"合约品种\"].str.contains(\"上海期货交易所\")].index.values[0]\n    df_1 = temp_df[temp_df[\"合约品种\"].str.contains(\"大连商品交易所\")].index.values[0]\n    df_2 = temp_df[temp_df[\"合约品种\"].str.contains(\"郑州商品交易所\")].index.values[0]\n    df_3 = temp_df[\n        temp_df[\"合约品种\"].str.contains(\"上海国际能源交易中心\")\n    ].index.values[0]\n    df_4 = temp_df[temp_df[\"合约品种\"].str.contains(\"广州期货交易所\")].index.values[0]\n    df_5 = temp_df[temp_df[\"合约品种\"].str.contains(\"中国金融期货交易所\")].index.values[\n        0\n    ]\n    shfe_df = temp_df.iloc[df_0 + 3 : df_1, :].reset_index(drop=True)\n    dce_df = temp_df.iloc[df_1 + 3 : df_2, :].reset_index(drop=True)\n    czce_df = temp_df.iloc[df_2 + 3 : df_3, :].reset_index(drop=True)\n    ine_df = temp_df.iloc[df_3 + 3 : df_4, :].reset_index(drop=True)\n    gfex_df = temp_df.iloc[df_4 + 3 : df_5, :].reset_index(drop=True)\n    cffex_df = temp_df.iloc[df_5 + 3 :, :].reset_index(drop=True)\n    if symbol == \"上海期货交易所\":\n        return _futures_comm_qihuo_process(shfe_df, name=\"上海期货交易所\")\n    elif symbol == \"大连商品交易所\":\n        return _futures_comm_qihuo_process(dce_df, name=\"大连商品交易所\")\n    elif symbol == \"郑州商品交易所\":\n        return _futures_comm_qihuo_process(czce_df, name=\"郑州商品交易所\")\n    elif symbol == \"上海国际能源交易中心\":\n        return _futures_comm_qihuo_process(ine_df, name=\"上海国际能源交易中心\")\n    elif symbol == \"广州期货交易所\":\n        return _futures_comm_qihuo_process(gfex_df, name=\"广州期货交易所\")\n    elif symbol == \"中国金融期货交易所\":\n        return _futures_comm_qihuo_process(cffex_df, name=\"中国金融期货交易所\")\n    else:\n        big_df = pd.DataFrame()\n        big_df = pd.concat(\n            objs=[big_df, _futures_comm_qihuo_process(shfe_df, name=\"上海期货交易所\")],\n            ignore_index=True,\n        )\n        big_df = pd.concat(\n            objs=[big_df, _futures_comm_qihuo_process(dce_df, name=\"大连商品交易所\")],\n            ignore_index=True,\n        )\n        big_df = pd.concat(\n            objs=[big_df, _futures_comm_qihuo_process(czce_df, name=\"郑州商品交易所\")],\n            ignore_index=True,\n        )\n        big_df = pd.concat(\n            objs=[\n                big_df,\n                _futures_comm_qihuo_process(ine_df, name=\"上海国际能源交易中心\"),\n            ],\n            ignore_index=True,\n        )\n        big_df = pd.concat(\n            objs=[big_df, _futures_comm_qihuo_process(gfex_df, name=\"广州期货交易所\")],\n            ignore_index=True,\n        )\n        big_df = pd.concat(\n            objs=[\n                big_df,\n                _futures_comm_qihuo_process(cffex_df, name=\"中国金融期货交易所\"),\n            ],\n            ignore_index=True,\n        )\n        return big_df\n\n\nif __name__ == \"__main__\":\n    futures_comm_info_df = futures_comm_info(symbol=\"所有\")\n    print(futures_comm_info_df)\n"
  },
  {
    "path": "akshare/futures/futures_contract_detail.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/10/30 17:00\nDesc: 查询期货合约当前时刻的详情\nhttps://finance.sina.com.cn/futures/quotes/V2101.shtml\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef futures_contract_detail(symbol: str = \"AP2101\") -> pd.DataFrame:\n    \"\"\"\n    查询期货合约详情\n    https://finance.sina.com.cn/futures/quotes/V2101.shtml\n    :param symbol: 合约\n    :type symbol: str\n    :return: 期货合约详情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://finance.sina.com.cn/futures/quotes/{symbol}.shtml\"\n    r = requests.get(url)\n    r.encoding = \"gb2312\"\n    temp_df = pd.read_html(StringIO(r.text))[6]\n    data_one = temp_df.iloc[:, :2]\n    data_one.columns = [\"item\", \"value\"]\n    data_two = temp_df.iloc[:, 2:4]\n    data_two.columns = [\"item\", \"value\"]\n    data_three = temp_df.iloc[:, 4:]\n    data_three.columns = [\"item\", \"value\"]\n    temp_df = pd.concat(\n        objs=[data_one, data_two, data_three], axis=0, ignore_index=True\n    )\n    return temp_df\n\n\ndef futures_contract_detail_em(symbol: str = \"v2602F\") -> pd.DataFrame:\n    \"\"\"\n    查询期货合约详情\n    https://quote.eastmoney.com/qihuo/v2602F.html\n    :param symbol: 合约\n    :type symbol: str\n    :return: 期货合约详情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://quote.eastmoney.com/qihuo/{symbol}.html\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    url_text = (\n        soup.find(name=\"div\", attrs={\"class\": \"sidertabbox_tsplit\"})\n        .find(name=\"div\", attrs={\"class\": \"onet\"})\n        .find(\"a\")[\"href\"]\n    )\n    inner_symbol = url_text.split(\"#\")[-1].strip(\"futures_\")\n    url = f\"https://futsse-static.eastmoney.com/redis?msgid={inner_symbol}_info\"\n    r = requests.get(url)\n    data_json = r.json()\n    temp_df = pd.DataFrame.from_dict(data_json, orient=\"index\")\n    column_mapping = {\n        \"vname\": \"交易品种\",\n        \"vcode\": \"交易代码\",\n        \"jydw\": \"交易单位\",\n        \"bjdw\": \"报价单位\",\n        \"market\": \"上市交易所\",\n        \"zxbddw\": \"最小变动价格\",\n        \"zdtbfd\": \"跌涨停板幅度\",\n        \"hyjgyf\": \"合约交割月份\",\n        \"jysj\": \"交易时间\",\n        \"zhjyr\": \"最后交易日\",\n        \"zhjgr\": \"最后交割日\",\n        \"jgpj\": \"交割品级\",\n        \"zcjybzj\": \"最初交易保证金\",\n        \"jgfs\": \"交割方式\",\n    }\n    temp_df.rename(index=column_mapping, inplace=True)\n    temp_df.reset_index(drop=False, inplace=True)\n    temp_df.columns = [\"item\", \"value\"]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_contract_detail_df = futures_contract_detail(symbol=\"V2101\")\n    print(futures_contract_detail_df)\n\n    futures_contract_detail_em_df = futures_contract_detail_em(symbol=\"l2602F\")\n    print(futures_contract_detail_em_df)\n"
  },
  {
    "path": "akshare/futures/futures_daily_bar.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/11/30 18:00\nDesc: 期货日线行情\n\"\"\"\n\nimport datetime\nimport json\nimport re\nimport zipfile\nfrom io import BytesIO, StringIO\n\nimport numpy as np\nimport pandas as pd\nimport requests\n\nfrom akshare.futures import cons\nfrom akshare.futures.requests_fun import requests_link\n\ncalendar = cons.get_calendar()\n\n\ndef _futures_daily_czce(\n    date: str = \"20100824\", dataset: str = \"datahistory2010\"\n) -> pd.DataFrame:\n    \"\"\"\n    郑州商品交易所-交易数据-历史行情下载\n    http://www.czce.com.cn/cn/jysj/lshqxz/H770319index_1.htm\n    :param date: 需要的日期\n    :type date: str\n    :param dataset: 数据集的名称; 此处只需要替换 datahistory2010 中的 2010 即可\n    :type dataset: str\n    :return: 指定日期的所有品种行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"http://www.czce.com.cn/cn/exchange/{dataset}.zip\"\n    r = requests.get(url)\n    with zipfile.ZipFile(BytesIO(r.content)) as file:\n        with file.open(f\"{dataset}.txt\") as my_file:\n            data = my_file.read().decode(\"gb2312\")\n            data_df = pd.read_table(StringIO(data), sep=r\"|\", header=1)\n            data_df.columns = [item.strip() for item in data_df.columns]\n            data_df.dropna(axis=1, inplace=True)\n            for column in data_df.columns:\n                try:\n                    data_df[column] = data_df[column].str.strip(\"\\t\")\n                    data_df[column] = data_df[column].str.replace(\",\", \"\")\n                except:  # noqa: E722\n                    data_df[column] = data_df[column]\n    data_df[\"昨结算\"] = pd.to_numeric(data_df[\"昨结算\"])\n    data_df[\"今开盘\"] = pd.to_numeric(data_df[\"今开盘\"])\n    data_df[\"最高价\"] = pd.to_numeric(data_df[\"最高价\"])\n    data_df[\"最低价\"] = pd.to_numeric(data_df[\"最低价\"])\n    data_df[\"今收盘\"] = pd.to_numeric(data_df[\"今收盘\"])\n    data_df[\"今结算\"] = pd.to_numeric(data_df[\"今结算\"])\n    data_df[\"涨跌1\"] = pd.to_numeric(data_df[\"涨跌1\"])\n    data_df[\"涨跌2\"] = pd.to_numeric(data_df[\"涨跌2\"])\n    data_df[\"成交量(手)\"] = pd.to_numeric(data_df[\"成交量(手)\"])\n    data_df[\"空盘量\"] = pd.to_numeric(data_df[\"空盘量\"])\n    data_df[\"增减量\"] = pd.to_numeric(data_df[\"增减量\"])\n    data_df[\"成交额(万元)\"] = pd.to_numeric(data_df[\"成交额(万元)\"])\n    data_df[\"交割结算价\"] = pd.to_numeric(data_df[\"交割结算价\"])\n    data_df[\"交易日期\"] = pd.to_datetime(data_df[\"交易日期\"])\n    data_df.columns = [\n        \"date\",\n        \"symbol\",\n        \"pre_settle\",\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n        \"settle\",\n        \"-\",\n        \"-\",\n        \"volume\",\n        \"open_interest\",\n        \"-\",\n        \"turnover\",\n        \"-\",\n    ]\n    variety_list = [\n        re.compile(r\"[a-zA-Z_]+\").findall(item)[0] for item in data_df[\"symbol\"]\n    ]\n    data_df[\"variety\"] = variety_list\n    data_df = data_df[\n        [\n            \"symbol\",\n            \"date\",\n            \"open\",\n            \"high\",\n            \"low\",\n            \"close\",\n            \"volume\",\n            \"open_interest\",\n            \"turnover\",\n            \"settle\",\n            \"pre_settle\",\n            \"variety\",\n        ]\n    ]\n    temp_df = data_df[data_df[\"date\"] == pd.Timestamp(date)].copy()\n    temp_df[\"date\"] = date\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\ndef get_cffex_daily(date: str = \"20100416\") -> pd.DataFrame:\n    \"\"\"\n    中国金融期货交易所-日频率交易数据\n    http://www.cffex.com.cn/rtj/\n    :param date: 交易日; 数据开始时间为 20100416\n    :type date: str\n    :return: 日频率交易数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    day = cons.convert_date(date) if date is not None else datetime.date.today()\n    if day.strftime(\"%Y%m%d\") not in calendar:\n        # warnings.warn(\"%s非交易日\" % day.strftime(\"%Y%m%d\"))\n        return pd.DataFrame()\n    url = f\"http://www.cffex.com.cn/sj/historysj/{date[:-2]}/zip/{date[:-2]}.zip\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/108.0.0.0 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    try:\n        with zipfile.ZipFile(BytesIO(r.content)) as file:\n            with file.open(f\"{date}_1.csv\") as my_file:\n                data = my_file.read().decode(\"gb2312\")\n                data_df = pd.read_csv(StringIO(data))\n    except:  # noqa: E722\n        return pd.DataFrame()\n    data_df = data_df[data_df[\"合约代码\"] != \"小计\"]\n    data_df = data_df[data_df[\"合约代码\"] != \"合计\"]\n    data_df = data_df[~data_df[\"合约代码\"].str.contains(\"IO\")]\n    data_df = data_df[~data_df[\"合约代码\"].str.contains(\"MO\")]\n    data_df = data_df[~data_df[\"合约代码\"].str.contains(\"HO\")]\n    data_df.reset_index(inplace=True, drop=True)\n    data_df[\"合约代码\"] = data_df[\"合约代码\"].str.strip()\n    symbol_list = data_df[\"合约代码\"].to_list()\n    variety_list = [re.compile(r\"[a-zA-Z_]+\").findall(item)[0] for item in symbol_list]\n    if data_df.shape[1] == 15:\n        data_df.columns = [\n            \"symbol\",\n            \"open\",\n            \"high\",\n            \"low\",\n            \"volume\",\n            \"turnover\",\n            \"open_interest\",\n            \"_\",\n            \"close\",\n            \"settle\",\n            \"pre_settle\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n    else:\n        data_df.columns = [\n            \"symbol\",\n            \"open\",\n            \"high\",\n            \"low\",\n            \"volume\",\n            \"turnover\",\n            \"open_interest\",\n            \"_\",\n            \"close\",\n            \"settle\",\n            \"pre_settle\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n    data_df[\"date\"] = date\n    data_df[\"variety\"] = variety_list\n    data_df = data_df[\n        [\n            \"symbol\",\n            \"date\",\n            \"open\",\n            \"high\",\n            \"low\",\n            \"close\",\n            \"volume\",\n            \"open_interest\",\n            \"turnover\",\n            \"settle\",\n            \"pre_settle\",\n            \"variety\",\n        ]\n    ]\n    return data_df\n\n\ndef get_gfex_daily(date: str = \"20221223\") -> pd.DataFrame:\n    \"\"\"\n    广州期货交易所-日频率-量价数据\n    广州期货交易所: 工业硅(上市时间: 20221222)\n    http://www.gfex.com.cn/gfex/rihq/hqsj_tjsj.shtml\n    :param date: 日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象，默认为当前交易日\n    :type date: str or datetime.date\n    :return: 广州期货交易所-日频率-量价数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    day = cons.convert_date(date) if date is not None else datetime.date.today()\n    if day.strftime(\"%Y%m%d\") not in calendar:\n        # warnings.warn(f\"{day.strftime('%Y%m%d')}非交易日\")\n        return pd.DataFrame()\n    url = \"http://www.gfex.com.cn/u/interfacesWebTiDayQuotes/loadList\"\n    payload = {\"trade_date\": date, \"trade_type\": \"0\"}\n    headers = {\n        \"Accept\": \"application/json, text/javascript, */*; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"32\",\n        \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\n        \"Host\": \"www.gfex.com.cn\",\n        \"Origin\": \"http://www.gfex.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"http://www.gfex.com.cn/gfex/rihq/hqsj_tjsj.shtml\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/108.0.0.0 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n        \"content-type\": \"application/x-www-form-urlencoded\",\n    }\n    r = requests.post(url, data=payload, headers=headers)\n    try:\n        data_json = r.json()\n    except:  # noqa: E722\n        return pd.DataFrame()\n    result_df = pd.DataFrame(data_json[\"data\"])\n    result_df = result_df[~result_df[\"variety\"].str.contains(\"小计\")]\n    result_df = result_df[~result_df[\"variety\"].str.contains(\"总计\")]\n    result_df[\"symbol\"] = (\n        result_df[\"varietyOrder\"].str.upper() + result_df[\"delivMonth\"]\n    )\n    result_df[\"date\"] = date\n    result_df[\"open\"] = pd.to_numeric(result_df[\"open\"], errors=\"coerce\")\n    result_df[\"high\"] = pd.to_numeric(result_df[\"high\"], errors=\"coerce\")\n    result_df[\"low\"] = pd.to_numeric(result_df[\"low\"], errors=\"coerce\")\n    result_df[\"close\"] = pd.to_numeric(result_df[\"close\"], errors=\"coerce\")\n    result_df[\"volume\"] = pd.to_numeric(result_df[\"volumn\"], errors=\"coerce\")\n    result_df[\"open_interest\"] = pd.to_numeric(\n        result_df[\"openInterest\"], errors=\"coerce\"\n    )\n    result_df[\"turnover\"] = pd.to_numeric(result_df[\"turnover\"], errors=\"coerce\")\n    result_df[\"settle\"] = pd.to_numeric(result_df[\"clearPrice\"], errors=\"coerce\")\n    result_df[\"pre_settle\"] = pd.to_numeric(result_df[\"lastClear\"], errors=\"coerce\")\n    result_df[\"variety\"] = result_df[\"varietyOrder\"].str.upper()\n    result_df = result_df[\n        [\n            \"symbol\",\n            \"date\",\n            \"open\",\n            \"high\",\n            \"low\",\n            \"close\",\n            \"volume\",\n            \"open_interest\",\n            \"turnover\",\n            \"settle\",\n            \"pre_settle\",\n            \"variety\",\n        ]\n    ]\n    return result_df\n\n\ndef get_ine_daily(date: str = \"20241129\") -> pd.DataFrame:\n    \"\"\"\n    上海国际能源交易中心-日频率-量价数据\n    上海国际能源交易中心: 原油期货(上市时间: 20180326); 20号胶期货(上市时间: 20190812)\n    trade_price: https://www.ine.cn/statements/daily/?paramid=kx\n    trade_note: https://www.ine.cn/data/datanote.dat\n    :param date: 日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象，默认为当前交易日\n    :type date: str or datetime.date\n    :return: 上海国际能源交易中心-日频率-量价数据\n    :rtype: pandas.DataFrame or None\n    \"\"\"\n    day = cons.convert_date(date) if date is not None else datetime.date.today()\n    if day.strftime(\"%Y%m%d\") not in calendar:\n        # warnings.warn(f\"{day.strftime('%Y%m%d')}非交易日\")\n        return pd.DataFrame()\n    url = f\"https://www.ine.cn/data/tradedata/future/dailydata/kx{day.strftime('%Y%m%d')}.dat\"\n    r = requests.get(url, headers=cons.shfe_headers)\n    result_df = pd.DataFrame()\n    try:\n        data_json = r.json()\n    except:  # noqa: E722\n        return pd.DataFrame()\n    temp_df = pd.DataFrame(data_json[\"o_curinstrument\"]).iloc[:-1, :]\n    temp_df = temp_df[temp_df[\"DELIVERYMONTH\"] != \"小计\"]\n    temp_df = temp_df[~temp_df[\"PRODUCTNAME\"].str.contains(\"总计\")]\n    try:\n        result_df[\"symbol\"] = (\n            temp_df[\"PRODUCTGROUPID\"].str.upper().str.strip() + temp_df[\"DELIVERYMONTH\"]\n        )\n    except:  # noqa: E722\n        result_df[\"symbol\"] = (\n            temp_df[\"PRODUCTID\"]\n            .str.upper()\n            .str.strip()\n            .str.split(\"_\", expand=True)\n            .iloc[:, 0]\n            + temp_df[\"DELIVERYMONTH\"]\n        )\n    result_df[\"date\"] = day.strftime(\"%Y%m%d\")\n    result_df[\"open\"] = temp_df[\"OPENPRICE\"]\n    result_df[\"high\"] = temp_df[\"HIGHESTPRICE\"]\n    result_df[\"low\"] = temp_df[\"LOWESTPRICE\"]\n    result_df[\"close\"] = temp_df[\"CLOSEPRICE\"]\n    result_df[\"volume\"] = temp_df[\"VOLUME\"]\n    result_df[\"open_interest\"] = temp_df[\"OPENINTEREST\"]\n    try:\n        result_df[\"turnover\"] = temp_df[\"TURNOVER\"]\n    except:  # noqa: E722\n        result_df[\"turnover\"] = 0\n    result_df[\"settle\"] = temp_df[\"SETTLEMENTPRICE\"]\n    result_df[\"pre_settle\"] = temp_df[\"PRESETTLEMENTPRICE\"]\n    try:\n        result_df[\"variety\"] = temp_df[\"PRODUCTGROUPID\"].str.upper().str.strip()\n    except:  # noqa: E722\n        result_df[\"variety\"] = (\n            temp_df[\"PRODUCTID\"]\n            .str.upper()\n            .str.strip()\n            .str.split(\"_\", expand=True)\n            .iloc[:, 0]\n        )\n    result_df = result_df[result_df[\"symbol\"] != \"总计\"]\n    result_df = result_df[~result_df[\"symbol\"].str.contains(\"efp\")]\n    return result_df\n\n\ndef get_czce_daily(date: str = \"20050525\") -> pd.DataFrame:\n    \"\"\"\n    郑州商品交易所-日频率-量价数据\n    http://www.czce.com.cn/cn/jysj/mrhq/H770301index_1.htm\n    :param date: 日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date 对象，默认为当前交易日; 日期需要大于 20100824\n    :type date: str or datetime.date\n    :return: 郑州商品交易所-日频率-量价数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    day = cons.convert_date(date) if date is not None else datetime.date.today()\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/108.0.0.0 Safari/537.36\"\n    }\n    url = \"\"\n    if day.strftime(\"%Y%m%d\") not in calendar:\n        # warnings.warn(f\"{day.strftime('%Y%m%d')}非交易日\")\n        return pd.DataFrame()\n    if day > datetime.date(2010, 8, 24):\n        if day > datetime.date(2015, 11, 11):\n            u = cons.CZCE_DAILY_URL_3\n            url = u % (day.strftime(\"%Y\"), day.strftime(\"%Y%m%d\"))\n        elif day <= datetime.date(2015, 11, 11):\n            u = cons.CZCE_DAILY_URL_2\n            url = u % (day.strftime(\"%Y\"), day.strftime(\"%Y%m%d\"))\n        listed_columns = cons.CZCE_COLUMNS\n        output_columns = cons.OUTPUT_COLUMNS\n        try:\n            r = requests.get(url, headers=headers)\n            if datetime.date(2015, 11, 12) <= day <= datetime.date(2017, 12, 27):\n                html = str(r.content, encoding=\"gbk\")\n            else:\n                html = r.text\n        except requests.exceptions.HTTPError as reason:\n            if reason.response.status_code != 404:\n                print(\n                    cons.CZCE_DAILY_URL_3\n                    % (day.strftime(\"%Y\"), day.strftime(\"%Y%m%d\")),\n                    reason,\n                )\n            return pd.DataFrame()\n        if html.find(\"您的访问出错了\") >= 0 or html.find(\"无期权每日行情交易记录\") >= 0:\n            return pd.DataFrame()\n        html = [\n            i.replace(\" \", \"\").split(\"|\")\n            for i in html.split(\"\\n\")[:-3]\n            if i[0][0] != \"小\"\n        ]\n\n        if day > datetime.date(2015, 11, 11):\n            if html[1][0] not in [\"品种月份\", \"品种代码\", \"合约代码\"]:\n                return pd.DataFrame()\n            dict_data = list()\n            day_const = int(day.strftime(\"%Y%m%d\"))\n            for row in html[2:]:\n                m = cons.FUTURES_SYMBOL_PATTERN.match(row[0])\n                if not m:\n                    continue\n                row_dict = {\n                    \"date\": day_const,\n                    \"symbol\": row[0],\n                    \"variety\": m.group(1),\n                }\n                for i, field in enumerate(listed_columns):\n                    if row[i + 1] == \"\\r\" or row[i + 1] == \"\":\n                        row_dict[field] = 0.0\n                    elif field in [\n                        \"volume\",\n                        \"open_interest\",\n                        \"oi_chg\",\n                        \"exercise_volume\",\n                    ]:\n                        row[i + 1] = row[i + 1].replace(\",\", \"\")\n                        row_dict[field] = int(row[i + 1])\n                    else:\n                        row[i + 1] = row[i + 1].replace(\",\", \"\")\n                        row_dict[field] = float(row[i + 1])\n                dict_data.append(row_dict)\n            return pd.DataFrame(dict_data)[output_columns]\n        elif day <= datetime.date(2015, 11, 11):\n            dict_data = list()\n            day_const = int(day.strftime(\"%Y%m%d\"))\n            for row in html[1:]:\n                row = row[0].split(\",\")\n                m = cons.FUTURES_SYMBOL_PATTERN.match(row[0])\n                if not m:\n                    continue\n                row_dict = {\n                    \"date\": day_const,\n                    \"symbol\": row[0],\n                    \"variety\": m.group(1),\n                }\n                for i, field in enumerate(listed_columns):\n                    if row[i + 1] == \"\\r\":\n                        row_dict[field] = 0.0\n                    elif field in [\n                        \"volume\",\n                        \"open_interest\",\n                        \"oi_chg\",\n                        \"exercise_volume\",\n                    ]:\n                        row_dict[field] = int(float(row[i + 1]))\n                    else:\n                        row_dict[field] = float(row[i + 1])\n                dict_data.append(row_dict)\n            return pd.DataFrame(dict_data)[output_columns]\n\n    if day <= datetime.date(2010, 8, 24):\n        _futures_daily_czce_df = _futures_daily_czce(date)\n        return _futures_daily_czce_df\n\n\ndef get_shfe_daily(date: str = \"20220415\") -> pd.DataFrame:\n    \"\"\"\n    上海期货交易所-日频率-量价数据\n    https://tsite.shfe.com.cn/statements/dataview.html?paramid=kx\n    :param date: 日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象, 默认为当前交易日\n    :type date: str or datetime.date\n    :return: 上海期货交易所-日频率-量价数据\n    :rtype: pandas.DataFrame or None\n    上期所日交易数据(DataFrame):\n    symbol        合约代码\n    date          日期\n    open          开盘价\n    high          最高价\n    low           最低价\n    close         收盘价\n    volume        成交量\n    open_interest 持仓量\n    turnover      成交额\n    settle        结算价\n    pre_settle     前结算价\n    variety       合约类别\n    或 None(给定交易日没有交易数据)\n    \"\"\"\n    day = cons.convert_date(date) if date is not None else datetime.date.today()\n    if day.strftime(\"%Y%m%d\") not in calendar:\n        # warnings.warn(\"%s非交易日\" % day.strftime(\"%Y%m%d\"))\n        return pd.DataFrame()\n    try:\n        json_data = json.loads(\n            requests_link(\n                cons.SHFE_DAILY_URL_20250630 % (day.strftime(\"%Y%m%d\")),\n                headers=cons.shfe_headers,\n            ).text\n        )\n    except requests.HTTPError as reason:\n        if reason.response != 404:\n            print(cons.SHFE_DAILY_URL_20250630 % (day.strftime(\"%Y%m%d\")), reason)\n        return pd.DataFrame()\n\n    if len(json_data[\"o_curinstrument\"]) == 0:\n        return pd.DataFrame()\n\n    df = pd.DataFrame(\n        [\n            row\n            for row in json_data[\"o_curinstrument\"]\n            if row[\"DELIVERYMONTH\"] not in [\"小计\", \"合计\"]\n            and row[\"DELIVERYMONTH\"] != \"\"\n        ]\n    )\n    try:\n        df[\"variety\"] = df[\"PRODUCTGROUPID\"].str.upper().str.strip()\n    except KeyError:\n        df[\"variety\"] = (\n            df[\"PRODUCTID\"]\n            .str.upper()\n            .str.split(\"_\", expand=True)\n            .iloc[:, 0]\n            .str.strip()\n        )\n    df[\"symbol\"] = df[\"variety\"] + df[\"DELIVERYMONTH\"]\n    df[\"date\"] = day.strftime(\"%Y%m%d\")\n    df[\"VOLUME\"] = df[\"VOLUME\"].apply(lambda x: 0 if x == \"\" else x)\n    try:\n        df[\"turnover\"] = df[\"TURNOVER\"].apply(lambda x: 0 if x == \"\" else x)\n    except KeyError:\n        df[\"turnover\"] = np.nan\n    df.rename(columns=cons.SHFE_COLUMNS, inplace=True)\n    df = df[~df[\"symbol\"].str.contains(\"efp\")]\n    df = df[cons.OUTPUT_COLUMNS]\n    df.reset_index(inplace=True)\n    return df\n\n\ndef get_dce_daily(date: str = \"20251027\") -> pd.DataFrame:\n    \"\"\"\n    大连商品交易所日交易数据\n    http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/rtj/rxq/index.html\n    :param date: 交易日, e.g., 20200416\n    :type date: str\n    :return: 具体交易日的个品种行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    day = cons.convert_date(date) if date is not None else datetime.date.today()\n    if day.strftime(\"%Y%m%d\") not in calendar:\n        # warnings.warn(\"%s非交易日\" % day.strftime(\"%Y%m%d\"))\n        return pd.DataFrame()\n    url = \"http://www.dce.com.cn/dcereport/publicweb/dailystat/dayQuotes\"\n    payload = {\n        \"contractId\": \"\",\n        \"lang\": \"zh\",\n        \"optionSeries\": \"\",\n        \"statisticsType\": \"0\",\n        \"tradeDate\": date,\n        \"tradeType\": \"1\",\n        \"varietyId\": \"all\",\n    }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.rename(\n        columns={\n            \"variety\": \"品种名称\",\n            \"contractId\": \"合约\",\n            \"open\": \"开盘价\",\n            \"high\": \"最高价\",\n            \"low\": \"最低价\",\n            \"close\": \"收盘价\",\n            \"lastClear\": \"前结算价\",\n            \"clearPrice\": \"结算价\",\n            \"diff\": \"涨跌\",\n            \"diff1\": \"涨跌1\",\n            \"volumn\": \"成交量\",\n            \"openInterest\": \"持仓量\",\n            \"diffI\": \"持仓量变化\",\n            \"turnover\": \"成交额\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[~temp_df[\"品种名称\"].str.contains(\"小计\")]\n    temp_df = temp_df[~temp_df[\"品种名称\"].str.contains(\"总计\")]\n    temp_df[\"variety\"] = temp_df[\"品种名称\"].map(lambda x: cons.DCE_MAP[x])\n    temp_df[\"symbol\"] = temp_df[\"合约\"]\n    del temp_df[\"品种名称\"]\n    del temp_df[\"合约\"]\n    temp_df.columns = [\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n        \"pre_settle\",\n        \"settle\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"volume\",\n        \"open_interest\",\n        \"_\",\n        \"turnover\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"variety\",\n        \"symbol\",\n    ]\n    temp_df[\"date\"] = date\n    temp_df = temp_df[\n        [\n            \"symbol\",\n            \"date\",\n            \"open\",\n            \"high\",\n            \"low\",\n            \"close\",\n            \"volume\",\n            \"open_interest\",\n            \"turnover\",\n            \"settle\",\n            \"pre_settle\",\n            \"variety\",\n        ]\n    ]\n    temp_df = temp_df.astype(\n        {\n            \"open\": \"float\",\n            \"high\": \"float\",\n            \"low\": \"float\",\n            \"close\": \"float\",\n            \"volume\": \"float\",\n            \"open_interest\": \"float\",\n            \"turnover\": \"float\",\n            \"settle\": \"float\",\n            \"pre_settle\": \"float\",\n        }\n    )\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\ndef get_futures_daily(\n    start_date: str = \"20220208\",\n    end_date: str = \"20220208\",\n    market: str = \"CFFEX\",\n) -> pd.DataFrame:\n    \"\"\"\n    交易所日交易数据\n    :param start_date: 开始日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天\n    :type start_date: str\n    :param end_date: 结束数据 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天\n    :type end_date: str\n    :param market: 'CFFEX' 中金所, 'CZCE' 郑商所,  'SHFE' 上期所, 'DCE' 大商所 之一, 'INE' 上海国际能源交易中心, \"GFEX\" 广州期货交易所。默认为中金所\n    :type market: str\n    :return: 交易所日交易数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if market.upper() == \"CFFEX\":\n        f = get_cffex_daily\n    elif market.upper() == \"CZCE\":\n        f = get_czce_daily\n    elif market.upper() == \"SHFE\":\n        f = get_shfe_daily\n    elif market.upper() == \"DCE\":\n        f = get_dce_daily\n    elif market.upper() == \"INE\":\n        f = get_ine_daily\n    elif market.upper() == \"GFEX\":\n        f = get_gfex_daily\n    else:\n        print(\"Invalid Market Symbol\")\n        return pd.DataFrame()\n\n    start_date = (\n        cons.convert_date(start_date)\n        if start_date is not None\n        else datetime.date.today()\n    )\n    end_date = (\n        cons.convert_date(end_date)\n        if end_date is not None\n        else cons.convert_date(cons.get_latest_data_date(datetime.datetime.now()))\n    )\n\n    df_list = list()\n    while start_date <= end_date:\n        df = f(date=str(start_date).replace(\"-\", \"\"))\n        if not df.empty:\n            df_list.append(df)\n        start_date += datetime.timedelta(days=1)\n\n    if len(df_list) == 0:\n        return pd.DataFrame()\n    elif len(df_list) > 0:\n        temp_df = pd.concat(df_list).reset_index(drop=True)\n        temp_df = temp_df[~temp_df[\"symbol\"].str.contains(\"efp\")]\n        return temp_df\n    else:\n        return pd.DataFrame()\n\n\nif __name__ == \"__main__\":\n    get_futures_daily_df = get_futures_daily(\n        start_date=\"20250708\", end_date=\"20250708\", market=\"DCE\"\n    )\n    print(get_futures_daily_df)\n\n    get_dce_daily_df = get_dce_daily(date=\"20251029\")\n    print(get_dce_daily_df)\n\n    get_cffex_daily_df = get_cffex_daily(date=\"20230810\")\n    print(get_cffex_daily_df)\n\n    get_ine_daily_df = get_ine_daily(date=\"20230818\")\n    print(get_ine_daily_df)\n\n    get_czce_daily_df = get_czce_daily(date=\"20210513\")\n    print(get_czce_daily_df)\n\n    get_shfe_daily_df = get_shfe_daily(date=\"20250630\")\n    print(get_shfe_daily_df)\n\n    get_gfex_daily_df = get_gfex_daily(date=\"20221228\")\n    print(get_gfex_daily_df)\n"
  },
  {
    "path": "akshare/futures/futures_foreign.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/5 18:00\nDesc: 外盘期货-历史行情数据-日频率\nhttps://finance.sina.com.cn/money/future/hf.html\n\"\"\"\n\nfrom datetime import datetime\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\nfrom akshare.futures.futures_hq_sina import (\n    futures_foreign_commodity_subscribe_exchange_symbol,\n)\n\n\ndef futures_foreign_hist(symbol: str = \"ZSD\") -> pd.DataFrame:\n    \"\"\"\n    外盘期货-历史行情数据-日频率\n    https://finance.sina.com.cn/money/future/hf.html\n    :param symbol: 外盘期货代码, 可以通过 ak.futures_foreign_commodity_subscribe_exchange_symbol() 来获取所有品种代码\n    :type symbol: str\n    :return: 历史行情数据-日频率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    today = f\"{datetime.today().year}_{datetime.today().month}_{datetime.today().day}\"\n    url = (\n        f\"https://stock2.finance.sina.com.cn/futures/api/jsonp.php/var%20_S{today}=/\"\n        f\"GlobalFuturesService.getGlobalFuturesDailyKLine\"\n    )\n    params = {\n        \"symbol\": symbol,\n        \"_\": today,\n        \"source\": \"web\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_df = pd.read_json(StringIO(data_text[data_text.find(\"[\") : -2]))\n    return data_df\n\n\ndef futures_foreign_detail(symbol: str = \"ZSD\") -> pd.DataFrame:\n    \"\"\"\n    foreign futures contract detail data\n    :param symbol: futures symbol, you can get it from hf_subscribe_exchange_symbol function\n    :type symbol: str\n    :return: contract detail\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://finance.sina.com.cn/futures/quotes/{symbol}.shtml\"\n    r = requests.get(url)\n    r.encoding = \"gbk\"\n    data_text = r.text\n    data_df = pd.read_html(StringIO(data_text))[6]\n    return data_df\n\n\nif __name__ == \"__main__\":\n    futures_foreign_hist_df = futures_foreign_hist(symbol=\"JY\")\n    print(futures_foreign_hist_df)\n\n    subscribes = futures_foreign_commodity_subscribe_exchange_symbol()\n\n    for item in subscribes:\n        futures_foreign_detail_df = futures_foreign_detail(symbol=item)\n        print(futures_foreign_detail_df)\n\n    for item in subscribes:\n        futures_foreign_hist_df = futures_foreign_hist(symbol=item)\n        print(futures_foreign_hist_df)\n"
  },
  {
    "path": "akshare/futures/futures_hf_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/9 22:00\nDesc: 东方财富网-行情中心-期货市场-国际期货\nhttps://quote.eastmoney.com/center/gridlist.html#futures_global\n\"\"\"\n\nimport math\nfrom typing import Optional\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef __futures_global_hist_market_code(symbol: str = \"HG00Y\") -> Optional[int]:\n    \"\"\"\n    东方财富网-行情中心-期货市场-国际期货-品种市场对照表\n    https://quote.eastmoney.com/center/gridlist.html#futures_global\n    :param symbol: HG00Y, 品种代码；可以通过 ak.futures_global_spot_em() 来获取所有可获取历史行情数据的品种代码\n    :type symbol: str\n    :return: 品种所属于的市场\n    :rtype: str\n    \"\"\"\n    # 提取品种代码（去掉年份和月份部分）\n    base_symbol = \"\"\n    i = 0\n    while i < len(symbol) and not symbol[i].isdigit():\n        base_symbol += symbol[i]\n        i += 1\n    # 如果代码中没有数字（异常情况），则返回整个代码作为基础品种代码\n    if not base_symbol and i == len(symbol):\n        base_symbol = symbol\n    # 金属和贵金属品种 - 101\n    if base_symbol in [\"HG\", \"GC\", \"SI\", \"QI\", \"QO\", \"MGC\", \"LTH\"]:\n        return 101\n    # 能源品种 - 102\n    if base_symbol in [\"CL\", \"NG\", \"RB\", \"HO\", \"PA\", \"PL\", \"QM\"]:\n        return 102\n    # 农产品和金融品种 - 103\n    if base_symbol in [\n        \"ZW\",\n        \"ZM\",\n        \"ZS\",\n        \"ZC\",\n        \"XC\",\n        \"XK\",\n        \"XW\",\n        \"YM\",\n        \"TY\",\n        \"US\",\n        \"EH\",\n        \"ZL\",\n        \"ZR\",\n        \"ZO\",\n        \"FV\",\n        \"TU\",\n        \"UL\",\n        \"NQ\",\n        \"ES\",\n    ]:\n        return 103\n    # 中国市场特有品种 - 104\n    if base_symbol in [\"TF\", \"RT\", \"CN\"]:\n        return 104\n    # 软商品期货 - 108\n    if base_symbol in [\"SB\", \"CT\", \"SF\"]:\n        return 108\n    # 特殊L开头品种 - 109\n    if base_symbol in [\"LCPT\", \"LZNT\", \"LALT\", \"LTNT\", \"LLDT\", \"LNKT\"]:\n        return 109\n    # MPM开头品种 - 110\n    if base_symbol == \"MPM\":\n        return 110\n    # 日本市场品种 - 111\n    if base_symbol.startswith(\"J\"):\n        return 111\n    # 单字母代码品种 - 112\n    if base_symbol in [\"M\", \"B\", \"G\"]:\n        return 112\n    # 如果没有匹配到任何规则，返回一个默认值或者错误\n    return None\n\n\ndef futures_global_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-期货市场-国际期货\n    https://quote.eastmoney.com/center/gridlist.html#futures_global\n    :return: 行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://futsseapi.eastmoney.com/list/COMEX,NYMEX,COBOT,SGX,NYBOT,LME,MDEX,TOCOM,IPE\"\n    params = {\n        \"orderBy\": \"dm\",\n        \"sort\": \"desc\",\n        \"pageSize\": \"20\",\n        \"pageIndex\": \"0\",\n        \"token\": \"58b2fa8f54638b60b87d69b31969089c\",\n        \"field\": \"dm,sc,name,p,zsjd,zde,zdf,f152,o,h,l,zjsj,vol,wp,np,ccl\",\n        \"blockName\": \"callback\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_num = data_json[\"total\"]\n    total_page = math.ceil(total_num / 20) - 1\n    tqdm = get_tqdm()\n    big_df = pd.DataFrame()\n    for page in tqdm(range(total_page), leave=False):\n        params.update({\"pageIndex\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"list\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df[\"index\"] + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"np\": \"卖盘\",\n            \"h\": \"最高\",\n            \"dm\": \"代码\",\n            \"zsjd\": \"-\",\n            \"l\": \"最低\",\n            \"ccl\": \"持仓量\",\n            \"o\": \"今开\",\n            \"p\": \"最新价\",\n            \"sc\": \"-\",\n            \"vol\": \"成交量\",\n            \"name\": \"名称\",\n            \"wp\": \"买盘\",\n            \"zde\": \"涨跌额\",\n            \"zdf\": \"涨跌幅\",\n            \"zjsj\": \"昨结\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"昨结\",\n            \"成交量\",\n            \"买盘\",\n            \"卖盘\",\n            \"持仓量\",\n        ]\n    ]\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"涨跌额\"] = pd.to_numeric(big_df[\"涨跌额\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"今开\"] = pd.to_numeric(big_df[\"今开\"], errors=\"coerce\")\n    big_df[\"最高\"] = pd.to_numeric(big_df[\"最高\"], errors=\"coerce\")\n    big_df[\"最低\"] = pd.to_numeric(big_df[\"最低\"], errors=\"coerce\")\n    big_df[\"昨结\"] = pd.to_numeric(big_df[\"昨结\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    big_df[\"买盘\"] = pd.to_numeric(big_df[\"买盘\"], errors=\"coerce\")\n    big_df[\"卖盘\"] = pd.to_numeric(big_df[\"卖盘\"], errors=\"coerce\")\n    big_df[\"持仓量\"] = pd.to_numeric(big_df[\"持仓量\"], errors=\"coerce\")\n    return big_df\n\n\ndef futures_global_hist_em(symbol: str = \"HG00Y\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-期货市场-国际期货-历史行情数据\n    https://quote.eastmoney.com/globalfuture/HG25J.html\n    :param symbol: 品种代码；可以通过 ak.futures_global_spot_em() 来获取所有可获取历史行情数据的品种代码\n    :type symbol: str\n    :return: 历史行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n    market_code = __futures_global_hist_market_code(symbol)\n    params = {\n        \"secid\": f\"{market_code}.{symbol}\",\n        \"klt\": \"101\",\n        \"fqt\": \"1\",\n        \"lmt\": \"6600\",\n        \"end\": \"20500000\",\n        \"iscca\": \"1\",\n        \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64\",\n        \"ut\": \"f057cbcbce2a86e2866ab8877db1d059\",\n        \"forcect\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df[\"code\"] = data_json[\"data\"][\"code\"]\n    temp_df[\"name\"] = data_json[\"data\"][\"name\"]\n    temp_df.columns = [\n        \"日期\",\n        \"开盘\",\n        \"最新价\",\n        \"最高\",\n        \"最低\",\n        \"总量\",\n        \"-\",\n        \"-\",\n        \"涨幅\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"持仓\",\n        \"日增\",\n        \"代码\",\n        \"名称\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"代码\",\n            \"名称\",\n            \"开盘\",\n            \"最新价\",\n            \"最高\",\n            \"最低\",\n            \"总量\",\n            \"涨幅\",\n            \"持仓\",\n            \"日增\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"总量\"] = pd.to_numeric(temp_df[\"总量\"], errors=\"coerce\")\n    temp_df[\"涨幅\"] = pd.to_numeric(temp_df[\"涨幅\"], errors=\"coerce\")\n    temp_df[\"日增\"] = pd.to_numeric(temp_df[\"日增\"], errors=\"coerce\")\n    # 日增修复为有符号32位整数值\n    unsigned_max, signed_max = (2**32) - 1, (2**31) - 1\n    mask = temp_df[\"日增\"] > signed_max\n    temp_df.loc[mask, \"日增\"] = temp_df.loc[mask, \"日增\"] - (unsigned_max + 1)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_global_spot_em_df = futures_global_spot_em()\n    print(futures_global_spot_em_df)\n\n    futures_global_hist_em_df = futures_global_hist_em(symbol=\"HG00Y\")\n    print(futures_global_hist_em_df)\n"
  },
  {
    "path": "akshare/futures/futures_hist_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/2/20 17:00\nDesc: 东方财富网-期货行情\nhttps://qhweb.eastmoney.com/quote\n\"\"\"\n\nimport re\nfrom functools import lru_cache\nfrom typing import Tuple, Dict\n\nimport pandas as pd\nimport requests\n\n\ndef __futures_hist_separate_char_and_numbers_em(symbol: str = \"焦煤2506\") -> tuple:\n    \"\"\"\n    东方财富网-期货行情-交易所品种对照表原始数据\n    https://quote.eastmoney.com/qihuo/al2505.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 交易所品种对照表原始数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    char = re.findall(pattern=\"[\\u4e00-\\u9fa5a-zA-Z]+\", string=symbol)\n    numbers = re.findall(pattern=r\"\\d+\", string=symbol)\n    return char[0], numbers[0]\n\n\n@lru_cache()\ndef __fetch_exchange_symbol_raw_em() -> list:\n    \"\"\"\n    东方财富网-期货行情-交易所品种对照表原始数据\n    https://quote.eastmoney.com/qihuo/al2505.html\n    :return: 交易所品种对照表原始数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://futsse-static.eastmoney.com/redis\"\n    params = {\"msgid\": \"gnweb\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    all_exchange_symbol_list = []\n    for item in data_json:\n        params = {\"msgid\": str(item[\"mktid\"])}\n        r = requests.get(url, params=params)\n        inner_data_json = r.json()\n        for num in range(1, len(inner_data_json) + 1):\n            params = {\"msgid\": str(item[\"mktid\"]) + f\"_{num}\"}\n            r = requests.get(url, params=params)\n            inner_data_json = r.json()\n            all_exchange_symbol_list.extend(inner_data_json)\n    return all_exchange_symbol_list\n\n\n@lru_cache()\ndef __get_exchange_symbol_map() -> Tuple[Dict, Dict, Dict, Dict]:\n    \"\"\"\n    东方财富网-期货行情-交易所品种映射\n    https://quote.eastmoney.com/qihuo/al2505.html\n    :return: 交易所品种映射\n    :rtype: pandas.DataFrame\n    \"\"\"\n    all_exchange_symbol_list = __fetch_exchange_symbol_raw_em()\n    c_contract_mkt = {}\n    c_contract_to_e_contract = {}\n    e_symbol_mkt = {}\n    c_symbol_mkt = {}\n    for item in all_exchange_symbol_list:\n        c_contract_mkt[item[\"name\"]] = item[\"mktid\"]\n        c_contract_to_e_contract[item[\"name\"]] = item[\"code\"]\n        e_symbol_mkt[item[\"vcode\"]] = item[\"mktid\"]\n        c_symbol_mkt[item[\"vname\"]] = item[\"mktid\"]\n    return c_contract_mkt, c_contract_to_e_contract, e_symbol_mkt, c_symbol_mkt\n\n\ndef futures_hist_table_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-期货行情-交易所品种对照表\n    https://quote.eastmoney.com/qihuo/al2505.html\n    :return: 交易所品种对照表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    all_exchange_symbol_list = __fetch_exchange_symbol_raw_em()\n    temp_df = pd.DataFrame(all_exchange_symbol_list)\n    temp_df = temp_df[[\"mktname\", \"name\", \"code\"]]\n    temp_df.columns = [\"市场简称\", \"合约中文代码\", \"合约代码\"]\n    return temp_df\n\n\ndef futures_hist_em(\n    symbol: str = \"热卷主连\",\n    period: str = \"daily\",\n    start_date: str = \"19900101\",\n    end_date: str = \"20500101\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-期货行情-行情数据\n    https://qhweb.eastmoney.com/quote\n    :param symbol: 期货代码\n    :type symbol: str\n    :param period: choice of {'daily', 'weekly', 'monthly'}\n    :type period: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :return: 行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n    period_dict = {\"daily\": \"101\", \"weekly\": \"102\", \"monthly\": \"103\"}\n    c_contract_mkt, c_contract_to_e_contract, e_symbol_mkt, c_symbol_mkt = (\n        __get_exchange_symbol_map()\n    )\n    try:\n        sec_id = f\"{c_contract_mkt[symbol]}.{c_contract_to_e_contract[symbol]}\"\n    except KeyError:\n        symbol_char, numbers = __futures_hist_separate_char_and_numbers_em(symbol)\n        if re.match(pattern=\"^[\\u4e00-\\u9fa5]+$\", string=symbol_char):\n            sec_id = str(c_symbol_mkt[symbol_char]) + \".\" + symbol\n        else:\n            sec_id = str(e_symbol_mkt[symbol_char]) + \".\" + symbol\n    params = {\n        \"secid\": sec_id,\n        \"klt\": period_dict[period],\n        \"fqt\": \"1\",\n        \"lmt\": \"10000\",\n        \"end\": \"20500000\",\n        \"iscca\": \"1\",\n        \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64\",\n        \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n        \"forcect\": \"1\",\n    }\n    r = requests.get(url, timeout=15, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    if temp_df.empty:\n        return temp_df\n    temp_df.columns = [\n        \"时间\",\n        \"开盘\",\n        \"收盘\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"-\",\n        \"涨跌幅\",\n        \"涨跌\",\n        \"_\",\n        \"_\",\n        \"持仓量\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"开盘\",\n            \"最高\",\n            \"最低\",\n            \"收盘\",\n            \"涨跌\",\n            \"涨跌幅\",\n            \"成交量\",\n            \"成交额\",\n            \"持仓量\",\n        ]\n    ]\n    temp_df.index = pd.to_datetime(temp_df[\"时间\"])\n    temp_df = temp_df[start_date:end_date]\n    temp_df.reset_index(drop=True, inplace=True)\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"涨跌\"] = pd.to_numeric(temp_df[\"涨跌\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"持仓量\"] = pd.to_numeric(temp_df[\"持仓量\"], errors=\"coerce\")\n    temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_hist_table_em_df = futures_hist_table_em()\n    print(futures_hist_table_em_df)\n\n    futures_hist_em_df = futures_hist_em(symbol=\"热卷主连\", period=\"daily\")\n    print(futures_hist_em_df)\n"
  },
  {
    "path": "akshare/futures/futures_hq_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/5 18:00\nDesc: 新浪财经-外盘期货\nhttps://finance.sina.com.cn/money/future/hf.html\n\"\"\"\n\nimport time\nfrom typing import Union, List\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.utils import demjson\n\n\ndef _get_real_name_list() -> list:\n    \"\"\"\n    新浪-外盘期货所有品种的中文名称\n    https://finance.sina.com.cn/money/future/hf.html\n    :return: 外盘期货所有品种的中文名称\n    :rtype: list\n    \"\"\"\n    url = \"https://finance.sina.com.cn/money/future/hf.html\"\n    r = requests.get(url)\n    r.encoding = \"gb2312\"\n    data_text = r.text\n    need_text = data_text[\n        data_text.find(\"var oHF_1 = \") + 12 : data_text.find(\"var oHF_2\") - 2\n    ].replace(\"\\n\\t\", \"\")\n    data_json = demjson.decode(need_text)\n    name_list = [item[0].strip() for item in data_json.values()]\n    return name_list\n\n\ndef futures_foreign_commodity_subscribe_exchange_symbol() -> list:\n    \"\"\"\n    需要订阅的行情的代码\n    https://finance.sina.com.cn/money/future/hf.html\n    :return: 需要订阅的行情的代码\n    :rtype: list\n    \"\"\"\n    url = \"https://finance.sina.com.cn/money/future/hf.html\"\n    r = requests.get(url)\n    r.encoding = \"gb2312\"\n    data_text = r.text\n    data_json = demjson.decode(\n        data_text[\n            data_text.find(\"var oHF_1 = \") + 12 : data_text.find(\"var oHF_2 = \") - 2\n        ]\n    )\n    code_list = list(data_json.keys())\n    return code_list\n\n\ndef futures_hq_subscribe_exchange_symbol() -> pd.DataFrame:\n    \"\"\"\n    将品种字典转化为 pandas.DataFrame\n    https://finance.sina.com.cn/money/future/hf.html\n    :return: 品种对应表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    inner_dict = {\n        \"新加坡铁矿石\": \"FEF\",\n        \"马棕油\": \"FCPO\",\n        \"日橡胶\": \"RSS3\",\n        \"美国原糖\": \"RS\",\n        \"CME比特币期货\": \"BTC\",\n        \"NYBOT-棉花\": \"CT\",\n        \"LME镍3个月\": \"NID\",\n        \"LME铅3个月\": \"PBD\",\n        \"LME锡3个月\": \"SND\",\n        \"LME锌3个月\": \"ZSD\",\n        \"LME铝3个月\": \"AHD\",\n        \"LME铜3个月\": \"CAD\",\n        \"CBOT-黄豆\": \"S\",\n        \"CBOT-小麦\": \"W\",\n        \"CBOT-玉米\": \"C\",\n        \"CBOT-黄豆油\": \"BO\",\n        \"CBOT-黄豆粉\": \"SM\",\n        \"日本橡胶\": \"TRB\",\n        \"COMEX铜\": \"HG\",\n        \"NYMEX天然气\": \"NG\",\n        \"NYMEX原油\": \"CL\",\n        \"COMEX白银\": \"SI\",\n        \"COMEX黄金\": \"GC\",\n        \"CME-瘦肉猪\": \"LHC\",\n        \"布伦特原油\": \"OIL\",\n        \"伦敦金\": \"XAU\",\n        \"伦敦银\": \"XAG\",\n        \"伦敦铂金\": \"XPT\",\n        \"伦敦钯金\": \"XPD\",\n        \"欧洲碳排放\": \"EUA\",\n    }\n    temp_df = pd.DataFrame.from_dict(inner_dict, orient=\"index\")\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\"symbol\", \"code\"]\n    return temp_df\n\n\ndef futures_foreign_commodity_realtime(symbol: Union[str, List[str]]) -> pd.DataFrame:\n    \"\"\"\n    新浪-外盘期货-行情数据\n    https://finance.sina.com.cn/money/future/hf.html\n    :param symbol: 通过调用 ak.futures_hq_subscribe_exchange_symbol() 函数来获取\n    :type symbol: list or str\n    :return: 行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if isinstance(symbol, list):\n        payload = \"?list=\" + \",\".join([\"hf_\" + item for item in symbol])\n    else:\n        symbol = symbol.split(\",\")\n        payload = \"?list=\" + \",\".join([\"hf_\" + item for item in symbol])\n    url = \"https://hq.sinajs.cn/\" + payload\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"hq.sinajs.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://finance.sina.com.cn/\",\n        \"sec-ch-ua\": '\" Not;A Brand\";v=\"99\", \"Google Chrome\";v=\"97\", \"Chromium\";v=\"97\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"Sec-Fetch-Dest\": \"script\",\n        \"Sec-Fetch-Mode\": \"no-cors\",\n        \"Sec-Fetch-Site\": \"cross-site\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/97.0.4692.71 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    data_text = r.text\n    data_df = pd.DataFrame(\n        [\n            item.strip().split(\"=\")[1].split(\",\")\n            for item in data_text.split(\";\")\n            if item.strip() != \"\"\n        ]\n    )\n    data_df.iloc[:, 0] = data_df.iloc[:, 0].str.replace('\"', \"\")\n    data_df.iloc[:, -1] = data_df.iloc[:, -1].str.replace('\"', \"\")\n\n    # 处理伦敦金 XAU 的情况\n    if len(data_df.columns) == 14:\n        data_df[\"temp\"] = None\n\n    data_df.columns = [\n        \"current_price\",\n        \"-\",\n        \"bid\",\n        \"ask\",\n        \"high\",\n        \"low\",\n        \"time\",\n        \"last_settle_price\",\n        \"open\",\n        \"hold\",\n        \"-\",\n        \"-\",\n        \"date\",\n        \"symbol\",\n        \"current_price_rmb\",\n    ]\n    temp_symbol_code_df = futures_hq_subscribe_exchange_symbol()\n    temp_symbol_code_dict = dict(\n        zip(temp_symbol_code_df[\"code\"], temp_symbol_code_df[\"symbol\"])\n    )\n    data_df[\"symbol\"] = [temp_symbol_code_dict[subscribe] for subscribe in symbol]\n    data_df = data_df[\n        [\n            \"symbol\",\n            \"current_price\",\n            \"current_price_rmb\",\n            \"bid\",\n            \"ask\",\n            \"high\",\n            \"low\",\n            \"time\",\n            \"last_settle_price\",\n            \"open\",\n            \"hold\",\n            \"date\",\n        ]\n    ]\n    data_df.columns = [\n        \"名称\",\n        \"最新价\",\n        \"人民币报价\",\n        \"买价\",\n        \"卖价\",\n        \"最高价\",\n        \"最低价\",\n        \"行情时间\",\n        \"昨日结算价\",\n        \"开盘价\",\n        \"持仓量\",\n        \"日期\",\n    ]\n    data_df.dropna(how=\"all\", inplace=True)\n    data_df[\"最新价\"] = pd.to_numeric(data_df[\"最新价\"], errors=\"coerce\")\n    data_df[\"人民币报价\"] = pd.to_numeric(data_df[\"人民币报价\"], errors=\"coerce\")\n    data_df[\"买价\"] = pd.to_numeric(data_df[\"买价\"], errors=\"coerce\")\n    data_df[\"卖价\"] = pd.to_numeric(data_df[\"卖价\"], errors=\"coerce\")\n    data_df[\"最高价\"] = pd.to_numeric(data_df[\"最高价\"], errors=\"coerce\")\n    data_df[\"最低价\"] = pd.to_numeric(data_df[\"最低价\"], errors=\"coerce\")\n    data_df[\"昨日结算价\"] = pd.to_numeric(data_df[\"昨日结算价\"], errors=\"coerce\")\n    data_df[\"开盘价\"] = pd.to_numeric(data_df[\"开盘价\"], errors=\"coerce\")\n    data_df[\"持仓量\"] = pd.to_numeric(data_df[\"持仓量\"], errors=\"coerce\")\n    data_df[\"涨跌额\"] = data_df[\"最新价\"] - data_df[\"昨日结算价\"]\n    data_df[\"涨跌幅\"] = (\n        (data_df[\"最新价\"] - data_df[\"昨日结算价\"]) / data_df[\"昨日结算价\"] * 100\n    )\n    data_df = data_df[\n        [\n            \"名称\",\n            \"最新价\",\n            \"人民币报价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"昨日结算价\",\n            \"持仓量\",\n            \"买价\",\n            \"卖价\",\n            \"行情时间\",\n            \"日期\",\n        ]\n    ]\n\n    # 获取转换比例数据\n    url = \"https://finance.sina.com.cn/money/future/hf.html\"\n    r = requests.get(url)\n    r.encoding = \"utf-8\"\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    data_text = soup.find_all(name=\"script\", attrs={\"type\": \"text/javascript\"})[\n        -2\n    ].string.strip()\n    raw_text = data_text[data_text.find(\"oHF_1 = \") : data_text.find(\"oHF_2\")]\n    need_text = raw_text[raw_text.find(\"{\") : raw_text.rfind(\"}\") + 1]\n    data_json = demjson.decode(need_text)\n    price_mul = pd.DataFrame(\n        [\n            [item[0] for item in data_json.values()],\n            [item[1][0] for item in data_json.values()],\n        ]\n    ).T\n    price_mul.columns = [\"symbol\", \"price\"]\n    price_mul = price_mul[price_mul[\"symbol\"].isin(data_df[\"名称\"])]\n    price_mul.reset_index(inplace=True, drop=True)\n    price_mul[\"price\"] = pd.to_numeric(price_mul[\"price\"], errors=\"coerce\")\n\n    # 获取汇率数据\n    url = \"https://hq.sinajs.cn/?list=USDCNY\"\n    r = requests.get(url, headers=headers)\n    data_text = r.text\n    usd_rmb = float(\n        data_text[data_text.find('\"') + 1 : data_text.find(\",美元人民币\")].split(\",\")[\n            -1\n        ]\n    )\n\n    # 计算人民币报价\n    data_df[\"最新价\"] = pd.to_numeric(data_df[\"最新价\"], errors=\"coerce\")\n    data_df[\"人民币报价\"] = data_df[\"最新价\"] * price_mul[\"price\"] * float(usd_rmb)\n    data_df.dropna(thresh=4, inplace=True)\n    return data_df\n\n\nif __name__ == \"__main__\":\n    futures_hq_subscribe_exchange_symbol_df = futures_hq_subscribe_exchange_symbol()\n    print(futures_hq_subscribe_exchange_symbol_df)\n\n    print(\"开始接收实时行情, 每秒刷新一次\")\n    subscribes = futures_foreign_commodity_subscribe_exchange_symbol()\n\n    futures_foreign_commodity_realtime_df = futures_foreign_commodity_realtime(\n        symbol=\"CT,NID\"\n    )\n    print(futures_foreign_commodity_realtime_df)\n\n    futures_foreign_commodity_realtime_df = futures_foreign_commodity_realtime(\n        symbol=[\"XAU\"]\n    )\n    print(futures_foreign_commodity_realtime_df)\n\n    while True:\n        futures_foreign_commodity_realtime_df = futures_foreign_commodity_realtime(\n            symbol=subscribes\n        )\n        print(futures_foreign_commodity_realtime_df)\n        time.sleep(3)\n"
  },
  {
    "path": "akshare/futures/futures_index_ccidx.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/10/29 15:00\nDesc: 中证商品指数\nhttp://www.ccidx.com/\n\"\"\"\n\nimport json\n\nimport pandas as pd\nimport requests\n\n\ndef futures_index_ccidx(symbol: str = \"中证商品期货指数\") -> pd.DataFrame:\n    \"\"\"\n    中证商品指数-商品指数-日频率\n    http://www.ccidx.com/index.html\n    :param symbol: choice of {\"中证商品期货指数\", \"中证商品期货价格指数\"}\n    :type symbol: str\n    :return: 商品指数-日频率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    futures_index_map = {\n        \"中证商品期货指数\": \"100001.CCI\",\n        \"中证商品期货价格指数\": \"000001.CCI\",\n    }\n    url = \"http://www.ccidx.com/CCI-ZZZS/index/getDateLine\"\n    params = {\"indexId\": futures_index_map[symbol]}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(\n        [json.loads(item) for item in data_json[\"data\"][\"dateLineJson\"]]\n    )\n    temp_df.rename(\n        columns={\n            \"tradeDate\": \"日期\",\n            \"indexId\": \"指数代码\",\n            \"closingPrice\": \"收盘点位\",\n            \"settlePrice\": \"结算点位\",\n            \"dailyIncreaseAndDecrease\": \"涨跌\",\n            \"dailyIncreaseAndDecreasePercentage\": \"涨跌幅\",\n        },\n        inplace=True,\n    )\n\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"收盘点位\"] = pd.to_numeric(temp_df[\"收盘点位\"], errors=\"coerce\")\n    temp_df[\"结算点位\"] = pd.to_numeric(temp_df[\"结算点位\"], errors=\"coerce\")\n    temp_df[\"涨跌\"] = pd.to_numeric(temp_df[\"涨跌\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"日期\"], inplace=True)\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_index_ccidx_df = futures_index_ccidx(symbol=\"中证商品期货指数\")\n    print(futures_index_ccidx_df)\n"
  },
  {
    "path": "akshare/futures/futures_inventory_99.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/11/25 18:00\nDesc: 99 期货网-大宗商品库存数据\nhttps://www.99qh.com/\n\"\"\"\n\nimport json\nfrom datetime import datetime\nfrom functools import lru_cache\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\n@lru_cache(maxsize=32)\ndef __get_99_symbol_map() -> pd.DataFrame:\n    \"\"\"\n    99 期货网-品种代码对照表\n    https://www.99qh.com/data/stockIn?productId=12\n    :return: 品种代码对照表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n    warnings.filterwarnings(\"ignore\")\n    url = \"https://www.99qh.com/data/stockIn\"\n    r = requests.get(url, verify=False)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    raw_data = soup.find(attrs={\"id\": \"__NEXT_DATA__\"}).text\n    data_json = json.loads(raw_data)\n    df_list = []\n    for i, item in enumerate(\n        data_json[\"props\"][\"pageProps\"][\"data\"][\"varietyListData\"]\n    ):\n        temp_df = pd.DataFrame(\n            data_json[\"props\"][\"pageProps\"][\"data\"][\"varietyListData\"][i][\"productList\"]\n        )\n        df_list.append(temp_df)\n\n    big_df = pd.concat(df_list, ignore_index=True)\n    return big_df\n\n\ndef futures_inventory_99(symbol: str = \"豆一\") -> pd.DataFrame:\n    \"\"\"\n    99 期货网-大宗商品库存数据\n    https://www.99qh.com/data/stockIn?productId=12\n    :param symbol: 交易所对应的具体品种; 如：大连商品交易所的 豆一\n    :type symbol: str\n    :return: 大宗商品库存数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n    warnings.filterwarnings(\"ignore\")\n    temp_df = __get_99_symbol_map()\n    symbol_name_map = dict(zip(temp_df[\"name\"], temp_df[\"productId\"]))\n    symbol_code_map = dict(zip(temp_df[\"code\"], temp_df[\"productId\"]))\n    if symbol in symbol_name_map:  # 如果输入的是中文名称\n        product_id = symbol_name_map[symbol]\n    elif symbol in symbol_code_map:  # 如果输入的是代码\n        product_id = symbol_code_map[symbol]\n    else:\n        raise ValueError(f\"未找到品种 {symbol} 对应的编号\")\n\n    url = \"https://centerapi.fx168api.com/app/qh/api/stock/trend\"\n    headers = {\n        \"Content-Type\": \"application/json;charset=UTF-8\",\n        \"_pcc\": \"EsaNkne9QG4I9UVJ7SWrJg2qdijCOn5B9HYFtyP0ybvBJxY4rhONnGQLU4QwEICzum+cJJR2/iQXf\"\n                \"DOrqvK3JYgLxJ5bchYkyUU8qRQ3mwcpA/kyYUSioAs4gd+9s1xPhWF7YOp8bAlEGumxbGCziTq2A8up6sdOYV+hnU/b1iM=\",\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n                      \"Chrome/58.0.3029.110 Safari/537.3\",\n        \"referer\": \"https://www.99qh.com\",\n        \"origin\": \"https://www.99qh.com\",\n    }\n    params = {\n        \"productId\": product_id,\n        \"type\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageSize\": \"5000\",\n        \"startDate\": \"\",\n        \"endDate\": f\"{datetime.now().date().isoformat()}\",\n        \"appCategory\": \"web\",\n    }\n    r = requests.get(url, params, headers=headers, verify=False)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"list\"])\n    temp_df.columns = [\"日期\", \"收盘价\", \"库存\"]\n    temp_df.sort_values(by=[\"日期\"], ignore_index=True, inplace=True)\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"收盘价\"] = pd.to_numeric(temp_df[\"收盘价\"], errors=\"coerce\")\n    temp_df[\"库存\"] = pd.to_numeric(temp_df[\"库存\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_inventory_99_df = futures_inventory_99(symbol=\"豆一\")\n    print(futures_inventory_99_df)\n"
  },
  {
    "path": "akshare/futures/futures_inventory_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/5 17:30\nDesc: 东方财富网-数据中心-期货库存数据\nhttps://data.eastmoney.com/ifdata/kcsj.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom akshare.futures.cons import futures_inventory_em_symbol_dict\n\n\ndef futures_inventory_em(symbol: str = \"a\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-期货库存数据\n    https://data.eastmoney.com/ifdata/kcsj.html\n    :param symbol: 支持品种代码和中文名称，中文名称参见：https://data.eastmoney.com/ifdata/kcsj.html\n    :type symbol: str\n    :return: 指定品种的库存数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_FUTU_POSITIONCODE\",\n        \"columns\": \"TRADE_MARKET_CODE,TRADE_CODE,TRADE_TYPE\",\n        \"filter\": '(IS_MAINCODE=\"1\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"500\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    symbol_dict = dict(zip(temp_df[\"TRADE_TYPE\"], temp_df[\"TRADE_CODE\"]))\n    if symbol in symbol_dict.keys():\n        product_id = symbol_dict[symbol]\n    elif symbol in futures_inventory_em_symbol_dict.keys():  # 如果输入的是代码\n        product_id = futures_inventory_em_symbol_dict[symbol]\n    else:\n        raise ValueError(f\"请输入正确的 symbol, 可选项为: {symbol_dict}\")\n    params = {\n        \"reportName\": \"RPT_FUTU_STOCKDATA\",\n        \"columns\": \"SECURITY_CODE,TRADE_DATE,ON_WARRANT_NUM,ADDCHANGE\",\n        \"filter\": f\"\"\"(SECURITY_CODE=\"{product_id}\")(TRADE_DATE>='2020-10-28')\"\"\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"500\",\n        \"sortTypes\": \"-1\",\n        \"sortColumns\": \"TRADE_DATE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\"-\", \"日期\", \"库存\", \"增减\"]\n    temp_df = temp_df[[\"日期\", \"库存\", \"增减\"]]\n    temp_df.sort_values([\"日期\"], inplace=True)\n    temp_df.reset_index(inplace=True, drop=True)\n    temp_df[\"库存\"] = pd.to_numeric(temp_df[\"库存\"], errors=\"coerce\")\n    temp_df[\"增减\"] = pd.to_numeric(temp_df[\"增减\"], errors=\"coerce\")\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_inventory_em_df = futures_inventory_em(symbol=\"a\")\n    print(futures_inventory_em_df)\n"
  },
  {
    "path": "akshare/futures/futures_news_shmet.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/12/26 18:00\nDesc: 上海金属网-快讯\nhttps://www.shmet.com/newsFlash/newsFlash.html?searchKeyword=\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef futures_news_shmet(symbol: str = \"全部\") -> pd.DataFrame:\n    \"\"\"\n    上海金属网-快讯\n    https://www.shmet.com/newsFlash/newsFlash.html?searchKeyword=\n    :param symbol: choice of {\"全部\", \"要闻\", \"VIP\", \"财经\", \"铜\", \"铝\", \"铅\", \"锌\", \"镍\", \"锡\", \"贵金属\", \"小金属\"}\n    :type symbol: str\n    :return: 上海金属网-快讯\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.shmet.com/api/rest/news/queryNewsflashList\"\n    if symbol == \"全部\":\n        payload = {\"currentPage\": 1, \"pageSize\": 100}\n    else:\n        symbol_map = {\n            \"要闻\": \"0\",\n            \"VIP\": \"100\",\n            \"财经\": \"999\",\n            \"铜\": \"1002\",\n            \"铝\": \"1003\",\n            \"铅\": \"1005\",\n            \"锌\": \"1004\",\n            \"镍\": \"1006\",\n            \"锡\": \"1007\",\n            \"贵金属\": \"1008\",\n            \"小金属\": \"1009\",\n        }\n        payload = {\n            \"currentPage\": 1,\n            \"pageSize\": 2000,\n            \"content\": \"\",\n            \"flashTag\": symbol_map[symbol],\n        }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"dataList\"])\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"-\",\n        \"发布时间\",\n        \"-\",\n        \"内容\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"发布时间\",\n            \"内容\",\n        ]\n    ]\n    temp_df[\"发布时间\"] = pd.to_datetime(\n        temp_df[\"发布时间\"], unit=\"ms\", utc=True\n    ).dt.tz_convert(\"Asia/Shanghai\")\n    temp_df.sort_values([\"发布时间\"], inplace=True)\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_news_shmet_df = futures_news_shmet(symbol=\"铜\")\n    print(futures_news_shmet_df)\n\n    for item in [\n        \"全部\",\n        \"要闻\",\n        \"VIP\",\n        \"财经\",\n        \"铜\",\n        \"铝\",\n        \"铅\",\n        \"锌\",\n        \"镍\",\n        \"锡\",\n        \"贵金属\",\n        \"小金属\",\n    ]:\n        futures_news_shmet_df = futures_news_shmet(symbol=item)\n        print(futures_news_shmet_df)\n"
  },
  {
    "path": "akshare/futures/futures_roll_yield.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/7/16 17:40\nDesc: 中国期货各合约展期收益率\n日线数据从 daily_bar 函数获取, 需要在收盘后运行\n\"\"\"\n\nimport datetime\nimport re\nimport warnings\n\nimport math\nimport pandas as pd\n\nfrom akshare.futures import cons\nfrom akshare.futures.futures_daily_bar import get_futures_daily\nfrom akshare.futures.symbol_var import symbol_market, symbol_varieties\n\ncalendar = cons.get_calendar()\n\n\ndef get_roll_yield(date=None, var=\"BB\", symbol1=None, symbol2=None, df=None):\n    \"\"\"\n    指定交易日指定品种（主力和次主力）或任意两个合约的展期收益率\n    Parameters\n    ------\n    date: string 某一天日期 format： YYYYMMDD\n    var: string 合约品种如 RB、AL 等\n    symbol1: string 合约 1 如 rb1810\n    symbol2: string 合约 2 如 rb1812\n    df: DataFrame或None 从dailyBar得到合约价格，如果为空就在函数内部抓dailyBar，直接喂给数据可以让计算加快\n    \"\"\"\n    # date = \"20100104\"\n    date = cons.convert_date(date) if date is not None else datetime.date.today()\n    if date.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(\"%s非交易日\" % date.strftime(\"%Y%m%d\"))\n        return None\n    if symbol1:\n        var = symbol_varieties(symbol1)\n    if not isinstance(df, pd.DataFrame):\n        market = symbol_market(var)\n        df = get_futures_daily(start_date=date, end_date=date, market=market)\n    if var:\n        df = df[\n            ~df[\"symbol\"].str.contains(\"efp\")\n        ]  # 20200304 由于交易所获取的数据中会有比如 \"CUefp\"，所以在这里过滤\n        df = df[df[\"variety\"] == var].sort_values(by=[\"open_interest\"], ascending=False)\n        # df[\"close\"] = df[\"close\"].astype(\"float\")\n        df[\"close\"] = pd.to_numeric(df[\"close\"])\n        if len(df[\"close\"]) < 2:\n            return None\n        symbol1 = df[\"symbol\"].tolist()[0]\n        symbol2 = df[\"symbol\"].tolist()[1]\n\n    close1 = df[\"close\"][df[\"symbol\"] == symbol1].tolist()[0]\n    close2 = df[\"close\"][df[\"symbol\"] == symbol2].tolist()[0]\n\n    a = re.sub(r\"\\D\", \"\", symbol1)\n    a_1 = int(a[:-2])\n    a_2 = int(a[-2:])\n    b = re.sub(r\"\\D\", \"\", symbol2)\n    b_1 = int(b[:-2])\n    b_2 = int(b[-2:])\n    c = (a_1 - b_1) * 12 + (a_2 - b_2)\n    if close1 == 0 or close2 == 0:\n        return False\n    if c > 0:\n        return math.log(close2 / close1) / c * 12, symbol2, symbol1\n    else:\n        return math.log(close2 / close1) / c * 12, symbol1, symbol2\n\n\ndef get_roll_yield_bar(\n    type_method: str = \"var\",\n    var: str = \"RB\",\n    date: str = \"20201030\",\n    start_day: str = None,\n    end_day: str = None,\n):\n    \"\"\"\n    展期收益率\n    :param type_method: 'symbol': 获取指定交易日指定品种所有交割月合约的收盘价; 'var': 获取指定交易日所有品种两个主力合约的展期收益率(展期收益率横截面); 'date': 获取指定品种每天的两个主力合约的展期收益率(展期收益率时间序列)\n    :param var: 合约品种如 \"RB\", \"AL\" 等\n    :param date: 指定交易日 format： YYYYMMDD\n    :param start_day: 开始日期 format：YYYYMMDD\n    :param end_day: 结束日期 format：YYYYMMDD\n    :return: pandas.DataFrame\n    展期收益率数据(DataFrame)\n    ry      展期收益率\n    index   日期或品种\n    \"\"\"\n    date = cons.convert_date(date) if date is not None else datetime.date.today()\n    start_day = (\n        cons.convert_date(start_day) if start_day is not None else datetime.date.today()\n    )\n    end_day = (\n        cons.convert_date(end_day)\n        if end_day is not None\n        else cons.convert_date(cons.get_latest_data_date(datetime.datetime.now()))\n    )\n\n    if type_method == \"symbol\":\n        df = get_futures_daily(\n            start_date=date, end_date=date, market=symbol_market(var)\n        )\n        df = df[df[\"variety\"] == var]\n        return df\n\n    if type_method == \"var\":\n        df = pd.DataFrame()\n        for market in [\"dce\", \"cffex\", \"shfe\", \"czce\", \"gfex\"]:\n            df = pd.concat(\n                [\n                    df,\n                    get_futures_daily(start_date=date, end_date=date, market=market),\n                ]\n            )\n        var_list = list(set(df[\"variety\"]))\n        for i_remove in [\"IO\", \"MO\", \"HO\"]:\n            if i_remove in var_list:\n                var_list.remove(i_remove)\n        df_l = pd.DataFrame()\n        for var in var_list:\n            ry = get_roll_yield(date, var, df=df)\n            if ry:\n                df_l = pd.concat(\n                    [\n                        df_l,\n                        pd.DataFrame(\n                            [ry],\n                            index=[var],\n                            columns=[\"roll_yield\", \"near_by\", \"deferred\"],\n                        ),\n                    ]\n                )\n        df_l[\"date\"] = date\n        df_l = df_l.sort_values(\"roll_yield\")\n        return df_l\n\n    if type_method == \"date\":\n        df_l = pd.DataFrame()\n        while start_day <= end_day:\n            try:\n                ry = get_roll_yield(start_day, var)\n                if ry:\n                    df_l = pd.concat(\n                        [\n                            df_l,\n                            pd.DataFrame(\n                                [ry],\n                                index=[start_day],\n                                columns=[\"roll_yield\", \"near_by\", \"deferred\"],\n                            ),\n                        ]\n                    )\n            except:  # noqa: E722\n                pass\n            start_day += datetime.timedelta(days=1)\n        return df_l\n\n\nif __name__ == \"__main__\":\n    get_roll_yield_bar_range_df = get_roll_yield_bar(\n        type_method=\"date\",\n        var=\"RB\",\n        start_day=\"20230801\",\n        end_day=\"20230810\",\n    )\n    print(get_roll_yield_bar_range_df)\n\n    get_roll_yield_bar_range_df = get_roll_yield_bar(\n        type_method=\"var\",\n        date=\"20191008\",\n    )\n    print(get_roll_yield_bar_range_df)\n\n    get_roll_yield_bar_symbol = get_roll_yield_bar(type_method=\"var\", date=\"20210201\")\n    print(get_roll_yield_bar_symbol)\n"
  },
  {
    "path": "akshare/futures/futures_rule.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/31 18:00\nDesc: 国泰君安期货-交易日历数据表\nhttps://www.gtjaqh.com/pc/calendar.html\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\n\ndef futures_rule(date: str = \"20231205\") -> pd.DataFrame:\n    \"\"\"\n    国泰君安期货-交易日历数据表\n    https://www.gtjaqh.com/pc/calendar.html\n    :param date: 需要指定为交易日, 且是近期的日期\n    :type date: str\n    :return: 交易日历数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import urllib3\n\n    urllib3.disable_warnings()\n    url = \" https://www.gtjaqh.com/pc/calendar\"\n    params = {\"date\": f\"{date}\"}\n    r = requests.get(url, params=params, verify=False)\n    big_df = pd.read_html(StringIO(r.text), header=1)[0]\n    big_df[\"交易保证金比例\"] = big_df[\"交易保证金比例\"].str.strip(\"%\")\n    big_df[\"交易保证金比例\"] = pd.to_numeric(big_df[\"交易保证金比例\"], errors=\"coerce\")\n    big_df[\"涨跌停板幅度\"] = big_df[\"涨跌停板幅度\"].str.strip(\"%\")\n    big_df[\"涨跌停板幅度\"] = pd.to_numeric(big_df[\"涨跌停板幅度\"], errors=\"coerce\")\n    big_df[\"合约乘数\"] = pd.to_numeric(big_df[\"合约乘数\"], errors=\"coerce\")\n    big_df[\"最小变动价位\"] = pd.to_numeric(big_df[\"最小变动价位\"], errors=\"coerce\")\n    big_df[\"限价单每笔最大下单手数\"] = pd.to_numeric(\n        big_df[\"限价单每笔最大下单手数\"], errors=\"coerce\"\n    )\n    return big_df\n\n\nif __name__ == \"__main__\":\n    futures_rule_df = futures_rule(date=\"20250328\")\n    print(futures_rule_df)\n"
  },
  {
    "path": "akshare/futures/futures_rule_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/1/17 19:30\nDesc: 东方财富网-期货行情-品种及交易规则\nhttps://portal.eastmoneyfutures.com/pages/service/jyts.html#jyrl\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom akshare.utils.cons import headers\n\n\ndef futures_rule_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-期货行情-品种及交易规则\n    https://portal.eastmoneyfutures.com/pages/service/jyts.html#jyrl\n    :return: 品种及交易规则\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://eastmoneyfutures.com/api/ComManage/GetPZJYInfo\"\n    r = requests.get(url, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"Data\"])\n    return temp_df\n\n\ndef futures_trading_hours_em():\n    \"\"\"\n    东方财富网-期货交易时间\n    https://qhweb.eastmoney.com/tradinghours\n    \"\"\"\n    pass\n\n\nif __name__ == \"__main__\":\n    futures_rule_em_df = futures_rule_em()\n    print(futures_rule_em_df)\n"
  },
  {
    "path": "akshare/futures/futures_settle.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/2/20 10:00\nDesc: 期货结算信息\n期货交易所结算参数数据\n- 中金所: 结算参数(保证金、手续费等) - 已实现\n- 郑商所: 结算参数 - 已实现\n- 上期所: 结算参数 - 已实现\n- 广期所: 结算参数 - 已实现\n- 上能中心: 结算参数 - 已实现\n- 大商所: 待解决(网站反爬虫保护，所有接口返回412错误)\n\"\"\"\n\nimport datetime\n\nimport pandas as pd\nimport requests\nfrom io import StringIO\n\nfrom akshare.futures import cons\nfrom akshare.utils.cons import headers\n\ngfex_headers = {\n    \"Accept\": \"application/json, text/javascript, */*; q=0.01\",\n    \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\n    \"Origin\": \"http://www.gfex.com.cn\",\n    \"Referer\": \"http://www.gfex.com.cn/gfex/rjycs/ywcs.shtml\",\n    \"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36\",\n    \"X-Requested-With\": \"XMLHttpRequest\",\n}\n\n# 统一的结算参数字段\nSETTLE_OUTPUT_COLUMNS = [\n    \"date\",\n    \"symbol\",\n    \"variety\",\n    \"settle_price\",\n    \"long_margin_ratio\",\n    \"short_margin_ratio\",\n    \"spec_long_margin_ratio\",\n    \"spec_short_margin_ratio\",\n    \"hedge_long_margin_ratio\",\n    \"hedge_short_margin_ratio\",\n    \"trade_fee_ratio\",\n    \"close_today_fee_ratio\",\n    \"delivery_fee_ratio\",\n    \"is_single_market\",\n    \"single_market_days\",\n    \"limit_ratio\",\n    \"position_limit\",\n    \"trade_limit\",\n    \"rise_limit_rate\",\n    \"fall_limit_rate\",\n]\n\n\ndef _normalize_settle_columns(df: pd.DataFrame) -> pd.DataFrame:\n    \"\"\"\n    统一结算参数字段，将各交易所的字段映射到统一字段\n    :param df: 原始DataFrame\n    :type df: pandas.DataFrame\n    :return: 统一格式的DataFrame\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if df.empty:\n        return pd.DataFrame(columns=SETTLE_OUTPUT_COLUMNS)\n\n    # 字段映射关系\n    field_mapping = {\n        # 统一字段 -> 可能的来源字段\n        \"settle_price\": [\"settle_price\", \"SETTLEMENTPRICE\", \"当日结算价\"],\n        \"long_margin_ratio\": [\"long_margin_ratio\", \"margin_ratio\", \"SPECLONGMARGINRATIO\", \"specBuyRate\", \"spec_buy_rate\"],\n        \"short_margin_ratio\": [\"short_margin_ratio\", \"SPECSHORTMARGINRATIO\", \"hedgeBuyRate\", \"hedge_buy_rate\"],\n        \"spec_long_margin_ratio\": [\"spec_long_margin_ratio\", \"SPECLONGMARGINRATIO\", \"spec_buy_rate\"],\n        \"spec_short_margin_ratio\": [\"spec_short_margin_ratio\", \"SPECSHORTMARGINRATIO\", \"hedge_buy_rate\"],\n        \"hedge_long_margin_ratio\": [\"hedge_long_margin_ratio\", \"HEDGLONGMARGINRATIO\", \"hedge_buy_rate\"],\n        \"hedge_short_margin_ratio\": [\"hedge_short_margin_ratio\", \"HEDGSHORTMARGINRATIO\", \"spec_buy_rate\"],\n        \"trade_fee_ratio\": [\"trade_fee_ratio\", \"TRADEFEERATIO\", \"交易手续费\"],\n        \"close_today_fee_ratio\": [\"close_today_fee_ratio\", \"TTRADEFEERATIO\", \"日内平今仓交易手续费\"],\n        \"delivery_fee_ratio\": [\"delivery_fee_ratio\", \"COMMODITYDELIVFEERATIO\", \"交割手续费\"],\n        \"is_single_market\": [\"is_single_market\", \"是否单边市\"],\n        \"single_market_days\": [\"single_market_days\", \"连续单边市天数\"],\n        \"limit_ratio\": [\"limit_ratio\", \"涨跌停板(%)\"],\n        \"position_limit\": [\"position_limit\", \"日持仓限额\", \"clientBuyPosiQuota\", \"client_buy_posi_quota\"],\n        \"trade_limit\": [\"trade_limit\", \"交易限额\"],\n        \"rise_limit_rate\": [\"rise_limit_rate\", \"riseLimitRate\", \"rise_limit_rate\"],\n        \"fall_limit_rate\": [\"fall_limit_rate\", \"fallLimit\", \"fall_limit\"],\n    }\n\n    # 确保必要的字段存在\n    for col in [\"date\", \"symbol\", \"variety\"]:\n        if col not in df.columns:\n            if col == \"variety\" and \"symbol\" in df.columns:\n                df[\"variety\"] = df[\"symbol\"].str.extract(r\"([A-Za-z]+)\", expand=False)\n            else:\n                df[col] = None\n\n    # 映射字段\n    for target_field, possible_sources in field_mapping.items():\n        if target_field not in df.columns:\n            for source in possible_sources:\n                if source in df.columns:\n                    df[target_field] = df[source]\n                    break\n            else:\n                df[target_field] = None\n\n    # 返回统一格式\n    return df[SETTLE_OUTPUT_COLUMNS]\n\n\ndef _parse_pipe_data(text: str) -> pd.DataFrame:\n    \"\"\"\n    解析管道符分隔的数据\n    :param text: 原始文本数据\n    :type text: str\n    :return: 解析后的DataFrame\n    :rtype: pandas.DataFrame\n    \"\"\"\n    lines = text.strip().split(\"\\n\")\n    if len(lines) < 2:\n        return pd.DataFrame()\n    columns = [col.strip() for col in lines[1].split(\"|\")]\n    data_lines = [line for line in lines[2:] if line.strip()]\n    data_list = []\n    for line in data_lines:\n        row = [col.strip() for col in line.split(\"|\")]\n        if len(row) >= len(columns):\n            data_list.append(row[:len(columns)])\n    return pd.DataFrame(data_list, columns=columns)\n\n\ndef futures_settle_cffex(date: str = \"20260119\") -> pd.DataFrame:\n    \"\"\"\n    中国金融期货交易所-结算参数\n    http://www.cffex.com.cn/jscs/\n    :param date: 结算参数日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象，默认为当前交易日\n    :type date: str or datetime.date\n    :return: 结算参数数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    day = cons.convert_date(date) if date is not None else datetime.date.today()\n    date = day.strftime(\"%Y%m%d\")\n    url = f\"http://www.cffex.com.cn/sj/jscs/{date[:4]}{date[4:6]}/{date[6:8]}/{date}_1.csv\"\n    r = requests.get(url, headers=headers)\n    r.encoding = \"gbk\"\n    if r.status_code != 200:\n        return pd.DataFrame()\n    # 检查是否返回的是 HTML 页面（页面不存在或数据未发布）\n    if r.text.strip().startswith(\"<\") or \"要查看的页面不存在\" in r.text:\n        return pd.DataFrame()\n    try:\n        data_df = pd.read_csv(StringIO(r.text), skiprows=1)\n    except:  # noqa: E722\n        return pd.DataFrame()\n    if data_df.shape[0] < 5:\n        return pd.DataFrame()\n    data_df.columns = [\n        \"symbol\",\n        \"long_margin_ratio\",\n        \"short_margin_ratio\",\n        \"trade_fee_ratio\",\n        \"delivery_fee_ratio\",\n        \"close_today_fee_ratio\",\n    ]\n    data_df = data_df[data_df[\"symbol\"].notna()]\n    data_df = data_df[data_df[\"symbol\"].str.contains(\n        r\"^[A-Z]+\", na=False, regex=True)]\n    data_df[\"variety\"] = data_df[\"symbol\"].str.extract(r\"([A-Z]+)\")\n    data_df[\"date\"] = date\n    data_df = data_df[\n        [\"date\", \"symbol\", \"variety\", \"long_margin_ratio\", \"short_margin_ratio\",\n         \"trade_fee_ratio\", \"delivery_fee_ratio\", \"close_today_fee_ratio\"]\n    ]\n    return data_df\n\n\ndef futures_settle_czce(date: str = \"20260119\") -> pd.DataFrame:\n    \"\"\"\n    郑州商品交易所-结算参数\n    http://www.czce.com.cn/cn/jysj/jscs/H077003003index_1.htm\n    :param date: 结算参数日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象，默认为当前交易日\n    :type date: str or datetime.date\n    :return: 结算参数数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    day = cons.convert_date(date) if date is not None else datetime.date.today()\n    date = day.strftime(\"%Y%m%d\")\n    url = f\"http://www.czce.com.cn/cn/DFSStaticFiles/Future/{date[:4]}/{date}/FutureDataClearParams.txt\"\n    r = requests.get(url, headers=headers)\n    r.encoding = \"utf-8\"\n    if r.status_code != 200:\n        return pd.DataFrame()\n    try:\n        data_df = _parse_pipe_data(r.text)\n    except:  # noqa: E722\n        return pd.DataFrame()\n    if data_df.shape[0] < 5:\n        return pd.DataFrame()\n    data_df.columns = [\n        \"symbol\", \"settle_price\", \"is_single_market\", \"single_market_days\",\n        \"margin_ratio\", \"limit_ratio\", \"trade_fee\", \"fee_type\",\n        \"delivery_fee\", \"close_today_fee\", \"position_limit\", \"trade_limit\"\n    ]\n    data_df = data_df[data_df[\"symbol\"].notna()]\n    data_df = data_df[~data_df[\"symbol\"].str.contains(\"小计|合计|总计\", na=False)]\n    data_df[\"variety\"] = data_df[\"symbol\"].str.extract(r\"([A-Za-z]+)\")\n    data_df[\"date\"] = date\n    data_df = data_df[\n        [\"date\", \"symbol\", \"variety\", \"settle_price\", \"is_single_market\", \"single_market_days\",\n         \"margin_ratio\", \"limit_ratio\", \"trade_fee\", \"fee_type\", \"delivery_fee\",\n         \"close_today_fee\", \"position_limit\", \"trade_limit\"]\n    ]\n    return data_df\n\n\ndef futures_settle_gfex(date: str = \"20260119\") -> pd.DataFrame:\n    \"\"\"\n    广州期货交易所-结算参数\n    http://www.gfex.com.cn/gfex/rjycs/ywcs.shtml\n    :param date: 结算参数日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象，默认为当前交易日\n    :type date: str or datetime.date\n    :return: 结算参数数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    day = cons.convert_date(date) if date is not None else datetime.date.today()\n    date = day.strftime(\"%Y%m%d\")\n    url = \"http://www.gfex.com.cn/u/interfacesWebTtQueryTradPara/loadDayList\"\n    payload = {\"trade_type\": \"0\"}\n    r = requests.post(url, data=payload, headers=gfex_headers)\n    if r.status_code != 200:\n        return pd.DataFrame()\n    # 检查是否返回了反爬虫的 JavaScript 代码\n    if r.text.strip().startswith(\"<script\") or \"function\" in r.text[:100]:\n        return pd.DataFrame()\n    try:\n        json_data = r.json()\n        if json_data.get(\"code\") != \"0\":\n            return pd.DataFrame()\n        data_list = json_data.get(\"data\", [])\n    except:  # noqa: E722\n        return pd.DataFrame()\n    if not data_list:\n        return pd.DataFrame()\n    # 过滤掉期权合约，只保留期货合约\n    data_list = [\n        item for item in data_list if \"-\" not in item.get(\"contractId\", \"\")]\n    if not data_list:\n        return pd.DataFrame()\n    data_df = pd.DataFrame(data_list)\n    data_df.columns = [\n        \"symbol\", \"spec_buy_rate\", \"spec_buy\", \"hedge_buy_rate\", \"hedge_buy\",\n        \"rise_limit_rate\", \"rise_limit\", \"fall_limit\", \"agent_tot_buy_posi_quota\",\n        \"self_tot_buy_posi_quota\", \"client_buy_posi_quota\", \"self_tot_buy_ser_limit\",\n        \"client_buy_ser_limit\", \"trade_type\"\n    ]\n    data_df[\"variety\"] = data_df[\"symbol\"].str.extract(r\"([A-Za-z]+)\")\n    data_df[\"date\"] = date\n    data_df = data_df[\n        [\"date\", \"symbol\", \"variety\", \"spec_buy_rate\", \"spec_buy\", \"hedge_buy_rate\",\n         \"hedge_buy\", \"rise_limit_rate\", \"rise_limit\", \"fall_limit\",\n         \"agent_tot_buy_posi_quota\", \"self_tot_buy_posi_quota\", \"client_buy_posi_quota\"]\n    ]\n    return data_df\n\n\ndef futures_settle_shfe(date: str = \"20260119\") -> pd.DataFrame:\n    \"\"\"\n    上海期货交易所-结算参数\n    https://www.shfe.com.cn/reports/tradedata/dailyandweeklydata/\n    :param date: 结算参数日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象，默认为当前交易日\n    :type date: str or datetime.date\n    :return: 结算参数数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    day = cons.convert_date(date) if date is not None else datetime.date.today()\n    date = day.strftime(\"%Y%m%d\")\n    url = f\"https://www.shfe.com.cn/data/tradedata/future/dailydata/js{date}.dat\"\n    r = requests.get(url, headers=cons.shfe_headers)\n    if r.status_code != 200:\n        return pd.DataFrame()\n    try:\n        data_json = r.json()\n        data_list = data_json.get(\"o_cursor\", [])\n    except:  # noqa: E722\n        return pd.DataFrame()\n    if not data_list:\n        return pd.DataFrame()\n    data_df = pd.DataFrame(data_list)\n    data_df.columns = [\n        \"symbol\", \"trade_fee_ratio\", \"close_today_fee_ratio\", \"delivery_fee_unit\",\n        \"spec_long_margin_ratio\", \"hedge_long_margin_ratio\", \"delivery_fee_ratio\",\n        \"product_id\", \"product_name\", \"close_today_fee_unit\", \"trade_fee_unit\",\n        \"hedge_short_margin_ratio\", \"settle_price\", \"uni_direction\",\n        \"spec_short_margin_ratio\", \"is_close_today\"\n    ]\n    data_df[\"variety\"] = data_df[\"symbol\"].str.extract(r\"([A-Za-z]+)\")\n    data_df[\"date\"] = date\n    data_df = data_df[\n        [\"date\", \"symbol\", \"variety\", \"settle_price\", \"spec_long_margin_ratio\",\n         \"hedge_long_margin_ratio\", \"spec_short_margin_ratio\", \"hedge_short_margin_ratio\",\n         \"trade_fee_ratio\", \"close_today_fee_ratio\", \"is_close_today\"]\n    ]\n    return data_df\n\n\ndef futures_settle_ine(date: str = \"20260119\") -> pd.DataFrame:\n    \"\"\"\n    上海国际能源交易中心-结算参数\n    https://www.ine.cn/reports/businessdata/prmsummary/\n    :param date: 结算参数日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象，默认为当前交易日\n    :type date: str or datetime.date\n    :return: 结算参数数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    day = cons.convert_date(date) if date is not None else datetime.date.today()\n    date = day.strftime(\"%Y%m%d\")\n    url = f\"https://www.ine.cn/data/tradedata/future/dailydata/js{date}.dat\"\n    r = requests.get(url, headers=cons.shfe_headers)\n    if r.status_code != 200:\n        return pd.DataFrame()\n    try:\n        data_json = r.json()\n        data_list = data_json.get(\"o_cursor\", [])\n    except:  # noqa: E722\n        return pd.DataFrame()\n    if not data_list:\n        return pd.DataFrame()\n    data_df = pd.DataFrame(data_list)\n    data_df.columns = [\n        \"symbol\", \"trade_fee_ratio\", \"close_today_fee_ratio\", \"delivery_fee_unit\",\n        \"spec_long_margin_ratio\", \"hedge_long_margin_ratio\", \"delivery_fee_ratio\",\n        \"product_id\", \"product_name\", \"close_today_fee_unit\", \"trade_fee_unit\",\n        \"hedge_short_margin_ratio\", \"settle_price\", \"uni_direction\",\n        \"spec_short_margin_ratio\", \"is_close_today\"\n    ]\n    data_df[\"variety\"] = data_df[\"symbol\"].str.extract(r\"([A-Za-z]+)\")\n    data_df[\"date\"] = date\n    data_df = data_df[\n        [\"date\", \"symbol\", \"variety\", \"settle_price\", \"spec_long_margin_ratio\",\n         \"hedge_long_margin_ratio\", \"spec_short_margin_ratio\", \"hedge_short_margin_ratio\",\n         \"trade_fee_ratio\", \"close_today_fee_ratio\", \"is_close_today\"]\n    ]\n    return data_df\n\n\ndef futures_settle(date: str = \"20260119\", market: str = \"CFFEX\") -> pd.DataFrame:\n    \"\"\"\n    期货交易所结算参数\n    :param date: 结算日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象，默认为当前交易日\n    :type date: str or datetime.date\n    :param market: 交易所代码: CFFEX-中金所, CZCE-郑商所, SHFE-上期所, DCE-大商所, INE-上能中心, GFEX-广期所\n    :type market: str\n    :return: 结算参数数据（统一格式）\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if market.upper() == \"CFFEX\":\n        df = futures_settle_cffex(date)\n    elif market.upper() == \"CZCE\":\n        df = futures_settle_czce(date)\n    elif market.upper() == \"SHFE\":\n        df = futures_settle_shfe(date)\n    elif market.upper() == \"GFEX\":\n        df = futures_settle_gfex(date)\n    elif market.upper() == \"INE\":\n        df = futures_settle_ine(date)\n    else:\n        print(f\"Unsupported market: {market}\")\n        return pd.DataFrame(columns=SETTLE_OUTPUT_COLUMNS)\n    temp_df = _normalize_settle_columns(df)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_settle_cffex_df = futures_settle_cffex(date=\"20260119\")\n    print(\"=== 中金所结算参数 ===\")\n    print(futures_settle_cffex_df)\n\n    futures_settle_czce_df = futures_settle_czce(date=\"20260119\")\n    print(\"\\n=== 郑商所结算参数 ===\")\n    print(futures_settle_czce_df)\n\n    futures_settle_shfe_df = futures_settle_shfe(date=\"20260119\")\n    print(\"\\n=== 上期所结算参数 ===\")\n    print(futures_settle_shfe_df)\n\n    futures_settle_gfex_df = futures_settle_gfex(date=\"20260119\")\n    print(\"\\n=== 广期所结算参数 ===\")\n    print(futures_settle_gfex_df)\n\n    futures_settle_ine_df = futures_settle_ine(date=\"20250117\")\n    print(\"\\n=== 上能中心结算参数 ===\")\n    print(futures_settle_ine_df)\n\n    futures_settle_df = futures_settle(date=\"20260119\", market=\"CFFEX\")\n    print(\"\\n=== 通用接口-CFFEX ===\")\n    print(futures_settle_df)\n\n    futures_settle_df = futures_settle(date=\"20260119\", market=\"CZCE\")\n    print(\"\\n=== 通用接口-CZCE ===\")\n    print(futures_settle_df)\n\n    futures_settle_df = futures_settle(date=\"20260119\", market=\"SHFE\")\n    print(\"\\n=== 通用接口-SHFE ===\")\n    print(futures_settle_df)\n\n    futures_settle_df = futures_settle(date=\"20260119\", market=\"GFEX\")\n    print(\"\\n=== 通用接口-GFEX ===\")\n    print(futures_settle_df)\n\n    futures_settle_df = futures_settle(date=\"20260119\", market=\"INE\")\n    print(\"\\n=== 通用接口-INE ===\")\n    print(futures_settle_df)\n"
  },
  {
    "path": "akshare/futures/futures_settlement_price_sgx.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/1/18 16:25\nDesc: 新加坡交易所-衍生品-历史数据-历史结算价格\nhttps://www.sgx.com/zh-hans/research-education/derivatives\nhttps://links.sgx.com/1.0.0/derivatives-daily/5888/FUTURE.zip\n\"\"\"\n\nimport zipfile\nfrom io import BytesIO\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\n\ndef __fetch_ftse_index_futu(date: str = \"20231108\") -> int:\n    \"\"\"\n    新加坡交易所-日历计算\n    https://wap.eastmoney.com/quote/stock/100.STI.html\n    :param date: 交易日\n    :type date: str\n    :return: 日期计算结果\n    :rtype: int\n    \"\"\"\n    url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n    params = {\n        \"secid\": \"100.STI\",\n        \"klt\": \"101\",\n        \"fqt\": \"0\",\n        \"lmt\": \"10000\",\n        \"end\": date,\n        \"iscca\": \"1\",\n        \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64\",\n        \"ut\": \"f057cbcbce2a86e2866ab8877db1d059\",\n        \"forcect\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df.columns = [\n        \"date\",\n        \"-\",\n        \"open\",\n        \"close\",\n        \"high\",\n        \"low\",\n        \"volume\",\n        \"amount\",\n        \"_\",\n        \"-\",\n        \"open\",\n        \"close\",\n        \"high\",\n        \"low\",\n    ]\n    num = temp_df[\"date\"].index[-1] + 791\n    return num\n\n\ndef futures_settlement_price_sgx(date: str = \"20231107\") -> pd.DataFrame:\n    \"\"\"\n    新加坡交易所-衍生品-历史数据-历史结算价格\n    https://www.sgx.com/zh-hans/research-education/derivatives\n    :param date: 交易日\n    :type date: str\n    :return: 所有期货品种的在指定交易日的历史结算价格\n    :rtype: pandas.DataFrame\n    \"\"\"\n    num = __fetch_ftse_index_futu(date)\n    url = f\"https://links.sgx.com/1.0.0/derivatives-daily/{num}/FUTURE.zip\"\n    r = requests.get(url)\n    with zipfile.ZipFile(BytesIO(r.content)) as file:\n        with file.open(file.namelist()[0]) as my_file:\n            data = my_file.read().decode()\n            if file.namelist()[0].endswith(\"txt\"):\n                data_df = pd.read_table(StringIO(data))\n            else:\n                data_df = pd.read_csv(StringIO(data))\n    return data_df\n\n\nif __name__ == \"__main__\":\n    futures_settlement_price_sgx_df = futures_settlement_price_sgx(date=\"20240110\")\n    print(futures_settlement_price_sgx_df)\n"
  },
  {
    "path": "akshare/futures/futures_spot_stock_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/3/21 12:00\nDesc: 东方财富网-数据中心-现货与股票\nhttps://data.eastmoney.com/ifdata/xhgp.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils import demjson\n\n\ndef futures_spot_stock(symbol: str = \"能源\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-现货与股票\n    https://data.eastmoney.com/ifdata/xhgp.html\n    :param symbol: choice of {'能源', '化工', '塑料', '纺织', '有色', '钢铁', '建材', '农副'}\n    :type symbol: str\n    :return: 现货与股票上下游对应数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    map_dict = {\n        \"能源\": 0,\n        \"化工\": 1,\n        \"塑料\": 2,\n        \"纺织\": 3,\n        \"有色\": 4,\n        \"钢铁\": 5,\n        \"建材\": 6,\n        \"农副\": 7,\n    }\n    url = \"https://data.eastmoney.com/ifdata/xhgp.html\"\n    headers = {\n        \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,\"\n        \"image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"data.eastmoney.com\",\n        \"Pragma\": \"no-cache\",\n        \"Upgrade-Insecure-Requests\": \"1\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    data_text = r.text\n    temp_json = demjson.decode(\n        data_text[\n            data_text.find(\"pagedata\") : data_text.find(\n                \"/newstatic/js/common/emdataview.js\"\n            )\n        ]\n        .strip(\"pagedata= \")\n        .strip(';\\n        </script>\\n        <script src=\"')\n    )\n    date_list = list(temp_json[\"dates\"].values())\n    temp_json = temp_json[\"datas\"]\n    temp_df = temp_json[map_dict.get(symbol)]\n    temp_df = pd.DataFrame(temp_df[\"list\"])\n    xyyh_list = [\n        \"-\" if item == [] else \", \".join([inner_item[\"name\"] for inner_item in item])\n        for item in temp_df[\"xyyhs\"].tolist()\n    ]\n    scs_list = [\n        \"-\" if item == [] else \", \".join([inner_item[\"name\"] for inner_item in item])\n        for item in temp_df[\"scss\"].tolist()\n    ]\n    temp_df[\"scss\"] = scs_list\n    temp_df[\"xyyhs\"] = xyyh_list\n    temp_df.columns = [\n        \"商品名称\",\n        date_list[0],\n        date_list[1],\n        date_list[2],\n        date_list[3],\n        date_list[4],\n        \"最新价格\",\n        \"近半年涨跌幅\",\n        \"生产商\",\n        \"下游用户\",\n    ]\n    temp_df[date_list[0]] = pd.to_numeric(temp_df[date_list[0]], errors=\"coerce\")\n    temp_df[date_list[1]] = pd.to_numeric(temp_df[date_list[1]], errors=\"coerce\")\n    temp_df[date_list[2]] = pd.to_numeric(temp_df[date_list[2]], errors=\"coerce\")\n    temp_df[date_list[3]] = pd.to_numeric(temp_df[date_list[3]], errors=\"coerce\")\n    temp_df[\"最新价格\"] = pd.to_numeric(temp_df[\"最新价格\"], errors=\"coerce\")\n    temp_df[\"近半年涨跌幅\"] = pd.to_numeric(temp_df[\"近半年涨跌幅\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_spot_stock_df = futures_spot_stock(symbol=\"能源\")\n    print(futures_spot_stock_df)\n\n    for sector in [\"能源\", \"化工\", \"塑料\", \"纺织\", \"有色\", \"钢铁\", \"建材\", \"农副\"]:\n        futures_spot_stock_df = futures_spot_stock(symbol=sector)\n        print(futures_spot_stock_df)\n"
  },
  {
    "path": "akshare/futures/futures_stock_js.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/24 18:10\nDesc: 上海期货交易所指定交割仓库库存周报\nhttps://datacenter.jin10.com/reportType/dc_shfe_weekly_stock\nhttps://tsite.shfe.com.cn/statements/dataview.html?paramid=kx\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef futures_stock_shfe_js(date: str = \"20240419\") -> pd.DataFrame:\n    \"\"\"\n    金十财经-上海期货交易所指定交割仓库库存周报\n    https://datacenter.jin10.com/reportType/dc_shfe_weekly_stock\n    :param date: 交易日; 库存周报只在每周的最后一个交易日公布数据\n    :type date: str\n    :return: 库存周报\n    :rtype: pandas.Series\n    \"\"\"\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"x-csrf-token\": \"x-csrf-token\",\n        \"x-version\": \"1.0.0\",\n    }\n    url = \"https://datacenter-api.jin10.com/reports/list\"\n    params = {\n        \"category\": \"stock\",\n        \"date\": \"-\".join([date[:4], date[4:6], date[6:]]),\n        \"attr_id\": \"1\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    columns_list = [item[\"name\"] for item in data_json[\"data\"][\"keys\"]]\n    temp_df = pd.DataFrame(data_json[\"data\"][\"values\"], columns=columns_list)\n    for item in columns_list[1:]:\n        temp_df[item] = pd.to_numeric(temp_df[item], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_stock_shfe_js_df = futures_stock_shfe_js(date=\"20240419\")\n    print(futures_stock_shfe_js_df)\n"
  },
  {
    "path": "akshare/futures/futures_to_spot.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/1/22 20:30\nDesc: 期货-期转现-交割\n\"\"\"\n\nfrom io import StringIO, BytesIO\n\nimport pandas as pd\nimport requests\n\n\ndef futures_to_spot_shfe(date: str = \"202312\") -> pd.DataFrame:\n    \"\"\"\n    上海期货交易所-期转现\n    https://tsite.shfe.com.cn/statements/dataview.html?paramid=kx\n    1、铜、铜(BC)、铝、锌、铅、镍、锡、螺纹钢、线材、热轧卷板、天然橡胶、20号胶、低硫燃料油、燃料油、石油沥青、纸浆、不锈钢的数量单位为：吨；黄金的数量单位为：克；白银的数量单位为：千克；原油的数量单位为：桶。\n    2、交割量、期转现量为单向计算。\n    :param date: 年月\n    :type date: str\n    :return: 上海期货交易所期转现\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://tsite.shfe.com.cn/data/instrument/ExchangeDelivery{date}.dat\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/100.0.4896.127 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"ExchangeDelivery\"])\n    temp_df.columns = [\n        \"_\",\n        \"日期\",\n        \"交割量\",\n        \"_\",\n        \"期转现量\",\n        \"合约\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"合约\",\n            \"交割量\",\n            \"期转现量\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"交割量\"] = pd.to_numeric(temp_df[\"交割量\"], errors=\"coerce\")\n    temp_df[\"期转现量\"] = pd.to_numeric(temp_df[\"期转现量\"], errors=\"coerce\")\n    return temp_df\n\n\ndef futures_delivery_dce(date: str = \"202312\") -> pd.DataFrame:\n    \"\"\"\n    大连商品交易所-交割统计\n    http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/jgtj/jgsj/index.html\n    :param date: 交割日期\n    :type date: str\n    :return: 大连商品交易所-交割统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://www.dce.com.cn/publicweb/quotesdata/delivery.html\"\n    params = {\n        \"deliveryQuotes.variety\": \"all\",\n        \"year\": \"\",\n        \"month\": \"\",\n        \"deliveryQuotes.begin_month\": date,\n        \"deliveryQuotes.end_month\": str(int(date) + 1),\n    }\n    headers = {\n        \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Pragma\": \"no-cache\",\n        \"Upgrade-Insecure-Requests\": \"1\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36\",\n    }\n    r = requests.post(url, params=params, headers=headers)\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df[\"交割日期\"] = (\n        temp_df[\"交割日期\"].astype(str).str.split(\".\", expand=True).iloc[:, 0]\n    )\n    temp_df = temp_df[~temp_df[\"品种\"].str.contains(\"小计|总计\")]\n    temp_df.reset_index(inplace=True, drop=True)\n    temp_df[\"交割日期\"] = pd.to_datetime(temp_df[\"交割日期\"], errors=\"coerce\").dt.date\n    temp_df[\"交割量\"] = pd.to_numeric(temp_df[\"交割量\"], errors=\"coerce\")\n    temp_df[\"交割金额\"] = pd.to_numeric(temp_df[\"交割金额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef futures_to_spot_dce(date: str = \"202312\") -> pd.DataFrame:\n    \"\"\"\n    大连商品交易所-期转现\n    http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/jgtj/qzxcx/index.html\n    :param date: 期转现日期\n    :type date: str\n    :return: 大连商品交易所-期转现\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://www.dce.com.cn/publicweb/quotesdata/ftsDeal.html\"\n    params = {\n        \"ftsDealQuotes.variety\": \"all\",\n        \"year\": \"\",\n        \"month\": \"\",\n        \"ftsDealQuotes.begin_month\": date,\n        \"ftsDealQuotes.end_month\": date,\n    }\n    r = requests.post(url, params=params)\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df[\"期转现发生日期\"] = (\n        temp_df[\"期转现发生日期\"].astype(str).str.split(\".\", expand=True).iloc[:, 0]\n    )\n    temp_df = temp_df[~temp_df[\"合约代码\"].str.contains(\"小计|总计\")]\n    temp_df.reset_index(inplace=True, drop=True)\n    temp_df[\"期转现发生日期\"] = pd.to_datetime(\n        temp_df[\"期转现发生日期\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"期转现数量\"] = pd.to_numeric(temp_df[\"期转现数量\"], errors=\"coerce\")\n    return temp_df\n\n\ndef futures_delivery_match_dce(symbol: str = \"a\") -> pd.DataFrame:\n    \"\"\"\n    大连商品交易所-交割配对表\n    http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/jgtj/jgsj/index.html\n    :param symbol: 交割品种\n    :type symbol: str\n    :return: 大连商品交易所-交割配对表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://www.dce.com.cn/publicweb/quotesdata/deliveryMatch.html\"\n    params = {\n        \"deliveryMatchQuotes.variety\": symbol,\n        \"contract.contract_id\": \"all\",\n        \"contract.variety_id\": symbol,\n    }\n    r = requests.post(url, params=params)\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df[\"配对日期\"] = (\n        temp_df[\"配对日期\"].astype(str).str.split(\".\", expand=True).iloc[:, 0]\n    )\n    temp_df = temp_df.iloc[:-1, :]\n    temp_df[\"配对日期\"] = pd.to_datetime(temp_df[\"配对日期\"], errors=\"coerce\").dt.date\n    temp_df[\"配对手数\"] = pd.to_numeric(temp_df[\"配对手数\"], errors=\"coerce\")\n    temp_df[\"交割结算价\"] = pd.to_numeric(temp_df[\"交割结算价\"], errors=\"coerce\")\n    return temp_df\n\n\ndef futures_to_spot_czce(date: str = \"20231228\") -> pd.DataFrame:\n    \"\"\"\n    郑州商品交易所-期转现统计\n    http://www.czce.com.cn/cn/jysj/qzxtj/H770311index_1.htm\n    :param date: 年月日\n    :type date: str\n    :return: 郑州商品交易所-期转现统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"http://www.czce.com.cn/cn/DFSStaticFiles/Future/{date[:4]}/{date}/FutureDataTrdtrades.xls\"\n    headers = {\n        \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"www.czce.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"http://www.czce.com.cn/\",\n        \"Upgrade-Insecure-Requests\": \"1\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    r.encoding = \"utf-8\"\n    temp_df = pd.read_excel(BytesIO(r.content), skiprows=1)\n\n    temp_df.columns = [\n        \"合约代码\",\n        \"合约数量\",\n    ]\n    temp_df = temp_df[\n        [\n            \"合约代码\",\n            \"合约数量\",\n        ]\n    ]\n    temp_df[\"合约数量\"] = temp_df[\"合约数量\"].astype(str).str.replace(\",\", \"\")\n    temp_df[\"合约数量\"] = pd.to_numeric(temp_df[\"合约数量\"], errors=\"coerce\")\n    temp_df = temp_df[~temp_df[\"合约代码\"].str.contains(\"小计|合计\")]\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\ndef futures_delivery_match_czce(date: str = \"20210106\") -> pd.DataFrame:\n    \"\"\"\n    郑州商品交易所-交割配对\n    http://www.czce.com.cn/cn/jysj/jgpd/H770308index_1.htm\n    :param date: 年月日\n    :type date: str\n    :return: 郑州商品交易所-交割配对\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"http://www.czce.com.cn/cn/DFSStaticFiles/Future/{date[:4]}/{date}/FutureDataDelsettle.xls\"\n    r = requests.get(url)\n    r.encoding = \"utf-8\"\n    temp_df = pd.read_excel(BytesIO(r.content), skiprows=0)\n    index_flag = temp_df[temp_df.iloc[:, 0].str.contains(\"配对日期\")].index.values\n    big_df = pd.DataFrame()\n    for i, item in enumerate(index_flag):\n        try:\n            temp_inner_df = temp_df[index_flag[i] + 1 : index_flag[i + 1]]\n        except:  # noqa: E722\n            temp_inner_df = temp_df[index_flag[i] + 1 :]\n        temp_inner_df.columns = temp_inner_df.iloc[0, :]\n        temp_inner_df = temp_inner_df.iloc[1:-1, :]\n        temp_inner_df.reset_index(drop=True, inplace=True)\n        date_contract_str = (\n            temp_df[temp_df.iloc[:, 0].str.contains(\"配对日期\")].iloc[:, 0].values[i]\n        )\n        inner_date = date_contract_str.split(\"：\")[1].split(\" \")[0]\n        symbol = date_contract_str.split(\"：\")[-1]\n        temp_inner_df[\"配对日期\"] = inner_date\n        temp_inner_df[\"合约代码\"] = symbol\n        big_df = pd.concat([big_df, temp_inner_df], ignore_index=True)\n\n    big_df.columns = [\n        \"卖方会员\",\n        \"卖方会员-会员简称\",\n        \"买方会员\",\n        \"买方会员-会员简称\",\n        \"交割量\",\n        \"配对日期\",\n        \"合约代码\",\n    ]\n    big_df[\"交割量\"] = big_df[\"交割量\"].str.replace(\",\", \"\")\n    big_df[\"交割量\"] = pd.to_numeric(big_df[\"交割量\"])\n    return big_df\n\n\ndef futures_delivery_czce(date: str = \"20210112\") -> pd.DataFrame:\n    \"\"\"\n    郑州商品交易所-月度交割查询\n    http://www.czce.com.cn/cn/jysj/ydjgcx/H770316index_1.htm\n    :param date: 年月日\n    :type date: str\n    :return: 郑州商品交易所-月度交割查询\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"http://www.czce.com.cn/cn/DFSStaticFiles/Future/{date[:4]}/{date}/FutureDataSettlematched.xls\"\n    r = requests.get(url)\n    r.encoding = \"utf-8\"\n    temp_df = pd.read_excel(BytesIO(r.content), skiprows=1)\n    temp_df.columns = [\n        \"品种\",\n        \"交割数量\",\n        \"交割额\",\n    ]\n    temp_df[\"交割数量\"] = temp_df[\"交割数量\"].astype(str).str.replace(\",\", \"\")\n    temp_df[\"交割额\"] = temp_df[\"交割额\"].astype(str).str.replace(\",\", \"\")\n    temp_df[\"交割数量\"] = pd.to_numeric(temp_df[\"交割数量\"], errors=\"coerce\")\n    temp_df[\"交割额\"] = pd.to_numeric(temp_df[\"交割额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef futures_delivery_shfe(date: str = \"202312\") -> pd.DataFrame:\n    \"\"\"\n    上海期货交易所-交割情况表\n    https://tsite.shfe.com.cn/statements/dataview.html?paramid=kx\n    注意: 日期 -> 月度统计 -> 下拉到交割情况表\n    :param date: 年月日\n    :type date: str\n    :return: 上海期货交易所-交割情况表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://tsite.shfe.com.cn/data/dailydata/{date}monthvarietystatistics.dat\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/100.0.4896.127 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    r.encoding = \"utf-8\"\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"o_curdelivery\"])\n    temp_df.columns = [\n        \"品种\",\n        \"品种代码\",\n        \"_\",\n        \"交割量-本月\",\n        \"交割量-比重\",\n        \"交割量-本年累计\",\n        \"交割量-累计同比\",\n    ]\n    temp_df = temp_df[\n        [\n            \"品种\",\n            \"交割量-本月\",\n            \"交割量-比重\",\n            \"交割量-本年累计\",\n            \"交割量-累计同比\",\n        ]\n    ]\n    temp_df[\"交割量-本月\"] = pd.to_numeric(temp_df[\"交割量-本月\"], errors=\"coerce\")\n    temp_df[\"交割量-比重\"] = pd.to_numeric(temp_df[\"交割量-比重\"], errors=\"coerce\")\n    temp_df[\"交割量-本年累计\"] = pd.to_numeric(\n        temp_df[\"交割量-本年累计\"], errors=\"coerce\"\n    )\n    temp_df[\"交割量-累计同比\"] = pd.to_numeric(\n        temp_df[\"交割量-累计同比\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_to_spot_dce_df = futures_to_spot_dce(date=\"202312\")\n    print(futures_to_spot_dce_df)\n\n    futures_to_spot_shfe_df = futures_to_spot_shfe(date=\"202312\")\n    print(futures_to_spot_shfe_df)\n\n    futures_to_spot_czce_df = futures_to_spot_czce(date=\"20210112\")\n    print(futures_to_spot_czce_df)\n\n    futures_delivery_dce_df = futures_delivery_dce(date=\"202101\")\n    print(futures_delivery_dce_df)\n\n    futures_delivery_monthly_czce_df = futures_delivery_czce(date=\"20251014\")\n    print(futures_delivery_monthly_czce_df)\n\n    futures_delivery_shfe_df = futures_delivery_shfe(date=\"202312\")\n    print(futures_delivery_shfe_df)\n\n    futures_delivery_match_dce_df = futures_delivery_match_dce(symbol=\"a\")\n    print(futures_delivery_match_dce_df)\n\n    futures_delivery_match_czce_df = futures_delivery_match_czce(date=\"20210106\")\n    print(futures_delivery_match_czce_df)\n"
  },
  {
    "path": "akshare/futures/futures_warehouse_receipt.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/7/1 16:30\nDesc: 期货-仓单日报\n上海期货交易所-仓单日报\nhttps://tsite.shfe.com.cn/statements/dataview.html?paramid=dailystock\n郑州商品交易所-交易数据-仓单日报\nhttp://www.czce.com.cn/cn/jysj/cdrb/H770310index_1.htm\n大连商品交易所-行情数据-统计数据-日统计-仓单日报\nhttp://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/rtj/cdrb/index.html\n广州期货交易所-行情数据-仓单日报\nhttp://www.gfex.com.cn/gfex/cdrb/hqsj_tjsj.shtml\n\"\"\"\n\nimport re\nfrom io import BytesIO, StringIO\n\nimport pandas as pd\nimport requests\n\n\ndef futures_warehouse_receipt_czce(date: str = \"20251103\") -> dict:\n    \"\"\"\n    郑州商品交易所-交易数据-仓单日报\n    http://www.czce.com.cn/cn/jysj/cdrb/H770310index_1.htm\n    :param date: 交易日, e.g., \"20200702\"\n    :type date: str\n    :return: 指定日期的仓单日报数据\n    :rtype: dict\n    \"\"\"\n    import urllib3\n\n    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)\n    if int(date) > 20251101:\n        url = f\"http://www.czce.com.cn/cn/DFSStaticFiles/Future/{date[:4]}/{date}/FutureDataWhsheet.xlsx\"\n    else:\n        url = f\"http://www.czce.com.cn/cn/DFSStaticFiles/Future/{date[:4]}/{date}/FutureDataWhsheet.xls\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/83.0.4103.116 Safari/537.36\"\n    }\n    r = requests.get(url, verify=False, headers=headers)\n    temp_df = pd.read_excel(BytesIO(r.content))\n    index_list = temp_df[temp_df.iloc[:, 0].str.find(\"品种\") == 0.0].index.to_list()\n    index_list.append(len(temp_df))\n    big_dict = {}\n    for inner_index in range(len(index_list) - 1):\n        inner_df = temp_df[index_list[inner_index] : index_list[inner_index + 1]]\n        inner_key = re.findall(pattern=r\"[a-zA-Z]+\", string=inner_df.iloc[0, 0])[0]\n        inner_df = inner_df.iloc[1:, :]\n        inner_df.dropna(axis=0, how=\"all\", inplace=True)\n        inner_df.dropna(axis=1, how=\"all\", inplace=True)\n        inner_df.columns = inner_df.iloc[0, :].to_list()\n        inner_df = inner_df.iloc[1:, :]\n        inner_df.reset_index(inplace=True, drop=True)\n        big_dict[inner_key] = inner_df\n    return big_dict\n\n\ndef futures_warehouse_receipt_dce(date: str = \"20251027\") -> pd.DataFrame:\n    \"\"\"\n    大连商品交易所-行情数据-统计数据-日统计-仓单日报\n    http://www.dce.com.cn/dce/channel/list/187.html\n    :param date: 交易日, e.g., \"20200702\"\n    :type date: str\n    :return: 指定日期的仓单日报数据\n    :rtype: dict\n    \"\"\"\n    url = \"http://www.dce.com.cn/dcereport/publicweb/dailystat/wbillWeeklyQuotes\"\n    payload = {\n        \"tradeDate\": date,\n        \"varietyId\": \"all\",\n    }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"entityList\"])\n    temp_df.rename(\n        columns={\n            \"variety\": \"品种名称\",\n            \"whAbbr\": \"仓库/分库\",\n            \"deliveryAbbr\": \"可选提货地点/分库-数量\",\n            \"lastWbillQty\": \"昨日仓单量（手）\",\n            \"wbillQty\": \"今日仓单量（手）\",\n            \"diff\": \"增减（手）\",\n            \"varietyOrder\": \"品种代码\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"品种代码\",\n            \"品种名称\",\n            \"仓库/分库\",\n            \"可选提货地点/分库-数量\",\n            \"昨日仓单量（手）\",\n            \"今日仓单量（手）\",\n            \"增减（手）\",\n        ]\n    ]\n    return temp_df\n\n\ndef futures_shfe_warehouse_receipt(date: str = \"20200702\") -> dict:\n    \"\"\"\n    上海期货交易所指定交割仓库期货仓单日报\n    https://tsite.shfe.com.cn/statements/dataview.html?paramid=dailystock&paramdate=20200703\n    :param date: 交易日, e.g., \"20200702\"\n    :type date: str\n    :return: 指定日期的仓单日报数据\n    :rtype: dict\n    \"\"\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/83.0.4103.116 Safari/537.36\"\n    }\n    url = (\n        f\"https://www.shfe.com.cn/data/tradedata/future/dailydata/{date}dailystock.dat\"\n    )\n    if date >= \"20140519\":\n        r = requests.get(url, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"o_cursor\"])\n        temp_df[\"VARNAME\"] = temp_df[\"VARNAME\"].str.split(r\"$\", expand=True).iloc[:, 0]\n        temp_df[\"REGNAME\"] = temp_df[\"REGNAME\"].str.split(r\"$\", expand=True).iloc[:, 0]\n        temp_df[\"WHABBRNAME\"] = (\n            temp_df[\"WHABBRNAME\"].str.split(r\"$\", expand=True).iloc[:, 0]\n        )\n        big_dict = {}\n        for item in set(temp_df[\"VARNAME\"]):\n            big_dict[item] = temp_df[temp_df[\"VARNAME\"] == item]\n    else:\n        url = f\"https://www.shfe.com.cn/data/tradedata/future/dailydata/{date}dailystock.html\"\n        r = requests.get(url, headers=headers)\n        temp_df = pd.read_html(StringIO(r.text))[0]\n        index_list = temp_df[\n            temp_df.iloc[:, 3].str.contains(\"单位：\") == 1\n        ].index.to_list()\n        big_dict = {}\n        for inner_index in range(len(index_list)):\n            temp_index_start = index_list[inner_index]\n            if (inner_index + 1) >= len(index_list):\n                if temp_df.iloc[-1, 0].startswith(\"注：\"):\n                    temp_index_end = len(temp_df) - 1\n                else:\n                    temp_index_end = len(temp_df)\n            else:\n                temp_index_end = index_list[inner_index + 1]\n            inner_df = temp_df[temp_index_start:temp_index_end]\n            inner_df.reset_index(inplace=True, drop=True)\n            inner_key = inner_df.iloc[0, 0]\n            inner_df.columns = inner_df.iloc[1].to_list()\n            inner_df = inner_df[2:]\n            inner_df.reset_index(inplace=True, drop=True)\n            big_dict[inner_key] = inner_df\n    return big_dict\n\n\ndef futures_gfex_warehouse_receipt(date: str = \"20240122\") -> dict:\n    \"\"\"\n    广州期货交易所-行情数据-仓单日报\n    http://www.gfex.com.cn/gfex/cdrb/hqsj_tjsj.shtml\n    :param date: 交易日, e.g., \"20240122\"\n    :type date: str\n    :return: 指定日期的仓单日报数据\n    :rtype: dict\n    \"\"\"\n    url = \"http://www.gfex.com.cn/u/interfacesWebTdWbillWeeklyQuotes/loadList\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/83.0.4103.116 Safari/537.36\"\n    }\n    payload = {\"gen_date\": date}\n    r = requests.post(url=url, data=payload, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    symbol_list = list(\n        set([item.upper() for item in temp_df[\"varietyOrder\"].tolist() if item != \"\"])\n    )\n    temp_df.rename(\n        columns={\n            \"varietyOrder\": \"symbol\",\n            \"variety\": \"品种\",\n            \"whAbbr\": \"仓库/分库\",\n            \"lastWbillQty\": \"昨日仓单量\",\n            \"wbillQty\": \"今日仓单量\",\n            \"regWbillQty\": \"增减\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"symbol\",\n            \"whType\",\n            \"品种\",\n            \"仓库/分库\",\n            \"昨日仓单量\",\n            \"今日仓单量\",\n            \"增减\",\n        ]\n    ]\n    temp_df[\"whType\"] = pd.to_numeric(temp_df[\"whType\"], errors=\"coerce\")\n    temp_df.dropna(\n        subset=[\"whType\"], how=\"any\", axis=0, ignore_index=True, inplace=True\n    )\n    big_dict = dict()\n    for symbol in symbol_list:\n        inner_temp_df = temp_df[temp_df[\"symbol\"] == symbol.lower()].copy()\n        inner_temp_df = inner_temp_df[\n            [\n                \"品种\",\n                \"仓库/分库\",\n                \"昨日仓单量\",\n                \"今日仓单量\",\n                \"增减\",\n            ]\n        ]\n        inner_temp_df[\"昨日仓单量\"] = pd.to_numeric(\n            inner_temp_df[\"昨日仓单量\"], errors=\"coerce\"\n        )\n        inner_temp_df[\"今日仓单量\"] = pd.to_numeric(\n            inner_temp_df[\"今日仓单量\"], errors=\"coerce\"\n        )\n        inner_temp_df[\"增减\"] = pd.to_numeric(inner_temp_df[\"增减\"], errors=\"coerce\")\n        inner_temp_df.reset_index(inplace=True, drop=True)\n        big_dict[symbol] = inner_temp_df\n    return big_dict\n\n\nif __name__ == \"__main__\":\n    futures_warehouse_receipt_czce_df = futures_warehouse_receipt_czce(date=\"20251014\")\n    print(futures_warehouse_receipt_czce_df)\n\n    futures_warehouse_receipt_dce_df = futures_warehouse_receipt_dce(date=\"20251014\")\n    print(futures_warehouse_receipt_dce_df)\n\n    futures_shfe_warehouse_receipt_df = futures_shfe_warehouse_receipt(date=\"20200702\")\n    print(futures_shfe_warehouse_receipt_df)\n\n    futures_shfe_warehouse_receipt_df = futures_shfe_warehouse_receipt(date=\"20140516\")\n    print(futures_shfe_warehouse_receipt_df)\n\n    futures_gfex_warehouse_receipt_df = futures_gfex_warehouse_receipt(date=\"20240122\")\n    print(futures_gfex_warehouse_receipt_df)\n\n    futures_gfex_warehouse_receipt_df = futures_gfex_warehouse_receipt(date=\"20260226\")\n    print(futures_gfex_warehouse_receipt_df)\n"
  },
  {
    "path": "akshare/futures/futures_zh_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/3/20 16:00\nDesc: 新浪财经-国内期货-实时数据获取\nhttps://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_3\nP.S. 注意采集速度, 容易封禁 IP, 如果不能访问请稍后再试\n\"\"\"\n\nimport json\nimport time\nfrom functools import lru_cache\n\nimport pandas as pd\nimport requests\nimport py_mini_racer\n\nfrom akshare.futures.cons import (\n    zh_subscribe_exchange_symbol_url,\n    zh_match_main_contract_url,\n    zh_match_main_contract_payload,\n)\nfrom akshare.futures.futures_contract_detail import futures_contract_detail\nfrom akshare.utils import demjson\n\n\n@lru_cache()\ndef futures_symbol_mark() -> pd.DataFrame:\n    \"\"\"\n    期货的品种和代码映射\n    https://vip.stock.finance.sina.com.cn/quotes_service/view/js/qihuohangqing.js\n    :return: 期货的品种和代码映射\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        \"https://vip.stock.finance.sina.com.cn/quotes_service/view/js/qihuohangqing.js\"\n    )\n    r = requests.get(url)\n    r.encoding = \"gb2312\"\n    data_text = r.text\n    raw_json = data_text[data_text.find(\"{\") : data_text.find(\"}\") + 1]\n    data_json = demjson.decode(raw_json)\n    czce_mark_list = [item[1] for item in data_json[\"czce\"][1:]]\n    dce_mark_list = [item[1] for item in data_json[\"dce\"][1:]]\n    shfe_mark_list = [item[1] for item in data_json[\"shfe\"][1:]]\n    cffex_mark_list = [item[1] for item in data_json[\"cffex\"][1:]]\n    gfex_mark_list = [item[1] for item in data_json[\"gfex\"][1:]]\n    all_mark_list = (\n        czce_mark_list\n        + dce_mark_list\n        + shfe_mark_list\n        + cffex_mark_list\n        + gfex_mark_list\n    )\n\n    czce_market_name_list = [data_json[\"czce\"][0]] * len(czce_mark_list)\n    dce_market_name_list = [data_json[\"dce\"][0]] * len(dce_mark_list)\n    shfe_market_name_list = [data_json[\"shfe\"][0]] * len(shfe_mark_list)\n    cffex_market_name_list = [data_json[\"cffex\"][0]] * len(cffex_mark_list)\n    gfex_market_name_list = [data_json[\"gfex\"][0]] * len(gfex_mark_list)\n    all_market_name_list = (\n        czce_market_name_list\n        + dce_market_name_list\n        + shfe_market_name_list\n        + cffex_market_name_list\n        + gfex_market_name_list\n    )\n\n    czce_symbol_list = [item[0] for item in data_json[\"czce\"][1:]]\n    dce_symbol_list = [item[0] for item in data_json[\"dce\"][1:]]\n    shfe_symbol_list = [item[0] for item in data_json[\"shfe\"][1:]]\n    cffex_symbol_list = [item[0] for item in data_json[\"cffex\"][1:]]\n    gfex_symbol_list = [item[0] for item in data_json[\"gfex\"][1:]]\n    all_symbol_list = (\n        czce_symbol_list\n        + dce_symbol_list\n        + shfe_symbol_list\n        + cffex_symbol_list\n        + gfex_symbol_list\n    )\n\n    temp_df = pd.DataFrame([all_market_name_list, all_symbol_list, all_mark_list]).T\n    temp_df.columns = [\n        \"exchange\",\n        \"symbol\",\n        \"mark\",\n    ]\n    return temp_df\n\n\ndef futures_zh_realtime(symbol: str = \"PTA\") -> pd.DataFrame:\n    \"\"\"\n    期货品种当前时刻所有可交易的合约实时数据\n    https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_1\n    :param symbol: 品种名称；可以通过 ak.futures_symbol_mark() 获取所有品种命名表\n    :type symbol: str\n    :return: 期货品种当前时刻所有可交易的合约实时数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    _futures_symbol_mark_df = futures_symbol_mark()\n    symbol_mark_map = dict(\n        zip(_futures_symbol_mark_df[\"symbol\"], _futures_symbol_mark_df[\"mark\"])\n    )\n    url = \"https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQFuturesData\"\n    params = {\n        \"page\": \"1\",\n        \"sort\": \"position\",\n        \"asc\": \"0\",\n        \"node\": symbol_mark_map[symbol],\n        \"base\": \"futures\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json)\n\n    temp_df[\"trade\"] = pd.to_numeric(temp_df[\"trade\"], errors=\"coerce\")\n    temp_df[\"settlement\"] = pd.to_numeric(temp_df[\"settlement\"], errors=\"coerce\")\n    temp_df[\"presettlement\"] = pd.to_numeric(temp_df[\"presettlement\"], errors=\"coerce\")\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"bidprice1\"] = pd.to_numeric(temp_df[\"bidprice1\"], errors=\"coerce\")\n    temp_df[\"askprice1\"] = pd.to_numeric(temp_df[\"askprice1\"], errors=\"coerce\")\n    temp_df[\"bidvol1\"] = pd.to_numeric(temp_df[\"bidvol1\"], errors=\"coerce\")\n    temp_df[\"askvol1\"] = pd.to_numeric(temp_df[\"askvol1\"], errors=\"coerce\")\n    temp_df[\"volume\"] = pd.to_numeric(temp_df[\"volume\"], errors=\"coerce\")\n    temp_df[\"position\"] = pd.to_numeric(temp_df[\"position\"], errors=\"coerce\")\n    temp_df[\"preclose\"] = pd.to_numeric(temp_df[\"preclose\"], errors=\"coerce\")\n    temp_df[\"changepercent\"] = pd.to_numeric(temp_df[\"changepercent\"], errors=\"coerce\")\n    temp_df[\"bid\"] = pd.to_numeric(temp_df[\"bid\"], errors=\"coerce\")\n    temp_df[\"ask\"] = pd.to_numeric(temp_df[\"ask\"], errors=\"coerce\")\n    temp_df[\"prevsettlement\"] = pd.to_numeric(\n        temp_df[\"prevsettlement\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef zh_subscribe_exchange_symbol(symbol: str = \"cffex\") -> pd.DataFrame:\n    \"\"\"\n    交易所具体的可交易品种\n    https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_1\n    :param symbol: choice of {'czce', 'dce', 'shfe', 'cffex', 'gfex'}\n    :type symbol: str\n    :return: 交易所具体的可交易品种\n    :rtype: dict\n    \"\"\"\n    r = requests.get(zh_subscribe_exchange_symbol_url)\n    r.encoding = \"gbk\"\n    data_text = r.text\n    data_json = demjson.decode(\n        data_text[data_text.find(\"{\") : data_text.find(\"};\") + 1]\n    )\n    if symbol == \"czce\":\n        data_json[\"czce\"].remove(\"郑州商品交易所\")\n        return pd.DataFrame(data_json[\"czce\"])\n    if symbol == \"dce\":\n        data_json[\"dce\"].remove(\"大连商品交易所\")\n        return pd.DataFrame(data_json[\"dce\"])\n    if symbol == \"shfe\":\n        data_json[\"shfe\"].remove(\"上海期货交易所\")\n        return pd.DataFrame(data_json[\"shfe\"])\n    if symbol == \"cffex\":\n        data_json[\"cffex\"].remove(\"中国金融期货交易所\")\n        return pd.DataFrame(data_json[\"cffex\"])\n    if symbol == \"gfex\":\n        data_json[\"gfex\"].remove(\"广州期货交易所\")\n        return pd.DataFrame(data_json[\"gfex\"])\n\n\ndef match_main_contract(symbol: str = \"cffex\") -> str:\n    \"\"\"\n    新浪财经-期货-主力合约\n    https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_1\n    :param symbol: choice of {'czce', 'dce', 'shfe', 'cffex', 'gfex'}\n    :type symbol: str\n    :return: 主力合约的字符串\n    :rtype: str\n    \"\"\"\n    subscribe_exchange_list = []\n    exchange_symbol_list = zh_subscribe_exchange_symbol(symbol).iloc[:, 1].tolist()\n    for item in exchange_symbol_list:\n        # item = 'sngz_qh'\n        zh_match_main_contract_payload.update({\"node\": item})\n        res = requests.get(\n            zh_match_main_contract_url, params=zh_match_main_contract_payload\n        )\n        data_json = demjson.decode(res.text)\n        data_df = pd.DataFrame(data_json)\n        try:\n            main_contract = data_df[data_df.iloc[:, 3:].duplicated()]\n            print(main_contract[\"symbol\"].values[0])\n            subscribe_exchange_list.append(main_contract[\"symbol\"].values[0])\n        except:  # noqa: E722\n            if len(data_df) == 1:\n                subscribe_exchange_list.append(data_df[\"symbol\"].values[0])\n                print(data_df[\"symbol\"].values[0])\n            else:\n                print(item, \"无主力合约\")\n            continue\n    print(f\"{symbol}主力合约获取成功\")\n    return \",\".join([item for item in subscribe_exchange_list])\n\n\ndef futures_zh_spot(\n    symbol: str = \"V2309\",\n    market: str = \"CF\",\n    adjust: str = \"0\",\n) -> pd.DataFrame:\n    \"\"\"\n    期货的实时行情数据\n    https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_1\n    :param symbol: 合约名称的字符串组合\n    :type symbol: str\n    :param market: CF 为商品期货\n    :type market: str\n    :param adjust: '1' or '0'；字符串的 0 或 1；返回合约、交易所和最小变动单位的实时数据, 返回数据会变慢\n    :type adjust: str\n    :return: 期货的实时行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    file_data = \"Math.round(Math.random() * 2147483648).toString(16)\"\n    ctx = py_mini_racer.MiniRacer()\n    rn_code = ctx.eval(file_data)\n    subscribe_list = \",\".join([\"nf_\" + item.strip() for item in symbol.split(\",\")])\n    url = f\"https://hq.sinajs.cn/rn={rn_code}&list={subscribe_list}\"\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Host\": \"hq.sinajs.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://vip.stock.finance.sina.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/97.0.4692.71 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    data_df = pd.DataFrame(\n        [\n            item.strip().split(\"=\")[1].split(\",\")\n            for item in r.text.split(\";\")\n            if item.strip() != \"\"\n        ]\n    )\n    data_df.iloc[:, 0] = data_df.iloc[:, 0].str.replace('\"', \"\")\n    data_df.iloc[:, -1] = data_df.iloc[:, -1].str.replace('\"', \"\")\n    if adjust == \"1\":\n        contract_name_list = [item.split(\"_\")[1] for item in subscribe_list.split(\",\")]\n        contract_min_list = []\n        contract_exchange_list = []\n        for contract_name in contract_name_list:\n            temp_df = futures_contract_detail(symbol=contract_name)\n            exchange_name = temp_df[temp_df[\"item\"] == \"上市交易所\"][\"value\"].values[0]\n            contract_exchange_list.append(exchange_name)\n            contract_min = temp_df[temp_df[\"item\"] == \"最小变动价位\"][\"value\"].values[0]\n            contract_min_list.append(contract_min)\n        if market == \"CF\":\n            data_df.columns = [\n                \"symbol\",\n                \"time\",\n                \"open\",\n                \"high\",\n                \"low\",\n                \"last_close\",\n                \"bid_price\",\n                \"ask_price\",\n                \"current_price\",\n                \"avg_price\",\n                \"last_settle_price\",\n                \"buy_vol\",\n                \"sell_vol\",\n                \"hold\",\n                \"volume\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n            ]\n            data_df = data_df[\n                [\n                    \"symbol\",\n                    \"time\",\n                    \"open\",\n                    \"high\",\n                    \"low\",\n                    \"current_price\",\n                    \"bid_price\",\n                    \"ask_price\",\n                    \"buy_vol\",\n                    \"sell_vol\",\n                    \"hold\",\n                    \"volume\",\n                    \"avg_price\",\n                    \"last_close\",\n                    \"last_settle_price\",\n                ]\n            ]\n            data_df[\"exchange\"] = contract_exchange_list\n            data_df[\"contract\"] = contract_name_list\n            data_df[\"contract_min_change\"] = contract_min_list\n\n            data_df[\"open\"] = pd.to_numeric(data_df[\"open\"], errors=\"coerce\")\n            data_df[\"high\"] = pd.to_numeric(data_df[\"high\"], errors=\"coerce\")\n            data_df[\"low\"] = pd.to_numeric(data_df[\"low\"], errors=\"coerce\")\n            data_df[\"current_price\"] = pd.to_numeric(\n                data_df[\"current_price\"], errors=\"coerce\"\n            )\n            data_df[\"bid_price\"] = pd.to_numeric(data_df[\"bid_price\"], errors=\"coerce\")\n            data_df[\"ask_price\"] = pd.to_numeric(data_df[\"ask_price\"], errors=\"coerce\")\n            data_df[\"buy_vol\"] = pd.to_numeric(data_df[\"buy_vol\"], errors=\"coerce\")\n            data_df[\"sell_vol\"] = pd.to_numeric(data_df[\"sell_vol\"], errors=\"coerce\")\n            data_df[\"hold\"] = pd.to_numeric(data_df[\"hold\"], errors=\"coerce\")\n            data_df[\"volume\"] = pd.to_numeric(data_df[\"volume\"], errors=\"coerce\")\n            data_df[\"avg_price\"] = pd.to_numeric(data_df[\"avg_price\"], errors=\"coerce\")\n            data_df[\"last_close\"] = pd.to_numeric(\n                data_df[\"last_close\"], errors=\"coerce\"\n            )\n            data_df[\"last_settle_price\"] = pd.to_numeric(\n                data_df[\"last_settle_price\"], errors=\"coerce\"\n            )\n            data_df.dropna(subset=[\"current_price\"], ignore_index=True, inplace=True)\n            return data_df\n        else:\n            data_df.columns = [\n                \"open\",\n                \"high\",\n                \"low\",\n                \"current_price\",\n                \"volume\",\n                \"amount\",\n                \"hold\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"__\",\n                \"time\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"symbol\",\n            ]\n            data_df = data_df[\n                [\n                    \"symbol\",\n                    \"time\",\n                    \"open\",\n                    \"high\",\n                    \"low\",\n                    \"current_price\",\n                    \"hold\",\n                    \"volume\",\n                    \"amount\",\n                ]\n            ]\n            data_df[\"exchange\"] = contract_exchange_list\n            data_df[\"contract\"] = contract_name_list\n            data_df[\"contract_min_change\"] = contract_min_list\n            data_df[\"open\"] = pd.to_numeric(data_df[\"open\"], errors=\"coerce\")\n            data_df[\"high\"] = pd.to_numeric(data_df[\"high\"], errors=\"coerce\")\n            data_df[\"low\"] = pd.to_numeric(data_df[\"low\"], errors=\"coerce\")\n            data_df[\"current_price\"] = pd.to_numeric(\n                data_df[\"current_price\"], errors=\"coerce\"\n            )\n            data_df[\"hold\"] = pd.to_numeric(data_df[\"hold\"], errors=\"coerce\")\n            data_df[\"volume\"] = pd.to_numeric(data_df[\"volume\"], errors=\"coerce\")\n            data_df[\"amount\"] = pd.to_numeric(data_df[\"amount\"], errors=\"coerce\")\n            data_df.dropna(subset=[\"current_price\"], ignore_index=True, inplace=True)\n            return data_df\n    else:\n        if market == \"CF\":\n            # 此处由于 20220601 接口变动，增加了字段，此处增加异常判断，except 后为新代码\n            try:\n                data_df.columns = [\n                    \"symbol\",\n                    \"time\",\n                    \"open\",\n                    \"high\",\n                    \"low\",\n                    \"last_close\",\n                    \"bid_price\",\n                    \"ask_price\",\n                    \"current_price\",\n                    \"avg_price\",\n                    \"last_settle_price\",\n                    \"buy_vol\",\n                    \"sell_vol\",\n                    \"hold\",\n                    \"volume\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                ]\n            except:  # noqa: E722\n                data_df.columns = [\n                    \"symbol\",\n                    \"time\",\n                    \"open\",\n                    \"high\",\n                    \"low\",\n                    \"last_close\",\n                    \"bid_price\",\n                    \"ask_price\",\n                    \"current_price\",\n                    \"avg_price\",\n                    \"last_settle_price\",\n                    \"buy_vol\",\n                    \"sell_vol\",\n                    \"hold\",\n                    \"volume\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                    \"_\",\n                ]\n            data_df = data_df[\n                [\n                    \"symbol\",\n                    \"time\",\n                    \"open\",\n                    \"high\",\n                    \"low\",\n                    \"current_price\",\n                    \"bid_price\",\n                    \"ask_price\",\n                    \"buy_vol\",\n                    \"sell_vol\",\n                    \"hold\",\n                    \"volume\",\n                    \"avg_price\",\n                    \"last_close\",\n                    \"last_settle_price\",\n                ]\n            ]\n\n            data_df[\"open\"] = pd.to_numeric(data_df[\"open\"], errors=\"coerce\")\n            data_df[\"high\"] = pd.to_numeric(data_df[\"high\"], errors=\"coerce\")\n            data_df[\"low\"] = pd.to_numeric(data_df[\"low\"], errors=\"coerce\")\n            data_df[\"current_price\"] = pd.to_numeric(\n                data_df[\"current_price\"], errors=\"coerce\"\n            )\n            data_df[\"bid_price\"] = pd.to_numeric(data_df[\"bid_price\"], errors=\"coerce\")\n            data_df[\"ask_price\"] = pd.to_numeric(data_df[\"ask_price\"], errors=\"coerce\")\n            data_df[\"buy_vol\"] = pd.to_numeric(data_df[\"buy_vol\"], errors=\"coerce\")\n            data_df[\"sell_vol\"] = pd.to_numeric(data_df[\"sell_vol\"], errors=\"coerce\")\n            data_df[\"hold\"] = pd.to_numeric(data_df[\"hold\"], errors=\"coerce\")\n            data_df[\"volume\"] = pd.to_numeric(data_df[\"volume\"], errors=\"coerce\")\n            data_df[\"avg_price\"] = pd.to_numeric(data_df[\"avg_price\"], errors=\"coerce\")\n            data_df[\"last_close\"] = pd.to_numeric(\n                data_df[\"last_close\"], errors=\"coerce\"\n            )\n            data_df[\"last_settle_price\"] = pd.to_numeric(\n                data_df[\"last_settle_price\"], errors=\"coerce\"\n            )\n            data_df.dropna(subset=[\"current_price\"], ignore_index=True, inplace=True)\n            return data_df\n        else:\n            data_df.columns = [\n                \"open\",\n                \"high\",\n                \"low\",\n                \"current_price\",\n                \"volume\",\n                \"amount\",\n                \"hold\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"__\",\n                \"time\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"_\",\n                \"symbol\",\n            ]\n            data_df = data_df[\n                [\n                    \"symbol\",\n                    \"time\",\n                    \"open\",\n                    \"high\",\n                    \"low\",\n                    \"current_price\",\n                    \"hold\",\n                    \"volume\",\n                    \"amount\",\n                ]\n            ]\n            data_df[\"open\"] = pd.to_numeric(data_df[\"open\"], errors=\"coerce\")\n            data_df[\"high\"] = pd.to_numeric(data_df[\"high\"], errors=\"coerce\")\n            data_df[\"low\"] = pd.to_numeric(data_df[\"low\"], errors=\"coerce\")\n            data_df[\"current_price\"] = pd.to_numeric(\n                data_df[\"current_price\"], errors=\"coerce\"\n            )\n            data_df[\"hold\"] = pd.to_numeric(data_df[\"hold\"], errors=\"coerce\")\n            data_df[\"volume\"] = pd.to_numeric(data_df[\"volume\"], errors=\"coerce\")\n            data_df[\"amount\"] = pd.to_numeric(data_df[\"amount\"], errors=\"coerce\")\n            data_df.dropna(subset=[\"current_price\"], inplace=True, ignore_index=True)\n            return data_df\n\n\ndef futures_zh_minute_sina(symbol: str = \"IF2008\", period: str = \"1\") -> pd.DataFrame:\n    \"\"\"\n    中国各品种期货分钟频率数据\n    https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_3\n    :param symbol: 可以通过 match_main_contract(symbol=\"cffex\") 获取, 或者访问网页获取\n    :type symbol: str\n    :param period: choice of {\"1\": \"1分钟\", \"5\": \"5分钟\", \"15\": \"15分钟\", \"30\": \"30分钟\", \"60\": \"60分钟\"}\n    :type period: str\n    :return: 指定 symbol 和 period 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://stock2.finance.sina.com.cn/futures/api/jsonp.php/=/InnerFuturesNewService.getFewMinLine\"\n    params = {\n        \"symbol\": symbol,\n        \"type\": period,\n    }\n    r = requests.get(url, params=params)\n    temp_df = pd.DataFrame(json.loads(r.text.split(\"=(\")[1].split(\");\")[0]))\n    temp_df.columns = [\n        \"datetime\",\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n        \"volume\",\n        \"hold\",\n    ]\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"volume\"] = pd.to_numeric(temp_df[\"volume\"], errors=\"coerce\")\n    temp_df[\"hold\"] = pd.to_numeric(temp_df[\"hold\"], errors=\"coerce\")\n    return temp_df\n\n\ndef futures_zh_daily_sina(symbol: str = \"RB0\") -> pd.DataFrame:\n    \"\"\"\n    中国各品种期货日频率数据\n    https://finance.sina.com.cn/futures/quotes/V2105.shtml\n    :param symbol: 可以通过 match_main_contract(symbol=\"cffex\") 获取, 或者访问网页获取\n    :type symbol: str\n    :return: 指定 symbol 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    date = \"20210412\"\n    url = (\n        \"https://stock2.finance.sina.com.cn/futures/api/jsonp.php/var%20_V21052021_4_12=\"\n        \"/InnerFuturesNewService.getDailyKLine\"\n    )\n    params = {\n        \"symbol\": symbol,\n        \"type\": \"_\".join([date[:4], date[4:6], date[6:]]),\n    }\n    r = requests.get(url, params=params)\n    temp_df = pd.DataFrame(json.loads(r.text.split(\"=(\")[1].split(\");\")[0]))\n    temp_df.columns = [\n        \"date\",\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n        \"volume\",\n        \"hold\",\n        \"settle\",\n    ]\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"volume\"] = pd.to_numeric(temp_df[\"volume\"], errors=\"coerce\")\n    temp_df[\"hold\"] = pd.to_numeric(temp_df[\"hold\"], errors=\"coerce\")\n    temp_df[\"settle\"] = pd.to_numeric(temp_df[\"settle\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    match_main_contract_df = match_main_contract(symbol=\"gfex\")\n    print(match_main_contract_df)\n\n    futures_zh_spot_df = futures_zh_spot(symbol=\"V2405,V2409\", market=\"CF\", adjust=\"0\")\n    print(futures_zh_spot_df)\n\n    futures_zh_spot_df = futures_zh_spot(symbol=\"V2405\", market=\"CF\", adjust=\"0\")\n    print(futures_zh_spot_df)\n\n    futures_symbol_mark_df = futures_symbol_mark()\n    print(futures_symbol_mark_df)\n\n    futures_zh_realtime_df = futures_zh_realtime(symbol=\"工业硅\")\n    print(futures_zh_realtime_df)\n\n    futures_zh_minute_sina_df = futures_zh_minute_sina(symbol=\"RB0\", period=\"1\")\n    print(futures_zh_minute_sina_df)\n\n    futures_zh_daily_sina_df = futures_zh_daily_sina(symbol=\"RB0\")\n    print(futures_zh_daily_sina_df)\n\n    futures_zh_daily_sina_df = futures_zh_daily_sina(symbol=\"RB2410\")\n    print(futures_zh_daily_sina_df)\n\n    dce_text = match_main_contract(symbol=\"dce\")\n    czce_text = match_main_contract(symbol=\"czce\")\n    shfe_text = match_main_contract(symbol=\"shfe\")\n    gfex_text = match_main_contract(symbol=\"gfex\")\n\n    while True:\n        time.sleep(3)\n        futures_zh_spot_df = futures_zh_spot(\n            symbol=\",\".join([dce_text, czce_text, shfe_text, gfex_text]),\n            market=\"CF\",\n            adjust=\"0\",\n        )\n        print(futures_zh_spot_df)\n"
  },
  {
    "path": "akshare/futures/receipt.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/7/21 15:00\nDesc: 每日注册仓单数据\n大连商品交易所, 上海期货交易所, 郑州商品交易所, 广州期货交易所\n\"\"\"\n\nimport datetime\nimport re\nimport warnings\nfrom io import BytesIO\nfrom typing import List\n\nimport pandas as pd\nimport requests\n\nfrom akshare.futures import cons\nfrom akshare.futures.requests_fun import requests_link, pandas_read_html_link\nfrom akshare.futures.symbol_var import chinese_to_english\n\ncalendar = cons.get_calendar()\nshfe_20100126 = pd.DataFrame(\n    {\n        \"var\": [\"CU\", \"AL\", \"ZN\", \"RU\", \"FU\", \"AU\", \"RB\", \"WR\"],\n        \"receipt\": [29783, 285396, 187713, 116435, 376200, 12, 145648, 0],\n    }\n)\nshfe_20101029 = pd.DataFrame(\n    {\n        \"var\": [\"CU\", \"AL\", \"ZN\", \"RU\", \"FU\", \"AU\", \"RB\", \"WR\"],\n        \"receipt\": [39214, 359729, 182562, 25990, 313600, 27, 36789, 0],\n    }\n)\n\n\ndef get_dce_receipt(date: str = None, vars_list: List = cons.contract_symbols):\n    \"\"\"\n    大连商品交易所-注册仓单数据\n    http://www.dce.com.cn/dce/channel/list/187.html\n    :param date: 开始日期: YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象, 为空时为当天\n    :type date: str\n    :param vars_list: 合约品种如 RB, AL等列表, 为空时为所有商品数据从 20060106开始，每周五更新仓单数据。直到20090407起，每交易日都更新仓单数据\n    :type vars_list: list\n    :return: 注册仓单数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if not isinstance(vars_list, list):\n        return warnings.warn(\"vars_list: 必须是列表\")\n    date = cons.convert_date(date) if date is not None else datetime.date.today()\n    if date.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(f\"{date.strftime('%Y%m%d')}非交易日\")\n        return None\n    url = \"http://www.dce.com.cn/dcereport/publicweb/dailystat/wbillWeeklyQuotes\"\n    payload = {\n        \"tradeDate\": date.strftime(\"%Y%m%d\"),\n        \"varietyId\": \"all\",\n    }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"entityList\"])\n    records = pd.DataFrame()\n    for x in temp_df.to_dict(orient=\"records\"):\n        if isinstance(x[\"variety\"], str):\n            if x[\"variety\"][-2:] == \"小计\":\n                var = x[\"variety\"][:-2]\n                temp_data = {\n                    \"var\": chinese_to_english(var),\n                    \"receipt\": int(x[\"wbillQty\"]),\n                    \"receipt_chg\": int(x[\"diff\"]),\n                    \"date\": date.strftime(\"%Y%m%d\"),\n                }\n                records = pd.concat([records, pd.DataFrame(temp_data, index=[0])])\n\n    if len(records.index) != 0:\n        records.index = records[\"var\"]\n        vars_in_market = [i for i in vars_list if i in records.index]\n        records = records.loc[vars_in_market, :]\n    return records.reset_index(drop=True)\n\n\ndef get_shfe_receipt_1(\n    date: str = None, vars_list: List = cons.contract_symbols\n) -> pd.DataFrame:\n    \"\"\"\n    上海期货交易所-注册仓单数据-类型1\n    适用 20081006 至 20140518(包括)、20100126、20101029日期交易所格式混乱，直接回复脚本中 pandas.DataFrame, 20100416、20130821日期交易所数据丢失\n    :param date: 开始日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象为空时为当天\n    :type date: str\n    :param vars_list: 合约品种如RB、AL等列表为空时为所有商品\n    :type vars_list: list\n    :return: 注册仓单数据-类型1\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if not isinstance(vars_list, list):\n        raise warnings.warn(\"symbol_list: 必须是列表\")\n    date = (\n        cons.convert_date(date).strftime(\"%Y%m%d\")\n        if date is not None\n        else datetime.date.today()\n    )\n    if date not in calendar:\n        warnings.warn(f\"{date.strftime('%Y%m%d')}非交易日\")\n        return pd.DataFrame()\n    if date == \"20100126\":\n        shfe_20100126[\"date\"] = date\n        return shfe_20100126\n    elif date == \"20101029\":\n        shfe_20101029[\"date\"] = date\n        return shfe_20101029\n    elif date in [\"20100416\", \"20130821\"]:\n        print(\"20100416、20130821交易所数据丢失\")\n        return pd.DataFrame()\n    else:\n        var_list = [\n            \"天然橡胶\",\n            \"沥青仓库\",\n            \"沥青厂库\",\n            \"热轧卷板\",\n            \"燃料油\",\n            \"白银\",\n            \"线材\",\n            \"螺纹钢\",\n            \"铅\",\n            \"铜\",\n            \"铝\",\n            \"锌\",\n            \"黄金\",\n            \"锡\",\n            \"镍\",\n        ]\n        url = cons.SHFE_RECEIPT_URL_1 % date\n        data = pandas_read_html_link(url)[0]\n        indexes = [x for x in data.index if (data[0].tolist()[x] in var_list)]\n        last_index = [x for x in data.index if \"注\" in str(data[0].tolist()[x])][0] - 1\n        records = pd.DataFrame()\n        for i in list(range(len(indexes))):\n            if i != len(indexes) - 1:\n                data_cut = data.loc[indexes[i] : indexes[i + 1] - 1, :]\n            else:\n                data_cut = data.loc[indexes[i] : last_index, :]\n                data_cut = data_cut.fillna(method=\"pad\")\n            data_dict = dict()\n            data_dict[\"var\"] = chinese_to_english(data_cut[0].tolist()[0])\n            data_dict[\"receipt\"] = int(data_cut[2].tolist()[-1])\n            data_dict[\"receipt_chg\"] = int(data_cut[3].tolist()[-1])\n            data_dict[\"date\"] = date\n            records = pd.concat([records, pd.DataFrame(data_dict, index=[0])])\n    if len(records.index) != 0:\n        records.index = records[\"var\"]\n        vars_in_market = [i for i in vars_list if i in records.index]\n        records = records.loc[vars_in_market, :]\n    return records.reset_index(drop=True)\n\n\ndef get_shfe_receipt_2(\n    date: str = None, vars_list: List = cons.contract_symbols\n) -> pd.DataFrame:\n    \"\"\"\n    上海期货交易所-注册仓单数据-类型2\n    适用 20140519(包括)-至今\n    :param date: 开始日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天\n    :type date: str\n    :param vars_list: 合约品种如 RB、AL 等列表 为空时为所有商品\n    :type vars_list: list\n    :return: 注册仓单数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if not isinstance(vars_list, list):\n        raise warnings.warn(\"symbol_list: 必须是列表\")\n    date = (\n        cons.convert_date(date).strftime(\"%Y%m%d\")\n        if date is not None\n        else datetime.date.today()\n    )\n    if date not in calendar:\n        warnings.warn(\"%s 非交易日\" % date.strftime(\"%Y%m%d\"))\n        return pd.DataFrame()\n    url = cons.SHFE_RECEIPT_URL_20250701 % date\n    r = requests_link(url, encoding=\"utf-8\", headers=cons.shfe_headers)\n    try:\n        context = r.json()\n    except:  # noqa\n        return pd.DataFrame()\n    data = pd.DataFrame(context[\"o_cursor\"])\n    if len(data.columns) < 1:\n        return pd.DataFrame()\n    records = pd.DataFrame()\n    for var in set(data[\"VARNAME\"].tolist()):\n        data_cut = data[data[\"VARNAME\"] == var]\n        if \"BC\" in var:\n            data_dict = {\n                \"var\": \"BC\",\n                \"receipt\": int(data_cut[\"WRTWGHTS\"].tolist()[-1]),\n                \"receipt_chg\": int(data_cut[\"WRTCHANGE\"].tolist()[-1]),\n                \"date\": date,\n            }\n        else:\n            data_dict = {\n                \"var\": chinese_to_english(re.sub(r\"\\W|[a-zA-Z]\", \"\", var)),\n                \"receipt\": int(data_cut[\"WRTWGHTS\"].tolist()[-1]),\n                \"receipt_chg\": int(data_cut[\"WRTCHANGE\"].tolist()[-1]),\n                \"date\": date,\n            }\n        records = pd.concat([records, pd.DataFrame(data_dict, index=[0])])\n        temp_records = (\n            records.groupby(\"var\")[[\"receipt\", \"receipt_chg\"]].sum().reset_index()\n        )\n        temp_records[\"date\"] = date\n        records = temp_records\n    if len(records.index) != 0:\n        records.index = records[\"var\"]\n        vars_in_market = [i for i in vars_list if i in records.index]\n        records = records.loc[vars_in_market, :]\n    return records.reset_index(drop=True)\n\n\ndef get_shfe_receipt_3(\n    date: str = None, vars_list: List = cons.contract_symbols\n) -> pd.DataFrame:\n    \"\"\"\n    上海期货交易所-注册仓单数据-类型2\n    适用 20140519(包括)-至今\n    :param date: 开始日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天\n    :type date: str\n    :param vars_list: 合约品种如 RB、AL 等列表 为空时为所有商品\n    :type vars_list: list\n    :return: 注册仓单数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if not isinstance(vars_list, list):\n        raise warnings.warn(\"symbol_list: 必须是列表\")\n    date = (\n        cons.convert_date(date).strftime(\"%Y%m%d\")\n        if date is not None\n        else datetime.date.today()\n    )\n    if date not in calendar:\n        warnings.warn(\"%s 非交易日\" % date.strftime(\"%Y%m%d\"))\n        return pd.DataFrame()\n    url = f\"https://www.shfe.com.cn/data/tradedata/future/stockdata/dailystock_{date}/ZH/all.html\"\n    r = requests.get(url, headers=cons.shfe_headers)\n    from io import StringIO\n\n    temp_tables = pd.read_html(StringIO(r.text))\n    len(temp_tables)\n    records = pd.DataFrame()\n    for table_num in range(1, len(temp_tables)):\n        temp_df = pd.read_html(StringIO(r.text))[table_num]\n        data_dict = {\n            \"var\": chinese_to_english(temp_df.iloc[0, 1]),\n            \"receipt\": int(temp_df.iloc[-1, 2]),\n            \"receipt_chg\": int(temp_df.iloc[-1, 3]),\n            \"date\": date,\n        }\n        records = pd.concat([records, pd.DataFrame(data_dict, index=[0])])\n        temp_records = (\n            records.groupby(\"var\")[[\"receipt\", \"receipt_chg\"]].sum().reset_index()\n        )\n        temp_records[\"date\"] = date\n        records = temp_records\n    if len(records.index) != 0:\n        records.index = records[\"var\"]\n        vars_in_market = [i for i in vars_list if i in records.index]\n        records = records.loc[vars_in_market, :]\n    return records.reset_index(drop=True)\n\n\ndef get_czce_receipt_1(date: str = None, vars_list: List = cons.contract_symbols):\n    \"\"\"\n    郑州商品交易所-注册仓单数据\n    适用 20080222 至 20100824(包括)\n    :param date: 开始日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天\n    :type date: str\n    :param vars_list: list\n    :type vars_list: 合约品种如 CF、TA 等列表 为空时为所有商品\n    :return: 注册仓单数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    date = (\n        cons.convert_date(date).strftime(\"%Y%m%d\")\n        if date is not None\n        else datetime.date.today()\n    )\n    if date not in calendar:\n        warnings.warn(\"%s非交易日\" % date.strftime(\"%Y%m%d\"))\n        return None\n    if date == \"20090820\":\n        return pd.DataFrame()\n    url = cons.CZCE_RECEIPT_URL_1 % date\n    r = requests_link(url, encoding=\"utf-8\", headers=cons.shfe_headers)\n    context = r.text\n    data = pd.read_html(context)[1]\n    records = pd.DataFrame()\n    indexes = [x for x in data.index if \"品种：\" in str(data[0].tolist()[x])]\n    ends = [x for x in data.index if \"总计\" in str(data[0].tolist()[x])]\n    for i in list(range(len(indexes))):\n        if i != len(indexes) - 1:\n            data_cut = data.loc[indexes[i] : ends[i], :]\n            data_cut = data_cut.fillna(method=\"pad\")\n        else:\n            data_cut = data.loc[indexes[i] :, :]\n            data_cut = data_cut.fillna(method=\"pad\")\n        if \"PTA\" in data_cut[0].tolist()[0]:\n            var = \"TA\"\n        else:\n            var = chinese_to_english(re.sub(r\"[A-Z]+\", \"\", data_cut[0].tolist()[0][3:]))\n        if var == \"CF\":\n            receipt = data_cut[6].tolist()[-1]\n            receipt_chg = data_cut[7].tolist()[-1]\n        else:\n            receipt = data_cut[5].tolist()[-1]\n            receipt_chg = data_cut[6].tolist()[-1]\n        data_dict = {\n            \"var\": var,\n            \"receipt\": int(receipt),\n            \"receipt_chg\": int(receipt_chg),\n            \"date\": date,\n        }\n        records = pd.concat([records, pd.DataFrame(data_dict, index=[0])])\n    if len(records.index) != 0:\n        records.index = records[\"var\"]\n        vars_in_market = [i for i in vars_list if i in records.index]\n        records = records.loc[vars_in_market, :]\n    return records.reset_index(drop=True)\n\n\ndef get_czce_receipt_2(date: str = None, vars_list: List = cons.contract_symbols):\n    \"\"\"\n    郑州商品交易所-注册仓单数据\n    http://www.czce.com.cn/cn/jysj/cdrb/H770310index_1.htm\n    适用 20100825(包括) - 20151111(包括)\n    :param date: 开始日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天\n    :type date: str\n    :param vars_list: 合约品种如 CF、TA 等列表为空时为所有商品\n    :type vars_list: list\n    :return: 注册仓单数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if not isinstance(vars_list, list):\n        return warnings.warn(\"symbol_list: 必须是列表\")\n    date = (\n        cons.convert_date(date).strftime(\"%Y%m%d\")\n        if date is not None\n        else datetime.date.today()\n    )\n    if date not in calendar:\n        warnings.warn(\"%s非交易日\" % date.strftime(\"%Y%m%d\"))\n        return None\n    url = cons.CZCE_RECEIPT_URL_2 % (date[:4], date)\n    r = requests.get(url)\n    r.encoding = \"utf-8\"\n    data = pd.read_html(r.text)[3:]\n    records = pd.DataFrame()\n    for data_cut in data:\n        if len(data_cut.columns) > 3:\n            last_indexes = [\n                x for x in data_cut.index if \"注：\" in str(data_cut[0].tolist()[x])\n            ]\n            if len(last_indexes) > 0:\n                last_index = last_indexes[0] - 1\n                data_cut = data_cut.loc[:last_index, :]\n            if \"PTA\" in data_cut[0].tolist()[0]:\n                var = \"TA\"\n            else:\n                strings = data_cut[0].tolist()[0]\n                string = strings.split(\" \")[0][3:]\n                var = chinese_to_english(re.sub(r\"[A-Z]+\", \"\", string))\n            data_cut.columns = data_cut.T[1].tolist()\n            receipt = data_cut[\"仓单数量\"].tolist()[-1]\n            receipt_chg = data_cut[\"当日增减\"].tolist()[-1]\n            data_dict = {\n                \"var\": var,\n                \"receipt\": int(receipt),\n                \"receipt_chg\": int(receipt_chg),\n                \"date\": date,\n            }\n            records = pd.concat([records, pd.DataFrame(data_dict, index=[0])])\n    if len(records.index) != 0:\n        records.index = records[\"var\"]\n        vars_in_market = [i for i in vars_list if i in records.index]\n        records = records.loc[vars_in_market, :]\n    return records.reset_index(drop=True)\n\n\ndef get_czce_receipt_3(\n    date: str = None, vars_list: List = cons.contract_symbols\n) -> pd.DataFrame:\n    \"\"\"\n    郑州商品交易所-注册仓单数据\n    适用 20151008-至今\n    http://www.czce.com.cn/cn/jysj/cdrb/H770310index_1.htm\n    :param date: 开始日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天\n    :type date: str\n    :param vars_list: 合约品种如 CF、TA 等列表为空时为所有商品\n    :type vars_list: list\n    :return: 注册仓单数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if not isinstance(vars_list, list):\n        print(\"vars_list: 必须是列表\")\n        return pd.DataFrame()\n    date = (\n        cons.convert_date(date).strftime(\"%Y%m%d\")\n        if date is not None\n        else datetime.date.today()\n    )\n    if date not in calendar:\n        warnings.warn(\"%s非交易日\" % date.strftime(\"%Y%m%d\"))\n        return pd.DataFrame()\n    if int(date) > 20251101:\n        url = f\"http://www.czce.com.cn/cn/DFSStaticFiles/Future/{date[:4]}/{date}/FutureDataWhsheet.xlsx\"\n    else:\n        url = f\"http://www.czce.com.cn/cn/DFSStaticFiles/Future/{date[:4]}/{date}/FutureDataWhsheet.xls\"\n    r = requests_link(url, encoding=\"utf-8\", headers=cons.shfe_headers)\n    temp_df = pd.read_excel(BytesIO(r.content))\n    temp_df = temp_df[\n        [\n            bool(1 - item)\n            for item in [\n                item if item is not pd.NA else False\n                for item in temp_df.iloc[:, 0].str.contains(\"非农产品\")\n            ]\n        ]\n    ]\n    temp_df.reset_index(inplace=True, drop=True)\n    range_list_one = list(\n        temp_df[\n            [\n                item if not pd.isnull(item) else False\n                for item in temp_df.iloc[:, 0].str.contains(\"品种\")\n            ]\n        ].index\n    )\n    range_list_two = list(\n        temp_df[\n            [\n                item if not pd.isnull(item) else False\n                for item in temp_df.iloc[:, 0].str.contains(\"品种\")\n            ]\n        ].index\n    )[1:]\n    range_list_two.append(None)\n    symbol_list = []\n    receipt_list = []\n    receipt_chg_list = []\n    records = pd.DataFrame()\n    for page in range(len(range_list_one)):\n        inner_df = temp_df[range_list_one[page] : range_list_two[page]]\n        reg = re.compile(r\"[A-Z]+\")\n        try:\n            symbol = reg.findall(inner_df.iloc[0, 0])[0]\n        except:  # noqa\n            continue\n        symbol_list.append(symbol)\n        inner_df.columns = inner_df.iloc[1, :]\n        inner_df = inner_df.iloc[2:, :]\n        inner_df = inner_df.dropna(axis=1, how=\"all\")\n        if symbol == \"PTA\":\n            try:\n                receipt_list.append(\n                    inner_df[\"仓单数量(完税)\"].iloc[-1]\n                    + int(inner_df[\"仓单数量(保税)\"].iloc[-1])\n                )  # 20210316 TA 分为保税和完税\n            except:  # noqa\n                receipt_list.append(0)\n        elif symbol == \"MA\":\n            try:\n                try:\n                    receipt_list.append(\n                        inner_df[\"仓单数量(完税)\"].iloc[-2]\n                        + int(inner_df[\"仓单数量(保税)\"].iloc[-2])\n                    )  # 20210316 MA 分为保税和完税\n                except:  # noqa\n                    receipt_list.append(\n                        inner_df[\"仓单数量(完税)\"].iloc[-2]\n                    )  # 处理 MA 的特殊格式\n            except:  # noqa\n                receipt_list.append(0)\n        else:\n            try:\n                receipt_list.append(inner_df[\"仓单数量\"].iloc[-1])\n            except:  # noqa\n                receipt_list.append(0)\n        if symbol == \"MA\":\n            receipt_chg_list.append(inner_df[\"当日增减\"].iloc[-2])\n        else:\n            receipt_chg_list.append(inner_df[\"当日增减\"].iloc[-1])\n    data_df = pd.DataFrame(\n        [symbol_list, receipt_list, receipt_chg_list, [date] * len(receipt_chg_list)]\n    ).T\n    data_df.columns = [\"var\", \"receipt\", \"receipt_chg\", \"date\"]\n    temp_list = data_df[\"var\"].tolist()\n    data_df[\"var\"] = [item if item != \"PTA\" else \"TA\" for item in temp_list]\n    if len(data_df.index) != 0:\n        data_df.index = data_df[\"var\"]\n        vars_in_market = [i for i in vars_list if i in data_df.index]\n        records = data_df.loc[vars_in_market, :]\n    return records.reset_index(drop=True)\n\n\ndef get_gfex_receipt(\n    date: str = None, vars_list: List = cons.contract_symbols\n) -> pd.DataFrame:\n    \"\"\"\n    广州期货交易所-注册仓单数据\n    http://www.gfex.com.cn/gfex/cdrb/hqsj_tjsj.shtml\n    :param date: 开始日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象 为空时为当天\n    :type date: str\n    :param vars_list: 合约品种如 SI 等列表为空时为所有商品\n    :type vars_list: list\n    :return: 注册仓单数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if not isinstance(vars_list, list):\n        raise warnings.warn(\"vars_list: 必须是列表\")\n    date = cons.convert_date(date) if date is not None else datetime.date.today()\n    if date.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(f\"{date.strftime('%Y%m%d')}非交易日\")\n        return pd.DataFrame()\n    url = \"http://www.gfex.com.cn/u/interfacesWebTdWbillWeeklyQuotes/loadList\"\n    payload = {\"gen_date\": date.isoformat().replace(\"-\", \"\")}\n    headers = {\n        \"Accept\": \"application/json, text/javascript, */*; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"32\",\n        \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\n        \"Host\": \"www.gfex.com.cn\",\n        \"Origin\": \"http://www.gfex.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"http://www.gfex.com.cn/gfex/rihq/hqsj_tjsj.shtml\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/108.0.0.0 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n        \"content-type\": \"application/x-www-form-urlencoded\",\n    }\n    r = requests.post(url, data=payload, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df = temp_df[temp_df[\"variety\"].str.contains(\"小计\")]\n    result_df = temp_df[[\"wbillQty\", \"diff\"]].copy()\n    if result_df.empty:\n        return pd.DataFrame()\n\n    result_df.loc[:, \"date\"] = date.isoformat().replace(\"-\", \"\")\n    result_df.loc[:, \"var\"] = [\n        item.upper() for item in temp_df[\"varietyOrder\"].tolist()\n    ]\n    result_df.reset_index(drop=True, inplace=True)\n    result_df.rename(\n        columns={\n            \"wbillQty\": \"receipt\",\n            \"diff\": \"receipt_chg\",\n        },\n        inplace=True,\n    )\n    result_df = result_df[[\"var\", \"receipt\", \"receipt_chg\", \"date\"]]\n    result_df.set_index(keys=[\"var\"], inplace=True)\n    if \"LC\" not in result_df.index:\n        vars_list.remove(\"LC\")\n    if \"PS\" not in result_df.index:\n        vars_list.remove(\"PS\")\n    result_df = result_df.loc[vars_list, :]\n    result_df.reset_index(inplace=True)\n    return result_df\n\n\ndef get_receipt(\n    start_date: str = None,\n    end_date: str = None,\n    vars_list: List = cons.contract_symbols,\n):\n    \"\"\"\n    大宗商品-注册仓单数据\n    :param start_date: 开始日期 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date 对象 为空时为当天\n    :type start_date: str\n    :param end_date: 结束数据 format：YYYY-MM-DD 或 YYYYMMDD 或 datetime.date 对象 为空时为当天\n    :type end_date: str\n    :param vars_list: 合约品种如 RB、AL 等列表为空时为所有商品\n    :type vars_list: str\n    :return: 注册仓单数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if not isinstance(vars_list, list):\n        return warnings.warn(\"vars_list: 必须是列表\")\n    start_date = (\n        cons.convert_date(start_date)\n        if start_date is not None\n        else datetime.date.today()\n    )\n    end_date = (\n        cons.convert_date(end_date)\n        if end_date is not None\n        else cons.convert_date(cons.get_latest_data_date(datetime.datetime.now()))\n    )\n    records = pd.DataFrame()\n    while start_date <= end_date:\n        if start_date.strftime(\"%Y%m%d\") not in calendar:\n            warnings.warn(f\"{start_date.strftime('%Y%m%d')} 非交易日\")\n        else:\n            print(start_date)\n            for market, market_vars in cons.market_exchange_symbols.items():\n                f = None\n                if market == \"dce\":\n                    if start_date >= datetime.date(2009, 4, 7):\n                        f = get_dce_receipt\n                    else:\n                        print(\"20090407 起，大连商品交易所每个交易日更新仓单数据\")\n                        f = None\n                elif market == \"shfe\":\n                    if (\n                        datetime.date(2008, 10, 6)\n                        <= start_date\n                        <= datetime.date(2014, 5, 16)\n                    ):\n                        f = get_shfe_receipt_1\n                    elif (\n                        datetime.date(2014, 5, 16)\n                        <= start_date\n                        <= datetime.date(2025, 11, 17)\n                    ):\n                        f = get_shfe_receipt_2\n                    elif start_date > datetime.date(2025, 11, 17):\n                        f = get_shfe_receipt_3\n                    else:\n                        f = None\n                        print(\"20081006 起，上海期货交易所每个交易日更新仓单数据\")\n                elif market == \"gfex\":\n                    if start_date > datetime.date(2022, 12, 22):\n                        f = get_gfex_receipt\n                    else:\n                        f = None\n                        print(\"20081006 起，上海期货交易所每个交易日更新仓单数据\")\n                elif market == \"czce\":\n                    if (\n                        datetime.date(2008, 3, 3)\n                        <= start_date\n                        <= datetime.date(2010, 8, 24)\n                    ):\n                        f = get_czce_receipt_1\n                    elif (\n                        datetime.date(2010, 8, 24)\n                        < start_date\n                        <= datetime.date(2015, 11, 11)\n                    ):\n                        f = get_czce_receipt_2\n                    elif start_date > datetime.date(2015, 11, 11):\n                        f = get_czce_receipt_3\n                    else:\n                        f = None\n                        print(\"20080303 起，郑州商品交易所每个交易日更新仓单数据\")\n                get_vars = [var for var in vars_list if var in market_vars]\n                if market != \"cffex\" and get_vars != []:\n                    if f is not None:\n                        records = pd.concat([records, f(start_date, get_vars)])\n        start_date += datetime.timedelta(days=1)\n    records.reset_index(drop=True, inplace=True)\n    if records.empty:\n        return records\n    return records\n\n\nif __name__ == \"__main__\":\n    get_receipt_df = get_receipt(\n        start_date=\"20260130\", end_date=\"20260130\", vars_list=[\"RB\"]\n    )\n    print(get_receipt_df)\n"
  },
  {
    "path": "akshare/futures/requests_fun.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/9/15 19:00\nDesc: 请求网站内容的函数: 在链接失败后可重复 20 次\n\"\"\"\n\nimport time\nfrom io import StringIO\nfrom typing import Dict\n\nimport pandas as pd\nimport requests\n\n\ndef requests_link(\n    url: str,\n    encoding: str = \"utf-8\",\n    method: str = \"get\",\n    data: Dict = None,\n    headers: Dict = None,\n):\n    \"\"\"\n    利用 requests 请求网站, 爬取网站内容, 如网站链接失败, 可重复爬取 20 次\n    :param url: string 网站地址\n    :param encoding: string 编码类型: \"utf-8\", \"gbk\", \"gb2312\"\n    :param method: string 访问方法: \"get\", \"post\"\n    :param data: dict 上传数据: 键值对\n    :param headers: dict 游览器请求头: 键值对\n    :return: requests.response 爬取返回内容: response\n    \"\"\"\n    i = 0\n    while True:\n        try:\n            if method == \"get\":\n                r = requests.get(url, timeout=20, headers=headers)\n                r.encoding = encoding\n                return r\n            elif method == \"post\":\n                r = requests.post(url, timeout=20, data=data, headers=headers)\n                r.encoding = encoding\n                return r\n            else:\n                raise ValueError(\"请提供正确的请求方式\")\n        except:  # noqa: E722\n            i += 1\n            print(f\"第{str(i)}次链接失败, 最多尝试 20 次\")\n            time.sleep(5)\n            if i > 20:\n                return None\n\n\ndef pandas_read_html_link(\n    url: str,\n    encoding: str = \"utf-8\",\n    method: str = \"get\",\n    data: Dict = None,\n    headers: Dict = None,\n):\n    \"\"\"\n    利用 pandas 提供的 read_html 函数来直接提取网页中的表格内容, 如网站链接失败, 可重复爬取 20 次\n    :param url: string 网站地址\n    :param encoding: string 编码类型: \"utf-8\", \"gbk\", \"gb2312\"\n    :param method: string 访问方法: \"get\", \"post\"\n    :param data: dict 上传数据: 键值对\n    :param headers: dict 游览器请求头: 键值对\n    :return: requests.response 爬取返回内容: response\n    \"\"\"\n    i = 0\n    while True:\n        try:\n            if method == \"get\":\n                r = requests.get(url, timeout=20, headers=headers)\n                r.encoding = encoding\n                r = pd.read_html(StringIO(r.text), encoding=encoding)\n                return r\n            elif method == \"post\":\n                r = requests.post(url, timeout=20, data=data, headers=headers)\n                r.encoding = encoding\n                r = pd.read_html(StringIO(r.text), encoding=encoding)\n                return r\n            else:\n                raise ValueError(\"请提供正确的请求方式\")\n        except requests.exceptions.Timeout as e:\n            i += 1\n            print(f\"第{str(i)}次链接失败, 最多尝试20次\", e)\n            time.sleep(5)\n            if i > 20:\n                return None\n"
  },
  {
    "path": "akshare/futures/symbol_var.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/7/21 15:00\nDesc: 期货品种映射表\n\"\"\"\n\nimport re\n\nfrom akshare.futures import cons\n\n\ndef symbol_varieties(contract_code: str):\n    \"\"\"\n    查找到具体合约代码, 返回大写字母的品种名称\n    :param contract_code: ru1801\n    :return: RU\n    \"\"\"\n    symbol_detail = \"\".join(re.findall(r\"\\D\", contract_code)).upper().strip()\n    if symbol_detail == \"PTA\":\n        symbol_detail = \"TA\"\n    return symbol_detail\n\n\ndef symbol_market(symbol_detail: str = \"SC\"):\n    \"\"\"\n    映射出市场代码\n    :param symbol_detail:\n    :return:\n    \"\"\"\n    var_item = symbol_varieties(symbol_detail)\n    for market_item, contract_items in cons.market_exchange_symbols.items():\n        if var_item in contract_items:\n            return market_item\n\n\ndef find_chinese(chinese_string: str):\n    \"\"\"\n    查找中文字符\n    :param chinese_string: 中文字符串\n    :return:\n    \"\"\"\n    p = re.compile(r\"[\\u4e00-\\u9fa5]\")\n    res = re.findall(p, chinese_string)\n    return \"\".join(res)\n\n\ndef chinese_to_english(chinese_var: str):\n    \"\"\"\n    映射期货品种中文名称和英文缩写\n    :param chinese_var: 期货品种中文名称\n    :return: 对应的英文缩写\n    \"\"\"\n    chinese_list = [\n        \"橡胶\",\n        \"天然橡胶\",\n        \"石油沥青\",\n        \"石油沥青(仓库)\",\n        \"石油沥青(厂库)\",\n        \"沥青\",\n        \"沥青仓库\",\n        \"沥青(仓库)\",\n        \"沥青厂库\",\n        \"沥青(厂库)\",\n        \"热轧卷板\",\n        \"热轧卷板厂库\",\n        \"热轧卷板仓库\",\n        \"热轧卷板(厂库)\",\n        \"热轧卷板(仓库)\",\n        \"热轧板卷\",\n        \"燃料油\",\n        \"白银\",\n        \"线材\",\n        \"螺纹钢\",\n        \"螺纹钢(仓库)\",\n        \"螺纹钢(厂库)\",\n        \"铅\",\n        \"铜\",\n        \"铝\",\n        \"锌\",\n        \"黄金\",\n        \"钯金\",\n        \"锡\",\n        \"镍\",\n        \"纸浆\",\n        \"纸浆(仓库)\",\n        \"纸浆(厂库)\",\n        \"豆一\",\n        \"大豆\",\n        \"豆二\",\n        \"胶合板\",\n        \"玉米\",\n        \"玉米淀粉\",\n        \"聚乙烯\",\n        \"LLDPE\",\n        \"LDPE\",\n        \"豆粕\",\n        \"豆油\",\n        \"大豆油\",\n        \"棕榈油\",\n        \"纤维板\",\n        \"鸡蛋\",\n        \"聚氯乙烯\",\n        \"PVC\",\n        \"聚丙烯\",\n        \"PP\",\n        \"焦炭\",\n        \"焦煤\",\n        \"铁矿石\",\n        \"乙二醇\",\n        \"强麦\",\n        \"强筋小麦\",\n        \" 强筋小麦\",\n        \"硬冬白麦\",\n        \"普麦\",\n        \"硬白小麦\",\n        \"硬白小麦（）\",\n        \"皮棉\",\n        \"棉花\",\n        \"一号棉\",\n        \"白糖\",\n        \"PTA\",\n        \"菜籽油\",\n        \"菜油\",\n        \"早籼稻\",\n        \"早籼\",\n        \"甲醇\",\n        \"柴油\",\n        \"玻璃\",\n        \"油菜籽\",\n        \"菜籽\",\n        \"菜籽粕\",\n        \"菜粕\",\n        \"动力煤\",\n        \"粳稻\",\n        \"晚籼稻\",\n        \"晚籼\",\n        \"硅铁\",\n        \"锰硅\",\n        \"硬麦\",\n        \"棉纱\",\n        \"苹果\",\n        \"原油\",\n        \"中质含硫原油\",\n        \"尿素\",\n        \"20号胶\",\n        \"苯乙烯\",\n        \"不锈钢\",\n        \"粳米\",\n        \"20号胶20\",\n        \"红枣\",\n        \"不锈钢仓库\",\n        \"不锈钢厂库\",\n        \"不锈钢(厂库)\",\n        \"不锈钢(仓库)\",\n        \"纯碱\",\n        \"液化石油气\",\n        \"低硫燃料油\",\n        \"纸浆仓库\",\n        \"石油沥青厂库\",\n        \"石油沥青仓库\",\n        \"螺纹钢仓库\",\n        \"螺纹钢厂库\",\n        \"纸浆厂库\",\n        \"低硫燃料油仓库\",\n        \"低硫燃料油厂库\",\n        \"低硫燃料油(仓库)\",\n        \"低硫燃料油(厂库)\",\n        \"短纤\",\n        \"涤纶短纤\",\n        \"生猪\",\n        \"花生\",\n        \"工业硅\",\n        \"氧化铝\",\n        \"丁二烯橡胶\",\n        \"碳酸锂\",\n        \"氧化铝仓库\",\n        \"氧化铝厂库\",\n        \"氧化铝(仓库)\",\n        \"氧化铝(厂库)\",\n        \"烧碱\",\n        \"丁二烯橡胶仓库\",\n        \"丁二烯橡胶厂库\",\n        \"丁二烯橡胶(仓库)\",\n        \"丁二烯橡胶(厂库)\",\n        \"PX\",\n        \"原木\",\n        \"瓶片期货\",\n        \"瓶片\",\n        \"纯苯\",\n        \"多晶硅\",\n        \"铸造铝合金\",\n        \"铜(BC)\",\n        \"胶版印刷纸(仓库)\",\n        \"胶版印刷纸(厂库)\",\n        \"丙烯期货\",\n        \"丙烯\",\n    ]\n    english_list = [\n        \"RU\",\n        \"RU\",\n        \"BU\",\n        \"BU\",\n        \"BU\",\n        \"BU\",\n        \"BU\",\n        \"BU\",\n        \"BU2\",\n        \"BU2\",\n        \"HC\",\n        \"HC\",\n        \"HC\",\n        \"HC\",\n        \"HC\",\n        \"HC\",\n        \"FU\",\n        \"AG\",\n        \"WR\",\n        \"RB\",\n        \"RB\",\n        \"RB\",\n        \"PB\",\n        \"CU\",\n        \"AL\",\n        \"ZN\",\n        \"AU\",\n        \"AU\",\n        \"SN\",\n        \"NI\",\n        \"SP\",\n        \"SP\",\n        \"SP\",\n        \"A\",\n        \"A\",\n        \"B\",\n        \"BB\",\n        \"C\",\n        \"CS\",\n        \"L\",\n        \"L\",\n        \"L\",\n        \"M\",\n        \"Y\",\n        \"Y\",\n        \"P\",\n        \"FB\",\n        \"JD\",\n        \"V\",\n        \"V\",\n        \"PP\",\n        \"PP\",\n        \"J\",\n        \"JM\",\n        \"I\",\n        \"EG\",\n        \"WH\",\n        \"WH\",\n        \"WH\",\n        \"PM\",\n        \"PM\",\n        \"PM\",\n        \"PM\",\n        \"CF\",\n        \"CF\",\n        \"CF\",\n        \"SR\",\n        \"TA\",\n        \"OI\",\n        \"OI\",\n        \"RI\",\n        \"ER\",\n        \"MA\",\n        \"MA\",\n        \"FG\",\n        \"RS\",\n        \"RS\",\n        \"RM\",\n        \"RM\",\n        \"ZC\",\n        \"JR\",\n        \"LR\",\n        \"LR\",\n        \"SF\",\n        \"SM\",\n        \"WT\",\n        \"CY\",\n        \"AP\",\n        \"SC\",\n        \"SC\",\n        \"UR\",\n        \"NR\",\n        \"EB\",\n        \"SS\",\n        \"RR\",\n        \"NR\",\n        \"CJ\",\n        \"SS\",\n        \"SS\",\n        \"SS\",\n        \"SS\",\n        \"SA\",\n        \"PG\",\n        \"LU\",\n        \"SP\",\n        \"BU\",\n        \"BU\",\n        \"RB\",\n        \"RB\",\n        \"SP\",\n        \"LU\",\n        \"LU\",\n        \"LU\",\n        \"LU\",\n        \"PF\",\n        \"PF\",\n        \"LH\",\n        \"PK\",\n        \"SI\",\n        \"AO\",\n        \"BR\",\n        \"LC\",\n        \"AO\",\n        \"AO\",\n        \"AO\",\n        \"AO\",\n        \"SH\",\n        \"BR\",\n        \"BR\",\n        \"BR\",\n        \"BR\",\n        \"PX\",\n        \"LG\",\n        \"PR\",\n        \"PR\",\n        \"BZ\",\n        \"PS\",\n        \"AD\",\n        \"BC\",\n        \"OP\",\n        \"OP\",\n        \"PL\",\n        \"PL\",\n    ]\n    pos = chinese_list.index(chinese_var)\n    return english_list[pos]\n\n\nif __name__ == \"__main__\":\n    print(chinese_to_english(\"苹果\"))\n    symbol = \"rb1801\"\n\n    var = symbol_varieties(\"rb1808\")\n    print(var)\n\n    market = symbol_market(\"SP\")\n    print(market)\n\n    chi = find_chinese(\"a对方水电费dc大V\")\n    print(chi)\n"
  },
  {
    "path": "akshare/futures_derivative/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/10/27 19:45\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/futures_derivative/cons.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2021/8/20 16:13\nDesc: 期货衍生指标配置文件\n西本新干线-指数数据\n\"\"\"\n\n# xgx\nsymbol_dict = {\n    \"钢材指数\": \"65\",\n    \"铁矿指数\": \"61\",\n    \"焦炭指数\": \"64\",\n    \"煤炭指数\": \"1002\",\n    \"水泥指数\": \"1003\",\n    \"FTZ指数\": \"1100\",\n    \"钢铁行业PMI指数\": \"118\",\n    \"生产指数\": \"119\",\n    \"新订单指数\": \"120\",\n    \"新出口订单指数\": \"121\",\n    \"产成品库存指数\": \"122\",\n    \"原材料库存指数\": \"123\",\n    \"沪市终端线螺每周采购量监控\": \"74\",\n    \"沪螺纹钢社会库存\": \"72\",\n    \"国内螺纹钢社会库存量\": \"67\",\n    \"国内线材社会库存量\": \"68\",\n    \"国内主要城市热轧卷板库存\": \"69\",\n    \"国内主要城市冷轧卷板库存\": \"70\",\n    \"国内主要城市中厚板库存\": \"73\",\n    \"全国主要钢材品种库存总量\": \"117\",\n    \"热轧价格走势\": \"108\",\n    \"冷轧价格走势\": \"109\",\n    \"中板价格走势\": \"110\",\n    \"型材价格走势\": \"111\",\n    \"沪二级螺纹钢价格走势\": \"127\",\n    \"螺纹钢主力合约收盘价格\": \"179\",\n    \"铁矿石主力合约收盘价格\": \"180\",\n    \"热轧板卷主力合约收盘价格\": \"181\",\n    \"焦煤主力合约收盘价格\": \"182\",\n    \"焦炭主力合约收盘价格\": \"183\",\n    \"存款基准利率\": \"52\",\n    \"贷款基准利率\": \"53\",\n    \"存款准备金率\": \"105\",\n    \"人民币新增贷款（亿元）\": \"174\",\n    \"广义货币供应量增速（M2，%）\": \"175\",\n    \"狭义货币供应量增速（M1，%)\": \"176\",\n    \"上海大额银行承兑汇票(Ⅰ)\": \"129\",\n    \"上海大额银行承兑汇票(Ⅱ)\": \"130\",\n    \"上海大额银行承兑汇票(Ⅲ)\": \"131\",\n    \"上海大额商业承兑汇票(Ⅰ)\": \"132\",\n    \"上海大额商业承兑汇票(II)\": \"133\",\n    \"上海大额商业承兑汇票(III)\": \"134\",\n    \"重点企业粗钢日均产量（旬报）\": \"99\",\n    \"重点企业钢材库存量（旬报）\": \"124\",\n    \"国内月度粗钢日均产量\": \"159\",\n    \"国内月度粗钢产量\": \"35\",\n    \"国内月度钢材产量\": \"88\",\n    \"国内月度螺纹钢产量\": \"40\",\n    \"国内月度线材产量\": \"41\",\n    \"国内月度热轧板卷产量\": \"114\",\n    \"国内月度冷轧板卷产量\": \"115\",\n    \"国内月度中厚板产量\": \"116\",\n    \"国内月度生铁产量\": \"177\",\n    \"国内月度焦炭产量\": \"37\",\n    \"国内月度铁矿石原矿产量\": \"36\",\n    \"国内月度铁矿石进口量\": \"42\",\n    \"国内月度钢材出口量\": \"38\",\n    \"国内月度钢材进口量\": \"39\",\n    \"国内铁矿石港口存量\": \"43\",\n    \"唐山地区钢坯库存量\": \"161\",\n    \"印度矿港口库存\": \"100\",\n    \"波罗的海干散货指数（BDI）\": \"77\",\n    \"废钢价格走势\": \"78\",\n    \"钢坯价格走势\": \"79\",\n    \"钢材成本指数\": \"178\",\n    \"铁矿石进口月度均价\": \"93\",\n    \"巴西图巴朗-北仑铁矿海运价\": \"94\",\n    \"西澳-北仑铁矿海运价\": \"95\",\n    \"澳大利亚粉矿价格（56.5%，日照港）\": \"1006\",\n    \"澳大利亚粉矿价格(61.5%青岛港，元/吨）\": \"106\",\n    \"巴西粉矿价格（ 65% 日照港，元/吨）\": \"107\",\n    \"62%铁矿石指数\": \"125\",\n    \"63.5%印度粉矿外盘报价\": \"126\",\n    \"国民生产总值季度增速（GDP）\": \"166\",\n    \"居民消费物价指数（CPI）\": \"30\",\n    \"工业生产者出厂价格指数（PPI）\": \"165\",\n    \"制造业采购经理指数（PMI）\": \"104\",\n    \"月度建筑安装工程投资额\": \"91\",\n    \"月度固定资产投资额\": \"32\",\n    \"月度房地产建设投资额\": \"34\",\n    \"城填固定资产投资增速（累计值，%）\": \"171\",\n    \"房地产开发投资增速（累计值，%）\": \"167\",\n    \"土地购置面积同比增速（累计值，%）\": \"168\",\n    \"房屋新开工面积同比增速（累计值，%）\": \"169\",\n    \"商品房销售面积同比增速（累计值，%）\": \"170\",\n    \"钢铁业固定资产投资增速（累计值，%）\": \"172\",\n    \"CRU全球\": \"80\",\n    \"CRU长材\": \"81\",\n    \"CRU扁平材\": \"82\",\n    \"CRU北美\": \"83\",\n    \"CRU欧洲\": \"84\",\n    \"CRU亚洲\": \"85\",\n    \"全球粗钢月度产量（万吨）\": \"162\",\n    \"全球粗钢日均产量（万吨）\": \"163\",\n    \"全球粗钢产能利用率（%）\": \"164\",\n}\n\nxgx_code_url = \"http://www.96369.net/Other/ValidateCode.aspx\"\nxgx_main_url = \"http://www.96369.net/indices/{}\"\nxgx_headers = {\n    \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3\",\n    \"Accept-Encoding\": \"gzip, deflate\",\n    \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    \"Cache-Control\": \"no-cache\",\n    \"Connection\": \"keep-alive\",\n    \"Content-Length\": \"57\",\n    \"Content-Type\": \"application/x-www-form-urlencoded\",\n    \"Host\": \"www.96369.net\",\n    \"Origin\": \"http://www.96369.net\",\n    \"Pragma\": \"no-cache\",\n    \"Referer\": \"http://www.96369.net/indices/67\",\n    \"Upgrade-Insecure-Requests\": \"1\",\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36\",\n}\nxgx_short_headers = {\n    \"Accept\": \"image/webp,image/apng,image/*,*/*;q=0.8\",\n    \"Accept-Encoding\": \"gzip, deflate\",\n    \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    \"Cache-Control\": \"no-cache\",\n    \"Connection\": \"keep-alive\",\n    \"Host\": \"www.96369.net\",\n    \"Pragma\": \"no-cache\",\n    \"Referer\": \"http://www.96369.net/indices/67\",\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36\",\n}\n# csa\ncsa_params_url = \"https://www.jiaoyifamen.com/tools/nav/spread\"\ncsa_url_spread = \"https://www.jiaoyifamen.com/tools/future/spread/free\"\ncsa_url_ratio = \"https://www.jiaoyifamen.com/tools/future/valence/free\"\ncsa_url_customize = \"https://www.jiaoyifamen.com/tools/future/customize\"\n\ncsa_payload = {\"type1\": \"RB\", \"code1\": \"01\", \"type2\": \"RB\", \"code2\": \"05\"}\n"
  },
  {
    "path": "akshare/futures_derivative/futures_contract_info_cffex.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/2/28 17:00\nDesc: 中国金融期货交易所-数据-交易参数\nhttp://www.cffex.com.cn/jycs/\n\"\"\"\n\nimport xml.etree.ElementTree as ET\n\nimport pandas as pd\nimport requests\n\n\ndef futures_contract_info_cffex(date: str = \"20240228\") -> pd.DataFrame:\n    \"\"\"\n    中国金融期货交易所-数据-交易参数\n    http://www.gfex.com.cn/gfex/hyxx/ywcs.shtml\n    :param date: 查询日期\n    :type date: str\n    :return: 交易参数汇总查询\n    :rtype: pandas.DataFrame\n    \"\"\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36\",\n    }\n    url = f\"http://www.cffex.com.cn/sj/jycs/{date[:6]}/{date[6:]}/index.xml\"\n    r = requests.get(url, headers=headers)\n    xml_data = r.text\n    # 解析 XML\n    tree = ET.ElementTree(ET.fromstring(xml_data))\n    root = tree.getroot()\n    # 获取所有的记录\n    records = root.findall(\".//INDEX\")\n    # 解析数据并填充到列表中\n    data = []\n    for record in records:\n        # 对于每个记录，创建一个字典\n        row_data = {}\n        for field in record:\n            row_data[field.tag] = field.text\n        # 将字典添加到数据列表中\n        data.append(row_data)\n\n    temp_df = pd.DataFrame(data)\n    temp_df.rename(\n        columns={\n            \"TRADING_DAY\": \"查询交易日\",\n            \"PRODUCT_ID\": \"品种\",\n            \"INSTRUMENT_ID\": \"合约代码\",\n            \"INSTRUMENT_MONTH\": \"合约月份\",\n            \"BASIS_PRICE\": \"挂盘基准价\",\n            \"OPEN_DATE\": \"上市日\",\n            \"END_TRADING_DAY\": \"最后交易日\",\n            \"UPPER_VALUE\": \"涨停板幅度\",\n            \"LOWER_VALUE\": \"跌停板幅度\",\n            \"UPPERLIMITPRICE\": \"涨停板价位\",\n            \"LOWERLIMITPRICE\": \"跌停板价位\",\n            \"LONG_LIMIT\": \"持仓限额\",\n        },\n        inplace=True,\n    )\n    temp_df[\"挂盘基准价\"] = pd.to_numeric(temp_df[\"挂盘基准价\"], errors=\"coerce\")\n    temp_df[\"涨停板价位\"] = pd.to_numeric(temp_df[\"涨停板价位\"], errors=\"coerce\")\n    temp_df[\"跌停板价位\"] = pd.to_numeric(temp_df[\"跌停板价位\"], errors=\"coerce\")\n    temp_df[\"持仓限额\"] = pd.to_numeric(temp_df[\"持仓限额\"], errors=\"coerce\")\n\n    temp_df[\"查询交易日\"] = pd.to_datetime(\n        temp_df[\"查询交易日\"], format=\"%Y%m%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"上市日\"] = pd.to_datetime(\n        temp_df[\"上市日\"], format=\"%Y%m%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"最后交易日\"] = pd.to_datetime(\n        temp_df[\"最后交易日\"], format=\"%Y%m%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"查询交易日\"] = pd.to_datetime(\n        temp_df[\"查询交易日\"], format=\"%Y%m%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df = temp_df[\n        [\n            \"合约代码\",\n            \"合约月份\",\n            \"挂盘基准价\",\n            \"上市日\",\n            \"最后交易日\",\n            \"涨停板幅度\",\n            \"跌停板幅度\",\n            \"涨停板价位\",\n            \"跌停板价位\",\n            \"持仓限额\",\n            \"品种\",\n            \"查询交易日\",\n        ]\n    ]\n    temp_df.sort_values([\"合约代码\"], ascending=False, ignore_index=True, inplace=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_contract_info_cffex_df = futures_contract_info_cffex(date=\"20240228\")\n    print(futures_contract_info_cffex_df)\n"
  },
  {
    "path": "akshare/futures_derivative/futures_contract_info_czce.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/11 16:30\nDesc: 郑州商品交易所-交易数据-参考数据\nhttp://www.czce.com.cn/cn/jysj/cksj/H770322index_1.htm\n\"\"\"\n\nimport xml.etree.ElementTree as ET\n\nimport pandas as pd\nimport requests\n\n\ndef futures_contract_info_czce(date: str = \"20240228\") -> pd.DataFrame:\n    \"\"\"\n    郑州商品交易所-交易数据-参考数据\n    http://www.czce.com.cn/cn/jysj/cksj/H770322index_1.htm\n    :param date: 查询日期\n    :type date: str\n    :return: 交易参数汇总查询\n    :rtype: pandas.DataFrame\n    \"\"\"\n    headers = {\n        \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,\"\n        \"image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/84.0.4147.89 Safari/537.36\",\n        \"Host\": \"www.czce.com.cn\",\n    }\n    url = f\"http://www.czce.com.cn/cn/DFSStaticFiles/Future/{date[:4]}/{date}/FutureDataReferenceData.xml\"\n    r = requests.get(url, headers=headers)\n    xml_data = r.text\n    # 解析 XML\n    tree = ET.ElementTree(ET.fromstring(xml_data))\n    root = tree.getroot()\n    # 获取所有的记录\n    records = root.findall(\".//Contract\")\n    # 解析数据并填充到列表中\n    data = []\n    for record in records:\n        # 对于每个记录，创建一个字典\n        row_data = {}\n        for field in record:\n            row_data[field.tag] = field.text\n        # 将字典添加到数据列表中\n        data.append(row_data)\n\n    temp_df = pd.DataFrame(data)\n    temp_df.rename(\n        columns={\n            \"Name\": \"产品名称\",\n            \"CtrCd\": \"合约代码\",\n            \"PrdCd\": \"产品代码\",\n            \"PrdTp\": \"产品类型\",\n            \"ExchCd\": \"交易所MIC编码\",\n            \"SegTp\": \"交易场所\",\n            \"TrdHrs\": \"交易时间节假日除外\",\n            \"TrdCtyCd\": \"交易国家ISO编码\",\n            \"TrdCcyCd\": \"交易币种ISO编码\",\n            \"ClrngCcyCd\": \"结算币种ISO编码\",\n            \"ExpiryTime\": \"到期时间待国家公布2025年节假日安排后进行调整\",\n            \"SettleTp\": \"结算方式\",\n            \"Duration\": \"挂牌频率\",\n            \"TckSz\": \"最小变动价位\",\n            \"TckVal\": \"最小变动价值\",\n            \"CtrSz\": \"交易单位\",\n            \"MsrmntUnt\": \"计量单位\",\n            \"MaxOrdSz\": \"最大下单量\",\n            \"MnthPosLmt\": \"日持仓限额期货公司会员不限仓\",\n            \"MinBlckTrdSz\": \"大宗交易最小规模\",\n            \"CesrEaaFl\": \"是否受CESR监管\",\n            \"FlexElgblFl\": \"是否为灵活合约\",\n            \"ListCy\": \"上市周期该产品的所有合约月份\",\n            \"DlvryNtcDt\": \"交割通知日\",\n            \"FrstTrdDt\": \"第一交易日\",\n            \"LstTrdDt\": \"最后交易日待国家公布2025年节假日安排后进行调整\",\n            \"DlvrySettleDt\": \"交割结算日\",\n            \"MnthCd\": \"月份代码\",\n            \"YrCd\": \"年份代码\",\n            \"LstDlvryDt\": \"最后交割日\",\n            \"LstDlvryDtBoard\": \"车（船）板最后交割日\",\n            \"DlvryMnth\": \"合约交割月份本合约交割月份\",\n            \"Margin\": \"交易保证金率\",\n            \"PxLim\": \"涨跌停板\",\n            \"FeeCcy\": \"费用币种ISO编码\",\n            \"TrdFee\": \"交易手续费\",\n            \"FeeCollectionType\": \"手续费收取方式\",\n            \"DlvryFee\": \"交割手续费\",\n            \"IntraDayTrdFee\": \"平今仓手续费\",\n            \"TradingLimit\": \"交易限额\",\n        },\n        inplace=True,\n    )\n\n    temp_df[\"交易手续费\"] = pd.to_numeric(temp_df[\"交易手续费\"], errors=\"coerce\")\n    temp_df[\"交割手续费\"] = pd.to_numeric(temp_df[\"交割手续费\"], errors=\"coerce\")\n    temp_df[\"平今仓手续费\"] = pd.to_numeric(temp_df[\"平今仓手续费\"], errors=\"coerce\")\n    temp_df[\"交易限额\"] = pd.to_numeric(temp_df[\"交易限额\"], errors=\"coerce\")\n    temp_df[\"车（船）板最后交割日\"] = pd.to_datetime(\n        temp_df[\"车（船）板最后交割日\"], errors=\"coerce\"\n    ).dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_contract_info_czce_df = futures_contract_info_czce(date=\"20240228\")\n    print(futures_contract_info_czce_df)\n"
  },
  {
    "path": "akshare/futures_derivative/futures_contract_info_dce.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/8/18 11:00\nDesc: 大连商品交易所-业务/服务-业务参数-交易参数-合约信息查询\nhttp://www.dce.com.cn/dalianshangpin/ywfw/ywcs/jycs/hyxxcx/index.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef futures_contract_info_dce() -> pd.DataFrame:\n    \"\"\"\n    大连商品交易所-数据中心-业务数据-交易参数-合约信息\n    http://www.dce.com.cn/dce/channel/list/180.html\n    :return: 交易参数汇总查询\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://www.dce.com.cn/dcereport/publicweb/tradepara/contractInfo\"\n    payload = {\n        \"lang\": \"zh\",\n        \"tradeType\": \"1\",\n        \"varietyId\": \"all\",\n    }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.rename(\n        columns={\n            \"contractId\": \"合约\",\n            \"variety\": \"品种名称\",\n            \"varietyOrder\": \"品种代码\",\n            \"unit\": \"交易单位\",\n            \"tick\": \"最小变动价位\",\n            \"startTradeDate\": \"开始交易日\",\n            \"endTradeDate\": \"最后交易日\",\n            \"endDeliveryDate\": \"最后交割日\",\n            \"tradeType\": \"\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"品种名称\",\n            \"合约\",\n            \"交易单位\",\n            \"最小变动价位\",\n            \"开始交易日\",\n            \"最后交易日\",\n            \"最后交割日\",\n        ]\n    ]\n    temp_df[\"交易单位\"] = pd.to_numeric(temp_df[\"交易单位\"], errors=\"coerce\")\n    temp_df[\"最小变动价位\"] = pd.to_numeric(temp_df[\"最小变动价位\"], errors=\"coerce\")\n    temp_df[\"开始交易日\"] = pd.to_datetime(\n        temp_df[\"开始交易日\"], format=\"%Y%m%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"最后交易日\"] = pd.to_datetime(\n        temp_df[\"最后交易日\"], format=\"%Y%m%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"最后交割日\"] = pd.to_datetime(\n        temp_df[\"最后交割日\"], format=\"%Y%m%d\", errors=\"coerce\"\n    ).dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_contract_info_dce_df = futures_contract_info_dce()\n    print(futures_contract_info_dce_df)\n"
  },
  {
    "path": "akshare/futures_derivative/futures_contract_info_gfex.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/2/28 16:00\nDesc: 广州期货交易所-业务/服务-合约信息\nhttp://www.gfex.com.cn/gfex/hyxx/ywcs.shtml\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef futures_contract_info_gfex() -> pd.DataFrame:\n    \"\"\"\n    广州期货交易所-业务/服务-合约信息\n    http://www.gfex.com.cn/gfex/hyxx/ywcs.shtml\n    :return: 交易参数汇总查询\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://www.gfex.com.cn/u/interfacesWebTtQueryContractInfo/loadList\"\n    params = {\n        \"variety\": \"\",\n        \"trade_type\": \"0\",\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\"\n    }\n    r = requests.post(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.rename(\n        columns={\n            \"tradeType\": \"-\",\n            \"variety\": \"品种\",\n            \"varietyOrder\": \"-\",\n            \"contractId\": \"合约代码\",\n            \"unit\": \"交易单位\",\n            \"tick\": \"最小变动单位\",\n            \"startTradeDate\": \"开始交易日\",\n            \"endTradeDate\": \"最后交易日\",\n            \"endDeliveryDate0\": \"最后交割日\",\n        },\n        inplace=True,\n    )\n    temp_df[\"交易单位\"] = pd.to_numeric(temp_df[\"交易单位\"], errors=\"coerce\")\n    temp_df[\"最小变动单位\"] = pd.to_numeric(temp_df[\"最小变动单位\"], errors=\"coerce\")\n    temp_df[\"开始交易日\"] = pd.to_datetime(\n        temp_df[\"开始交易日\"], format=\"%Y%m%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"最后交易日\"] = pd.to_datetime(\n        temp_df[\"最后交易日\"], format=\"%Y%m%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"最后交割日\"] = pd.to_datetime(\n        temp_df[\"最后交割日\"], format=\"%Y%m%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df = temp_df[\n        [\n            \"品种\",\n            \"合约代码\",\n            \"交易单位\",\n            \"最小变动单位\",\n            \"开始交易日\",\n            \"最后交易日\",\n            \"最后交割日\",\n        ]\n    ]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_contract_info_gfex_df = futures_contract_info_gfex()\n    print(futures_contract_info_gfex_df)\n"
  },
  {
    "path": "akshare/futures_derivative/futures_contract_info_ine.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/11/30 19:00\nDesc: 上海国际能源交易中心-业务指南-交易参数汇总(期货)\nhttps://www.ine.cn/bourseService/summary/?name=currinstrumentprop\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef futures_contract_info_ine(date: str = \"20241129\") -> pd.DataFrame:\n    \"\"\"\n    上海国际能源交易中心-业务指南-交易参数汇总(期货)\n    https://www.ine.cn/bourseService/summary/?name=currinstrumentprop\n    :param date: 查询日期; 交易日\n    :type date: str\n    :return: 交易参数汇总查询\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://www.ine.cn/data/busiparamdata/future/ContractBaseInfo{date}.dat\"\n    params = {\"rnd\": \"0.8312696798757147\"}\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/119.0.0.0 Safari/537.36\"\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"ContractBaseInfo\"])\n    temp_df.rename(\n        columns={\n            \"BASISPRICE\": \"挂牌基准价\",\n            \"ENDDELIVDATE\": \"最后交割日\",\n            \"EXPIREDATE\": \"到期日\",\n            \"INSTRUMENTID\": \"合约代码\",\n            \"OPENDATE\": \"上市日\",\n            \"STARTDELIVDATE\": \"开始交割日\",\n            \"TRADINGDAY\": \"交易日\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"合约代码\",\n            \"上市日\",\n            \"到期日\",\n            \"开始交割日\",\n            \"最后交割日\",\n            \"挂牌基准价\",\n            \"交易日\",\n        ]\n    ]\n    temp_df[\"上市日\"] = pd.to_datetime(temp_df[\"上市日\"], errors=\"coerce\").dt.date\n    temp_df[\"到期日\"] = pd.to_datetime(temp_df[\"到期日\"], errors=\"coerce\").dt.date\n    temp_df[\"开始交割日\"] = pd.to_datetime(\n        temp_df[\"开始交割日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"最后交割日\"] = pd.to_datetime(\n        temp_df[\"最后交割日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"交易日\"] = pd.to_datetime(temp_df[\"交易日\"], errors=\"coerce\").dt.date\n    temp_df[\"挂牌基准价\"] = pd.to_numeric(temp_df[\"挂牌基准价\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_contract_info_ine_df = futures_contract_info_ine(date=\"20241129\")\n    print(futures_contract_info_ine_df)\n"
  },
  {
    "path": "akshare/futures_derivative/futures_contract_info_shfe.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/5/13 17:45\nDesc: 上海期货交易所-交易所服务-业务数据-交易参数汇总查询\nhttps://tsite.shfe.com.cn/bourseService/businessdata/summaryinquiry/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef futures_contract_info_shfe(date: str = \"20240513\") -> pd.DataFrame:\n    \"\"\"\n    上海期货交易所-交易所服务-业务数据-交易参数汇总查询\n    https://tsite.shfe.com.cn/bourseService/businessdata/summaryinquiry/\n    :param date: 查询日期; 交易日\n    :type date: str\n    :return: 交易参数汇总查询\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        f\"https://www.shfe.com.cn/data/busiparamdata/future/ContractBaseInfo{date}.dat\"\n    )\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/119.0.0.0 Safari/537.36\"\n    }\n    r = requests.get(url, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"ContractBaseInfo\"])\n    temp_df.rename(\n        columns={\n            \"BASISPRICE\": \"挂牌基准价\",\n            \"ENDDELIVDATE\": \"最后交割日\",\n            \"EXPIREDATE\": \"到期日\",\n            \"INSTRUMENTID\": \"合约代码\",\n            \"OPENDATE\": \"上市日\",\n            \"STARTDELIVDATE\": \"开始交割日\",\n            \"TRADINGDAY\": \"交易日\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"合约代码\",\n            \"上市日\",\n            \"到期日\",\n            \"开始交割日\",\n            \"最后交割日\",\n            \"挂牌基准价\",\n            \"交易日\",\n        ]\n    ]\n    temp_df[\"上市日\"] = pd.to_datetime(temp_df[\"上市日\"], errors=\"coerce\").dt.date\n    temp_df[\"到期日\"] = pd.to_datetime(temp_df[\"到期日\"], errors=\"coerce\").dt.date\n    temp_df[\"开始交割日\"] = pd.to_datetime(\n        temp_df[\"开始交割日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"最后交割日\"] = pd.to_datetime(\n        temp_df[\"最后交割日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"交易日\"] = pd.to_datetime(temp_df[\"交易日\"], errors=\"coerce\").dt.date\n    temp_df[\"挂牌基准价\"] = pd.to_numeric(temp_df[\"挂牌基准价\"], errors=\"coerce\")\n    temp_df[\"更新时间\"] = data_json[\"update_date\"]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_contract_info_shfe_df = futures_contract_info_shfe(date=\"20250611\")\n    print(futures_contract_info_shfe_df)\n"
  },
  {
    "path": "akshare/futures_derivative/futures_cot_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/5 18:00\nDesc: 新浪财经-期货-成交持仓\nhttps://vip.stock.finance.sina.com.cn/q/view/vFutures_Positions_cjcc.php\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\n\ndef futures_hold_pos_sina(\n    symbol: str = \"成交量\", contract: str = \"OI2501\", date: str = \"20240223\"\n) -> pd.DataFrame:\n    \"\"\"\n    新浪财经-期货-成交持仓\n    https://vip.stock.finance.sina.com.cn/q/view/vFutures_Positions_cjcc.php\n    :param symbol: choice of {\"成交量\", \"多单持仓\", \"空单持仓\"}\n    :type symbol: str\n    :param contract: 期货合约\n    :type contract: str\n    :param date: 查询日期\n    :type date: str\n    :return: 成交持仓\n    :rtype: pandas.DataFrame\n    \"\"\"\n    date = \"-\".join([date[:4], date[4:6], date[6:]])\n    url = \"https://vip.stock.finance.sina.com.cn/q/view/vFutures_Positions_cjcc.php\"\n    params = {\"t_breed\": contract, \"t_date\": date}\n    r = requests.get(url, params=params)\n    if symbol == \"成交量\":\n        temp_df = pd.read_html(StringIO(r.text))[2].iloc[:-1, :]\n        temp_df[\"名次\"] = pd.to_numeric(temp_df[\"名次\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"比上交易增减\"] = pd.to_numeric(\n            temp_df[\"比上交易增减\"], errors=\"coerce\"\n        )\n        return temp_df\n    elif symbol == \"多单持仓\":\n        temp_df = pd.read_html(StringIO(r.text))[3].iloc[:-1, :]\n        temp_df[\"名次\"] = pd.to_numeric(temp_df[\"名次\"], errors=\"coerce\")\n        temp_df[\"多单持仓\"] = pd.to_numeric(temp_df[\"多单持仓\"], errors=\"coerce\")\n        temp_df[\"比上交易增减\"] = pd.to_numeric(\n            temp_df[\"比上交易增减\"], errors=\"coerce\"\n        )\n        return temp_df\n    elif symbol == \"空单持仓\":\n        temp_df = pd.read_html(StringIO(r.text))[4].iloc[:-1, :]\n        temp_df[\"名次\"] = pd.to_numeric(temp_df[\"名次\"], errors=\"coerce\")\n        temp_df[\"空单持仓\"] = pd.to_numeric(temp_df[\"空单持仓\"], errors=\"coerce\")\n        temp_df[\"比上交易增减\"] = pd.to_numeric(\n            temp_df[\"比上交易增减\"], errors=\"coerce\"\n        )\n        return temp_df\n    else:\n        raise ValueError(\"请输入正确的 symbol 参数\")\n\n\nif __name__ == \"__main__\":\n    futures_hold_pos_sina_df = futures_hold_pos_sina(\n        symbol=\"成交量\", contract=\"IC2403\", date=\"20240203\"\n    )\n    print(futures_hold_pos_sina_df)\n\n    futures_hold_pos_sina_df = futures_hold_pos_sina(\n        symbol=\"多单持仓\", contract=\"OI2501\", date=\"20241016\"\n    )\n    print(futures_hold_pos_sina_df)\n\n    futures_hold_pos_sina_df = futures_hold_pos_sina(\n        symbol=\"空单持仓\", contract=\"OI2501\", date=\"20241016\"\n    )\n    print(futures_hold_pos_sina_df)\n"
  },
  {
    "path": "akshare/futures_derivative/futures_hog.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/3/18 14:00\nDesc: 玄田数据\nhttps://zhujia.zhuwang.com.cn\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef futures_hog_core(symbol: str = \"外三元\") -> pd.DataFrame:\n    \"\"\"\n    玄田数据-核心数据\n    https://zhujia.zhuwang.com.cn\n    :param symbol: choice of {\"外三元\", \"内三元\", \"土杂猪\"}\n    :type symbol: str\n    :return: 玄田数据-核心数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if symbol == \"外三元\":\n        url = \"https://xt.yangzhu.vip/data/getzhujiahitsdata\"\n        params = {\"ptype\": \"1\", \"areano\": \"-1\", \"datetype\": \"0\"}\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df.columns = [\"value\", \"date\"]\n        temp_df = temp_df[[\"date\", \"value\"]]\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n        return temp_df\n    elif symbol == \"内三元\":\n        url = \"https://xt.yangzhu.vip/data/getzhujiahitsdata\"\n        params = {\"ptype\": \"2\", \"areano\": \"-1\", \"datetype\": \"0\"}\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df.columns = [\"value\", \"date\"]\n        temp_df = temp_df[[\"date\", \"value\"]]\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n        return temp_df\n    elif symbol == \"土杂猪\":\n        url = \"https://xt.yangzhu.vip/data/getzhujiahitsdata\"\n        params = {\"ptype\": \"3\", \"areano\": \"-1\", \"datetype\": \"0\"}\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df.columns = [\"value\", \"date\"]\n        temp_df = temp_df[[\"date\", \"value\"]]\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n        return temp_df\n\n\ndef futures_hog_cost(symbol: str = \"玉米\") -> pd.DataFrame:\n    \"\"\"\n    玄田数据-成本维度\n    https://zhujia.zhuwang.com.cn\n    :param symbol: choice of {\"玉米\", \"豆粕\", \"二元母猪价格\", \"仔猪价格\"}\n    :type symbol: str\n    :return: 玄田数据-成本维度\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if symbol == \"玉米\":\n        url = \"https://xt.yangzhu.vip/data/getzhujiahitsdata\"\n        params = {\"ptype\": \"4\", \"areano\": \"-1\", \"datetype\": \"0\"}\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df.columns = [\"value\", \"date\"]\n        temp_df = temp_df[[\"date\", \"value\"]]\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n        return temp_df\n    elif symbol == \"豆粕\":\n        url = \"https://xt.yangzhu.vip/data/getzhujiahitsdata\"\n        params = {\"ptype\": \"5\", \"areano\": \"-1\", \"datetype\": \"0\"}\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df.columns = [\"value\", \"date\"]\n        temp_df = temp_df[[\"date\", \"value\"]]\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n        return temp_df\n    elif symbol == \"二元母猪价格\":\n        url = \"https://xt.yangzhu.vip/data/getmapdata\"\n        params = {\n            \"ptype\": \"1\",\n            \"areano\": \"-1\",\n        }\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df.columns = [\"date\", \"value\"]\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n        return temp_df\n    elif symbol == \"仔猪价格\":\n        url = \"https://xt.yangzhu.vip/data/getmapdata\"\n        params = {\n            \"ptype\": \"2\",\n            \"areano\": \"-1\",\n        }\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df.columns = [\"date\", \"value\"]\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n        return temp_df\n\n\ndef futures_hog_supply(symbol: str = \"猪肉批发价\") -> pd.DataFrame:\n    \"\"\"\n    玄田数据-供应维度\n    https://zhujia.zhuwang.com.cn\n    :param symbol: choice of {\"猪肉批发价\", \"储备冻猪肉\", \"饲料原料数据\", \"白条肉\",\n    \"生猪产能\", \"育肥猪\", \"肉类价格指数\", \"猪粮比价\"}\n    :type symbol: str\n    :return: 玄田数据-供应维度\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if symbol == \"猪肉批发价\":\n        url = \"https://xt.yangzhu.vip/data/getmapdata\"\n        params = {\"ptype\": \"3\", \"areano\": \"-1\"}\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df.columns = [\"date\", \"item\", \"value\"]\n        del temp_df[\"item\"]\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n        return temp_df\n    elif symbol == \"储备冻猪肉\":\n        url = \"https://xt.yangzhu.vip/data/getmapdata\"\n        params = {\"ptype\": \"4\", \"areano\": \"-1\"}\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df.columns = [\"date\", \"value\"]\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n        return temp_df\n    elif symbol == \"饲料原料数据\":\n        url = \"https://xt.yangzhu.vip/data/getmapdata\"\n        params = {\"ptype\": \"5\", \"areano\": \"-1\"}\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df.columns = [\n            \"周期\",\n            \"大豆进口金额\",\n            \"大豆播种面积\",\n            \"玉米进口金额\",\n            \"玉米播种面积\",\n        ]\n        temp_df[\"周期\"] = temp_df[\"周期\"].astype(int).astype(str)\n        temp_df[\"大豆进口金额\"] = pd.to_numeric(\n            temp_df[\"大豆进口金额\"], errors=\"coerce\"\n        )\n        temp_df[\"大豆播种面积\"] = pd.to_numeric(\n            temp_df[\"大豆播种面积\"], errors=\"coerce\"\n        )\n        temp_df[\"玉米进口金额\"] = pd.to_numeric(\n            temp_df[\"玉米进口金额\"], errors=\"coerce\"\n        )\n        temp_df[\"玉米播种面积\"] = pd.to_numeric(\n            temp_df[\"玉米播种面积\"], errors=\"coerce\"\n        )\n        return temp_df\n    elif symbol == \"白条肉\":\n        url = \"https://xt.yangzhu.vip/data/getmapdata\"\n        params = {\"ptype\": \"6\", \"areano\": \"-1\"}\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df.columns = [\"周期\", \"白条肉平均出厂价格\", \"环比\", \"同比\"]\n        temp_df[\"白条肉平均出厂价格\"] = pd.to_numeric(\n            temp_df[\"白条肉平均出厂价格\"], errors=\"coerce\"\n        )\n        temp_df[\"环比\"] = pd.to_numeric(temp_df[\"环比\"], errors=\"coerce\")\n        temp_df[\"同比\"] = pd.to_numeric(temp_df[\"同比\"], errors=\"coerce\")\n        return temp_df\n    elif symbol == \"生猪产能\":\n        url = \"https://xt.yangzhu.vip/data/getmapdata\"\n        params = {\"ptype\": \"7\", \"areano\": \"-1\"}\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df.columns = [\"周期\", \"能繁母猪存栏\", \"猪肉产量\", \"生猪存栏\", \"生猪出栏\"]\n        temp_df[\"能繁母猪存栏\"] = pd.to_numeric(\n            temp_df[\"能繁母猪存栏\"], errors=\"coerce\"\n        )\n        temp_df[\"猪肉产量\"] = pd.to_numeric(temp_df[\"猪肉产量\"], errors=\"coerce\")\n        temp_df[\"生猪存栏\"] = pd.to_numeric(temp_df[\"生猪存栏\"], errors=\"coerce\")\n        temp_df[\"生猪出栏\"] = pd.to_numeric(temp_df[\"生猪出栏\"], errors=\"coerce\")\n        return temp_df\n    elif symbol == \"育肥猪\":\n        url = \"https://xt.yangzhu.vip/data/getmapdata\"\n        params = {\"ptype\": \"9\", \"areano\": \"-1\"}\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df = temp_df[[\"date\", \"benzhou\"]]\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        temp_df[\"benzhou\"] = pd.to_numeric(temp_df[\"benzhou\"], errors=\"coerce\")\n        return temp_df\n    elif symbol == \"肉类价格指数\":\n        url = \"https://xt.yangzhu.vip/data/getmapdata\"\n        params = {\"ptype\": \"10\", \"areano\": \"-1\"}\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df.columns = [\"date\", \"item\", \"value\"]\n        del temp_df[\"item\"]\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n        return temp_df\n    elif symbol == \"猪粮比价\":\n        url = \"https://xt.yangzhu.vip/data/getmapdata\"\n        params = {\"ptype\": \"11\", \"areano\": \"-1\"}\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df.columns = [\"date\", \"value\"]\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n        return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_hog_core_df = futures_hog_core(symbol=\"外三元\")\n    print(futures_hog_core_df)\n\n    futures_hog_core_df = futures_hog_core(symbol=\"内三元\")\n    print(futures_hog_core_df)\n\n    futures_hog_core_df = futures_hog_core(symbol=\"土杂猪\")\n    print(futures_hog_core_df)\n\n    futures_hog_cost_df = futures_hog_cost(symbol=\"玉米\")\n    print(futures_hog_cost_df)\n\n    futures_hog_cost_df = futures_hog_cost(symbol=\"豆粕\")\n    print(futures_hog_cost_df)\n\n    futures_hog_cost_df = futures_hog_cost(symbol=\"二元母猪价格\")\n    print(futures_hog_cost_df)\n\n    futures_hog_cost_df = futures_hog_cost(symbol=\"仔猪价格\")\n    print(futures_hog_cost_df)\n\n    futures_hog_supply_df = futures_hog_supply(symbol=\"猪肉批发价\")\n    print(futures_hog_supply_df)\n\n    futures_hog_supply_df = futures_hog_supply(symbol=\"储备冻猪肉\")\n    print(futures_hog_supply_df)\n\n    futures_hog_supply_df = futures_hog_supply(symbol=\"饲料原料数据\")\n    print(futures_hog_supply_df)\n\n    futures_hog_supply_df = futures_hog_supply(symbol=\"白条肉\")\n    print(futures_hog_supply_df)\n\n    futures_hog_supply_df = futures_hog_supply(symbol=\"生猪产能\")\n    print(futures_hog_supply_df)\n\n    futures_hog_supply_df = futures_hog_supply(symbol=\"育肥猪\")\n    print(futures_hog_supply_df)\n\n    futures_hog_supply_df = futures_hog_supply(symbol=\"肉类价格指数\")\n    print(futures_hog_supply_df)\n\n    futures_hog_supply_df = futures_hog_supply(symbol=\"猪粮比价\")\n    print(futures_hog_supply_df)\n"
  },
  {
    "path": "akshare/futures_derivative/futures_index_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/3/1 23:00\nDesc: 新浪财经-期货的主力合约数据\nhttps://finance.sina.com.cn/futuremarket/index.shtml\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\nfrom akshare.futures.cons import (\n    zh_subscribe_exchange_symbol_url,\n    zh_match_main_contract_url,\n    zh_match_main_contract_payload,\n)\nfrom akshare.utils import demjson\n\n\ndef zh_subscribe_exchange_symbol(symbol: str = \"dce\") -> pd.DataFrame:\n    \"\"\"\n    订阅指定交易所品种的代码\n    https://finance.sina.com.cn/futuremarket/index.shtml\n    :param symbol: choice of {\"dce\", \"czce\", \"shfe\", \"cffex\", \"gfex\"}\n    :type symbol: str\n    :return: 订阅指定交易所品种的代码\n    :rtype: pandas.DataFrame\n    \"\"\"\n    r = requests.get(zh_subscribe_exchange_symbol_url)\n    r.encoding = \"gb2312\"\n    data_text = r.text\n    data_json = demjson.decode(\n        data_text[data_text.find(\"{\") : data_text.find(\"};\") + 1]\n    )\n    if symbol == \"czce\":\n        data_json[\"czce\"].remove(\"郑州商品交易所\")\n        return pd.DataFrame(data_json[\"czce\"])\n    if symbol == \"dce\":\n        data_json[\"dce\"].remove(\"大连商品交易所\")\n        return pd.DataFrame(data_json[\"dce\"])\n    if symbol == \"shfe\":\n        data_json[\"shfe\"].remove(\"上海期货交易所\")\n        return pd.DataFrame(data_json[\"shfe\"])\n    if symbol == \"cffex\":\n        data_json[\"cffex\"].remove(\"中国金融期货交易所\")\n        return pd.DataFrame(data_json[\"cffex\"])\n    if symbol == \"gfex\":\n        data_json[\"gfex\"].remove(\"广州期货交易所\")\n        return pd.DataFrame(data_json[\"gfex\"])\n\n\ndef match_main_contract(symbol: str = \"shfe\") -> pd.DataFrame:\n    \"\"\"\n    指定交易所的所有可以提供数据的合约\n    https://finance.sina.com.cn/futuremarket/index.shtml\n    :param symbol: choice of {\"dce\", \"czce\", \"shfe\", \"cffex\", \"gfex\"}\n    :type symbol: str\n    :return: 指定交易所的所有可以提供数据的合约\n    :rtype: pandas.DataFrame\n    \"\"\"\n    subscribe_list = []\n    exchange_symbol_list = zh_subscribe_exchange_symbol(symbol).iloc[:, 1].tolist()\n    for item in exchange_symbol_list:\n        zh_match_main_contract_payload.update({\"node\": item})\n        res = requests.get(\n            zh_match_main_contract_url, params=zh_match_main_contract_payload\n        )\n        data_json = demjson.decode(res.text)\n        data_df = pd.DataFrame(data_json)\n        try:\n            main_contract = data_df[\n                data_df[\"name\"].str.contains(\"连续\")\n                & data_df[\"symbol\"]\n                .str.extract(r\"([\\w])(\\d)\")\n                .iloc[:, 1]\n                .str.contains(\"0\")\n            ].iloc[0, :3]\n            subscribe_list.append(main_contract)\n        except:  # noqa: E722\n            # print(item, \"无主力连续合约\")\n            continue\n    # print(\"主力连续合约获取成功\")\n    temp_df = pd.DataFrame(subscribe_list)\n    return temp_df\n\n\ndef futures_display_main_sina() -> pd.DataFrame:\n    \"\"\"\n    新浪主力连续合约品种一览表\n    https://finance.sina.com.cn/futuremarket/index.shtml\n    :return: 新浪主力连续合约品种一览表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = pd.DataFrame()\n    for item in [\"dce\", \"czce\", \"shfe\", \"cffex\", \"gfex\"]:\n        temp_df = pd.concat([temp_df, match_main_contract(symbol=item)])\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\ndef futures_main_sina(\n    symbol: str = \"V0\",\n    start_date: str = \"19900101\",\n    end_date: str = \"22220101\",\n) -> pd.DataFrame:\n    \"\"\"\n    新浪财经-期货-主力连续日数据\n    https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_1\n    :param symbol: 通过 ak.futures_display_main_sina() 函数获取 symbol\n    :type symbol: str\n    :param start_date: 开始时间\n    :type start_date: str\n    :param end_date: 结束时间\n    :type end_date: str\n    :return: 主力连续日数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    trade_date = \"20210817\"\n    trade_date = trade_date[:4] + \"_\" + trade_date[4:6] + \"_\" + trade_date[6:]\n    url = f\"https://stock2.finance.sina.com.cn/futures/api/jsonp.php/var%20_{symbol}{trade_date}=/InnerFuturesNewService.getDailyKLine?symbol={symbol}&_={trade_date}\"\n    r = requests.get(url)\n    data_text = r.text\n    data_json = data_text[data_text.find(\"([\") + 1 : data_text.rfind(\"])\") + 1]\n    temp_df = pd.read_json(StringIO(data_json))\n    temp_df.columns = [\n        \"日期\",\n        \"开盘价\",\n        \"最高价\",\n        \"最低价\",\n        \"收盘价\",\n        \"成交量\",\n        \"持仓量\",\n        \"动态结算价\",\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df.set_index(keys=[\"日期\"], inplace=True)\n    temp_df.index = pd.to_datetime(temp_df.index)\n    temp_df = temp_df[start_date:end_date]\n    temp_df.reset_index(inplace=True)\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"开盘价\"] = pd.to_numeric(temp_df[\"开盘价\"], errors=\"coerce\")\n    temp_df[\"最高价\"] = pd.to_numeric(temp_df[\"最高价\"], errors=\"coerce\")\n    temp_df[\"最低价\"] = pd.to_numeric(temp_df[\"最低价\"], errors=\"coerce\")\n    temp_df[\"收盘价\"] = pd.to_numeric(temp_df[\"收盘价\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"持仓量\"] = pd.to_numeric(temp_df[\"持仓量\"], errors=\"coerce\")\n    temp_df[\"动态结算价\"] = pd.to_numeric(temp_df[\"动态结算价\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    futures_display_main_sina_df = futures_display_main_sina()\n    print(futures_display_main_sina_df)\n\n    futures_main_sina_hist = futures_main_sina(\n        symbol=\"CF0\", start_date=\"20240124\", end_date=\"20240301\"\n    )\n    print(futures_main_sina_hist)\n"
  },
  {
    "path": "akshare/futures_derivative/futures_spot_sys.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/5 20:20\nDesc: 生意社-商品与期货-现期图\nhttps://www.100ppi.com/sf/792.html\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef __get_sys_spot_futures_dict() -> dict:\n    \"\"\"\n    生意社-商品与期货-现期图: 品种和网址字典\n    https://www.100ppi.com/sf/792.html\n    :return: 品种和网址字典\n    :rtype: dict\n    \"\"\"\n    url = \"https://www.100ppi.com/sf/792.html\"\n    res = requests.get(url)\n    soup = BeautifulSoup(res.text, features=\"lxml\")\n    temp_item = soup.find(name=\"div\", attrs={\"class\": \"q8\"}).find_all(\"li\")\n    name_url_dict = dict(\n        zip(\n            [item.find(\"a\").get_text().strip() for item in temp_item],\n            [item.find(\"a\")[\"href\"] for item in temp_item],\n        )\n    )\n    return name_url_dict\n\n\ndef futures_spot_sys(symbol: str = \"铜\", indicator: str = \"市场价格\") -> pd.DataFrame:\n    \"\"\"\n    生意社-商品与期货-现期图\n    https://www.100ppi.com/sf/792.html\n    :param symbol: 期货品种\n    :type symbol: str\n    :param indicator: 市场价格; choice of {\"市场价格\", \"基差率\", \"主力基差\"}\n    :type indicator: str\n    :return: pandas.DataFrame\n    :rtype: dict\n    \"\"\"\n    name_url_dict = __get_sys_spot_futures_dict()\n    url = name_url_dict[symbol]\n    r = requests.get(\"https://www.100ppi.com\" + url)\n    if indicator == \"市场价格\":\n        table_df_one = pd.read_html(StringIO(r.text), header=0, index_col=0)[1].T\n        table_df_one[\"现货价格\"] = pd.to_numeric(\n            table_df_one[\"现货价格\"], errors=\"coerce\"\n        )\n        table_df_one[\"主力合约\"] = pd.to_numeric(\n            table_df_one[\"主力合约\"], errors=\"coerce\"\n        )\n        table_df_one[\"最近合约\"] = pd.to_numeric(\n            table_df_one[\"最近合约\"], errors=\"coerce\"\n        )\n        table_df_one.reset_index(inplace=True)\n        table_df_one.columns.name = None\n        table_df_one.rename(columns={\"index\": \"日期\"}, inplace=True)\n        return table_df_one\n    elif indicator == \"基差率\":\n        table_df_two = pd.read_html(StringIO(r.text), header=0, index_col=0)[2].T\n        table_df_two[\"基差率\"] = table_df_two[\"基差率\"].str.replace(\"%\", \"\")\n        table_df_two[\"基差率\"] = pd.to_numeric(table_df_two[\"基差率\"], errors=\"coerce\")\n        table_df_two.reset_index(inplace=True)\n        table_df_two.columns.name = None\n        table_df_two.rename(columns={\"index\": \"日期\"}, inplace=True)\n        return table_df_two\n    else:\n        table_df_three = pd.read_html(StringIO(r.text), header=0, index_col=0)[3].T\n        table_df_three[\"主力基差\"] = pd.to_numeric(\n            table_df_three[\"主力基差\"], errors=\"coerce\"\n        )\n        table_df_three.reset_index(inplace=True)\n        table_df_three.columns.name = None\n        table_df_three.rename(columns={\"index\": \"日期\"}, inplace=True)\n        return table_df_three\n\n\nif __name__ == \"__main__\":\n    futures_spot_sys_df = futures_spot_sys(symbol=\"铜\", indicator=\"市场价格\")\n    print(futures_spot_sys_df)\n\n    futures_spot_sys_df = futures_spot_sys(symbol=\"铜\", indicator=\"基差率\")\n    print(futures_spot_sys_df)\n\n    futures_spot_sys_df = futures_spot_sys(symbol=\"铜\", indicator=\"主力基差\")\n    print(futures_spot_sys_df)\n"
  },
  {
    "path": "akshare/fx/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/10/20 10:57\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/fx/cons.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/10/20 10:58\nDesc: 外汇配置文件\n\"\"\"\n\n# headers\nSHORT_HEADERS = {\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36\"\n}\n# url\nFX_SPOT_URL = (\n    \"http://www.chinamoney.com.cn/r/cms/www/chinamoney/data/fx/rfx-sp-quot.json\"\n)\nFX_SWAP_URL = (\n    \"http://www.chinamoney.com.cn/r/cms/www/chinamoney/data/fx/rfx-sw-quot.json\"\n)\nFX_PAIR_URL = (\n    \"http://www.chinamoney.com.cn/r/cms/www/chinamoney/data/fx/cpair-quot.json\"\n)\n# payload\nSPOT_PAYLOAD = {\"t\": {}}\n"
  },
  {
    "path": "akshare/fx/currency_investing.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/6/26 15:33\nDesc: 英为财情-外汇-货币对历史数据\nhttps://cn.investing.com/currencies/\nhttps://cn.investing.com/currencies/eur-usd-historical-data\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef currency_pair_map(symbol: str = \"美元\") -> pd.DataFrame:\n    \"\"\"\n    指定货币的所有可获取货币对的数据\n    https://cn.investing.com/currencies/cny-jmd\n    :param symbol: 指定货币\n    :type symbol: str\n    :return: 指定货币的所有可获取货币对的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    region_code = []\n    region_name = []\n    headers = {\n        \"Accept\": \"application/json, text/javascript, */*; q=0.01\",\n        # \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"cn.investing.com\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://cn.investing.com/currencies/single-currency-crosses\",\n        \"Sec-Fetch-Mode\": \"cors\",\n        \"Sec-Fetch-Site\": \"same-origin\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/79.0.3945.130 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n\n    def has_data_sml_id_but_no_id(tag):\n        return tag.has_attr(\"data-sml-id\") and not tag.has_attr(\"title\")\n\n    tqdm = get_tqdm()\n    for region_id in tqdm([\"4\", \"1\", \"8\", \"7\", \"6\"], leave=False):\n        url = \"https://cn.investing.com/currencies/Service/region\"\n        params = {\"region_ID\": region_id, \"currency_ID\": \"false\"}\n\n        r = requests.get(url, params=params, headers=headers)\n        soup = BeautifulSoup(r.text, features=\"lxml\")\n        region_code.extend(\n            [\n                item[\"continentid\"] + \"-\" + region_id\n                for item in soup.find_all(has_data_sml_id_but_no_id)\n            ]\n        )\n        region_name.extend(\n            [item.find(\"i\").text for item in soup.find_all(has_data_sml_id_but_no_id)]\n        )\n\n    name_id_map = dict(zip(region_name, region_code))\n    url = \"https://cn.investing.com/currencies/Service/currency\"\n    params = {\n        \"region_ID\": name_id_map[symbol].split(\"-\")[1],\n        \"currency_ID\": name_id_map[symbol].split(\"-\")[0],\n    }\n    r = requests.get(url, params=params, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n\n    temp_code = [item[\"href\"].split(\"/\")[-1] for item in soup.find_all(\"a\")]  # need\n    temp_name = [item[\"title\"].replace(\" \", \"-\") for item in soup.find_all(\"a\")]\n    temp_df = pd.DataFrame(data=[temp_name, temp_code], index=[\"name\", \"code\"]).T\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    currency_pair_map_df = currency_pair_map(symbol=\"人民币\")\n    print(currency_pair_map_df)\n"
  },
  {
    "path": "akshare/fx/fx_c_swap_cm.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/9/9 14:57\nDesc: 中国外汇交易中心暨全国银行间同业拆借中心-基准-外汇市场-外汇掉期曲线-外汇掉漆 C-Swap 定盘曲线\nhttps://www.chinamoney.org.cn/chinese/bkcurvfsw\n\"\"\"\n\nimport ssl\n\nimport pandas as pd\nimport requests\nfrom requests.adapters import HTTPAdapter\n\n\nclass LegacySSLAdapter(HTTPAdapter):\n    def init_poolmanager(self, *args, **kwargs):\n        context = ssl.create_default_context()\n        # 允许不安全的 legacy renegotiation\n        context.options |= ssl.OP_LEGACY_SERVER_CONNECT\n        kwargs[\"ssl_context\"] = context\n        return super().init_poolmanager(*args, **kwargs)\n\n\ndef fx_c_swap_cm():\n    \"\"\"\n    中国外汇交易中心暨全国银行间同业拆借中心-基准-外汇市场-外汇掉期曲线-外汇掉期 C-Swap 定盘曲线\n    https://www.chinamoney.org.cn/chinese/bkcurvfsw\n    :return: 外汇掉期 C-Swap 定盘曲线\n    :rtype: pandas.DataFrame\n    \"\"\"\n    session = requests.Session()\n    session.mount(prefix=\"https://\", adapter=LegacySSLAdapter())\n    url = \"https://www.chinamoney.org.cn/r/cms/www/chinamoney/data/fx/fx-c-sw-curv-USD.CNY.json\"\n    payload = {\n        \"t\": \"1757402201554\",\n    }\n    r = session.post(url, data=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.rename(\n        columns={\n            \"curveTime\": \"日期时间\",\n            \"tenor\": \"期限品种\",\n            \"swapPnt\": \"掉期点(Pips)\",\n            \"dataSource\": \"掉期点数据源\",\n            \"swapAllPrc\": \"全价汇率\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"日期时间\",\n            \"期限品种\",\n            \"掉期点(Pips)\",\n            \"掉期点数据源\",\n            \"全价汇率\",\n        ]\n    ]\n    temp_df[\"掉期点(Pips)\"] = pd.to_numeric(temp_df[\"掉期点(Pips)\"], errors=\"coerce\")\n    temp_df[\"全价汇率\"] = pd.to_numeric(temp_df[\"全价汇率\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fx_c_swap_cm_df = fx_c_swap_cm()\n    print(fx_c_swap_cm_df)\n"
  },
  {
    "path": "akshare/fx/fx_quote.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/6/28 14:57\nDesc: 中国外汇交易中心暨全国银行间同业拆借中心-市场数据-市场行情-外汇市场行情\n人民币外汇即期报价: fx_spot_quote\n人民币外汇远掉报价: fx_swap_quote\n外币对即期报价: fx_pair_quote\n\"\"\"\n\nimport time\n\nimport pandas as pd\nimport requests\n\nfrom akshare.fx.cons import (\n    SHORT_HEADERS,\n    FX_SPOT_URL,\n    FX_SWAP_URL,\n    FX_PAIR_URL,\n)\n\n\ndef fx_spot_quote() -> pd.DataFrame:\n    \"\"\"\n    中国外汇交易中心暨全国银行间同业拆借中心-市场数据-市场行情-外汇市场行情-人民币外汇即期报价\n    http://www.chinamoney.com.cn/chinese/mkdatapfx/\n    :return: 人民币外汇即期报价\n    :rtype: pandas.DataFrame\n    \"\"\"\n    payload = {\"t\": str(int(round(time.time() * 1000)))}\n    res = requests.post(FX_SPOT_URL, data=payload, headers=SHORT_HEADERS)\n    temp_df = pd.DataFrame(res.json()[\"records\"])\n    temp_df = temp_df[[\"ccyPair\", \"bidPrc\", \"askPrc\", \"midprice\", \"time\"]]\n    temp_df.columns = [\n        \"货币对\",\n        \"买报价\",\n        \"卖报价\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[[\"货币对\", \"买报价\", \"卖报价\"]]\n    temp_df[\"买报价\"] = pd.to_numeric(temp_df[\"买报价\"], errors=\"coerce\")\n    temp_df[\"卖报价\"] = pd.to_numeric(temp_df[\"卖报价\"], errors=\"coerce\")\n    return temp_df\n\n\ndef fx_swap_quote() -> pd.DataFrame:\n    \"\"\"\n    中国外汇交易中心暨全国银行间同业拆借中心-市场数据-市场行情-债券市场行情-人民币外汇远掉报价\n    https://www.chinamoney.com.cn/chinese/index.html\n    :return: 人民币外汇远掉报价\n    :rtype: pandas.DataFrame\n    \"\"\"\n    payload = {\"t\": str(int(round(time.time() * 1000)))}\n    res = requests.post(FX_SWAP_URL, data=payload, headers=SHORT_HEADERS)\n    temp_df = pd.DataFrame(res.json()[\"records\"])\n    temp_df = temp_df[\n        [\n            \"ccyPair\",\n            \"label_1W\",\n            \"label_1M\",\n            \"label_3M\",\n            \"label_6M\",\n            \"label_9M\",\n            \"label_1Y\",\n        ]\n    ]\n    temp_df.columns = [\n        \"货币对\",\n        \"1周\",\n        \"1月\",\n        \"3月\",\n        \"6月\",\n        \"9月\",\n        \"1年\",\n    ]\n    return temp_df\n\n\ndef fx_pair_quote() -> pd.DataFrame:\n    \"\"\"\n    中国外汇交易中心暨全国银行间同业拆借中心-市场数据-市场行情-债券市场行情-外币对即期报价\n    http://www.chinamoney.com.cn/chinese/mkdatapfx/\n    :return: 外币对即期报价\n    :rtype: pandas.DataFrame\n    \"\"\"\n    payload = {\"t\": str(int(round(time.time() * 1000)))}\n    res = requests.post(FX_PAIR_URL, data=payload, headers=SHORT_HEADERS)\n    temp_df = pd.DataFrame(res.json()[\"records\"])\n    temp_df = temp_df[[\"ccyPair\", \"bidPrc\", \"askPrc\", \"midprice\", \"time\"]]\n    temp_df.columns = [\n        \"货币对\",\n        \"买报价\",\n        \"卖报价\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[[\"货币对\", \"买报价\", \"卖报价\"]]\n    temp_df[\"买报价\"] = pd.to_numeric(temp_df[\"买报价\"], errors=\"coerce\")\n    temp_df[\"卖报价\"] = pd.to_numeric(temp_df[\"卖报价\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    fx_spot_quote_df = fx_spot_quote()\n    print(fx_spot_quote_df)\n\n    fx_swap_quote_df = fx_swap_quote()\n    print(fx_swap_quote_df)\n\n    fx_pair_quote_df = fx_pair_quote()\n    print(fx_pair_quote_df)\n"
  },
  {
    "path": "akshare/fx/fx_quote_baidu.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/1/9 22:12\nDesc: 百度股市通-外汇-行情榜单\nhttps://gushitong.baidu.com/top/foreign-common-%E5%B8%B8%E7%94%A8\n\"\"\"\n\nimport pandas as pd\nfrom curl_cffi import requests\n\n\ndef fx_quote_baidu(symbol: str = \"人民币\") -> pd.DataFrame:\n    \"\"\"\n    百度股市通-外汇-行情榜单\n    https://gushitong.baidu.com/top/foreign-rmb\n    :param symbol: choice of {\"人民币\", 美元\"}\n    :type symbol: str\n    :return: 外汇行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"人民币\": \"rmb\",\n        \"美元\": \"dollar\",\n    }\n    num = 0\n    out_df = pd.DataFrame()\n    while True:\n        try:\n            url = \"https://finance.pae.baidu.com/api/getforeignrank\"\n            params = {\n                \"type\": symbol_map[symbol],\n                \"pn\": num,\n                \"rn\": \"20\",\n                \"finClientType\": \"pc\",\n            }\n            r = requests.get(url, params=params)\n            data_json = r.json()\n            temp_df = pd.DataFrame(data_json[\"Result\"])\n            temp_list = []\n            for item in temp_df[\"list\"]:\n                temp_list.append(list(pd.DataFrame(item).T.iloc[1, :].values))\n            value_df = pd.DataFrame(\n                temp_list, columns=pd.DataFrame(item).T.iloc[0, :].values\n            )\n            big_df = pd.concat(objs=[temp_df, value_df], axis=1)\n            del big_df[\"market\"]\n            del big_df[\"list\"]\n            del big_df[\"status\"]\n            del big_df[\"icon1\"]\n            del big_df[\"icon2\"]\n            del big_df[\"financeType\"]\n            big_df.columns = [\"代码\", \"名称\", \"最新价\", \"涨跌额\", \"涨跌幅\"]\n            big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"])\n            big_df[\"涨跌额\"] = pd.to_numeric(big_df[\"涨跌额\"])\n            big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"].str.strip(\"%\")) / 100\n            out_df = pd.concat(objs=[out_df, big_df], ignore_index=True)\n            num = num + 20\n        except:  # noqa: E722\n            break\n    return out_df\n\n\nif __name__ == \"__main__\":\n    fx_quote_baidu_df = fx_quote_baidu(symbol=\"人民币\")\n    print(fx_quote_baidu_df)\n"
  },
  {
    "path": "akshare/hf/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2020/4/21 15:33\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/hf/hf_sp500.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2020/4/21 15:34\nDesc: 高频数据-标普 500 指数\nhttps://github.com/FutureSharks/financial-data\nlong history data for S&P 500 index daily\nhttp://www.econ.yale.edu/~shiller/data.htm\n\"\"\"\n\nimport pandas as pd\n\n\ndef hf_sp_500(year: str = \"2017\") -> pd.DataFrame:\n    \"\"\"\n    S&P 500 minute data from 2012-2018\n    :param year: from 2012-2018\n    :type year: str\n    :return: specific year dataframe\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://github.com/FutureSharks/financial-data/raw/master/pyfinancialdata/data/stocks/histdata/SPXUSD/DAT_ASCII_SPXUSD_M1_{year}.csv\"\n    temp_df = pd.read_table(url, header=None, sep=\";\")\n    temp_df.columns = [\"date\", \"open\", \"high\", \"low\", \"close\", \"price\"]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"])\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"])\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"])\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"])\n    temp_df[\"price\"] = pd.to_numeric(temp_df[\"price\"])\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    hf_sp_500_df = hf_sp_500(year=\"2017\")\n    print(hf_sp_500_df)\n"
  },
  {
    "path": "akshare/index/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/9/30 13:58\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/index/cons.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2021/5/27 20:19\nDesc: 指数配置文件\n\"\"\"\n\n# weibo-user-agent\nindex_weibo_headers = {\n    \"User-Agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) \"\n    \"AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1\",\n    \"Referer\": \"http://data.weibo.com/index/newindex\",\n    \"Accept\": \"application/json\",\n    \"Origin\": \"https://data.weibo.com\",\n}\n\n# sw-cons\nsw_cons_headers = {\n    \"Accept\": \"*/*\",\n    \"Accept-Encoding\": \"gzip, deflate\",\n    \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    \"Connection\": \"keep-alive\",\n    \"Content-Length\": \"34\",\n    \"Content-Type\": \"text/plain; charset=UTF-8\",\n    # \"Cookie\": \"ASP.NET_SessionId=i55eaz55142xdxfx0bkqp145\",\n    \"Host\": \"www.swsindex.com\",\n    \"Origin\": \"http://www.swsindex.com\",\n    \"Referer\": \"http://www.swsindex.com/idx0210.aspx?swindexcode=801010\",\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n    \"Chrome/78.0.3904.108 Safari/537.36\",\n    \"X-AjaxPro-Method\": \"ReturnContent\",\n}\n\n# sw-url\nsw_url = \"http://www.swsindex.com/handler.aspx\"\n\n# sw-payload\nsw_payload = {\n    \"tablename\": \"swzs\",\n    \"key\": \"L1\",\n    \"p\": \"1\",\n    \"where\": \"L1 in('801010','801020','801030','801040','801050','801080','801110','801120','801130',\"\n    \"'801140','801150','801160','801170','801180','801200','801210','801230','801710','801720',\"\n    \"'801730','801740','801750','801760','801770','801780','801790','801880','801890','801950',\"\n    \"'801960','801970','801980')\",\n    \"orderby\": \"\",\n    \"fieldlist\": \"L1,L2,L3,L4,L5,L6,L7,L8,L11\",\n    \"pagecount\": \"28\",\n    \"timed\": \"\",\n}\n\n# sw-headers\nsw_headers = {\n    \"Accept\": \"application/json, text/javascript, */*\",\n    \"Accept-Encoding\": \"gzip, deflate\",\n    \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    \"Cache-Control\": \"no-cache\",\n    \"Content-Type\": \"application/x-www-form-urlencoded\",\n    \"DNT\": \"1\",\n    \"Host\": \"www.swsindex.com\",\n    \"Origin\": \"http://www.swsindex.com\",\n    \"Pragma\": \"no-cache\",\n    \"Referer\": \"http://www.swsindex.com/idx0120.aspx?columnid=8832\",\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n    \"Chrome/74.0.3729.169 Safari/537.36\",\n    \"X-Requested-With\": \"XMLHttpRequest\",\n}\n\n# zh-sina-a\nzh_sina_index_stock_url = (\n    \"http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/\"\n    \"Market_Center.getHQNodeDataSimple\"\n)\nzh_sina_index_stock_payload = {\n    \"page\": \"1\",\n    \"num\": \"80\",\n    \"sort\": \"symbol\",\n    \"asc\": \"1\",\n    \"node\": \"hs_s\",\n    \"_s_r_a\": \"page\",\n}\nzh_sina_index_stock_count_url = (\n    \"http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/\"\n    \"Market_Center.getHQNodeStockCountSimple?node=hs_s\"\n)\nzh_sina_index_stock_hist_url = (\n    \"https://finance.sina.com.cn/realstock/company/{}/hisdata/klc_kl.js\"\n)\n\n# investing\nshort_headers = {\n    \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n    \"Chrome/61.0.3163.91 Safari/537.36\"\n}\n\nlong_headers = {\n    \"accept\": \"text/plain, */*; q=0.01\",\n    # 'accept-encoding': 'gzip, deflate, br',\n    \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    # 'cache-control': 'no-cache',\n    \"content-length\": \"267\",\n    \"content-type\": \"application/x-www-form-urlencoded\",\n    \"origin\": \"https://cn.investing.com\",\n    \"referer\": \"https://cn.investing.com/commodities/brent-oil-historical-data\",\n    \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n    \"Chrome/61.0.3163.91 Safari/537.36\",\n    \"x-requested-with\": \"XMLHttpRequest\",\n}\n\nindex_global_sina_symbol_map = {\n    # 欧洲股市\n    \"英国富时100指数\": \"UKX\",\n    \"德国DAX 30种股价指数\": \"DAX\",\n    \"俄罗斯MICEX指数\": \"INDEXCF\",\n    \"法CAC40指数\": \"CAC\",\n    \"瑞士股票指数\": \"SWI20\",\n    \"富时意大利MIB指数\": \"FTSEMIB\",\n    \"荷兰AEX综合指数\": \"AEX\",\n    \"西班牙IBEX指数\": \"IBEX\",\n    \"欧洲Stoxx50指数\": \"SX5E\",\n    # 美洲股市\n    \"加拿大S&P/TSX综合指数\": \"GSPTSE\",\n    \"墨西哥BOLSA指数\": \"MXX\",\n    \"巴西BOVESPA股票指数\": \"IBOV\",\n    # 亚洲股市\n    \"中国台湾加权指数\": \"TWJQ\",\n    \"日经225指数\": \"NKY\",\n    \"首尔综合指数\": \"KOSPI\",\n    \"印度尼西亚雅加达综合指数\": \"JCI\",\n    \"印度孟买SENSEX指数\": \"SENSEX\",\n    # 澳洲股市\n    \"澳大利亚标准普尔200指数\": \"AS51\",\n    \"新西兰NZSE 50指数\": \"NZ250\",\n    # 非洲股市\n    \"埃及CASE 30指数\": \"CASE\",\n}\n\nindex_global_em_symbol_map = {\n    \"波罗的海BDI指数\": {\"code\": \"BDI\", \"market\": \"100\"},\n    \"葡萄牙PSI20\": {\"code\": \"PSI20\", \"market\": \"100\"},\n    \"菲律宾马尼拉\": {\"code\": \"PSI\", \"market\": \"100\"},\n    \"泰国SET\": {\"code\": \"SET\", \"market\": \"100\"},\n    \"俄罗斯RTS\": {\"code\": \"RTS\", \"market\": \"100\"},\n    \"巴基斯坦卡拉奇\": {\"code\": \"KSE100\", \"market\": \"100\"},\n    \"越南胡志明\": {\"code\": \"VNINDEX\", \"market\": \"100\"},\n    \"红筹指数\": {\"code\": \"HSCCI\", \"market\": \"124\"},\n    \"印尼雅加达综合\": {\"code\": \"JKSE\", \"market\": \"100\"},\n    \"希腊雅典ASE\": {\"code\": \"ASE\", \"market\": \"100\"},\n    \"墨西哥BOLSA\": {\"code\": \"MXX\", \"market\": \"100\"},\n    \"挪威OSEBX\": {\"code\": \"OSEBX\", \"market\": \"100\"},\n    \"巴西BOVESPA\": {\"code\": \"BVSP\", \"market\": \"100\"},\n    \"波兰WIG\": {\"code\": \"WIG\", \"market\": \"100\"},\n    \"印度孟买SENSEX\": {\"code\": \"SENSEX\", \"market\": \"100\"},\n    \"布拉格指数\": {\"code\": \"PX\", \"market\": \"100\"},\n    \"荷兰AEX\": {\"code\": \"AEX\", \"market\": \"100\"},\n    \"冰岛ICEX\": {\"code\": \"ICEXI\", \"market\": \"100\"},\n    \"斯里兰卡科伦坡\": {\"code\": \"CSEALL\", \"market\": \"100\"},\n    \"富时新加坡海峡时报\": {\"code\": \"STI\", \"market\": \"100\"},\n    \"富时意大利MIB\": {\"code\": \"MIB\", \"market\": \"100\"},\n    \"路透CRB商品指数\": {\"code\": \"CRB\", \"market\": \"100\"},\n    \"比利时BFX\": {\"code\": \"BFX\", \"market\": \"100\"},\n    \"富时AIM全股\": {\"code\": \"AXX\", \"market\": \"100\"},\n    \"新西兰50\": {\"code\": \"NZ50\", \"market\": \"100\"},\n    \"上证指数\": {\"code\": \"000001\", \"market\": \"1\"},\n    \"国企指数\": {\"code\": \"HSCEI\", \"market\": \"100\"},\n    \"沪深300\": {\"code\": \"000300\", \"market\": \"1\"},\n    \"英国富时100\": {\"code\": \"FTSE\", \"market\": \"100\"},\n    \"中小100\": {\"code\": \"399005\", \"market\": \"0\"},\n    \"瑞士SMI\": {\"code\": \"SSMI\", \"market\": \"100\"},\n    \"西班牙IBEX35\": {\"code\": \"IBEX\", \"market\": \"100\"},\n    \"瑞典OMXSPI\": {\"code\": \"OMXSPI\", \"market\": \"100\"},\n    \"爱尔兰综合\": {\"code\": \"ISEQ\", \"market\": \"100\"},\n    \"韩国KOSPI\": {\"code\": \"KS11\", \"market\": \"100\"},\n    \"深证成指\": {\"code\": \"399001\", \"market\": \"0\"},\n    \"韩国KOSPI200\": {\"code\": \"KOSPI200\", \"market\": \"100\"},\n    \"芬兰赫尔辛基\": {\"code\": \"HEX\", \"market\": \"100\"},\n    \"恒生指数\": {\"code\": \"HSI\", \"market\": \"100\"},\n    \"欧洲斯托克50\": {\"code\": \"SX5E\", \"market\": \"100\"},\n    \"美元指数\": {\"code\": \"UDI\", \"market\": \"100\"},\n    \"法国CAC40\": {\"code\": \"FCHI\", \"market\": \"100\"},\n    \"台湾加权\": {\"code\": \"TWII\", \"market\": \"100\"},\n    \"英国富时250\": {\"code\": \"MCX\", \"market\": \"100\"},\n    \"富时马来西亚KLCI\": {\"code\": \"KLSE\", \"market\": \"100\"},\n    \"OMX哥本哈根20\": {\"code\": \"OMXC20\", \"market\": \"100\"},\n    \"道琼斯\": {\"code\": \"DJIA\", \"market\": \"100\"},\n    \"奥地利ATX\": {\"code\": \"ATX\", \"market\": \"100\"},\n    \"加拿大S&P/TSX\": {\"code\": \"TSX\", \"market\": \"100\"},\n    \"德国DAX30\": {\"code\": \"GDAXI\", \"market\": \"100\"},\n    \"创业板指\": {\"code\": \"399006\", \"market\": \"0\"},\n    \"澳大利亚普通股\": {\"code\": \"AORD\", \"market\": \"100\"},\n    \"标普500\": {\"code\": \"SPX\", \"market\": \"100\"},\n    \"澳大利亚标普200\": {\"code\": \"AS51\", \"market\": \"100\"},\n    \"日经225\": {\"code\": \"N225\", \"market\": \"100\"},\n    \"纳斯达克\": {\"code\": \"NDX\", \"market\": \"100\"},\n}\n"
  },
  {
    "path": "akshare/index/index_cflp.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2021/12/27 15:47\nDesc: 中国公路物流运价、运量指数\nhttp://index.0256.cn/expx.htm\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef index_price_cflp(symbol: str = \"周指数\") -> pd.DataFrame:\n    \"\"\"\n    中国公路物流运价指数\n    http://index.0256.cn/expx.htm\n    :param symbol: choice of {\"周指数\", \"月指数\", \"季度指数\", \"年度指数\"}\n    :type symbol: str\n    :return: 中国公路物流运价指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"周指数\": \"2\",\n        \"月指数\": \"3\",\n        \"季度指数\": \"4\",\n        \"年度指数\": \"5\",\n    }\n    url = \"http://index.0256.cn/expcenter_trend.action\"\n    params = {\n        \"marketId\": \"1\",\n        \"attribute1\": \"5\",\n        \"exponentTypeId\": symbol_map[symbol],\n        \"cateId\": \"2\",\n        \"attribute2\": \"华北\",\n        \"city\": \"\",\n        \"startLine\": \"\",\n        \"endLine\": \"\",\n    }\n    headers = {\n        \"Origin\": \"http://index.0256.cn\",\n        \"Referer\": \"http://index.0256.cn/expx.htm\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/90.0.4430.212 Safari/537.36\",\n    }\n    r = requests.post(url, data=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(\n        [\n            data_json[\"chart1\"][\"xLebal\"],\n            data_json[\"chart1\"][\"yLebal\"],\n            data_json[\"chart2\"][\"yLebal\"],\n            data_json[\"chart3\"][\"yLebal\"],\n        ]\n    ).T\n    temp_df.columns = [\"日期\", \"定基指数\", \"环比指数\", \"同比指数\"]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"定基指数\"] = pd.to_numeric(temp_df[\"定基指数\"], errors=\"coerce\")\n    temp_df[\"环比指数\"] = pd.to_numeric(temp_df[\"环比指数\"], errors=\"coerce\")\n    temp_df[\"同比指数\"] = pd.to_numeric(temp_df[\"同比指数\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_volume_cflp(symbol: str = \"月指数\") -> pd.DataFrame:\n    \"\"\"\n    中国公路物流运量指数\n    http://index.0256.cn/expx.htm\n    :param symbol: choice of {\"月指数\", \"季度指数\", \"年度指数\"}\n    :type symbol: str\n    :return: 中国公路物流运量指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"月指数\": \"3\",\n        \"季度指数\": \"4\",\n        \"年度指数\": \"5\",\n    }\n    url = \"http://index.0256.cn/volume_query.action\"\n    params = {\n        \"type\": \"1\",\n        \"marketId\": \"1\",\n        \"expTypeId\": symbol_map[symbol],\n        \"startDate1\": \"\",\n        \"endDate1\": \"\",\n        \"city\": \"\",\n        \"startDate3\": \"\",\n        \"endDate3\": \"\",\n    }\n    headers = {\n        \"Origin\": \"http://index.0256.cn\",\n        \"Referer\": \"http://index.0256.cn/expx.htm\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/90.0.4430.212 Safari/537.36\",\n    }\n    r = requests.post(url, data=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(\n        [\n            data_json[\"chart1\"][\"xLebal\"],\n            data_json[\"chart1\"][\"yLebal\"],\n            data_json[\"chart2\"][\"yLebal\"],\n            data_json[\"chart3\"][\"yLebal\"],\n        ]\n    ).T\n    temp_df.columns = [\"日期\", \"定基指数\", \"环比指数\", \"同比指数\"]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"定基指数\"] = pd.to_numeric(temp_df[\"定基指数\"], errors=\"coerce\")\n    temp_df[\"环比指数\"] = pd.to_numeric(temp_df[\"环比指数\"], errors=\"coerce\")\n    temp_df[\"同比指数\"] = pd.to_numeric(temp_df[\"同比指数\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    index_price_cflp_df = index_price_cflp(symbol=\"周指数\")\n    print(index_price_cflp_df)\n\n    index_price_cflp_df = index_price_cflp(symbol=\"月指数\")\n    print(index_price_cflp_df)\n\n    index_price_cflp_df = index_price_cflp(symbol=\"季度指数\")\n    print(index_price_cflp_df)\n\n    index_price_cflp_df = index_price_cflp(symbol=\"年度指数\")\n    print(index_price_cflp_df)\n\n    index_volume_cflp_df = index_volume_cflp(symbol=\"月指数\")\n    print(index_volume_cflp_df)\n\n    index_volume_cflp_df = index_volume_cflp(symbol=\"季度指数\")\n    print(index_volume_cflp_df)\n\n    index_volume_cflp_df = index_volume_cflp(symbol=\"年度指数\")\n    print(index_volume_cflp_df)\n"
  },
  {
    "path": "akshare/index/index_cni.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/1/12 15:00\nDesc: 国证指数\nhttps://www.cnindex.com.cn/index.html\n\"\"\"\n\nimport zipfile\nfrom io import BytesIO\n\nimport pandas as pd\nimport requests\n\n\ndef index_all_cni() -> pd.DataFrame:\n    \"\"\"\n    国证指数-最近交易日的所有指数\n    https://www.cnindex.com.cn/zh_indices/sese/index.html?act_menu=1&index_type=-1\n    :return: 国证指数-所有指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.cnindex.com.cn/index/indexList\"\n    params = {\n        \"channelCode\": \"-1\",\n        \"rows\": \"2000\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"rows\"])\n    temp_df.columns = [\n        \"_\",\n        \"_\",\n        \"指数代码\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"指数简称\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"样本数\",\n        \"收盘点位\",\n        \"涨跌幅\",\n        \"_\",\n        \"PE滚动\",\n        \"_\",\n        \"成交量\",\n        \"成交额\",\n        \"总市值\",\n        \"自由流通市值\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"指数代码\",\n            \"指数简称\",\n            \"样本数\",\n            \"收盘点位\",\n            \"涨跌幅\",\n            \"PE滚动\",\n            \"成交量\",\n            \"成交额\",\n            \"总市值\",\n            \"自由流通市值\",\n        ]\n    ]\n    temp_df[\"成交量\"] = temp_df[\"成交量\"] / 100000\n    temp_df[\"成交额\"] = temp_df[\"成交额\"] / 100000000\n    temp_df[\"总市值\"] = temp_df[\"总市值\"] / 100000000\n    temp_df[\"自由流通市值\"] = temp_df[\"自由流通市值\"] / 100000000\n    return temp_df\n\n\ndef index_hist_cni(\n    symbol: str = \"399001\", start_date: str = \"20230114\", end_date: str = \"20240114\"\n) -> pd.DataFrame:\n    \"\"\"\n    指数历史行情数据\n    http://www.cnindex.com.cn/module/index-detail.html?act_menu=1&indexCode=399001\n    :param symbol: 指数代码\n    :type symbol: str\n    :param start_date: 开始时间\n    :type start_date: str\n    :param end_date: 结束时间\n    :type end_date: str\n    :return: 指数历史行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    start_date = \"-\".join([start_date[:4], start_date[4:6], start_date[6:]])\n    end_date = \"-\".join([end_date[:4], end_date[4:6], end_date[6:]])\n    url = \"http://hq.cnindex.com.cn/market/market/getIndexDailyDataWithDataFormat\"\n    params = {\n        \"indexCode\": symbol,\n        \"startDate\": start_date,\n        \"endDate\": end_date,\n        \"frequency\": \"day\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"data\"])\n    temp_df.columns = [\n        \"日期\",\n        \"_\",\n        \"最高价\",\n        \"开盘价\",\n        \"最低价\",\n        \"收盘价\",\n        \"_\",\n        \"涨跌幅\",\n        \"成交额\",\n        \"成交量\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"收盘价\",\n            \"涨跌幅\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    temp_df[\"涨跌幅\"] = temp_df[\"涨跌幅\"].str.replace(\"%\", \"\")\n    temp_df[\"涨跌幅\"] = temp_df[\"涨跌幅\"].astype(\"float\")\n    temp_df[\"涨跌幅\"] = temp_df[\"涨跌幅\"] / 100\n    temp_df.sort_values([\"日期\"], inplace=True, ignore_index=True)\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"开盘价\"] = pd.to_numeric(temp_df[\"开盘价\"], errors=\"coerce\")\n    temp_df[\"最高价\"] = pd.to_numeric(temp_df[\"最高价\"], errors=\"coerce\")\n    temp_df[\"最低价\"] = pd.to_numeric(temp_df[\"最低价\"], errors=\"coerce\")\n    temp_df[\"收盘价\"] = pd.to_numeric(temp_df[\"收盘价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_detail_cni(symbol: str = \"399001\") -> pd.DataFrame:\n    \"\"\"\n    国证指数-样本详情-指定日期的样本成份\n    https://www.cnindex.com.cn/module/index-detail.html?act_menu=1&indexCode=399001\n    :param symbol: 指数代码\n    :type symbol: str\n    :return: 指定日期的样本成份\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.simplefilter(action=\"ignore\", category=UserWarning)\n    url = \"https://www.cnindex.com.cn/sample-detail/download-history\"\n    params = {\"indexcode\": symbol}\n    r = requests.get(url, params=params)\n    temp_df = pd.read_excel(BytesIO(r.content))\n    temp_df[\"样本代码\"] = temp_df[\"样本代码\"].astype(str).str.zfill(6)\n    temp_df.columns = [\n        \"日期\",\n        \"样本代码\",\n        \"样本简称\",\n        \"所属行业\",\n        \"总市值\",\n        \"权重\",\n    ]\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"权重\"] = pd.to_numeric(temp_df[\"权重\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_detail_hist_cni(symbol: str = \"399001\") -> pd.DataFrame:\n    \"\"\"\n    国证指数-样本详情-历史样本\n    https://www.cnindex.com.cn/module/index-detail.html?act_menu=1&indexCode=399001\n    :param symbol: 指数代码; \"399001\"\n    :type symbol: str\n    :return: 历史样本\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.cnindex.com.cn/sample-detail/download-history\"\n    params = {\"indexcode\": symbol}\n    r = requests.get(url, params=params)\n    temp_df = pd.read_excel(BytesIO(r.content))\n    temp_df[\"样本代码\"] = temp_df[\"样本代码\"].astype(str).str.zfill(6)\n    temp_df.columns = [\n        \"日期\",\n        \"样本代码\",\n        \"样本简称\",\n        \"所属行业\",\n        \"总市值\",\n        \"权重\",\n    ]\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"])\n    temp_df[\"权重\"] = pd.to_numeric(temp_df[\"权重\"])\n    return temp_df\n\n\ndef index_detail_hist_adjust_cni(symbol: str = \"399005\") -> pd.DataFrame:\n    \"\"\"\n    国证指数-样本详情-历史调样\n    http://www.cnindex.com.cn/module/index-detail.html?act_menu=1&indexCode=399005\n    :param symbol: 指数代码\n    :type symbol: str\n    :return: 历史调样\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://www.cnindex.com.cn/sample-detail/download-adjustment\"\n    params = {\"indexcode\": symbol}\n    r = requests.get(url, params=params)\n    try:\n        import warnings\n\n        with warnings.catch_warnings():\n            warnings.simplefilter(action=\"ignore\", category=UserWarning)\n            temp_df = pd.read_excel(BytesIO(r.content), engine=\"openpyxl\")\n    except zipfile.BadZipFile:\n        return pd.DataFrame()\n    temp_df[\"样本代码\"] = temp_df[\"样本代码\"].astype(str).str.zfill(6)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    index_all_cni_df = index_all_cni()\n    print(index_all_cni_df)\n\n    index_hist_cni_df = index_hist_cni(\n        symbol=\"399005\", start_date=\"20230114\", end_date=\"20260328\"\n    )\n    print(index_hist_cni_df)\n\n    index_detail_cni_df = index_detail_cni(symbol=\"399001\")\n    print(index_detail_cni_df)\n\n    index_detail_hist_cni_df = index_detail_hist_cni(symbol=\"399101\", date=\"202404\")\n    print(index_detail_hist_cni_df)\n\n    index_detail_hist_adjust_cni_df = index_detail_hist_adjust_cni(symbol=\"399005\")\n    print(index_detail_hist_adjust_cni_df)\n"
  },
  {
    "path": "akshare/index/index_cons.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/6/17 14:00\nDesc: 股票指数成份股数据, 新浪有两个接口, 这里使用老接口:\n新接口：https://vip.stock.finance.sina.com.cn/mkt/#zhishu_000001\n老接口：https://vip.stock.finance.sina.com.cn/corp/view/vII_NewestComponent.php?page=1&indexid=399639\n\"\"\"\n\nimport math\nfrom io import BytesIO, StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.utils import demjson\n\n\ndef index_stock_cons_sina(symbol: str = \"000300\") -> pd.DataFrame:\n    \"\"\"\n    新浪新版股票指数成份页面, 目前该接口可获取指数数量较少\n    https://vip.stock.finance.sina.com.cn/mkt/#zhishu_000040\n    :param symbol: 指数代码\n    :type symbol: str\n    :return: 指数的成份股\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if symbol == \"000300\":\n        symbol = \"hs300\"\n        url = (\n            \"https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php\"\n            \"/Market_Center.getHQNodeStockCountSimple\"\n        )\n        params = {\"node\": f\"{symbol}\"}\n        r = requests.get(url, params=params)\n        page_num = math.ceil(int(r.json()) / 80) + 1\n        temp_df = pd.DataFrame()\n        for page in range(1, page_num):\n            url = \"https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData\"\n            params = {\n                \"page\": str(page),\n                \"num\": \"80\",\n                \"sort\": \"symbol\",\n                \"asc\": \"1\",\n                \"node\": \"hs300\",\n                \"symbol\": \"\",\n                \"_s_r_a\": \"init\",\n            }\n            r = requests.get(url, params=params)\n            temp_df = pd.concat(\n                objs=[temp_df, pd.DataFrame(demjson.decode(r.text))], ignore_index=True\n            )\n        return temp_df\n\n    url = \"https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeDataSimple\"\n    params = {\n        \"page\": 1,\n        \"num\": \"3000\",\n        \"sort\": \"symbol\",\n        \"asc\": \"1\",\n        \"node\": f\"zhishu_{symbol}\",\n        \"_s_r_a\": \"setlen\",\n    }\n    r = requests.get(url, params=params)\n    temp = pd.DataFrame(demjson.decode(r.text))\n    return temp\n\n\ndef index_stock_info() -> pd.DataFrame:\n    \"\"\"\n    聚宽-指数数据-指数列表\n    https://www.joinquant.com/data/dict/indexData\n    :return: 指数信息的数据框\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.joinquant.com/data/dict/indexData\"\n    r = requests.get(url)\n    r.encoding = \"utf-8\"\n    index_df = pd.read_html(StringIO(r.text))[0]\n    index_df[\"指数代码\"] = index_df[\"指数代码\"].str.split(\".\", expand=True)[0]\n    index_df.columns = [\"index_code\", \"display_name\", \"publish_date\", \"-\", \"-\"]\n    temp_df = index_df[[\"index_code\", \"display_name\", \"publish_date\"]].copy()\n    return temp_df\n\n\ndef index_stock_cons(symbol: str = \"399639\") -> pd.DataFrame:\n    \"\"\"\n    最新股票指数的成份股目录\n    https://vip.stock.finance.sina.com.cn/corp/view/vII_NewestComponent.php?page=1&indexid=399639\n    :param symbol: 指数代码, 可以通过 ak.index_stock_info() 函数获取\n    :type symbol: str\n    :return: 最新股票指数的成份股目录\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://vip.stock.finance.sina.com.cn/corp/go.php/vII_NewestComponent/indexid/{symbol}.phtml\"\n    r = requests.get(url)\n    r.encoding = \"gb2312\"\n    soup = BeautifulSoup(r.text, \"lxml\")\n    page_num = (\n        soup.find(attrs={\"class\": \"table2\"})\n        .find(\"td\")\n        .find_all(\"a\")[-1][\"href\"]\n        .split(\"page=\")[-1]\n        .split(\"&\")[0]\n    )\n    if page_num == \"#\":\n        temp_df = pd.read_html(StringIO(r.text), header=0, skiprows=1)[3].iloc[:, :3]\n        temp_df[\"品种代码\"] = temp_df[\"品种代码\"].astype(str).str.zfill(6)\n        return temp_df\n\n    temp_df = pd.DataFrame()\n    for page in range(1, int(page_num) + 1):\n        url = f\"https://vip.stock.finance.sina.com.cn/corp/view/vII_NewestComponent.php?page={page}&indexid={symbol}\"\n        r = requests.get(url)\n        r.encoding = \"gb2312\"\n        temp_df = pd.concat(\n            objs=[temp_df, pd.read_html(StringIO(r.text), header=1)[3]],\n            ignore_index=True,\n        )\n    temp_df = temp_df.iloc[:, :3]\n    temp_df[\"品种代码\"] = temp_df[\"品种代码\"].astype(str).str.zfill(6)\n    return temp_df\n\n\ndef index_stock_cons_csindex(symbol: str = \"000300\") -> pd.DataFrame:\n    \"\"\"\n    中证指数网站-成份股目录\n    https://www.csindex.com.cn/zh-CN/indices/index-detail/000300\n    :param symbol: 指数代码, 可以通过 ak.index_stock_info() 函数获取\n    :type symbol: str\n    :return: 最新指数的成份股\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        f\"https://oss-ch.csindex.com.cn/static/\"\n        f\"html/csindex/public/uploads/file/autofile/cons/{symbol}cons.xls\"\n    )\n    r = requests.get(url)\n    temp_df = pd.read_excel(BytesIO(r.content))\n    temp_df.columns = [\n        \"日期\",\n        \"指数代码\",\n        \"指数名称\",\n        \"指数英文名称\",\n        \"成分券代码\",\n        \"成分券名称\",\n        \"成分券英文名称\",\n        \"交易所\",\n        \"交易所英文名称\",\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(\n        temp_df[\"日期\"], format=\"%Y%m%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"指数代码\"] = temp_df[\"指数代码\"].astype(str).str.zfill(6)\n    temp_df[\"成分券代码\"] = temp_df[\"成分券代码\"].astype(str).str.zfill(6)\n    return temp_df\n\n\ndef index_stock_cons_weight_csindex(symbol: str = \"000300\") -> pd.DataFrame:\n    \"\"\"\n    中证指数网站-样本权重\n    https://www.csindex.com.cn/zh-CN/indices/index-detail/000300\n    :param symbol: 指数代码, 可以通过 ak.index_stock_info() 接口获取\n    :type symbol: str\n    :return: 最新指数的成份股权重\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        f\"https://oss-ch.csindex.com.cn/static/html/csindex/\"\n        f\"public/uploads/file/autofile/closeweight/{symbol}closeweight.xls\"\n    )\n    r = requests.get(url)\n    temp_df = pd.read_excel(BytesIO(r.content))\n    temp_df.columns = [\n        \"日期\",\n        \"指数代码\",\n        \"指数名称\",\n        \"指数英文名称\",\n        \"成分券代码\",\n        \"成分券名称\",\n        \"成分券英文名称\",\n        \"交易所\",\n        \"交易所英文名称\",\n        \"权重\",\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(\n        temp_df[\"日期\"], format=\"%Y%m%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"指数代码\"] = temp_df[\"指数代码\"].astype(str).str.zfill(6)\n    temp_df[\"成分券代码\"] = temp_df[\"成分券代码\"].astype(str).str.zfill(6)\n    temp_df[\"权重\"] = pd.to_numeric(temp_df[\"权重\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_a_code_to_symbol(symbol: str = \"000300\") -> str:\n    \"\"\"\n    输入股票代码判断股票市场\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 股票市场\n    :rtype: str\n    \"\"\"\n    if symbol.startswith(\"6\") or symbol.startswith(\"900\"):\n        return f\"sh{symbol}\"\n    else:\n        return f\"sz{symbol}\"\n\n\nif __name__ == \"__main__\":\n    index_stock_cons_csindex_df = index_stock_cons_csindex(symbol=\"000300\")\n    print(index_stock_cons_csindex_df)\n\n    index_stock_cons_weight_csindex_df = index_stock_cons_weight_csindex(\n        symbol=\"000300\"\n    )\n    print(index_stock_cons_weight_csindex_df)\n\n    index_stock_cons_sina_df = index_stock_cons_sina(symbol=\"000300\")\n    print(index_stock_cons_sina_df)\n\n    index_stock_cons_df = index_stock_cons(symbol=\"000300\")\n    print(index_stock_cons_df)\n"
  },
  {
    "path": "akshare/index/index_csindex.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/8/4 14:00\nDesc: 中证指数网站-指数列表\n网站：https://www.csindex.com.cn/#/indices/family/list?index_series=1\n\"\"\"\n\nimport warnings\nfrom io import BytesIO\n\nimport pandas as pd\nimport requests\n\n\ndef index_csindex_all() -> pd.DataFrame:\n    \"\"\"\n    中证指数网站-指数列表\n    https://www.csindex.com.cn/#/indices/family/list?index_series=1\n    Note: 但是不知道数据更新时间\n    :return: 最新指数的列表,\n    :rtype: pandas.DataFrame\n    \"\"\"\n    warnings.filterwarnings(\n        \"ignore\", category=UserWarning, message=\"Workbook contains no default style\"\n    )\n    url = \"https://www.csindex.com.cn/csindex-home/exportExcel/indexAll/CH\"\n\n    headers = {\n        \"Content-Type\": \"application/json;charset=UTF-8\",\n    }\n    playloads = {\n        \"sorter\": {\"sortField\": \"null\", \"sortOrder\": None},\n        \"pager\": {\"pageNum\": 1, \"pageSize\": 10},\n        \"indexFilter\": {\n            \"ifCustomized\": None,\n            \"ifTracked\": None,\n            \"ifWeightCapped\": None,\n            \"indexCompliance\": None,\n            \"hotSpot\": None,\n            \"indexClassify\": None,\n            \"currency\": None,\n            \"region\": None,\n            \"indexSeries\": [\"1\"],\n            \"undefined\": None,\n        },\n    }\n    r = requests.post(url, json=playloads, headers=headers)\n\n    temp_df = pd.read_excel(BytesIO(r.content))\n    temp_df[\"基日\"] = pd.to_datetime(\n        temp_df[\"基日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"发布时间\"] = pd.to_datetime(\n        temp_df[\"发布时间\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"指数代码\"] = temp_df[\"指数代码\"].astype(str).str.zfill(6)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    index_csindex_all_df = index_csindex_all()\n    print(index_csindex_all_df)\n"
  },
  {
    "path": "akshare/index/index_cx.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/8/7 18:30\nDesc: 财新数据-指数报告-数字经济指数\nhttps://yun.ccxe.com.cn/indices/dei\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef index_pmi_com_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-财新中国 PMI-综合 PMI\n    https://yun.ccxe.com.cn/indices/pmi\n    :return: 财新中国 PMI-综合 PMI\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\"type\": \"com\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化值\", \"综合PMI\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"综合PMI\",\n            \"变化值\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_pmi_man_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-财新中国 PMI-制造业 PMI\n    https://yun.ccxe.com.cn/indices/pmi\n    :return: 财新中国 PMI-制造业 PMI\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\"type\": \"man\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化值\", \"制造业PMI\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"制造业PMI\",\n            \"变化值\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_pmi_ser_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-财新中国 PMI-服务业 PMI\n    https://yun.ccxe.com.cn/indices/pmi\n    :return: 财新中国 PMI-服务业 PMI\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\"type\": \"ser\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化值\", \"服务业PMI\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"服务业PMI\",\n            \"变化值\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_dei_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-数字经济指数\n    https://yun.ccxe.com.cn/indices/dei\n    :return: 数字经济指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\"type\": \"dei\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化值\", \"数字经济指数\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"数字经济指数\",\n            \"变化值\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_ii_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-产业指数\n    https://yun.ccxe.com.cn/indices/dei\n    :return: 产业指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\"type\": \"ii\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化值\", \"产业指数\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"产业指数\",\n            \"变化值\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_si_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-溢出指数\n    https://yun.ccxe.com.cn/indices/dei\n    :return: 溢出指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\"type\": \"si\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化值\", \"溢出指数\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"溢出指数\",\n            \"变化值\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_fi_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-融合指数\n    https://yun.ccxe.com.cn/indices/dei\n    :return: 融合指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\"type\": \"fi\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化值\", \"融合指数\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"融合指数\",\n            \"变化值\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_bi_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-基础指数\n    https://yun.ccxe.com.cn/indices/dei\n    :return: 基础指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\"type\": \"bi\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化值\", \"基础指数\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"基础指数\",\n            \"变化值\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_nei_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-中国新经济指数\n    https://yun.ccxe.com.cn/indices/nei\n    :return: 中国新经济指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\"type\": \"nei\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化值\", \"中国新经济指数\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"中国新经济指数\",\n            \"变化值\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_li_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-劳动力投入指数\n    https://yun.ccxe.com.cn/indices/nei\n    :return: 劳动力投入指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\"type\": \"li\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化值\", \"劳动力投入指数\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"劳动力投入指数\",\n            \"变化值\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_ci_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-资本投入指数\n    https://yun.ccxe.com.cn/indices/nei\n    :return: 资本投入指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\"type\": \"ci\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化值\", \"资本投入指数\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"资本投入指数\",\n            \"变化值\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_ti_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-科技投入指数\n    https://yun.ccxe.com.cn/indices/nei\n    :return: 科技投入指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\"type\": \"ti\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化值\", \"科技投入指数\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"科技投入指数\",\n            \"变化值\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_neaw_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-新经济行业入职平均工资水平\n    https://yun.ccxe.com.cn/indices/nei\n    :return: 新经济行业入职平均工资水平\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\"type\": \"neaw\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化值\", \"新经济行业入职平均工资水平\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"新经济行业入职平均工资水平\",\n            \"变化值\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_awpr_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-新经济入职工资溢价水平\n    https://yun.ccxe.com.cn/indices/nei\n    :return: 新经济入职工资溢价水平\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\"type\": \"awpr\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化值\", \"新经济入职工资溢价水平\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"新经济入职工资溢价水平\",\n            \"变化值\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_cci_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-大宗商品指数\n    https://yun.ccxe.com.cn/indices/nei\n    :return: 大宗商品指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\n        \"type\": \"cci\",\n        \"code\": \"1000050\",\n        \"month\": \"-1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化值\", \"大宗商品指数\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"大宗商品指数\",\n            \"变化值\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_qli_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-高质量因子\n    https://yun.ccxe.com.cn/indices/qli\n    :return: 高质量因子\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\n        \"type\": \"qli\",\n        \"code\": \"1000050\",\n        \"month\": \"-1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化幅度\", \"高质量因子指数\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"高质量因子指数\",\n            \"变化幅度\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_ai_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-AI策略指数\n    https://yun.ccxe.com.cn/indices/ai\n    :return: AI策略指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\n        \"type\": \"ai\",\n        \"code\": \"1000050\",\n        \"month\": \"-1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化幅度\", \"AI策略指数\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"AI策略指数\",\n            \"变化幅度\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_bei_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-基石经济指数\n    https://yun.ccxe.com.cn/indices/bei\n    :return: 基石经济指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\n        \"type\": \"ind\",\n        \"code\": \"930927\",\n        \"month\": \"-1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化幅度\", \"基石经济指数\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"基石经济指数\",\n            \"变化幅度\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\ndef index_neei_cx() -> pd.DataFrame:\n    \"\"\"\n    财新数据-指数报告-新动能指数\n    https://yun.ccxe.com.cn/indices/neei\n    :return: 新动能指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://yun.ccxe.com.cn/api/index/pro/cxIndexTrendInfo\"\n    params = {\n        \"type\": \"ind\",\n        \"code\": \"930928\",\n        \"month\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"变化幅度\", \"新动能指数\", \"日期\"]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"新动能指数\",\n            \"变化幅度\",\n        ]\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    index_pmi_com_cx_df = index_pmi_com_cx()\n    print(index_pmi_com_cx_df)\n\n    index_pmi_man_cx_df = index_pmi_man_cx()\n    print(index_pmi_man_cx_df)\n\n    index_pmi_ser_cx_df = index_pmi_ser_cx()\n    print(index_pmi_ser_cx_df)\n\n    index_dei_cx_df = index_dei_cx()\n    print(index_dei_cx_df)\n\n    index_ii_cx_df = index_ii_cx()\n    print(index_ii_cx_df)\n\n    index_si_cx_df = index_si_cx()\n    print(index_si_cx_df)\n\n    index_fi_cx_df = index_fi_cx()\n    print(index_fi_cx_df)\n\n    index_bi_cx_df = index_bi_cx()\n    print(index_bi_cx_df)\n\n    index_nei_cx_df = index_nei_cx()\n    print(index_nei_cx_df)\n\n    index_li_cx_df = index_li_cx()\n    print(index_li_cx_df)\n\n    index_ci_cx_df = index_ci_cx()\n    print(index_ci_cx_df)\n\n    index_ti_cx_df = index_ti_cx()\n    print(index_ti_cx_df)\n\n    index_neaw_cx_df = index_neaw_cx()\n    print(index_neaw_cx_df)\n\n    index_awpr_cx_df = index_awpr_cx()\n    print(index_awpr_cx_df)\n\n    index_cci_cx_df = index_cci_cx()\n    print(index_cci_cx_df)\n\n    index_qli_cx_df = index_qli_cx()\n    print(index_qli_cx_df)\n\n    index_ai_cx_df = index_ai_cx()\n    print(index_ai_cx_df)\n\n    index_bei_cx_df = index_bei_cx()\n    print(index_bei_cx_df)\n\n    index_neei_cx_df = index_neei_cx()\n    print(index_neei_cx_df)\n"
  },
  {
    "path": "akshare/index/index_drewry.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/9/26 18:00\nDesc: Drewry 集装箱指数\nhttps://www.drewry.co.uk/supply-chain-advisors/supply-chain-expertise/world-container-index-assessed-by-drewry\nhttps://infogram.com/world-container-index-1h17493095xl4zj\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.utils import demjson\n\n\ndef drewry_wci_index(symbol: str = \"composite\") -> pd.DataFrame:\n    \"\"\"\n    Drewry 集装箱指数\n    https://infogram.com/world-container-index-1h17493095xl4zj\n    :param symbol: choice of {\"composite\", \"shanghai-rotterdam\", \"rotterdam-shanghai\", \"shanghai-los angeles\",\n    \"los angeles-shanghai\", \"shanghai-genoa\", \"new york-rotterdam\", \"rotterdam-new york\"}\n    :type symbol: str\n    :return: Drewry 集装箱指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"composite\": 0,\n        \"shanghai-rotterdam\": 1,\n        \"rotterdam-shanghai\": 2,\n        \"shanghai-los angeles\": 3,\n        \"los angeles-shanghai\": 4,\n        \"shanghai-genoa\": 5,\n        \"new york-rotterdam\": 6,\n        \"rotterdam-new york\": 7,\n    }\n    url = \"https://infogram.com/world-container-index-1h17493095xl4zj\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    data_text = soup.find_all(\"script\")[-4].string.strip(\"window.infographicData=\")[:-1]\n    data_json = demjson.decode(data_text)\n    data_json_need = data_json[\"elements\"][\"content\"][\"content\"][\"entities\"][\n        \"7a55585f-3fb3-44e6-9b54-beea1cd20b4d\"\n    ][\"data\"][symbol_map[symbol]]\n    date_list = [item[0][\"value\"] for item in data_json_need[1:]]\n    try:\n        value_list = [item[1][\"value\"] for item in data_json_need[1:]]\n    except TypeError:\n        value_list = [item[1][\"value\"] for item in data_json_need[1:-1]]\n    temp_df = pd.DataFrame([date_list, value_list]).T\n    temp_df.columns = [\"date\", \"wci\"]\n    temp_df[\"date\"] = pd.to_datetime(\n        temp_df[\"date\"], format=\"%d-%b-%y\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"wci\"] = pd.to_numeric(temp_df[\"wci\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    drewry_wci_index_df = drewry_wci_index(symbol=\"composite\")\n    print(drewry_wci_index_df)\n\n    drewry_wci_index_df = drewry_wci_index(symbol=\"shanghai-rotterdam\")\n    print(drewry_wci_index_df)\n\n    drewry_wci_index_df = drewry_wci_index(symbol=\"rotterdam-shanghai\")\n    print(drewry_wci_index_df)\n\n    drewry_wci_index_df = drewry_wci_index(symbol=\"shanghai-los angeles\")\n    print(drewry_wci_index_df)\n\n    drewry_wci_index_df = drewry_wci_index(symbol=\"los angeles-shanghai\")\n    print(drewry_wci_index_df)\n\n    drewry_wci_index_df = drewry_wci_index(symbol=\"shanghai-genoa\")\n    print(drewry_wci_index_df)\n\n    drewry_wci_index_df = drewry_wci_index(symbol=\"new york-rotterdam\")\n    print(drewry_wci_index_df)\n\n    drewry_wci_index_df = drewry_wci_index(symbol=\"rotterdam-new york\")\n    print(drewry_wci_index_df)\n"
  },
  {
    "path": "akshare/index/index_eri.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/6/19 18:16\nDesc: 浙江省排污权交易指数\nhttps://zs.zjpwq.net/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef index_eri(symbol: str = \"月度\") -> pd.DataFrame:\n    \"\"\"\n    浙江省排污权交易指数\n    https://zs.zjpwq.net\n    :param symbol: choice of {\"月度\", \"季度\"}\n    :type symbol: str\n    :return: 浙江省排污权交易指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"月度\": \"MONTH\",\n        \"季度\": \"QUARTER\",\n    }\n    url = \"https://zs.zjpwq.net/pwq-index-webapi/indexData\"\n    params = {\n        \"cycle\": symbol_map[symbol],\n        \"regionId\": \"1\",\n        \"structId\": \"1\",\n        \"pageSize\": \"5000\",\n        \"indexId\": \"1\",\n        \"orderBy\": \"stage.publishTime\",\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36\"\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    index_value = temp_df[\"indexValue\"].tolist()\n    index_time = [item[\"stage\"][\"publishTime\"] for item in data_json[\"data\"]]\n    big_df = pd.DataFrame([index_time, index_value], index=[\"日期\", \"交易指数\"]).T\n    url = \"https://zs.zjpwq.net/pwq-index-webapi/dataStatistics\"\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    big_df[\"成交量\"] = temp_df[\"totalQuantity\"].tolist()\n    big_df[\"成交额\"] = temp_df[\"totalCost\"].tolist()\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df[\"交易指数\"] = pd.to_numeric(big_df[\"交易指数\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    big_df[\"成交额\"] = pd.to_numeric(big_df[\"成交额\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    index_eri_df = index_eri(symbol=\"月度\")\n    print(index_eri_df)\n\n    index_eri_df = index_eri(symbol=\"季度\")\n    print(index_eri_df)\n"
  },
  {
    "path": "akshare/index/index_global_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/7 17:00\nDesc: 东方财富网-行情中心-全球指数\nhttps://quote.eastmoney.com/center/gridlist.html#global_qtzs\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.index.cons import index_global_em_symbol_map\n\n\ndef index_global_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-全球指数-实时行情数据\n    https://quote.eastmoney.com/center/gridlist.html#global_qtzs\n    :return: 实时行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"np\": \"2\",\n        \"fltt\": \"1\",\n        \"invt\": \"2\",\n        \"fs\": \"i:1.000001,i:0.399001,i:0.399005,i:0.399006,i:1.000300,i:100.HSI,i:100.HSCEI,i:124.HSCCI,\"\n        \"i:100.TWII,i:100.N225,i:100.KOSPI200,i:100.KS11,i:100.STI,i:100.SENSEX,i:100.KLSE,i:100.SET,\"\n        \"i:100.PSI,i:100.KSE100,i:100.VNINDEX,i:100.JKSE,i:100.CSEALL,i:100.SX5E,i:100.FTSE,i:100.MCX,\"\n        \"i:100.AXX,i:100.FCHI,i:100.GDAXI,i:100.RTS,i:100.IBEX,i:100.PSI20,i:100.OMXC20,i:100.BFX,\"\n        \"i:100.AEX,i:100.WIG,i:100.OMXSPI,i:100.SSMI,i:100.HEX,i:100.OSEBX,i:100.ATX,i:100.MIB,\"\n        \"i:100.ASE,i:100.ICEXI,i:100.PX,i:100.ISEQ,i:100.DJIA,i:100.SPX,i:100.NDX,i:100.TSX,\"\n        \"i:100.BVSP,i:100.MXX,i:100.AS51,i:100.AORD,i:100.NZ50,i:100.UDI,i:100.BDI,i:100.CRB\",\n        \"fields\": \"f12,f13,f14,f292,f1,f2,f4,f3,f152,f17,f18,f15,f16,f7,f124\",\n        \"fid\": \"f3\",\n        \"pn\": \"1\",\n        \"pz\": \"200\",\n        \"po\": \"1\",\n        \"dect\": \"1\",\n        \"wbp2u\": \"|0|0|0|web\",\n    }\n    r = requests.get(url=url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"]).T\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df[\"index\"].astype(int) + 1\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"f12\": \"代码\",\n            \"f14\": \"名称\",\n            \"f17\": \"开盘价\",\n            \"f4\": \"涨跌额\",\n            \"f3\": \"涨跌幅\",\n            \"f2\": \"最新价\",\n            \"f15\": \"最高价\",\n            \"f16\": \"最低价\",\n            \"f18\": \"昨收价\",\n            \"f7\": \"振幅\",\n            \"f124\": \"最新行情时间\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"昨收价\",\n            \"振幅\",\n            \"最新行情时间\",\n        ]\n    ]\n    temp_df[\"最新行情时间\"] = pd.to_datetime(\n        temp_df[\"最新行情时间\"], unit=\"s\", utc=True, errors=\"coerce\"\n    ).dt.tz_convert(\"Asia/Shanghai\")\n    temp_df[\"最新行情时间\"] = temp_df[\"最新行情时间\"].dt.strftime(\"%Y-%m-%d %H:%M:%S\")\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\") / 100\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\") / 100\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\") / 100\n    temp_df[\"开盘价\"] = pd.to_numeric(temp_df[\"开盘价\"], errors=\"coerce\") / 100\n    temp_df[\"最高价\"] = pd.to_numeric(temp_df[\"最高价\"], errors=\"coerce\") / 100\n    temp_df[\"最低价\"] = pd.to_numeric(temp_df[\"最低价\"], errors=\"coerce\") / 100\n    temp_df[\"昨收价\"] = pd.to_numeric(temp_df[\"昨收价\"], errors=\"coerce\") / 100\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\") / 100\n    return temp_df\n\n\ndef index_global_hist_em(symbol: str = \"美元指数\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-全球指数-历史行情数据\n    https://quote.eastmoney.com/gb/zsUDI.html\n    :param symbol: 指数名称；可以通过 ak.index_global_spot_em() 获取\n    :type symbol: str\n    :return: 历史行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n    params = {\n        \"secid\": f\"{index_global_em_symbol_map[symbol]['market']}.{index_global_em_symbol_map[symbol]['code']}\",\n        \"klt\": \"101\",\n        \"fqt\": \"1\",\n        \"lmt\": \"50000\",\n        \"end\": \"20500000\",\n        \"iscca\": \"1\",\n        \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64\",\n        \"ut\": \"f057cbcbce2a86e2866ab8877db1d059\",\n        \"forcect\": \"1\",\n    }\n    r = requests.get(url=url, params=params)\n    data_json = r.json()\n\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df[\"code\"] = data_json[\"data\"][\"code\"]\n    temp_df[\"name\"] = data_json[\"data\"][\"name\"]\n    temp_df.columns = [\n        \"日期\",\n        \"今开\",\n        \"最新价\",\n        \"最高\",\n        \"最低\",\n        \"-\",\n        \"-\",\n        \"振幅\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"代码\",\n        \"名称\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"代码\",\n            \"名称\",\n            \"今开\",\n            \"最新价\",\n            \"最高\",\n            \"最低\",\n            \"振幅\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    index_global_spot_em_df = index_global_spot_em()\n    print(index_global_spot_em_df)\n\n    index_global_hist_em_df = index_global_hist_em(symbol=\"美元指数\")\n    print(index_global_hist_em_df)\n"
  },
  {
    "path": "akshare/index/index_global_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/7 17:00\nDesc: 新浪财经-行情中心-环球市场\nhttps://finance.sina.com.cn/stock/globalindex/quotes/UKX\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.index.cons import index_global_sina_symbol_map\n\n\ndef index_global_name_table() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-行情中心-环球市场-名称代码映射表\n    https://finance.sina.com.cn/stock/globalindex/quotes/UKX\n    :return: 名称代码映射表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = pd.DataFrame.from_dict(\n        index_global_sina_symbol_map, orient=\"index\", columns=[\"代码\"]\n    )\n    temp_df.index.name = \"指数名称\"\n    temp_df.reset_index(inplace=True)\n    return temp_df\n\n\ndef index_global_hist_sina(symbol: str = \"OMX\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-行情中心-环球市场-历史行情\n    https://finance.sina.com.cn/stock/globalindex/quotes/UKX\n    :param symbol: 指数名称；可以通过 ak.index_global_name_table() 获取\n    :type symbol: str\n    :return: 环球市场历史行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://gi.finance.sina.com.cn/hq/daily\"\n    params = {\n        \"symbol\": index_global_sina_symbol_map[symbol],\n        \"num\": \"10000\",\n    }\n    r = requests.get(url=url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.rename(\n        columns={\n            \"d\": \"date\",\n            \"o\": \"open\",\n            \"h\": \"high\",\n            \"l\": \"low\",\n            \"c\": \"close\",\n            \"v\": \"volume\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"date\",\n            \"open\",\n            \"high\",\n            \"low\",\n            \"close\",\n            \"volume\",\n        ]\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"volume\"] = pd.to_numeric(temp_df[\"volume\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    index_global_name_table_df = index_global_name_table()\n    print(index_global_name_table_df)\n\n    index_global_hist_sina_df = index_global_hist_sina(symbol=\"瑞士股票指数\")\n    print(index_global_hist_sina_df)\n"
  },
  {
    "path": "akshare/index/index_hog.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/3/21 11:16\nDesc: 行情宝\nhttps://hqb.nxin.com/pigindex/index.shtml\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef index_hog_spot_price() -> pd.DataFrame:\n    \"\"\"\n    行情宝-生猪市场价格指数\n    https://hqb.nxin.com/pigindex/index.shtml\n    :return: 生猪市场价格指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://hqb.nxin.com/pigindex/getPigIndexChart.shtml\"\n    params = {\"regionId\": \"0\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\n        \"日期\",\n        \"指数\",\n        \"4个月均线\",\n        \"6个月均线\",\n        \"12个月均线\",\n        \"预售均价\",\n        \"成交均价\",\n        \"成交均重\",\n    ]\n    temp_df[\"日期\"] = (\n        pd.to_datetime(temp_df[\"日期\"], unit=\"ms\") + pd.Timedelta(hours=8)\n    ).dt.date\n    temp_df[\"指数\"] = pd.to_numeric(temp_df[\"指数\"], errors=\"coerce\")\n    temp_df[\"4个月均线\"] = pd.to_numeric(temp_df[\"4个月均线\"], errors=\"coerce\")\n    temp_df[\"6个月均线\"] = pd.to_numeric(temp_df[\"6个月均线\"], errors=\"coerce\")\n    temp_df[\"12个月均线\"] = pd.to_numeric(temp_df[\"12个月均线\"], errors=\"coerce\")\n    temp_df[\"预售均价\"] = pd.to_numeric(temp_df[\"预售均价\"], errors=\"coerce\")\n    temp_df[\"成交均价\"] = pd.to_numeric(temp_df[\"成交均价\"], errors=\"coerce\")\n    temp_df[\"成交均重\"] = pd.to_numeric(temp_df[\"成交均重\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    index_hog_spot_price_df = index_hog_spot_price()\n    print(index_hog_spot_price_df)\n"
  },
  {
    "path": "akshare/index/index_kq_fz.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/5/18 17:10\nDesc: 中国柯桥纺织指数\nhttp://www.kqindex.cn/flzs/jiage\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom tqdm import tqdm\n\n\ndef index_kq_fz(symbol: str = \"价格指数\") -> pd.DataFrame:\n    \"\"\"\n    中国柯桥纺织指数\n    http://www.kqindex.cn/flzs/jiage\n    :param symbol: choice of {'价格指数', '景气指数', '外贸指数'}\n    :type symbol: str\n    :return: 中国柯桥纺织指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"价格指数\": \"1_1\",\n        \"景气指数\": \"1_2\",\n        \"外贸指数\": \"2\",\n    }\n    url = \"http://www.kqindex.cn/flzs/table_data\"\n    params = {\n        \"category\": \"0\",\n        \"start\": \"\",\n        \"end\": \"\",\n        \"indexType\": f\"{symbol_map[symbol]}\",\n        \"pageindex\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    page_num = data_json[\"page\"]\n    big_df = pd.DataFrame()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params = {\n            \"category\": \"0\",\n            \"start\": \"\",\n            \"end\": \"\",\n            \"indexType\": f\"{symbol_map[symbol]}\",\n            \"pageindex\": page,\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    if symbol == \"价格指数\":\n        big_df.columns = [\n            \"期次\",\n            \"指数\",\n            \"涨跌幅\",\n        ]\n        big_df[\"期次\"] = pd.to_datetime(big_df[\"期次\"])\n        big_df[\"指数\"] = pd.to_numeric(big_df[\"指数\"], errors=\"coerce\")\n        big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    elif symbol == \"景气指数\":\n        big_df.columns = [\n            \"期次\",\n            \"总景气指数\",\n            \"涨跌幅\",\n            \"流通景气指数\",\n            \"生产景气指数\",\n        ]\n        big_df[\"总景气指数\"] = pd.to_numeric(big_df[\"总景气指数\"], errors=\"coerce\")\n        big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n        big_df[\"流通景气指数\"] = pd.to_numeric(big_df[\"流通景气指数\"], errors=\"coerce\")\n        big_df[\"生产景气指数\"] = pd.to_numeric(big_df[\"生产景气指数\"], errors=\"coerce\")\n    elif symbol == \"外贸指数\":\n        big_df.columns = [\n            \"期次\",\n            \"价格指数\",\n            \"价格指数-涨跌幅\",\n            \"景气指数\",\n            \"景气指数-涨跌幅\",\n        ]\n        big_df[\"价格指数\"] = pd.to_numeric(big_df[\"价格指数\"], errors=\"coerce\")\n        big_df[\"价格指数-涨跌幅\"] = pd.to_numeric(\n            big_df[\"价格指数-涨跌幅\"], errors=\"coerce\"\n        )\n        big_df[\"景气指数\"] = pd.to_numeric(big_df[\"景气指数\"], errors=\"coerce\")\n        big_df[\"景气指数-涨跌幅\"] = pd.to_numeric(\n            big_df[\"景气指数-涨跌幅\"], errors=\"coerce\"\n        )\n    big_df.sort_values([\"期次\"], inplace=True, ignore_index=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    index_kq_fz_df = index_kq_fz(symbol=\"价格指数\")\n    print(index_kq_fz_df)\n\n    index_kq_fz_df = index_kq_fz(symbol=\"景气指数\")\n    print(index_kq_fz_df)\n\n    index_kq_fz_df = index_kq_fz(symbol=\"外贸指数\")\n    print(index_kq_fz_df)\n"
  },
  {
    "path": "akshare/index/index_kq_ss.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/6/13 22:05\nDesc: 柯桥时尚指数\nhttp://ss.kqindex.cn:9559/rinder_web_kqsszs/index/index_page.do\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef index_kq_fashion(symbol: str = \"时尚创意指数\") -> pd.DataFrame:\n    \"\"\"\n    柯桥时尚指数\n    http://ss.kqindex.cn:9559/rinder_web_kqsszs/index/index_page.do\n    :param symbol: choice of {'柯桥时尚指数', '时尚创意指数', '时尚设计人才数', '新花型推出数', '创意产品成交数', '创意企业数量', '时尚活跃度指数', '电商运行数', '时尚平台拓展数', '新产品销售额占比', '企业合作占比', '品牌传播费用', '时尚推广度指数', '国际交流合作次数', '企业参展次数', '外商驻点数量变化', '时尚评价指数'}\n    :type symbol: str\n    :return: 柯桥时尚指数及其子项数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://api.idx365.com/index/project/34/data\"\n    symbol_map = {\n        \"柯桥时尚指数\": \"root\",\n        \"时尚创意指数\": \"01\",\n        \"时尚设计人才数\": \"0101\",\n        \"新花型推出数\": \"0102\",\n        \"创意产品成交数\": \"0103\",\n        \"创意企业数量\": \"0104\",\n        \"时尚活跃度指数\": \"02\",\n        \"电商运行数\": \"0201\",\n        \"时尚平台拓展数\": \"0201\",\n        \"新产品销售额占比\": \"0201\",\n        \"企业合作占比\": \"0201\",\n        \"品牌传播费用\": \"0201\",\n        \"时尚推广度指数\": \"03\",\n        \"国际交流合作次数\": \"0301\",\n        \"企业参展次数\": \"0302\",\n        \"外商驻点数量变化\": \"0302\",\n        \"时尚评价指数\": \"04\",\n    }\n    params = {\"structCode\": symbol_map[symbol]}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.rename(\n        columns={\n            \"id\": \"_\",\n            \"indexValue\": \"指数\",\n            \"lastValue\": \"_\",\n            \"projId\": \"_\",\n            \"publishTime\": \"日期\",\n            \"sameValue\": \"_\",\n            \"stageId\": \"_\",\n            \"structCode\": \"_\",\n            \"structName\": \"_\",\n            \"version\": \"_\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"指数\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"]).dt.date\n    temp_df.sort_values(\"日期\", inplace=True)\n    temp_df[\"涨跌值\"] = temp_df[\"指数\"].diff()\n    temp_df[\"涨跌幅\"] = temp_df[\"指数\"].pct_change()\n    temp_df.sort_values(\"日期\", ascending=True, inplace=True, ignore_index=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    for item in [\n        \"柯桥时尚指数\",\n        \"时尚创意指数\",\n        \"时尚设计人才数\",\n        \"新花型推出数\",\n        \"创意产品成交数\",\n        \"创意企业数量\",\n        \"时尚活跃度指数\",\n        \"电商运行数\",\n        \"时尚平台拓展数\",\n        \"新产品销售额占比\",\n        \"企业合作占比\",\n        \"品牌传播费用\",\n        \"时尚推广度指数\",\n        \"国际交流合作次数\",\n        \"企业参展次数\",\n        \"外商驻点数量变化\",\n        \"时尚评价指数\",\n    ]:\n        index_kq_fashion_df = index_kq_fashion(symbol=item)\n        print(item)\n        print(index_kq_fashion_df)\n"
  },
  {
    "path": "akshare/index/index_option_qvix.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2026/3/22 21:00\nDesc: 50 ETF 期权波动率指数 QVIX\n300 ETF 期权波动率指数 QVIX\nhttp://1.optbbs.com/s/vix.shtml?50ETF\nhttp://1.optbbs.com/s/vix.shtml?300ETF\n\"\"\"\n\nimport pandas as pd\nfrom functools import lru_cache\n\n\n@lru_cache\ndef __get_optbbs_daily() -> pd.DataFrame:\n    \"\"\"\n    读取原始数据\n    http://1.optbbs.com/d/csv/d/k.csv\n    :return: 原始数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://1.optbbs.com/d/csv/d/k.csv\"\n    temp_df = pd.read_csv(url, encoding=\"gbk\")\n    return temp_df\n\n\ndef index_option_50etf_qvix() -> pd.DataFrame:\n    \"\"\"\n    50ETF 期权波动率指数 QVIX\n    http://1.optbbs.com/s/vix.shtml?50ETF\n    :return: 50ETF 期权波动率指数 QVIX\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = __get_optbbs_daily().iloc[:, :5]\n    temp_df.columns = [\n        \"date\",\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_50etf_min_qvix() -> pd.DataFrame:\n    \"\"\"\n    50 ETF 期权波动率指数 QVIX\n    http://1.optbbs.com/s/vix.shtml?50ETF\n    :return: 50 ETF 期权波动率指数 QVIX\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://1.optbbs.com/d/csv/d/vix50.csv\"\n    temp_df = pd.read_csv(url).iloc[:, :2]\n    temp_df.columns = [\n        \"time\",\n        \"qvix\",\n    ]\n    temp_df.loc[:, \"qvix\"] = pd.to_numeric(temp_df[\"qvix\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_300etf_qvix() -> pd.DataFrame:\n    \"\"\"\n    300 ETF 期权波动率指数 QVIX\n    http://1.optbbs.com/s/vix.shtml?300ETF\n    :return: 300 ETF 期权波动率指数 QVIX\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = __get_optbbs_daily().iloc[:, [0, 9, 10, 11, 12]]\n    temp_df.columns = [\n        \"date\",\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_300etf_min_qvix() -> pd.DataFrame:\n    \"\"\"\n    300 ETF 期权波动率指数 QVIX-分时\n    http://1.optbbs.com/s/vix.shtml?300ETF\n    :return: 300 ETF 期权波动率指数 QVIX-分时\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://1.optbbs.com/d/csv/d/vix300.csv\"\n    temp_df = pd.read_csv(url).iloc[:, :2]\n    temp_df.columns = [\n        \"time\",\n        \"qvix\",\n    ]\n    temp_df.loc[:, \"qvix\"] = pd.to_numeric(temp_df[\"qvix\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_500etf_qvix() -> pd.DataFrame:\n    \"\"\"\n    500 ETF 期权波动率指数 QVIX\n    http://1.optbbs.com/s/vix.shtml?500ETF\n    :return: 500 ETF 期权波动率指数 QVIX\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = __get_optbbs_daily().iloc[:, [0, 67, 68, 69, 70]]\n    temp_df.columns = [\n        \"date\",\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_500etf_min_qvix() -> pd.DataFrame:\n    \"\"\"\n    500 ETF 期权波动率指数 QVIX-分时\n    http://1.optbbs.com/s/vix.shtml?500ETF\n    :return: 500 ETF 期权波动率指数 QVIX-分时\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://1.optbbs.com/d/csv/d/vix500.csv\"\n    temp_df = pd.read_csv(url).iloc[:, :2]\n    temp_df.columns = [\n        \"time\",\n        \"qvix\",\n    ]\n    temp_df.loc[:, \"qvix\"] = pd.to_numeric(temp_df[\"qvix\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_cyb_qvix() -> pd.DataFrame:\n    \"\"\"\n    创业板 期权波动率指数 QVIX\n    http://1.optbbs.com/s/vix.shtml?CYB\n    :return: 创业板 期权波动率指数 QVIX\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = __get_optbbs_daily().iloc[:, [0, 71, 72, 73, 74]]\n    temp_df.columns = [\n        \"date\",\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_cyb_min_qvix() -> pd.DataFrame:\n    \"\"\"\n    创业板 期权波动率指数 QVIX-分时\n    http://1.optbbs.com/s/vix.shtml?CYB\n    :return: 创业板 期权波动率指数 QVIX-分时\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://1.optbbs.com/d/csv/d/vixcyb.csv\"\n    temp_df = pd.read_csv(url).iloc[:, :2]\n    temp_df.columns = [\n        \"time\",\n        \"qvix\",\n    ]\n    temp_df.loc[:, \"qvix\"] = pd.to_numeric(temp_df[\"qvix\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_kcb_qvix() -> pd.DataFrame:\n    \"\"\"\n    科创板 期权波动率指数 QVIX\n    http://1.optbbs.com/s/vix.shtml?KCB\n    :return: 科创板 期权波动率指数 QVIX\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = __get_optbbs_daily().iloc[:, [0, 83, 84, 85, 86]]\n    temp_df.columns = [\n        \"date\",\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_kcb_min_qvix() -> pd.DataFrame:\n    \"\"\"\n    科创板 期权波动率指数 QVIX-分时\n    http://1.optbbs.com/s/vix.shtml?KCB\n    :return: 科创板 期权波动率指数 QVIX-分时\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://1.optbbs.com/d/csv/d/vixkcb.csv\"\n    temp_df = pd.read_csv(url).iloc[:, :2]\n    temp_df.columns = [\n        \"time\",\n        \"qvix\",\n    ]\n    temp_df.loc[:, \"qvix\"] = pd.to_numeric(temp_df[\"qvix\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_100etf_qvix() -> pd.DataFrame:\n    \"\"\"\n    深证100ETF 期权波动率指数 QVIX\n    http://1.optbbs.com/s/vix.shtml?100ETF\n    :return: 深证100ETF 期权波动率指数 QVIX\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = __get_optbbs_daily().iloc[:, [0, 75, 76, 77, 78]]\n    temp_df.columns = [\n        \"date\",\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_100etf_min_qvix() -> pd.DataFrame:\n    \"\"\"\n    深证100ETF 期权波动率指数 QVIX-分时\n    http://1.optbbs.com/s/vix.shtml?100ETF\n    :return: 深证100ETF 期权波动率指数 QVIX-分时\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://1.optbbs.com/d/csv/d/vix100.csv\"\n    temp_df = pd.read_csv(url).iloc[:, :2]\n    temp_df.columns = [\n        \"time\",\n        \"qvix\",\n    ]\n    temp_df.loc[:, \"qvix\"] = pd.to_numeric(temp_df[\"qvix\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_300index_qvix() -> pd.DataFrame:\n    \"\"\"\n    中证300股指 期权波动率指数 QVIX\n    http://1.optbbs.com/s/vix.shtml?Index\n    :return: 中证300股指 期权波动率指数 QVIX\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = __get_optbbs_daily().iloc[:, [0, 17, 18, 19, 20]]\n    temp_df.columns = [\n        \"date\",\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_300index_min_qvix() -> pd.DataFrame:\n    \"\"\"\n    中证300股指 期权波动率指数 QVIX-分时\n    http://1.optbbs.com/s/vix.shtml?Index\n    :return: 中证300股指 期权波动率指数 QVIX-分时\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://1.optbbs.com/d/csv/d/vixindex.csv\"\n    temp_df = pd.read_csv(url).iloc[:, :2]\n    temp_df.columns = [\n        \"time\",\n        \"qvix\",\n    ]\n    temp_df[\"qvix\"] = pd.to_numeric(temp_df[\"qvix\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_1000index_qvix() -> pd.DataFrame:\n    \"\"\"\n    中证1000股指 期权波动率指数 QVIX\n    http://1.optbbs.com/s/vix.shtml?Index1000\n    :return: 中证1000股指 期权波动率指数 QVIX\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = __get_optbbs_daily().iloc[:, [0, 25, 26, 27, 28]]\n    temp_df.columns = [\n        \"date\",\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_1000index_min_qvix() -> pd.DataFrame:\n    \"\"\"\n    中证1000股指 期权波动率指数 QVIX-分时\n    http://1.optbbs.com/s/vix.shtml?Index1000\n    :return: 中证1000股指 期权波动率指数 QVIX-分时\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://1.optbbs.com/d/csv/d/vixindex1000.csv\"\n    temp_df = pd.read_csv(url).iloc[:, :2]\n    temp_df.columns = [\n        \"time\",\n        \"qvix\",\n    ]\n    temp_df[\"qvix\"] = pd.to_numeric(temp_df[\"qvix\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_50index_qvix() -> pd.DataFrame:\n    \"\"\"\n    上证50股指 期权波动率指数 QVIX\n    http://1.optbbs.com/s/vix.shtml?50index\n    :return: 上证50股指 期权波动率指数 QVIX\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = __get_optbbs_daily().iloc[:, [0, 79, 80, 81, 82]]\n    temp_df.columns = [\n        \"date\",\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_option_50index_min_qvix() -> pd.DataFrame:\n    \"\"\"\n    上证50股指 期权波动率指数 QVIX-分时\n    http://1.optbbs.com/s/vix.shtml?50index\n    :return: 上证50股指 期权波动率指数 QVIX-分时\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://1.optbbs.com/d/csv/d/vix50index.csv\"\n    temp_df = pd.read_csv(url).iloc[:, :2]\n    temp_df.columns = [\n        \"time\",\n        \"qvix\",\n    ]\n    temp_df[\"qvix\"] = pd.to_numeric(temp_df[\"qvix\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    index_option_50etf_qvix_df = index_option_50etf_qvix()\n    print(index_option_50etf_qvix_df)\n\n    index_option_50etf_min_qvix_df = index_option_50etf_min_qvix()\n    print(index_option_50etf_min_qvix_df)\n\n    index_option_300etf_qvix_df = index_option_300etf_qvix()\n    print(index_option_300etf_qvix_df)\n\n    index_option_300etf_min_qvix_df = index_option_300etf_min_qvix()\n    print(index_option_300etf_min_qvix_df)\n\n    index_option_500etf_qvix_df = index_option_500etf_qvix()\n    print(index_option_500etf_qvix_df)\n\n    index_option_500etf_min_qvix_df = index_option_500etf_min_qvix()\n    print(index_option_500etf_min_qvix_df)\n\n    index_option_cyb_qvix_df = index_option_cyb_qvix()\n    print(index_option_cyb_qvix_df)\n\n    index_option_cyb_min_qvix_df = index_option_cyb_min_qvix()\n    print(index_option_cyb_min_qvix_df)\n\n    index_option_kcb_qvix_df = index_option_kcb_qvix()\n    print(index_option_kcb_qvix_df)\n\n    index_option_kcb_min_qvix_df = index_option_kcb_min_qvix()\n    print(index_option_kcb_min_qvix_df)\n\n    index_option_100etf_qvix_df = index_option_100etf_qvix()\n    print(index_option_100etf_qvix_df)\n\n    index_option_100etf_min_qvix_df = index_option_100etf_min_qvix()\n    print(index_option_100etf_min_qvix_df)\n\n    index_option_300index_qvix_df = index_option_300index_qvix()\n    print(index_option_300index_qvix_df)\n\n    index_option_300index_min_qvix_df = index_option_300index_min_qvix()\n    print(index_option_300index_min_qvix_df)\n\n    index_option_1000index_qvix_df = index_option_1000index_qvix()\n    print(index_option_1000index_qvix_df)\n\n    index_option_1000index_min_qvix_df = index_option_1000index_min_qvix()\n    print(index_option_1000index_min_qvix_df)\n\n    index_option_50index_qvix_df = index_option_50index_qvix()\n    print(index_option_50index_qvix_df)\n\n    index_option_50index_min_qvix_df = index_option_50index_min_qvix()\n    print(index_option_50index_min_qvix_df)\n"
  },
  {
    "path": "akshare/index/index_research_fund_sw.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/11 17:40\nDesc: 申万宏源研究-申万指数-指数发布-基金指数-实时行情\nhttps://www.swsresearch.com/institute_sw/allIndex/releasedIndex\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.cons import headers\n\n\ndef index_realtime_fund_sw(symbol: str = \"基础一级\") -> pd.DataFrame:\n    \"\"\"\n    申万宏源研究-申万指数-指数发布-基金指数-实时行情\n    https://www.swsresearch.com/institute_sw/allIndex/releasedIndex\n    :param symbol: choice of {\"基础一级\", \"基础二级\", \"基础三级\", \"特色指数\"}\n    :type symbol: str\n    :return: 基金指数-实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.swsresearch.com/insWechatSw/fundIndex/pageList\"\n    payload = {\n        \"pageNo\": 1,\n        \"pageSize\": 50,\n        \"indexTypeName\": symbol,\n        \"sortField\": \"\",\n        \"rule\": \"\",\n        \"indexType\": 1,\n    }\n    r = requests.post(url, json=payload, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"list\"])\n    temp_df.rename(\n        columns={\n            \"swIndexCode\": \"指数代码\",\n            \"swIndexName\": \"指数名称\",\n            \"lastCloseIndex\": \"昨收盘\",\n            \"lastMarkup\": \"日涨跌幅\",\n            \"yearMarkup\": \"年涨跌幅\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"指数代码\",\n            \"指数名称\",\n            \"昨收盘\",\n            \"日涨跌幅\",\n            \"年涨跌幅\",\n        ]\n    ]\n    temp_df[\"昨收盘\"] = pd.to_numeric(temp_df[\"昨收盘\"], errors=\"coerce\")\n    temp_df[\"日涨跌幅\"] = pd.to_numeric(temp_df[\"日涨跌幅\"], errors=\"coerce\")\n    temp_df[\"年涨跌幅\"] = pd.to_numeric(temp_df[\"年涨跌幅\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_hist_fund_sw(symbol: str = \"807200\", period: str = \"day\") -> pd.DataFrame:\n    \"\"\"\n    申万宏源研究-申万指数-指数发布-基金指数-历史行情\n    https://www.swsresearch.com/institute_sw/allIndex/releasedIndex/fundDetail?code=807100\n    :param symbol: 基金指数代码\n    :type symbol: str\n    :param period: 周期\n    :type period: str\n    :return: 历史行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    period_map = {\n        \"day\": \"DAY\",\n        \"week\": \"WEEK\",\n        \"month\": \"MONTH\",\n    }\n    url = \"https://www.swsresearch.com/insWechatSw/fundIndex/getFundKChartData\"\n    payload = {\"swIndexCode\": symbol, \"type\": period_map[period]}\n    r = requests.post(url, json=payload, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.rename(\n        columns={\n            \"bargaindate\": \"日期\",\n            \"swIndexName\": \"指数名称\",\n            \"swindexcode\": \"指数代码\",\n            \"closeindex\": \"收盘指数\",\n            \"maxindex\": \"最高指数\",\n            \"minindex\": \"最低指数\",\n            \"openindex\": \"开盘指数\",\n            \"markup\": \"涨跌幅\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"收盘指数\",\n            \"开盘指数\",\n            \"最高指数\",\n            \"最低指数\",\n            \"涨跌幅\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"收盘指数\"] = pd.to_numeric(temp_df[\"收盘指数\"], errors=\"coerce\")\n    temp_df[\"最高指数\"] = pd.to_numeric(temp_df[\"最高指数\"], errors=\"coerce\")\n    temp_df[\"最低指数\"] = pd.to_numeric(temp_df[\"最低指数\"], errors=\"coerce\")\n    temp_df[\"开盘指数\"] = pd.to_numeric(temp_df[\"开盘指数\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    index_realtime_fund_sw_df = index_realtime_fund_sw(symbol=\"基础一级\")\n    print(index_realtime_fund_sw_df)\n\n    index_realtime_fund_sw_df = index_realtime_fund_sw(symbol=\"基础二级\")\n    print(index_realtime_fund_sw_df)\n\n    index_realtime_fund_sw_df = index_realtime_fund_sw(symbol=\"基础三级\")\n    print(index_realtime_fund_sw_df)\n\n    index_realtime_fund_sw_df = index_realtime_fund_sw(symbol=\"特色指数\")\n    print(index_realtime_fund_sw_df)\n\n    index_hist_fund_sw_df = index_hist_fund_sw(symbol=\"807200\", period=\"day\")\n    print(index_hist_fund_sw_df)\n\n    index_hist_fund_sw_df = index_hist_fund_sw(symbol=\"807200\", period=\"week\")\n    print(index_hist_fund_sw_df)\n\n    index_hist_fund_sw_df = index_hist_fund_sw(symbol=\"807200\", period=\"month\")\n    print(index_hist_fund_sw_df)\n"
  },
  {
    "path": "akshare/index/index_research_sw.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/10/23 13:00\nDesc: 申万宏源研究-指数系列\nhttps://www.swsresearch.com/institute_sw/allIndex/releasedIndex\n\"\"\"\n\nimport math\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef index_hist_sw(symbol: str = \"801030\", period: str = \"day\") -> pd.DataFrame:\n    \"\"\"\n    申万宏源研究-指数发布-指数详情-指数历史数据\n    https://www.swsresearch.com/institute_sw/allIndex/releasedIndex/releasedetail?code=801001&name=%E7%94%B3%E4%B8%8750\n    :param symbol: 指数代码\n    :type symbol: str\n    :param period: choice of {\"day\", \"week\", \"month\"}\n    :type period: str\n    :return: 指数历史数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    period_map = {\n        \"day\": \"DAY\",\n        \"week\": \"WEEK\",\n        \"month\": \"MONTH\",\n    }\n    url = \"https://www.swsresearch.com/institute-sw/api/index_publish/trend/\"\n    params = {\n        \"swindexcode\": symbol,\n        \"period\": period_map[period],\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/114.0.0.0 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers, verify=False)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.rename(\n        columns={\n            \"swindexcode\": \"代码\",\n            \"bargaindate\": \"日期\",\n            \"openindex\": \"开盘\",\n            \"maxindex\": \"最高\",\n            \"minindex\": \"最低\",\n            \"closeindex\": \"收盘\",\n            \"hike\": \"\",\n            \"markup\": \"\",\n            \"bargainamount\": \"成交量\",\n            \"bargainsum\": \"成交额\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"日期\",\n            \"收盘\",\n            \"开盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_min_sw(symbol: str = \"801001\") -> pd.DataFrame:\n    \"\"\"\n    申万宏源研究-指数发布-指数详情-指数分时数据\n    https://www.swsresearch.com/institute_sw/allIndex/releasedIndex/releasedetail?code=801001&name=%E7%94%B3%E4%B8%8750\n    :param symbol: 指数代码\n    :type symbol: str\n    :return: 指数分时数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        \"https://www.swsresearch.com/institute-sw/api/index_publish/details/timelines/\"\n    )\n    params = {\n        \"swindexcode\": symbol,\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/114.0.0.0 Safari/537.36\"\n    }\n    r = requests.get(url, params=params, headers=headers, verify=False)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.rename(\n        columns={\n            \"l1\": \"代码\",\n            \"l2\": \"名称\",\n            \"l8\": \"价格\",\n            \"trading_date\": \"日期\",\n            \"trading_time\": \"时间\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"价格\",\n            \"日期\",\n            \"时间\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"价格\"] = pd.to_numeric(temp_df[\"价格\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_component_sw(symbol: str = \"801001\") -> pd.DataFrame:\n    \"\"\"\n    申万宏源研究-指数发布-指数详情-成分股\n    https://www.swsresearch.com/institute_sw/allIndex/releasedIndex/releasedetail?code=801001&name=%E7%94%B3%E4%B8%8750\n    :param symbol: 指数代码\n    :type symbol: str\n    :return: 成分股\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.swsresearch.com/institute-sw/api/index_publish/details/component_stocks/\"\n    params = {\"swindexcode\": symbol, \"page\": \"1\", \"page_size\": \"10000\"}\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/114.0.0.0 Safari/537.36\"\n    }\n    r = requests.get(url, params=params, headers=headers, verify=False)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"results\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df[\"index\"] + 1\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"stockcode\": \"证券代码\",\n            \"stockname\": \"证券名称\",\n            \"newweight\": \"最新权重\",\n            \"beginningdate\": \"计入日期\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"证券代码\",\n            \"证券名称\",\n            \"最新权重\",\n            \"计入日期\",\n        ]\n    ]\n    temp_df[\"计入日期\"] = pd.to_datetime(temp_df[\"计入日期\"], errors=\"coerce\").dt.date\n    temp_df[\"最新权重\"] = pd.to_numeric(temp_df[\"最新权重\"], errors=\"coerce\")\n    return temp_df\n\n\ndef __index_realtime_sw(symbol: str = \"大类风格指数\") -> pd.DataFrame:\n    \"\"\"\n    申万宏源研究-申万指数-股票指数\n    https://www.swsresearch.com/institute_sw/allIndex/releasedIndex\n    :param symbol: choice of {\"大类风格指数\", \"金创指数\"}\n    :type symbol: str\n    :return: 指数系列实时行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.swsresearch.com/insWechatSw/dflgOrJcIndex/pageList\"\n    payload = {\n        \"pageNo\": 1,\n        \"pageSize\": 10,\n        \"indexTypeName\": symbol,\n        \"sortField\": \"\",\n        \"rule\": \"\",\n        \"indexType\": 1,\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/114.0.0.0 Safari/537.36\"\n    }\n    r = requests.post(url, json=payload, headers=headers, verify=False)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"list\"])\n    temp_df.rename(\n        columns={\n            \"swIndexCode\": \"指数代码\",\n            \"swIndexName\": \"指数名称\",\n            \"lastCloseIndex\": \"昨收盘\",\n            \"lastMarkup\": \"日涨跌幅\",\n            \"yearMarkup\": \"年涨跌幅\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"指数代码\",\n            \"指数名称\",\n            \"昨收盘\",\n            \"日涨跌幅\",\n            \"年涨跌幅\",\n        ]\n    ]\n    temp_df[\"昨收盘\"] = pd.to_numeric(temp_df[\"昨收盘\"], errors=\"coerce\")\n    temp_df[\"日涨跌幅\"] = pd.to_numeric(temp_df[\"日涨跌幅\"], errors=\"coerce\")\n    temp_df[\"年涨跌幅\"] = pd.to_numeric(temp_df[\"年涨跌幅\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_realtime_sw(symbol: str = \"二级行业\") -> pd.DataFrame:\n    \"\"\"\n    申万宏源研究-指数系列\n    https://www.swsresearch.com/institute_sw/allIndex/releasedIndex\n    :param symbol: choice of {\"市场表征\", \"一级行业\", \"二级行业\", \"风格指数\", \"大类风格指数\", \"金创指数\"}\n    :type symbol: str\n    :return: 指数系列实时行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if symbol in {\"大类风格指数\", \"金创指数\"}:\n        temp_df = __index_realtime_sw(symbol)\n        return temp_df\n    url = \"https://www.swsresearch.com/institute-sw/api/index_publish/current/\"\n    params = {\"page\": \"1\", \"page_size\": \"50\", \"indextype\": symbol}\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/114.0.0.0 Safari/537.36\"\n    }\n    r = requests.get(url, params=params, headers=headers, verify=False)\n    data_json = r.json()\n    total_num = data_json[\"data\"][\"count\"]\n    total_page = math.ceil(total_num / 50)\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"page\": page})\n        r = requests.get(url, params=params, headers=headers, verify=False)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"][\"results\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"指数代码\",\n        \"指数名称\",\n        \"昨收盘\",\n        \"今开盘\",\n        \"成交额\",\n        \"最高价\",\n        \"最低价\",\n        \"最新价\",\n        \"成交量\",\n    ]\n    big_df = big_df[\n        [\n            \"指数代码\",\n            \"指数名称\",\n            \"昨收盘\",\n            \"今开盘\",\n            \"最新价\",\n            \"成交额\",\n            \"成交量\",\n            \"最高价\",\n            \"最低价\",\n        ]\n    ]\n    big_df[\"昨收盘\"] = pd.to_numeric(big_df[\"昨收盘\"], errors=\"coerce\")\n    big_df[\"今开盘\"] = pd.to_numeric(big_df[\"今开盘\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"成交额\"] = pd.to_numeric(big_df[\"成交额\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    big_df[\"最高价\"] = pd.to_numeric(big_df[\"最高价\"], errors=\"coerce\")\n    big_df[\"最低价\"] = pd.to_numeric(big_df[\"最低价\"], errors=\"coerce\")\n    return big_df\n\n\ndef index_analysis_daily_sw(\n    symbol: str = \"市场表征\",\n    start_date: str = \"20221103\",\n    end_date: str = \"20221103\",\n) -> pd.DataFrame:\n    \"\"\"\n    申万宏源研究-指数分析\n    https://www.swsresearch.com/institute_sw/allIndex/analysisIndex\n    :param symbol: choice of {\"市场表征\", \"一级行业\", \"二级行业\", \"风格指数\"}\n    :type symbol: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :return: 指数分析\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.swsresearch.com/institute-sw/api/index_analysis/index_analysis_report/\"\n    params = {\n        \"page\": \"1\",\n        \"page_size\": \"50\",\n        \"index_type\": symbol,\n        \"start_date\": \"-\".join([start_date[:4], start_date[4:6], start_date[6:]]),\n        \"end_date\": \"-\".join([end_date[:4], end_date[4:6], end_date[6:]]),\n        \"type\": \"DAY\",\n        \"swindexcode\": \"all\",\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/114.0.0.0 Safari/537.36\"\n    }\n    r = requests.get(url, params=params, headers=headers, verify=False)\n    data_json = r.json()\n    total_num = data_json[\"data\"][\"count\"]\n    total_page = math.ceil(total_num / 50)\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"page\": page})\n        r = requests.get(url, params=params, headers=headers, verify=False)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"][\"results\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.rename(\n        columns={\n            \"swindexcode\": \"指数代码\",\n            \"swindexname\": \"指数名称\",\n            \"bargaindate\": \"发布日期\",\n            \"closeindex\": \"收盘指数\",\n            \"bargainamount\": \"成交量\",\n            \"markup\": \"涨跌幅\",\n            \"turnoverrate\": \"换手率\",\n            \"pe\": \"市盈率\",\n            \"pb\": \"市净率\",\n            \"meanprice\": \"均价\",\n            \"bargainsumrate\": \"成交额占比\",\n            \"negotiablessharesum1\": \"流通市值\",\n            \"negotiablessharesum2\": \"平均流通市值\",\n            \"dp\": \"股息率\",\n        },\n        inplace=True,\n    )\n    big_df[\"发布日期\"] = pd.to_datetime(big_df[\"发布日期\"], errors=\"coerce\").dt.date\n    big_df[\"收盘指数\"] = pd.to_numeric(big_df[\"收盘指数\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"换手率\"] = pd.to_numeric(big_df[\"换手率\"], errors=\"coerce\")\n    big_df[\"市盈率\"] = pd.to_numeric(big_df[\"市盈率\"], errors=\"coerce\")\n    big_df[\"市净率\"] = pd.to_numeric(big_df[\"市净率\"], errors=\"coerce\")\n    big_df[\"均价\"] = pd.to_numeric(big_df[\"均价\"], errors=\"coerce\")\n    big_df[\"成交额占比\"] = pd.to_numeric(big_df[\"成交额占比\"], errors=\"coerce\")\n    big_df[\"流通市值\"] = pd.to_numeric(big_df[\"流通市值\"], errors=\"coerce\")\n    big_df[\"平均流通市值\"] = pd.to_numeric(big_df[\"平均流通市值\"], errors=\"coerce\")\n    big_df[\"股息率\"] = pd.to_numeric(big_df[\"股息率\"], errors=\"coerce\")\n    big_df.sort_values(by=[\"发布日期\"], inplace=True, ignore_index=True)\n    return big_df\n\n\ndef index_analysis_week_month_sw(symbol: str = \"month\") -> pd.DataFrame:\n    \"\"\"\n    申万宏源研究-周/月报表-日期序列\n    https://www.swsresearch.com/institute_sw/allIndex/analysisIndex\n    :param symbol: choice of {\"week\", \"month\"}\n    :type symbol: str\n    :return: 日期序列\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.swsresearch.com/institute-sw/api/index_analysis/week_month_datetime/\"\n    params = {\"type\": symbol.upper()}\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/114.0.0.0 Safari/537.36\"\n    }\n    r = requests.get(url, params=params, headers=headers, verify=False)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"bargaindate\"] = pd.to_datetime(\n        temp_df[\"bargaindate\"], errors=\"coerce\"\n    ).dt.date\n    temp_df.columns = [\"date\"]\n    temp_df.sort_values(by=[\"date\"], inplace=True, ignore_index=True)\n    return temp_df\n\n\ndef index_analysis_weekly_sw(\n    symbol: str = \"市场表征\",\n    date: str = \"20221104\",\n) -> pd.DataFrame:\n    \"\"\"\n    申万宏源研究-指数分析-周报告\n    https://www.swsresearch.com/institute_sw/allIndex/analysisIndex\n    :param symbol: choice of {\"市场表征\", \"一级行业\", \"二级行业\", \"风格指数\"}\n    :type symbol: str\n    :param date: 查询日期; 通过调用 ak.index_analysis_week_month_sw(date=\"20221104\") 接口获取\n    :type date: str\n    :return: 指数分析\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.swsresearch.com/institute-sw/api/index_analysis/index_analysis_reports/\"\n    params = {\n        \"page\": \"1\",\n        \"page_size\": \"50\",\n        \"index_type\": symbol,\n        \"bargaindate\": \"-\".join([date[:4], date[4:6], date[6:]]),\n        \"type\": \"WEEK\",\n        \"swindexcode\": \"all\",\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/114.0.0.0 Safari/537.36\"\n    }\n    r = requests.get(url, params=params, headers=headers, verify=False)\n    data_json = r.json()\n    total_num = data_json[\"data\"][\"count\"]\n    total_page = math.ceil(total_num / 50)\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"page\": page})\n        r = requests.get(url, params=params, headers=headers, verify=False)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"][\"results\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.rename(\n        columns={\n            \"swindexcode\": \"指数代码\",\n            \"swindexname\": \"指数名称\",\n            \"bargaindate\": \"发布日期\",\n            \"closeindex\": \"收盘指数\",\n            \"bargainamount\": \"成交量\",\n            \"markup\": \"涨跌幅\",\n            \"turnoverrate\": \"换手率\",\n            \"pe\": \"市盈率\",\n            \"pb\": \"市净率\",\n            \"meanprice\": \"均价\",\n            \"bargainsumrate\": \"成交额占比\",\n            \"negotiablessharesum1\": \"流通市值\",\n            \"negotiablessharesum2\": \"平均流通市值\",\n            \"dp\": \"股息率\",\n        },\n        inplace=True,\n    )\n    big_df[\"发布日期\"] = pd.to_datetime(big_df[\"发布日期\"], errors=\"coerce\").dt.date\n    big_df[\"收盘指数\"] = pd.to_numeric(big_df[\"收盘指数\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"换手率\"] = pd.to_numeric(big_df[\"换手率\"], errors=\"coerce\")\n    big_df[\"市盈率\"] = pd.to_numeric(big_df[\"市盈率\"], errors=\"coerce\")\n    big_df[\"市净率\"] = pd.to_numeric(big_df[\"市净率\"], errors=\"coerce\")\n    big_df[\"均价\"] = pd.to_numeric(big_df[\"均价\"], errors=\"coerce\")\n    big_df[\"成交额占比\"] = pd.to_numeric(big_df[\"成交额占比\"], errors=\"coerce\")\n    big_df[\"流通市值\"] = pd.to_numeric(big_df[\"流通市值\"], errors=\"coerce\")\n    big_df[\"平均流通市值\"] = pd.to_numeric(big_df[\"平均流通市值\"], errors=\"coerce\")\n    big_df[\"股息率\"] = pd.to_numeric(big_df[\"股息率\"], errors=\"coerce\")\n\n    big_df.sort_values(by=[\"发布日期\"], inplace=True, ignore_index=True)\n    return big_df\n\n\ndef index_analysis_monthly_sw(\n    symbol: str = \"市场表征\",\n    date: str = \"20221031\",\n) -> pd.DataFrame:\n    \"\"\"\n    申万宏源研究-指数分析-月报告\n    https://www.swsresearch.com/institute_sw/allIndex/analysisIndex\n    :param symbol: choice of {\"市场表征\", \"一级行业\", \"二级行业\", \"风格指数\"}\n    :type symbol: str\n    :param date: 查询日期; 通过调用 ak.index_analysis_week_month_sw() 接口获取\n    :type date: str\n    :return: 指数分析\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.swsresearch.com/institute-sw/api/index_analysis/index_analysis_reports/\"\n    params = {\n        \"page\": \"1\",\n        \"page_size\": \"50\",\n        \"index_type\": symbol,\n        \"bargaindate\": \"-\".join([date[:4], date[4:6], date[6:]]),\n        \"type\": \"MONTH\",\n        \"swindexcode\": \"all\",\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/114.0.0.0 Safari/537.36\"\n    }\n    r = requests.get(url, params=params, headers=headers, verify=False)\n    data_json = r.json()\n    total_num = data_json[\"data\"][\"count\"]\n    total_page = math.ceil(total_num / 50)\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"page\": page})\n        r = requests.get(url, params=params, headers=headers, verify=False)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"][\"results\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.rename(\n        columns={\n            \"swindexcode\": \"指数代码\",\n            \"swindexname\": \"指数名称\",\n            \"bargaindate\": \"发布日期\",\n            \"closeindex\": \"收盘指数\",\n            \"bargainamount\": \"成交量\",\n            \"markup\": \"涨跌幅\",\n            \"turnoverrate\": \"换手率\",\n            \"pe\": \"市盈率\",\n            \"pb\": \"市净率\",\n            \"meanprice\": \"均价\",\n            \"bargainsumrate\": \"成交额占比\",\n            \"negotiablessharesum1\": \"流通市值\",\n            \"negotiablessharesum2\": \"平均流通市值\",\n            \"dp\": \"股息率\",\n        },\n        inplace=True,\n    )\n    big_df[\"发布日期\"] = pd.to_datetime(big_df[\"发布日期\"], errors=\"coerce\").dt.date\n    big_df[\"收盘指数\"] = pd.to_numeric(big_df[\"收盘指数\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"换手率\"] = pd.to_numeric(big_df[\"换手率\"], errors=\"coerce\")\n    big_df[\"市盈率\"] = pd.to_numeric(big_df[\"市盈率\"], errors=\"coerce\")\n    big_df[\"市净率\"] = pd.to_numeric(big_df[\"市净率\"], errors=\"coerce\")\n    big_df[\"均价\"] = pd.to_numeric(big_df[\"均价\"], errors=\"coerce\")\n    big_df[\"成交额占比\"] = pd.to_numeric(big_df[\"成交额占比\"], errors=\"coerce\")\n    big_df[\"流通市值\"] = pd.to_numeric(big_df[\"流通市值\"], errors=\"coerce\")\n    big_df[\"平均流通市值\"] = pd.to_numeric(big_df[\"平均流通市值\"], errors=\"coerce\")\n    big_df[\"股息率\"] = pd.to_numeric(big_df[\"股息率\"], errors=\"coerce\")\n    big_df.sort_values(by=[\"发布日期\"], inplace=True, ignore_index=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    index_hist_sw_df = index_hist_sw(symbol=\"801193\", period=\"day\")\n    print(index_hist_sw_df)\n\n    index_min_sw_df = index_min_sw(symbol=\"801001\")\n    print(index_min_sw_df)\n\n    index_component_sw_df = index_component_sw(symbol=\"801001\")\n    print(index_component_sw_df)\n\n    index_realtime_sw_df = index_realtime_sw(symbol=\"市场表征\")\n    print(index_realtime_sw_df)\n\n    index_analysis_daily_sw_df = index_analysis_daily_sw(\n        symbol=\"市场表征\", start_date=\"20241025\", end_date=\"20241025\"\n    )\n    print(index_analysis_daily_sw_df)\n\n    index_analysis_week_month_sw_df = index_analysis_week_month_sw(symbol=\"month\")\n    print(index_analysis_week_month_sw_df)\n\n    index_analysis_weekly_sw_df = index_analysis_weekly_sw(\n        symbol=\"市场表征\", date=\"20241025\"\n    )\n    print(index_analysis_weekly_sw_df)\n\n    index_analysis_monthly_sw_df = index_analysis_monthly_sw(\n        symbol=\"市场表征\", date=\"20240930\"\n    )\n    print(index_analysis_monthly_sw_df)\n"
  },
  {
    "path": "akshare/index/index_spot.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/12/26 18:30\nDesc: 商品现货价格指数\nhttps://finance.sina.com.cn/futuremarket/spotprice.shtml#titlePos_0\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef spot_goods(symbol: str = \"波罗的海干散货指数\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-商品现货价格指数\n    https://finance.sina.com.cn/futuremarket/spotprice.shtml#titlePos_0\n    :param symbol: choice of {\"波罗的海干散货指数\", \"钢坯价格指数\", \"澳大利亚粉矿价格\"}\n    :type symbol: str\n    :return: 商品现货价格指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://stock.finance.sina.com.cn/futures/api/openapi.php/GoodsIndexService.get_goods_index\"\n    symbol_url_dict = {\n        \"波罗的海干散货指数\": \"BDI\",\n        \"钢坯价格指数\": \"GP\",\n        \"澳大利亚粉矿价格\": \"PB\",\n    }\n    params = {\"symbol\": symbol_url_dict[symbol], \"table\": \"0\"}\n    r = requests.get(url, params=params)\n    r.encoding = \"gbk\"\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"][\"data\"])\n    temp_df = temp_df[[\"opendate\", \"price\", \"zde\", \"zdf\"]]\n    temp_df.columns = [\"日期\", \"指数\", \"涨跌额\", \"涨跌幅\"]\n    temp_df[\"日期\"] = pd.to_datetime(\n        temp_df[\"日期\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"指数\"] = pd.to_numeric(temp_df[\"指数\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df.dropna(inplace=True, ignore_index=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    spot_goods_df = spot_goods(symbol=\"波罗的海干散货指数\")\n    print(spot_goods_df)\n"
  },
  {
    "path": "akshare/index/index_stock_hk.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/15 22:30\nDesc: 港股股票指数数据-新浪-东财\n所有指数-实时行情数据和历史行情数据\nhttps://finance.sina.com.cn/realstock/company/sz399552/nc.shtml\nhttps://quote.eastmoney.com/gb/zsHSTECF2L.html\n\"\"\"\n\nimport re\n\nimport pandas as pd\nimport requests\nimport py_mini_racer\n\nfrom functools import lru_cache\n\nfrom akshare.stock.cons import hk_js_decode\nfrom akshare.utils.func import fetch_paginated_data\n\n\ndef _replace_comma(x) -> str:\n    \"\"\"\n    去除单元格中的 \",\"\n    :param x: 单元格元素\n    :type x: str\n    :return: 处理后的值或原值\n    :rtype: str\n    \"\"\"\n    if \",\" in str(x):\n        return str(x).replace(\",\", \"\")\n    else:\n        return x\n\n\ndef get_hk_index_page_count() -> int:\n    \"\"\"\n    指数的总页数\n    https://vip.stock.finance.sina.com.cn/mkt/#zs_hk\n    :return: 需要抓取的指数的总页数\n    :rtype: int\n    \"\"\"\n    res = requests.get(\n        \"https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getNameCount?node=zs_hk\"\n    )\n    page_count = int(re.findall(re.compile(r\"\\d+\"), res.text)[0]) / 80\n    if isinstance(page_count, int):\n        return page_count\n    else:\n        return int(page_count) + 1\n\n\ndef stock_hk_index_spot_sina() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-行情中心-港股指数\n    大量采集会被目标网站服务器封禁 IP, 如果被封禁 IP, 请 10 分钟后再试\n    https://vip.stock.finance.sina.com.cn/mkt/#zs_hk\n    :return: 所有指数的实时行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        \"https://hq.sinajs.cn/rn=mtf2t&list=hkCES100,hkCES120,hkCES280,hkCES300,hkCESA80,hkCESG10,\"\n        \"hkCESHKM,hkCSCMC,hkCSHK100,hkCSHKDIV,hkCSHKLC,hkCSHKLRE,hkCSHKMCS,hkCSHKME,hkCSHKPE,hkCSHKSE,\"\n        \"hkCSI300,hkCSRHK50,hkGEM,hkHKL,hkHSCCI,hkHSCEI,hkHSI,hkHSMBI,hkHSMOGI,hkHSMPI,hkHSTECH,hkSSE180,\"\n        \"hkSSE180GV,hkSSE380,hkSSE50,hkSSECEQT,hkSSECOMP,hkSSEDIV,hkSSEITOP,hkSSEMCAP,hkSSEMEGA,hkVHSI\"\n    )\n    headers = {\"Referer\": \"https://vip.stock.finance.sina.com.cn/\"}\n    r = requests.get(url, headers=headers)\n    data_text = r.text\n    data_list = [\n        item.split('\"')[1].split(\",\")\n        for item in data_text.split(\"\\n\")\n        if len(item.split('\"')) > 1\n    ]\n    temp_df = pd.DataFrame(data_list)\n    temp_df.columns = [\n        \"代码\",\n        \"名称\",\n        \"今开\",\n        \"昨收\",\n        \"最高\",\n        \"最低\",\n        \"最新价\",\n        \"涨跌额\",\n        \"涨跌幅\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"昨收\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_hk_index_daily_sina(symbol: str = \"CES100\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-港股指数-历史行情数据\n    https://stock.finance.sina.com.cn/hkstock/quotes/CES100.html\n    :param symbol: CES100, 港股指数代码\n    :type symbol: str\n    :return: 历史行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://finance.sina.com.cn/stock/hkstock/{symbol}/klc2_kl.js\"\n    params = {\"d\": \"2023_5_01\"}\n    res = requests.get(url, params=params)\n    js_code = py_mini_racer.MiniRacer()\n    js_code.eval(hk_js_decode)\n    dict_list = js_code.call(\n        \"d\", res.text.split(\"=\")[1].split(\";\")[0].replace('\"', \"\")\n    )  # 执行js解密代码\n    temp_df = pd.DataFrame(dict_list)\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"volume\"] = pd.to_numeric(temp_df[\"volume\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_hk_index_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-港股-指数实时行情\n    https://quote.eastmoney.com/center/gridlist.html#hk_index\n    :return: 指数行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://15.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"wbp2u\": \"|0|0|0|web\",\n        \"fid\": \"f3\",\n        \"fs\": \"m:124,m:125,m:305\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,\"\n        \"f26,f22,f33,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"f2\": \"最新价\",\n            \"f3\": \"涨跌幅\",\n            \"f4\": \"涨跌额\",\n            \"f5\": \"成交量\",\n            \"f6\": \"成交额\",\n            \"f12\": \"代码\",\n            \"f13\": \"内部编号\",\n            \"f14\": \"名称\",\n            \"f15\": \"最高\",\n            \"f16\": \"最低\",\n            \"f17\": \"今开\",\n            \"f18\": \"昨收\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"内部编号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"昨收\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    return temp_df\n\n\n@lru_cache()\ndef _symbol_code_dict() -> dict:\n    \"\"\"\n    缓存 ak.stock_hk_index_spot_em() 接口中的代码与内部编号\n    https://quote.eastmoney.com/center/gridlist.html#hk_index\n    :return: 代码与内部编号\n    :rtype: dict\n    \"\"\"\n    __stock_hk_index_spot_em_df = stock_hk_index_spot_em()\n    symbol_code_dict = dict(\n        zip(\n            __stock_hk_index_spot_em_df[\"代码\"], __stock_hk_index_spot_em_df[\"内部编号\"]\n        )\n    )\n    return symbol_code_dict\n\n\ndef stock_hk_index_daily_em(symbol: str = \"HSTECF2L\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-港股-股票指数数据\n    https://quote.eastmoney.com/gb/zsHSTECF2L.html\n    :param symbol: 港股指数代码; 可以通过 ak.stock_hk_index_spot_em() 获取\n    :type symbol: str\n    :return: 指数数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_code_dict = _symbol_code_dict()\n    symbol_code_dict.update(\n        {\n            \"HSAHP\": \"100\",\n        }\n    )\n    symbol_str = f\"{symbol_code_dict[symbol]}.{symbol}\"\n    url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n    params = {\n        \"secid\": symbol_str,\n        \"klt\": \"101\",  # 日频率\n        \"fqt\": \"1\",\n        \"lmt\": \"10000\",\n        \"end\": \"20500000\",\n        \"iscca\": \"1\",\n        \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64\",\n        \"ut\": \"f057cbcbce2a86e2866ab8877db1d059\",\n        \"forcect\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df.columns = [\n        \"date\",\n        \"open\",\n        \"latest\",\n        \"high\",\n        \"low\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[[\"date\", \"open\", \"high\", \"low\", \"latest\"]]\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"latest\"] = pd.to_numeric(temp_df[\"latest\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hk_index_spot_sina_df = stock_hk_index_spot_sina()\n    print(stock_hk_index_spot_sina_df)\n\n    stock_hk_index_daily_sina_df = stock_hk_index_daily_sina(symbol=\"CES100\")\n    print(stock_hk_index_daily_sina_df)\n\n    stock_hk_index_spot_em_df = stock_hk_index_spot_em()\n    print(stock_hk_index_spot_em_df)\n\n    stock_hk_index_daily_em_df = stock_hk_index_daily_em(symbol=\"HSTECH\")\n    print(stock_hk_index_daily_em_df)\n"
  },
  {
    "path": "akshare/index/index_stock_us_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/3/17 18:20\nDesc: 新浪财经-美股指数行情\nhttps://stock.finance.sina.com.cn/usstock/quotes/.IXIC.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nimport py_mini_racer\n\nfrom akshare.stock.cons import (\n    zh_js_decode,\n)\n\n\ndef index_us_stock_sina(symbol: str = \".INX\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-美股指数行情\n    https://stock.finance.sina.com.cn/usstock/quotes/.IXIC.html\n    :param symbol: choice of {\".IXIC\", \".DJI\", \".INX\", \".NDX\"}\n    :type symbol: str\n    :return: 美股指数行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://finance.sina.com.cn/staticdata/us/{symbol}\"\n    r = requests.get(url)\n    js_code = py_mini_racer.MiniRacer()\n    js_code.eval(zh_js_decode)\n    dict_list = js_code.call(\"d\", r.text.split(\"=\")[1].split(\";\")[0].replace('\"', \"\"))\n    temp_df = pd.DataFrame(dict_list)\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"volume\"] = pd.to_numeric(temp_df[\"volume\"], errors=\"coerce\")\n    temp_df[\"amount\"] = pd.to_numeric(temp_df[\"amount\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    index_us_stock_sina_df = index_us_stock_sina(symbol=\".INX\")\n    print(index_us_stock_sina_df)\n"
  },
  {
    "path": "akshare/index/index_stock_zh.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/10 18:30\nDesc: 股票指数数据-新浪-东财-腾讯\n所有指数-实时行情数据和历史行情数据\nhttps://finance.sina.com.cn/realstock/company/sz399552/nc.shtml\n\"\"\"\n\nimport datetime\nimport re\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\nfrom akshare.index.cons import (\n    zh_sina_index_stock_payload,\n    zh_sina_index_stock_url,\n    zh_sina_index_stock_count_url,\n    zh_sina_index_stock_hist_url,\n)\nfrom akshare.stock.cons import hk_js_decode\nfrom akshare.utils import demjson\nfrom akshare.utils.func import fetch_paginated_data\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef _replace_comma(x):\n    \"\"\"\n    去除单元格中的 \",\"\n    :param x: 单元格元素\n    :type x: str\n    :return: 处理后的值或原值\n    :rtype: str\n    \"\"\"\n    if \",\" in str(x):\n        return str(x).replace(\",\", \"\")\n    else:\n        return x\n\n\ndef get_zh_index_page_count() -> int:\n    \"\"\"\n    指数的总页数\n    https://vip.stock.finance.sina.com.cn/mkt/#hs_s\n    :return: 需要抓取的指数的总页数\n    :rtype: int\n    \"\"\"\n    res = requests.get(zh_sina_index_stock_count_url)\n    page_count = int(re.findall(re.compile(r\"\\d+\"), res.text)[0]) / 80\n    if isinstance(page_count, int):\n        return page_count\n    else:\n        return int(page_count) + 1\n\n\ndef stock_zh_index_spot_sina() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-行情中心首页-A股-分类-所有指数\n    大量采集会被目标网站服务器封禁 IP, 如果被封禁 IP, 请 10 分钟后再试\n    https://vip.stock.finance.sina.com.cn/mkt/#hs_s\n    :return: 所有指数的实时行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    big_df = pd.DataFrame()\n    page_count = get_zh_index_page_count()\n    zh_sina_stock_payload_copy = zh_sina_index_stock_payload.copy()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_count + 1), leave=False):\n        zh_sina_stock_payload_copy.update({\"page\": page})\n        res = requests.get(zh_sina_index_stock_url, params=zh_sina_stock_payload_copy)\n        data_json = demjson.decode(res.text)\n        big_df = pd.concat(objs=[big_df, pd.DataFrame(data_json)], ignore_index=True)\n    big_df = big_df.map(_replace_comma)\n    big_df[\"trade\"] = pd.to_numeric(big_df[\"trade\"], errors=\"coerce\")\n    big_df[\"pricechange\"] = pd.to_numeric(big_df[\"pricechange\"], errors=\"coerce\")\n    big_df[\"changepercent\"] = pd.to_numeric(big_df[\"changepercent\"], errors=\"coerce\")\n    big_df[\"buy\"] = pd.to_numeric(big_df[\"buy\"], errors=\"coerce\")\n    big_df[\"sell\"] = pd.to_numeric(big_df[\"sell\"], errors=\"coerce\")\n    big_df[\"settlement\"] = pd.to_numeric(big_df[\"settlement\"], errors=\"coerce\")\n    big_df[\"open\"] = pd.to_numeric(big_df[\"open\"], errors=\"coerce\")\n    big_df[\"high\"] = pd.to_numeric(big_df[\"high\"], errors=\"coerce\")\n    big_df[\"low\"] = pd.to_numeric(big_df[\"low\"], errors=\"coerce\")\n    big_df.columns = [\n        \"代码\",\n        \"名称\",\n        \"最新价\",\n        \"涨跌额\",\n        \"涨跌幅\",\n        \"_\",\n        \"_\",\n        \"昨收\",\n        \"今开\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"昨收\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"涨跌额\"] = pd.to_numeric(big_df[\"涨跌额\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"昨收\"] = pd.to_numeric(big_df[\"昨收\"], errors=\"coerce\")\n    big_df[\"今开\"] = pd.to_numeric(big_df[\"今开\"], errors=\"coerce\")\n    big_df[\"最高\"] = pd.to_numeric(big_df[\"最高\"], errors=\"coerce\")\n    big_df[\"最低\"] = pd.to_numeric(big_df[\"最低\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    big_df[\"成交额\"] = pd.to_numeric(big_df[\"成交额\"], errors=\"coerce\")\n    return big_df\n\n\ndef __stock_zh_main_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-沪深重要指数\n    https://quote.eastmoney.com/center/hszs.html\n    :return: 指数的实时行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://33.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"dect\": \"1\",\n        \"wbp2u\": \"|0|0|0|web\",\n        \"fid\": \"\",\n        \"fs\": \"b:MK0010\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,\"\n        \"f23,f24,f25,f26,f22,f11,f62,f128,f136,f115,f152\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df[\"index\"].astype(int) + 1\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"f2\": \"最新价\",\n            \"f3\": \"涨跌幅\",\n            \"f4\": \"涨跌额\",\n            \"f5\": \"成交量\",\n            \"f6\": \"成交额\",\n            \"f7\": \"振幅\",\n            \"f10\": \"量比\",\n            \"f12\": \"代码\",\n            \"f14\": \"名称\",\n            \"f15\": \"最高\",\n            \"f16\": \"最低\",\n            \"f17\": \"今开\",\n            \"f18\": \"昨收\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"最高\",\n            \"最低\",\n            \"今开\",\n            \"昨收\",\n            \"量比\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"量比\"] = pd.to_numeric(temp_df[\"量比\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_zh_index_spot_em(symbol: str = \"上证系列指数\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-沪深京指数\n    https://quote.eastmoney.com/center/gridlist.html#index_sz\n    :param symbol: \"上证系列指数\"; choice of {\"沪深重要指数\", \"上证系列指数\", \"深证系列指数\", \"指数成份\", \"中证系列指数\"}\n    :type symbol: str\n    :return: 指数的实时行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if symbol == \"沪深重要指数\":\n        return __stock_zh_main_spot_em()\n\n    url = \"https://48.push2.eastmoney.com/api/qt/clist/get\"\n    symbol_map = {\n        \"上证系列指数\": \"m:1+t:1\",\n        \"深证系列指数\": \"m:0 t:5\",\n        \"指数成份\": \"m:1+s:3,m:0+t:5\",\n        \"中证系列指数\": \"m:2\",\n    }\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"wbp2u\": \"|0|0|0|web\",\n        \"fid\": \"f12\",\n        \"fs\": symbol_map[symbol],\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,\"\n        \"f26,f22,f33,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"f2\": \"最新价\",\n            \"f3\": \"涨跌幅\",\n            \"f4\": \"涨跌额\",\n            \"f5\": \"成交量\",\n            \"f6\": \"成交额\",\n            \"f7\": \"振幅\",\n            \"f10\": \"量比\",\n            \"f12\": \"代码\",\n            \"f14\": \"名称\",\n            \"f15\": \"最高\",\n            \"f16\": \"最低\",\n            \"f17\": \"今开\",\n            \"f18\": \"昨收\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"最高\",\n            \"最低\",\n            \"今开\",\n            \"昨收\",\n            \"量比\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"量比\"] = pd.to_numeric(temp_df[\"量比\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_zh_index_daily(symbol: str = \"sh000922\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-指数-历史行情数据, 大量抓取容易封 IP\n    https://finance.sina.com.cn/realstock/company/sh000909/nc.shtml\n    :param symbol: sz399998, 指定指数代码\n    :type symbol: str\n    :return: 历史行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    params = {\"d\": \"2020_2_4\"}\n    res = requests.get(zh_sina_index_stock_hist_url.format(symbol), params=params)\n    js_code = py_mini_racer.MiniRacer()\n    js_code.eval(hk_js_decode)\n    dict_list = js_code.call(\n        \"d\", res.text.split(\"=\")[1].split(\";\")[0].replace('\"', \"\")\n    )  # 执行js解密代码\n    temp_df = pd.DataFrame(dict_list)\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"volume\"] = pd.to_numeric(temp_df[\"volume\"], errors=\"coerce\")\n    return temp_df\n\n\ndef get_tx_start_year(symbol: str = \"sh000919\") -> str:\n    \"\"\"\n    腾讯证券-获取所有股票数据的第一天, 注意这个数据是腾讯证券的历史数据第一天\n    https://gu.qq.com/sh000919/zs\n    :param symbol: 带市场标识的股票代码\n    :type symbol: str\n    :return: 开始日期\n    :rtype: str\n    \"\"\"\n    url = \"https://web.ifzq.gtimg.cn/other/klineweb/klineWeb/weekTrends\"\n    params = {\n        \"code\": symbol,\n        \"type\": \"qfq\",\n        \"_var\": \"trend_qfq\",\n        \"r\": \"0.3506048543943414\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    if not demjson.decode(data_text[data_text.find(\"={\") + 1 :])[\"data\"]:\n        url = \"https://proxy.finance.qq.com/ifzqgtimg/appstock/app/newfqkline/get\"\n        params = {\n            \"_var\": \"kline_dayqfq\",\n            \"param\": f\"{symbol},day,,,320,qfq\",\n            \"r\": \"0.751892490072597\",\n        }\n        r = requests.get(url, params=params)\n        data_text = r.text\n        start_date = demjson.decode(data_text[data_text.find(\"={\") + 1 :])[\"data\"][\n            symbol\n        ][\"day\"][0][0]\n        return start_date\n    start_date = demjson.decode(data_text[data_text.find(\"={\") + 1 :])[\"data\"][0][0]\n    return start_date\n\n\ndef stock_zh_index_daily_tx(symbol: str = \"sz980017\") -> pd.DataFrame:\n    \"\"\"\n    腾讯证券-日频-股票或者指数历史数据\n    作为 ak.stock_zh_index_daily() 的补充, 因为在新浪中有部分指数数据缺失\n    注意都是: 前复权, 不同网站复权方式不同, 不可混用数据\n    https://gu.qq.com/sh000919/zs\n    :param symbol: 带市场标识的股票或者指数代码\n    :type symbol: str\n    :return: 前复权的股票和指数数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    start_date = get_tx_start_year(symbol=symbol)\n    url = \"https://proxy.finance.qq.com/ifzqgtimg/appstock/app/newfqkline/get\"\n    range_start = int(start_date.split(\"-\")[0])\n    range_end = datetime.date.today().year + 1\n    temp_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for year in tqdm(range(range_start, range_end), leave=False):\n        params = {\n            \"_var\": \"kline_dayqfq\",\n            \"param\": f\"{symbol},day,{year}-01-01,{year + 1}-12-31,640,qfq\",\n            \"r\": \"0.8205512681390605\",\n        }\n        res = requests.get(url, params=params)\n        text = res.text\n        try:\n            inner_temp_df = pd.DataFrame(\n                demjson.decode(text[text.find(\"={\") + 1 :])[\"data\"][symbol][\"day\"]\n            )\n        except:  # noqa: E722\n            inner_temp_df = pd.DataFrame(\n                demjson.decode(text[text.find(\"={\") + 1 :])[\"data\"][symbol][\"qfqday\"]\n            )\n        temp_df = pd.concat(objs=[temp_df, inner_temp_df], ignore_index=True)\n    if temp_df.shape[1] == 6:\n        temp_df.columns = [\"date\", \"open\", \"close\", \"high\", \"low\", \"amount\"]\n    else:\n        temp_df = temp_df.iloc[:, :6]\n        temp_df.columns = [\"date\", \"open\", \"close\", \"high\", \"low\", \"amount\"]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"amount\"] = pd.to_numeric(temp_df[\"amount\"], errors=\"coerce\")\n    temp_df.drop_duplicates(inplace=True, ignore_index=True)\n    return temp_df\n\n\ndef stock_zh_index_daily_em(\n    symbol: str = \"csi931151\",\n    start_date: str = \"19900101\",\n    end_date: str = \"20500101\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-股票指数数据\n    https://quote.eastmoney.com/center/hszs.html\n    :param symbol: 带市场标识的指数代码; sz: 深交所, sh: 上交所, csi: 中信指数 + id(000905)\n    :type symbol: str\n    :param start_date: 开始时间\n    :type start_date: str\n    :param end_date: 结束时间\n    :type end_date: str\n    :return: 指数数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    market_map = {\"sz\": \"0\", \"sh\": \"1\", \"csi\": \"2\", \"bj\": \"0\"}\n    url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n    if symbol.find(\"sz\") != -1:\n        secid = \"{}.{}\".format(market_map[\"sz\"], symbol.replace(\"sz\", \"\"))\n    elif symbol.find(\"bj\") != -1:\n        secid = \"{}.{}\".format(market_map[\"bj\"], symbol.replace(\"bj\", \"\"))\n    elif symbol.find(\"sh\") != -1:\n        secid = \"{}.{}\".format(market_map[\"sh\"], symbol.replace(\"sh\", \"\"))\n    elif symbol.find(\"csi\") != -1:\n        secid = \"{}.{}\".format(market_map[\"csi\"], symbol.replace(\"csi\", \"\"))\n    else:\n        return pd.DataFrame()\n    params = {\n        \"secid\": secid,\n        \"fields1\": \"f1,f2,f3,f4,f5\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58\",\n        \"klt\": \"101\",  # 日频率\n        \"fqt\": \"0\",\n        \"beg\": start_date,\n        \"end\": end_date,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    if temp_df.empty:\n        return pd.DataFrame()\n    temp_df.columns = [\"date\", \"open\", \"close\", \"high\", \"low\", \"volume\", \"amount\", \"_\"]\n    temp_df = temp_df[[\"date\", \"open\", \"close\", \"high\", \"low\", \"volume\", \"amount\"]]\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"volume\"] = pd.to_numeric(temp_df[\"volume\"], errors=\"coerce\")\n    temp_df[\"amount\"] = pd.to_numeric(temp_df[\"amount\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_index_daily_df = stock_zh_index_daily(symbol=\"sh000510\")\n    print(stock_zh_index_daily_df)\n\n    stock_zh_index_spot_sina_df = stock_zh_index_spot_sina()\n    print(stock_zh_index_spot_sina_df)\n\n    stock_zh_index_spot_em_df = stock_zh_index_spot_em(symbol=\"沪深重要指数\")\n    print(stock_zh_index_spot_em_df)\n\n    stock_zh_index_spot_em_df = stock_zh_index_spot_em(symbol=\"上证系列指数\")\n    print(stock_zh_index_spot_em_df)\n\n    stock_zh_index_spot_em_df = stock_zh_index_spot_em(symbol=\"深证系列指数\")\n    print(stock_zh_index_spot_em_df)\n\n    stock_zh_index_spot_em_df = stock_zh_index_spot_em(symbol=\"指数成份\")\n    print(stock_zh_index_spot_em_df)\n\n    stock_zh_index_spot_em_df = stock_zh_index_spot_em(symbol=\"中证系列指数\")\n    print(stock_zh_index_spot_em_df)\n\n    stock_zh_index_daily_tx_df = stock_zh_index_daily_tx(symbol=\"sh000919\")\n    print(stock_zh_index_daily_tx_df)\n\n    stock_zh_index_daily_em_df = stock_zh_index_daily_em(symbol=\"bj899050\")\n    print(stock_zh_index_daily_em_df)\n"
  },
  {
    "path": "akshare/index/index_stock_zh_csindex.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/12/23 17:00\nDesc: 中证指数-所有指数-历史行情数据\nhttps://www.csindex.com.cn/zh-CN/indices/index-detail/H30374#/indices/family/list?index_series=1\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_zh_index_hist_csindex(\n    symbol: str = \"000928\",\n    start_date: str = \"20180526\",\n    end_date: str = \"20240604\",\n) -> pd.DataFrame:\n    \"\"\"\n    中证指数-具体指数-历史行情数据\n    P.S. 只有收盘价，正常情况下不应使用该接口，除非指数只有中证网站有\n    https://www.csindex.com.cn/zh-CN/indices/index-detail/H30374#/indices/family/detail?indexCode=H30374\n    :param symbol: 指数代码; e.g., H30374\n    :type symbol: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :return: 包含日期和收盘价的指数数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.csindex.com.cn/csindex-home/perf/index-perf\"\n    params = {\n        \"indexCode\": symbol,\n        \"startDate\": start_date,\n        \"endDate\": end_date,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\n        \"日期\",\n        \"指数代码\",\n        \"指数中文全称\",\n        \"指数中文简称\",\n        \"指数英文全称\",\n        \"指数英文简称\",\n        \"开盘\",\n        \"最高\",\n        \"最低\",\n        \"收盘\",\n        \"涨跌\",\n        \"涨跌幅\",\n        \"成交量\",\n        \"成交金额\",\n        \"样本数量\",\n        \"滚动市盈率\",\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"涨跌\"] = pd.to_numeric(temp_df[\"涨跌\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交金额\"] = pd.to_numeric(temp_df[\"成交金额\"], errors=\"coerce\")\n    temp_df[\"样本数量\"] = pd.to_numeric(temp_df[\"样本数量\"], errors=\"coerce\")\n    temp_df[\"滚动市盈率\"] = pd.to_numeric(temp_df[\"滚动市盈率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_zh_index_value_csindex(symbol: str = \"H30374\") -> pd.DataFrame:\n    \"\"\"\n    中证指数-指数估值数据\n    https://www.csindex.com.cn/zh-CN/indices/index-detail/H30374#/indices/family/detail?indexCode=H30374\n    :param symbol: 指数代码; e.g., H30374\n    :type symbol: str\n    :return: 指数估值数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        f\"https://oss-ch.csindex.com.cn/static/\"\n        f\"html/csindex/public/uploads/file/autofile/indicator/{symbol}indicator.xls\"\n    )\n    temp_df = pd.read_excel(url)\n    temp_df.columns = [\n        \"日期\",\n        \"指数代码\",\n        \"指数中文全称\",\n        \"指数中文简称\",\n        \"指数英文全称\",\n        \"指数英文简称\",\n        \"市盈率1\",\n        \"市盈率2\",\n        \"股息率1\",\n        \"股息率2\",\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(\n        temp_df[\"日期\"], format=\"%Y%m%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"市盈率1\"] = pd.to_numeric(temp_df[\"市盈率1\"], errors=\"coerce\")\n    temp_df[\"市盈率2\"] = pd.to_numeric(temp_df[\"市盈率2\"], errors=\"coerce\")\n    temp_df[\"股息率1\"] = pd.to_numeric(temp_df[\"股息率1\"], errors=\"coerce\")\n    temp_df[\"股息率2\"] = pd.to_numeric(temp_df[\"股息率2\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_index_hist_csindex_df = stock_zh_index_hist_csindex(\n        symbol=\"000928\", start_date=\"20100101\", end_date=\"20240604\"\n    )\n    print(stock_zh_index_hist_csindex_df)\n\n    stock_zh_index_value_csindex_df = stock_zh_index_value_csindex(symbol=\"H30374\")\n    print(stock_zh_index_value_csindex_df)\n"
  },
  {
    "path": "akshare/index/index_sugar.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2023/6/19 17:00\nDesc: 沐甜科技数据中心-中国食糖指数\nhttps://www.msweet.com.cn/mtkj/sjzx13/index.html\n\"\"\"\n\nimport requests\nimport pandas as pd\n\n\ndef index_sugar_msweet() -> pd.DataFrame:\n    \"\"\"\n    沐甜科技数据中心-中国食糖指数\n    https://www.msweet.com.cn/mtkj/sjzx13/index.html\n    :return: 中国食糖指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.msweet.com.cn/eportal/ui\"\n    params = {\n        \"struts.portlet.action\": \"/portlet/price!getSTZSJson.action\",\n        \"moduleId\": \"cb752447cfe24b44b18c7a7e9abab048\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.concat(\n        [pd.DataFrame(data_json[\"category\"]), pd.DataFrame(data_json[\"data\"])], axis=1\n    )\n    temp_df.columns = [\"日期\", \"综合价格\", \"原糖价格\", \"现货价格\"]\n    temp_df.loc[3226, [\"原糖价格\"]] = 12.88  # 数据源错误\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"综合价格\"] = pd.to_numeric(temp_df[\"综合价格\"], errors=\"coerce\")\n    temp_df[\"原糖价格\"] = pd.to_numeric(temp_df[\"原糖价格\"], errors=\"coerce\")\n    temp_df[\"现货价格\"] = pd.to_numeric(temp_df[\"现货价格\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_inner_quote_sugar_msweet() -> pd.DataFrame:\n    \"\"\"\n    沐甜科技数据中心-配额内进口糖估算指数\n    https://www.msweet.com.cn/mtkj/sjzx13/index.html\n    :return: 配额内进口糖估算指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.msweet.com.cn/datacenterapply/datacenter/json/JinKongTang.json\"\n    r = requests.get(url)\n    data_json = r.json()\n    temp_df = pd.concat(\n        [pd.DataFrame(data_json[\"category\"]), pd.DataFrame(data_json[\"data\"])], axis=1\n    )\n    temp_df.columns = [\n        \"日期\",\n        \"利润空间\",\n        \"泰国糖\",\n        \"泰国MA5\",\n        \"巴西MA5\",\n        \"利润MA5\",\n        \"巴西MA10\",\n        \"巴西糖\",\n        \"柳州现货价\",\n        \"广州现货价\",\n        \"泰国MA10\",\n        \"利润MA30\",\n        \"利润MA10\",\n    ]\n    temp_df.loc[988, [\"泰国糖\"]] = 4045.2  # 数据源错误\n    temp_df[\"日期\"] = temp_df[\"日期\"].str.replace(\"/\", \"-\")\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"利润空间\"] = pd.to_numeric(temp_df[\"利润空间\"], errors=\"coerce\")\n    temp_df[\"泰国糖\"] = pd.to_numeric(temp_df[\"泰国糖\"], errors=\"coerce\")\n    temp_df[\"泰国MA5\"] = pd.to_numeric(temp_df[\"泰国MA5\"], errors=\"coerce\")\n    temp_df[\"巴西MA5\"] = pd.to_numeric(temp_df[\"巴西MA5\"], errors=\"coerce\")\n    temp_df[\"巴西MA10\"] = pd.to_numeric(temp_df[\"巴西MA10\"], errors=\"coerce\")\n    temp_df[\"巴西糖\"] = pd.to_numeric(temp_df[\"巴西糖\"], errors=\"coerce\")\n    temp_df[\"柳州现货价\"] = pd.to_numeric(temp_df[\"柳州现货价\"], errors=\"coerce\")\n    temp_df[\"广州现货价\"] = pd.to_numeric(temp_df[\"广州现货价\"], errors=\"coerce\")\n    temp_df[\"泰国MA10\"] = pd.to_numeric(temp_df[\"泰国MA10\"], errors=\"coerce\")\n    temp_df[\"利润MA30\"] = pd.to_numeric(temp_df[\"利润MA30\"], errors=\"coerce\")\n    temp_df[\"利润MA10\"] = pd.to_numeric(temp_df[\"利润MA10\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_outer_quote_sugar_msweet() -> pd.DataFrame:\n    \"\"\"\n    沐甜科技数据中心-配额外进口糖估算指数\n    https://www.msweet.com.cn/mtkj/sjzx13/index.html\n    :return: 配额内进口糖估算指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.msweet.com.cn/datacenterapply/datacenter/json/Jkpewlr.json\"\n    r = requests.get(url)\n    data_json = r.json()\n    temp_df = pd.concat(\n        [pd.DataFrame(data_json[\"category\"]), pd.DataFrame(data_json[\"data\"])], axis=1\n    )\n    temp_df.columns = [\n        \"日期\",\n        \"巴西糖进口成本\",\n        \"泰国糖进口利润空间\",\n        \"巴西糖进口利润空间\",\n        \"泰国糖进口成本\",\n        \"日照现货价\",\n    ]\n    temp_df[\"日期\"] = temp_df[\"日期\"].str.replace(\"/\", \"-\")\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"巴西糖进口成本\"] = pd.to_numeric(\n        temp_df[\"巴西糖进口成本\"], errors=\"coerce\"\n    )\n    temp_df[\"泰国糖进口利润空间\"] = pd.to_numeric(\n        temp_df[\"泰国糖进口利润空间\"], errors=\"coerce\"\n    )\n    temp_df[\"巴西糖进口利润空间\"] = pd.to_numeric(\n        temp_df[\"巴西糖进口利润空间\"], errors=\"coerce\"\n    )\n    temp_df[\"泰国糖进口成本\"] = pd.to_numeric(temp_df[\"泰国糖进口成本\"])\n    temp_df[\"日照现货价\"] = pd.to_numeric(temp_df[\"日照现货价\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    index_sugar_msweet_df = index_sugar_msweet()\n    print(index_sugar_msweet_df)\n\n    index_inner_quote_sugar_msweet_df = index_inner_quote_sugar_msweet()\n    print(index_inner_quote_sugar_msweet_df)\n\n    index_outer_quote_sugar_msweet_df = index_outer_quote_sugar_msweet()\n    print(index_outer_quote_sugar_msweet_df)\n"
  },
  {
    "path": "akshare/index/index_sw.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/1/24 15:00\nDesc: 申万宏源研究-申万指数-指数发布\n乐咕乐股网\nhttps://legulegu.com/stockdata/index-composition?industryCode=851921.SI\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.utils.cons import headers\n\n\ndef sw_index_first_info() -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-申万一级-分类\n    https://legulegu.com/stockdata/sw-industry-overview#level1\n    :return: 分类\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://legulegu.com/stockdata/sw-industry-overview\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    code_raw = soup.find(name=\"div\", attrs={\"id\": \"level1Items\"}).find_all(\n        name=\"div\", attrs={\"class\": \"lg-industries-item-chinese-title\"}\n    )\n    name_raw = soup.find(name=\"div\", attrs={\"id\": \"level1Items\"}).find_all(\n        name=\"div\", attrs={\"class\": \"lg-industries-item-number\"}\n    )\n    value_raw = soup.find(name=\"div\", attrs={\"id\": \"level1Items\"}).find_all(\n        name=\"div\", attrs={\"class\": \"lg-sw-industries-item-value\"}\n    )\n    code = [item.get_text() for item in code_raw]\n    name = [item.get_text().split(\"(\")[0] for item in name_raw]\n    num = [item.get_text().split(\"(\")[1].split(\")\")[0] for item in name_raw]\n    num_1 = [\n        item.find_all(\"span\", attrs={\"class\": \"value\"})[0].get_text().strip()\n        for item in value_raw\n    ]\n    num_2 = [\n        item.find_all(\"span\", attrs={\"class\": \"value\"})[1].get_text().strip()\n        for item in value_raw\n    ]\n    num_3 = [\n        item.find_all(\"span\", attrs={\"class\": \"value\"})[2].get_text().strip()\n        for item in value_raw\n    ]\n    num_4 = [\n        item.find_all(\"span\", attrs={\"class\": \"value\"})[3].get_text().strip()\n        for item in value_raw\n    ]\n    temp_df = pd.DataFrame([code, name, num, num_1, num_2, num_3, num_4]).T\n    temp_df.columns = [\n        \"行业代码\",\n        \"行业名称\",\n        \"成份个数\",\n        \"静态市盈率\",\n        \"TTM(滚动)市盈率\",\n        \"市净率\",\n        \"静态股息率\",\n    ]\n    temp_df[\"成份个数\"] = pd.to_numeric(temp_df[\"成份个数\"], errors=\"coerce\")\n    temp_df[\"静态市盈率\"] = pd.to_numeric(temp_df[\"静态市盈率\"], errors=\"coerce\")\n    temp_df[\"TTM(滚动)市盈率\"] = pd.to_numeric(\n        temp_df[\"TTM(滚动)市盈率\"], errors=\"coerce\"\n    )\n    temp_df[\"市净率\"] = pd.to_numeric(temp_df[\"市净率\"], errors=\"coerce\")\n    temp_df[\"静态股息率\"] = pd.to_numeric(temp_df[\"静态股息率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef sw_index_second_info() -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-申万二级-分类\n    https://legulegu.com/stockdata/sw-industry-overview#level1\n    :return: 分类\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://legulegu.com/stockdata/sw-industry-overview\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    code_raw = soup.find(name=\"div\", attrs={\"id\": \"level2Items\"}).find_all(\n        name=\"div\", attrs={\"class\": \"lg-industries-item-chinese-title\"}\n    )\n    name_raw = soup.find(name=\"div\", attrs={\"id\": \"level2Items\"}).find_all(\n        name=\"div\", attrs={\"class\": \"lg-industries-item-number\"}\n    )\n    value_raw = soup.find(name=\"div\", attrs={\"id\": \"level2Items\"}).find_all(\n        name=\"div\", attrs={\"class\": \"lg-sw-industries-item-value\"}\n    )\n    code = [item.get_text() for item in code_raw]\n    name = [item.get_text().split(\"(\")[0] for item in name_raw]\n    parent_name = [\n        item.find(\"span\").get_text().split(\"(\")[0][1:-1] for item in name_raw\n    ]\n    num = [item.get_text().split(\"(\")[1].split(\")\")[0] for item in name_raw]\n    num_1 = [\n        item.find_all(\"span\", attrs={\"class\": \"value\"})[0].get_text().strip()\n        for item in value_raw\n    ]\n    num_2 = [\n        item.find_all(\"span\", attrs={\"class\": \"value\"})[1].get_text().strip()\n        for item in value_raw\n    ]\n    num_3 = [\n        item.find_all(\"span\", attrs={\"class\": \"value\"})[2].get_text().strip()\n        for item in value_raw\n    ]\n    num_4 = [\n        item.find_all(\"span\", attrs={\"class\": \"value\"})[3].get_text().strip()\n        for item in value_raw\n    ]\n    temp_df = pd.DataFrame([code, name, parent_name, num, num_1, num_2, num_3, num_4]).T\n    temp_df.columns = [\n        \"行业代码\",\n        \"行业名称\",\n        \"上级行业\",\n        \"成份个数\",\n        \"静态市盈率\",\n        \"TTM(滚动)市盈率\",\n        \"市净率\",\n        \"静态股息率\",\n    ]\n    temp_df[\"成份个数\"] = pd.to_numeric(temp_df[\"成份个数\"], errors=\"coerce\")\n    temp_df[\"静态市盈率\"] = pd.to_numeric(temp_df[\"静态市盈率\"], errors=\"coerce\")\n    temp_df[\"TTM(滚动)市盈率\"] = pd.to_numeric(\n        temp_df[\"TTM(滚动)市盈率\"], errors=\"coerce\"\n    )\n    temp_df[\"市净率\"] = pd.to_numeric(temp_df[\"市净率\"], errors=\"coerce\")\n    temp_df[\"静态股息率\"] = pd.to_numeric(temp_df[\"静态股息率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef sw_index_third_info() -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-申万三级-分类\n    https://legulegu.com/stockdata/sw-industry-overview#level1\n    :return: 分类\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://legulegu.com/stockdata/sw-industry-overview\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    code_raw = soup.find(name=\"div\", attrs={\"id\": \"level3Items\"}).find_all(\n        name=\"div\", attrs={\"class\": \"lg-industries-item-chinese-title\"}\n    )\n    name_raw = soup.find(name=\"div\", attrs={\"id\": \"level3Items\"}).find_all(\n        name=\"div\", attrs={\"class\": \"lg-industries-item-number\"}\n    )\n    value_raw = soup.find(name=\"div\", attrs={\"id\": \"level3Items\"}).find_all(\n        name=\"div\", attrs={\"class\": \"lg-sw-industries-item-value\"}\n    )\n    code = [item.get_text() for item in code_raw]\n    name = [item.get_text().split(\"(\")[0] for item in name_raw]\n    parent_name = [\n        item.find(\"span\").get_text().split(\"(\")[0][1:-1] for item in name_raw\n    ]\n    num = [item.get_text().split(\"(\")[1].split(\")\")[0] for item in name_raw]\n    num_1 = [\n        item.find_all(\"span\", attrs={\"class\": \"value\"})[0].get_text().strip()\n        for item in value_raw\n    ]\n    num_2 = [\n        item.find_all(\"span\", attrs={\"class\": \"value\"})[1].get_text().strip()\n        for item in value_raw\n    ]\n    num_3 = [\n        item.find_all(\"span\", attrs={\"class\": \"value\"})[2].get_text().strip()\n        for item in value_raw\n    ]\n    num_4 = [\n        item.find_all(\"span\", attrs={\"class\": \"value\"})[3].get_text().strip()\n        for item in value_raw\n    ]\n    temp_df = pd.DataFrame([code, name, parent_name, num, num_1, num_2, num_3, num_4]).T\n    temp_df.columns = [\n        \"行业代码\",\n        \"行业名称\",\n        \"上级行业\",\n        \"成份个数\",\n        \"静态市盈率\",\n        \"TTM(滚动)市盈率\",\n        \"市净率\",\n        \"静态股息率\",\n    ]\n    temp_df[\"成份个数\"] = pd.to_numeric(temp_df[\"成份个数\"], errors=\"coerce\")\n    temp_df[\"静态市盈率\"] = pd.to_numeric(temp_df[\"静态市盈率\"], errors=\"coerce\")\n    temp_df[\"TTM(滚动)市盈率\"] = pd.to_numeric(\n        temp_df[\"TTM(滚动)市盈率\"], errors=\"coerce\"\n    )\n    temp_df[\"市净率\"] = pd.to_numeric(temp_df[\"市净率\"], errors=\"coerce\")\n    temp_df[\"静态股息率\"] = pd.to_numeric(temp_df[\"静态股息率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef sw_index_third_cons(symbol: str = \"801120.SI\") -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-申万三级-行业成份\n    https://legulegu.com/stockdata/index-composition?industryCode=801120.SI\n    :param symbol: 三级行业的行业代码\n    :type symbol: str\n    :return: 行业成份\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://legulegu.com/stockdata/index-composition?industryCode={symbol}\"\n    r = requests.get(url, headers=headers)\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"纳入时间\",\n        \"申万1级\",\n        \"申万2级\",\n        \"申万3级\",\n        \"价格\",\n        \"市盈率\",\n        \"市盈率ttm\",\n        \"市净率\",\n        \"股息率\",\n        \"市值\",\n        \"归母净利润同比增长(09-30)\",\n        \"归母净利润同比增长(06-30)\",\n        \"营业收入同比增长(09-30)\",\n        \"营业收入同比增长(06-30)\",\n    ]\n    temp_df[\"价格\"] = pd.to_numeric(temp_df[\"价格\"], errors=\"coerce\")\n    temp_df[\"市盈率\"] = pd.to_numeric(temp_df[\"市盈率\"], errors=\"coerce\")\n    temp_df[\"市盈率ttm\"] = pd.to_numeric(temp_df[\"市盈率ttm\"], errors=\"coerce\")\n    temp_df[\"市净率\"] = pd.to_numeric(temp_df[\"市净率\"], errors=\"coerce\")\n    temp_df[\"股息率\"] = pd.to_numeric(temp_df[\"股息率\"].str.strip(\"%\"), errors=\"coerce\")\n    temp_df[\"市值\"] = pd.to_numeric(temp_df[\"市值\"], errors=\"coerce\")\n\n    temp_df[\"归母净利润同比增长(09-30)\"] = temp_df[\n        \"归母净利润同比增长(09-30)\"\n    ].str.strip(\"%\")\n    temp_df[\"归母净利润同比增长(06-30)\"] = temp_df[\n        \"归母净利润同比增长(06-30)\"\n    ].str.strip(\"%\")\n    temp_df[\"营业收入同比增长(09-30)\"] = temp_df[\"营业收入同比增长(09-30)\"].str.strip(\n        \"%\"\n    )\n    temp_df[\"营业收入同比增长(06-30)\"] = temp_df[\"营业收入同比增长(06-30)\"].str.strip(\n        \"%\"\n    )\n\n    temp_df[\"归母净利润同比增长(09-30)\"] = pd.to_numeric(\n        temp_df[\"归母净利润同比增长(09-30)\"], errors=\"coerce\"\n    )\n    temp_df[\"归母净利润同比增长(06-30)\"] = pd.to_numeric(\n        temp_df[\"归母净利润同比增长(06-30)\"], errors=\"coerce\"\n    )\n    temp_df[\"营业收入同比增长(09-30)\"] = pd.to_numeric(\n        temp_df[\"营业收入同比增长(09-30)\"], errors=\"coerce\"\n    )\n    temp_df[\"营业收入同比增长(06-30)\"] = pd.to_numeric(\n        temp_df[\"营业收入同比增长(06-30)\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    sw_index_first_info_df = sw_index_first_info()\n    print(sw_index_first_info_df)\n\n    sw_index_second_info_df = sw_index_second_info()\n    print(sw_index_second_info_df)\n\n    sw_index_third_info_df = sw_index_third_info()\n    print(sw_index_third_info_df)\n\n    sw_index_third_cons_df = sw_index_third_cons(symbol=\"850111.SI\")\n    print(sw_index_third_cons_df)\n"
  },
  {
    "path": "akshare/index/index_yw.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/5/3\nDesc: 义乌小商品指数\n目前可以通过这些接口直接请求到 JSON 数据\n周价格指数：https://apiserver.chinagoods.com/yiwuindex/v1/active/industry/class/history/piweek?gcCode=\n月价格指数：https://apiserver.chinagoods.com/yiwuindex/v1/active/industry/class/history/month?gcCode=\n月景气指数：https://apiserver.chinagoods.com/yiwuindex/v1/active/industry/class/history/bi?gcCode=\n上涨：https://apiserver.chinagoods.com/yiwuindex/v1/active/industry/class/get/rise\n下跌：https://apiserver.chinagoods.com/yiwuindex/v1/active/industry/class/get/drop\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef index_yw(symbol: str = \"月景气指数\") -> pd.DataFrame:\n    \"\"\"\n    义乌小商品指数\n    https://www.ywindex.com/Home/Product/index/\n    :param symbol: choice of {\"周价格指数\", \"月价格指数\", \"月景气指数\"}\n    :type symbol: str\n    :return: 指数结果\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import urllib3\n\n    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)\n\n    if symbol == \"月景气指数\":\n        url = \"https://apiserver.chinagoods.com/yiwuindex/v1/active/industry/class/history/bi?gcCode=\"\n        r = requests.get(url, verify=False)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df = temp_df[\n            [\n                \"indextimeno\",\n                \"totalindex\",\n                \"scopeindex\",\n                \"benifitindex\",\n                \"confidentindex\",\n            ]\n        ]\n        temp_df.columns = [\"期数\", \"景气指数\", \"规模指数\", \"效益指数\", \"市场信心指数\"]\n        temp_df[\"期数\"] = pd.to_datetime(temp_df[\"期数\"], errors=\"coerce\").dt.date\n        temp_df[\"景气指数\"] = pd.to_numeric(temp_df[\"景气指数\"], errors=\"coerce\")\n        temp_df[\"规模指数\"] = pd.to_numeric(temp_df[\"规模指数\"], errors=\"coerce\")\n        temp_df[\"效益指数\"] = pd.to_numeric(temp_df[\"效益指数\"], errors=\"coerce\")\n        temp_df[\"市场信心指数\"] = pd.to_numeric(\n            temp_df[\"市场信心指数\"], errors=\"coerce\"\n        )\n        temp_df.sort_values([\"期数\"], inplace=True, ignore_index=True)\n        return temp_df\n    else:\n        symbol_map = {\"周价格指数\": \"piweek\", \"月价格指数\": \"month\"}\n        url = f\"https://apiserver.chinagoods.com/yiwuindex/v1/active/industry/class/history/{symbol_map[symbol]}?gcCode=\"\n        r = requests.get(url, verify=False)\n        data_json = r.json()\n        columns_name = {\n            \"indextimeno\": \"期数\",\n            \"totalpriceindex\": \"价格指数\",\n            \"stockdealpriceindex\": \"场内价格指数\",\n            \"netdealpriceindex\": \"网上价格指数\",\n            \"orderdealpriceindex\": \"订单价格指数\",\n            \"outdealpriceindex\": \"出口价格指数\",\n        }\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df.columns = [columns_name[name] for name in temp_df.columns]\n        temp_df[\"期数\"] = pd.to_datetime(temp_df[\"期数\"], errors=\"coerce\").dt.date\n        temp_df[\"价格指数\"] = pd.to_numeric(temp_df[\"价格指数\"], errors=\"coerce\")\n        temp_df[\"场内价格指数\"] = pd.to_numeric(\n            temp_df[\"场内价格指数\"], errors=\"coerce\"\n        )\n        temp_df[\"网上价格指数\"] = pd.to_numeric(\n            temp_df[\"网上价格指数\"], errors=\"coerce\"\n        )\n        temp_df[\"订单价格指数\"] = pd.to_numeric(\n            temp_df[\"订单价格指数\"], errors=\"coerce\"\n        )\n        temp_df[\"出口价格指数\"] = pd.to_numeric(\n            temp_df[\"出口价格指数\"], errors=\"coerce\"\n        )\n        temp_df.sort_values(by=[\"期数\"], inplace=True, ignore_index=True)\n        return temp_df\n\n\nif __name__ == \"__main__\":\n    index_yw_df = index_yw(symbol=\"周价格指数\")\n    print(index_yw_df)\n\n    index_yw_df = index_yw(symbol=\"月价格指数\")\n    print(index_yw_df)\n\n    index_yw_df = index_yw(symbol=\"月景气指数\")\n    print(index_yw_df)\n"
  },
  {
    "path": "akshare/index/index_zh_a_scope.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/17 19:00\nDesc: 数库-A股新闻情绪指数\nhttps://www.chinascope.com/reasearch.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef index_news_sentiment_scope() -> pd.DataFrame:\n    \"\"\"\n    数库-A股新闻情绪指数\n    https://www.chinascope.com/reasearch.html\n    :return: A股新闻情绪指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.chinascope.com/inews/senti/index\"\n    params = {\"period\": \"YEAR\"}\n    r = requests.get(url=url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json)\n    temp_df.rename(\n        columns={\n            \"tradeDate\": \"日期\",\n            \"maIndex1\": \"市场情绪指数\",\n            \"marketClose\": \"沪深300指数\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"市场情绪指数\",\n            \"沪深300指数\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"市场情绪指数\"] = pd.to_numeric(temp_df[\"市场情绪指数\"], errors=\"coerce\")\n    temp_df[\"沪深300指数\"] = pd.to_numeric(temp_df[\"沪深300指数\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    index_news_sentiment_scope_df = index_news_sentiment_scope()\n    print(index_news_sentiment_scope_df)\n"
  },
  {
    "path": "akshare/index/index_zh_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/11 17:00\nDesc: 东方财富网-指数行情数据\n\"\"\"\n\nfrom functools import lru_cache\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.func import fetch_paginated_data\n\n\n@lru_cache()\ndef index_code_id_map_em() -> dict:\n    \"\"\"\n    东方财富-股票和市场代码\n    https://quote.eastmoney.com/center/gridlist.html#hs_a_board\n    :return: 股票和市场代码\n    :rtype: dict\n    \"\"\"\n    url = \"https://80.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f3\",\n        \"fs\": \"b:MK0010,m:1+t:1,m:0 t:5,m:1+s:3,m:0+t:5,m:2\",\n        \"fields\": \"f3,f12,f13\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    code_id_dict = dict(zip(temp_df[\"f12\"], temp_df[\"f13\"]))\n    return code_id_dict\n\n\ndef index_zh_a_hist(\n    symbol: str = \"000859\",\n    period: str = \"daily\",\n    start_date: str = \"19700101\",\n    end_date: str = \"22220101\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-中国股票指数-行情数据\n    https://quote.eastmoney.com/zz/2.000859.html\n    :param symbol: 指数代码\n    :type symbol: str\n    :param period: choice of {'daily', 'weekly', 'monthly'}\n    :type period: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :return: 行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    code_id_dict = index_code_id_map_em()\n    period_dict = {\"daily\": \"101\", \"weekly\": \"102\", \"monthly\": \"103\"}\n    url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n    try:\n        params = {\n            \"secid\": f\"{code_id_dict[symbol]}.{symbol}\",\n            \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n            \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n            \"klt\": period_dict[period],\n            \"fqt\": \"0\",\n            \"beg\": \"0\",\n            \"end\": \"20500000\",\n        }\n    except KeyError:\n        params = {\n            \"secid\": f\"1.{symbol}\",\n            \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n            \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n            \"klt\": period_dict[period],\n            \"fqt\": \"0\",\n            \"beg\": \"0\",\n            \"end\": \"20500000\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        if data_json[\"data\"] is None:\n            params = {\n                \"secid\": f\"0.{symbol}\",\n                \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n                \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n                \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n                \"klt\": period_dict[period],\n                \"fqt\": \"0\",\n                \"beg\": \"0\",\n                \"end\": \"20500000\",\n            }\n            r = requests.get(url, params=params)\n            data_json = r.json()\n            if data_json[\"data\"] is None:\n                params = {\n                    \"secid\": f\"2.{symbol}\",\n                    \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n                    \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n                    \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n                    \"klt\": period_dict[period],\n                    \"fqt\": \"0\",\n                    \"beg\": \"0\",\n                    \"end\": \"20500000\",\n                }\n                r = requests.get(url, params=params)\n                data_json = r.json()\n                if data_json[\"data\"] is None:\n                    params = {\n                        \"secid\": f\"47.{symbol}\",\n                        \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n                        \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n                        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n                        \"klt\": period_dict[period],\n                        \"fqt\": \"0\",\n                        \"beg\": \"0\",\n                        \"end\": \"20500000\",\n                    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    try:\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"klines\"]]\n        )\n    except:  # noqa: E722\n        # 兼容 000859(中证国企一路一带) 和 000861(中证央企创新)\n        params = {\n            \"secid\": f\"2.{symbol}\",\n            \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n            \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n            \"klt\": period_dict[period],\n            \"fqt\": \"0\",\n            \"beg\": \"0\",\n            \"end\": \"20500000\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"klines\"]]\n        )\n    temp_df.columns = [\n        \"日期\",\n        \"开盘\",\n        \"收盘\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"换手率\",\n    ]\n    temp_df.index = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\")\n    temp_df = temp_df[start_date:end_date]\n    temp_df.reset_index(inplace=True, drop=True)\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef index_zh_a_hist_min_em(\n    symbol: str = \"399006\",\n    period: str = \"1\",\n    start_date: str = \"1979-09-01 09:32:00\",\n    end_date: str = \"2222-01-01 09:32:00\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-指数数据-每日分时行情\n    https://quote.eastmoney.com/center/hszs.html\n    :param symbol: 指数代码\n    :type symbol: str\n    :param period: choice of {'1', '5', '15', '30', '60'}\n    :type period: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :return: 每日分时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    code_id_dict = index_code_id_map_em()\n    if period == \"1\":\n        url = \"https://push2his.eastmoney.com/api/qt/stock/trends2/get\"\n        try:\n            params = {\n                \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\",\n                \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58\",\n                \"iscr\": \"0\",\n                \"ndays\": \"5\",\n                \"secid\": f\"{code_id_dict[symbol]}.{symbol}\",\n            }\n        except KeyError:\n            params = {\n                \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\",\n                \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58\",\n                \"iscr\": \"0\",\n                \"ndays\": \"5\",\n                \"secid\": f\"1.{symbol}\",\n            }\n            r = requests.get(url, params=params)\n            data_json = r.json()\n            if data_json[\"data\"] is None:\n                params = {\n                    \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\",\n                    \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58\",\n                    \"iscr\": \"0\",\n                    \"ndays\": \"5\",\n                    \"secid\": f\"0.{symbol}\",\n                }\n                r = requests.get(url, params=params)\n                data_json = r.json()\n                if data_json[\"data\"] is None:\n                    params = {\n                        \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\",\n                        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58\",\n                        \"iscr\": \"0\",\n                        \"ndays\": \"5\",\n                        \"secid\": f\"47.{symbol}\",\n                    }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"trends\"]]\n        )\n        temp_df.columns = [\n            \"时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"均价\",\n        ]\n        temp_df.index = pd.to_datetime(temp_df[\"时间\"], errors=\"coerce\")\n        temp_df = temp_df[start_date:end_date]\n        temp_df.reset_index(drop=True, inplace=True)\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"均价\"] = pd.to_numeric(temp_df[\"均价\"], errors=\"coerce\")\n        temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"]).astype(str)\n        return temp_df\n    else:\n        url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n        try:\n            params = {\n                \"secid\": f\"{code_id_dict[symbol]}.{symbol}\",\n                \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n                \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n                \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n                \"klt\": period,\n                \"fqt\": \"1\",\n                \"beg\": \"0\",\n                \"end\": \"20500000\",\n            }\n        except:  # noqa: E722\n            params = {\n                \"secid\": f\"0.{symbol}\",\n                \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n                \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n                \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n                \"klt\": period,\n                \"fqt\": \"1\",\n                \"beg\": \"0\",\n                \"end\": \"20500000\",\n            }\n            r = requests.get(url, params=params)\n            data_json = r.json()\n            if data_json[\"data\"] is None:\n                params = {\n                    \"secid\": f\"1.{symbol}\",\n                    \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n                    \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n                    \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n                    \"klt\": period,\n                    \"fqt\": \"1\",\n                    \"beg\": \"0\",\n                    \"end\": \"20500000\",\n                }\n                r = requests.get(url, params=params)\n                data_json = r.json()\n                if data_json[\"data\"] is None:\n                    params = {\n                        \"secid\": f\"47.{symbol}\",\n                        \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n                        \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n                        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n                        \"klt\": period,\n                        \"fqt\": \"1\",\n                        \"beg\": \"0\",\n                        \"end\": \"20500000\",\n                    }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"klines\"]]\n        )\n        temp_df.columns = [\n            \"时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"换手率\",\n        ]\n        temp_df.index = pd.to_datetime(temp_df[\"时间\"], errors=\"coerce\")\n        temp_df = temp_df[start_date:end_date]\n        temp_df.reset_index(drop=True, inplace=True)\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n        temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n        temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n        temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n        temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"], errors=\"coerce\").astype(str)\n        temp_df = temp_df[\n            [\n                \"时间\",\n                \"开盘\",\n                \"收盘\",\n                \"最高\",\n                \"最低\",\n                \"涨跌幅\",\n                \"涨跌额\",\n                \"成交量\",\n                \"成交额\",\n                \"振幅\",\n                \"换手率\",\n            ]\n        ]\n        return temp_df\n\n\nif __name__ == \"__main__\":\n    index_zh_a_hist_df = index_zh_a_hist(\n        symbol=\"932000\",\n        period=\"daily\",\n        start_date=\"19700101\",\n        end_date=\"22220101\",\n    )\n    print(index_zh_a_hist_df)\n\n    index_zh_a_hist_min_em_df = index_zh_a_hist_min_em(\n        symbol=\"000003\",\n        period=\"1\",\n        start_date=\"2025-03-17 09:30:00\",\n        end_date=\"2025-03-17 19:00:00\",\n    )\n    print(index_zh_a_hist_min_em_df)\n"
  },
  {
    "path": "akshare/interest_rate/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2020/1/10 17:09\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/interest_rate/interbank_rate_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/5/11 22:00\nDesc: 东方财富网-经济数据-银行间拆借利率\nhttps://data.eastmoney.com/shibor/shibor.aspx\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef rate_interbank(\n    market: str = \"上海银行同业拆借市场\",\n    symbol: str = \"Shibor人民币\",\n    indicator: str = \"隔夜\",\n):\n    \"\"\"\n    东方财富-拆借利率一览-具体市场的具体品种的具体指标的拆借利率数据\n    具体 market 和 symbol 参见: https://data.eastmoney.com/shibor/shibor.aspx?m=sg&t=88&d=99333&cu=sgd&type=009065&p=79\n    :param market: choice of {\"上海银行同业拆借市场\", \"中国银行同业拆借市场\", \"伦敦银行同业拆借市场\", \"欧洲银行同业拆借市场\", \"香港银行同业拆借市场\", \"新加坡银行同业拆借市场\"}\n    :type market: str\n    :param symbol: choice of {\"Shibor人民币\", \"Chibor人民币\", \"Libor英镑\", \"***\", \"Sibor美元\"}\n    :type symbol: str\n    :param indicator: choice of {\"隔夜\", \"1周\", \"2周\", \"***\", \"1年\"}\n    :type indicator: str\n    :return: 具体市场的具体品种的具体指标的拆借利率数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    market_map = {\n        \"上海银行同业拆借市场\": \"001\",\n        \"中国银行同业拆借市场\": \"002\",\n        \"伦敦银行同业拆借市场\": \"003\",\n        \"欧洲银行同业拆借市场\": \"004\",\n        \"香港银行同业拆借市场\": \"005\",\n        \"新加坡银行同业拆借市场\": \"006\",\n    }\n    symbol_map = {\n        \"Shibor人民币\": \"CNY\",\n        \"Chibor人民币\": \"CNY\",\n        \"Libor英镑\": \"GBP\",\n        \"Libor欧元\": \"EUR\",\n        \"Libor美元\": \"USD\",\n        \"Libor日元\": \"JPY\",\n        \"Euribor欧元\": \"EUR\",\n        \"Hibor美元\": \"USD\",\n        \"Hibor人民币\": \"CNH\",\n        \"Hibor港币\": \"HKD\",\n        \"Sibor星元\": \"SGD\",\n        \"Sibor美元\": \"USD\",\n    }\n    indicator_map = {\n        \"隔夜\": \"001\",\n        \"1周\": \"101\",\n        \"2周\": \"102\",\n        \"3周\": \"103\",\n        \"1月\": \"201\",\n        \"2月\": \"202\",\n        \"3月\": \"203\",\n        \"4月\": \"204\",\n        \"5月\": \"205\",\n        \"6月\": \"206\",\n        \"7月\": \"207\",\n        \"8月\": \"208\",\n        \"9月\": \"209\",\n        \"10月\": \"210\",\n        \"11月\": \"211\",\n        \"1年\": \"301\",\n    }\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_IMP_INTRESTRATEN\",\n        \"columns\": \"REPORT_DATE,REPORT_PERIOD,IR_RATE,CHANGE_RATE,INDICATOR_ID,\"\n        \"LATEST_RECORD,MARKET,MARKET_CODE,CURRENCY,CURRENCY_CODE\",\n        \"quoteColumns\": \"\",\n        \"filter\": f\"\"\"(MARKET_CODE=\"{market_map[market]}\")(CURRENCY_CODE=\"{symbol_map[symbol]}\")\n        (INDICATOR_ID=\"{indicator_map[indicator]}\")\"\"\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"500\",\n        \"sortTypes\": \"-1\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n                \"p\": page,\n                \"pageNo\": page,\n                \"pageNum\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"报告日\",\n        \"-\",\n        \"利率\",\n        \"涨跌\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"报告日\",\n            \"利率\",\n            \"涨跌\",\n        ]\n    ]\n    big_df[\"报告日\"] = pd.to_datetime(big_df[\"报告日\"], errors=\"coerce\").dt.date\n    big_df[\"利率\"] = pd.to_numeric(big_df[\"利率\"], errors=\"coerce\")\n    big_df[\"涨跌\"] = pd.to_numeric(big_df[\"涨跌\"], errors=\"coerce\")\n    big_df.sort_values([\"报告日\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    rate_interbank_shanghai_df = rate_interbank(\n        market=\"上海银行同业拆借市场\", symbol=\"Shibor人民币\", indicator=\"3月\"\n    )\n    print(rate_interbank_shanghai_df)\n"
  },
  {
    "path": "akshare/movie/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/12/16 20:44\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/movie/artist_yien.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2021/11/16 20:40\nDesc: 艺恩-艺人\n艺人商业价值\n艺人流量价值\nhttps://www.endata.com.cn/Marketing/Artist/business.html\n\"\"\"\n\nimport datetime\nimport json\nimport os\n\nimport pandas as pd  # type: ignore\nimport requests\nimport py_mini_racer  # type: ignore\n\n\ndef _get_js_path(name: str = \"\", module_file: str = \"\") -> str:\n    \"\"\"\n    get JS file path\n    :param name: file name\n    :type name: str\n    :param module_file: filename\n    :type module_file: str\n    :return: 路径\n    :rtype: str\n    \"\"\"\n    module_folder = os.path.abspath(os.path.dirname(os.path.dirname(module_file)))\n    module_json_path = os.path.join(module_folder, \"movie\", name)\n    return module_json_path\n\n\ndef _get_file_content(file_name: str = \"jm.js\"):\n    \"\"\"\n    read the file content\n    :param file_name: filename\n    :type file_name: str\n    :return: file content\n    :rtype: str\n    \"\"\"\n    setting_file_name = file_name\n    setting_file_path = _get_js_path(setting_file_name, __file__)\n    with open(setting_file_path) as f:\n        file_data = f.read()\n    return file_data\n\n\ndef decrypt(origin_data: str = \"\") -> str:\n    \"\"\"\n    解密艺恩的加密数据\n    :param origin_data: 解密前的字符串\n    :type origin_data: str\n    :return: 解密后的字符串\n    :rtype: str\n    \"\"\"\n    file_data = _get_file_content(file_name=\"jm.js\")\n    ctx = py_mini_racer.MiniRacer()\n    ctx.eval(file_data)\n    data = ctx.call(\"webInstace.shell\", origin_data)\n    return data\n\n\ndef business_value_artist() -> pd.DataFrame:\n    \"\"\"\n    艺恩-艺人-艺人商业价值\n    https://www.endata.com.cn/Marketing/Artist/business.html\n    :return: 艺人商业价值\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.endata.com.cn/API/GetData.ashx\"\n    payload = {\n        \"Order\": \"BusinessValueIndex_L1\",\n        \"OrderType\": \"DESC\",\n        \"PageIndex\": \"1\",\n        \"PageSize\": \"100\",\n        \"MethodName\": \"Data_GetList_Star\",\n    }\n    r = requests.post(url, data=payload)\n    r.encoding = \"utf8\"\n    data_json = json.loads(decrypt(r.text))\n    temp_df = pd.DataFrame(data_json[\"Data\"][\"Table\"])\n    temp_df.columns = [\n        \"排名\",\n        \"-\",\n        \"艺人\",\n        \"商业价值\",\n        \"-\",\n        \"专业热度\",\n        \"关注热度\",\n        \"预测热度\",\n        \"美誉度\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\"排名\", \"艺人\", \"商业价值\", \"专业热度\", \"关注热度\", \"预测热度\", \"美誉度\"]\n    ]\n    temp_df[\"统计日期\"] = datetime.datetime.now().date().isoformat()\n    return temp_df\n\n\ndef online_value_artist() -> pd.DataFrame:\n    \"\"\"\n    艺恩-艺人-艺人流量价值\n    https://www.endata.com.cn/Marketing/Artist/business.html\n    :return: 艺人流量价值\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.endata.com.cn/API/GetData.ashx\"\n    payload = {\n        \"Order\": \"FlowValueIndex_L1\",\n        \"OrderType\": \"DESC\",\n        \"PageIndex\": 1,\n        \"PageSize\": 100,\n        \"MethodName\": \"Data_GetList_Star\",\n    }\n    r = requests.post(url, data=payload)\n    r.encoding = \"utf8\"\n    data_json = json.loads(decrypt(r.text))\n    temp_df = pd.DataFrame(data_json[\"Data\"][\"Table\"])\n    temp_df.columns = [\n        \"排名\",\n        \"-\",\n        \"艺人\",\n        \"-\",\n        \"流量价值\",\n        \"专业热度\",\n        \"关注热度\",\n        \"预测热度\",\n        \"-\",\n        \"带货力\",\n    ]\n    temp_df = temp_df[\n        [\"排名\", \"艺人\", \"流量价值\", \"专业热度\", \"关注热度\", \"预测热度\", \"带货力\"]\n    ]\n    temp_df[\"统计日期\"] = datetime.datetime.now().date().isoformat()\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    business_value_artist_df = business_value_artist()\n    print(business_value_artist_df)\n\n    online_value_artist_df = online_value_artist()\n    print(online_value_artist_df)\n"
  },
  {
    "path": "akshare/movie/jm.js",
    "content": "navigator={ userAgent: 'node.js', };\nvar ynfqt = '__0x2fb9f'\n  , __0x2fb9f = ['w61yEQYNMcKN', 'UcK/IcOnwpLDkMO5', 'wpbCnjvCvwIaPcOxw7E=', 'w5vDizcu', 'w5LCtBs=', 'JcOreTk=', 'w6HCnjp/Tg==', 'KsOkw50FMQ==', 'w7zDqMOCUXI=', 'w7PCp3lkwokmw6oCXg==', 'CsOyczTDtcKlwpbDqUk=', 'GsKYbsK/w7g=', 'wr/DjhgJcA==', 'UlXChFNH', 'PsO7w4gKwrI=', 'Bn/DrcOrwqrDk8OQAA==', 'w47CtsK5wp7Djw==', 'wr3DsWHCtlk=', 'aGjCjlZF', 'T8KPCsOJBA==', 'w7LDqH7CrsKIMg==', 'MMOvw4UzBA==', 'YsKdIFsz', 'wo3DmcOGwpJn', 'NMOfeXdM', 'wofDicOuwrlS', 'wrlFcFrCvg==', 'wphSd8OrLg==', 'w6XDqFDCk8Ke', 'FMO8AsOFBQ==', 'wqrCtCPCnAw=', 'wpTDj3BHEw==', 'DcOHMcOEDQ==', 'fjsAwp/Chg==', 'HMKaQsKnw4Y=', 'w5otSMKBYQ==', 'w6PCkcK8woTDu0jCiWJRNkI=', 'ScK3wrXCmMOr', 'wonDgBIrc8O/XsOiA8KsXlHDmg==', 'woHCpcKCwpTDncKZFH/CocOVw68=', 'w5/Dh8Olflw=', 'w50owowb', 'bcKsD8On', 'w5/CmcK+wp4=', 'EMKOwqc5', 'NsK5d8Kmw6Y=', 'wr7DqMOnwpdg', 'WcKQWz/Dtywi', 'aE8ww6had8O2', 'w5ZPw7bCskY=', 'w6PClMKQwp7Dh17CgA==', 'U8KRw7fCvyoFw4bDgQ==', 'eHcfw6tP', 'NcOOw5w7EA==', 'wpfDkDs7bw==', 'V8KsK8OfwrE=', 'f8KUw5LCkTwSw4g=', 'wqRrdUXClXZo', 'w5zCp1R8wokxw7g=', 'w6zCn0ta', 'w7olTcK8', 'w6U8w5Bs', 'KcOtw7QPwrc=', 'w4nCgwp3UsOnOA==', 'w4nCkjp+XMOwNnAYbUbCrxU=', 'w53CtsKn', 'PsOgflZX', 'c8KbO8OHBQ==', 'w4bClFdkwp4=', 'LmPDqsOtwpI=', 'w5nDlTUgSMKaGsOlw5w/QnxnwpXCpQ==', 'wph1UkjCjnA=', 'w6TDvGPCqMKD', 'w6XDgzUyDg==', 'w7liwrDDqi/DgDTChMKiw54yeMOzwrnCtg==', 'wr3CvsKJwoPDusKJ', 'C0LDrkzDgw==', 'wonDgBgbMg==', 'wrXDlhgJdcOja8O4IsKySELDhcKWw7k=', 'DMOaCMO2KQ==', 'w6jClsK1wqDDow==', '5Lqa6IGt5Yiq6ZqvwpU5U3/CpMOHfsO2w5A=', 'SFXDjsKaw7E=', 'DcKzwrLDv8KL', 'fFjCjFBVw6/DjsOZw5HCoVVe', 'Y8KSeiHDoT89w4VEw7DDicOX', 'wqXClCrCqToYO8OSw6TDisOtSg==', 'w6JSw5fChjU=', 'JcOkeTPCqw==', 'N8O8w6QJwp/CjBvCllrDs8OKTQ==', 'J0rDolzClQ==', 'FcOyw592w4zCncKow5jCuizCqsKU', 'LsOzw5l3woc=', 'w7fDj8OBwpFKKsKxw7NpKjl2', 'woV0VcOrWw==', 'JsOEw40tGk7DnQdoEUvCjQ==', 'w6JVw4DCkGZhZWfCrg7Dp8O5Bg==', 'dcKJeyDDrD0=', 'McOUw4wsF0w=', 'wrhFecORCw==', 'w6osRMK8bA==', 'e8K+wrfCpcOG', 'A8K3Rg==', 'HcORw5wwAFvDmjY=', 'woDDqRAEZA==', 'CcOwcCnDrg==', 'M8KVcg==', 'wq7DucOU', 'w63DoMOv', 'KW3DvA==', 'J8K7QsKEwrg=', 'Y8KuHMKL', 'cHYlw4JT', 'w79LAw0z', 'w5hYw5E=', 'W8K5BcKz', 'w41Xw4DChmI=', 'w408woIEdsKCw7ldMw==', 'G8KjwpM4RA==', 'E8OXEsOhBcO1KsObd38U', 'w7zCi0VFG8KS', 'Y8KSeg==', 'w4nCi8K3woDDqVrCjkdA', 'KcONw7TDsyY=', 'w7s/wqfDlnU=', 'aFnCgm9H', 'w6rDt8OpwrRk', '5Lqb6ICM5Ymo6Zm/TsOrOUsSbxjCvFI=', 'JsO3w6MewoDClQHCsVI=', 'w6HDjsOIwpBcNMOrw4cw', 'TAsowpjCrXlTwoXCgg==', 'wot1WF3ClWF6IcOH', 'Z8KcwpA=', 'w7jDhiMk', 'KkPDqg==', 'DMOCE8O8IsO8', 'HsOtw45Vw4M=', 'w7APwrQNZQ==', 'w7TCgMKiwoPDnA==', 'w50Cd8KVbg==', 'KW3DqsO6woQ=', 'w6TCvGJiIg==', 'w6HDkcOOwopH', 'DsOAw4PDlgc=', 'wqnCkDrClDQGH8Oiw6fDlcOrU2kn', 'dcKFdxfDmw==', 'w4oKwrcmZA==', 'w6MjwprDkg==', 'FsOYCMOh', 'w5XClsK7woY=', 'GAoywpzCp38=', 'ScKpGMO/', 'wqjDgU/CtkPCmQ==', 'w6LCpWZ8wp8=', 'wqXDmEjCnFrCk8OmwpZcwpzDvgPDvlc=', 'L8OIbSPDjA==', 'w6bDjsOxwpdBM8Krw5Y=', 'w7ofwqI=', 'asOlwrYHw5bCgFjCqATDoMKcWhhvT0jCkMOyIA==', 'w7hYKzAr', 'IMOpw6sSwpI=', 'N0nDj8Ogwq8=', 'w7DCnMKowqTDrA==', 'AmUoBMOkw7U=', 'w5PCjsK0wrDDjg==', 'EMO2w6M8wqI=', 'w7rClCZ8ScOs', 'eDwU', 'w70hQsKiecOhwok=', 'w6l6RG1X', 'a8KTfTY=', 'w7ddEQ==', 'w7oswpc=', 'IcO8w593woI=', 'w4ZxAB4QO8KIw5Y=', 'PMKSwoDDpcO3', 'VUXDrsKDw7wnw7DDrELDq3Y=', 'UlMR', 'I8O4w7UIwoM=', 'GsOYAg==', 'wpjDjV3Dqw==', 'w6LDgMOQwpBW', 'w4/DlDUzfcKYOsOlw4s=', 'wpJpXl0=', 'GsOOFcOwIsO/', 'T1LCnUZtw63DiMO6w4Q=', 'wp5/Q0zClHE=', 'w4bCkgs=', 'w4nCu1xFwoI=', 'R3jCoWFzw4fDvMOUw6/Cg2l4LsK+w4E=', 'wr7DkFzCkVTCicOTwpc=', 'wpsBB8KXHg==', 'TMKdw77CmicZ', 'w7ZtGQ==', 'w5tZdUlZ', 'w4bCm0VcGw==', 'woTDtBUSTA==', 'RcKuCMOaE8OVL0PChQ==', 'bTAtwpfDvQ8Y', 'wphmW0U=', 'w5U9woHDg2RGWHAsbA==', 'dcKBw5nCiSE=', 'wo9KwofCiTRpMVPDux7Cow==', 'bkTCgUBh', 'VcKwFsOKLA==', 'GsOow4shwpU=', 'K3TDt8OFwrs=', 'OMOnKMO4JQ==', 'w5Bgw6PCs3I=', 'wp/DlTEycg==', 'MV/Di3XDlQ==', 'w7jCkVVSHA==', 'w6DCuXd9wpY=', 'CcOpewLDo8KlworDqg==', 'BMK5RsK1w7YOWMKd', 'UVwBw6tF', 'CsOpSDnDuA==', 'w6DCsH98', 'BsOdw7nDjC8=', 'w7hfIQ==', 'w7tXcnhq', 'McK2wrvDoA==', 'woxoRU3CiQ==', 'D0HDtUvDlQ==', 'wqXDiBQLZA==', 'dsKWw6jChx0=', 'Wj0g', 'w7HCnxB9bA==', 'CljDisOYwqI=', 'HsOuflZw', 'LVjDssOfwpk=', 'w4rDi8OqwrNy', 'w4pPZE9x', 'w49+wrHDsRk=', 'w49Xw5zCkWh4', 'wpXDtDkJVw==', 'fMKsDcOvwpLDng==', 'w7Yow49o', 'WcKvN8O6woQ=', 'wo/DgExRJw==', 'wrvCosKP', 'N8OTGQ==', 'AMKGwqwXXE/CtcOa', 'wr7DgV15Pg==', 'w6LDgxgbew==', 'w7vDr8Ox', 'dAM2woDCiw==', 'C8Oww5TDiS8=', 'LW4tD8Ob', 'w70nwosbSQ==', 'w4HCkxxqRA==', 'XHHDssKDw5E=', 'dcK0EcOfNg==', 'w4lZw6HCgXV8bkg=', 'wqbDkQ4A', 'wq5/Y8OsGB9Kw64=', 'DWEqDw==', 'w7HDjcONwo1W', 'w4TDhsODekEE', 'QEvCmER5', 'dn7CnlJN', 'w4XDssORwplC', 'w7k4wpHDlWZ2', 'w5scwo8DZg==', 'w43Dl8OvTnM=', 'wqfCgybCtgAALsOiw4vDisOqRA==', 'ScKjwqXCp8Oc', 'w4XCnMKxwpTDog==', 'w6AiwprDiA==', 'HcOyw5Jjw4HChQ==', 'woJmR8O+Pw==', 'w513woXDhjI=', 'KMOlEsOvPQ==', 'w7BYV1xE', 'w7osQMKiQ8O+wpnCvMKDMQ==', 'w6zDhMOHeUE=', 'cVPChlY=', 'w6F1Fg==', 'NMOEWQ==', 'XWfCuU1d', 'AcOHw4hJw4M=', 'YsKQPsOJNA==', 'w5zDjMOId3g=', 'w5k5w5lzwrk=', 'OMOsdnEq', 'woLDucOPwqdRVMOte2zChcOASw==', 'w6Mzw59yw7HCjMOxa8OHwr/DuMO8', 'wpPCoRvCqjo=', 'SUXDr8KEw5A=', 'w6s5w7tww6Q=', 'UVIAw6lUYA==', 'w6jCsXA=', 'bsKNwpfCiMOaw58x', 'YsKDwqHCgsOVw44=', 'wrLDgR4aeMO2Wg==', 'e1zCg04=', 'GsOyw4U=', 'wqTDgkx5DsKDYMO2RsKgw7shw5sMJlYcICl1YMK6', 'FMOvw4hhw5vCiQ==', 'Yx0mwpjCow==', 'YsKbwpvCnw==', 'MW4CAsOkw7zCmcKMZMKCLw==', 'S8KBKg==', 'w50pdMK+Yg==', 'wrN+Wg==', 'OsOrw5c4MQ==', 'w7TDom/CqsKSMw==', 'w5zCshlvSw==', 'wpXDqMOewrxGQw==', 'ecK2MXgf', 'wqRjVl3Cmw==', 'bcKiDcOowpzDhw==', 'w6otRsKSecOlwpjCqg==', 'wrhzXw==', 'Y8OlwrUHw5LCgF7CqAU=', 'wrLCgSXCsjc=', 'UcKpAsO/wpw=', 'w7kkwpTDpGtwUWw=', 'E8O7w5Nnw57CvsK1w6DCsw==', 'AG/DtUHDhw==', 'UTYtwos=', 'w59/Kw==', 'HsKdwoMNcQ==', 'w5DCk05YLcKVT8Okwr4NAXDDusO2', 'w7pXw6HCsWk=', 'JcOKcUp5', 'w7U0w5tCw7HCiMOgWg==', 'w6EqwokHasKVw6I=', 'w5lTw5HCh35ldG3Cpw3DtMO3', 'w7/CnyFv', 'wrXDhREE', 'LsOzw51ww5Q=', 'GcOscy7Dvw==', 'UkUGw6FbcA==', 'wrd8eA==', 'T8K/N8OIwrQ=', 'XRYTwpLDhg==', 'KcOxw68Cwq8=', 'bcKrBA==', 'dkjCm0pF', 'w5UhwrHDin1nXw==', 'f8KKw5LCkTwSw4g=', 'KMKiY8Kbw6AZVg==', 'wqPCvSg=', 'w5MHwroxdg==', 'w7MuwrvDp3k=', 'w7TCvSk=', 'w6Etwo8ncMKfw7NWJ8Kgw4Ybw4jDrjc=', 'RFQVw4ZMYMO4w6s=', 'A8Oyw49hw4E=', 'PMOIw4vDrwwNwp4=', 'UcKsE8O7wpjDncO2', 'wozDvBE=', 'LXrDgcONwpU=', 'w44nwrQ=', 'R8KNJw==', 'U8K5w4LCjRY=', 'I8OCw4lAw7c=', 'Vk4iw41l', 'bTcrwqHDvAQLe8Kdw4N8', 'GsKBwqIh', 'w6XCvHhxwoo7w6kX', 'HcKJdw==', 'wpjDggQrTw==', 'F2rDocOKwq8=', 'HkfDqU7DisOVw4DDjg==', 'NcOJw6I=', 'FMK7RcKNw74=', 'X8K0E8OH', 'LcK/aMK8w40=', 'XMK8woHCg8OA', 'WTscwrHDgg==', 'wpLCpsKawqzDpw==', 'wp0BG8KHEA==', 'w6NSwq/DpzI=', 'w53Coh5MVA==', 'FsKAwpjDjcOe', 'd8KPGcOnwpQ=', 'BMKswoAfSg==', 'wrjCszPCtyo=', 'FMOgw6jDrQg=', 'BcKxT8KTw6AX', 'wpU7PcK4HE4=', 'wqfDk18=', 'w6HDlcOQwopdPQ==', 'P8Oww6U=', 'ScKUwoHCjg==', 'w6rDlsOLe1Aew4FTXQYBw6zCgijDjsKbIMKJNwDDpSc=', 'wr9+Uw==', 'EsKDwqw6', 'K3Y2KMOUw5s=', 'wr9oRMO9BBI=', 'w6Mlw4hlw6bCmA==', 'w7LDh3LCqsKA', 'wozDrcOC', 'w6XCj0k=', 'wrvCtMKYwofDoMKI', 'w5RYw5vCgQ==', 'eU3Cn05V', 'USEhwobDoQ8=', 'w4YJwr4=', 'wrZdVsOgGg==', 'asKlJmoOwp8=', 'woh3W0DCmXA=', 'w5/CnsK1', 'w681wofDg3xg', 'YwEhwoPCsGBnwprCg8KY', 'FcOtYGds', 'AMOIw5fDsw==', 'Yx0owr7Cp35PwoE=', 'R03CnU1Pw7rDicOo', 'w6XDhiAxWcKROw==', 'w6PCnMK9wrTDgVPCikVdNVQ=', 'U8K+UB/DrA==', 'M8KUwrLDncO2', 'w7DCoWR5wog1', 'WRckwp7Cu31e', 'w49+YA==', 'I8KWwr3DlcO4', 'w7ZXw6LCkmU=', 'L8OwJ8OzFA==', 'DMO9w6YPwoc=', 'BmLDnMOowpXDl8OrCsOHQ1Q=', 'w5Zyw6DCoUs=', 'NsOow6AnJw==', 'WBwkwp7Cu31e', 'wpLChTvCviIFDMO5w7jDjcOrUw==', 'wokiP8K/GlnDs8K/', 'w6syw5hl', 'w7ByPAkJEcKPw4ELwoLCsDF2YcKE', 'w5hOw4bCkGlx', 'w4Mzw59yw7HCjMOxRsOZ', 'Q8KKw7XCnCcU', 'GcOyeSHDrsK0', 'J0fDsQ==', 'MMKtwog=', 'wrHCqDw=', 'e8KdMH8y', 'w4nCmD4=', 'woVgQsO9HDRIw6ZeVA==', 'w693wrDDvxE=', 'WAsRwo/ChA==', 'w5lew5DCkmw=', 'HFzDkUzDoA==', 'w4XCnmB+wpU=', 'woNJQMO6LA==', 'wr/Dk2dIKg==', 'wojDrFbCu0s=', 'OMKewr0jYg==', 'UsKmH8OvwonCpg==', 'w5TCnsKWwpbDrQ==', 'DcOXD8OxI8O2', 'w6bChDtz', 'a8K1F8OuwpPDlw==', 'NMO5w592w4zCncKow7XCpA==', 'wonDhxQYacOjXA==', 'w6Qxw5Njw6PCr8OsU8OO', 'EsK+QsKFw7YKScKsw7zCg8K2Kg==', 'EMOFw5LDvAw=', 'BsOEw40tGk7DnSp2', 'VyswwoLDuw4=', 'w43DgsOLwpNbP8K3', 'w5wlwo8UacKjw7lJMQ==', 'SkjDtMKUw5A=', 'A8OtcHBhc8KLw6g6KwTDpw==', 'JcOwbiXDrMKTwoPDtk/CqA==', 'wpbDvcOI', 'w6zCk8KxwoHCnw==', 'U8K3KcOkJw==', 'w6pyUVxLwrJhw5g=', 'FsK/bcKhw7Y=', 'w5cZw6xzw4w=', 'e8KcLkkb', 'KMOqYVJP', 'QcKvEcObwqo=', 'AMObw57Dvh0G', 'w7p0WH1TwrI=', 'w4nDrio=', 'wojDqFrCtXw=', 'wp7CkDnCqyYGKw==', 'acKqCMOcHsOXNVY=', 'JMO2w7UfwpU=', 'wqnDqsOKwrRF', 'FcO1w5Mzwo0=', 'w5dmJw8MNg==', 'DWYh', 'w5rCk8Kc', 'TcKpD8ObwoQ=', 'wr4zPsKfDlLDkMK+bMKLwqHCosOUw78=', 'w7Iyw690w7rClcOrTg==', 'w65/wobDvynDjB/CjQ==', 'wrU0Kg==', 'ZMK4J24=', 'KcOhcFdN', 'WcKEfzzDqiIEw6hMw7o=', 'acK3E8OdP8OHIEPCmcKrwqHDkcO+Ig==', 'VsK6LG8f', 'wp7CnCbCvyY=', 'w6XDjsOQwodA', 'w4vCl8KgwpbDmw==', 'BmHDt8OtwoQ=', 'wonDux4aZMOnWsO5Mw==', 'w4rDlT8iWcKMLMOJw5MiWGc=', 'w69iwr0=', 'w7bCp34=', 'Q8Kew7c=', 'wotmU03Ck3tk', 'w7fDm8OLckcBw6lYew8=', 'AcOFw5TDvAIwwpPDtn0=', 'bSM2wojDtg8ZZA==', 'w53DjcOdfFE=', 'woJiZxZQLsOTw41SwpvDsQ==', 'w5sxwpQSbMKU', 'NGXDoMOAwo8=', 'S8KjFw==', 'FsKXwq42UE/CtQ==', 'wpBiTnrCk29m', 'w77DplnCosKcMw==', 'w5/DiTMzRcKPKw==', 'WkXDscKb', 'wrF1SQ==', 'W1TCn0pJw63DqsO6w4/Cr1tG', 'C3gyBsO+w7k=', 'ZsKcworCosOB', 'HsKHwoQ=', 'AsK+dsKQw6o=', 'Vwg1woLCow==', 'woDDmFhyCsKFccO3dg==', 'IMOtw7USwojCmwbCsk8=', 'wo7CvMK8wrTDrA==', 'wrLCuj3CrwU=', 'w7kGwofDklQ=', 'wrjCo8Kewo/Dr8KY', 'G0fDt0fDg8OOw47Djh5o', 'dcKddSc=', 'e1LCgUFNw6s=', 'ccKTazfDqw==', 'd8KoPsOlBA==', 'w4DCrnV7Hg==', 'wpPDukxMBw==', 'LMKLwqohRA==', 'wqE9P8K0Cg==', 'wrLCmC7CmTocKsOj', 'woHDuHPCvko=', 'w5XCtsKEwqjDnA==', 'w7HDhMOLwo8=', 'w6s8w4Q=', 'GcKywoLDpMOK', 'w43DjMOLwo1xL8Kjw5dgNwl0w7dT', 'wqzCmCc=', 'YMKTBFM9', 'w4nClSdLT8OrMF0OcnTCpgjCuVA=', 'KnzDtMOgwoLDkw==', 'GMO5w5Vw', 'w4/CkcK1wrDDkUnCjlo=', 'WlbDuMKWw4Es', 'GcOfD8O0IMOyNMOb', 'VFsV', 'Xwsiwo3Ctmg=', 'b8K4MWYbwo4=', 'VxQg', 'w4Rsw6DCmFI=', 'P2PDtXzDoA==', 'wonDlBwacsOj', 'w5rCl8Kgwp/DiUk=', 'w5R3PQsOO8Kcw5Q=', 'IcOIw543BkzDnSB8Cg==', 'w5HCllVfwqM=', 'HmE0EMO1', 'wr3DgBs=', 'wqTDhRMMbsOr', 'woXDrsOJwrRcQQ==', 'wpHDs8OewrFb', 'HWwvAMO1', 'w7zCl0B0FsKUTMOx', 'wqYxIMKTEQ==', 'w4LDgMORwpBENcK3w5VHJCl4w6l1wobDhcOgb8KG', 'EsKoVcKSw6Ee', 'G0jDoA==', 'w6Qewok=', 'Z8KWWxnDnQ==', 'w6DDsDk=', 'w6lsAcOkWgoQw7UPQw8=', 'a8K1BsOowojDh8O3', 'wqrClDDCiCoSKg==', 'DsO+QGtiZg==', 'w5fDjigIUg==', 'N8KvwqPDqcOXw5s=', 'FMO5w592w4zCncKo', 'w6DCtHp8', 'SMKfPsObwqA=', 'woHDu3PCimA=', 'E0nDhVrDrQ==', 'w57Do8Oqwrp+', 'w4jDrsOtwqxJ', 'wqh0WUbCjg==', 'FcKHQMKmw6o=', 'FMO4f2ts', 'w57DgjMzRcKPKw==', 'wqLCkCXCtw==', 'MXAnEcOjw7g=', 'wrx/QsO1CwI=', 'woPDpMOYwrBGQA==', 'FMOSBw==', 'wo3DucOVwoZBXsO8', 'w5toAAMYNw==', 'wqlxXMOs', 'FEfDpQ==', 'wph8X8O7ATVNw7lVWkg9ccKYbg==', 'w7xjQntcwqI=', 'H8O4aCXDtMK1', 'w5zCtn9gwo43w6E=', 'w5hYw5HCh35ldG3Cpw3DtMO3', 'TcKyIHkDwoooZnE=', 'IMOVCMOlJMO+PA==', 'wqXDncOE', 'w6bDt1nCpsKg', 'M0bDnsOFwrY=', 'MWwED8O/w77CsA==', 'w4Y2Y8K8b8OywpY=', 'ZkjDn8Kbw5oqw78=', 'bkfDrcKcw4A=', 'w6t3wobDph0=', 'EcO5WAfDmw==', 'a8K0VhvDrw==', 'w6XDlRItU8KcNA==', 'VsK7AWcVwpk3'];\n(function(_0x13ecc8, _0x3e2859) {\n    var _0xd14b57 = function(_0x91fb5e) {\n        while (--_0x91fb5e) {\n            _0x13ecc8['push'](_0x13ecc8['shift']());\n        }\n    };\n    _0xd14b57(++_0x3e2859);\n}(__0x2fb9f, 0x80));\nvar _0x2246 = function(_0x5c2ba4, _0x76e2e) {\n    _0x5c2ba4 = _0x5c2ba4 - 0x0;\n    var _0x32e905 = __0x2fb9f[_0x5c2ba4];\n    if (_0x2246['initialized'] === undefined) {\n        (function() {\n            var _0x6dc9dd = typeof window !== 'undefined' ? window : typeof process === 'object' && typeof require === 'function' && typeof global === 'object' ? global : this;\n            var _0x4dc154 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n            _0x6dc9dd['atob'] || (_0x6dc9dd['atob'] = function(_0x2e7e78) {\n                var _0x27fca7 = String(_0x2e7e78)['replace'](/=+$/, '');\n                for (var _0x443da7 = 0x0, _0xd245ea, _0x20728f, _0x1a79d3 = 0x0, _0x2add8f = ''; _0x20728f = _0x27fca7['charAt'](_0x1a79d3++); ~_0x20728f && (_0xd245ea = _0x443da7 % 0x4 ? _0xd245ea * 0x40 + _0x20728f : _0x20728f,\n                _0x443da7++ % 0x4) ? _0x2add8f += String['fromCharCode'](0xff & _0xd245ea >> (-0x2 * _0x443da7 & 0x6)) : 0x0) {\n                    _0x20728f = _0x4dc154['indexOf'](_0x20728f);\n                }\n                return _0x2add8f;\n            }\n            );\n        }());\n        var _0x9bf5c5 = function(_0x29e5a4, _0x4e0418) {\n            var _0x317a0c = [], _0x58cb6f = 0x0, _0x1ef9fa, _0x2b84ff = '', _0x406a41 = '';\n            _0x29e5a4 = atob(_0x29e5a4);\n            for (var _0x5e728c = 0x0, _0x36a9ad = _0x29e5a4['length']; _0x5e728c < _0x36a9ad; _0x5e728c++) {\n                _0x406a41 += '%' + ('00' + _0x29e5a4['charCodeAt'](_0x5e728c)['toString'](0x10))['slice'](-0x2);\n            }\n            _0x29e5a4 = decodeURIComponent(_0x406a41);\n            for (var _0x3895f0 = 0x0; _0x3895f0 < 0x100; _0x3895f0++) {\n                _0x317a0c[_0x3895f0] = _0x3895f0;\n            }\n            for (_0x3895f0 = 0x0; _0x3895f0 < 0x100; _0x3895f0++) {\n                _0x58cb6f = (_0x58cb6f + _0x317a0c[_0x3895f0] + _0x4e0418['charCodeAt'](_0x3895f0 % _0x4e0418['length'])) % 0x100;\n                _0x1ef9fa = _0x317a0c[_0x3895f0];\n                _0x317a0c[_0x3895f0] = _0x317a0c[_0x58cb6f];\n                _0x317a0c[_0x58cb6f] = _0x1ef9fa;\n            }\n            _0x3895f0 = 0x0;\n            _0x58cb6f = 0x0;\n            for (var _0x49f219 = 0x0; _0x49f219 < _0x29e5a4['length']; _0x49f219++) {\n                _0x3895f0 = (_0x3895f0 + 0x1) % 0x100;\n                _0x58cb6f = (_0x58cb6f + _0x317a0c[_0x3895f0]) % 0x100;\n                _0x1ef9fa = _0x317a0c[_0x3895f0];\n                _0x317a0c[_0x3895f0] = _0x317a0c[_0x58cb6f];\n                _0x317a0c[_0x58cb6f] = _0x1ef9fa;\n                _0x2b84ff += String['fromCharCode'](_0x29e5a4['charCodeAt'](_0x49f219) ^ _0x317a0c[(_0x317a0c[_0x3895f0] + _0x317a0c[_0x58cb6f]) % 0x100]);\n            }\n            return _0x2b84ff;\n        };\n        _0x2246['rc4'] = _0x9bf5c5;\n        _0x2246['data'] = {};\n        _0x2246['initialized'] = !![];\n    }\n    var _0x4b1179 = _0x2246['data'][_0x5c2ba4];\n    if (_0x4b1179 === undefined) {\n        if (_0x2246['once'] === undefined) {\n            _0x2246['once'] = !![];\n        }\n        _0x32e905 = _0x2246['rc4'](_0x32e905, _0x76e2e);\n        _0x2246['data'][_0x5c2ba4] = _0x32e905;\n    } else {\n        _0x32e905 = _0x4b1179;\n    }\n    return _0x32e905;\n};\nvar _grsa_JS = _grsa_JS || function(_0x1ced32, _0x5ecf19) {\n    var _0x10331a = {\n        'CnklK': function _0x3e62ec(_0x1d5911, _0x194e2e) {\n            return _0x1d5911 >>> _0x194e2e;\n        },\n        'fasop': function _0x309160(_0x42d8e6, _0x1f95a5) {\n            return _0x42d8e6 << _0x1f95a5;\n        },\n        'piTyb': function _0x16701f(_0x52ec0c, _0x1d6252) {\n            return _0x52ec0c % _0x1d6252;\n        },\n        'etBSF': function _0x5b4bf4(_0x4f888b, _0x7a8d8) {\n            return _0x4f888b / _0x7a8d8;\n        },\n        'CPDaV': function _0x4f38e0(_0x167032, _0x557588) {\n            return _0x167032(_0x557588);\n        },\n        'WbTqy': function _0xe7e714(_0x15ea20, _0x26c93d) {\n            return _0x15ea20 * _0x26c93d;\n        },\n        'ibfMy': function _0x2dac36(_0x5b0802, _0x23eb9b) {\n            return _0x5b0802 | _0x23eb9b;\n        },\n        'iwfNL': function _0x1cc18f(_0x1470bc) {\n            return _0x1470bc();\n        },\n        'XvwfU': function _0x1446ba(_0x4435ab, _0x2c405c) {\n            return _0x4435ab < _0x2c405c;\n        },\n        'XdHZG': function _0x3b9f93(_0x82620d, _0x117ba6) {\n            return _0x82620d === _0x117ba6;\n        },\n        'HzqlI': 'iNS',\n        'hYoVF': function _0x399937(_0xed7e40, _0x4311a3) {\n            return _0xed7e40 & _0x4311a3;\n        },\n        'eUotd': function _0x1f9d76(_0x53718e, _0x504f72) {\n            return _0x53718e % _0x504f72;\n        },\n        'sUmiI': function _0x536f6e(_0x5b7a44, _0x2523d9) {\n            return _0x5b7a44 & _0x2523d9;\n        },\n        'nCqpa': function _0x537c09(_0x36091f, _0x69507f) {\n            return _0x36091f >>> _0x69507f;\n        },\n        'WSszq': function _0x267fc2(_0x76deda, _0x5cedd3) {\n            return _0x76deda << _0x5cedd3;\n        },\n        'LWyHk': function _0x678ebd(_0x29c9b6, _0x2d98ca) {\n            return _0x29c9b6 & _0x2d98ca;\n        },\n        'nNKsT': function _0x21c3e9(_0x594cba, _0x5afd7a) {\n            return _0x594cba >>> _0x5afd7a;\n        },\n        'BVWLs': function _0x9d7bf3(_0xc1dadc, _0x1d72f1) {\n            return _0xc1dadc >>> _0x1d72f1;\n        },\n        'ydcfJ': function _0x2962c4(_0x33c44f, _0x19940f) {\n            return _0x33c44f - _0x19940f;\n        },\n        'Dgjdt': function _0x145c4f(_0x5c4219, _0x3cb60c) {\n            return _0x5c4219 * _0x3cb60c;\n        },\n        'GgPMi': function _0x84affb(_0x5a70b9, _0x565471) {\n            return _0x5a70b9 >>> _0x565471;\n        },\n        'iCaBv': function _0x3edc5b(_0x4ef4d9, _0x1cf391) {\n            return _0x4ef4d9 & _0x1cf391;\n        },\n        'XcXUw': function _0x583c5b(_0x24419a, _0x459a1b) {\n            return _0x24419a % _0x459a1b;\n        }\n    };\n    var _0x58dcba = Object['create'] || function() {\n        function _0x4a0f25() {}\n        return function(_0x427b60) {\n            _0x4a0f25[_0x2246('0x2', '4mX2')] = _0x427b60;\n            _0x427b60 = new _0x4a0f25();\n            _0x4a0f25[_0x2246('0x3', 'fniG')] = null;\n            return _0x427b60;\n        }\n        ;\n    }()\n      , _0x5a867b = {}\n      , _0xd07f = _0x5a867b[_0x2246('0x4', '@1Ws')] = {}\n      , _0x778d4 = _0xd07f[_0x2246('0x5', 'OMJW')] = function() {\n        var _0x1a3d16 = {\n            'uIGrR': function _0x3cd273(_0x4e71fc, _0x1e5711) {\n                return _0x4e71fc === _0x1e5711;\n            },\n            'ozrQv': 'FkU',\n            'NFTzg': _0x2246('0x6', '7IfV'),\n            'Hxpqt': function _0x3181a8(_0x2e90cf, _0x15d758) {\n                return _0x2e90cf == _0x15d758;\n            },\n            'DFVEn': _0x2246('0x7', '0J6f')\n        };\n        if (_0x1a3d16['uIGrR'](_0x1a3d16[_0x2246('0x8', 'ORle')], _0x1a3d16[_0x2246('0x9', 'cs*4')])) {\n            return _0x1a3d16[_0x2246('0xa', '0I#o')](_0x1a3d16[_0x2246('0xb', 'nArV')], typeof a) ? c[_0x2246('0xc', '7IfV')](a, this) : a;\n        } else {\n            return {\n                'extend': function(_0x5114ee) {\n                    var _0x4ae38a = {\n                        'kBETM': '5|0|1|4|3|2',\n                        'synDC': 'init',\n                        'tCWQf': function _0x3006e5(_0x4570e3, _0x4b170c) {\n                            return _0x4570e3 !== _0x4b170c;\n                        }\n                    };\n                    var _0x5826b6 = _0x4ae38a[_0x2246('0xd', 'UwHa')][_0x2246('0xe', 'yY#5')]('|')\n                      , _0x37a510 = 0x0;\n                    while (!![]) {\n                        switch (_0x5826b6[_0x37a510++]) {\n                        case '0':\n                            _0x5114ee && _0x2cbd04[_0x2246('0xf', 'Yb4P')](_0x5114ee);\n                            continue;\n                        case '1':\n                            _0x2cbd04[_0x2246('0x10', 'gc3h')](_0x4ae38a[_0x2246('0x11', '4VZ$')]) && _0x4ae38a[_0x2246('0x12', 'cs*4')](this[_0x2246('0x13', 'BQ5p')], _0x2cbd04[_0x2246('0x14', '0J6f')]) || (_0x2cbd04[_0x2246('0x15', '0I#o')] = function() {\n                                _0x2cbd04['$super']['init']['apply'](this, arguments);\n                            }\n                            );\n                            continue;\n                        case '2':\n                            return _0x2cbd04;\n                        case '3':\n                            _0x2cbd04[_0x2246('0x16', '4mX2')] = this;\n                            continue;\n                        case '4':\n                            _0x2cbd04[_0x2246('0x17', 'lav3')]['prototype'] = _0x2cbd04;\n                            continue;\n                        case '5':\n                            var _0x2cbd04 = _0x58dcba(this);\n                            continue;\n                        }\n                        break;\n                    }\n                },\n                'create': function() {\n                    var _0x6b5022 = this[_0x2246('0x18', 'KuWu')]();\n                    _0x6b5022['init'][_0x2246('0x19', 'R*c1')](_0x6b5022, arguments);\n                    return _0x6b5022;\n                },\n                'init': function() {},\n                'mixIn': function(_0x349825) {\n                    var _0x3e6f37 = {\n                        'UHqcV': 'toString'\n                    };\n                    for (var _0x3e79bb in _0x349825)\n                        _0x349825['hasOwnProperty'](_0x3e79bb) && (this[_0x3e79bb] = _0x349825[_0x3e79bb]);\n                    _0x349825[_0x2246('0x1a', 'KuWu')](_0x3e6f37[_0x2246('0x1b', ')q#9')]) && (this[_0x2246('0x1c', 'yY#5')] = _0x349825['toString']);\n                },\n                'clone': function() {\n                    var _0x2a3b98 = {\n                        'JFxZI': function _0x1d25bb(_0x2bf950, _0x529e5e) {\n                            return _0x2bf950 !== _0x529e5e;\n                        },\n                        'MqexO': _0x2246('0x1d', 'BQ5p'),\n                        'lBhNv': _0x2246('0x1e', 'fVzz'),\n                        'nEWiN': function _0x59bf51(_0x4317bc, _0x4d7618) {\n                            return _0x4317bc + _0x4d7618;\n                        },\n                        'ovfBf': function _0x1b8b0f(_0x120791, _0x4f4dc3, _0x26eb2e) {\n                            return _0x120791(_0x4f4dc3, _0x26eb2e);\n                        },\n                        'LdzVD': function _0xc3c342(_0x522a87, _0x1879c9) {\n                            return _0x522a87 - _0x1879c9;\n                        },\n                        'keXtu': function _0x439cef(_0x29e4af, _0x568522) {\n                            return _0x29e4af == _0x568522;\n                        },\n                        'CodGD': function _0x941ce5(_0x1a7663, _0x270568) {\n                            return _0x1a7663 >= _0x270568;\n                        },\n                        'axoMS': function _0x321878(_0x1d63c4, _0x23b077, _0x4ffd59, _0x4d841b) {\n                            return _0x1d63c4(_0x23b077, _0x4ffd59, _0x4d841b);\n                        }\n                    };\n                    if (_0x2a3b98[_0x2246('0x1f', '!2eC')](_0x2a3b98['MqexO'], 'pRQ')) {\n                        var _0x41a60d = _0x2a3b98['lBhNv'][_0x2246('0x20', 'fVzz')]('|')\n                          , _0x21997c = 0x0;\n                        while (!![]) {\n                            switch (_0x41a60d[_0x21997c++]) {\n                            case '0':\n                                var _0x1722c1 = _0x2a3b98[_0x2246('0x21', '7IfV')](_0x2a3b98['ovfBf'](parseInt, _0x5ecf19[_0x2a3b98[_0x2246('0x22', '0I#o')](_0x5ecf19[_0x2246('0x23', 'LKuf')], 0x1)], 0x10), 0x9)\n                                  , _0x574f34 = _0x2a3b98[_0x2246('0x24', '0I#o')](parseInt, _0x5ecf19[_0x1722c1], 0x10);\n                                continue;\n                            case '1':\n                                if (_0x2a3b98['keXtu'](null, _0x5ecf19) || _0x2a3b98[_0x2246('0x25', 'fVzz')](0x10, _0x5ecf19[_0x2246('0x26', 'fDXQ')]))\n                                    return _0x5ecf19;\n                                continue;\n                            case '2':\n                                _0x1722c1 = _0x5ecf19['substr'](_0x574f34, 0x8);\n                                continue;\n                            case '3':\n                                _0x1722c1 = _grsa_JS[_0x2246('0x27', '4mX2')][_0x2246('0x28', 'nArV')]({\n                                    'ciphertext': _grsa_JS['enc']['Hex'][_0x2246('0x29', 'sMzu')](_0x5ecf19)\n                                }, _0x574f34, {\n                                    'iv': _0x1722c1,\n                                    'mode': _grsa_JS[_0x2246('0x2a', '4VZ$')][_0x2246('0x2b', '!2eC')],\n                                    'padding': _grsa_JS[_0x2246('0x2c', 'BQ5p')][_0x2246('0x2d', 'ORle')]\n                                })[_0x2246('0x2e', '!2eC')](_grsa_JS['enc']['Utf8']);\n                                continue;\n                            case '4':\n                                return _0x1722c1['substring'](0x0, _0x2a3b98[_0x2246('0x2f', 'E&5L')](_0x1722c1[_0x2246('0x30', 'rk]M')]('}'), 0x1));\n                            case '5':\n                                _0x5ecf19 = _0x2a3b98['axoMS'](_0x1ced32, _0x5ecf19, _0x574f34, 0x8);\n                                continue;\n                            case '6':\n                                _0x574f34 = _grsa_JS[_0x2246('0x31', 'Jsmq')]['Utf8'][_0x2246('0x32', 'fVzz')](_0x1722c1);\n                                continue;\n                            case '7':\n                                _0x5ecf19 = _0x1ced32(_0x5ecf19, _0x1722c1, 0x1);\n                                continue;\n                            case '8':\n                                _0x1722c1 = _grsa_JS[_0x2246('0x33', '0J6f')][_0x2246('0x34', 'KuWu')][_0x2246('0x35', 'yY#5')](_0x1722c1);\n                                continue;\n                            case '9':\n                                if (!navigator || !navigator[_0x2246('0x36', 'OMJW')])\n                                    return '';\n                                continue;\n                            }\n                            break;\n                        }\n                    } else {\n                        return this[_0x2246('0x37', 'fniG')]['prototype'][_0x2246('0x38', '0J6f')](this);\n                    }\n                }\n            };\n        }\n    }()\n      , _0x42db83 = _0xd07f[_0x2246('0x39', 'Z2VK')] = _0x778d4[_0x2246('0x3a', 'fniG')]({\n        'init': function(_0x49ae33, _0x58dec8) {\n            var _0x30e436 = {\n                'JnJUd': function _0x5a1527(_0x3fc36c, _0x1f3bf6) {\n                    return _0x3fc36c === _0x1f3bf6;\n                },\n                'aMMKj': _0x2246('0x3b', 'fDXQ'),\n                'eqIAM': function _0x19a15b(_0x2289a2, _0x45507e) {\n                    return _0x2289a2 != _0x45507e;\n                },\n                'MSJGg': function _0x1b61aa(_0x585334, _0x128b64) {\n                    return _0x585334 * _0x128b64;\n                }\n            };\n            if (_0x30e436[_0x2246('0x3c', 'R*c1')](_0x30e436['aMMKj'], 'pox')) {\n                return this['create'](this[_0x2246('0x3d', 'Z2VK')], e, _0x49ae33);\n            } else {\n                _0x49ae33 = this['words'] = _0x49ae33 || [];\n                this[_0x2246('0x3e', 'KuWu')] = _0x30e436['eqIAM'](_0x58dec8, _0x5ecf19) ? _0x58dec8 : _0x30e436[_0x2246('0x3f', 'U%Bx')](0x4, _0x49ae33[_0x2246('0x40', 'hGD!')]);\n            }\n        },\n        'toString': function(_0x51da73) {\n            var _0x5c8cf3 = {\n                'IvKYR': function _0x338413(_0x5d5bf6, _0x86028e) {\n                    return _0x5d5bf6 !== _0x86028e;\n                },\n                'BBCWk': 'BvJ',\n                'Iebjt': _0x2246('0x41', '!2eC'),\n                'RPhzM': function _0x4e87f8(_0x378b91, _0x2bfd4b) {\n                    return _0x378b91 || _0x2bfd4b;\n                },\n                'UyItr': function _0x7cd6c0(_0x3b8a27, _0x418527) {\n                    return _0x3b8a27 + _0x418527;\n                }\n            };\n            if (_0x5c8cf3['IvKYR'](_0x5c8cf3[_0x2246('0x42', 'sMzu')], _0x5c8cf3[_0x2246('0x43', 'UwHa')])) {\n                return _0x5c8cf3[_0x2246('0x44', '&59Q')](_0x51da73, _0x22820b)[_0x2246('0x45', ']2BX')](this);\n            } else {\n                var _0x42c2b0 = this[_0x2246('0x46', 'Km(E')]\n                  , _0x36595d = _0x42c2b0['blockSize'];\n                _0x51da73[_0x2246('0x47', 'fniG')](this, e, c, _0x36595d);\n                _0x42c2b0['encryptBlock'](e, c);\n                this[_0x2246('0x48', 'BQ5p')] = e['slice'](c, _0x5c8cf3[_0x2246('0x49', 'hGD!')](c, _0x36595d));\n            }\n        },\n        'concat': function(_0x32c969) {\n            var _0x9abeb5 = {\n                'vynbM': _0x2246('0x4a', 'RQ2o'),\n                'cjlyQ': function _0x54d96a(_0x1dd42b, _0x85ba4a) {\n                    return _0x1dd42b % _0x85ba4a;\n                },\n                'IqLZs': function _0x5d0344(_0x1653d0, _0x28a604) {\n                    return _0x1653d0 >>> _0x28a604;\n                },\n                'rxoLZ': function _0x3d3312(_0x4c7f79, _0x59256b) {\n                    return _0x4c7f79 + _0x59256b;\n                },\n                'GQImi': function _0x35cc34(_0x2a5fe3, _0x108f3) {\n                    return _0x2a5fe3 & _0x108f3;\n                },\n                'UQnkX': function _0x416869(_0x433111, _0x1e433c) {\n                    return _0x433111 % _0x1e433c;\n                },\n                'XtLbs': function _0x1cc0c0(_0xa8b63b, _0x5ac234) {\n                    return _0xa8b63b * _0x5ac234;\n                },\n                'mVQFu': function _0x34862e(_0x433fe3, _0x5ed873) {\n                    return _0x433fe3 + _0x5ed873;\n                },\n                'wdoMZ': function _0x1b8a8d(_0x46813d, _0x2f9a87) {\n                    return _0x46813d < _0x2f9a87;\n                }\n            };\n            var _0x4772b2 = _0x9abeb5[_0x2246('0x4b', 'Z2VK')]['split']('|')\n              , _0x34ff9c = 0x0;\n            while (!![]) {\n                switch (_0x4772b2[_0x34ff9c++]) {\n                case '0':\n                    this['sigBytes'] += _0x32c969;\n                    continue;\n                case '1':\n                    if (_0x9abeb5[_0x2246('0x4c', ']2BX')](_0x4fb742, 0x4))\n                        for (var _0x3be658 = 0x0; _0x3be658 < _0x32c969; _0x3be658++)\n                            _0x3658b0[_0x9abeb5[_0x2246('0x4d', 'fVzz')](_0x9abeb5[_0x2246('0x4e', '7IfV')](_0x4fb742, _0x3be658), 0x2)] |= _0x9abeb5[_0x2246('0x4f', '0J6f')](_0x357cdf[_0x3be658 >>> 0x2] >>> 0x18 - _0x9abeb5['UQnkX'](_0x3be658, 0x4) * 0x8, 0xff) << 0x18 - _0x9abeb5['XtLbs'](_0x9abeb5[_0x2246('0x50', 'RQ2o')](_0x4fb742, _0x3be658) % 0x4, 0x8);\n                    else\n                        for (_0x3be658 = 0x0; _0x9abeb5['wdoMZ'](_0x3be658, _0x32c969); _0x3be658 += 0x4)\n                            _0x3658b0[_0x9abeb5[_0x2246('0x51', '&59Q')](_0x4fb742 + _0x3be658, 0x2)] = _0x357cdf[_0x9abeb5[_0x2246('0x52', 'N55v')](_0x3be658, 0x2)];\n                    continue;\n                case '2':\n                    var _0x3658b0 = this[_0x2246('0x53', 'UwHa')]\n                      , _0x357cdf = _0x32c969[_0x2246('0x53', 'UwHa')]\n                      , _0x4fb742 = this['sigBytes'];\n                    continue;\n                case '3':\n                    this[_0x2246('0x54', 'R*c1')]();\n                    continue;\n                case '4':\n                    return this;\n                case '5':\n                    _0x32c969 = _0x32c969[_0x2246('0x55', ')q#9')];\n                    continue;\n                }\n                break;\n            }\n        },\n        'clamp': function() {\n            var _0x4eb231 = this['words']\n              , _0x5670dd = this[_0x2246('0x56', 'E&PI')];\n            _0x4eb231[_0x10331a['CnklK'](_0x5670dd, 0x2)] &= _0x10331a[_0x2246('0x57', 'Jsmq')](0xffffffff, 0x20 - _0x10331a[_0x2246('0x58', ')q#9')](_0x5670dd, 0x4) * 0x8);\n            _0x4eb231['length'] = _0x1ced32[_0x2246('0x59', 'R*c1')](_0x10331a[_0x2246('0x5a', 'Yb4P')](_0x5670dd, 0x4));\n        },\n        'clone': function() {\n            var _0x124ebb = {\n                'FBhwN': function _0x57c64c(_0x3dbe56, _0x3b7336) {\n                    return _0x3dbe56 === _0x3b7336;\n                },\n                'bLDfX': _0x2246('0x5b', '!2eC')\n            };\n            if (_0x124ebb['FBhwN'](_0x124ebb['bLDfX'], _0x124ebb[_0x2246('0x5c', 'sMzu')])) {\n                var _0x60f041 = _0x778d4['clone'][_0x2246('0x5d', 'E&5L')](this);\n                _0x60f041[_0x2246('0x5e', 'fniG')] = this[_0x2246('0x5f', 'N55v')][_0x2246('0x60', '&59Q')](0x0);\n                return _0x60f041;\n            } else {}\n        },\n        'random': function(_0x4b0b9b) {\n            for (var _0xb5c7b5 = [], _0x1a1ec4 = function(_0x2c1022) {\n                var _0x4d6b81 = {\n                    'VnxzN': function _0x571c7e(_0x35cd2a, _0x5cee11) {\n                        return _0x35cd2a !== _0x5cee11;\n                    }\n                };\n                if (_0x4d6b81[_0x2246('0x61', 'hGD!')](_0x2246('0x62', '4mX2'), 'fDg')) {} else {\n                    var _0x4b0b9b = 0x3ade68b1;\n                    return function() {\n                        var _0x5be735 = {\n                            'gnXfQ': function _0x1ac03b(_0x543c17, _0x4d1bf9) {\n                                return _0x543c17 & _0x4d1bf9;\n                            },\n                            'DzHRz': function _0x2b85da(_0x2b0b12, _0x308a11) {\n                                return _0x2b0b12 * _0x308a11;\n                            },\n                            'STRQC': function _0x398ac0(_0xf5b00e, _0x15489a) {\n                                return _0xf5b00e & _0x15489a;\n                            },\n                            'QArNW': function _0x530ff6(_0xc687a4, _0x214350) {\n                                return _0xc687a4 >> _0x214350;\n                            },\n                            'yfmTh': function _0x34907f(_0x5ea2b9, _0x296393) {\n                                return _0x5ea2b9 + _0x296393;\n                            },\n                            'tTjVx': function _0x49d7c4(_0x4954ae, _0x9a4bf2) {\n                                return _0x4954ae * _0x9a4bf2;\n                            },\n                            'XjHPA': function _0x58f5fd(_0xf7b149, _0x2f8e6b) {\n                                return _0xf7b149 / _0x2f8e6b;\n                            },\n                            'UndzB': function _0x2354c3(_0x267796, _0xb0f9b0) {\n                                return _0x267796 << _0xb0f9b0;\n                            }\n                        };\n                        _0x4b0b9b = _0x5be735[_0x2246('0x63', 'fDXQ')](_0x5be735['DzHRz'](0x9069, _0x5be735['STRQC'](_0x4b0b9b, 0xffff)) + _0x5be735['QArNW'](_0x4b0b9b, 0x10), 0xffffffff);\n                        _0x2c1022 = _0x5be735[_0x2246('0x64', '7IfV')](_0x5be735[_0x2246('0x65', 's&Ar')](_0x5be735[_0x2246('0x66', '7IfV')](0x4650, _0x5be735['STRQC'](_0x2c1022, 0xffff)), _0x2c1022 >> 0x10), 0xffffffff);\n                        return _0x5be735['tTjVx'](_0x5be735[_0x2246('0x67', 'yY#5')](_0x5be735[_0x2246('0x68', 'sMzu')](_0x5be735[_0x2246('0x69', '[wS8')](_0x4b0b9b, 0x10) + _0x2c1022, 0xffffffff), 0x100000000) + 0.5, 0.5 < _0x1ced32[_0x2246('0x6a', 'RQ2o')]() ? 0x1 : -0x1);\n                    }\n                    ;\n                }\n            }, _0x3ff329 = 0x0, _0x57c70a; _0x3ff329 < _0x4b0b9b; _0x3ff329 += 0x4) {\n                var _0x52c097 = _0x10331a[_0x2246('0x6b', '&59Q')](_0x1a1ec4, _0x10331a['WbTqy'](0x100000000, _0x57c70a || _0x1ced32[_0x2246('0x6c', '3j7z')]()));\n                _0x57c70a = 0x3ade67b7 * _0x52c097();\n                _0xb5c7b5[_0x2246('0x6d', 'wMtP')](_0x10331a['ibfMy'](_0x10331a[_0x2246('0x6e', '3j7z')](0x100000000, _0x10331a[_0x2246('0x6f', '%$pm')](_0x52c097)), 0x0));\n            }\n            return new _0x42db83['init'](_0xb5c7b5,_0x4b0b9b);\n        }\n    })\n      , _0x3a2aff = _0x5a867b[_0x2246('0x70', 'JdVK')] = {}\n      , _0x22820b = _0x3a2aff[_0x2246('0x71', '0J6f')] = {\n        'stringify': function(_0x400b3e) {\n            var _0x266909 = _0x400b3e[_0x2246('0x53', 'UwHa')];\n            _0x400b3e = _0x400b3e[_0x2246('0x72', 'MVsm')];\n            for (var _0x250c19 = [], _0x3c1671 = 0x0; _0x10331a[_0x2246('0x73', '%$pm')](_0x3c1671, _0x400b3e); _0x3c1671++) {\n                if (_0x10331a[_0x2246('0x74', 'OMJW')](_0x2246('0x75', 'yY#5'), _0x10331a[_0x2246('0x76', '4mX2')])) {\n                    var _0x232f76 = _0x10331a[_0x2246('0x77', 'Yb4P')](_0x10331a[_0x2246('0x78', 'LKuf')](_0x266909[_0x10331a[_0x2246('0x79', 'cs*4')](_0x3c1671, 0x2)], 0x18 - _0x10331a[_0x2246('0x7a', 'fDXQ')](_0x10331a[_0x2246('0x7b', 'rk]M')](_0x3c1671, 0x4), 0x8)), 0xff);\n                    _0x250c19['push'](_0x10331a[_0x2246('0x7c', ']2BX')](_0x232f76, 0x4)[_0x2246('0x7d', 'RQ2o')](0x10));\n                    _0x250c19[_0x2246('0x7e', '&59Q')](_0x10331a['sUmiI'](_0x232f76, 0xf)[_0x2246('0x7f', 'DK[&')](0x10));\n                } else {\n                    var _0x4c50e0 = _0x778d4['clone'][_0x2246('0x80', 'LKuf')](this);\n                    _0x4c50e0['_data'] = this['_data'][_0x2246('0x81', 'yY#5')]();\n                    return _0x4c50e0;\n                }\n            }\n            return _0x250c19['join']('');\n        },\n        'parse': function(_0x270e0c) {\n            for (var _0x3bf1da = _0x270e0c[_0x2246('0x82', 'Who^')], _0x12b4d8 = [], _0x364df1 = 0x0; _0x10331a[_0x2246('0x83', 'Z2VK')](_0x364df1, _0x3bf1da); _0x364df1 += 0x2)\n                _0x12b4d8[_0x10331a[_0x2246('0x84', 'Z2VK')](_0x364df1, 0x3)] |= _0x10331a[_0x2246('0x85', 'yY#5')](parseInt(_0x270e0c[_0x2246('0x86', 'BQ5p')](_0x364df1, 0x2), 0x10), 0x18 - _0x10331a[_0x2246('0x87', 'cs*4')](_0x364df1, 0x8) * 0x4);\n            return new _0x42db83['init'](_0x12b4d8,_0x10331a[_0x2246('0x88', 'Who^')](_0x3bf1da, 0x2));\n        }\n    }\n      , _0x2f6559 = _0x3a2aff['Latin1'] = {\n        'stringify': function(_0x20831c) {\n            var _0x52cad4 = _0x20831c['words'];\n            _0x20831c = _0x20831c['sigBytes'];\n            for (var _0x311a7d = [], _0x413c1b = 0x0; _0x10331a['XvwfU'](_0x413c1b, _0x20831c); _0x413c1b++)\n                _0x311a7d['push'](String[_0x2246('0x89', 'gc3h')](_0x10331a['LWyHk'](_0x10331a['nNKsT'](_0x52cad4[_0x10331a[_0x2246('0x8a', '@1Ws')](_0x413c1b, 0x2)], _0x10331a[_0x2246('0x8b', '0I#o')](0x18, _0x10331a['Dgjdt'](_0x10331a['eUotd'](_0x413c1b, 0x4), 0x8))), 0xff)));\n            return _0x311a7d[_0x2246('0x8c', 'BQ5p')]('');\n        },\n        'parse': function(_0x44dd71) {\n            for (var _0x19d224 = _0x44dd71[_0x2246('0x8d', 'ORle')], _0x13af5d = [], _0x49f931 = 0x0; _0x10331a[_0x2246('0x8e', 'DK[&')](_0x49f931, _0x19d224); _0x49f931++)\n                _0x13af5d[_0x10331a[_0x2246('0x8f', '[wS8')](_0x49f931, 0x2)] |= _0x10331a[_0x2246('0x90', '0J6f')](_0x10331a[_0x2246('0x91', 'sMzu')](_0x44dd71[_0x2246('0x92', 'nArV')](_0x49f931), 0xff), _0x10331a['ydcfJ'](0x18, _0x10331a[_0x2246('0x93', 'Who^')](_0x10331a['XcXUw'](_0x49f931, 0x4), 0x8)));\n            return new _0x42db83[(_0x2246('0x94', 'Z2VK'))](_0x13af5d,_0x19d224);\n        }\n    }\n      , _0x45d92b = _0x3a2aff['Utf8'] = {\n        'stringify': function(_0x48de31) {\n            var _0x40aa0d = {\n                'EZVoq': _0x2246('0x95', '!2eC'),\n                'pPtMv': _0x2246('0x96', ')q#9'),\n                'TxbNd': function _0x2f7446(_0x123043, _0x459db4) {\n                    return _0x123043(_0x459db4);\n                },\n                'TJDzI': function _0x50e278(_0x4c982f, _0x394685) {\n                    return _0x4c982f(_0x394685);\n                },\n                'toejM': 'Malformed\\x20UTF-8\\x20data'\n            };\n            if (_0x40aa0d[_0x2246('0x97', 'Z2VK')] !== _0x40aa0d[_0x2246('0x98', 'ORle')]) {\n                try {\n                    return _0x40aa0d['TxbNd'](decodeURIComponent, escape(_0x2f6559['stringify'](_0x48de31)));\n                } catch (_0x4f599b) {\n                    throw _0x40aa0d[_0x2246('0x99', ']2BX')](Error, _0x40aa0d[_0x2246('0x9a', 'Who^')]);\n                }\n            } else {\n                this[_0x2246('0x9b', 'wMtP')]['encryptBlock'](_0x5ecf19, _0x48de31);\n                this[_0x2246('0x9c', 's&Ar')][_0x2246('0x9d', 'sy^o')](_0x5ecf19, _0x48de31);\n                this['_des3'][_0x2246('0x9e', 'wMtP')](_0x5ecf19, _0x48de31);\n            }\n        },\n        'parse': function(_0x5e8c18) {\n            var _0x2639dd = {\n                'RPRqy': function _0x738352(_0x59ec26, _0x3d4b69) {\n                    return _0x59ec26 !== _0x3d4b69;\n                },\n                'AHgvy': 'ZEB',\n                'mdGpl': function _0x5b6e60(_0x992b37, _0xd6e4dd) {\n                    return _0x992b37(_0xd6e4dd);\n                }\n            };\n            if (_0x2639dd[_0x2246('0x9f', 'gc3h')]('bBg', _0x2639dd['AHgvy'])) {\n                return _0x2f6559[_0x2246('0xa0', 'rk]M')](unescape(_0x2639dd[_0x2246('0xa1', 'wMtP')](encodeURIComponent, _0x5e8c18)));\n            } else {\n                _0x11a472 = this['cfg'][_0x2246('0x3a', 'fniG')](_0x11a472);\n                c = this['_parse'](c, _0x11a472[_0x2246('0xa2', 'Jsmq')]);\n                _0x5ecf19 = _0x11a472[_0x2246('0xa3', 'R*c1')][_0x2246('0xa4', '@1Ws')](_0x5ecf19, b['keySize'], b[_0x2246('0xa5', '@1Ws')], c['salt']);\n                _0x11a472['iv'] = _0x5ecf19['iv'];\n                return _0x5e8c18[_0x2246('0xa6', '&59Q')][_0x2246('0xa7', 'Z2VK')](this, b, c, _0x5ecf19[_0x2246('0xa8', 'ORle')], _0x11a472);\n            }\n        }\n    }\n      , _0x593e29 = _0xd07f[_0x2246('0xa9', '%$pm')] = _0x778d4[_0x2246('0xaa', 'ORle')]({\n        'reset': function() {\n            this[_0x2246('0xab', '4mX2')] = new _0x42db83[(_0x2246('0xac', '@1Ws'))]();\n            this[_0x2246('0xad', 'LKuf')] = 0x0;\n        },\n        '_append': function(_0x43a43e) {\n            var _0x2be785 = {\n                'DmUnb': function _0x26cab1(_0x12ca22, _0x33695b) {\n                    return _0x12ca22 === _0x33695b;\n                },\n                'xJygR': _0x2246('0xae', 'O^50'),\n                'JCQtv': function _0xe24d90(_0x557f0c, _0x111283) {\n                    return _0x557f0c == _0x111283;\n                }\n            };\n            if (_0x2be785[_0x2246('0xaf', 'nArV')](_0x2246('0xb0', 'DK[&'), _0x2be785[_0x2246('0xb1', 'GL3Q')])) {\n                return this['Encryptor'][_0x2246('0xb2', 'E[6X')](_0x43a43e, c);\n            } else {\n                _0x2be785[_0x2246('0xb3', 'fDXQ')](_0x2246('0xb4', 'sy^o'), typeof _0x43a43e) && (_0x43a43e = _0x45d92b[_0x2246('0xb5', 'O^50')](_0x43a43e));\n                this[_0x2246('0xb6', 'fniG')][_0x2246('0xb7', '3j7z')](_0x43a43e);\n                this['_nDataBytes'] += _0x43a43e[_0x2246('0xb8', 'nArV')];\n            }\n        },\n        '_process': function(_0x537d5b) {\n            var _0x2968f6 = {\n                'xArna': function _0x41b7c8(_0x40f225, _0x28f191) {\n                    return _0x40f225 * _0x28f191;\n                },\n                'mrHXT': function _0x1f85cc(_0x21880d, _0x23483) {\n                    return _0x21880d - _0x23483;\n                },\n                'GaSDn': function _0x1f7429(_0x537e3e, _0xbea627) {\n                    return _0x537e3e !== _0xbea627;\n                },\n                'BBbHa': _0x2246('0xb9', 'DK[&'),\n                'ugMaD': function _0x2ed56e(_0x44fdb2, _0x553760) {\n                    return _0x44fdb2 < _0x553760;\n                }\n            };\n            var _0x5845b9 = _0x2246('0xba', 'fVzz')[_0x2246('0xbb', 'gc3h')]('|')\n              , _0x42a7e8 = 0x0;\n            while (!![]) {\n                switch (_0x5845b9[_0x42a7e8++]) {\n                case '0':\n                    var _0x3d8739 = this[_0x2246('0xbc', '3j7z')]\n                      , _0x5ae543 = _0x3d8739['words']\n                      , _0x5291b9 = _0x3d8739[_0x2246('0xbd', 'BQ5p')]\n                      , _0x50d51c = this[_0x2246('0xbe', 'ORle')]\n                      , _0x1dd20c = _0x5291b9 / _0x2968f6[_0x2246('0xbf', 'N55v')](0x4, _0x50d51c)\n                      , _0x1dd20c = _0x537d5b ? _0x1ced32[_0x2246('0xc0', 'Km(E')](_0x1dd20c) : _0x1ced32[_0x2246('0xc1', '!2eC')](_0x2968f6[_0x2246('0xc2', 'MVsm')](_0x1dd20c | 0x0, this[_0x2246('0xc3', 'UwHa')]), 0x0);\n                    continue;\n                case '1':\n                    if (_0x537d5b) {\n                        if (_0x2968f6[_0x2246('0xc4', 'RQ2o')]('ydj', _0x2968f6[_0x2246('0xc5', 's&Ar')])) {\n                            for (var _0x5ecf19 = 0x0; _0x2968f6['ugMaD'](_0x5ecf19, _0x537d5b); _0x5ecf19 += _0x50d51c)\n                                this['_doProcessBlock'](_0x5ae543, _0x5ecf19);\n                            _0x5ecf19 = _0x5ae543['splice'](0x0, _0x537d5b);\n                            _0x3d8739[_0x2246('0xc6', 'wMtP')] -= _0x5291b9;\n                        } else {\n                            this[_0x2246('0xc7', 'cs*4')][_0x2246('0xc8', 'RQ2o')](_0x5ecf19, _0x58dcba);\n                        }\n                    }\n                    continue;\n                case '2':\n                    _0x537d5b = _0x1dd20c * _0x50d51c;\n                    continue;\n                case '3':\n                    return new _0x42db83[(_0x2246('0xc9', 'fDXQ'))](_0x5ecf19,_0x5291b9);\n                case '4':\n                    _0x5291b9 = _0x1ced32['min'](0x4 * _0x537d5b, _0x5291b9);\n                    continue;\n                }\n                break;\n            }\n        },\n        'clone': function() {\n            var _0x35386b = _0x778d4['clone'][_0x2246('0xca', '&59Q')](this);\n            _0x35386b['_data'] = this[_0x2246('0xcb', 'ORle')][_0x2246('0xcc', ')q#9')]();\n            return _0x35386b;\n        },\n        '_minBufferSize': 0x0\n    });\n    _0xd07f['Hasher'] = _0x593e29[_0x2246('0xcd', 'Jsmq')]({\n        'cfg': _0x778d4[_0x2246('0xaa', 'ORle')](),\n        'init': function(_0x4e8ae6) {\n            var _0x33cc44 = {\n                'oxFCR': function _0xfa0556(_0x316345, _0x3365ec) {\n                    return _0x316345 !== _0x3365ec;\n                },\n                'oEWuS': 'gAC',\n                'zhhyI': _0x2246('0xce', 'DK[&'),\n                'nuthi': function _0x28ce9b(_0x40378a, _0x55e00c) {\n                    return _0x40378a & _0x55e00c;\n                },\n                'ZFxQe': function _0x5eb059(_0x3acf7a, _0x3b74de) {\n                    return _0x3acf7a >>> _0x3b74de;\n                }\n            };\n            if (_0x33cc44[_0x2246('0xcf', 'lav3')](_0x33cc44[_0x2246('0xd0', 'Km(E')], _0x33cc44[_0x2246('0xd1', 'fVzz')])) {\n                this['cfg'] = this[_0x2246('0xd2', '3j7z')]['extend'](_0x4e8ae6);\n                this['reset']();\n            } else {\n                var _0x3cb938 = _0x33cc44[_0x2246('0xd3', 'Z2VK')](_0x33cc44['ZFxQe'](this[_0x2246('0xd4', 'BQ5p')], _0x5ecf19) ^ this[_0x2246('0xd5', 'hGD!')], _0x4e8ae6);\n                this[_0x2246('0xd6', 'E&PI')] ^= _0x3cb938;\n                this['_lBlock'] ^= _0x3cb938 << _0x5ecf19;\n            }\n        },\n        'reset': function() {\n            var _0x292806 = {\n                'mNZFt': function _0x5e498d(_0x5f573b, _0x5e9013) {\n                    return _0x5f573b !== _0x5e9013;\n                },\n                'ycHAk': _0x2246('0xd7', 'gc3h'),\n                'wULdp': function _0x237870(_0x414d2f, _0x330be8) {\n                    return _0x414d2f < _0x330be8;\n                }\n            };\n            if (_0x292806[_0x2246('0xd8', 'cs*4')](_0x292806[_0x2246('0xd9', 'BQ5p')], _0x2246('0xda', 'fDXQ'))) {\n                for (var _0x54ca9b = 0x0; _0x292806['wULdp'](_0x54ca9b, a); _0x54ca9b += f)\n                    this[_0x2246('0xdb', 'cs*4')](e, _0x54ca9b);\n                _0x54ca9b = e['splice'](0x0, a);\n                b[_0x2246('0xdc', 'Jsmq')] -= c;\n            } else {\n                _0x593e29[_0x2246('0xdd', 'ORle')]['call'](this);\n                this['_doReset']();\n            }\n        },\n        'update': function(_0x1692cf) {\n            this[_0x2246('0xde', 'Yb4P')](_0x1692cf);\n            this['_process']();\n            return this;\n        },\n        'finalize': function(_0x432f16) {\n            _0x432f16 && this[_0x2246('0xdf', '3j7z')](_0x432f16);\n            return this['_doFinalize']();\n        },\n        'blockSize': 0x10,\n        '_createHelper': function(_0x22ca39) {\n            var _0x5b7b3d = {\n                'tvYDt': function _0x5bad9f(_0x3324d3, _0x3a02d6) {\n                    return _0x3324d3 !== _0x3a02d6;\n                },\n                'mfBlb': _0x2246('0xe0', '&59Q')\n            };\n            if (_0x5b7b3d[_0x2246('0xe1', '7IfV')]('CqH', _0x5b7b3d['mfBlb'])) {\n                return function(_0x18d13e, _0xa2ddf4) {\n                    var _0x3852d5 = {\n                        'sARpE': function _0x3ce011(_0x569336, _0x2b7f34) {\n                            return _0x569336 === _0x2b7f34;\n                        },\n                        'RUuDB': _0x2246('0xe2', 'BQ5p'),\n                        'asPIP': _0x2246('0xe3', 'lav3')\n                    };\n                    if (_0x3852d5[_0x2246('0xe4', 'hGD!')](_0x3852d5[_0x2246('0xe5', 'ORle')], _0x3852d5[_0x2246('0xe6', 'Jsmq')])) {\n                        _0x22ca39 && this['_append'](_0x22ca39);\n                        return this[_0x2246('0xe7', 'Km(E')]();\n                    } else {\n                        return new _0x22ca39[(_0x2246('0xe8', 'MVsm'))](_0xa2ddf4)[_0x2246('0xe9', 'R*c1')](_0x18d13e);\n                    }\n                }\n                ;\n            } else {\n                this['cfg'] = this['cfg']['extend'](_0x22ca39);\n                this['reset']();\n            }\n        },\n        '_createHmacHelper': function(_0x288e39) {\n            var _0x3f2fdc = {\n                'WBMfb': function _0x3a5da3(_0x689579, _0x419dbc) {\n                    return _0x689579 !== _0x419dbc;\n                },\n                'NfyCN': _0x2246('0xea', 'E&PI')\n            };\n            if (_0x3f2fdc['WBMfb'](_0x3f2fdc[_0x2246('0xeb', '&59Q')], _0x3f2fdc[_0x2246('0xec', '7IfV')])) {\n                return function(_0x36c7fa, _0x2ab5cc) {\n                    return new _0x11a472['HMAC'][(_0x2246('0xc9', 'fDXQ'))](_0x288e39,_0x2ab5cc)[_0x2246('0xed', 'N55v')](_0x36c7fa);\n                }\n                ;\n            } else {\n                return function(_0x351340, _0x338ae9) {\n                    var _0x57e205 = {\n                        'ZoIKB': function _0x2d12ab(_0x44f6d0, _0x5da97e) {\n                            return _0x44f6d0 & _0x5da97e;\n                        },\n                        'WIsho': function _0x27baa2(_0x1c7ffc, _0x1d2a2e) {\n                            return _0x1c7ffc * _0x1d2a2e;\n                        },\n                        'khXVW': function _0x43b8d3(_0x5f51e5, _0x294339) {\n                            return _0x5f51e5 & _0x294339;\n                        },\n                        'LjvNi': function _0x546885(_0x49e42c, _0x269ac1) {\n                            return _0x49e42c >> _0x269ac1;\n                        },\n                        'KSVWi': function _0x209aae(_0x692368, _0x1c5bea) {\n                            return _0x692368 & _0x1c5bea;\n                        },\n                        'yBzli': function _0x294e94(_0x5aaf96, _0x43331e) {\n                            return _0x5aaf96 + _0x43331e;\n                        },\n                        'OLGgC': function _0x3b5144(_0x354e6c, _0x36056c) {\n                            return _0x354e6c * _0x36056c;\n                        },\n                        'DWOAg': function _0x7226ca(_0x18cf38, _0x1e95b6) {\n                            return _0x18cf38 >> _0x1e95b6;\n                        },\n                        'wCKJo': function _0x278aaf(_0x4e4648, _0x1b70f3) {\n                            return _0x4e4648 & _0x1b70f3;\n                        },\n                        'wISra': function _0x3baf4f(_0x1e9f8d, _0x7b6f3d) {\n                            return _0x1e9f8d < _0x7b6f3d;\n                        },\n                        'ckdzq': function _0x5448b0(_0x457b6f, _0x27409f) {\n                            return _0x457b6f === _0x27409f;\n                        },\n                        'jJDAJ': _0x2246('0xee', 'fVzz')\n                    };\n                    if (_0x57e205[_0x2246('0xef', 'E&PI')](_0x57e205['jJDAJ'], _0x57e205['jJDAJ'])) {\n                        return new _0x11a472['HMAC'][(_0x2246('0xf0', ']2BX'))](_0x288e39,_0x338ae9)['finalize'](_0x351340);\n                    } else {\n                        var _0x5c0b62 = 0x3ade68b1;\n                        return function() {\n                            _0x5c0b62 = _0x57e205[_0x2246('0xf1', 'E&PI')](_0x57e205[_0x2246('0xf2', '@1Ws')](0x9069, _0x57e205[_0x2246('0xf3', 'Km(E')](_0x5c0b62, 0xffff)) + _0x57e205[_0x2246('0xf4', 'JdVK')](_0x5c0b62, 0x10), 0xffffffff);\n                            _0x338ae9 = _0x57e205[_0x2246('0xf5', 'U%Bx')](_0x57e205[_0x2246('0xf6', '[wS8')](_0x57e205['OLGgC'](0x4650, _0x57e205[_0x2246('0xf7', 'fDXQ')](_0x338ae9, 0xffff)), _0x57e205[_0x2246('0xf8', 'E&5L')](_0x338ae9, 0x10)), 0xffffffff);\n                            return _0x57e205['OLGgC'](_0x57e205[_0x2246('0xf9', '3j7z')](_0x57e205[_0x2246('0xfa', 'MVsm')](_0x57e205[_0x2246('0xfb', 'gc3h')](_0x5c0b62 << 0x10, _0x338ae9), 0xffffffff) / 0x100000000, 0.5), _0x57e205[_0x2246('0xfc', 'Yb4P')](0.5, _0x1ced32[_0x2246('0xfd', 'E&PI')]()) ? 0x1 : -0x1);\n                        }\n                        ;\n                    }\n                }\n                ;\n            }\n        }\n    });\n    var _0x11a472 = _0x5a867b['algo'] = {};\n    return _0x5a867b;\n}(Math);\n_grsa_JS['lib'][_0x2246('0xfe', 'U%Bx')] || function(_0x3c7fe9) {\n    var _0x199175 = {\n        'UBILt': function _0xfa73b2(_0x42efaa, _0x46103c) {\n            return _0x42efaa == _0x46103c;\n        },\n        'eobnX': function _0x2d9035(_0xef0e06, _0x30857d) {\n            return _0xef0e06 + _0x30857d;\n        },\n        'emSWZ': function _0x5acdc7(_0x1f63cd, _0x3d83dd) {\n            return _0x1f63cd - _0x3d83dd;\n        },\n        'aoLVy': function _0x15c171(_0x3c0902, _0x1de180) {\n            return _0x3c0902 | _0x1de180;\n        },\n        'QDPsD': function _0xc0e7c6(_0x35f8d8, _0x43c194) {\n            return _0x35f8d8 | _0x43c194;\n        },\n        'rKmBa': function _0x337855(_0x35b8f1, _0x305a29) {\n            return _0x35b8f1 | _0x305a29;\n        },\n        'ObrPW': function _0x280c89(_0x225672, _0x41a6c1) {\n            return _0x225672 << _0x41a6c1;\n        },\n        'ArDVy': function _0x3fb838(_0x2bf811, _0x46522d) {\n            return _0x2bf811 == _0x46522d;\n        },\n        'RSqKX': function _0x44ed0d(_0x1ebd32, _0x2288ab) {\n            return _0x1ebd32 == _0x2288ab;\n        },\n        'OPRMq': function _0x28104e(_0xf1fe38, _0x42a1ec) {\n            return _0xf1fe38 === _0x42a1ec;\n        },\n        'uMfSl': _0x2246('0xff', '%$pm'),\n        'LAHmg': function _0xf53634(_0x31f81e, _0x2b88d6) {\n            return _0x31f81e / _0x2b88d6;\n        },\n        'iNVZt': function _0x42782f(_0x498399, _0x1ff31f) {\n            return _0x498399 * _0x1ff31f;\n        },\n        'KeUhs': function _0x4f5f46(_0x58deee, _0x5411e8) {\n            return _0x58deee | _0x5411e8;\n        },\n        'iDGXG': function _0x56bae5(_0x2ee4ad, _0x1ffc0b) {\n            return _0x2ee4ad < _0x1ffc0b;\n        },\n        'RCCOE': _0x2246('0x100', 'yY#5'),\n        'pcmCh': function _0x3f1002(_0x21b674, _0x1151da) {\n            return _0x21b674 * _0x1151da;\n        }\n    };\n    var _0x56b7e7 = _grsa_JS\n      , _0x4d4d0e = _0x56b7e7[_0x2246('0x101', 'fVzz')]\n      , _0x4d8c6c = _0x4d4d0e[_0x2246('0x102', '@1Ws')]\n      , _0xd7718a = _0x4d4d0e['WordArray']\n      , _0x2bac3c = _0x4d4d0e[_0x2246('0x103', 'Who^')]\n      , _0x1e56ba = _0x56b7e7[_0x2246('0x104', 'DK[&')]['Base64']\n      , _0x34a19e = _0x56b7e7[_0x2246('0x105', 'MVsm')][_0x2246('0x106', 'LKuf')]\n      , _0x48ba0c = _0x4d4d0e['Cipher'] = _0x2bac3c[_0x2246('0x107', 'DK[&')]({\n        'cfg': _0x4d8c6c[_0x2246('0x108', 'wMtP')](),\n        'createEncryptor': function(_0x5bac91, _0x2cac6f) {\n            return this['create'](this['_ENC_XFORM_MODE'], _0x5bac91, _0x2cac6f);\n        },\n        'createDecryptor': function(_0x426983, _0xe8bce8) {\n            var _0x208394 = {\n                'eWxaf': function _0x20758d(_0x1740f8, _0x2e5254) {\n                    return _0x1740f8 !== _0x2e5254;\n                }\n            };\n            if (_0x208394[_0x2246('0x109', 'E[6X')](_0x2246('0x10a', 'sy^o'), _0x2246('0x10b', 'UwHa'))) {\n                var _0x4e0ac1 = this[_0x2246('0x10c', 'JdVK')]();\n                _0x4e0ac1[_0x2246('0x10d', 'RQ2o')][_0x2246('0x10e', 'Z2VK')](_0x4e0ac1, arguments);\n                return _0x4e0ac1;\n            } else {\n                return this[_0x2246('0x10f', 'Km(E')](this['_DEC_XFORM_MODE'], _0x426983, _0xe8bce8);\n            }\n        },\n        'init': function(_0x3e31a8, _0x46a213, _0x490ce2) {\n            var _0x1aedce = {\n                'lMfxp': 'zjp',\n                'pcfUJ': _0x2246('0x110', 'BQ5p')\n            };\n            if (_0x1aedce[_0x2246('0x111', 'DK[&')] === _0x1aedce['pcfUJ']) {\n                var _0x282067 = _0xd7718a[_0x2246('0x112', 'O^50')](c['slice'](0x2, 0x4));\n                c[_0x2246('0x113', 'fniG')](0x0, 0x4);\n                _0x46a213['sigBytes'] -= 0x10;\n            } else {\n                this['cfg'] = this[_0x2246('0x114', '0I#o')][_0x2246('0x115', 'BQ5p')](_0x490ce2);\n                this[_0x2246('0x116', '4mX2')] = _0x3e31a8;\n                this['_key'] = _0x46a213;\n                this['reset']();\n            }\n        },\n        'reset': function() {\n            _0x2bac3c[_0x2246('0x117', 's&Ar')][_0x2246('0x118', 'Yb4P')](this);\n            this[_0x2246('0x119', '4mX2')]();\n        },\n        'process': function(_0x5b8032) {\n            this['_append'](_0x5b8032);\n            return this[_0x2246('0x11a', 'Z2VK')]();\n        },\n        'finalize': function(_0x214e78) {\n            _0x214e78 && this[_0x2246('0x11b', 'OMJW')](_0x214e78);\n            return this[_0x2246('0x11c', '0I#o')]();\n        },\n        'keySize': 0x4,\n        'ivSize': 0x4,\n        '_ENC_XFORM_MODE': 0x1,\n        '_DEC_XFORM_MODE': 0x2,\n        '_createHelper': function() {\n            return function(_0x378f17) {\n                var _0x4209c0 = {\n                    'aCeQO': function _0x5865cc(_0x421667, _0x3e87b1) {\n                        return _0x199175[_0x2246('0x11d', '4VZ$')](_0x421667, _0x3e87b1);\n                    }\n                };\n                return {\n                    'encrypt': function(_0x1b6c2d, _0x47e495, _0x3bce6a) {\n                        return (_0x4209c0[_0x2246('0x11e', 'E&5L')](_0x2246('0x11f', 'R*c1'), typeof _0x47e495) ? _0x19fd30 : _0x3e58da)[_0x2246('0x120', '4mX2')](_0x378f17, _0x1b6c2d, _0x47e495, _0x3bce6a);\n                    },\n                    'decrypt': function(_0x4a3e2d, _0x315f76, _0x339745) {\n                        var _0x98fde8 = {\n                            'qAjYA': function _0x23292a(_0x297b21, _0x57005d) {\n                                return _0x297b21 === _0x57005d;\n                            },\n                            'KaPgb': 'YHp',\n                            'PFFfX': _0x2246('0x121', 'sMzu'),\n                            'kDRTL': function _0xd8e7ae(_0x296e5a, _0x1093b6) {\n                                return _0x296e5a == _0x1093b6;\n                            },\n                            'tINxD': 'string'\n                        };\n                        if (_0x98fde8[_0x2246('0x122', 'E&5L')](_0x98fde8[_0x2246('0x123', 'RQ2o')], _0x98fde8[_0x2246('0x124', '0J6f')])) {\n                            this[_0x2246('0x125', 'fVzz')] = new _0x1e56ba[(_0x2246('0x13', 'BQ5p'))]();\n                            this[_0x2246('0x126', '7IfV')] = 0x0;\n                        } else {\n                            return (_0x98fde8[_0x2246('0x127', 'RQ2o')](_0x98fde8[_0x2246('0x128', 'GL3Q')], typeof _0x315f76) ? _0x19fd30 : _0x3e58da)[_0x2246('0x129', '4mX2')](_0x378f17, _0x4a3e2d, _0x315f76, _0x339745);\n                        }\n                    }\n                };\n            }\n            ;\n        }()\n    });\n    _0x4d4d0e[_0x2246('0x12a', 'gc3h')] = _0x48ba0c['extend']({\n        '_doFinalize': function() {\n            return this[_0x2246('0x12b', 'U%Bx')](!0x0);\n        },\n        'blockSize': 0x1\n    });\n    var _0x5b4e76 = _0x56b7e7[_0x2246('0x12c', 'wMtP')] = {}\n      , _0x20b1c5 = _0x4d4d0e[_0x2246('0x12d', '!2eC')] = _0x4d8c6c[_0x2246('0x12e', 'RQ2o')]({\n        'createEncryptor': function(_0xcc01be, _0xdff2d) {\n            return this[_0x2246('0x12f', 'wMtP')][_0x2246('0x130', 'hGD!')](_0xcc01be, _0xdff2d);\n        },\n        'createDecryptor': function(_0x278e8a, _0x3893f5) {\n            return this['Decryptor'][_0x2246('0x131', ')q#9')](_0x278e8a, _0x3893f5);\n        },\n        'init': function(_0x1bfc4a, _0x3fc707) {\n            this['_cipher'] = _0x1bfc4a;\n            this[_0x2246('0x132', 'N55v')] = _0x3fc707;\n        }\n    })\n      , _0x5b4e76 = _0x5b4e76[_0x2246('0x133', 'MVsm')] = function() {\n        function _0x586618(_0x3bb67a, _0x3da5f9, _0x8776b2) {\n            var _0x5c96b5 = {\n                'rJstH': _0x2246('0x134', 'gc3h'),\n                'ugetJ': function _0x5308c8(_0x2ee05b, _0x427da9) {\n                    return _0x2ee05b + _0x427da9;\n                },\n                'NRgce': function _0x23898e(_0x4a53a8, _0x288019) {\n                    return _0x4a53a8 < _0x288019;\n                },\n                'RIVeo': function _0x7baff6(_0x526edd, _0x32f77b) {\n                    return _0x526edd(_0x32f77b);\n                },\n                'hfDdE': function _0x3a9ecb(_0x1a849f, _0x4e594e) {\n                    return _0x1a849f * _0x4e594e;\n                },\n                'Ocsif': function _0x237e65(_0x3bd622, _0xca1b5) {\n                    return _0x3bd622 * _0xca1b5;\n                },\n                'zjOjM': function _0x4f2062(_0x23813b, _0xa9e5e6) {\n                    return _0x23813b | _0xa9e5e6;\n                },\n                'GdzxU': function _0x403875(_0x135c23, _0x48fead) {\n                    return _0x135c23 * _0x48fead;\n                },\n                'XLiyh': function _0x398fe2(_0x466860) {\n                    return _0x466860();\n                }\n            };\n            if (_0x5c96b5[_0x2246('0x135', 'O^50')] === _0x5c96b5['rJstH']) {\n                var _0x543713 = this[_0x2246('0x136', 'fDXQ')];\n                _0x543713 ? this['_iv'] = _0x3c7fe9 : _0x543713 = this[_0x2246('0x137', 'DK[&')];\n                for (var _0x490512 = 0x0; _0x490512 < _0x8776b2; _0x490512++)\n                    _0x3bb67a[_0x5c96b5[_0x2246('0x138', '[wS8')](_0x3da5f9, _0x490512)] ^= _0x543713[_0x490512];\n            } else {\n                for (var _0x553feb = [], _0x17c7a4 = function(_0x1be58e) {\n                    var ziaKOb = {\n                        'UHRQQ': function _0x5b4340(_0x49df68, _0x413d1a) {\n                            return _0x49df68 + _0x413d1a;\n                        },\n                        'drVcF': function _0x85a378(_0x2a34b5, _0x4079c8) {\n                            return _0x2a34b5 & _0x4079c8;\n                        },\n                        'FKvns': function _0x5740e8(_0x3eb4fa, _0x270b25) {\n                            return _0x3eb4fa >> _0x270b25;\n                        },\n                        'dhbgk': function _0xb77a8d(_0x5e1fbe, _0x4d7c9c) {\n                            return _0x5e1fbe * _0x4d7c9c;\n                        },\n                        'YYpbF': function _0x410d8b(_0x1e4f4d, _0x986113) {\n                            return _0x1e4f4d * _0x986113;\n                        },\n                        'YdMWA': function _0x573059(_0x303d6d, _0x2b813c) {\n                            return _0x303d6d + _0x2b813c;\n                        },\n                        'EUmhf': function _0x46955f(_0x400e49, _0x3a33ca) {\n                            return _0x400e49 / _0x3a33ca;\n                        },\n                        'KqvvG': function _0x35cfed(_0x501021, _0x52494c) {\n                            return _0x501021 & _0x52494c;\n                        }\n                    };\n                    var _0x462c73 = 0x3ade68b1;\n                    return function() {\n                        _0x462c73 = ziaKOb['UHRQQ'](0x9069 * ziaKOb['drVcF'](_0x462c73, 0xffff), ziaKOb['FKvns'](_0x462c73, 0x10)) & 0xffffffff;\n                        _0x1be58e = ziaKOb[_0x2246('0x139', '4mX2')](ziaKOb[_0x2246('0x13a', 'RQ2o')](0x4650, ziaKOb[_0x2246('0x13b', 'N55v')](_0x1be58e, 0xffff)) + ziaKOb[_0x2246('0x13c', 'R*c1')](_0x1be58e, 0x10), 0xffffffff);\n                        return ziaKOb[_0x2246('0x13d', 'DK[&')](ziaKOb[_0x2246('0x13e', '%$pm')](ziaKOb[_0x2246('0x13f', 'KuWu')](ziaKOb[_0x2246('0x140', 'MVsm')]((_0x462c73 << 0x10) + _0x1be58e, 0xffffffff), 0x100000000), 0.5), 0.5 < _0x3c7fe9[_0x2246('0x141', 'lav3')]() ? 0x1 : -0x1);\n                    }\n                    ;\n                }, _0x56edf5 = 0x0, _0x1ac7ff; _0x5c96b5['NRgce'](_0x56edf5, _0x3bb67a); _0x56edf5 += 0x4) {\n                    var _0x5cb770 = _0x5c96b5['RIVeo'](_0x17c7a4, _0x5c96b5[_0x2246('0x142', '0I#o')](0x100000000, _0x1ac7ff || _0x3c7fe9[_0x2246('0x143', '0J6f')]()));\n                    _0x1ac7ff = _0x5c96b5['Ocsif'](0x3ade67b7, _0x5cb770());\n                    _0x553feb[_0x2246('0x144', 'fDXQ')](_0x5c96b5['zjOjM'](_0x5c96b5['GdzxU'](0x100000000, _0x5c96b5['XLiyh'](_0x5cb770)), 0x0));\n                }\n                return new _0x1e56ba[(_0x2246('0xf0', ']2BX'))](_0x553feb,_0x3bb67a);\n            }\n        }\n        var _0x28494e = _0x20b1c5[_0x2246('0x145', '3j7z')]();\n        _0x28494e[_0x2246('0x146', 'ORle')] = _0x28494e['extend']({\n            'processBlock': function(_0x10fe38, _0x305e7c) {\n                var _0x215b49 = this[_0x2246('0x147', '&59Q')]\n                  , _0x3fab6f = _0x215b49[_0x2246('0x148', 'wMtP')];\n                _0x586618['call'](this, _0x10fe38, _0x305e7c, _0x3fab6f);\n                _0x215b49[_0x2246('0x149', 'E&PI')](_0x10fe38, _0x305e7c);\n                this[_0x2246('0x48', 'BQ5p')] = _0x10fe38[_0x2246('0x14a', 'Yb4P')](_0x305e7c, _0x305e7c + _0x3fab6f);\n            }\n        });\n        _0x28494e[_0x2246('0x14b', 'GL3Q')] = _0x28494e[_0x2246('0x14c', 'Km(E')]({\n            'processBlock': function(_0x5c0605, _0x3a7be6) {\n                var _0x4f291e = this[_0x2246('0x14d', 'yY#5')]\n                  , _0x72815 = _0x4f291e[_0x2246('0x14e', 'cs*4')]\n                  , _0xe89ca3 = _0x5c0605[_0x2246('0x14f', 'rk]M')](_0x3a7be6, _0x199175['eobnX'](_0x3a7be6, _0x72815));\n                _0x4f291e[_0x2246('0x150', 's&Ar')](_0x5c0605, _0x3a7be6);\n                _0x586618['call'](this, _0x5c0605, _0x3a7be6, _0x72815);\n                this[_0x2246('0x151', ')q#9')] = _0xe89ca3;\n            }\n        });\n        return _0x28494e;\n    }()\n      , _0x3f4bd9 = (_0x56b7e7[_0x2246('0x152', 'sy^o')] = {})[_0x2246('0x153', '0I#o')] = {\n        'pad': function(_0xdd064b, _0x2ee6af) {\n            for (var _0x650b29 = 0x4 * _0x2ee6af, _0x650b29 = _0x199175[_0x2246('0x154', ']2BX')](_0x650b29, _0xdd064b[_0x2246('0x155', 'sMzu')] % _0x650b29), _0x36b08b = _0x199175[_0x2246('0x156', 'E&PI')](_0x199175[_0x2246('0x157', 'wMtP')](_0x199175[_0x2246('0x158', 'O^50')](_0x650b29 << 0x18, _0x199175[_0x2246('0x159', 's&Ar')](_0x650b29, 0x10)), _0x199175[_0x2246('0x15a', '3j7z')](_0x650b29, 0x8)), _0x650b29), _0x51f95c = [], _0x2e88a0 = 0x0; _0x2e88a0 < _0x650b29; _0x2e88a0 += 0x4)\n                _0x51f95c['push'](_0x36b08b);\n            _0x650b29 = _0xd7718a[_0x2246('0x15b', 'Yb4P')](_0x51f95c, _0x650b29);\n            _0xdd064b[_0x2246('0x15c', 'sMzu')](_0x650b29);\n        },\n        'unpad': function(_0x508d17) {\n            var _0x586848 = {\n                'EQafQ': _0x2246('0x15d', 'OMJW'),\n                'Ovfam': function _0x5b17fb(_0x26f8aa, _0x5d5e52) {\n                    return _0x26f8aa >>> _0x5d5e52;\n                },\n                'FlTHk': function _0x45546a(_0x4c9b6e, _0x4a0228) {\n                    return _0x4c9b6e - _0x4a0228;\n                }\n            };\n            if ('sIz' !== _0x586848[_0x2246('0x15e', 'KuWu')]) {\n                this[_0x2246('0x15f', 'gc3h')](_0x508d17);\n                this[_0x2246('0x160', ']2BX')]();\n                return this;\n            } else {\n                _0x508d17['sigBytes'] -= _0x508d17[_0x2246('0x161', 'fVzz')][_0x586848[_0x2246('0x162', 'sy^o')](_0x586848[_0x2246('0x163', 'fVzz')](_0x508d17['sigBytes'], 0x1), 0x2)] & 0xff;\n            }\n        }\n    };\n    _0x4d4d0e['BlockCipher'] = _0x48ba0c[_0x2246('0x164', '!2eC')]({\n        'cfg': _0x48ba0c[_0x2246('0x165', 'LKuf')]['extend']({\n            'mode': _0x5b4e76,\n            'padding': _0x3f4bd9\n        }),\n        'reset': function() {\n            var _0xcff7d6 = {\n                'SusNa': function _0x3c7dd2(_0x59942c, _0x19bbfc) {\n                    return _0x59942c === _0x19bbfc;\n                },\n                'CdlPy': 'ZdK',\n                'BbfPv': _0x2246('0x166', '0I#o'),\n                'NicUU': function _0x3bf488(_0x5ad99d, _0xcb9c94) {\n                    return _0x5ad99d == _0xcb9c94;\n                }\n            };\n            if (_0xcff7d6['SusNa'](_0xcff7d6[_0x2246('0x167', '3j7z')], _0xcff7d6['BbfPv'])) {\n                for (var _0x5d16ca in _0x2ff0bb)\n                    _0x2ff0bb[_0x2246('0x168', 'U%Bx')](_0x5d16ca) && (this[_0x5d16ca] = _0x2ff0bb[_0x5d16ca]);\n                _0x2ff0bb['hasOwnProperty'](_0x2246('0x169', 'wMtP')) && (this['toString'] = _0x2ff0bb[_0x2246('0x16a', '[wS8')]);\n            } else {\n                _0x48ba0c['reset']['call'](this);\n                var _0x2ff0bb = this[_0x2246('0x16b', 'U%Bx')]\n                  , _0x3b81f3 = _0x2ff0bb['iv']\n                  , _0x2ff0bb = _0x2ff0bb[_0x2246('0x16c', 'O^50')];\n                if (_0xcff7d6[_0x2246('0x16d', 's&Ar')](this[_0x2246('0x16e', '4VZ$')], this['_ENC_XFORM_MODE']))\n                    var _0x43863b = _0x2ff0bb['createEncryptor'];\n                else\n                    _0x43863b = _0x2ff0bb['createDecryptor'],\n                    this[_0x2246('0x16f', ']2BX')] = 0x1;\n                this[_0x2246('0x170', 'O^50')] && _0xcff7d6['NicUU'](this['_mode']['__creator'], _0x43863b) ? this[_0x2246('0x171', 'gc3h')][_0x2246('0x17', 'lav3')](this, _0x3b81f3 && _0x3b81f3[_0x2246('0x172', 'yY#5')]) : (this['_mode'] = _0x43863b['call'](_0x2ff0bb, this, _0x3b81f3 && _0x3b81f3[_0x2246('0x173', '0I#o')]),\n                this[_0x2246('0x174', '7IfV')][_0x2246('0x175', '&59Q')] = _0x43863b);\n            }\n        },\n        '_doProcessBlock': function(_0x2dfb21, _0x5272ac) {\n            this['_mode'][_0x2246('0x176', 'OMJW')](_0x2dfb21, _0x5272ac);\n        },\n        '_doFinalize': function() {\n            var _0xaba0e5 = {\n                'dUwQS': function _0x4dfff5(_0x51e71e, _0x559791) {\n                    return _0x51e71e === _0x559791;\n                },\n                'sUxMp': _0x2246('0x177', '[wS8')\n            };\n            if (_0xaba0e5['dUwQS'](_0xaba0e5['sUxMp'], _0x2246('0x178', 'R*c1'))) {\n                var _0xbcd9f7 = this[_0x2246('0x179', 'hGD!')][_0x2246('0x17a', 'fniG')];\n                if (this[_0x2246('0x17b', 'Who^')] == this['_ENC_XFORM_MODE']) {\n                    _0xbcd9f7['pad'](this[_0x2246('0xbc', '3j7z')], this[_0x2246('0x17c', 'Yb4P')]);\n                    var _0x103975 = this['_process'](!0x0);\n                } else\n                    _0x103975 = this[_0x2246('0x17d', 'Km(E')](!0x0),\n                    _0xbcd9f7[_0x2246('0x17e', 'Who^')](_0x103975);\n                return _0x103975;\n            } else {\n                var _0x46be1b = _0x2246('0x17f', '!2eC')['split']('|')\n                  , _0x4ebdce = 0x0;\n                while (!![]) {\n                    switch (_0x46be1b[_0x4ebdce++]) {\n                    case '0':\n                        _0x445b52 = this['cfg'][_0x2246('0x180', 'cs*4')](_0x445b52);\n                        continue;\n                    case '1':\n                        _0x19fd30[_0x2246('0x181', '7IfV')](_0x56b7e7);\n                        continue;\n                    case '2':\n                        _0x445b52['iv'] = _0x56b7e7['iv'];\n                        continue;\n                    case '3':\n                        return _0x19fd30;\n                    case '4':\n                        _0x56b7e7 = _0x445b52[_0x2246('0x182', 'lav3')][_0x2246('0x183', 'MVsm')](_0x56b7e7, _0x19fd30[_0x2246('0x184', 'fniG')], _0x19fd30[_0x2246('0x185', 'E[6X')]);\n                        continue;\n                    case '5':\n                        _0x19fd30 = _0xbcd9f7[_0x2246('0x186', 'OMJW')][_0x2246('0x187', 'rk]M')](this, _0x19fd30, _0x103975, _0x56b7e7[_0x2246('0x188', 'DK[&')], _0x445b52);\n                        continue;\n                    }\n                    break;\n                }\n            }\n        },\n        'blockSize': 0x4\n    });\n    var _0x445b52 = _0x4d4d0e[_0x2246('0x189', 'Z2VK')] = _0x4d8c6c[_0x2246('0x18a', 'LKuf')]({\n        'init': function(_0x5c42da) {\n            this[_0x2246('0x18b', '@1Ws')](_0x5c42da);\n        },\n        'toString': function(_0x5828d7) {\n            var _0x311b5f = {\n                'unWge': _0x2246('0x18c', 'MVsm'),\n                'kqrna': 'Tld',\n                'PpPVb': function _0x29f610(_0x103f93, _0x4d21d2) {\n                    return _0x103f93(_0x4d21d2);\n                },\n                'eVXdg': function _0x18eabc(_0x4c6b82, _0x95bd91) {\n                    return _0x4c6b82 * _0x95bd91;\n                },\n                'CHCNF': function _0x348998(_0x2a6eb7, _0x17cd37) {\n                    return _0x2a6eb7 * _0x17cd37;\n                },\n                'sKttF': function _0x505e81(_0x44f159) {\n                    return _0x44f159();\n                },\n                'PoMPF': function _0x4a591c(_0x2843bd, _0x31d83b) {\n                    return _0x2843bd | _0x31d83b;\n                }\n            };\n            if (_0x311b5f[_0x2246('0x18d', 'E&PI')] !== _0x311b5f[_0x2246('0x18e', '4mX2')]) {\n                return (_0x5828d7 || this[_0x2246('0x18f', '%$pm')])[_0x2246('0x190', 'fVzz')](this);\n            } else {\n                var _0x49f336 = _0x311b5f[_0x2246('0x191', 'JdVK')](e, _0x311b5f['eVXdg'](0x100000000, f || _0x3c7fe9['random']()));\n                f = _0x311b5f['CHCNF'](0x3ade67b7, _0x311b5f[_0x2246('0x192', 'gc3h')](_0x49f336));\n                _0x19fd30['push'](_0x311b5f['PoMPF'](0x100000000 * _0x311b5f[_0x2246('0x193', 'BQ5p')](_0x49f336), 0x0));\n            }\n        }\n    })\n      , _0x5b4e76 = (_0x56b7e7[_0x2246('0x194', 'JdVK')] = {})['OpenSSL'] = {\n        'stringify': function(_0x4db03c) {\n            var _0x17b7fe = _0x4db03c[_0x2246('0x195', 'N55v')];\n            _0x4db03c = _0x4db03c[_0x2246('0x196', '4VZ$')];\n            return (_0x4db03c ? _0xd7718a['create']([0x53616c74, 0x65645f5f])['concat'](_0x4db03c)[_0x2246('0x197', 'Z2VK')](_0x17b7fe) : _0x17b7fe)['toString'](_0x1e56ba);\n        },\n        'parse': function(_0x198b4c) {\n            _0x198b4c = _0x1e56ba['parse'](_0x198b4c);\n            var _0x483839 = _0x198b4c[_0x2246('0x198', '4VZ$')];\n            if (_0x199175[_0x2246('0x199', ']2BX')](0x53616c74, _0x483839[0x0]) && _0x199175['RSqKX'](0x65645f5f, _0x483839[0x1])) {\n                if (_0x199175[_0x2246('0x19a', 'UwHa')]('cuf', _0x199175[_0x2246('0x19b', '%$pm')])) {\n                    var _0x5a8c21 = this[_0x2246('0x19c', 'MVsm')]\n                      , _0x3a3a6b = _0x5a8c21[_0x2246('0x19d', 'U%Bx')]\n                      , _0x584c0f = _0x5a8c21[_0x2246('0x19e', 'gc3h')]\n                      , _0xe4ebbb = this[_0x2246('0xbe', 'ORle')]\n                      , _0x15760d = _0x199175[_0x2246('0x19f', 'KuWu')](_0x584c0f, _0x199175[_0x2246('0x1a0', '0I#o')](0x4, _0xe4ebbb))\n                      , _0x15760d = _0x198b4c ? _0x3c7fe9[_0x2246('0x1a1', 'yY#5')](_0x15760d) : _0x3c7fe9[_0x2246('0x1a2', 'wMtP')](_0x199175[_0x2246('0x1a3', 'E&5L')](_0x15760d, 0x0) - this[_0x2246('0x1a4', 'yY#5')], 0x0);\n                    _0x198b4c = _0x15760d * _0xe4ebbb;\n                    _0x584c0f = _0x3c7fe9[_0x2246('0x1a5', 'gc3h')](0x4 * _0x198b4c, _0x584c0f);\n                    if (_0x198b4c) {\n                        for (var _0x37c1be = 0x0; _0x199175[_0x2246('0x1a6', 'O^50')](_0x37c1be, _0x198b4c); _0x37c1be += _0xe4ebbb)\n                            this[_0x2246('0x1a7', 'fDXQ')](_0x3a3a6b, _0x37c1be);\n                        _0x37c1be = _0x3a3a6b[_0x2246('0x1a8', '7IfV')](0x0, _0x198b4c);\n                        _0x5a8c21['sigBytes'] -= _0x584c0f;\n                    }\n                    return new _0x1e56ba[(_0x2246('0x1a9', 'ORle'))](_0x37c1be,_0x584c0f);\n                } else {\n                    var _0x27fb25 = _0xd7718a['create'](_0x483839['slice'](0x2, 0x4));\n                    _0x483839['splice'](0x0, 0x4);\n                    _0x198b4c[_0x2246('0x1aa', '0I#o')] -= 0x10;\n                }\n            }\n            return _0x445b52[_0x2246('0x1ab', 'rk]M')]({\n                'ciphertext': _0x198b4c,\n                'salt': _0x19fd30\n            });\n        }\n    }\n      , _0x3e58da = _0x4d4d0e['SerializableCipher'] = _0x4d8c6c['extend']({\n        'cfg': _0x4d8c6c[_0x2246('0x115', 'BQ5p')]({\n            'format': _0x5b4e76\n        }),\n        'encrypt': function(_0x164335, _0x4bcdf7, _0x312ff7, _0x193b37) {\n            _0x193b37 = this[_0x2246('0x16b', 'U%Bx')][_0x2246('0x18', 'KuWu')](_0x193b37);\n            var _0x3ab339 = _0x164335['createEncryptor'](_0x312ff7, _0x193b37);\n            _0x4bcdf7 = _0x3ab339[_0x2246('0x1ac', '0J6f')](_0x4bcdf7);\n            _0x3ab339 = _0x3ab339[_0x2246('0x1ad', 'Jsmq')];\n            return _0x445b52[_0x2246('0x1ae', '4mX2')]({\n                'ciphertext': _0x4bcdf7,\n                'key': _0x312ff7,\n                'iv': _0x3ab339['iv'],\n                'algorithm': _0x164335,\n                'mode': _0x3ab339['mode'],\n                'padding': _0x3ab339['padding'],\n                'blockSize': _0x164335['blockSize'],\n                'formatter': _0x193b37[_0x2246('0x1af', 'O^50')]\n            });\n        },\n        'decrypt': function(_0x2e71ed, _0x4a138b, _0x27d655, _0xce4ad9) {\n            var _0x44a44e = {\n                'yZRmU': function _0x57da23(_0x2ceaf2, _0x136d93) {\n                    return _0x2ceaf2 !== _0x136d93;\n                },\n                'GMrSF': _0x2246('0x1b0', 'Km(E')\n            };\n            if (_0x44a44e[_0x2246('0x1b1', 'RQ2o')](_0x44a44e[_0x2246('0x1b2', 'N55v')], _0x44a44e['GMrSF'])) {\n                this['_cipher'] = _0x2e71ed;\n                this['_iv'] = _0x4a138b;\n            } else {\n                _0xce4ad9 = this[_0x2246('0x179', 'hGD!')]['extend'](_0xce4ad9);\n                _0x4a138b = this[_0x2246('0x1b3', '&59Q')](_0x4a138b, _0xce4ad9[_0x2246('0x1b4', '0I#o')]);\n                return _0x2e71ed['createDecryptor'](_0x27d655, _0xce4ad9)[_0x2246('0x1b5', '!2eC')](_0x4a138b[_0x2246('0x1b6', 'GL3Q')]);\n            }\n        },\n        '_parse': function(_0xbba260, _0x247b40) {\n            return _0x199175[_0x2246('0x1b7', 'R*c1')] == typeof _0xbba260 ? _0x247b40[_0x2246('0x1b8', 'LKuf')](_0xbba260, this) : _0xbba260;\n        }\n    })\n      , _0x56b7e7 = (_0x56b7e7[_0x2246('0x1b9', '&59Q')] = {})['OpenSSL'] = {\n        'execute': function(_0x4b8a2e, _0x3de214, _0x60ce5b, _0x5596ac) {\n            _0x5596ac || (_0x5596ac = _0xd7718a[_0x2246('0x1ba', '&59Q')](0x8));\n            _0x4b8a2e = _0x34a19e['create']({\n                'keySize': _0x199175['eobnX'](_0x3de214, _0x60ce5b)\n            })['compute'](_0x4b8a2e, _0x5596ac);\n            _0x60ce5b = _0xd7718a[_0x2246('0x1bb', 'sy^o')](_0x4b8a2e[_0x2246('0x1bc', 'sy^o')][_0x2246('0x1bd', 'LKuf')](_0x3de214), _0x199175['iNVZt'](0x4, _0x60ce5b));\n            _0x4b8a2e[_0x2246('0x1be', 'UwHa')] = _0x199175[_0x2246('0x1bf', 'U%Bx')](0x4, _0x3de214);\n            return _0x445b52['create']({\n                'key': _0x4b8a2e,\n                'iv': _0x60ce5b,\n                'salt': _0x5596ac\n            });\n        }\n    }\n      , _0x19fd30 = _0x4d4d0e[_0x2246('0x1c0', 'yY#5')] = _0x3e58da[_0x2246('0x1c1', 'E&PI')]({\n        'cfg': _0x3e58da[_0x2246('0x1c2', 'N55v')]['extend']({\n            'kdf': _0x56b7e7\n        }),\n        'encrypt': function(_0x52ef5f, _0x3d1208, _0xceea60, _0x2a34c8) {\n            var _0x29a2d1 = {\n                'ajBJE': function _0x405f69(_0x89eddf, _0x1a0d80) {\n                    return _0x89eddf === _0x1a0d80;\n                },\n                'ZaGVM': _0x2246('0x1c3', 'cs*4'),\n                'TyMMF': function _0x506eea(_0x497c34, _0x30feb5) {\n                    return _0x497c34 & _0x30feb5;\n                },\n                'hXOPF': function _0x6d39a(_0x161ae5, _0x1a4ac4) {\n                    return _0x161ae5 * _0x1a4ac4;\n                },\n                'LBHYM': function _0x3b8faf(_0x56c57f, _0x61b057) {\n                    return _0x56c57f >> _0x61b057;\n                },\n                'IXgIS': function _0x487196(_0x2e4768, _0x19d594) {\n                    return _0x2e4768 + _0x19d594;\n                },\n                'kgBuK': function _0x4cc65e(_0x715ae9, _0x2c6c6d) {\n                    return _0x715ae9 & _0x2c6c6d;\n                },\n                'ZOOOz': function _0xda9d47(_0x401de5, _0x23a956) {\n                    return _0x401de5 + _0x23a956;\n                },\n                'Ssnot': function _0x4d12cd(_0x50243e, _0x109dc3) {\n                    return _0x50243e << _0x109dc3;\n                },\n                'bWaQe': function _0x1e3a6b(_0xcf2651, _0x4082a0) {\n                    return _0xcf2651 < _0x4082a0;\n                }\n            };\n            if (_0x29a2d1[_0x2246('0x1c4', '4VZ$')](_0x29a2d1['ZaGVM'], _0x2246('0x1c5', 'OMJW'))) {\n                var _0x563f71 = _0x2246('0x1c6', 'DK[&')['split']('|')\n                  , _0x860435 = 0x0;\n                while (!![]) {\n                    switch (_0x563f71[_0x860435++]) {\n                    case '0':\n                        _0x2a34c8['iv'] = _0xceea60['iv'];\n                        continue;\n                    case '1':\n                        _0xceea60 = _0x2a34c8['kdf'][_0x2246('0x1c7', '3j7z')](_0xceea60, _0x52ef5f[_0x2246('0x1c8', 'gc3h')], _0x52ef5f[_0x2246('0x1c9', 's&Ar')]);\n                        continue;\n                    case '2':\n                        _0x52ef5f[_0x2246('0x1ca', 'OMJW')](_0xceea60);\n                        continue;\n                    case '3':\n                        _0x2a34c8 = this['cfg'][_0x2246('0x1cb', 'E&5L')](_0x2a34c8);\n                        continue;\n                    case '4':\n                        _0x52ef5f = _0x3e58da[_0x2246('0x1cc', 'ORle')][_0x2246('0x1cd', 'R*c1')](this, _0x52ef5f, _0x3d1208, _0xceea60['key'], _0x2a34c8);\n                        continue;\n                    case '5':\n                        return _0x52ef5f;\n                    }\n                    break;\n                }\n            } else {\n                _0x3e58da = _0x29a2d1['TyMMF'](_0x29a2d1[_0x2246('0x1ce', 'lav3')](0x9069, _0x3e58da & 0xffff) + _0x29a2d1[_0x2246('0x1cf', 'KuWu')](_0x3e58da, 0x10), 0xffffffff);\n                e = _0x29a2d1['TyMMF'](_0x29a2d1['IXgIS'](_0x29a2d1[_0x2246('0x1ce', 'lav3')](0x4650, _0x29a2d1[_0x2246('0x1d0', 'N55v')](e, 0xffff)), _0x29a2d1[_0x2246('0x1d1', 'yY#5')](e, 0x10)), 0xffffffff);\n                return ((_0x29a2d1[_0x2246('0x1d2', 'yY#5')](_0x29a2d1[_0x2246('0x1d3', 'fniG')](_0x3e58da, 0x10), e) & 0xffffffff) / 0x100000000 + 0.5) * (_0x29a2d1[_0x2246('0x1d4', 'E&PI')](0.5, _0x3c7fe9[_0x2246('0xfd', 'E&PI')]()) ? 0x1 : -0x1);\n            }\n        },\n        'decrypt': function(_0x2aa612, _0x82c5ac, _0x4ecd3f, _0xad038b) {\n            var _0x415bc0 = '3|2|4|1|0'[_0x2246('0x1d5', 's&Ar')]('|')\n              , _0x3312ff = 0x0;\n            while (!![]) {\n                switch (_0x415bc0[_0x3312ff++]) {\n                case '0':\n                    return _0x3e58da[_0x2246('0x1d6', 'OMJW')][_0x2246('0x1d7', 'gc3h')](this, _0x2aa612, _0x82c5ac, _0x4ecd3f['key'], _0xad038b);\n                case '1':\n                    _0xad038b['iv'] = _0x4ecd3f['iv'];\n                    continue;\n                case '2':\n                    _0x82c5ac = this[_0x2246('0x1d8', 'LKuf')](_0x82c5ac, _0xad038b[_0x2246('0x1d9', 'DK[&')]);\n                    continue;\n                case '3':\n                    _0xad038b = this[_0x2246('0x179', 'hGD!')][_0x2246('0x1da', 'sy^o')](_0xad038b);\n                    continue;\n                case '4':\n                    _0x4ecd3f = _0xad038b[_0x2246('0x1db', '0J6f')]['execute'](_0x4ecd3f, _0x2aa612[_0x2246('0x1dc', 'sy^o')], _0x2aa612[_0x2246('0x1dd', '!2eC')], _0x82c5ac[_0x2246('0x1de', 'DK[&')]);\n                    continue;\n                }\n                break;\n            }\n        }\n    });\n}();\n_grsa_JS['mode']['ECB'] = function() {\n    var _0x58635e = _grsa_JS[_0x2246('0x1df', 'N55v')][_0x2246('0x1e0', 'DK[&')][_0x2246('0x1e1', 'sMzu')]();\n    _0x58635e['Encryptor'] = _0x58635e[_0x2246('0x1e2', ')q#9')]({\n        'processBlock': function(_0x31ec72, _0x34a54c) {\n            this[_0x2246('0x1e3', 'R*c1')][_0x2246('0x1e4', 'RQ2o')](_0x31ec72, _0x34a54c);\n        }\n    });\n    _0x58635e[_0x2246('0x1e5', 'O^50')] = _0x58635e['extend']({\n        'processBlock': function(_0x8200db, _0x28476d) {\n            this[_0x2246('0x1e6', '0J6f')][_0x2246('0xc8', 'RQ2o')](_0x8200db, _0x28476d);\n        }\n    });\n    return _0x58635e;\n}();\n(function() {\n    var _0x11bbc8 = {\n        'qgSmF': function _0x232b61(_0x108720, _0x11ee40) {\n            return _0x108720 & _0x11ee40;\n        },\n        'jJFLW': function _0x4bec06(_0x4f6bfb, _0x2f7385) {\n            return _0x4f6bfb ^ _0x2f7385;\n        },\n        'mHOHw': function _0xef2f49(_0x2e4d2a, _0x3a15af) {\n            return _0x2e4d2a >>> _0x3a15af;\n        },\n        'Wcpku': function _0x4f023f(_0x4dfe63, _0x211a2f) {\n            return _0x4dfe63 << _0x211a2f;\n        },\n        'kyDGA': function _0x241ebf(_0x5d9293, _0x3d713d) {\n            return _0x5d9293 ^ _0x3d713d;\n        },\n        'SItmA': function _0x3d65b9(_0x1db76c, _0x2cc5b2) {\n            return _0x1db76c << _0x2cc5b2;\n        },\n        'hEsZR': 'ZTc',\n        'TKoLG': 'VzF',\n        'ijeaq': function _0x45a667(_0x22fe22, _0x3ddb01) {\n            return _0x22fe22 >>> _0x3ddb01;\n        },\n        'Jhkqk': function _0x8778b7(_0x439028, _0x45d9ae) {\n            return _0x439028 - _0x45d9ae;\n        },\n        'mbOqT': function _0x1d2b38(_0x4b3c58, _0x17141d) {\n            return _0x4b3c58 % _0x17141d;\n        },\n        'rNklg': function _0x1c8d19(_0x193701, _0x4a9389) {\n            return _0x193701 > _0x4a9389;\n        },\n        'pHZet': function _0x43d7e3(_0x5ea732, _0x4cc212) {\n            return _0x5ea732 === _0x4cc212;\n        },\n        'pUati': _0x2246('0x1e7', 'sy^o'),\n        'yUpzy': 'cuR',\n        'kJcPI': function _0x85fcf6(_0x11d78d, _0x3a26d9) {\n            return _0x11d78d | _0x3a26d9;\n        },\n        'kEjGO': function _0xd72a51(_0x47b5a6, _0x28437b) {\n            return _0x47b5a6 / _0x28437b;\n        },\n        'SWjuT': function _0x561eaf(_0x760403, _0x35f16b) {\n            return _0x760403 << _0x35f16b;\n        },\n        'aUBlz': function _0x2c83eb(_0x7a09b6, _0x32e86f) {\n            return _0x7a09b6 % _0x32e86f;\n        },\n        'BBGsD': function _0x181ea2(_0x116dae, _0x2fe918) {\n            return _0x116dae - _0x2fe918;\n        },\n        'rxZXx': function _0x4a085c(_0xdb24b6, _0x114e45) {\n            return _0xdb24b6 + _0x114e45;\n        },\n        'rqPQA': function _0x2b6047(_0x1e884d, _0x4878a1) {\n            return _0x1e884d % _0x4878a1;\n        },\n        'BOPPX': function _0x54679f(_0x37425f, _0x228503) {\n            return _0x37425f + _0x228503;\n        },\n        'DYWIq': function _0x27ac34(_0x20dcdf, _0x50e848) {\n            return _0x20dcdf + _0x50e848;\n        },\n        'DSojH': function _0x22ee79(_0x34caf7, _0xd7a4e2) {\n            return _0x34caf7 << _0xd7a4e2;\n        },\n        'gydqE': function _0x2b38c8(_0x52c0f3, _0x50981f) {\n            return _0x52c0f3 > _0x50981f;\n        },\n        'wdHci': function _0x581974(_0x1fb489, _0x159826) {\n            return _0x1fb489 + _0x159826;\n        },\n        'pebuH': function _0x34af13(_0x368265, _0x235fd3) {\n            return _0x368265 << _0x235fd3;\n        },\n        'CiiQa': function _0x44913d(_0xeb4734, _0xd3925a) {\n            return _0xeb4734 >>> _0xd3925a;\n        },\n        'GhdBB': function _0x386bc0(_0x3a4e36, _0x5593d8) {\n            return _0x3a4e36 > _0x5593d8;\n        },\n        'TFZnG': function _0x5d7d50(_0x5c2805, _0xd11704) {\n            return _0x5c2805 !== _0xd11704;\n        },\n        'AiVQi': 'qZN',\n        'XtKBH': 'blx',\n        'kyIdP': function _0x2611e6(_0x41c4a9, _0x3534a1) {\n            return _0x41c4a9 > _0x3534a1;\n        },\n        'OJmoz': function _0x4e6205(_0x2c1747, _0x74899a) {\n            return _0x2c1747 & _0x74899a;\n        },\n        'AtFSn': function _0x16a7d9(_0x4e124a, _0x55c5b2) {\n            return _0x4e124a >>> _0x55c5b2;\n        },\n        'wkZTW': function _0x46e0d9(_0x10d4f4, _0x5900de) {\n            return _0x10d4f4 - _0x5900de;\n        },\n        'ztstQ': function _0x4c6c0c(_0x25e515, _0x38ec96) {\n            return _0x25e515 + _0x38ec96;\n        }\n    };\n    function _0xf94091(_0x33ce1c, _0x55bfc0) {\n        var _0x372fde = _0x11bbc8[_0x2246('0x1e8', 'E[6X')](_0x11bbc8[_0x2246('0x1e9', '7IfV')](_0x11bbc8['mHOHw'](this[_0x2246('0x1ea', 'LKuf')], _0x33ce1c), this[_0x2246('0x1eb', 'nArV')]), _0x55bfc0);\n        this['_rBlock'] ^= _0x372fde;\n        this[_0x2246('0x1ec', 'rk]M')] ^= _0x11bbc8[_0x2246('0x1ed', 'rk]M')](_0x372fde, _0x33ce1c);\n    }\n    function _0x2ecaf5(_0x1c4000, _0x491bcc) {\n        var _0x348a00 = _0x11bbc8[_0x2246('0x1ee', '[wS8')](_0x11bbc8[_0x2246('0x1ef', ')q#9')](_0x11bbc8[_0x2246('0x1f0', '4VZ$')](this[_0x2246('0x1f1', 'OMJW')], _0x1c4000), this[_0x2246('0x1f2', 'O^50')]), _0x491bcc);\n        this[_0x2246('0x1f3', '!2eC')] ^= _0x348a00;\n        this[_0x2246('0x1f4', '3j7z')] ^= _0x11bbc8['SItmA'](_0x348a00, _0x1c4000);\n    }\n    var _0x3f8d43 = _grsa_JS\n      , _0x57ed25 = _0x3f8d43['lib']\n      , _0x5a476c = _0x57ed25[_0x2246('0x1f5', 'gc3h')]\n      , _0x57ed25 = _0x57ed25['BlockCipher']\n      , _0xa844 = _0x3f8d43[_0x2246('0x1f6', 'OMJW')]\n      , _0x16031e = [0x39, 0x31, 0x29, 0x21, 0x19, 0x11, 0x9, 0x1, 0x3a, 0x32, 0x2a, 0x22, 0x1a, 0x12, 0xa, 0x2, 0x3b, 0x33, 0x2b, 0x23, 0x1b, 0x13, 0xb, 0x3, 0x3c, 0x34, 0x2c, 0x24, 0x3f, 0x37, 0x2f, 0x27, 0x1f, 0x17, 0xf, 0x7, 0x3e, 0x36, 0x2e, 0x26, 0x1e, 0x16, 0xe, 0x6, 0x3d, 0x35, 0x2d, 0x25, 0x1d, 0x15, 0xd, 0x5, 0x1c, 0x14, 0xc, 0x4]\n      , _0x3471c3 = [0xe, 0x11, 0xb, 0x18, 0x1, 0x5, 0x3, 0x1c, 0xf, 0x6, 0x15, 0xa, 0x17, 0x13, 0xc, 0x4, 0x1a, 0x8, 0x10, 0x7, 0x1b, 0x14, 0xd, 0x2, 0x29, 0x34, 0x1f, 0x25, 0x2f, 0x37, 0x1e, 0x28, 0x33, 0x2d, 0x21, 0x30, 0x2c, 0x31, 0x27, 0x38, 0x22, 0x35, 0x2e, 0x2a, 0x32, 0x24, 0x1d, 0x20]\n      , _0x166a99 = [0x1, 0x2, 0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0xf, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1b, 0x1c]\n      , _0x4277d7 = [{\n        0: 0x808200,\n        268435456: 0x8000,\n        536870912: 0x808002,\n        805306368: 0x2,\n        1073741824: 0x200,\n        1342177280: 0x808202,\n        1610612736: 0x800202,\n        1879048192: 0x800000,\n        2147483648: 0x202,\n        2415919104: 0x800200,\n        2684354560: 0x8200,\n        2952790016: 0x808000,\n        3221225472: 0x8002,\n        3489660928: 0x800002,\n        3758096384: 0x0,\n        4026531840: 0x8202,\n        134217728: 0x0,\n        402653184: 0x808202,\n        671088640: 0x8202,\n        939524096: 0x8000,\n        1207959552: 0x808200,\n        1476395008: 0x200,\n        1744830464: 0x808002,\n        2013265920: 0x2,\n        2281701376: 0x800200,\n        2550136832: 0x8200,\n        2818572288: 0x808000,\n        3087007744: 0x800202,\n        3355443200: 0x800002,\n        3623878656: 0x8002,\n        3892314112: 0x202,\n        4160749568: 0x800000,\n        1: 0x8000,\n        268435457: 0x2,\n        536870913: 0x808200,\n        805306369: 0x800000,\n        1073741825: 0x808002,\n        1342177281: 0x8200,\n        1610612737: 0x200,\n        1879048193: 0x800202,\n        2147483649: 0x808202,\n        2415919105: 0x808000,\n        2684354561: 0x800002,\n        2952790017: 0x8202,\n        3221225473: 0x202,\n        3489660929: 0x800200,\n        3758096385: 0x8002,\n        4026531841: 0x0,\n        134217729: 0x808202,\n        402653185: 0x808000,\n        671088641: 0x800000,\n        939524097: 0x200,\n        1207959553: 0x8000,\n        1476395009: 0x800002,\n        1744830465: 0x2,\n        2013265921: 0x8202,\n        2281701377: 0x8002,\n        2550136833: 0x800202,\n        2818572289: 0x202,\n        3087007745: 0x808200,\n        3355443201: 0x800200,\n        3623878657: 0x0,\n        3892314113: 0x8200,\n        4160749569: 0x808002\n    }, {\n        0: 0x40084010,\n        16777216: 0x4000,\n        33554432: 0x80000,\n        50331648: 0x40080010,\n        67108864: 0x40000010,\n        83886080: 0x40084000,\n        100663296: 0x40004000,\n        117440512: 0x10,\n        134217728: 0x84000,\n        150994944: 0x40004010,\n        167772160: 0x40000000,\n        184549376: 0x84010,\n        201326592: 0x80010,\n        218103808: 0x0,\n        234881024: 0x4010,\n        251658240: 0x40080000,\n        8388608: 0x40004000,\n        25165824: 0x84010,\n        41943040: 0x10,\n        58720256: 0x40004010,\n        75497472: 0x40084010,\n        92274688: 0x40000000,\n        109051904: 0x80000,\n        125829120: 0x40080010,\n        142606336: 0x80010,\n        159383552: 0x0,\n        176160768: 0x4000,\n        192937984: 0x40080000,\n        209715200: 0x40000010,\n        226492416: 0x84000,\n        243269632: 0x40084000,\n        260046848: 0x4010,\n        268435456: 0x0,\n        285212672: 0x40080010,\n        301989888: 0x40004010,\n        318767104: 0x40084000,\n        335544320: 0x40080000,\n        352321536: 0x10,\n        369098752: 0x84010,\n        385875968: 0x4000,\n        402653184: 0x4010,\n        419430400: 0x80000,\n        436207616: 0x80010,\n        452984832: 0x40000010,\n        469762048: 0x84000,\n        486539264: 0x40004000,\n        503316480: 0x40000000,\n        520093696: 0x40084010,\n        276824064: 0x84010,\n        293601280: 0x80000,\n        310378496: 0x40080000,\n        327155712: 0x4000,\n        343932928: 0x40004000,\n        360710144: 0x40084010,\n        377487360: 0x10,\n        394264576: 0x40000000,\n        411041792: 0x40084000,\n        427819008: 0x40000010,\n        444596224: 0x40004010,\n        461373440: 0x80010,\n        478150656: 0x0,\n        494927872: 0x4010,\n        511705088: 0x40080010,\n        528482304: 0x84000\n    }, {\n        0: 0x104,\n        1048576: 0x0,\n        2097152: 0x4000100,\n        3145728: 0x10104,\n        4194304: 0x10004,\n        5242880: 0x4000004,\n        6291456: 0x4010104,\n        7340032: 0x4010000,\n        8388608: 0x4000000,\n        9437184: 0x4010100,\n        10485760: 0x10100,\n        11534336: 0x4010004,\n        12582912: 0x4000104,\n        13631488: 0x10000,\n        14680064: 0x4,\n        15728640: 0x100,\n        524288: 0x4010100,\n        1572864: 0x4010004,\n        2621440: 0x0,\n        3670016: 0x4000100,\n        4718592: 0x4000004,\n        5767168: 0x10000,\n        6815744: 0x10004,\n        7864320: 0x104,\n        8912896: 0x4,\n        9961472: 0x100,\n        11010048: 0x4010000,\n        12058624: 0x10104,\n        13107200: 0x10100,\n        14155776: 0x4000104,\n        15204352: 0x4010104,\n        16252928: 0x4000000,\n        16777216: 0x4010100,\n        17825792: 0x10004,\n        18874368: 0x10000,\n        19922944: 0x4000100,\n        20971520: 0x100,\n        22020096: 0x4010104,\n        23068672: 0x4000004,\n        24117248: 0x0,\n        25165824: 0x4000104,\n        26214400: 0x4000000,\n        27262976: 0x4,\n        28311552: 0x10100,\n        29360128: 0x4010000,\n        30408704: 0x104,\n        31457280: 0x10104,\n        32505856: 0x4010004,\n        17301504: 0x4000000,\n        18350080: 0x104,\n        19398656: 0x4010100,\n        20447232: 0x0,\n        21495808: 0x10004,\n        22544384: 0x4000100,\n        23592960: 0x100,\n        24641536: 0x4010004,\n        25690112: 0x10000,\n        26738688: 0x4010104,\n        27787264: 0x10104,\n        28835840: 0x4000004,\n        29884416: 0x4000104,\n        30932992: 0x4010000,\n        31981568: 0x4,\n        33030144: 0x10100\n    }, {\n        0: 0x80401000,\n        65536: 0x80001040,\n        131072: 0x401040,\n        196608: 0x80400000,\n        262144: 0x0,\n        327680: 0x401000,\n        393216: 0x80000040,\n        458752: 0x400040,\n        524288: 0x80000000,\n        589824: 0x400000,\n        655360: 0x40,\n        720896: 0x80001000,\n        786432: 0x80400040,\n        851968: 0x1040,\n        917504: 0x1000,\n        983040: 0x80401040,\n        32768: 0x80001040,\n        98304: 0x40,\n        163840: 0x80400040,\n        229376: 0x80001000,\n        294912: 0x401000,\n        360448: 0x80401040,\n        425984: 0x0,\n        491520: 0x80400000,\n        557056: 0x1000,\n        622592: 0x80401000,\n        688128: 0x400000,\n        753664: 0x1040,\n        819200: 0x80000000,\n        884736: 0x400040,\n        950272: 0x401040,\n        1015808: 0x80000040,\n        1048576: 0x400040,\n        1114112: 0x401000,\n        1179648: 0x80000040,\n        1245184: 0x0,\n        1310720: 0x1040,\n        1376256: 0x80400040,\n        1441792: 0x80401000,\n        1507328: 0x80001040,\n        1572864: 0x80401040,\n        1638400: 0x80000000,\n        1703936: 0x80400000,\n        1769472: 0x401040,\n        1835008: 0x80001000,\n        1900544: 0x400000,\n        1966080: 0x40,\n        2031616: 0x1000,\n        1081344: 0x80400000,\n        1146880: 0x80401040,\n        1212416: 0x0,\n        1277952: 0x401000,\n        1343488: 0x400040,\n        1409024: 0x80000000,\n        1474560: 0x80001040,\n        1540096: 0x40,\n        1605632: 0x80000040,\n        1671168: 0x1000,\n        1736704: 0x80001000,\n        1802240: 0x80400040,\n        1867776: 0x1040,\n        1933312: 0x80401000,\n        1998848: 0x400000,\n        2064384: 0x401040\n    }, {\n        0: 0x80,\n        4096: 0x1040000,\n        8192: 0x40000,\n        12288: 0x20000000,\n        16384: 0x20040080,\n        20480: 0x1000080,\n        24576: 0x21000080,\n        28672: 0x40080,\n        32768: 0x1000000,\n        36864: 0x20040000,\n        40960: 0x20000080,\n        45056: 0x21040080,\n        49152: 0x21040000,\n        53248: 0x0,\n        57344: 0x1040080,\n        61440: 0x21000000,\n        2048: 0x1040080,\n        6144: 0x21000080,\n        10240: 0x80,\n        14336: 0x1040000,\n        18432: 0x40000,\n        22528: 0x20040080,\n        26624: 0x21040000,\n        30720: 0x20000000,\n        34816: 0x20040000,\n        38912: 0x0,\n        43008: 0x21040080,\n        47104: 0x1000080,\n        51200: 0x20000080,\n        55296: 0x21000000,\n        59392: 0x1000000,\n        63488: 0x40080,\n        65536: 0x40000,\n        69632: 0x80,\n        73728: 0x20000000,\n        77824: 0x21000080,\n        81920: 0x1000080,\n        86016: 0x21040000,\n        90112: 0x20040080,\n        94208: 0x1000000,\n        98304: 0x21040080,\n        102400: 0x21000000,\n        106496: 0x1040000,\n        110592: 0x20040000,\n        114688: 0x40080,\n        118784: 0x20000080,\n        122880: 0x0,\n        126976: 0x1040080,\n        67584: 0x21000080,\n        71680: 0x1000000,\n        75776: 0x1040000,\n        79872: 0x20040080,\n        83968: 0x20000000,\n        88064: 0x1040080,\n        92160: 0x80,\n        96256: 0x21040000,\n        100352: 0x40080,\n        104448: 0x21040080,\n        108544: 0x0,\n        112640: 0x21000000,\n        116736: 0x1000080,\n        120832: 0x40000,\n        124928: 0x20040000,\n        129024: 0x20000080\n    }, {\n        0: 0x10000008,\n        256: 0x2000,\n        512: 0x10200000,\n        768: 0x10202008,\n        1024: 0x10002000,\n        1280: 0x200000,\n        1536: 0x200008,\n        1792: 0x10000000,\n        2048: 0x0,\n        2304: 0x10002008,\n        2560: 0x202000,\n        2816: 0x8,\n        3072: 0x10200008,\n        3328: 0x202008,\n        3584: 0x2008,\n        3840: 0x10202000,\n        128: 0x10200000,\n        384: 0x10202008,\n        640: 0x8,\n        896: 0x200000,\n        1152: 0x202008,\n        1408: 0x10000008,\n        1664: 0x10002000,\n        1920: 0x2008,\n        2176: 0x200008,\n        2432: 0x2000,\n        2688: 0x10002008,\n        2944: 0x10200008,\n        3200: 0x0,\n        3456: 0x10202000,\n        3712: 0x202000,\n        3968: 0x10000000,\n        4096: 0x10002000,\n        4352: 0x10200008,\n        4608: 0x10202008,\n        4864: 0x2008,\n        5120: 0x200000,\n        5376: 0x10000000,\n        5632: 0x10000008,\n        5888: 0x202000,\n        6144: 0x202008,\n        6400: 0x0,\n        6656: 0x8,\n        6912: 0x10200000,\n        7168: 0x2000,\n        7424: 0x10002008,\n        7680: 0x10202000,\n        7936: 0x200008,\n        4224: 0x8,\n        4480: 0x202000,\n        4736: 0x200000,\n        4992: 0x10000008,\n        5248: 0x10002000,\n        5504: 0x2008,\n        5760: 0x10202008,\n        6016: 0x10200000,\n        6272: 0x10202000,\n        6528: 0x10200008,\n        6784: 0x2000,\n        7040: 0x202008,\n        7296: 0x200008,\n        7552: 0x0,\n        7808: 0x10000000,\n        8064: 0x10002008\n    }, {\n        0: 0x100000,\n        16: 0x2000401,\n        32: 0x400,\n        48: 0x100401,\n        64: 0x2100401,\n        80: 0x0,\n        96: 0x1,\n        112: 0x2100001,\n        128: 0x2000400,\n        144: 0x100001,\n        160: 0x2000001,\n        176: 0x2100400,\n        192: 0x2100000,\n        208: 0x401,\n        224: 0x100400,\n        240: 0x2000000,\n        8: 0x2100001,\n        24: 0x0,\n        40: 0x2000401,\n        56: 0x2100400,\n        72: 0x100000,\n        88: 0x2000001,\n        104: 0x2000000,\n        120: 0x401,\n        136: 0x100401,\n        152: 0x2000400,\n        168: 0x2100000,\n        184: 0x100001,\n        200: 0x400,\n        216: 0x2100401,\n        232: 0x1,\n        248: 0x100400,\n        256: 0x2000000,\n        272: 0x100000,\n        288: 0x2000401,\n        304: 0x2100001,\n        320: 0x100001,\n        336: 0x2000400,\n        352: 0x2100400,\n        368: 0x100401,\n        384: 0x401,\n        400: 0x2100401,\n        416: 0x100400,\n        432: 0x1,\n        448: 0x0,\n        464: 0x2100000,\n        480: 0x2000001,\n        496: 0x400,\n        264: 0x100400,\n        280: 0x2000401,\n        296: 0x2100001,\n        312: 0x1,\n        328: 0x2000000,\n        344: 0x100000,\n        360: 0x401,\n        376: 0x2100400,\n        392: 0x2000001,\n        408: 0x2100000,\n        424: 0x0,\n        440: 0x2100401,\n        456: 0x100401,\n        472: 0x400,\n        488: 0x2000400,\n        504: 0x100001\n    }, {\n        0: 0x8000820,\n        1: 0x20000,\n        2: 0x8000000,\n        3: 0x20,\n        4: 0x20020,\n        5: 0x8020820,\n        6: 0x8020800,\n        7: 0x800,\n        8: 0x8020000,\n        9: 0x8000800,\n        10: 0x20800,\n        11: 0x8020020,\n        12: 0x820,\n        13: 0x0,\n        14: 0x8000020,\n        15: 0x20820,\n        2147483648: 0x800,\n        2147483649: 0x8020820,\n        2147483650: 0x8000820,\n        2147483651: 0x8000000,\n        2147483652: 0x8020000,\n        2147483653: 0x20800,\n        2147483654: 0x20820,\n        2147483655: 0x20,\n        2147483656: 0x8000020,\n        2147483657: 0x820,\n        2147483658: 0x20020,\n        2147483659: 0x8020800,\n        2147483660: 0x0,\n        2147483661: 0x8020020,\n        2147483662: 0x8000800,\n        2147483663: 0x20000,\n        16: 0x20820,\n        17: 0x8020800,\n        18: 0x20,\n        19: 0x800,\n        20: 0x8000800,\n        21: 0x8000020,\n        22: 0x8020020,\n        23: 0x20000,\n        24: 0x0,\n        25: 0x20020,\n        26: 0x8020000,\n        27: 0x8000820,\n        28: 0x8020820,\n        29: 0x20800,\n        30: 0x820,\n        31: 0x8000000,\n        2147483664: 0x20000,\n        2147483665: 0x800,\n        2147483666: 0x8020020,\n        2147483667: 0x20820,\n        2147483668: 0x20,\n        2147483669: 0x8020000,\n        2147483670: 0x8000000,\n        2147483671: 0x8000820,\n        2147483672: 0x8020820,\n        2147483673: 0x8000020,\n        2147483674: 0x8000800,\n        2147483675: 0x0,\n        2147483676: 0x20800,\n        2147483677: 0x820,\n        2147483678: 0x20020,\n        2147483679: 0x8020800\n    }]\n      , _0x59d0f4 = [0xf8000001, 0x1f800000, 0x1f80000, 0x1f8000, 0x1f800, 0x1f80, 0x1f8, 0x8000001f]\n      , _0x4d24f9 = _0xa844[_0x2246('0x1f7', 'fDXQ')] = _0x57ed25[_0x2246('0x115', 'BQ5p')]({\n        '_doReset': function() {\n            for (var _0x24a17c = this[_0x2246('0x1f8', ')q#9')][_0x2246('0x1f9', 'fDXQ')], _0x18c49c = [], _0xe14056 = 0x0; 0x38 > _0xe14056; _0xe14056++) {\n                if (_0x11bbc8[_0x2246('0x1fa', 'GL3Q')] === _0x11bbc8[_0x2246('0x1fb', 'Who^')]) {\n                    function _0x28263f() {}\n                    return function(_0x233016) {\n                        _0x28263f[_0x2246('0x1fc', 'R*c1')] = _0x233016;\n                        _0x233016 = new _0x28263f();\n                        _0x28263f[_0x2246('0x1fd', ')q#9')] = null;\n                        return _0x233016;\n                    }\n                    ;\n                } else {\n                    var _0x5b8057 = _0x16031e[_0xe14056] - 0x1;\n                    _0x18c49c[_0xe14056] = _0x11bbc8[_0x2246('0x1fe', 'E&PI')](_0x24a17c[_0x11bbc8[_0x2246('0x1ff', '&59Q')](_0x5b8057, 0x5)], _0x11bbc8[_0x2246('0x200', 'Z2VK')](0x1f, _0x11bbc8[_0x2246('0x201', 'fVzz')](_0x5b8057, 0x20))) & 0x1;\n                }\n            }\n            _0x24a17c = this[_0x2246('0x202', '7IfV')] = [];\n            for (e = 0x0; _0x11bbc8[_0x2246('0x203', '0I#o')](0x10, e); e++) {\n                if (_0x11bbc8[_0x2246('0x204', 'KuWu')](_0x11bbc8[_0x2246('0x205', 'Z2VK')], _0x11bbc8[_0x2246('0x206', ']2BX')])) {\n                    return this['init']['prototype'][_0x2246('0x207', 'E[6X')](this);\n                } else {\n                    for (var _0x42a9aa = _0x24a17c[e] = [], _0x5ed64d = _0x166a99[e], _0x17eed7 = 0x0; _0x11bbc8[_0x2246('0x208', 'GL3Q')](0x18, _0x17eed7); _0x17eed7++)\n                        _0x42a9aa[_0x11bbc8[_0x2246('0x209', 'O^50')](_0x11bbc8[_0x2246('0x20a', 'sy^o')](_0x17eed7, 0x6), 0x0)] |= _0x11bbc8[_0x2246('0x20b', 's&Ar')](_0x18c49c[_0x11bbc8[_0x2246('0x20c', 'sy^o')](_0x11bbc8[_0x2246('0x20d', 'fniG')](_0x3471c3[_0x17eed7], 0x1) + _0x5ed64d, 0x1c)], _0x11bbc8[_0x2246('0x20e', 'DK[&')](0x1f, _0x11bbc8['aUBlz'](_0x17eed7, 0x6))),\n                        _0x42a9aa[_0x11bbc8[_0x2246('0x20f', 'E[6X')](0x4, _0x11bbc8[_0x2246('0x210', '0J6f')](_0x11bbc8[_0x2246('0x211', 'gc3h')](_0x17eed7, 0x6), 0x0))] |= _0x18c49c[_0x11bbc8[_0x2246('0x212', '%$pm')](0x1c, _0x11bbc8[_0x2246('0x213', '0J6f')](_0x11bbc8['BOPPX'](_0x11bbc8[_0x2246('0x214', '4mX2')](_0x3471c3[_0x11bbc8['DYWIq'](_0x17eed7, 0x18)], 0x1), _0x5ed64d), 0x1c))] << 0x1f - _0x11bbc8['rqPQA'](_0x17eed7, 0x6);\n                    _0x42a9aa[0x0] = _0x11bbc8[_0x2246('0x215', 'E&PI')](_0x11bbc8['DSojH'](_0x42a9aa[0x0], 0x1), _0x42a9aa[0x0] >>> 0x1f);\n                    for (_0x17eed7 = 0x1; _0x11bbc8['gydqE'](0x7, _0x17eed7); _0x17eed7++)\n                        _0x42a9aa[_0x17eed7] >>>= _0x11bbc8['wdHci'](0x4 * (_0x17eed7 - 0x1), 0x3);\n                    _0x42a9aa[0x7] = _0x11bbc8['kJcPI'](_0x11bbc8['pebuH'](_0x42a9aa[0x7], 0x5), _0x11bbc8[_0x2246('0x216', 'nArV')](_0x42a9aa[0x7], 0x1b));\n                }\n            }\n            _0x18c49c = this[_0x2246('0x217', '0I#o')] = [];\n            for (_0xe14056 = 0x0; _0x11bbc8['GhdBB'](0x10, _0xe14056); _0xe14056++)\n                _0x18c49c[_0xe14056] = _0x24a17c[_0x11bbc8[_0x2246('0x218', '@1Ws')](0xf, _0xe14056)];\n        },\n        'encryptBlock': function(_0x9c4e98, _0x22cbf3) {\n            this[_0x2246('0x219', '&59Q')](_0x9c4e98, _0x22cbf3, this['_subKeys']);\n        },\n        'decryptBlock': function(_0x5bb9bc, _0x300b25) {\n            this['_doCryptBlock'](_0x5bb9bc, _0x300b25, this[_0x2246('0x21a', 'JdVK')]);\n        },\n        '_doCryptBlock': function(_0x1b2838, _0x119e0a, _0x3ec085) {\n            this['_lBlock'] = _0x1b2838[_0x119e0a];\n            this[_0x2246('0x1eb', 'nArV')] = _0x1b2838[_0x11bbc8[_0x2246('0x21b', 'Who^')](_0x119e0a, 0x1)];\n            _0xf94091[_0x2246('0x21c', 'cs*4')](this, 0x4, 0xf0f0f0f);\n            _0xf94091[_0x2246('0x21d', '3j7z')](this, 0x10, 0xffff);\n            _0x2ecaf5[_0x2246('0x21e', '0I#o')](this, 0x2, 0x33333333);\n            _0x2ecaf5[_0x2246('0x21f', 'MVsm')](this, 0x8, 0xff00ff);\n            _0xf94091['call'](this, 0x1, 0x55555555);\n            for (var _0x354fa9 = 0x0; 0x10 > _0x354fa9; _0x354fa9++) {\n                if (_0x11bbc8['TFZnG'](_0x11bbc8[_0x2246('0x220', 'E&PI')], _0x11bbc8[_0x2246('0x221', 'sy^o')])) {\n                    for (var _0x3601ac = _0x3ec085[_0x354fa9], _0x460382 = this[_0x2246('0x222', '4VZ$')], _0x323472 = this[_0x2246('0x223', 'Jsmq')], _0x47a2d3 = 0x0, _0x4e3880 = 0x0; _0x11bbc8['kyIdP'](0x8, _0x4e3880); _0x4e3880++)\n                        _0x47a2d3 |= _0x4277d7[_0x4e3880][_0x11bbc8['CiiQa'](_0x11bbc8[_0x2246('0x224', 'RQ2o')](_0x323472, _0x3601ac[_0x4e3880]) & _0x59d0f4[_0x4e3880], 0x0)];\n                    this[_0x2246('0x225', '0I#o')] = _0x323472;\n                    this['_rBlock'] = _0x11bbc8['kyDGA'](_0x460382, _0x47a2d3);\n                } else {\n                    _0x119e0a[_0x2246('0x226', 'hGD!')] -= _0x11bbc8[_0x2246('0x227', 'Jsmq')](_0x119e0a[_0x2246('0x228', 'GL3Q')][_0x11bbc8[_0x2246('0x229', '&59Q')](_0x11bbc8[_0x2246('0x22a', 'lav3')](_0x119e0a[_0x2246('0x19e', 'gc3h')], 0x1), 0x2)], 0xff);\n                }\n            }\n            _0x3ec085 = this[_0x2246('0x22b', 'hGD!')];\n            this[_0x2246('0x22c', 'fniG')] = this['_rBlock'];\n            this[_0x2246('0x22d', 'R*c1')] = _0x3ec085;\n            _0xf94091[_0x2246('0x22e', 'UwHa')](this, 0x1, 0x55555555);\n            _0x2ecaf5[_0x2246('0x22f', 'nArV')](this, 0x8, 0xff00ff);\n            _0x2ecaf5[_0x2246('0x5d', 'E&5L')](this, 0x2, 0x33333333);\n            _0xf94091[_0x2246('0x21f', 'MVsm')](this, 0x10, 0xffff);\n            _0xf94091[_0x2246('0x230', 'wMtP')](this, 0x4, 0xf0f0f0f);\n            _0x1b2838[_0x119e0a] = this['_lBlock'];\n            _0x1b2838[_0x11bbc8[_0x2246('0x231', 'fVzz')](_0x119e0a, 0x1)] = this[_0x2246('0x232', 'fDXQ')];\n        },\n        'keySize': 0x2,\n        'ivSize': 0x2,\n        'blockSize': 0x2\n    });\n    _0x3f8d43[_0x2246('0x27', '4mX2')] = _0x57ed25[_0x2246('0x233', 'fDXQ')](_0x4d24f9);\n    _0xa844 = _0xa844['TripleDES'] = _0x57ed25['extend']({\n        '_doReset': function() {\n            var _0x5e5354 = {\n                'YhmTO': function _0x5d84bb(_0x51ddef, _0x435823) {\n                    return _0x51ddef === _0x435823;\n                },\n                'EAAtx': _0x2246('0x234', '0I#o'),\n                'TngRK': function _0x481275(_0x1d7446, _0x25a26b) {\n                    return _0x1d7446(_0x25a26b);\n                }\n            };\n            if (_0x5e5354[_0x2246('0x235', 's&Ar')](_0x5e5354[_0x2246('0x236', ']2BX')], _0x5e5354[_0x2246('0x237', 'R*c1')])) {\n                var _0xaee42e = this['_key'][_0x2246('0x238', '7IfV')];\n                this['_des1'] = _0x4d24f9[_0x2246('0x239', 'OMJW')](_0x5a476c[_0x2246('0x23a', 'fniG')](_0xaee42e[_0x2246('0x23b', 'E[6X')](0x0, 0x2)));\n                this[_0x2246('0x23c', 'OMJW')] = _0x4d24f9[_0x2246('0x23d', '[wS8')](_0x5a476c[_0x2246('0x23e', 'JdVK')](_0xaee42e[_0x2246('0x23f', 'N55v')](0x2, 0x4)));\n                this[_0x2246('0x240', '&59Q')] = _0x4d24f9[_0x2246('0x241', '&59Q')](_0x5a476c['create'](_0xaee42e[_0x2246('0x242', '0J6f')](0x4, 0x6)));\n            } else {\n                _0x5e5354[_0x2246('0x243', '0I#o')](alert, _0x2246('0x244', 'E[6X'));\n            }\n        },\n        'encryptBlock': function(_0x4b1f5c, _0x4056fe) {\n            var _0x2b03e6 = {\n                'qqSmD': 'rhr'\n            };\n            if (_0x2b03e6[_0x2246('0x245', 'rk]M')] !== 'adN') {\n                this['_des1']['encryptBlock'](_0x4b1f5c, _0x4056fe);\n                this[_0x2246('0x246', 'E&5L')][_0x2246('0x247', 'Z2VK')](_0x4b1f5c, _0x4056fe);\n                this['_des3'][_0x2246('0x248', '4VZ$')](_0x4b1f5c, _0x4056fe);\n            } else {\n                this['_des3'][_0x2246('0x249', 'gc3h')](_0x4b1f5c, _0x4056fe);\n                this[_0x2246('0x24a', 'RQ2o')][_0x2246('0x1e4', 'RQ2o')](_0x4b1f5c, _0x4056fe);\n                this[_0x2246('0x24b', ')q#9')][_0x2246('0x24c', 'fVzz')](_0x4b1f5c, _0x4056fe);\n            }\n        },\n        'decryptBlock': function(_0xd668e6, _0x1268ce) {\n            this[_0x2246('0x24d', 'N55v')][_0x2246('0x24e', 'ORle')](_0xd668e6, _0x1268ce);\n            this[_0x2246('0x24f', 'ORle')][_0x2246('0x250', 'yY#5')](_0xd668e6, _0x1268ce);\n            this[_0x2246('0x251', 'DK[&')][_0x2246('0x252', 'GL3Q')](_0xd668e6, _0x1268ce);\n        },\n        'keySize': 0x6,\n        'ivSize': 0x2,\n        'blockSize': 0x2\n    });\n    _0x3f8d43['TripleDES'] = _0x57ed25[_0x2246('0x253', 'RQ2o')](_0xa844);\n}());\nvar webDES = function() {\n    var _0x4da59e = {\n        'bUIIa': function _0x2a2af9(_0x779387, _0x4a4fec) {\n            return _0x779387 + _0x4a4fec;\n        }\n    };\n    var _0x9843d3 = function(_0x29d556, _0xcc6df, _0x3d7020) {\n        if (0x0 == _0xcc6df)\n            return _0x29d556[_0x2246('0x254', '4VZ$')](_0x3d7020);\n        var _0x48914b;\n        _0x48914b = '' + _0x29d556[_0x2246('0x255', 'GL3Q')](0x0, _0xcc6df);\n        return _0x48914b += _0x29d556['substr'](_0x4da59e[_0x2246('0x256', 'DK[&')](_0xcc6df, _0x3d7020));\n    };\n    this[_0x2246('0x257', 'nArV')] = function(_0xa0c834) {\n        var _0x51eedc = {\n            'pKENi': function _0x2f627(_0x5b6f5a, _0x440924) {\n                return _0x5b6f5a === _0x440924;\n            },\n            'wnfPa': 'ZGz',\n            'VMmle': '7|1|8|9|5|2|3|6|0|4',\n            'GKWFf': function _0x1a4e13(_0x40cfde, _0x16f3c2) {\n                return _0x40cfde == _0x16f3c2;\n            },\n            'MUPgQ': function _0x342f0d(_0x19038b, _0x4004d6) {\n                return _0x19038b >= _0x4004d6;\n            },\n            'hLXma': function _0x55adaf(_0x45a871, _0x161bdf) {\n                return _0x45a871 + _0x161bdf;\n            },\n            'JdOlO': function _0x13e00a(_0x5899a9, _0x4bb34d) {\n                return _0x5899a9 + _0x4bb34d;\n            },\n            'qrTpg': function _0x1198fb(_0x55b317, _0x22e1db, _0x1b091a) {\n                return _0x55b317(_0x22e1db, _0x1b091a);\n            },\n            'pdmMk': function _0xe2b022(_0x4af286, _0x4c2fd4) {\n                return _0x4af286 - _0x4c2fd4;\n            },\n            'xVKWW': function _0x1094a3(_0x5f3627, _0x2a0ac5, _0x3ad2e5) {\n                return _0x5f3627(_0x2a0ac5, _0x3ad2e5);\n            }\n        };\n        if (_0x51eedc[_0x2246('0x258', '@1Ws')](_0x2246('0x259', 'E&PI'), _0x51eedc['wnfPa'])) {\n            this['_append'](a);\n            return this[_0x2246('0x25a', 'GL3Q')]();\n        } else {\n            var _0x492a62 = _0x51eedc[_0x2246('0x25b', '&59Q')][_0x2246('0x25c', ')q#9')]('|')\n              , _0x356b01 = 0x0;\n            while (!![]) {\n                switch (_0x492a62[_0x356b01++]) {\n                case '0':\n                    _0x554c90 = _grsa_JS[_0x2246('0x25d', 'E&PI')]['decrypt']({\n                        'ciphertext': _grsa_JS['enc'][_0x2246('0x25e', 'sy^o')]['parse'](_0xa0c834)\n                    }, _0x2cf8ae, {\n                        'iv': _0x554c90,\n                        'mode': _grsa_JS[_0x2246('0x16c', 'O^50')][_0x2246('0x25f', 'Who^')],\n                        'padding': _grsa_JS[_0x2246('0x260', '7IfV')][_0x2246('0x261', 'E&PI')]\n                    })[_0x2246('0x1c', 'yY#5')](_grsa_JS['enc'][_0x2246('0x262', ']2BX')]);\n                    continue;\n                case '1':\n                    if (_0x51eedc[_0x2246('0x263', 'Jsmq')](null, _0xa0c834) || _0x51eedc[_0x2246('0x264', '!2eC')](0x10, _0xa0c834['length']))\n                        return _0xa0c834;\n                    continue;\n                case '2':\n                    _0xa0c834 = _0x9843d3(_0xa0c834, _0x2cf8ae, 0x8);\n                    continue;\n                case '3':\n                    _0x2cf8ae = _grsa_JS[_0x2246('0x265', 'RQ2o')][_0x2246('0x266', '3j7z')][_0x2246('0x267', 'RQ2o')](_0x554c90);\n                    continue;\n                case '4':\n                    return _0x554c90[_0x2246('0x268', 'cs*4')](0x0, _0x51eedc[_0x2246('0x269', 'MVsm')](_0x554c90[_0x2246('0x26a', '0J6f')]('}'), 0x1));\n                case '5':\n                    _0x554c90 = _0xa0c834[_0x2246('0x26b', 'UwHa')](_0x2cf8ae, 0x8);\n                    continue;\n                case '6':\n                    _0x554c90 = _grsa_JS[_0x2246('0x26c', '4VZ$')]['Utf8']['parse'](_0x554c90);\n                    continue;\n                case '7':\n                    if (!navigator || !navigator[_0x2246('0x26d', '0I#o')])\n                        return '';\n                    continue;\n                case '8':\n                    var _0x554c90 = _0x51eedc[_0x2246('0x26e', 'Yb4P')](_0x51eedc[_0x2246('0x26f', 'BQ5p')](parseInt, _0xa0c834[_0x51eedc[_0x2246('0x270', 'Z2VK')](_0xa0c834['length'], 0x1)], 0x10), 0x9)\n                      , _0x2cf8ae = _0x51eedc[_0x2246('0x271', 'yY#5')](parseInt, _0xa0c834[_0x554c90], 0x10);\n                    continue;\n                case '9':\n                    _0xa0c834 = _0x9843d3(_0xa0c834, _0x554c90, 0x1);\n                    continue;\n                }\n                break;\n            }\n        }\n    }\n    ;\n}\n  , webInstace = new webDES();\n"
  },
  {
    "path": "akshare/movie/movie_yien.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/2/20 14:00\nDesc: 电影票房数据\nhttps://ys.endata.cn/BoxOffice/Movie\n\"\"\"\n\nimport datetime\nimport json\nimport os\n\nimport pandas as pd\nimport requests\nimport py_mini_racer\n\n\ndef _get_js_path(name: str = \"\", module_file: str = \"\") -> str:\n    \"\"\"\n    get JS file path\n    :param name: file name\n    :type name: str\n    :param module_file: filename\n    :type module_file: str\n    :return: 路径\n    :rtype: str\n    \"\"\"\n    module_folder = os.path.abspath(os.path.dirname(os.path.dirname(module_file)))\n    module_json_path = os.path.join(module_folder, \"movie\", name)\n    return module_json_path\n\n\ndef _get_file_content(file_name: str = \"jm.js\"):\n    \"\"\"\n    read the file content\n    :param file_name: filename\n    :type file_name: str\n    :return: file content\n    :rtype: str\n    \"\"\"\n    setting_file_name = file_name\n    setting_file_path = _get_js_path(setting_file_name, __file__)\n    with open(setting_file_path) as f:\n        file_data = f.read()\n    return file_data\n\n\ndef get_current_week(date: str = \"20201019\") -> datetime.date:\n    \"\"\"\n    当前周的周一\n    :param date: 具体的日期\n    :type date: str\n    :return: 当前周的周一\n    :rtype: datetime.date\n    \"\"\"\n    monday = datetime.datetime.strptime(date, \"%Y%m%d\").date()\n    one_day = datetime.timedelta(days=1)\n    while monday.weekday() != 0:\n        monday -= one_day\n    return monday\n\n\ndef decrypt(origin_data: str = \"\") -> str:\n    \"\"\"\n    解密\n    :param origin_data: 解密前的字符串\n    :type origin_data: str\n    :return: 解密后的字符串\n    :rtype: str\n    \"\"\"\n    file_data = _get_file_content(file_name=\"jm.js\")\n    ctx = py_mini_racer.MiniRacer()\n    ctx.eval(file_data)\n    data = ctx.call(\"webInstace.shell\", origin_data)\n    return data\n\n\ndef movie_boxoffice_realtime() -> pd.DataFrame:\n    \"\"\"\n    电影票房-实时票房\n    https://ys.endata.cn/BoxOffice/Movie\n    :return: 实时票房数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    today = datetime.datetime.today().date().strftime(\"%Y%m%d\")\n    url = \"https://www.endata.com.cn/API/GetData.ashx\"\n    payload = {\n        \"showDate\": \"\",\n        \"tdate\": f\"{today[:4]}-{today[4:6]}-{today[6:]}\",\n        \"MethodName\": \"BoxOffice_GetHourBoxOffice\",\n    }\n    r = requests.post(url, data=payload)\n    r.encoding = \"utf8\"\n    data_json = json.loads(decrypt(r.text))\n    temp_df = pd.DataFrame(data_json[\"Data\"][\"Table1\"])\n    temp_df = temp_df.iloc[:, :7]\n    temp_df.columns = [\n        \"排序\",\n        \"_\",\n        \"影片名称\",\n        \"实时票房\",\n        \"累计票房\",\n        \"上映天数\",\n        \"票房占比\",\n    ]\n    temp_df = temp_df[\n        [\"排序\", \"影片名称\", \"实时票房\", \"票房占比\", \"上映天数\", \"累计票房\"]\n    ]\n    return temp_df\n\n\ndef movie_boxoffice_daily(date: str = \"20240219\") -> pd.DataFrame:\n    \"\"\"\n    电影票房-单日票房\n    https://www.endata.com.cn/BoxOffice/BO/Day/index.html\n    :param date: 只能设置当前日期的前一天的票房数据\n    :type date: str\n    :return: 每日票房\n    :rtype: pandas.DataFrame\n    \"\"\"\n    last_date = datetime.datetime.strptime(date, \"%Y%m%d\") - datetime.timedelta(days=1)\n    last_date = last_date.strftime(\"%Y%m%d\")\n    url = \"https://www.endata.com.cn/API/GetData.ashx\"\n    payload = {\n        \"sdate\": f\"{date[:4]}-{date[4:6]}-{date[6:]}\",\n        \"edate\": f\"{last_date[:4]}-{last_date[4:6]}-{last_date[6:]}\",\n        \"MethodName\": \"BoxOffice_GetDayBoxOffice\",\n    }\n    r = requests.post(url, data=payload)\n    r.encoding = \"utf8\"\n    data_json = json.loads(decrypt(r.text))\n    temp_df = pd.DataFrame(data_json[\"Data\"][\"Table\"])\n    temp_df.columns = [\n        \"排序\",\n        \"_\",\n        \"影片名称\",\n        \"_\",\n        \"累计票房\",\n        \"平均票价\",\n        \"上映天数\",\n        \"场均人次\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"单日票房\",\n        \"环比变化\",\n        \"_\",\n        \"口碑指数\",\n    ]\n    temp_df = temp_df[\n        [\n            \"排序\",\n            \"影片名称\",\n            \"单日票房\",\n            \"环比变化\",\n            \"累计票房\",\n            \"平均票价\",\n            \"场均人次\",\n            \"口碑指数\",\n            \"上映天数\",\n        ]\n    ]\n    return temp_df\n\n\ndef movie_boxoffice_weekly(date: str = \"20240218\") -> pd.DataFrame:\n    \"\"\"\n    电影票房-单周票房\n    https://www.endata.com.cn/BoxOffice/BO/Week/oneWeek.html\n    :param date: 只能获取指定日期所在完整周的票房数据\n    :type date: str\n    :return: 单周票房\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.endata.com.cn/API/GetData.ashx\"\n    payload = {\n        \"sdate\": get_current_week(date=date).strftime(\"%Y-%m-%d\"),\n        \"MethodName\": \"BoxOffice_GetWeekInfoData\",\n    }\n    r = requests.post(url, data=payload)\n    data_json = json.loads(decrypt(r.text))\n    temp_df = pd.DataFrame(data_json[\"Data\"][\"Table\"])\n    temp_df.columns = [\n        \"排序\",\n        \"_\",\n        \"影片名称\",\n        \"单周票房\",\n        \"累计票房\",\n        \"_\",\n        \"上映天数\",\n        \"平均票价\",\n        \"场均人次\",\n        \"环比变化\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"排名变化\",\n        \"口碑指数\",\n    ]\n    temp_df = temp_df[\n        [\n            \"排序\",\n            \"影片名称\",\n            \"排名变化\",\n            \"单周票房\",\n            \"环比变化\",\n            \"累计票房\",\n            \"平均票价\",\n            \"场均人次\",\n            \"口碑指数\",\n            \"上映天数\",\n        ]\n    ]\n    temp_df[\"单周票房\"] = pd.to_numeric(temp_df[\"单周票房\"], errors=\"coerce\")\n    temp_df[\"环比变化\"] = pd.to_numeric(temp_df[\"环比变化\"], errors=\"coerce\")\n    temp_df[\"累计票房\"] = pd.to_numeric(temp_df[\"累计票房\"], errors=\"coerce\")\n    return temp_df\n\n\ndef movie_boxoffice_monthly(date: str = \"20240218\") -> pd.DataFrame:\n    \"\"\"\n    电影票房-单月票房\n    https://www.endata.com.cn/BoxOffice/BO/Month/oneMonth.html\n    :param date: 指定日期所在月份的月度票房\n    :type date: str\n    :return: 单月票房\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.endata.com.cn/API/GetData.ashx\"\n    payload = {\n        \"startTime\": f\"{date[:4]}-{date[4:6]}-01\",\n        \"MethodName\": \"BoxOffice_GetMonthBox\",\n    }\n    r = requests.post(url, data=payload)\n    r.encoding = \"utf8\"\n    data_json = json.loads(decrypt(r.text))\n    temp_df = pd.DataFrame(data_json[\"Data\"][\"Table\"])\n    temp_df.columns = [\n        \"排序\",\n        \"_\",\n        \"影片名称\",\n        \"月内天数\",\n        \"单月票房\",\n        \"平均票价\",\n        \"场均人次\",\n        \"月度占比\",\n        \"上映日期\",\n        \"_\",\n        \"口碑指数\",\n    ]\n    temp_df = temp_df[\n        [\n            \"排序\",\n            \"影片名称\",\n            \"单月票房\",\n            \"月度占比\",\n            \"平均票价\",\n            \"场均人次\",\n            \"上映日期\",\n            \"口碑指数\",\n            \"月内天数\",\n        ]\n    ]\n    temp_df[\"上映日期\"] = pd.to_datetime(temp_df[\"上映日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\ndef movie_boxoffice_yearly(date: str = \"20240218\") -> pd.DataFrame:\n    \"\"\"\n    电影票房-年度票房\n    https://www.endata.com.cn/BoxOffice/BO/Year/index.html\n    :param date: 当前日期所在年度的票房数据\n    :type date: str\n    :return: 年度票房\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.endata.com.cn/API/GetData.ashx\"\n    payload = {\n        \"year\": f\"{date[:4]}\",\n        \"MethodName\": \"BoxOffice_GetYearInfoData\",\n    }\n    r = requests.post(url, data=payload)\n    r.encoding = \"utf8\"\n    data_json = json.loads(decrypt(r.text))\n    temp_df = pd.DataFrame(data_json[\"Data\"][\"Table\"])\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\n        \"排序\",\n        \"_\",\n        \"影片名称\",\n        \"类型\",\n        \"总票房\",\n        \"平均票价\",\n        \"场均人次\",\n        \"国家及地区\",\n        \"上映日期\",\n        \"_\",\n    ]\n    temp_df[\"排序\"] = range(1, len(temp_df) + 1)\n    temp_df = temp_df[\n        [\n            \"排序\",\n            \"影片名称\",\n            \"类型\",\n            \"总票房\",\n            \"平均票价\",\n            \"场均人次\",\n            \"国家及地区\",\n            \"上映日期\",\n        ]\n    ]\n    temp_df[\"上映日期\"] = pd.to_datetime(temp_df[\"上映日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\ndef movie_boxoffice_yearly_first_week(date: str = \"20201018\") -> pd.DataFrame:\n    \"\"\"\n    电影票房-年度票房-年度首周票房\n    https://www.endata.com.cn/BoxOffice/BO/Year/firstWeek.html\n    :param date: 当前日期所在年度的年度首周票房票房数据\n    :type date: str\n    :return: 年度首周票房\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.endata.com.cn/API/GetData.ashx\"\n    payload = {\n        \"year\": f\"{date[:4]}\",\n        \"MethodName\": \"BoxOffice_getYearInfo_fData\",\n    }\n    r = requests.post(url, data=payload)\n    r.encoding = \"utf8\"\n    data_json = json.loads(decrypt(r.text))\n    temp_df = pd.DataFrame(data_json[\"Data\"][\"Table\"])\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\n        \"排序\",\n        \"_\",\n        \"_\",\n        \"影片名称\",\n        \"首周票房\",\n        \"场均人次\",\n        \"上映日期\",\n        \"首周天数\",\n        \"类型\",\n        \"国家及地区\",\n        \"_\",\n        \"占总票房比重\",\n    ]\n    temp_df[\"排序\"] = range(1, len(temp_df) + 1)\n    temp_df = temp_df[\n        [\n            \"排序\",\n            \"影片名称\",\n            \"类型\",\n            \"首周票房\",\n            \"占总票房比重\",\n            \"场均人次\",\n            \"国家及地区\",\n            \"上映日期\",\n            \"首周天数\",\n        ]\n    ]\n    temp_df[\"上映日期\"] = pd.to_datetime(temp_df[\"上映日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\ndef movie_boxoffice_cinema_daily(date: str = \"20240219\") -> pd.DataFrame:\n    \"\"\"\n    电影票房-影院票房-日票房排行\n    https://www.endata.com.cn/BoxOffice/BO/Cinema/day.html\n    :param date: 当前日期前一日的票房数据\n    :type date: str\n    :return: 影票房-影院票房-日票房排行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.endata.com.cn/API/GetData.ashx\"\n    payload = {\n        \"rowNum1\": \"1\",\n        \"rowNum2\": \"100\",\n        \"date\": date,\n        \"MethodName\": \"BoxOffice_GetCinemaDayBoxOffice\",\n    }\n    r = requests.post(url, data=payload)\n    r.encoding = \"utf8\"\n    data_json = json.loads(decrypt(r.text))\n    temp_df = pd.DataFrame(data_json[\"Data\"][\"Table\"])\n    temp_df.columns = [\n        \"排序\",\n        \"_\",\n        \"影院名称\",\n        \"单日票房\",\n        \"单日场次\",\n        \"_\",\n        \"_\",\n        \"场均票价\",\n        \"场均人次\",\n        \"上座率\",\n    ]\n    temp_df = temp_df[\n        [\"排序\", \"影院名称\", \"单日票房\", \"单日场次\", \"场均人次\", \"场均票价\", \"上座率\"]\n    ]\n    return temp_df\n\n\ndef movie_boxoffice_cinema_weekly(date: str = \"20240219\") -> pd.DataFrame:\n    \"\"\"\n    电影票房-影院票房-周票房排行\n    https://www.endata.com.cn/BoxOffice/BO/Cinema/week.html\n    :param date: 当前日期前完整一周的票房数据\n    :type date: str\n    :return: 影票房-影院票房-轴票房排行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.endata.com.cn/API/GetData.ashx\"\n    payload = {\n        \"dateID\": str(\n            datetime.date.fromisoformat(\n                f\"{date[:4]}-{date[4:6]}-{date[6:]}\"\n            ).isocalendar()[1]\n            - 1\n            - 41\n            + 1128\n        ),\n        \"rowNum1\": \"1\",\n        \"rowNum2\": \"100\",\n        \"MethodName\": \"BoxOffice_GetCinemaWeekBoxOffice\",\n    }\n    r = requests.post(url, data=payload)\n    r.encoding = \"utf8\"\n    data_json = json.loads(decrypt(r.text))\n    temp_df = pd.DataFrame(data_json[\"Data\"][\"Table\"])\n    temp_df.columns = [\n        \"排序\",\n        \"_\",\n        \"影院名称\",\n        \"当周票房\",\n        \"_\",\n        \"单银幕票房\",\n        \"场均人次\",\n        \"单日单厅票房\",\n        \"单日单厅场次\",\n    ]\n    temp_df = temp_df[\n        [\n            \"排序\",\n            \"影院名称\",\n            \"当周票房\",\n            \"单银幕票房\",\n            \"场均人次\",\n            \"单日单厅票房\",\n            \"单日单厅场次\",\n        ]\n    ]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    movie_boxoffice_realtime_df = movie_boxoffice_realtime()\n    print(movie_boxoffice_realtime_df)\n\n    movie_boxoffice_daily_df = movie_boxoffice_daily(date=\"20240219\")\n    print(movie_boxoffice_daily_df)\n\n    movie_boxoffice_weekly_df = movie_boxoffice_weekly(date=\"20240218\")\n    print(movie_boxoffice_weekly_df)\n\n    movie_boxoffice_monthly_df = movie_boxoffice_monthly(date=\"20240218\")\n    print(movie_boxoffice_monthly_df)\n\n    movie_boxoffice_yearly_df = movie_boxoffice_yearly(date=\"20240218\")\n    print(movie_boxoffice_yearly_df)\n\n    movie_boxoffice_yearly_first_week_df = movie_boxoffice_yearly_first_week(\n        date=\"20201018\"\n    )\n    print(movie_boxoffice_yearly_first_week_df)\n\n    movie_boxoffice_cinema_daily_df = movie_boxoffice_cinema_daily(date=\"20240219\")\n    print(movie_boxoffice_cinema_daily_df)\n\n    movie_boxoffice_cinema_weekly_df = movie_boxoffice_cinema_weekly(date=\"20240219\")\n    print(movie_boxoffice_cinema_weekly_df)\n"
  },
  {
    "path": "akshare/movie/video_yien.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2021/11/15 20:40\nDesc: 艺恩\n视频放映\n电视剧集\n综艺节目\nhttps://www.endata.com.cn/Video/index.html\n\"\"\"\n\nimport json\nimport os\n\nimport pandas as pd\nimport requests\nimport py_mini_racer\n\n\ndef _get_js_path(name: str = \"\", module_file: str = \"\") -> str:\n    \"\"\"\n    get JS file path\n    :param name: file name\n    :type name: str\n    :param module_file: filename\n    :type module_file: str\n    :return: 路径\n    :rtype: str\n    \"\"\"\n    module_folder = os.path.abspath(os.path.dirname(os.path.dirname(module_file)))\n    module_json_path = os.path.join(module_folder, \"movie\", name)\n    return module_json_path\n\n\ndef _get_file_content(file_name: str = \"jm.js\"):\n    \"\"\"\n    read the file content\n    :param file_name: filename\n    :type file_name: str\n    :return: file content\n    :rtype: str\n    \"\"\"\n    setting_file_name = file_name\n    setting_file_path = _get_js_path(setting_file_name, __file__)\n    with open(setting_file_path) as f:\n        file_data = f.read()\n    return file_data\n\n\ndef decrypt(origin_data: str = \"\") -> str:\n    \"\"\"\n    解密艺恩的加密数据\n    :param origin_data: 解密前的字符串\n    :type origin_data: str\n    :return: 解密后的字符串\n    :rtype: str\n    \"\"\"\n    file_data = _get_file_content(file_name=\"jm.js\")\n    ctx = py_mini_racer.MiniRacer()\n    ctx.eval(file_data)\n    data = ctx.call(\"webInstace.shell\", origin_data)\n    return data\n\n\ndef video_tv() -> pd.DataFrame:\n    \"\"\"\n    艺恩-视频放映-电视剧集\n    https://www.endata.com.cn/Video/index.html\n    :return: 电视剧集\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.endata.com.cn/API/GetData.ashx\"\n    payload = {\"tvType\": 2, \"MethodName\": \"BoxOffice_GetTvData_PlayIndexRank\"}\n    r = requests.post(url, data=payload)\n    r.encoding = \"utf8\"\n    data_json = json.loads(decrypt(r.text))\n    temp_df = pd.DataFrame(data_json[\"Data\"][\"Table\"])\n    report_date = data_json[\"Data\"][\"Table1\"][0][\"MaxDate\"]\n    temp_df.columns = [\n        \"排序\",\n        \"名称\",\n        \"类型\",\n        \"播映指数\",\n        \"用户热度\",\n        \"媒体热度\",\n        \"观看度\",\n        \"好评度\",\n    ]\n    temp_df = temp_df[\n        [\"排序\", \"名称\", \"类型\", \"播映指数\", \"媒体热度\", \"用户热度\", \"好评度\", \"观看度\"]\n    ]\n    temp_df[\"统计日期\"] = report_date\n    return temp_df\n\n\ndef video_variety_show() -> pd.DataFrame:\n    \"\"\"\n    艺恩-视频放映-综艺节目\n    https://www.endata.com.cn/Video/index.html\n    :return: 综艺节目\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.endata.com.cn/API/GetData.ashx\"\n    payload = {\"tvType\": 8, \"MethodName\": \"BoxOffice_GetTvData_PlayIndexRank\"}\n    r = requests.post(url, data=payload)\n    r.encoding = \"utf8\"\n    data_json = json.loads(decrypt(r.text))\n    temp_df = pd.DataFrame(data_json[\"Data\"][\"Table\"])\n    report_date = data_json[\"Data\"][\"Table1\"][0][\"MaxDate\"]\n    temp_df.columns = [\n        \"排序\",\n        \"名称\",\n        \"类型\",\n        \"播映指数\",\n        \"用户热度\",\n        \"媒体热度\",\n        \"观看度\",\n        \"好评度\",\n    ]\n    temp_df = temp_df[\n        [\"排序\", \"名称\", \"类型\", \"播映指数\", \"媒体热度\", \"用户热度\", \"好评度\", \"观看度\"]\n    ]\n    temp_df[\"统计日期\"] = report_date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    video_tv_df = video_tv()\n    print(video_tv_df)\n\n    video_variety_show_df = video_variety_show()\n    print(video_variety_show_df)\n"
  },
  {
    "path": "akshare/news/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2020/10/18 12:54\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/news/news_baidu.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/12/1 22:00\nDesc: 百度股市通-经济数据\nhttps://gushitong.baidu.com/calendar\n\"\"\"\n\nimport math\nimport re\n\nimport pandas as pd\nfrom curl_cffi import requests\n\n\ndef _get_baidu_cookie(headers: dict) -> str:\n    \"\"\"\n    安全获取百度股市通所需的Cookie\n    :param headers: 基础请求头\n    :return: 格式化的Cookie字符串\n    :raises ValueError: 当无法获取必要Cookie时\n    :raises ConnectionError: 网络请求失败时\n    \"\"\"\n    try:\n        # 使用Session保持Cookie上下文\n        with requests.Session() as session:\n            session.headers.update(headers)\n\n            # 第一步：获取基础Cookie (BAIDUID系列)\n            resp1 = session.get(\n                \"https://gushitong.baidu.com/calendar\",\n                impersonate=\"chrome110\",\n                timeout=10,\n            )\n            resp1.raise_for_status()\n\n            # 验证必要Cookie\n            baiduid = resp1.cookies.get(\"BAIDUID\")\n            baiduid_bfess = resp1.cookies.get(\"BAIDUID_BFESS\")\n            if not all([baiduid, baiduid_bfess]):\n                raise ValueError(\"Missing BAIDUID cookies in first response\")\n\n            # 第二步：提取并请求hm.js\n            hm_pattern = r\"https://hm\\.baidu\\.com/hm\\.js\\?\\w+\"\n            hm_match = re.search(hm_pattern, resp1.text)\n            if not hm_match:\n                # 尝试备用正则模式\n                hm_match = re.search(r\"//hm\\.baidu\\.com/hm\\.js\\?\\w+\", resp1.text)\n                if not hm_match:\n                    raise ValueError(\"Failed to extract hm.js URL from response\")\n\n            hm_url = (\n                \"https:\" + hm_match.group()\n                if hm_match.group().startswith(\"//\")\n                else hm_match.group()\n            )\n\n            # 第二步请求 (自动携带第一步的Cookie)\n            resp2 = session.get(hm_url, impersonate=\"chrome110\", timeout=10)\n            resp2.raise_for_status()\n\n            # 验证必要Cookie\n            hmac_count = resp2.cookies.get(\"HMACCOUNT\")\n            hmac_count_bfess = resp2.cookies.get(\"HMACCOUNT_BFESS\")\n            if not all([hmac_count, hmac_count_bfess]):\n                raise ValueError(\"Missing HMACCOUNT cookies in second response\")\n\n            # 安全拼接Cookie\n            return (\n                f\"BAIDUID={baiduid}; \"\n                f\"BAIDUID_BFESS={baiduid_bfess}; \"\n                f\"HMACCOUNT={hmac_count}; \"\n                f\"HMACCOUNT_BFESS={hmac_count_bfess}\"\n            )\n\n    except requests.exceptions.RequestException as e:\n        raise ConnectionError(f\"Network request failed: {str(e)}\") from e\n    except re.error as e:\n        raise ValueError(f\"Regex pattern error: {str(e)}\") from e\n\n\ndef _baidu_finance_calendar(\n    date: str, cate: str, process_func, cookie: str = None\n) -> pd.DataFrame:\n    \"\"\"\n    百度股市通日历数据基础函数（支持分页）\n    :param date: 查询日期 (格式: YYYYMMDD)\n    :param cate: 数据类别 (\"economic_data\" 或 \"notify_suspend\")\n    :param process_func: 数据处理函数\n    :param cookie: cookie\n    :return: 处理后的DataFrame\n    \"\"\"\n    # 日期格式转换\n    formatted_date = \"-\".join([date[:4], date[4:6], date[6:]])\n\n    # 构建请求参数\n    base_params = {\n        \"start_date\": formatted_date,\n        \"end_date\": formatted_date,\n        \"pn\": \"0\",\n        \"rn\": \"100\",  # 每页100条\n        \"cate\": cate,\n        \"finClientType\": \"pc\",\n    }\n\n    # 构建请求头\n    headers = {\n        \"accept\": \"application/vnd.finance-web.v1+json\",\n        \"accept-encoding\": \"gzip, deflate, br, zstd\",\n        \"accept-language\": \"en,zh-CN;q=0.9,zh;q=0.8\",\n        \"cache-control\": \"no-cache\",\n        \"origin\": \"https://gushitong.baidu.com\",\n        \"pragma\": \"no-cache\",\n        \"priority\": \"u=1, i\",\n        \"referer\": \"https://gushitong.baidu.com/\",\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/142.0.0.0 Safari/537.36\",\n    }\n\n    # 在_baidu_finance_calendar函数中替换原代码块\n    if cookie is None:\n        try:\n            cookie = _get_baidu_cookie(headers.copy())  # 保护原始headers\n        except Exception as e:\n            # 可降级处理或保留原始行为\n            raise RuntimeError(f\"Failed to obtain Baidu cookies: {str(e)}\") from e\n    headers[\"cookie\"] = cookie\n\n    url = \"https://finance.pae.baidu.com/sapi/v1/financecalendar\"\n    big_df = pd.DataFrame()\n\n    # 获取指定日期的总记录数\n    target_date = formatted_date\n    total_records = 0\n\n    # 第一次请求\n    params = base_params.copy()\n    response = requests.get(\n        url=url, params=params, headers=headers, impersonate=\"chrome110\"\n    )\n    response.raise_for_status()\n    data_json = response.json()\n\n    # 从JSON中提取指定日期的总记录数\n    if \"Result\" in data_json and \"calendarInfo\" in data_json[\"Result\"]:\n        calendar_info = data_json[\"Result\"][\"calendarInfo\"]\n\n        # 查找目标日期的记录\n        for item in calendar_info:\n            if item.get(\"date\") == target_date:\n                total_records = item.get(\"total\", 0)\n                break\n\n    # 计算总页数 (每页100条)\n    total_pages = math.ceil(total_records / 100) if total_records > 0 else 1\n\n    # 处理所有页码\n    for page in range(total_pages):\n        if page > 0:  # 第一页已在前面获取\n            params = base_params.copy()\n            params[\"pn\"] = str(page)\n            response = requests.get(url=url, params=params, headers=headers)\n            response.raise_for_status()\n            data_json = response.json()\n\n        # 提取并处理指定日期的数据\n        if \"Result\" in data_json and \"calendarInfo\" in data_json[\"Result\"]:\n            for item in data_json[\"Result\"][\"calendarInfo\"]:\n                if item.get(\"date\") == target_date and item.get(\"list\"):\n                    processed_df = process_func(item[\"list\"])\n                    big_df = pd.concat([big_df, processed_df], ignore_index=True)\n\n    return big_df\n\n\ndef _process_economic_data(data_list: list) -> pd.DataFrame:\n    \"\"\"处理经济数据\"\"\"\n    if not data_list:\n        return pd.DataFrame()\n    temp_df = pd.DataFrame(data_list)\n    rename_dict = {\n        \"date\": \"日期\",\n        \"time\": \"时间\",\n        \"title\": \"事件\",\n        \"star\": \"重要性\",\n        \"formerVal\": \"前值\",\n        \"pubVal\": \"公布\",\n        \"region\": \"地区\",\n        \"indicateVal\": \"预期\",\n        \"country\": \"国家\",\n        \"timePeriod\": \"统计周期\",\n    }\n    temp_df.rename(columns=rename_dict, inplace=True)\n    required_cols = [\"公布\", \"预期\", \"前值\", \"重要性\"]\n    for col in required_cols:\n        if col not in temp_df.columns:\n            temp_df[col] = None\n    available_cols = []\n    for col in [\n        \"日期\",\n        \"时间\",\n        \"国家\",\n        \"地区\",\n        \"事件\",\n        \"统计周期\",\n        \"公布\",\n        \"预期\",\n        \"前值\",\n        \"重要性\",\n    ]:\n        if col in temp_df.columns:\n            available_cols.append(col)\n    if available_cols:\n        temp_df = temp_df[available_cols]\n    for col in [\"公布\", \"预期\", \"前值\", \"重要性\"]:\n        if col in temp_df.columns:\n            temp_df[col] = pd.to_numeric(temp_df[col], errors=\"coerce\")\n    if \"日期\" in temp_df.columns:\n        temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n\n    return temp_df\n\n\ndef _process_suspend_data(data_list: list) -> pd.DataFrame:\n    \"\"\"处理停复牌数据 - 根据实际JSON结构精确修正\"\"\"\n    if not data_list:\n        return pd.DataFrame()\n    temp_df = pd.DataFrame(data_list)\n    rename_dict = {\n        \"code\": \"股票代码\",\n        \"name\": \"股票简称\",\n        \"exchange\": \"交易所代码\",\n        \"start\": \"停牌时间\",\n        \"reason\": \"停牌事项说明\",\n        \"marketValue\": \"市值\",\n        \"date\": \"公告日期\",\n        \"time\": \"公告时间\",\n        \"type\": \"证券类型\",\n        \"market\": \"市场类型\",\n        \"isSkip\": \"是否跳过\",\n        \"end\": \"复牌时间\",\n    }\n    temp_df.rename(columns=rename_dict, inplace=True)\n    if \"复牌时间\" not in temp_df.columns:\n        temp_df[\"复牌时间\"] = \"-\"\n    temp_df = temp_df[\n        [\n            \"股票代码\",\n            \"股票简称\",\n            \"交易所代码\",\n            \"停牌时间\",\n            \"复牌时间\",\n            \"停牌事项说明\",\n            \"市值\",\n            \"公告日期\",\n            \"公告时间\",\n            \"证券类型\",\n            \"市场类型\",\n            \"是否跳过\",\n        ]\n    ]\n    return temp_df\n\n\ndef news_economic_baidu(date: str = \"20251126\", cookie: str = None) -> pd.DataFrame:\n    \"\"\"\n    百度股市通-经济数据\n    https://gushitong.baidu.com/calendar\n    :param date: 查询日期 (格式: YYYYMMDD)\n    :param cookie: cookie\n    :return: 经济数据DataFrame\n    \"\"\"\n    return _baidu_finance_calendar(\n        date=date,\n        cate=\"economic_data\",\n        process_func=_process_economic_data,\n        cookie=cookie,\n    )\n\n\ndef news_trade_notify_suspend_baidu(\n    date: str = \"20251126\", cookie: str = None\n) -> pd.DataFrame:\n    \"\"\"\n    百度股市通-交易提醒-停复牌\n    https://gushitong.baidu.com/calendar\n    :param date: 查询日期 (格式: YYYYMMDD)\n    :param cookie: cookie\n    :return: 停复牌数据DataFrame\n    \"\"\"\n    return _baidu_finance_calendar(\n        date=date,\n        cate=\"notify_suspend\",\n        process_func=_process_suspend_data,\n        cookie=cookie,\n    )\n\n\ndef _process_dividend_data(data_list: list) -> pd.DataFrame:\n    \"\"\"处理分红派息数据\"\"\"\n    if not data_list:\n        return pd.DataFrame()\n\n    temp_df = pd.DataFrame(data_list)\n\n    # 字段映射\n    rename_dict = {\n        \"code\": \"股票代码\",\n        \"market\": \"-\",  # 这个字段在最终结果中会被删除\n        \"exchange\": \"交易所\",\n        \"name\": \"股票简称\",\n        \"diviDate\": \"除权日\",\n        \"date\": \"报告期\",\n        \"diviCash\": \"分红\",\n        \"shareDivide\": \"送股\",\n        \"transfer\": \"转增\",\n        \"physical\": \"实物\",\n    }\n    temp_df.rename(columns=rename_dict, inplace=True)\n\n    # 确保必要列存在\n    if \"分红\" not in temp_df.columns:\n        temp_df[\"分红\"] = \"-\"\n    if \"实物\" not in temp_df.columns:\n        temp_df[\"实物\"] = \"-\"\n    if \"送股\" not in temp_df.columns:\n        temp_df[\"送股\"] = \"-\"\n    if \"转增\" not in temp_df.columns:\n        temp_df[\"转增\"] = \"-\"\n\n    # 选择需要的列\n    temp_df = temp_df[\n        [\n            \"股票代码\",\n            \"除权日\",\n            \"分红\",\n            \"送股\",\n            \"转增\",\n            \"实物\",\n            \"交易所\",\n            \"股票简称\",\n            \"报告期\",\n        ]\n    ]\n\n    # 日期格式转换\n    if \"除权日\" in temp_df.columns:\n        temp_df[\"除权日\"] = pd.to_datetime(temp_df[\"除权日\"], errors=\"coerce\").dt.date\n    if \"报告期\" in temp_df.columns:\n        temp_df[\"报告期\"] = pd.to_datetime(temp_df[\"报告期\"], errors=\"coerce\").dt.date\n\n    return temp_df\n\n\ndef news_trade_notify_dividend_baidu(\n    date: str = \"20251126\", cookie: str = None\n) -> pd.DataFrame:\n    \"\"\"\n    百度股市通-交易提醒-分红派息\n    https://gushitong.baidu.com/calendar\n    :param date: 查询日期 (格式: YYYYMMDD)\n    :param cookie: cookie\n    :return: 交易提醒-分红派息DataFrame\n    \"\"\"\n    return _baidu_finance_calendar(\n        date=date,\n        cate=\"notify_divide\",\n        process_func=_process_dividend_data,\n        cookie=cookie,\n    )\n\n\ndef _process_report_data(data_list: list) -> pd.DataFrame:\n    \"\"\"处理财报发行数据 - 根据实际JSON结构精确修正\"\"\"\n    if not data_list:\n        return pd.DataFrame()\n\n    # 创建DataFrame\n    temp_df = pd.DataFrame(data_list)\n\n    # 精确字段映射 (根据提供的JSON结构)\n    rename_dict = {\n        \"code\": \"股票代码\",\n        \"name\": \"股票简称\",\n        \"exchange\": \"交易所\",\n        \"reportType\": \"财报类型\",\n        \"time\": \"发布时间\",\n        \"marketValue\": \"市值\",\n        \"capitalization\": \"总市值\",\n        \"date\": \"发布日期\",\n    }\n    temp_df.rename(columns=rename_dict, inplace=True)\n\n    # 确保必要列存在\n    if \"财报类型\" not in temp_df.columns:\n        temp_df[\"财报类型\"] = \"-\"\n    if \"发布时间\" not in temp_df.columns:\n        temp_df[\"发布时间\"] = \"-\"\n    if \"市值\" not in temp_df.columns and \"总市值\" in temp_df.columns:\n        temp_df[\"市值\"] = temp_df[\"总市值\"]\n\n    # 选择并排序列\n    available_cols = []\n    for col in [\n        \"股票代码\",\n        \"股票简称\",\n        \"交易所\",\n        \"财报类型\",\n        \"发布时间\",\n        \"市值\",\n        \"发布日期\",\n    ]:\n        if col in temp_df.columns:\n            available_cols.append(col)\n\n    if available_cols:\n        temp_df = temp_df[available_cols]\n    else:\n        # 如果没有匹配的列，返回空DataFrame\n        return pd.DataFrame()\n\n    # 类型转换\n    if \"市值\" in temp_df.columns:\n        temp_df[\"市值\"] = pd.to_numeric(temp_df[\"市值\"], errors=\"coerce\")\n\n    if \"发布日期\" in temp_df.columns:\n        temp_df[\"发布日期\"] = pd.to_datetime(\n            temp_df[\"发布日期\"], errors=\"coerce\"\n        ).dt.date\n\n    return temp_df\n\n\ndef news_report_time_baidu(date: str = \"20251126\", cookie: str = None) -> pd.DataFrame:\n    \"\"\"\n    百度股市通-财报发行\n    https://gushitong.baidu.com/calendar\n    :param date: 查询日期 (格式: YYYYMMDD)\n    :param cookie: cookie\n    :return: 财报发行DataFrame\n    \"\"\"\n    return _baidu_finance_calendar(\n        date=date, cate=\"report_time\", process_func=_process_report_data, cookie=cookie\n    )\n\n\nif __name__ == \"__main__\":\n    news_economic_baidu_df = news_economic_baidu(date=\"20251126\")\n    print(news_economic_baidu_df)\n\n    news_trade_notify_suspend_baidu_df = news_trade_notify_suspend_baidu(\n        date=\"20251126\"\n    )\n    print(news_trade_notify_suspend_baidu_df)\n\n    news_trade_notify_dividend_baidu_df = news_trade_notify_dividend_baidu(\n        date=\"20251126\"\n    )\n    print(news_trade_notify_dividend_baidu_df)\n\n    news_report_time_baidu_df = news_report_time_baidu(date=\"20251126\")\n    print(news_report_time_baidu_df)\n"
  },
  {
    "path": "akshare/news/news_cctv.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/25 17:00\nDesc: 新闻联播文字稿\nhttps://tv.cctv.com/lm/xwlb\n\"\"\"\n\nimport re\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\nfrom tqdm import tqdm\n\n\ndef news_cctv(date: str = \"20240424\") -> pd.DataFrame:\n    \"\"\"\n    新闻联播文字稿\n    https://tv.cctv.com/lm/xwlb\n    :param date: 需要获取数据的日期; 目前 20160203 年后\n    :type date: str\n    :return: 新闻联播文字稿\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if int(date) <= int(\"20130708\"):\n        url = f\"https://cctv.cntv.cn/lm/xinwenlianbo/{date}.shtml\"\n        r = requests.get(url)\n        r.encoding = \"gbk\"\n        raw_list = re.findall(r\"title_array_01\\((.*)\", r.text)\n        page_url = [\n            re.findall(\"(http.*)\", item)[0].split(\"'\")[0] for item in raw_list[1:]\n        ]\n        title_list = []\n        content_list = []\n        headers = {\n            \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,\"\n            \"image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\",\n            \"Accept-Encoding\": \"gzip, deflate\",\n            \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n            \"Cache-Control\": \"no-cache\",\n            \"Cookie\": \"cna=DLYSGBDthG4CAbRVCNxSxGT6\",\n            \"Host\": \"tv.cctv.com\",\n            \"Pragma\": \"no-cache\",\n            \"Proxy-Connection\": \"keep-alive\",\n            \"Upgrade-Insecure-Requests\": \"1\",\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/92.0.4515.159 Safari/537.36\",\n        }\n        for page in tqdm(page_url, leave=False):\n            try:\n                r = requests.get(page, headers=headers)\n                r.encoding = \"utf-8\"\n                soup = BeautifulSoup(r.text, \"lxml\")\n                title = soup.find(\"h3\").text\n                content = soup.find(\"div\", attrs={\"class\": \"cnt_bd\"}).text\n                title_list.append(title.strip(\"[视频]\").strip().replace(\"\\n\", \" \"))\n                content_list.append(\n                    content.strip()\n                    .strip(\"央视网消息(新闻联播)：\")\n                    .strip(\"央视网消息（新闻联播）：\")\n                    .strip(\"(新闻联播)：\")\n                    .strip()\n                    .replace(\"\\n\", \" \")\n                )\n            except:  # noqa: E722\n                continue\n        temp_df = pd.DataFrame(\n            data=[[date] * len(title_list), title_list, content_list],\n            index=[\"date\", \"title\", \"content\"],\n        ).T\n        return temp_df\n\n    elif int(date) < int(\"20160203\"):\n        url = f\"https://cctv.cntv.cn/lm/xinwenlianbo/{date}.shtml\"\n        r = requests.get(url)\n        r.encoding = \"utf-8\"\n        soup = BeautifulSoup(r.text, \"lxml\")\n        page_url = [\n            item.find(\"a\")[\"href\"]\n            for item in soup.find(\n                name=\"div\", attrs={\"id\": \"contentELMT1368521805488378\"}\n            ).find_all(\"li\")[1:]\n        ]\n        title_list = []\n        content_list = []\n        headers = {\n            \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,\"\n            \"image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\",\n            \"Accept-Encoding\": \"gzip, deflate\",\n            \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n            \"Cache-Control\": \"no-cache\",\n            \"Cookie\": \"cna=DLYSGBDthG4CAbRVCNxSxGT6\",\n            \"Host\": \"tv.cctv.com\",\n            \"Pragma\": \"no-cache\",\n            \"Proxy-Connection\": \"keep-alive\",\n            \"Upgrade-Insecure-Requests\": \"1\",\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/92.0.4515.159 Safari/537.36\",\n        }\n        for page in tqdm(page_url, leave=False):\n            try:\n                r = requests.get(page, headers=headers)\n                r.encoding = \"utf-8\"\n                soup = BeautifulSoup(r.text, features=\"lxml\")\n                title = soup.find(\"h3\").text\n                content = soup.find(name=\"div\", attrs={\"class\": \"cnt_bd\"}).text\n                title_list.append(title.strip(\"[视频]\").strip().replace(\"\\n\", \" \"))\n                content_list.append(\n                    content.strip()\n                    .strip(\"央视网消息(新闻联播)：\")\n                    .strip(\"央视网消息（新闻联播）：\")\n                    .strip(\"(新闻联播)：\")\n                    .strip()\n                    .replace(\"\\n\", \" \")\n                )\n            except:  # noqa: E722\n                continue\n        temp_df = pd.DataFrame(\n            data=[[date] * len(title_list), title_list, content_list],\n            index=[\"date\", \"title\", \"content\"],\n        ).T\n        return temp_df\n    elif int(date) > int(\"20160203\"):\n        url = f\"https://tv.cctv.com/lm/xwlb/day/{date}.shtml\"\n        r = requests.get(url)\n        r.encoding = \"utf-8\"\n        soup = BeautifulSoup(r.text, \"lxml\")\n        page_url = [item.find(\"a\")[\"href\"] for item in soup.find_all(\"li\")[1:]]\n        title_list = []\n        content_list = []\n        headers = {\n            \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,\"\n            \"image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\",\n            \"Accept-Encoding\": \"gzip, deflate\",\n            \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n            \"Cache-Control\": \"no-cache\",\n            \"Cookie\": \"cna=DLYSGBDthG4CAbRVCNxSxGT6\",\n            \"Host\": \"tv.cctv.com\",\n            \"Pragma\": \"no-cache\",\n            \"Proxy-Connection\": \"keep-alive\",\n            \"Upgrade-Insecure-Requests\": \"1\",\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/92.0.4515.159 Safari/537.36\",\n        }\n        for page in tqdm(page_url, leave=False):\n            try:\n                r = requests.get(page, headers=headers)\n                r.encoding = \"utf-8\"\n                soup = BeautifulSoup(r.text, features=\"lxml\")\n                if soup.find(\"h3\"):\n                    title = soup.find(\"h3\").text\n                else:\n                    title = soup.find(name=\"div\", attrs={\"class\": \"tit\"}).text\n                if soup.find(name=\"div\", attrs={\"class\": \"cnt_bd\"}):\n                    content = soup.find(name=\"div\", attrs={\"class\": \"cnt_bd\"}).text\n                else:\n                    content = soup.find(\n                        name=\"div\", attrs={\"class\": \"content_area\"}\n                    ).text\n                title_list.append(title.strip(\"[视频]\").strip().replace(\"\\n\", \" \"))\n                content_list.append(\n                    content.strip()\n                    .strip(\"央视网消息(新闻联播)：\")\n                    .strip(\"央视网消息（新闻联播）：\")\n                    .strip(\"(新闻联播)：\")\n                    .strip()\n                    .replace(\"\\n\", \" \")\n                )\n            except:  # noqa: E722\n                continue\n        temp_df = pd.DataFrame(\n            data=[[date] * len(title_list), title_list, content_list],\n            index=[\"date\", \"title\", \"content\"],\n        ).T\n        return temp_df\n\n\nif __name__ == \"__main__\":\n    news_cctv_df = news_cctv(date=\"20240424\")\n    print(news_cctv_df)\n"
  },
  {
    "path": "akshare/news/news_stock.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/12/23 17:15\nDesc: 个股新闻数据\nhttps://so.eastmoney.com/news/s?keyword=603777\n\"\"\"\n\nimport json\n\nimport pandas as pd\nfrom curl_cffi import requests\n\n\ndef stock_news_em(symbol: str = \"603777\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-个股新闻-最近 100 条新闻\n    https://so.eastmoney.com/news/s?keyword=603777\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 个股新闻\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://search-api-web.eastmoney.com/search/jsonp\"\n    inner_param = {\n        \"uid\": \"\",\n        \"keyword\": symbol,\n        \"type\": [\"cmsArticleWebOld\"],\n        \"client\": \"web\",\n        \"clientType\": \"web\",\n        \"clientVersion\": \"curr\",\n        \"param\": {\n            \"cmsArticleWebOld\": {\n                \"searchScope\": \"default\",\n                \"sort\": \"default\",\n                \"pageIndex\": 1,\n                \"pageSize\": 10,\n                \"preTag\": \"<em>\",\n                \"postTag\": \"</em>\",\n            }\n        },\n    }\n    params = {\n        \"cb\": \"jQuery35101792940631092459_1764599530165\",\n        \"param\": json.dumps(inner_param, ensure_ascii=False),  # 保留中文,\n        \"_\": \"1764599530176\",\n    }\n    headers = {\n        \"accept\": \"*/*\",\n        \"accept-encoding\": \"gzip, deflate, br, zstd\",\n        \"accept-language\": \"en,zh-CN;q=0.9,zh;q=0.8\",\n        \"cache-control\": \"no-cache\",\n        \"connection\": \"keep-alive\",\n        \"cookie\": \"qgqp_b_id=652bf4c98a74e210088f372a17d4e27b; st_nvi=ulN5JAj9FUocz3p4klMME9f20; emshistory=%5B%22603777%22%5D; nid18=010d039dd427dc4d187090491f47d7ad; nid18_create_time=1764582801999; gviem=gSdeY51VWSuTzM3kWaagtf560; gviem_create_time=1764582801999; st_si=55269775884615; st_pvi=66803244437563; st_sp=2025-11-19%2014%3A19%3A16; st_inirUrl=https%3A%2F%2Fso.eastmoney.com%2Fnews%2Fs; st_sn=2; st_psi=20251201223210488-118000300905-0940816858; st_asi=delete\",\n        \"host\": \"search-api-web.eastmoney.com\",\n        \"pragma\": \"no-cache\",\n        \"referer\": \"https://so.eastmoney.com/news/s?keyword=603777\",\n        \"sec-ch-ua\": '\"Chromium\";v=\"142\", \"Google Chrome\";v=\"142\", \"Not_A Brand\";v=\"99\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"sec-fetch-dest\": \"script\",\n        \"sec-fetch-mode\": \"no-cors\",\n        \"sec-fetch-site\": \"same-site\",\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_text = r.text\n    data_json = json.loads(\n        data_text.strip(\"jQuery35101792940631092459_1764599530165(\")[:-1]\n    )\n    temp_df = pd.DataFrame(data_json[\"result\"][\"cmsArticleWebOld\"])\n    temp_df[\"url\"] = \"http://finance.eastmoney.com/a/\" + temp_df[\"code\"] + \".html\"\n    temp_df.rename(\n        columns={\n            \"date\": \"发布时间\",\n            \"mediaName\": \"文章来源\",\n            \"code\": \"-\",\n            \"title\": \"新闻标题\",\n            \"content\": \"新闻内容\",\n            \"url\": \"新闻链接\",\n            \"image\": \"-\",\n        },\n        inplace=True,\n    )\n    temp_df[\"关键词\"] = symbol\n    temp_df = temp_df[\n        [\n            \"关键词\",\n            \"新闻标题\",\n            \"新闻内容\",\n            \"发布时间\",\n            \"文章来源\",\n            \"新闻链接\",\n        ]\n    ]\n    temp_df[\"新闻标题\"] = (\n        temp_df[\"新闻标题\"]\n        .str.replace(r\"\\(<em>\", \"\", regex=True)\n        .str.replace(r\"</em>\\)\", \"\", regex=True)\n    )\n    temp_df[\"新闻标题\"] = (\n        temp_df[\"新闻标题\"]\n        .str.replace(r\"<em>\", \"\", regex=True)\n        .str.replace(r\"</em>\", \"\", regex=True)\n    )\n    temp_df[\"新闻内容\"] = (\n        temp_df[\"新闻内容\"]\n        .str.replace(r\"\\(<em>\", \"\", regex=True)\n        .str.replace(r\"</em>\\)\", \"\", regex=True)\n    )\n    temp_df[\"新闻内容\"] = (\n        temp_df[\"新闻内容\"]\n        .str.replace(r\"<em>\", \"\", regex=True)\n        .str.replace(r\"</em>\", \"\", regex=True)\n    )\n    temp_df[\"新闻内容\"] = temp_df[\"新闻内容\"].str.replace(r\"\\u3000\", \"\", regex=True)\n    temp_df[\"新闻内容\"] = temp_df[\"新闻内容\"].str.replace(r\"\\r\\n\", \" \", regex=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_news_em_df = stock_news_em(symbol=\"603777\")\n    print(stock_news_em_df)\n"
  },
  {
    "path": "akshare/nlp/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2020/3/1 0:02\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/nlp/nlp_interface.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/7/6 14:02\nDesc: ownthink-knowledge graph\nhttps://ownthink.com/\nhttps://www.ownthink.com/docs/kg/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef nlp_ownthink(word: str = \"人工智能\", indicator: str = \"entity\") -> pd.DataFrame:\n    \"\"\"\n    Knowledge Graph interface for financial research\n    https://ownthink.com/\n    :param word: word in chinese\n    :type word: str\n    :param indicator: entity or desc or avp or tag\n    :type indicator: str\n    :return: indicator data\n    :rtype: list or dict or pandas.DataFrame\n    \"\"\"\n    url = \"https://api.ownthink.com/kg/knowledge\"\n    payload = {\n        \"entity\": word,\n    }\n    r = requests.post(url, data=payload)\n    if not r.json()[\"data\"]:\n        print(\"Can not find the resource, please type into the correct word\")\n        return pd.DataFrame()\n    if indicator == \"entity\":\n        return r.json()[\"data\"][\"entity\"]\n    if indicator == \"desc\":\n        return r.json()[\"data\"][\"desc\"]\n    if indicator == \"avp\":\n        return pd.DataFrame(r.json()[\"data\"][\"avp\"], columns=[\"字段\", \"值\"])\n    if indicator == \"tag\":\n        return r.json()[\"data\"][\"tag\"]\n\n\ndef nlp_answer(question: str = \"人工智能\") -> str:\n    \"\"\"\n    智能问答\n    https://ownthink.com/robot.html\n    :param question: word in chinese\n    :type question: str\n    :return: indicator data\n    :rtype: list or dict or pandas.DataFrame\n    \"\"\"\n    url = \"https://api.ownthink.com/bot\"\n    params = {\"spoken\": question}\n    r = requests.get(url, params=params)\n    json_data = r.json()\n    answer = json_data[\"data\"][\"info\"][\"text\"]\n    return answer\n\n\nif __name__ == \"__main__\":\n    nlp_ownthink_df = nlp_ownthink(word=\"人工智能\", indicator=\"entity\")\n    print(nlp_ownthink_df)\n\n    nlp_answer_df = nlp_answer(question=\"姚明的身高\")\n    print(nlp_answer_df)\n"
  },
  {
    "path": "akshare/option/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/9/30 13:58\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/option/cons.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/9/30 13:58\nDesc: 期权配置文件\n\"\"\"\n\nimport datetime\nimport json\nimport os\nimport re\n\n# 中国金融期货交易所\n\nCFFEX_OPTION_URL_300 = \"http://www.cffex.com.cn/quote_IO.txt\"\n\n# 深圳证券交易所\n\nSZ_OPTION_URL_300 = \"http://www.szse.cn/api/report/ShowReport?SHOWTYPE=xlsx&CATALOGID=ysplbrb&TABKEY=tab1&random=0.10432465776720479\"\n\n# 上海证券交易所\n\nSH_OPTION_URL_50 = \"http://yunhq.sse.com.cn:32041/v1/sh1/list/self/510050\"\nSH_OPTION_URL_KING_50 = \"http://yunhq.sse.com.cn:32041/v1/sho/list/tstyle/510050_{}\"\n\nSH_OPTION_URL_300 = \"http://yunhq.sse.com.cn:32041/v1/sh1/list/self/510300\"\nSH_OPTION_URL_KING_300 = \"http://yunhq.sse.com.cn:32041/v1/sho/list/tstyle/510300_{}\"\n\nSH_OPTION_URL_500 = \"http://yunhq.sse.com.cn:32041/v1/sh1/list/self/510500\"\nSH_OPTION_URL_KING_500 = \"http://yunhq.sse.com.cn:32041/v1/sho/list/tstyle/510500_{}\"\n\nSH_OPTION_URL_KC_50 = \"http://yunhq.sse.com.cn:32041/v1/sh1/list/self/588000\"\nSH_OPTION_URL_KC_KING_50 = \"http://yunhq.sse.com.cn:32041/v1/sho/list/tstyle/588000_{}\"\n\nSH_OPTION_URL_KC_50_YFD = \"http://yunhq.sse.com.cn:32041/v1/sh1/list/self/588080\"\nSH_OPTION_URL_KING_50_YFD = \"http://yunhq.sse.com.cn:32041/v1/sho/list/tstyle/588080_{}\"\n\nSH_OPTION_PAYLOAD = {\n    \"select\": \"select: code,name,last,change,chg_rate,amp_rate,volume,amount,prev_close\"\n}\n\nSH_OPTION_PAYLOAD_OTHER = {\"select\": \"contractid,last,chg_rate,presetpx,exepx\"}\n\n\n# 大连商品交易所\nDCE_OPTION_URL = \"http://portal.dce.com.cn/publicweb/quotesdata/dayQuotesCh.html\"\nDCE_DAILY_OPTION_URL = (\n    \"http://portal.dce.com.cn/publicweb/quotesdata/exportDayQuotesChData.html\"\n)\n\n# 上海期货交易所\nSHFE_OPTION_URL = \"https://tsite.shfe.com.cn/data/dailydata/option/kx/kx{}.dat\"\n\n# 郑州商品交易所\nCZCE_DAILY_OPTION_URL_3 = (\n    \"http://www.czce.com.cn/cn/DFSStaticFiles/Option/{}/{}/OptionDataDaily.txt\"\n)\n\n# PAYLOAD\nSHFE_HEADERS = {\"User-Agent\": \"Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)\"}\n\nDATE_PATTERN = re.compile(r\"^([0-9]{4})[-/]?([0-9]{2})[-/]?([0-9]{2})\")\n\n\ndef convert_date(date):\n    \"\"\"\n    transform a date string to datetime.date object\n    :param date, string, e.g. 2016-01-01, 20160101 or 2016/01/01\n    :return: object of datetime.date(such as 2016-01-01) or None\n    \"\"\"\n    if isinstance(date, datetime.date):\n        return date\n    elif isinstance(date, str):\n        match = DATE_PATTERN.match(date)\n        if match:\n            groups = match.groups()\n            if len(groups) == 3:\n                return datetime.date(\n                    year=int(groups[0]), month=int(groups[1]), day=int(groups[2])\n                )\n    return None\n\n\ndef get_json_path(name, module_file):\n    \"\"\"\n    获取 JSON 配置文件的路径(从模块所在目录查找)\n    :param name: 文件名\n    :param module_file: filename\n    :return: str json_file_path\n    \"\"\"\n    module_folder = os.path.abspath(os.path.dirname(os.path.dirname(module_file)))\n    module_json_path = os.path.join(module_folder, \"file_fold\", name)\n    return module_json_path\n\n\ndef get_calendar():\n    \"\"\"\n    获取交易日历至 2019 年结束, 这里的交易日历需要按年更新\n    :return: json\n    \"\"\"\n    setting_file_name = \"calendar.json\"\n    setting_file_path = get_json_path(setting_file_name, __file__)\n    return json.load(open(setting_file_path, \"r\"))\n\n\ndef last_trading_day(day):\n    \"\"\"\n    获取前一个交易日\n    :param day: \"%Y%m%d\" or  datetime.date()\n    :return last_day: \"%Y%m%d\" or  datetime.date()\n    \"\"\"\n    calendar = get_calendar()\n\n    if isinstance(day, str):\n        if day not in calendar:\n            print(\"Today is not trading day：\" + day)\n            return False\n        pos = calendar.index(day)\n        last_day = calendar[pos - 1]\n        return last_day\n\n    elif isinstance(day, datetime.date):\n        d_str = day.strftime(\"%Y%m%d\")\n        if d_str not in calendar:\n            print(\"Today is not working day：\" + d_str)\n            return False\n        pos = calendar.index(d_str)\n        last_day = calendar[pos - 1]\n        last_day = datetime.datetime.strptime(last_day, \"%Y%m%d\").date()\n        return last_day\n\n\ndef get_latest_data_date(day):\n    \"\"\"\n    获取最新的有数据的交易日\n    :param day: datetime.datetime\n    :return string YYYYMMDD\n    \"\"\"\n    calendar = get_calendar()\n    if day.strftime(\"%Y%m%d\") in calendar:\n        if day.time() > datetime.time(17, 0, 0):\n            return day.strftime(\"%Y%m%d\")\n        else:\n            return last_trading_day(day.strftime(\"%Y%m%d\"))\n    else:\n        while day.strftime(\"%Y%m%d\") not in calendar:\n            day = day - datetime.timedelta(days=1)\n        return day.strftime(\"%Y%m%d\")\n\n\nif __name__ == \"__main__\":\n    d = datetime.datetime(2018, 10, 5, 17, 1, 0)\n    print(get_latest_data_date(d))\n"
  },
  {
    "path": "akshare/option/option_comm_qihuo.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/7/5 15:00\nDesc: 九期网-商品期权手续费\nhttps://www.9qihuo.com/qiquanshouxufei\n\"\"\"\n\nfrom functools import lru_cache\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\n@lru_cache()\ndef option_comm_symbol() -> pd.DataFrame:\n    import urllib3\n\n    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)\n    url = \"https://www.9qihuo.com/qiquanshouxufei\"\n    r = requests.get(url, verify=False)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    name = [\n        item.string.strip()\n        for item in soup.find(name=\"div\", attrs={\"id\": \"inst_list\"}).find_all(name=\"a\")\n    ]\n    code = [\n        item[\"href\"].split(\"?\")[1].split(\"=\")[1]\n        for item in soup.find(name=\"div\", attrs={\"id\": \"inst_list\"}).find_all(name=\"a\")\n    ]\n    temp_df = pd.DataFrame([name, code]).T\n    temp_df.columns = [\"品种名称\", \"品种代码\"]\n    return temp_df\n\n\ndef option_comm_info(symbol: str = \"工业硅期权\") -> pd.DataFrame:\n    \"\"\"\n    九期网-商品期权手续费\n    https://www.9qihuo.com/qiquanshouxufei\n    :param symbol: choice of {\"所有\", \"上海期货交易所\", \"大连商品交易所\", \"郑州商品交易所\", \"上海国际能源交易中心\", \"广州期货交易所\"}\n    :type symbol: str\n    :return: 期权手续费\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import urllib3\n\n    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)\n    symbol_df = option_comm_symbol()\n    symbol_str = symbol_df[symbol_df[\"品种名称\"].str.contains(symbol)][\n        \"品种代码\"\n    ].values[0]\n    params = {\"heyue\": symbol_str}\n    url = \"https://www.9qihuo.com/qiquanshouxufei\"\n    r = requests.get(url, params=params, verify=False)\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    market_symbol = temp_df.iloc[0, 0]\n    columns = temp_df.iloc[2, :]\n    temp_df = temp_df.iloc[3:, :]\n    temp_df.columns = columns\n    temp_df[\"交易所\"] = market_symbol\n    temp_df.reset_index(drop=True, inplace=True)\n    temp_df.index.name = None\n    temp_df.columns.name = None\n    temp_df[\"现价\"] = pd.to_numeric(temp_df[\"现价\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"每跳毛利/元\"] = pd.to_numeric(temp_df[\"每跳毛利/元\"], errors=\"coerce\")\n    temp_df[\"每跳净利/元\"] = pd.to_numeric(temp_df[\"每跳净利/元\"], errors=\"coerce\")\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    raw_date_text = soup.find(name=\"a\", attrs={\"id\": \"dlink\"}).previous\n    comm_update_time = raw_date_text.split(\"，\")[0].strip(\"（手续费更新时间：\")\n    price_update_time = (\n        raw_date_text.split(\"，\")[1].strip(\"价格更新时间：\").strip(\"。）\")\n    )\n    temp_df[\"手续费更新时间\"] = comm_update_time\n    temp_df[\"价格更新时间\"] = price_update_time\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    option_comm_symbol_df = option_comm_symbol()\n    print(option_comm_symbol_df)\n\n    option_comm_info_df = option_comm_info(symbol=\"工业硅期权\")\n    print(option_comm_info_df)\n"
  },
  {
    "path": "akshare/option/option_commodity.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/10/17 21:00\nDesc: 商品期权数据\n说明：\n(1) 价格：自2019年12月02日起，纤维板报价单位由元/张改为元/立方米\n(2) 价格：元/吨，鸡蛋为元/500千克，纤维板为元/立方米，胶合板为元/张\n(3) 成交量、持仓量：手（按双边计算）\n(4) 成交额：万元（按双边计算）\n(5) 涨跌＝收盘价－前结算价\n(6) 涨跌1=今结算价-前结算价\n(7) 合约系列：具有相同月份标的期货合约的所有期权合约的统称\n(8) 隐含波动率：根据期权市场价格，利用期权定价模型计算的标的期货合约价格波动率\n\"\"\"\n\nimport datetime\nimport warnings\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\nfrom akshare.option.cons import (\n    get_calendar,\n    convert_date,\n    CZCE_DAILY_OPTION_URL_3,\n    SHFE_HEADERS,\n)\n\n\ndef option_hist_dce(\n    symbol: str = \"聚丙烯期权\", trade_date: str = \"20251016\"\n) -> pd.DataFrame:\n    \"\"\"\n    大连商品交易所-期权-日频行情数据\n    http://www.dce.com.cn/\n    :param trade_date: 交易日\n    :type trade_date: str\n    :param symbol: choice of {\"玉米期权\", \"豆粕期权\", \"铁矿石期权\", \"液化石油气期权\", \"聚乙烯期权\", \"聚氯乙烯期权\",\n    \"聚丙烯期权\", \"棕榈油期权\", \"黄大豆1号期权\", \"黄大豆2号期权\", \"豆油期权\", \"乙二醇期权\", \"苯乙烯期权\",\n    \"鸡蛋期权\", \"玉米淀粉期权\", \"生猪期权\", \"原木期权\"}\n    :type symbol: str\n    :return: 日频行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    option_code_map = {\n        \"玉米期权\": \"c\",\n        \"豆粕期权\": \"m\",\n        \"铁矿石期权\": \"i\",\n        \"液化石油气期权\": \"pg\",\n        \"聚乙烯期权\": \"l\",\n        \"聚氯乙烯期权\": \"v\",\n        \"聚丙烯期权\": \"pp\",\n        \"棕榈油期权\": \"p\",\n        \"黄大豆1号期权\": \"a\",\n        \"黄大豆2号期权\": \"b\",\n        \"豆油期权\": \"y\",\n        \"乙二醇期权\": \"eg\",\n        \"苯乙烯期权\": \"eb\",\n        \"鸡蛋期权\": \"jd\",\n        \"玉米淀粉期权\": \"cs\",\n        \"生猪期权\": \"lh\",\n        \"原木期权\": \"lg\",\n    }\n    calendar = get_calendar()\n    day = convert_date(trade_date) if trade_date is not None else datetime.date.today()\n    if day.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(\"%s非交易日\" % day.strftime(\"%Y%m%d\"))\n        return pd.DataFrame()\n    url = \"http://www.dce.com.cn/dcereport/publicweb/dailystat/dayQuotes\"\n    payload = {\n        \"contractId\": \"\",\n        \"lang\": \"zh\",\n        \"optionSeries\": \"\",\n        \"statisticsType\": 0,\n        \"tradeDate\": f\"{trade_date}\",\n        \"tradeType\": \"2\",\n        \"varietyId\": f\"{option_code_map[symbol]}\",\n    }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.rename(\n        columns={\n            \"variety\": \"品种名称\",\n            \"contractId\": \"合约\",\n            \"open\": \"开盘价\",\n            \"high\": \"最高价\",\n            \"low\": \"最低价\",\n            \"close\": \"收盘价\",\n            \"lastClear\": \"前结算价\",\n            \"clearPrice\": \"结算价\",\n            \"diff\": \"涨跌\",\n            \"diff1\": \"涨跌1\",\n            \"delta\": \"Delta\",\n            \"volumn\": \"成交量\",  # 注意：你写的是“volumn”，可能是拼写错误，应为“volume”\n            \"openInterest\": \"持仓量\",\n            \"diffI\": \"持仓量变化\",\n            \"turnover\": \"成交额\",\n            \"matchQtySum\": \"行权量\",\n            \"impliedVolatility\": \"隐含波动率(%)\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"品种名称\",\n            \"合约\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"收盘价\",\n            \"前结算价\",\n            \"结算价\",\n            \"涨跌\",\n            \"涨跌1\",\n            \"Delta\",\n            \"隐含波动率(%)\",\n            \"成交量\",\n            \"持仓量\",\n            \"持仓量变化\",\n            \"成交额\",\n            \"行权量\",\n        ]\n    ]\n    comma_cols = [\n        \"开盘价\",\n        \"最高价\",\n        \"最低价\",\n        \"收盘价\",\n        \"前结算价\",\n        \"结算价\",\n        \"涨跌\",\n        \"涨跌1\",\n        \"Delta\",\n        \"隐含波动率(%)\",\n        \"成交额\",\n    ]  # 需要处理的列\n    for col in comma_cols:\n        temp_df[col] = (\n            temp_df[col]\n            .astype(str)\n            .str.replace(\",\", \"\")\n            .pipe(pd.to_numeric, errors=\"coerce\")\n        )\n    return temp_df\n\n\ndef __option_czce_daily_convert_numeric_columns(df):\n    # 定义要处理的列\n    columns_to_convert = [\n        \"昨结算\",\n        \"今开盘\",\n        \"最高价\",\n        \"最低价\",\n        \"今收盘\",\n        \"今结算\",\n        \"涨跌1\",\n        \"涨跌2\",\n        \"成交量(手)\",\n        \"持仓量\",\n        \"增减量\",\n        \"成交额(万元)\",\n        \"DELTA\",\n        \"隐含波动率\",\n        \"行权量\",\n    ]\n\n    # 转换函数：去除逗号并转换为float\n    def convert_to_float(x):\n        try:\n            return float(str(x).replace(\",\", \"\"))\n        except:  # noqa: E722\n            return x\n\n    # 创建 DataFrame 的副本以避免 SettingWithCopyWarning\n    df_copy = df.copy()\n    df_copy.columns = [item.strip() for item in df_copy]\n    # 应用转换\n    for col in columns_to_convert:\n        df_copy[col] = df_copy[col].apply(convert_to_float)\n\n    return df_copy\n\n\ndef option_hist_czce(\n    symbol: str = \"白糖期权\", trade_date: str = \"20191017\"\n) -> pd.DataFrame:\n    \"\"\"\n    郑州商品交易所-期权-日频行情数据\n    http://www.czce.com.cn/cn/sspz/dejbqhqq/H770227index_1.htm#tabs-2\n    :param trade_date: 交易日\n    :type trade_date: str\n    :param symbol: choice of {\"白糖期权\", \"棉花期权\", \"甲醇期权\", \"PTA期权\", \"动力煤期权\", \"菜籽粕期权\", \"菜籽油期权\",\n    \"花生期权\", \"对二甲苯期权\", \"烧碱期权\", \"纯碱期权\", \"短纤期权\", \"锰硅期权\", \"硅铁期权\", \"尿素期权\", \"苹果期权\", \"红枣期权\",\n    \"玻璃期权\", \"瓶片期权\", \"丙烯期货\"}\n    :type symbol: str\n    :return: 日频行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    calendar = get_calendar()\n    day = convert_date(trade_date) if trade_date is not None else datetime.date.today()\n    if day.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(\"{}非交易日\".format(day.strftime(\"%Y%m%d\")))\n        return pd.DataFrame()\n    if day > datetime.date(year=2010, month=8, day=24):\n        url = CZCE_DAILY_OPTION_URL_3.format(day.strftime(\"%Y\"), day.strftime(\"%Y%m%d\"))\n        try:\n            r = requests.get(url)\n            f = StringIO(r.text)\n            table_df = pd.read_table(f, encoding=\"utf-8\", skiprows=1, sep=\"|\")\n            table_df.columns = [\n                \"合约代码\",\n                \"昨结算\",\n                \"今开盘\",\n                \"最高价\",\n                \"最低价\",\n                \"今收盘\",\n                \"今结算\",\n                \"涨跌1\",\n                \"涨跌2\",\n                \"成交量(手)\",\n                \"持仓量\",\n                \"增减量\",\n                \"成交额(万元)\",\n                \"DELTA\",\n                \"隐含波动率\",\n                \"行权量\",\n            ]\n            if symbol == \"白糖期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"SR\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"棉花期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"CF\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"甲醇期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"MA\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"PTA期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"TA\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"动力煤期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"ZC\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"菜籽粕期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"RM\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"菜籽油期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"OI\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"花生期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"PK\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"短纤期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"PF\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"对二甲苯期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"PX\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"烧碱期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"SH\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"纯碱期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"SA\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"短纤期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"PF\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"锰硅期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"SM\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"硅铁期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"SF\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"尿素期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"UR\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"苹果期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"AP\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"红枣期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"CJ\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"玻璃期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"FG\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"瓶片期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"PR\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            elif symbol == \"丙烯期权\":\n                temp_df = table_df[table_df.iloc[:, 0].str.contains(\"PL\")]\n                temp_df.reset_index(inplace=True, drop=True)\n                temp_df = temp_df.iloc[:-1, :].copy()\n                new_df = __option_czce_daily_convert_numeric_columns(temp_df)\n                return new_df\n            else:\n                return pd.DataFrame()\n        except:  # noqa: E722\n            return pd.DataFrame()\n    else:\n        return pd.DataFrame()\n\n\ndef option_hist_shfe(\n    symbol: str = \"铝期权\", trade_date: str = \"20250418\"\n) -> pd.DataFrame:\n    \"\"\"\n    上海期货交易所-期权-日频行情数据\n    https://www.shfe.com.cn/reports/tradedata/dailyandweeklydata/\n    :param trade_date: 交易日\n    :type trade_date: str\n    :param symbol: choice of {'原油期权', '铜期权', '铝期权', '锌期权', '铅期权', '螺纹钢期权', '镍期权', '锡期权', '氧化铝期权',\n    '黄金期权', '白银期权', '丁二烯橡胶期权', '天胶期权'}\n    :type symbol: str\n    :return: 日频行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    calendar = get_calendar()\n    day = convert_date(trade_date) if trade_date is not None else datetime.date.today()\n    if day.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(\"%s非交易日\" % day.strftime(\"%Y%m%d\"))\n        return pd.DataFrame()\n    if day > datetime.date(year=2010, month=8, day=24):\n        url = f\"\"\"https://www.shfe.com.cn/data/tradedata/option/dailydata/kx{day.strftime(\"%Y%m%d\")}.dat\"\"\"\n        try:\n            r = requests.get(url, headers=SHFE_HEADERS)\n            json_data = r.json()\n            table_df = pd.DataFrame(\n                [\n                    row\n                    for row in json_data[\"o_curinstrument\"]\n                    if row[\"INSTRUMENTID\"] not in [\"小计\", \"合计\"]\n                    and row[\"INSTRUMENTID\"] != \"\"\n                ]\n            )\n            contract_df = table_df[table_df[\"PRODUCTNAME\"].str.strip() == symbol]\n            contract_df.rename(\n                columns={\n                    \"INSTRUMENTID\": \"合约代码\",\n                    \"OPENPRICE\": \"开盘价\",\n                    \"HIGHESTPRICE\": \"最高价\",\n                    \"LOWESTPRICE\": \"最低价\",\n                    \"CLOSEPRICE\": \"收盘价\",\n                    \"PRESETTLEMENTPRICE\": \"前结算价\",\n                    \"SETTLEMENTPRICE\": \"结算价\",\n                    \"ZD1_CHG\": \"涨跌1\",\n                    \"ZD2_CHG\": \"涨跌2\",\n                    \"VOLUME\": \"成交量\",\n                    \"OPENINTEREST\": \"持仓量\",\n                    \"OPENINTERESTCHG\": \"持仓量变化\",\n                    \"TURNOVER\": \"成交额\",\n                    \"DELTA\": \"德尔塔\",\n                    \"EXECVOLUME\": \"行权量\",\n                },\n                inplace=True,\n            )\n            contract_df = contract_df[\n                [\n                    \"合约代码\",\n                    \"开盘价\",\n                    \"最高价\",\n                    \"最低价\",\n                    \"收盘价\",\n                    \"前结算价\",\n                    \"结算价\",\n                    \"涨跌1\",\n                    \"涨跌2\",\n                    \"成交量\",\n                    \"持仓量\",\n                    \"持仓量变化\",\n                    \"成交额\",\n                    \"德尔塔\",\n                    \"行权量\",\n                ]\n            ]\n            contract_df.reset_index(inplace=True, drop=True)\n            return contract_df\n        except:  # noqa: E722\n            return pd.DataFrame()\n    else:\n        return pd.DataFrame()\n\n\ndef option_vol_shfe(\n    symbol: str = \"铝期权\", trade_date: str = \"20250418\"\n) -> pd.DataFrame:\n    \"\"\"\n    上海期货交易所-期权-日频行情数据\n    https://www.shfe.com.cn/reports/tradedata/dailyandweeklydata/\n    :param trade_date: 交易日\n    :type trade_date: str\n    :param symbol: choice of {'原油期权', '铜期权', '铝期权', '锌期权', '铅期权', '螺纹钢期权', '镍期权', '锡期权', '氧化铝期权',\n    '黄金期权', '白银期权', '丁二烯橡胶期权', '天胶期权'}\n    :type symbol: str\n    :return: 日频行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    calendar = get_calendar()\n    day = convert_date(trade_date) if trade_date is not None else datetime.date.today()\n    if day.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(\"%s非交易日\" % day.strftime(\"%Y%m%d\"))\n        return pd.DataFrame()\n    if day > datetime.date(year=2010, month=8, day=24):\n        url = f\"\"\"https://www.shfe.com.cn/data/tradedata/option/dailydata/kx{day.strftime(\"%Y%m%d\")}.dat\"\"\"\n        try:\n            r = requests.get(url, headers=SHFE_HEADERS)\n            json_data = r.json()\n            volatility_df = pd.DataFrame(json_data[\"o_cursigma\"])\n            volatility_df = volatility_df[\n                volatility_df[\"PRODUCTNAME\"].str.strip() == symbol\n            ]\n            volatility_df.rename(\n                columns={\n                    \"INSTRUMENTID\": \"合约系列\",\n                    \"VOLUME\": \"成交量\",\n                    \"OPENINTEREST\": \"持仓量\",\n                    \"OPENINTERESTCHG\": \"持仓量变化\",\n                    \"TURNOVER\": \"成交额\",\n                    \"EXECVOLUME\": \"行权量\",\n                    \"SIGMA\": \"隐含波动率\",\n                },\n                inplace=True,\n            )\n            volatility_df = volatility_df[\n                [\n                    \"合约系列\",\n                    \"成交量\",\n                    \"持仓量\",\n                    \"持仓量变化\",\n                    \"成交额\",\n                    \"行权量\",\n                    \"隐含波动率\",\n                ]\n            ]\n            volatility_df.reset_index(inplace=True, drop=True)\n            return volatility_df\n        except:  # noqa: E722\n            return pd.DataFrame()\n    else:\n        return pd.DataFrame()\n\n\ndef option_hist_gfex(\n    symbol: str = \"工业硅\", trade_date: str = \"20230724\"\n) -> pd.DataFrame:\n    \"\"\"\n    广州期货交易所-日频率-量价数据\n    http://www.gfex.com.cn/gfex/rihq/hqsj_tjsj.shtml\n    :param trade_date: 交易日\n    :type trade_date: str\n    :param symbol: choice of {\"工业硅\", \"碳酸锂\"}\n    :type symbol: str\n    :return: 日频行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    calendar = get_calendar()\n    day = convert_date(trade_date) if trade_date is not None else datetime.date.today()\n    if day.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(\"%s非交易日\" % day.strftime(\"%Y%m%d\"))\n        return pd.DataFrame()\n    url = \"http://www.gfex.com.cn/u/interfacesWebTiDayQuotes/loadList\"\n    payload = {\"trade_date\": day.strftime(\"%Y%m%d\"), \"trade_type\": \"1\"}\n    headers = {\n        \"Accept\": \"application/json, text/javascript, */*; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"32\",\n        \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\n        \"Host\": \"www.gfex.com.cn\",\n        \"Origin\": \"http://www.gfex.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"http://www.gfex.com.cn/gfex/rihq/hqsj_tjsj.shtml\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/108.0.0.0 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n        \"content-type\": \"application/x-www-form-urlencoded\",\n    }\n    r = requests.post(url, data=payload, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.rename(\n        columns={\n            \"variety\": \"商品名称\",\n            \"diffI\": \"持仓量变化\",\n            \"high\": \"最高价\",\n            \"turnover\": \"成交额\",\n            \"impliedVolatility\": \"隐含波动率\",\n            \"diff\": \"涨跌\",\n            \"delta\": \"Delta\",\n            \"close\": \"收盘价\",\n            \"diff1\": \"涨跌1\",\n            \"lastClear\": \"前结算价\",\n            \"open\": \"开盘价\",\n            \"matchQtySum\": \"行权量\",\n            \"delivMonth\": \"合约名称\",\n            \"low\": \"最低价\",\n            \"clearPrice\": \"结算价\",\n            \"varietyOrder\": \"品种代码\",\n            \"openInterest\": \"持仓量\",\n            \"volumn\": \"成交量\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"商品名称\",\n            \"合约名称\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"收盘价\",\n            \"前结算价\",\n            \"结算价\",\n            \"涨跌\",\n            \"涨跌1\",\n            \"Delta\",\n            \"成交量\",\n            \"持仓量\",\n            \"持仓量变化\",\n            \"成交额\",\n            \"行权量\",\n            \"隐含波动率\",\n        ]\n    ]\n    temp_df = temp_df[temp_df[\"商品名称\"].str.contains(symbol)]\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\ndef option_vol_gfex(symbol: str = \"碳酸锂\", trade_date: str = \"20230724\"):\n    \"\"\"\n    广州期货交易所-日频率-合约隐含波动率\n    http://www.gfex.com.cn/gfex/rihq/hqsj_tjsj.shtml\n    :param symbol: choice of choice of {\"工业硅\", \"碳酸锂\"}\n    :type symbol: str\n    :param trade_date: 交易日\n    :type trade_date: str\n    :return: 日频行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_code_map = {\n        \"工业硅\": \"si\",\n        \"碳酸锂\": \"lc\",\n        \"多晶硅\": \"ps\",\n    }\n    calendar = get_calendar()\n    day = convert_date(trade_date) if trade_date is not None else datetime.date.today()\n    if day.strftime(\"%Y%m%d\") not in calendar:\n        warnings.warn(\"%s非交易日\" % day.strftime(\"%Y%m%d\"))\n        return\n    url = \"http://www.gfex.com.cn/u/interfacesWebTiDayQuotes/loadListOptVolatility\"\n    payload = {\"trade_date\": day.strftime(\"%Y%m%d\")}\n    headers = {\n        \"Accept\": \"application/json, text/javascript, */*; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"32\",\n        \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\n        \"Host\": \"www.gfex.com.cn\",\n        \"Origin\": \"http://www.gfex.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"http://www.gfex.com.cn/gfex/rihq/hqsj_tjsj.shtml\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/108.0.0.0 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n        \"content-type\": \"application/x-www-form-urlencoded\",\n    }\n    r = requests.post(url, data=payload, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.rename(\n        columns={\n            \"seriesId\": \"合约系列\",\n            \"varietyId\": \"-\",\n            \"hisVolatility\": \"隐含波动率\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"合约系列\",\n            \"隐含波动率\",\n        ]\n    ]\n    temp_df = temp_df[temp_df[\"合约系列\"].str.contains(symbol_code_map[symbol])]\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    option_hist_czce_df = option_hist_czce(symbol=\"白糖期权\", trade_date=\"20250812\")\n    print(option_hist_czce_df)\n\n    option_hist_dce_df = option_hist_dce(symbol=\"聚丙烯期权\", trade_date=\"20250812\")\n    print(option_hist_dce_df)\n\n    option_hist_shfe_df = option_hist_shfe(symbol=\"天胶期权\", trade_date=\"20250418\")\n    print(option_hist_shfe_df)\n\n    option_vol_shfe_df = option_vol_shfe(symbol=\"天胶期权\", trade_date=\"20250418\")\n    print(option_vol_shfe_df)\n\n    option_hist_gfex_df = option_hist_gfex(symbol=\"工业硅\", trade_date=\"20250801\")\n    print(option_hist_gfex_df)\n\n    option_vol_gfex_df = option_vol_gfex(symbol=\"多晶硅\", trade_date=\"20250123\")\n    print(option_vol_gfex_df)\n"
  },
  {
    "path": "akshare/option/option_commodity_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/1/23 10:21\nDesc: 新浪财经-商品期权\nhttps://stock.finance.sina.com.cn/futures/view/optionsDP.php\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.utils import demjson\n\n\ndef option_commodity_contract_sina(symbol: str = \"玉米期权\") -> pd.DataFrame:\n    \"\"\"\n    当前可以查询的期权品种的合约日期\n    https://stock.finance.sina.com.cn/futures/view/optionsDP.php\n    :param symbol: choice of {\"豆粕期权\", \"玉米期权\", \"铁矿石期权\", \"棉花期权\", \"白糖期权\", \"PTA期权\", \"甲醇期权\", \"橡胶期权\", \"沪铜期权\", \"黄金期权\", \"菜籽粕期权\", \"液化石油气期权\", \"动力煤期权\", \"菜籽油期权\", \"花生期权\"}\n    :type symbol: str\n    :return: e.g., {'黄金期权': ['au2012', 'au2008', 'au2010', 'au2104', 'au2102', 'au2106', 'au2108']}\n    :rtype: dict\n    \"\"\"\n    url = \"https://stock.finance.sina.com.cn/futures/view/optionsDP.php/pg_o/dce\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, \"lxml\")\n    url_list = [\n        item.find(\"a\")[\"href\"]\n        for item in soup.find_all(\"li\", attrs={\"class\": \"active\"})\n        if item.find(\"a\") is not None\n    ]\n    commodity_list = [\n        item.find(\"a\").text\n        for item in soup.find_all(\"li\", attrs={\"class\": \"active\"})\n        if item.find(\"a\") is not None\n    ]\n    comm_list_dict = {key: value for key, value in zip(commodity_list, url_list)}\n    url = \"https://stock.finance.sina.com.cn\" + comm_list_dict[symbol]\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, \"lxml\")\n    symbol = (\n        soup.find(attrs={\"id\": \"option_symbol\"}).find(attrs={\"class\": \"selected\"}).text\n    )\n    contract = [\n        item.text for item in soup.find(attrs={\"id\": \"option_suffix\"}).find_all(\"li\")\n    ]\n    temp_df = pd.DataFrame({symbol: contract})\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    temp_df.columns = [\"序号\", \"合约\"]\n    return temp_df\n\n\ndef option_commodity_contract_table_sina(\n    symbol: str = \"黄金期权\", contract: str = \"au2204\"\n) -> pd.DataFrame:\n    \"\"\"\n    当前所有期权合约, 包括看涨期权合约和看跌期权合约\n    https://stock.finance.sina.com.cn/futures/view/optionsDP.php\n    :param symbol: choice of {\"豆粕期权\", \"玉米期权\", \"铁矿石期权\", \"棉花期权\", \"白糖期权\", \"PTA期权\", \"甲醇期权\", \"橡胶期权\", \"沪铜期权\", \"黄金期权\", \"菜籽粕期权\", \"液化石油气期权\", \"动力煤期权\", \"菜籽油期权\", \"花生期权\"}\n    :type symbol: str\n    :param contract: e.g., 'au2012'\n    :type contract: str\n    :return: 合约实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://stock.finance.sina.com.cn/futures/view/optionsDP.php/pg_o/dce\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, \"lxml\")\n    url_list = [\n        item.find(\"a\")[\"href\"]\n        for item in soup.find_all(\"li\", attrs={\"class\": \"active\"})\n        if item.find(\"a\") is not None\n    ]\n    commodity_list = [\n        item.find(\"a\").text\n        for item in soup.find_all(\"li\", attrs={\"class\": \"active\"})\n        if item.find(\"a\") is not None\n    ]\n    comm_list_dict = {key: value for key, value in zip(commodity_list, url_list)}\n    url = \"https://stock.finance.sina.com.cn/futures/api/openapi.php/OptionService.getOptionData\"\n    params = {\n        \"type\": \"futures\",\n        \"product\": comm_list_dict[symbol].split(\"/\")[-2],\n        \"exchange\": comm_list_dict[symbol].split(\"/\")[-1],\n        \"pinzhong\": contract,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    up_df = pd.DataFrame(data_json[\"result\"][\"data\"][\"up\"])\n    down_df = pd.DataFrame(data_json[\"result\"][\"data\"][\"down\"])\n    temp_df = pd.concat([up_df, down_df], axis=1)\n    temp_df.columns = [\n        \"看涨合约-买量\",\n        \"看涨合约-买价\",\n        \"看涨合约-最新价\",\n        \"看涨合约-卖价\",\n        \"看涨合约-卖量\",\n        \"看涨合约-持仓量\",\n        \"看涨合约-涨跌\",\n        \"行权价\",\n        \"看涨合约-看涨期权合约\",\n        \"看跌合约-买量\",\n        \"看跌合约-买价\",\n        \"看跌合约-最新价\",\n        \"看跌合约-卖价\",\n        \"看跌合约-卖量\",\n        \"看跌合约-持仓量\",\n        \"看跌合约-涨跌\",\n        \"看跌合约-看跌期权合约\",\n    ]\n    temp_df[\"看涨合约-买量\"] = pd.to_numeric(temp_df[\"看涨合约-买量\"], errors=\"coerce\")\n    temp_df[\"看涨合约-买价\"] = pd.to_numeric(temp_df[\"看涨合约-买价\"], errors=\"coerce\")\n    temp_df[\"看涨合约-最新价\"] = pd.to_numeric(\n        temp_df[\"看涨合约-最新价\"], errors=\"coerce\"\n    )\n    temp_df[\"看涨合约-卖价\"] = pd.to_numeric(temp_df[\"看涨合约-卖价\"], errors=\"coerce\")\n    temp_df[\"看涨合约-卖量\"] = pd.to_numeric(temp_df[\"看涨合约-卖量\"], errors=\"coerce\")\n    temp_df[\"看涨合约-持仓量\"] = pd.to_numeric(\n        temp_df[\"看涨合约-持仓量\"], errors=\"coerce\"\n    )\n    temp_df[\"看涨合约-涨跌\"] = pd.to_numeric(temp_df[\"看涨合约-涨跌\"], errors=\"coerce\")\n    temp_df[\"行权价\"] = pd.to_numeric(temp_df[\"行权价\"], errors=\"coerce\")\n    temp_df[\"看跌合约-买量\"] = pd.to_numeric(temp_df[\"看跌合约-买量\"], errors=\"coerce\")\n    temp_df[\"看跌合约-买价\"] = pd.to_numeric(temp_df[\"看跌合约-买价\"], errors=\"coerce\")\n    temp_df[\"看跌合约-最新价\"] = pd.to_numeric(\n        temp_df[\"看跌合约-最新价\"], errors=\"coerce\"\n    )\n    temp_df[\"看跌合约-卖价\"] = pd.to_numeric(temp_df[\"看跌合约-卖价\"], errors=\"coerce\")\n    temp_df[\"看跌合约-卖量\"] = pd.to_numeric(temp_df[\"看跌合约-卖量\"], errors=\"coerce\")\n    temp_df[\"看跌合约-持仓量\"] = pd.to_numeric(\n        temp_df[\"看跌合约-持仓量\"], errors=\"coerce\"\n    )\n    temp_df[\"看跌合约-涨跌\"] = pd.to_numeric(temp_df[\"看跌合约-涨跌\"], errors=\"coerce\")\n    return temp_df\n\n\ndef option_commodity_hist_sina(symbol: str = \"au2012C392\") -> pd.DataFrame:\n    \"\"\"\n    合约历史行情-日频\n    https://stock.finance.sina.com.cn/futures/view/optionsDP.php\n    :param symbol: return of option_sina_option_commodity_contract_list(symbol=\"黄金期权\", contract=\"au2012\"), 看涨期权合约 filed\n    :type symbol: str\n    :return: 合约历史行情-日频\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://stock.finance.sina.com.cn/futures/api/jsonp.php/var%20_m2009C30002020_7_17=/FutureOptionAllService.getOptionDayline\"\n    params = {\"symbol\": symbol}\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"[\") : -2])\n    temp_df = pd.DataFrame(data_json)\n    temp_df.columns = [\"open\", \"high\", \"low\", \"close\", \"volume\", \"date\"]\n    temp_df = temp_df[[\"date\", \"open\", \"high\", \"low\", \"close\", \"volume\"]]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"])\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"])\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"])\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"])\n    temp_df[\"volume\"] = pd.to_numeric(temp_df[\"volume\"])\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    option_commodity_contract_sina_df = option_commodity_contract_sina(\n        symbol=\"棉花期权\"\n    )\n    print(option_commodity_contract_sina_df)\n\n    option_commodity_contract_table_sina_df = option_commodity_contract_table_sina(\n        symbol=\"棉花期权\", contract=\"cf2301\"\n    )\n    print(option_commodity_contract_table_sina_df)\n\n    option_commodity_hist_sina_df = option_commodity_hist_sina(symbol=\"cf2301P21600\")\n    print(option_commodity_hist_sina_df)\n"
  },
  {
    "path": "akshare/option/option_contract_info_ctp.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/10/30 17:40\nDesc: openctp-合约信息接口\nhttp://openctp.cn/instruments.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef option_contract_info_ctp() -> pd.DataFrame:\n    \"\"\"\n    openctp-合约信息接口-期权合约\n    http://openctp.cn/instruments.html\n    :return: 期权合约信息\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://dict.openctp.cn/instruments?types=option\"\n    r = requests.get(url)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n\n    # 字段映射：英文字段名 -> 中文字段名\n    column_mapping = {\n        \"ExchangeID\": \"交易所ID\",\n        \"InstrumentID\": \"合约ID\",\n        \"InstrumentName\": \"合约名称\",\n        \"ProductClass\": \"商品类别\",\n        \"ProductID\": \"品种ID\",\n        \"VolumeMultiple\": \"合约乘数\",\n        \"PriceTick\": \"最小变动价位\",\n        \"LongMarginRatioByMoney\": \"做多保证金率\",\n        \"ShortMarginRatioByMoney\": \"做空保证金率\",\n        \"LongMarginRatioByVolume\": \"做多保证金/手\",\n        \"ShortMarginRatioByVolume\": \"做空保证金/手\",\n        \"OpenRatioByMoney\": \"开仓手续费率\",\n        \"OpenRatioByVolume\": \"开仓手续费/手\",\n        \"CloseRatioByMoney\": \"平仓手续费率\",\n        \"CloseRatioByVolume\": \"平仓手续费/手\",\n        \"CloseTodayRatioByMoney\": \"平今手续费率\",\n        \"CloseTodayRatioByVolume\": \"平今手续费/手\",\n        \"DeliveryYear\": \"交割年份\",\n        \"DeliveryMonth\": \"交割月份\",\n        \"OpenDate\": \"上市日期\",\n        \"ExpireDate\": \"最后交易日\",\n        \"DeliveryDate\": \"交割日\",\n        \"UnderlyingInstrID\": \"标的合约ID\",\n        \"UnderlyingMultiple\": \"标的合约乘数\",\n        \"OptionsType\": \"期权类型\",\n        \"StrikePrice\": \"行权价\",\n        \"InstLifePhase\": \"合约状态\",\n    }\n    # 重命名列为中文\n    temp_df = temp_df.rename(columns=column_mapping)\n    return temp_df\n\n\n# 使用示例\nif __name__ == \"__main__\":\n    option_contract_info_ctp_df = option_contract_info_ctp()\n    print(option_contract_info_ctp_df)\n"
  },
  {
    "path": "akshare/option/option_current_sse.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/9/8 16:20\nDesc: 上海证券交易所-产品-股票期权-信息披露-当日合约\nhttp://www.sse.com.cn/assortment/options/disclo/preinfo/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef option_current_day_sse() -> pd.DataFrame:\n    \"\"\"\n    上海证券交易所-产品-股票期权-信息披露-当日合约\n    http://www.sse.com.cn/assortment/options/disclo/preinfo/\n    :return: 上交所期权当日合约\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://query.sse.com.cn/commonQuery.do\"\n    params = {\n        \"isPagination\": \"false\",\n        \"expireDate\": \"\",\n        \"securityId\": \"\",\n        \"sqlId\": \"SSE_ZQPZ_YSP_GGQQZSXT_XXPL_DRHY_SEARCH_L\",\n    }\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"query.sse.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"http://www.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/101.0.4951.67 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"])\n    dict_df = {\n        \"SECURITY_ID\": \"合约编码\",\n        \"CONTRACT_ID\": \"合约交易代码\",\n        \"CONTRACT_SYMBOL\": \"合约简称\",\n        \"SECURITYNAMEBYID\": \"标的券名称及代码\",\n        \"CALL_OR_PUT\": \"类型\",\n        \"EXERCISE_PRICE\": \"行权价\",\n        \"CONTRACT_UNIT\": \"合约单位\",\n        \"END_DATE\": \"期权行权日\",\n        \"DELIVERY_DATE\": \"行权交收日\",\n        \"EXPIRE_DATE\": \"到期日\",\n        \"START_DATE\": \"开始日期\",\n    }\n    temp_df = temp_df[dict_df.keys()].rename(columns=dict_df)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    option_current_day_sse_df = option_current_day_sse()\n    print(option_current_day_sse_df)\n"
  },
  {
    "path": "akshare/option/option_current_szse.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/9/13 16:00\nDesc: 深圳证券交易所-期权子网-行情数据-当日合约\n\"\"\"\n\nfrom io import BytesIO\n\nimport pandas as pd\nimport requests\n\n\ndef option_current_day_szse() -> pd.DataFrame:\n    \"\"\"\n    深圳证券交易所-期权子网-行情数据-当日合约\n    https://www.sse.org.cn/option/quotation/contract/daycontract/index.html\n    :return: 深圳期权当日合约\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(\n        action=\"ignore\", message=\"Workbook contains no default style\"\n    )\n    url = \"https://www.sse.org.cn/api/report/ShowReport\"\n    params = {\n        \"SHOWTYPE\": \"xlsx\",\n        \"CATALOGID\": \"option_drhy\",\n        \"TABKEY\": \"tab1\",\n    }\n    r = requests.get(url, params=params)\n    temp_df = pd.read_excel(BytesIO(r.content))\n    temp_df[\"序号\"] = pd.to_numeric(temp_df[\"序号\"], errors=\"coerce\")\n    temp_df[\"行权价\"] = pd.to_numeric(temp_df[\"行权价\"], errors=\"coerce\")\n    temp_df[\"合约单位\"] = pd.to_numeric(temp_df[\"合约单位\"], errors=\"coerce\")\n    temp_df[\"涨停价格\"] = pd.to_numeric(temp_df[\"涨停价格\"], errors=\"coerce\")\n    temp_df[\"跌停价格\"] = pd.to_numeric(temp_df[\"跌停价格\"], errors=\"coerce\")\n    temp_df[\"前结算价\"] = pd.to_numeric(temp_df[\"前结算价\"], errors=\"coerce\")\n    temp_df[\"合约总持仓\"] = pd.to_numeric(temp_df[\"合约总持仓\"], errors=\"coerce\")\n    temp_df[\"原行权价格\"] = pd.to_numeric(temp_df[\"原行权价格\"], errors=\"coerce\")\n    temp_df[\"原合约单位\"] = pd.to_numeric(temp_df[\"原合约单位\"], errors=\"coerce\")\n    temp_df[\"合约到期剩余交易天数\"] = pd.to_numeric(\n        temp_df[\"合约到期剩余交易天数\"], errors=\"coerce\"\n    )\n    temp_df[\"合约到期剩余自然天数\"] = pd.to_numeric(\n        temp_df[\"合约到期剩余自然天数\"], errors=\"coerce\"\n    )\n    temp_df[\"下次合约调整剩余交易天数\"] = pd.to_numeric(\n        temp_df[\"下次合约调整剩余交易天数\"], errors=\"coerce\"\n    )\n    temp_df[\"下次合约调整剩余自然天数\"] = pd.to_numeric(\n        temp_df[\"下次合约调整剩余自然天数\"], errors=\"coerce\"\n    )\n    temp_df[\"交易日期\"] = pd.to_datetime(temp_df[\"交易日期\"], errors=\"coerce\").dt.date\n    temp_df[\"最后交易日\"] = pd.to_datetime(\n        temp_df[\"最后交易日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"行权日\"] = pd.to_datetime(temp_df[\"行权日\"], errors=\"coerce\").dt.date\n    temp_df[\"到期日\"] = pd.to_datetime(temp_df[\"到期日\"], errors=\"coerce\").dt.date\n    temp_df[\"交收日\"] = pd.to_datetime(temp_df[\"交收日\"], errors=\"coerce\").dt.date\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"合约编码\",\n            \"合约代码\",\n            \"合约简称\",\n            \"标的证券简称(代码)\",\n            \"合约类型\",\n            \"行权价\",\n            \"合约单位\",\n            \"最后交易日\",\n            \"行权日\",\n            \"到期日\",\n            \"交收日\",\n            \"新挂\",\n            \"涨停价格\",\n            \"跌停价格\",\n            \"前结算价\",\n            \"合约调整\",\n            \"停牌\",\n            \"合约总持仓\",\n            \"挂牌原因\",\n            \"原合约代码\",\n            \"原合约简称\",\n            \"原行权价格\",\n            \"原合约单位\",\n            \"合约到期剩余交易天数\",\n            \"合约到期剩余自然天数\",\n            \"下次合约调整剩余交易天数\",\n            \"下次合约调整剩余自然天数\",\n            \"交易日期\",\n        ]\n    ]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    option_current_day_szse_df = option_current_day_szse()\n    print(option_current_day_szse_df)\n"
  },
  {
    "path": "akshare/option/option_czce.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/10/17 16:30\nDesc: 郑州商品交易所-交易数据-历史行情下载-期权历史行情下载\nhttp://www.czce.com.cn/cn/jysj/lshqxz/H770319index_1.htm\n自 20200101 起，成交量、空盘量、成交额、行权量均为单边计算\n郑州商品交易所-期权上市时间表\n\"SR\": \"20170419\"\n\"CF\": \"20190410\"\n\"TA\": \"20191216\"\n\"MA\": \"20191217\"\n\"RM\": \"20200116\"\n\"ZC\": \"20200630\"\n\"OI\": \"20220826\"\n\"PK\": \"20220826\"\n\"PX\": \"20230915\"\n\"SH\": \"20230915\"\n\"SA\": \"20231020\"\n\"PF\": \"20231020\"\n\"SM\": \"20231020\"\n\"SF\": \"20231020\"\n\"UR\": \"20231020\"\n\"AP\": \"20231020\"\n\"CJ\": \"20240621\"\n\"FG\": \"20240621\"\n\"PR\": \"20241227\"\n\"\"\"\n\nimport warnings\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\n\ndef option_hist_yearly_czce(symbol: str = \"SR\", year: str = \"2021\") -> pd.DataFrame:\n    \"\"\"\n    郑州商品交易所-交易数据-历史行情下载-期权历史行情下载\n    http://www.czce.com.cn/cn/jysj/lshqxz/H770319index_1.htm\n    :param symbol: choice of {\"白糖\": \"SR\", \"棉花\": \"CF\", \"PTA\": \"TA\", \"甲醇\": \"MA\", \"菜籽粕\": \"RM\",\n    \"动力煤\": \"ZC\", \"菜籽油\": \"OI\", \"花生\": \"PK\", \"对二甲苯\": \"PX\", \"烧碱\": \"SH\", \"纯碱\": \"SA\", \"短纤\": \"PF\",\n    \"锰硅\": \"SM\", \"硅铁\": \"SF\", \"尿素\": \"UR\", \"苹果\": \"AP\", \"红枣\": \"CJ\", \"玻璃\": \"FG\", \"瓶片\": \"PR\"}\n    :type symbol: str\n    :param year: 需要获取数据的年份, 注意品种的上市时间\n    :type year: str\n    :return: 指定年份的日频期权数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_year_dict = {\n        \"SR\": \"2017\",\n        \"CF\": \"2019\",\n        \"TA\": \"2019\",\n        \"MA\": \"2019\",\n        \"RM\": \"2020\",\n        \"ZC\": \"2020\",\n        \"OI\": \"2022\",\n        \"PK\": \"2022\",\n        \"PX\": \"2023\",\n        \"SH\": \"2023\",\n        \"SA\": \"2023\",\n        \"PF\": \"2023\",\n        \"SM\": \"2023\",\n        \"SF\": \"2023\",\n        \"UR\": \"2023\",\n        \"AP\": \"2023\",\n        \"CJ\": \"2024\",\n        \"FG\": \"2024\",\n        \"PR\": \"2024\",\n    }\n    if int(symbol_year_dict[symbol]) > int(year):\n        warnings.warn(f\"{year} year, symbol {symbol} is not on trade\")\n        return pd.DataFrame()\n    url = f\"http://www.czce.com.cn/cn/DFSStaticFiles/Option/{year}/OptionDataAllHistory/{symbol}OPTIONS{year}.txt\"\n    r = requests.get(url)\n    option_df = pd.read_table(StringIO(r.text), skiprows=1, sep=\"|\", low_memory=False)\n    return option_df\n\n\nif __name__ == \"__main__\":\n    option_hist_yearly_czce_df = option_hist_yearly_czce(symbol=\"RM\", year=\"2025\")\n    print(option_hist_yearly_czce_df)\n"
  },
  {
    "path": "akshare/option/option_daily_stats_sse_szse.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/6/27 22:20\nDesc: 上海证券交易所-产品-股票期权-每日统计\nhttps://www.sse.com.cn/assortment/options/date/\n深圳证券交易所-市场数据-期权数据-日度概况\nhttps://investor.szse.cn/market/option/day/index.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef option_daily_stats_sse(date: str = \"20240626\") -> pd.DataFrame:\n    \"\"\"\n    上海证券交易所-产品-股票期权-每日统计\n    https://www.sse.com.cn/assortment/options/date/\n    :param date: 交易日\n    :type date: str\n    :return: 每日统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://query.sse.com.cn/commonQuery.do\"\n    params = {\n        \"isPagination\": \"false\",\n        \"sqlId\": \"COMMON_SSE_ZQPZ_YSP_QQ_SJTJ_MRTJ_CX\",\n        \"tradeDate\": date,\n    }\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"query.sse.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://www.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/101.0.4951.67 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"])\n    temp_df.rename(\n        columns={\n            \"CONTRACT_VOLUME\": \"合约数量\",\n            \"CALL_VOLUME\": \"认购成交量\",\n            \"LEAVES_QTY\": \"未平仓合约总数\",\n            \"CP_RATE\": \"认沽/认购\",\n            \"PUT_VOLUME\": \"认沽成交量\",\n            \"TRADE_DATE\": \"交易日\",\n            \"TOTAL_MONEY\": \"总成交额\",\n            \"TOTAL_VOLUME\": \"总成交量\",\n            \"SECURITY_CODE\": \"合约标的代码\",\n            \"LEAVES_CALL_QTY\": \"未平仓认购合约数\",\n            \"LEAVES_PUT_QTY\": \"未平仓认沽合约数\",\n            \"SECURITY_ABBR\": \"合约标的名称\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"合约标的代码\",\n            \"合约标的名称\",\n            \"合约数量\",\n            \"总成交额\",\n            \"总成交量\",\n            \"认购成交量\",\n            \"认沽成交量\",\n            \"认沽/认购\",\n            \"未平仓合约总数\",\n            \"未平仓认购合约数\",\n            \"未平仓认沽合约数\",\n            \"交易日\",\n        ]\n    ]\n    temp_df[\"交易日\"] = pd.to_datetime(temp_df[\"交易日\"], errors=\"coerce\").dt.date\n    for item in temp_df.columns[2:-1]:\n        temp_df[item] = temp_df[item].str.replace(\",\", \"\")\n        temp_df[item] = pd.to_numeric(temp_df[item], errors=\"coerce\")\n    return temp_df\n\n\ndef option_daily_stats_szse(date: str = \"20240626\") -> pd.DataFrame:\n    \"\"\"\n    深圳证券交易所-市场数据-期权数据-日度概况\n    https://investor.szse.cn/market/option/day/index.html\n    :param date: 交易日\n    :type date: str\n    :return: 每日统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://investor.szse.cn/api/report/ShowReport/data\"\n    params = {\n        \"SHOWTYPE\": \"JSON\",\n        \"CATALOGID\": \"ysprdzb\",\n        \"TABKEY\": \"tab1\",\n        \"txtQueryDate\": \"-\".join([date[:4], date[4:6], date[6:]]),\n        \"random\": \"0.0652692406565949\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[0][\"data\"])\n    temp_df.rename(\n        columns={\n            \"bddm\": \"合约标的代码\",\n            \"bdmc\": \"合约标的名称\",\n            \"cjl\": \"成交量\",\n            \"rccjl\": \"认购成交量\",\n            \"rpcjl\": \"认沽成交量\",\n            \"rcrpccb\": \"认沽/认购持仓比\",\n            \"wpchyzs\": \"未平仓合约总数\",\n            \"wpcrchys\": \"未平仓认购合约数\",\n            \"wpcrphys\": \"未平仓认沽合约数\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"合约标的代码\",\n            \"合约标的名称\",\n            \"成交量\",\n            \"认购成交量\",\n            \"认沽成交量\",\n            \"认沽/认购持仓比\",\n            \"未平仓合约总数\",\n            \"未平仓认购合约数\",\n            \"未平仓认沽合约数\",\n        ]\n    ]\n    temp_df[\"交易日\"] = \"-\".join([date[:4], date[4:6], date[6:]])\n    temp_df[\"交易日\"] = pd.to_datetime(temp_df[\"交易日\"], errors=\"coerce\").dt.date\n    for item in temp_df.columns[2:-1]:\n        temp_df[item] = temp_df[item].str.replace(\",\", \"\")\n        temp_df[item] = pd.to_numeric(temp_df[item], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    option_daily_stats_sse_df = option_daily_stats_sse(date=\"20240626\")\n    print(option_daily_stats_sse_df)\n\n    option_daily_stats_szse_df = option_daily_stats_szse(date=\"20240626\")\n    print(option_daily_stats_szse_df)\n"
  },
  {
    "path": "akshare/option/option_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/2/18 16:30\nDesc: 东方财富网-行情中心-期权市场\nhttps://quote.eastmoney.com/center/qqsc.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom akshare.utils.func import fetch_paginated_data\n\n\ndef option_current_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-期权市场\n    https://quote.eastmoney.com/center/qqsc.html\n    :return: 期权价格\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://23.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f3\",\n        \"fs\": \"m:10,m:12,m:140,m:141,m:151,m:163,m:226\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,\"\n        \"f23,f24,f25,f22,f28,f11,f62,f128,f136,f115,f152,f133,f108,f163,f161,f162\",\n    }\n    temp_df = fetch_paginated_data(url=url, base_params=params)\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"代码\",\n        \"市场标识\",\n        \"名称\",\n        \"_\",\n        \"_\",\n        \"今开\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"昨结\",\n        \"_\",\n        \"持仓量\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"行权价\",\n        \"剩余日\",\n        \"日增\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"成交量\",\n            \"成交额\",\n            \"持仓量\",\n            \"行权价\",\n            \"剩余日\",\n            \"日增\",\n            \"昨结\",\n            \"今开\",\n            \"市场标识\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"持仓量\"] = pd.to_numeric(temp_df[\"持仓量\"], errors=\"coerce\")\n    temp_df[\"行权价\"] = pd.to_numeric(temp_df[\"行权价\"], errors=\"coerce\")\n    temp_df[\"剩余日\"] = pd.to_numeric(temp_df[\"剩余日\"], errors=\"coerce\")\n    temp_df[\"日增\"] = pd.to_numeric(temp_df[\"日增\"], errors=\"coerce\")\n    temp_df[\"昨结\"] = pd.to_numeric(temp_df[\"昨结\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    option_current_cffex_em_df = option_current_cffex_em()\n    big_df = pd.concat(objs=[temp_df, option_current_cffex_em_df], ignore_index=True)\n    big_df[\"序号\"] = range(1, len(big_df) + 1)\n    return big_df\n\n\ndef option_current_cffex_em() -> pd.DataFrame:\n    url = \"https://futsseapi.eastmoney.com/list/option/221\"\n    params = {\n        \"orderBy\": \"zdf\",\n        \"sort\": \"desc\",\n        \"pageSize\": \"20000\",\n        \"pageIndex\": \"0\",\n        \"token\": \"58b2fa8f54638b60b87d69b31969089c\",\n        \"field\": \"dm,sc,name,p,zsjd,zde,zdf,f152,vol,cje,ccl,xqj,syr,rz,zjsj,o\",\n        \"blockName\": \"callback\",\n        \"_:\": \"1706689899924\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"list\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df[\"index\"] + 1\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"rz\": \"日增\",\n            \"dm\": \"代码\",\n            \"zsjd\": \"-\",\n            \"ccl\": \"持仓量\",\n            \"syr\": \"剩余日\",\n            \"o\": \"今开\",\n            \"p\": \"最新价\",\n            \"sc\": \"市场标识\",\n            \"xqj\": \"行权价\",\n            \"vol\": \"成交量\",\n            \"name\": \"名称\",\n            \"zde\": \"涨跌额\",\n            \"zdf\": \"涨跌幅\",\n            \"zjsj\": \"昨结\",\n            \"cje\": \"成交额\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"成交量\",\n            \"成交额\",\n            \"持仓量\",\n            \"行权价\",\n            \"剩余日\",\n            \"日增\",\n            \"昨结\",\n            \"今开\",\n            \"市场标识\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"持仓量\"] = pd.to_numeric(temp_df[\"持仓量\"], errors=\"coerce\")\n    temp_df[\"行权价\"] = pd.to_numeric(temp_df[\"行权价\"], errors=\"coerce\")\n    temp_df[\"剩余日\"] = pd.to_numeric(temp_df[\"剩余日\"], errors=\"coerce\")\n    temp_df[\"日增\"] = pd.to_numeric(temp_df[\"日增\"], errors=\"coerce\")\n    temp_df[\"昨结\"] = pd.to_numeric(temp_df[\"昨结\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    option_current_em_df = option_current_em()\n    print(option_current_em_df)\n\n    option_current_cffex_em_df = option_current_cffex_em()\n    print(option_current_cffex_em_df)\n"
  },
  {
    "path": "akshare/option/option_finance.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/2/24 15:18\nDesc: 金融期权数据\nhttp://www.sse.com.cn/assortment/options/price/\nhttp://www.szse.cn/market/product/option/index.html\nhttp://www.cffex.com.cn/hs300gzqq/\nhttp://www.cffex.com.cn/zz1000gzqq/\n\"\"\"\n\nfrom io import BytesIO\n\nimport pandas as pd\nimport requests\n\nfrom akshare.option.cons import (\n    SH_OPTION_PAYLOAD,\n    SH_OPTION_PAYLOAD_OTHER,\n    SH_OPTION_URL_50,\n    SH_OPTION_URL_KING_50,\n    SH_OPTION_URL_300,\n    SH_OPTION_URL_KING_300,\n    SH_OPTION_URL_500,\n    SH_OPTION_URL_KING_500,\n    SH_OPTION_URL_KC_50,\n    SH_OPTION_URL_KC_KING_50,\n    SH_OPTION_URL_KC_50_YFD,\n    SH_OPTION_URL_KING_50_YFD,\n    CFFEX_OPTION_URL_300,\n)\n\n\ndef option_finance_sse_underlying(symbol: str = \"华夏科创50ETF期权\") -> pd.DataFrame:\n    \"\"\"\n    期权标的当日行情\n    http://www.sse.com.cn/assortment/options/price/\n    :param symbol: choice of {\"华夏上证50ETF期权\", \"华泰柏瑞沪深300ETF期权\", \"南方中证500ETF期权\", \"华夏科创50ETF期权\", \"易方达科创50ETF期权\"}\n    :type symbol: str\n    :return: 期权标的当日行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"华夏上证50ETF期权\": SH_OPTION_URL_50,\n        \"华泰柏瑞沪深300ETF期权\": SH_OPTION_URL_300,\n        \"南方中证500ETF期权\": SH_OPTION_URL_500,\n        \"华夏科创50ETF期权\": SH_OPTION_URL_KC_50,\n        \"易方达科创50ETF期权\": SH_OPTION_URL_KC_50_YFD,\n    }\n    r = requests.get(symbol_map[symbol], params=SH_OPTION_PAYLOAD)\n    data_json = r.json()\n    raw_data = pd.DataFrame(data_json[\"list\"])\n    raw_data.at[0, 0] = \"510300\"\n    raw_data.at[0, 8] = pd.to_datetime(\n        str(data_json[\"date\"]) + str(data_json[\"time\"]),\n        format=\"%Y%m%d%H%M%S\",\n    )\n    raw_data.columns = [\n        \"代码\",\n        \"名称\",\n        \"当前价\",\n        \"涨跌\",\n        \"涨跌幅\",\n        \"振幅\",\n        \"成交量(手)\",\n        \"成交额(万元)\",\n        \"更新日期\",\n    ]\n    return raw_data\n\n\ndef option_finance_board(\n    symbol: str = \"嘉实沪深300ETF期权\", end_month: str = \"2306\"\n) -> pd.DataFrame:\n    \"\"\"\n    期权当前交易日的行情数据\n    主要为三个: 华夏上证50ETF期权, 华泰柏瑞沪深300ETF期权, 嘉实沪深300ETF期权,\n    沪深300股指期权, 中证1000股指期权, 上证50股指期权, 华夏科创50ETF期权, 易方达科创50ETF期权\n    http://www.sse.com.cn/assortment/options/price/\n    http://www.szse.cn/market/product/option/index.html\n    http://www.cffex.com.cn/hs300gzqq/\n    http://www.cffex.com.cn/zz1000gzqq/\n    :param symbol: choice of {\"华夏上证50ETF期权\", \"华泰柏瑞沪深300ETF期权\", \"南方中证500ETF期权\",\n    \"华夏科创50ETF期权\", \"易方达科创50ETF期权\", \"嘉实沪深300ETF期权\", \"沪深300股指期权\", \"中证1000股指期权\", \"上证50股指期权\"}\n    :type symbol: str\n    :param end_month: 2003; 2020 年 3 月到期的期权\n    :type end_month: str\n    :return: 当日行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    end_month = end_month[-2:]\n    if symbol == \"华夏上证50ETF期权\":\n        r = requests.get(\n            SH_OPTION_URL_KING_50.format(end_month),\n            params=SH_OPTION_PAYLOAD_OTHER,\n        )\n        data_json = r.json()\n        raw_data = pd.DataFrame(data_json[\"list\"])\n        raw_data.index = [str(data_json[\"date\"]) + str(data_json[\"time\"])] * data_json[\n            \"total\"\n        ]\n        raw_data.columns = [\"合约交易代码\", \"当前价\", \"涨跌幅\", \"前结价\", \"行权价\"]\n        raw_data[\"数量\"] = [data_json[\"total\"]] * data_json[\"total\"]\n        raw_data.reset_index(inplace=True)\n        raw_data.columns = [\n            \"日期\",\n            \"合约交易代码\",\n            \"当前价\",\n            \"涨跌幅\",\n            \"前结价\",\n            \"行权价\",\n            \"数量\",\n        ]\n        return raw_data\n    elif symbol == \"华泰柏瑞沪深300ETF期权\":\n        r = requests.get(\n            SH_OPTION_URL_KING_300.format(end_month),\n            params=SH_OPTION_PAYLOAD_OTHER,\n        )\n        data_json = r.json()\n        raw_data = pd.DataFrame(data_json[\"list\"])\n        raw_data.index = [str(data_json[\"date\"]) + str(data_json[\"time\"])] * data_json[\n            \"total\"\n        ]\n        raw_data.columns = [\"合约交易代码\", \"当前价\", \"涨跌幅\", \"前结价\", \"行权价\"]\n        raw_data[\"数量\"] = [data_json[\"total\"]] * data_json[\"total\"]\n        raw_data.reset_index(inplace=True)\n        raw_data.columns = [\n            \"日期\",\n            \"合约交易代码\",\n            \"当前价\",\n            \"涨跌幅\",\n            \"前结价\",\n            \"行权价\",\n            \"数量\",\n        ]\n        return raw_data\n    elif symbol == \"南方中证500ETF期权\":\n        r = requests.get(\n            SH_OPTION_URL_KING_500.format(end_month),\n            params=SH_OPTION_PAYLOAD_OTHER,\n        )\n        data_json = r.json()\n        raw_data = pd.DataFrame(data_json[\"list\"])\n        raw_data.index = [str(data_json[\"date\"]) + str(data_json[\"time\"])] * data_json[\n            \"total\"\n        ]\n        raw_data.columns = [\"合约交易代码\", \"当前价\", \"涨跌幅\", \"前结价\", \"行权价\"]\n        raw_data[\"数量\"] = [data_json[\"total\"]] * data_json[\"total\"]\n        raw_data.reset_index(inplace=True)\n        raw_data.columns = [\n            \"日期\",\n            \"合约交易代码\",\n            \"当前价\",\n            \"涨跌幅\",\n            \"前结价\",\n            \"行权价\",\n            \"数量\",\n        ]\n        return raw_data\n    elif symbol == \"华夏科创50ETF期权\":\n        r = requests.get(\n            SH_OPTION_URL_KC_KING_50.format(end_month),\n            params=SH_OPTION_PAYLOAD_OTHER,\n        )\n        data_json = r.json()\n        raw_data = pd.DataFrame(data_json[\"list\"])\n        raw_data.index = [str(data_json[\"date\"]) + str(data_json[\"time\"])] * data_json[\n            \"total\"\n        ]\n        raw_data.columns = [\"合约交易代码\", \"当前价\", \"涨跌幅\", \"前结价\", \"行权价\"]\n        raw_data[\"数量\"] = [data_json[\"total\"]] * data_json[\"total\"]\n        raw_data.reset_index(inplace=True)\n        raw_data.columns = [\n            \"日期\",\n            \"合约交易代码\",\n            \"当前价\",\n            \"涨跌幅\",\n            \"前结价\",\n            \"行权价\",\n            \"数量\",\n        ]\n        return raw_data\n    elif symbol == \"易方达科创50ETF期权\":\n        r = requests.get(\n            SH_OPTION_URL_KING_50_YFD.format(end_month),\n            params=SH_OPTION_PAYLOAD_OTHER,\n        )\n        data_json = r.json()\n        raw_data = pd.DataFrame(data_json[\"list\"])\n        raw_data.index = [str(data_json[\"date\"]) + str(data_json[\"time\"])] * data_json[\n            \"total\"\n        ]\n        raw_data.columns = [\"合约交易代码\", \"当前价\", \"涨跌幅\", \"前结价\", \"行权价\"]\n        raw_data[\"数量\"] = [data_json[\"total\"]] * data_json[\"total\"]\n        raw_data.reset_index(inplace=True)\n        raw_data.columns = [\n            \"日期\",\n            \"合约交易代码\",\n            \"当前价\",\n            \"涨跌幅\",\n            \"前结价\",\n            \"行权价\",\n            \"数量\",\n        ]\n        return raw_data\n    elif symbol == \"嘉实沪深300ETF期权\":\n        url = \"http://www.szse.cn/api/report/ShowReport/data\"\n        params = {\n            \"SHOWTYPE\": \"JSON\",\n            \"CATALOGID\": \"ysplbrb\",\n            \"TABKEY\": \"tab1\",\n            \"PAGENO\": \"1\",\n            \"random\": \"0.10642298535346595\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        page_num = data_json[0][\"metadata\"][\"pagecount\"]\n        big_df = pd.DataFrame()\n        for page in range(1, page_num + 1):\n            params = {\n                \"SHOWTYPE\": \"JSON\",\n                \"CATALOGID\": \"ysplbrb\",\n                \"TABKEY\": \"tab1\",\n                \"PAGENO\": page,\n                \"random\": \"0.10642298535346595\",\n            }\n            r = requests.get(url, params=params)\n            data_json = r.json()\n            temp_df = pd.DataFrame(data_json[0][\"data\"])\n            big_df = pd.concat([big_df, temp_df], ignore_index=True)\n\n        big_df.columns = [\n            \"合约编码\",\n            \"合约简称\",\n            \"标的名称\",\n            \"类型\",\n            \"行权价\",\n            \"合约单位\",\n            \"期权行权日\",\n            \"行权交收日\",\n        ]\n        big_df[\"期权行权日\"] = pd.to_datetime(big_df[\"期权行权日\"])\n        big_df[\"end_month\"] = big_df[\"期权行权日\"].dt.month.astype(str).str.zfill(2)\n        big_df = big_df[big_df[\"end_month\"] == end_month]\n        del big_df[\"end_month\"]\n        big_df.reset_index(inplace=True, drop=True)\n        return big_df\n    elif symbol == \"沪深300股指期权\":\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\"\n        }\n        r = requests.get(CFFEX_OPTION_URL_300, headers=headers)\n        raw_df = pd.read_table(BytesIO(r.content), sep=\",\")\n        raw_df[\"end_month\"] = (\n            raw_df[\"instrument\"]\n            .str.split(\"-\", expand=True)\n            .iloc[:, 0]\n            .str.slice(\n                4,\n            )\n        )\n        raw_df = raw_df[raw_df[\"end_month\"] == end_month]\n        del raw_df[\"end_month\"]\n        raw_df.reset_index(inplace=True, drop=True)\n        return raw_df\n    elif symbol == \"中证1000股指期权\":\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\"\n        }\n        url = \"http://www.cffex.com.cn/quote_MO.txt\"\n        r = requests.get(url, headers=headers)\n        raw_df = pd.read_table(BytesIO(r.content), sep=\",\")\n        raw_df[\"end_month\"] = (\n            raw_df[\"instrument\"]\n            .str.split(\"-\", expand=True)\n            .iloc[:, 0]\n            .str.slice(\n                4,\n            )\n        )\n        raw_df = raw_df[raw_df[\"end_month\"] == end_month]\n        del raw_df[\"end_month\"]\n        raw_df.reset_index(inplace=True, drop=True)\n        return raw_df\n    elif symbol == \"上证50股指期权\":\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\"\n        }\n        url = \"http://www.cffex.com.cn/quote_HO.txt\"\n        r = requests.get(url, headers=headers)\n        raw_df = pd.read_table(BytesIO(r.content), sep=\",\")\n        raw_df[\"end_month\"] = (\n            raw_df[\"instrument\"]\n            .str.split(\"-\", expand=True)\n            .iloc[:, 0]\n            .str.slice(\n                4,\n            )\n        )\n        raw_df = raw_df[raw_df[\"end_month\"] == end_month]\n        del raw_df[\"end_month\"]\n        raw_df.reset_index(inplace=True, drop=True)\n        return raw_df\n    else:\n        return pd.DataFrame()\n\n\nif __name__ == \"__main__\":\n    option_finance_sse_underlying_df = option_finance_sse_underlying(\n        symbol=\"华夏科创50ETF期权\"\n    )\n    print(option_finance_sse_underlying_df)\n\n    option_finance_board_df = option_finance_board(\n        symbol=\"华夏上证50ETF期权\", end_month=\"2306\"\n    )\n    print(option_finance_board_df)\n\n    option_finance_board_df = option_finance_board(\n        symbol=\"华泰柏瑞沪深300ETF期权\", end_month=\"2306\"\n    )\n    print(option_finance_board_df)\n\n    option_finance_board_df = option_finance_board(\n        symbol=\"南方中证500ETF期权\", end_month=\"2306\"\n    )\n    print(option_finance_board_df)\n\n    option_finance_board_df = option_finance_board(\n        symbol=\"华夏科创50ETF期权\", end_month=\"2306\"\n    )\n    print(option_finance_board_df)\n\n    option_finance_board_df = option_finance_board(\n        symbol=\"易方达科创50ETF期权\", end_month=\"2306\"\n    )\n    print(option_finance_board_df)\n\n    option_finance_board_df = option_finance_board(\n        symbol=\"嘉实沪深300ETF期权\", end_month=\"2306\"\n    )\n    print(option_finance_board_df)\n\n    option_finance_board_df = option_finance_board(\n        symbol=\"沪深300股指期权\", end_month=\"2306\"\n    )\n    print(option_finance_board_df)\n\n    option_finance_board_df = option_finance_board(\n        symbol=\"中证1000股指期权\", end_month=\"2306\"\n    )\n    print(option_finance_board_df)\n\n    option_finance_board_df = option_finance_board(\n        symbol=\"上证50股指期权\", end_month=\"2306\"\n    )\n    print(option_finance_board_df)\n"
  },
  {
    "path": "akshare/option/option_finance_sina.py",
    "content": "#!/usr/bin/env python\n\"\"\"\nDate: 2024/6/21 18:00\nDesc: 新浪财经-股票期权\nhttps://stock.finance.sina.com.cn/option/quotes.html\n期权-中金所-沪深 300 指数\nhttps://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n期权-上交所-50ETF\n期权-上交所-300ETF\n期权-上交所-500ETF\nhttps://stock.finance.sina.com.cn/option/quotes.html\n\"\"\"\n\nimport datetime\nimport json\nfrom functools import lru_cache\nfrom typing import Dict, List, Tuple\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.option.option_em import option_current_em\nfrom akshare.utils.func import set_df_columns\n\n\n# 期权-中金所-上证50指数\ndef option_cffex_sz50_list_sina() -> Dict[str, List[str]]:\n    \"\"\"\n    新浪财经-中金所-上证 50 指数-所有合约, 返回的第一个合约为主力合约\n    目前新浪财经-中金所有上证 50 指数，沪深 300 指数和中证 1000 指数\n    :return: 中金所-上证 50 指数-所有合约\n    :rtype: dict\n    \"\"\"\n    url = \"https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php/ho/cffex\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    symbol = soup.find(attrs={\"id\": \"option_symbol\"}).find_all(\"li\")[0].text\n    temp_attr = soup.find(attrs={\"id\": \"option_suffix\"}).find_all(\"li\")\n    contract = [item.text for item in temp_attr]\n    return {symbol: contract}\n\n\n# 期权-中金所-沪深300指数\ndef option_cffex_hs300_list_sina() -> Dict[str, List[str]]:\n    \"\"\"\n    新浪财经-中金所-沪深 300 指数-所有合约, 返回的第一个合约为主力合约\n    目前新浪财经-中金所有沪深 300 指数和中证 1000 指数\n    :return: 中金所-沪深300指数-所有合约\n    :rtype: dict\n    \"\"\"\n    url = \"https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    symbol = soup.find(attrs={\"id\": \"option_symbol\"}).find_all(\"li\")[1].text\n    temp_attr = soup.find(attrs={\"id\": \"option_suffix\"}).find_all(\"li\")\n    contract = [item.text for item in temp_attr]\n    return {symbol: contract}\n\n\ndef option_cffex_zz1000_list_sina() -> Dict[str, List[str]]:\n    \"\"\"\n    新浪财经-中金所-中证 1000 指数-所有合约, 返回的第一个合约为主力合约\n    目前新浪财经-中金所有沪深 300 指数和中证 1000 指数\n    :return: 中金所-中证 1000 指数-所有合约\n    :rtype: dict\n    \"\"\"\n    url = \"https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php/mo/cffex\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    symbol = soup.find(attrs={\"id\": \"option_symbol\"}).find_all(\"li\")[2].text\n    temp_attr = soup.find(attrs={\"id\": \"option_suffix\"}).find_all(\"li\")\n    contract = [item.text for item in temp_attr]\n    return {symbol: contract}\n\n\ndef option_cffex_sz50_spot_sina(symbol: str = \"ho2303\") -> pd.DataFrame:\n    \"\"\"\n    中金所-上证 50 指数-指定合约-实时行情\n    https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php/ho/cffex\n    :param symbol: 合约代码; 用 ak.option_cffex_sz300_list_sina() 函数查看\n    :type symbol: str\n    :return: 中金所-上证 50 指数-指定合约-看涨看跌实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://stock.finance.sina.com.cn/futures/api/openapi.php/OptionService.getOptionData\"\n    params = {\n        \"type\": \"futures\",\n        \"product\": \"ho\",\n        \"exchange\": \"cffex\",\n        \"pinzhong\": symbol,\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = json.loads(data_text[data_text.find(\"{\") : data_text.rfind(\"}\") + 1])\n    option_call_df = pd.DataFrame(\n        data_json[\"result\"][\"data\"][\"up\"],\n        columns=[\n            \"看涨合约-买量\",\n            \"看涨合约-买价\",\n            \"看涨合约-最新价\",\n            \"看涨合约-卖价\",\n            \"看涨合约-卖量\",\n            \"看涨合约-持仓量\",\n            \"看涨合约-涨跌\",\n            \"行权价\",\n            \"看涨合约-标识\",\n        ],\n    )\n    option_put_df = pd.DataFrame(\n        data_json[\"result\"][\"data\"][\"down\"],\n        columns=[\n            \"看跌合约-买量\",\n            \"看跌合约-买价\",\n            \"看跌合约-最新价\",\n            \"看跌合约-卖价\",\n            \"看跌合约-卖量\",\n            \"看跌合约-持仓量\",\n            \"看跌合约-涨跌\",\n            \"看跌合约-标识\",\n        ],\n    )\n    data_df = pd.concat(objs=[option_call_df, option_put_df], axis=1)\n    data_df[\"看涨合约-买量\"] = pd.to_numeric(data_df[\"看涨合约-买量\"], errors=\"coerce\")\n    data_df[\"看涨合约-买价\"] = pd.to_numeric(data_df[\"看涨合约-买价\"], errors=\"coerce\")\n    data_df[\"看涨合约-最新价\"] = pd.to_numeric(\n        data_df[\"看涨合约-最新价\"], errors=\"coerce\"\n    )\n    data_df[\"看涨合约-卖价\"] = pd.to_numeric(data_df[\"看涨合约-卖价\"], errors=\"coerce\")\n    data_df[\"看涨合约-卖量\"] = pd.to_numeric(data_df[\"看涨合约-卖量\"], errors=\"coerce\")\n    data_df[\"看涨合约-持仓量\"] = pd.to_numeric(\n        data_df[\"看涨合约-持仓量\"], errors=\"coerce\"\n    )\n    data_df[\"看涨合约-涨跌\"] = pd.to_numeric(data_df[\"看涨合约-涨跌\"], errors=\"coerce\")\n    data_df[\"行权价\"] = pd.to_numeric(data_df[\"行权价\"], errors=\"coerce\")\n    data_df[\"看跌合约-买量\"] = pd.to_numeric(data_df[\"看跌合约-买量\"], errors=\"coerce\")\n    data_df[\"看跌合约-买价\"] = pd.to_numeric(data_df[\"看跌合约-买价\"], errors=\"coerce\")\n    data_df[\"看跌合约-最新价\"] = pd.to_numeric(\n        data_df[\"看跌合约-最新价\"], errors=\"coerce\"\n    )\n    data_df[\"看跌合约-卖价\"] = pd.to_numeric(data_df[\"看跌合约-卖价\"], errors=\"coerce\")\n    data_df[\"看跌合约-卖量\"] = pd.to_numeric(data_df[\"看跌合约-卖量\"], errors=\"coerce\")\n    data_df[\"看跌合约-持仓量\"] = pd.to_numeric(\n        data_df[\"看跌合约-持仓量\"], errors=\"coerce\"\n    )\n    data_df[\"看跌合约-涨跌\"] = pd.to_numeric(data_df[\"看跌合约-涨跌\"], errors=\"coerce\")\n    return data_df\n\n\ndef option_cffex_hs300_spot_sina(symbol: str = \"io2204\") -> pd.DataFrame:\n    \"\"\"\n    中金所-沪深 300 指数-指定合约-实时行情\n    https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n    :param symbol: 合约代码; 用 option_cffex_hs300_list_sina 函数查看\n    :type symbol: str\n    :return: 中金所-沪深300指数-指定合约-看涨看跌实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://stock.finance.sina.com.cn/futures/api/openapi.php/OptionService.getOptionData\"\n    params = {\n        \"type\": \"futures\",\n        \"product\": \"io\",\n        \"exchange\": \"cffex\",\n        \"pinzhong\": symbol,\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = json.loads(data_text[data_text.find(\"{\") : data_text.rfind(\"}\") + 1])\n    option_call_df = pd.DataFrame(\n        data_json[\"result\"][\"data\"][\"up\"],\n        columns=[\n            \"看涨合约-买量\",\n            \"看涨合约-买价\",\n            \"看涨合约-最新价\",\n            \"看涨合约-卖价\",\n            \"看涨合约-卖量\",\n            \"看涨合约-持仓量\",\n            \"看涨合约-涨跌\",\n            \"行权价\",\n            \"看涨合约-标识\",\n        ],\n    )\n    option_put_df = pd.DataFrame(\n        data_json[\"result\"][\"data\"][\"down\"],\n        columns=[\n            \"看跌合约-买量\",\n            \"看跌合约-买价\",\n            \"看跌合约-最新价\",\n            \"看跌合约-卖价\",\n            \"看跌合约-卖量\",\n            \"看跌合约-持仓量\",\n            \"看跌合约-涨跌\",\n            \"看跌合约-标识\",\n        ],\n    )\n    data_df = pd.concat(objs=[option_call_df, option_put_df], axis=1)\n    data_df[\"看涨合约-买量\"] = pd.to_numeric(data_df[\"看涨合约-买量\"], errors=\"coerce\")\n    data_df[\"看涨合约-买价\"] = pd.to_numeric(data_df[\"看涨合约-买价\"], errors=\"coerce\")\n    data_df[\"看涨合约-最新价\"] = pd.to_numeric(\n        data_df[\"看涨合约-最新价\"], errors=\"coerce\"\n    )\n    data_df[\"看涨合约-卖价\"] = pd.to_numeric(data_df[\"看涨合约-卖价\"], errors=\"coerce\")\n    data_df[\"看涨合约-卖量\"] = pd.to_numeric(data_df[\"看涨合约-卖量\"], errors=\"coerce\")\n    data_df[\"看涨合约-持仓量\"] = pd.to_numeric(\n        data_df[\"看涨合约-持仓量\"], errors=\"coerce\"\n    )\n    data_df[\"看涨合约-涨跌\"] = pd.to_numeric(data_df[\"看涨合约-涨跌\"], errors=\"coerce\")\n    data_df[\"行权价\"] = pd.to_numeric(data_df[\"行权价\"], errors=\"coerce\")\n    data_df[\"看跌合约-买量\"] = pd.to_numeric(data_df[\"看跌合约-买量\"], errors=\"coerce\")\n    data_df[\"看跌合约-买价\"] = pd.to_numeric(data_df[\"看跌合约-买价\"], errors=\"coerce\")\n    data_df[\"看跌合约-最新价\"] = pd.to_numeric(\n        data_df[\"看跌合约-最新价\"], errors=\"coerce\"\n    )\n    data_df[\"看跌合约-卖价\"] = pd.to_numeric(data_df[\"看跌合约-卖价\"], errors=\"coerce\")\n    data_df[\"看跌合约-卖量\"] = pd.to_numeric(data_df[\"看跌合约-卖量\"], errors=\"coerce\")\n    data_df[\"看跌合约-持仓量\"] = pd.to_numeric(\n        data_df[\"看跌合约-持仓量\"], errors=\"coerce\"\n    )\n    data_df[\"看跌合约-涨跌\"] = pd.to_numeric(data_df[\"看跌合约-涨跌\"], errors=\"coerce\")\n    return data_df\n\n\ndef option_cffex_zz1000_spot_sina(symbol: str = \"mo2208\") -> pd.DataFrame:\n    \"\"\"\n    中金所-中证 1000 指数-指定合约-实时行情\n    https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n    :param symbol: 合约代码; 用 option_cffex_zz1000_list_sina 函数查看\n    :type symbol: str\n    :return: 中金所-中证 1000 指数-指定合约-看涨看跌实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://stock.finance.sina.com.cn/futures/api/openapi.php/OptionService.getOptionData\"\n    params = {\n        \"type\": \"futures\",\n        \"product\": \"mo\",\n        \"exchange\": \"cffex\",\n        \"pinzhong\": symbol,\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = json.loads(data_text[data_text.find(\"{\") : data_text.rfind(\"}\") + 1])\n    option_call_df = pd.DataFrame(\n        data_json[\"result\"][\"data\"][\"up\"],\n        columns=[\n            \"看涨合约-买量\",\n            \"看涨合约-买价\",\n            \"看涨合约-最新价\",\n            \"看涨合约-卖价\",\n            \"看涨合约-卖量\",\n            \"看涨合约-持仓量\",\n            \"看涨合约-涨跌\",\n            \"行权价\",\n            \"看涨合约-标识\",\n        ],\n    )\n    option_put_df = pd.DataFrame(\n        data_json[\"result\"][\"data\"][\"down\"],\n        columns=[\n            \"看跌合约-买量\",\n            \"看跌合约-买价\",\n            \"看跌合约-最新价\",\n            \"看跌合约-卖价\",\n            \"看跌合约-卖量\",\n            \"看跌合约-持仓量\",\n            \"看跌合约-涨跌\",\n            \"看跌合约-标识\",\n        ],\n    )\n    data_df = pd.concat(objs=[option_call_df, option_put_df], axis=1)\n    data_df[\"看涨合约-买量\"] = pd.to_numeric(data_df[\"看涨合约-买量\"], errors=\"coerce\")\n    data_df[\"看涨合约-买价\"] = pd.to_numeric(data_df[\"看涨合约-买价\"], errors=\"coerce\")\n    data_df[\"看涨合约-最新价\"] = pd.to_numeric(\n        data_df[\"看涨合约-最新价\"], errors=\"coerce\"\n    )\n    data_df[\"看涨合约-卖价\"] = pd.to_numeric(data_df[\"看涨合约-卖价\"], errors=\"coerce\")\n    data_df[\"看涨合约-卖量\"] = pd.to_numeric(data_df[\"看涨合约-卖量\"], errors=\"coerce\")\n    data_df[\"看涨合约-持仓量\"] = pd.to_numeric(\n        data_df[\"看涨合约-持仓量\"], errors=\"coerce\"\n    )\n    data_df[\"看涨合约-涨跌\"] = pd.to_numeric(data_df[\"看涨合约-涨跌\"], errors=\"coerce\")\n    data_df[\"行权价\"] = pd.to_numeric(data_df[\"行权价\"], errors=\"coerce\")\n    data_df[\"看跌合约-买量\"] = pd.to_numeric(data_df[\"看跌合约-买量\"], errors=\"coerce\")\n    data_df[\"看跌合约-买价\"] = pd.to_numeric(data_df[\"看跌合约-买价\"], errors=\"coerce\")\n    data_df[\"看跌合约-最新价\"] = pd.to_numeric(\n        data_df[\"看跌合约-最新价\"], errors=\"coerce\"\n    )\n    data_df[\"看跌合约-卖价\"] = pd.to_numeric(data_df[\"看跌合约-卖价\"], errors=\"coerce\")\n    data_df[\"看跌合约-卖量\"] = pd.to_numeric(data_df[\"看跌合约-卖量\"], errors=\"coerce\")\n    data_df[\"看跌合约-持仓量\"] = pd.to_numeric(\n        data_df[\"看跌合约-持仓量\"], errors=\"coerce\"\n    )\n    data_df[\"看跌合约-涨跌\"] = pd.to_numeric(data_df[\"看跌合约-涨跌\"], errors=\"coerce\")\n    return data_df\n\n\ndef option_cffex_sz50_daily_sina(symbol: str = \"ho2303P2350\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-中金所-上证 50 指数-指定合约-日频行情\n    :param symbol: 具体合约代码(包括看涨和看跌标识), 可以通过 ak.option_cffex_sz50_spot_sina 中的 call-标识 获取\n    :type symbol: str\n    :return: 日频率数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    year = datetime.datetime.now().year\n    month = datetime.datetime.now().month\n    day = datetime.datetime.now().day\n    url = (\n        f\"https://stock.finance.sina.com.cn/futures/api/jsonp.php/var%20_{symbol}{year}_{month}_{day}\"\n        f\"=/FutureOptionAllService.getOptionDayline\"\n    )\n    params = {\"symbol\": symbol}\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_df = pd.DataFrame(\n        eval(data_text[data_text.find(\"[\") : data_text.rfind(\"]\") + 1])\n    )\n    data_df.columns = [\"open\", \"high\", \"low\", \"close\", \"volume\", \"date\"]\n    data_df = data_df[\n        [\n            \"date\",\n            \"open\",\n            \"high\",\n            \"low\",\n            \"close\",\n            \"volume\",\n        ]\n    ]\n    data_df[\"date\"] = pd.to_datetime(data_df[\"date\"], errors=\"coerce\").dt.date\n    data_df[\"open\"] = pd.to_numeric(data_df[\"open\"], errors=\"coerce\")\n    data_df[\"high\"] = pd.to_numeric(data_df[\"high\"], errors=\"coerce\")\n    data_df[\"low\"] = pd.to_numeric(data_df[\"low\"], errors=\"coerce\")\n    data_df[\"close\"] = pd.to_numeric(data_df[\"close\"], errors=\"coerce\")\n    data_df[\"volume\"] = pd.to_numeric(data_df[\"volume\"], errors=\"coerce\")\n    return data_df\n\n\ndef option_cffex_hs300_daily_sina(symbol: str = \"io2202P4350\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-中金所-沪深300指数-指定合约-日频行情\n    :param symbol: 具体合约代码(包括看涨和看跌标识), 可以通过 ak.option_cffex_hs300_spot_sina 中的 call-标识 获取\n    :type symbol: str\n    :return: 日频率数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    year = datetime.datetime.now().year\n    month = datetime.datetime.now().month\n    day = datetime.datetime.now().day\n    url = (\n        f\"https://stock.finance.sina.com.cn/futures/api/jsonp.php/var%20_{symbol}{year}_{month}_{day}\"\n        f\"=/FutureOptionAllService.getOptionDayline\"\n    )\n    params = {\"symbol\": symbol}\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_df = pd.DataFrame(\n        eval(data_text[data_text.find(\"[\") : data_text.rfind(\"]\") + 1])\n    )\n    data_df.columns = [\"open\", \"high\", \"low\", \"close\", \"volume\", \"date\"]\n    data_df = data_df[\n        [\n            \"date\",\n            \"open\",\n            \"high\",\n            \"low\",\n            \"close\",\n            \"volume\",\n        ]\n    ]\n    data_df[\"date\"] = pd.to_datetime(data_df[\"date\"], errors=\"coerce\").dt.date\n    data_df[\"open\"] = pd.to_numeric(data_df[\"open\"], errors=\"coerce\")\n    data_df[\"high\"] = pd.to_numeric(data_df[\"high\"], errors=\"coerce\")\n    data_df[\"low\"] = pd.to_numeric(data_df[\"low\"], errors=\"coerce\")\n    data_df[\"close\"] = pd.to_numeric(data_df[\"close\"], errors=\"coerce\")\n    data_df[\"volume\"] = pd.to_numeric(data_df[\"volume\"], errors=\"coerce\")\n    return data_df\n\n\ndef option_cffex_zz1000_daily_sina(\n    symbol: str = \"mo2208P6200\",\n) -> pd.DataFrame:\n    \"\"\"\n    新浪财经-中金所-中证 1000 指数-指定合约-日频行情\n    :param symbol: 具体合约代码(包括看涨和看跌标识), 可以通过 ak.option_cffex_zz1000_spot_sina 中的 call-标识 获取\n    :type symbol: str\n    :return: 日频率数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    year = datetime.datetime.now().year\n    month = datetime.datetime.now().month\n    day = datetime.datetime.now().day\n    url = (\n        f\"https://stock.finance.sina.com.cn/futures/api/jsonp.php/var%20_{symbol}{year}_{month}_{day}\"\n        f\"=/FutureOptionAllService.getOptionDayline\"\n    )\n    params = {\"symbol\": symbol}\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_df = pd.DataFrame(\n        eval(data_text[data_text.find(\"[\") : data_text.rfind(\"]\") + 1])\n    )\n    data_df.columns = [\"open\", \"high\", \"low\", \"close\", \"volume\", \"date\"]\n    data_df = data_df[\n        [\n            \"date\",\n            \"open\",\n            \"high\",\n            \"low\",\n            \"close\",\n            \"volume\",\n        ]\n    ]\n    data_df[\"date\"] = pd.to_datetime(data_df[\"date\"], errors=\"coerce\").dt.date\n    data_df[\"open\"] = pd.to_numeric(data_df[\"open\"], errors=\"coerce\")\n    data_df[\"high\"] = pd.to_numeric(data_df[\"high\"], errors=\"coerce\")\n    data_df[\"low\"] = pd.to_numeric(data_df[\"low\"], errors=\"coerce\")\n    data_df[\"close\"] = pd.to_numeric(data_df[\"close\"], errors=\"coerce\")\n    data_df[\"volume\"] = pd.to_numeric(data_df[\"volume\"], errors=\"coerce\")\n    return data_df\n\n\n# 期权-上交所-50ETF\ndef option_sse_list_sina(symbol: str = \"50ETF\", exchange: str = \"null\") -> List[str]:\n    \"\"\"\n    新浪财经-期权-上交所-50ETF-合约到期月份列表\n    https://stock.finance.sina.com.cn/option/quotes.html\n    :param symbol: 50ETF or 300ETF\n    :type symbol: str\n    :param exchange: null\n    :type exchange: str\n    :return: 合约到期时间\n    :rtype: list\n    \"\"\"\n    url = \"https://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionService.getStockName\"\n    params = {\"exchange\": f\"{exchange}\", \"cate\": f\"{symbol}\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    date_list = data_json[\"result\"][\"data\"][\"contractMonth\"]\n    return [\"\".join(i.split(\"-\")) for i in date_list][1:]\n\n\ndef option_sse_expire_day_sina(\n    trade_date: str = \"202102\", symbol: str = \"50ETF\", exchange: str = \"null\"\n) -> Tuple[str, int]:\n    \"\"\"\n    指定到期月份指定品种的剩余到期时间\n    :param trade_date: 到期月份: 202002, 20203, 20206, 20209\n    :type trade_date: str\n    :param symbol: 50ETF or 300ETF\n    :type symbol: str\n    :param exchange: null\n    :type exchange: str\n    :return: (到期时间, 剩余时间)\n    :rtype: tuple\n    \"\"\"\n    url = \"https://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionService.getRemainderDay\"\n    params = {\n        \"exchange\": f\"{exchange}\",\n        \"cate\": f\"{symbol}\",\n        \"date\": f\"{trade_date[:4]}-{trade_date[4:]}\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    data = data_json[\"result\"][\"data\"]\n    if int(data[\"remainderDays\"]) < 0:\n        url = \"https://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionService.getRemainderDay\"\n        params = {\n            \"exchange\": f\"{exchange}\",\n            \"cate\": f\"{'XD' + symbol}\",\n            \"date\": f\"{trade_date[:4]}-{trade_date[4:]}\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        data = data_json[\"result\"][\"data\"]\n    return data[\"expireDay\"], int(data[\"remainderDays\"])\n\n\ndef option_sse_codes_sina(\n    symbol: str = \"看涨期权\",\n    trade_date: str = \"202202\",\n    underlying: str = \"510050\",\n) -> pd.DataFrame:\n    \"\"\"\n    上海证券交易所-所有看涨和看跌合约的代码\n\n    :param symbol: choice of {\"看涨期权\", \"看跌期权\"}\n    :type symbol: str\n    :param trade_date: 期权到期月份\n    :type trade_date: \"202002\"\n    :param underlying: 标的产品代码 华夏上证 50ETF: 510050 or 华泰柏瑞沪深 300ETF: 510300\n    :type underlying: str\n    :return: 看涨看跌合约的代码\n    :rtype: Tuple[List, List]\n    \"\"\"\n    if symbol == \"看涨期权\":\n        url = \"\".join(\n            [\n                \"https://hq.sinajs.cn/list=OP_UP_\",\n                underlying,\n                str(trade_date)[-4:],\n            ]\n        )\n    else:\n        url = \"\".join(\n            [\n                \"https://hq.sinajs.cn/list=OP_DOWN_\",\n                underlying,\n                str(trade_date)[-4:],\n            ]\n        )\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"hq.sinajs.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://stock.finance.sina.com.cn/\",\n        \"sec-ch-ua\": '\" Not;A Brand\";v=\"99\", \"Google Chrome\";v=\"97\", \"Chromium\";v=\"97\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"Sec-Fetch-Dest\": \"script\",\n        \"Sec-Fetch-Mode\": \"no-cors\",\n        \"Sec-Fetch-Site\": \"cross-site\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/97.0.4692.71 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    data_text = r.text\n    data_temp = data_text.replace('\"', \",\").split(\",\")\n    temp_list = [i[7:] for i in data_temp if i.startswith(\"CON_OP_\")]\n    temp_df = pd.DataFrame(temp_list)\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    temp_df.columns = [\n        \"序号\",\n        \"期权代码\",\n    ]\n    return temp_df\n\n\ndef option_sse_spot_price_sina(symbol: str = \"10003720\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-期权-期权实时数据\n    :param symbol: 期权代码\n    :type symbol: str\n    :return: 期权量价数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://hq.sinajs.cn/list=CON_OP_{symbol}\"\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"hq.sinajs.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://stock.finance.sina.com.cn/\",\n        \"sec-ch-ua\": '\" Not;A Brand\";v=\"99\", \"Google Chrome\";v=\"97\", \"Chromium\";v=\"97\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"Sec-Fetch-Dest\": \"script\",\n        \"Sec-Fetch-Mode\": \"no-cors\",\n        \"Sec-Fetch-Site\": \"cross-site\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/97.0.4692.71 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    data_text = r.text\n    data_list = data_text[data_text.find('\"') + 1 : data_text.rfind('\"')].split(\",\")\n    field_list = [\n        \"买量\",\n        \"买价\",\n        \"最新价\",\n        \"卖价\",\n        \"卖量\",\n        \"持仓量\",\n        \"涨幅\",\n        \"行权价\",\n        \"昨收价\",\n        \"开盘价\",\n        \"涨停价\",\n        \"跌停价\",\n        \"申卖价五\",\n        \"申卖量五\",\n        \"申卖价四\",\n        \"申卖量四\",\n        \"申卖价三\",\n        \"申卖量三\",\n        \"申卖价二\",\n        \"申卖量二\",\n        \"申卖价一\",\n        \"申卖量一\",\n        \"申买价一\",\n        \"申买量一 \",\n        \"申买价二\",\n        \"申买量二\",\n        \"申买价三\",\n        \"申买量三\",\n        \"申买价四\",\n        \"申买量四\",\n        \"申买价五\",\n        \"申买量五\",\n        \"行情时间\",\n        \"主力合约标识\",\n        \"状态码\",\n        \"标的证券类型\",\n        \"标的股票\",\n        \"期权合约简称\",\n        \"振幅\",\n        \"最高价\",\n        \"最低价\",\n        \"成交量\",\n        \"成交额\",\n    ]\n    data_df = pd.DataFrame(list(zip(field_list, data_list)), columns=[\"字段\", \"值\"])\n    return data_df\n\n\ndef option_sse_underlying_spot_price_sina(\n    symbol: str = \"sh510300\",\n) -> pd.DataFrame:\n    \"\"\"\n    期权标的物的实时数据\n    :param symbol: sh510050 or sh510300\n    :type symbol: str\n    :return: 期权标的物的信息\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://hq.sinajs.cn/list={symbol}\"\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Host\": \"hq.sinajs.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://vip.stock.finance.sina.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/97.0.4692.71 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    data_text = r.text\n    data_list = data_text[data_text.find('\"') + 1 : data_text.rfind('\"')].split(\",\")\n    field_list = [\n        \"证券简称\",\n        \"今日开盘价\",\n        \"昨日收盘价\",\n        \"最近成交价\",\n        \"最高成交价\",\n        \"最低成交价\",\n        \"买入价\",\n        \"卖出价\",\n        \"成交数量\",\n        \"成交金额\",\n        \"买数量一\",\n        \"买价位一\",\n        \"买数量二\",\n        \"买价位二\",\n        \"买数量三\",\n        \"买价位三\",\n        \"买数量四\",\n        \"买价位四\",\n        \"买数量五\",\n        \"买价位五\",\n        \"卖数量一\",\n        \"卖价位一\",\n        \"卖数量二\",\n        \"卖价位二\",\n        \"卖数量三\",\n        \"卖价位三\",\n        \"卖数量四\",\n        \"卖价位四\",\n        \"卖数量五\",\n        \"卖价位五\",\n        \"行情日期\",\n        \"行情时间\",\n        \"停牌状态\",\n    ]\n    data_df = pd.DataFrame(list(zip(field_list, data_list)), columns=[\"字段\", \"值\"])\n    return data_df\n\n\ndef option_sse_greeks_sina(symbol: str = \"10003045\") -> pd.DataFrame:\n    \"\"\"\n    期权基本信息表\n    :param symbol: 合约代码\n    :type symbol: str\n    :return: 期权基本信息表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://hq.sinajs.cn/list=CON_SO_{symbol}\"\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Host\": \"hq.sinajs.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://vip.stock.finance.sina.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/97.0.4692.71 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    data_text = r.text\n    data_list = data_text[data_text.find('\"') + 1 : data_text.rfind('\"')].split(\",\")\n    field_list = [\n        \"期权合约简称\",\n        \"成交量\",\n        \"Delta\",\n        \"Gamma\",\n        \"Theta\",\n        \"Vega\",\n        \"隐含波动率\",\n        \"最高价\",\n        \"最低价\",\n        \"交易代码\",\n        \"行权价\",\n        \"最新价\",\n        \"理论价值\",\n    ]\n    data_df = pd.DataFrame(\n        list(zip(field_list, [data_list[0]] + data_list[4:])),\n        columns=[\"字段\", \"值\"],\n    )\n    return data_df\n\n\ndef option_sse_minute_sina(symbol: str = \"10003720\") -> pd.DataFrame:\n    \"\"\"\n    指定期权品种在当前交易日的分钟数据, 只能获取当前交易日的数据, 不能获取历史分钟数据\n    https://stock.finance.sina.com.cn/option/quotes.html\n    :param symbol: 期权代码\n    :type symbol: str\n    :return: 指定期权的当前交易日的分钟数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionDaylineService.getOptionMinline\"\n    params = {\"symbol\": f\"CON_OP_{symbol}\"}\n    headers = {\n        \"accept\": \"*/*\",\n        \"accept-encoding\": \"gzip, deflate, br\",\n        \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"cache-control\": \"no-cache\",\n        \"pragma\": \"no-cache\",\n        \"referer\": \"https://stock.finance.sina.com.cn/option/quotes.html\",\n        \"sec-ch-ua\": '\" Not;A Brand\";v=\"99\", \"Google Chrome\";v=\"97\", \"Chromium\";v=\"97\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"sec-fetch-dest\": \"script\",\n        \"sec-fetch-mode\": \"no-cors\",\n        \"sec-fetch-site\": \"same-origin\",\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/97.0.4692.71 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = data_json[\"result\"][\"data\"]\n    data_df = pd.DataFrame(temp_df)\n    data_df = set_df_columns(\n        df=data_df, cols=[\"时间\", \"价格\", \"成交\", \"持仓\", \"均价\", \"日期\"]\n    )\n    data_df = data_df[[\"日期\", \"时间\", \"价格\", \"成交\", \"持仓\", \"均价\"]]\n    data_df[\"日期\"] = pd.to_datetime(data_df[\"日期\"], errors=\"coerce\").dt.date\n    data_df[\"日期\"] = data_df[\"日期\"].ffill()\n    data_df[\"价格\"] = pd.to_numeric(data_df[\"价格\"], errors=\"coerce\")\n    data_df[\"成交\"] = pd.to_numeric(data_df[\"成交\"], errors=\"coerce\")\n    data_df[\"持仓\"] = pd.to_numeric(data_df[\"持仓\"], errors=\"coerce\")\n    data_df[\"均价\"] = pd.to_numeric(data_df[\"均价\"], errors=\"coerce\")\n    return data_df\n\n\ndef option_sse_daily_sina(symbol: str = \"10003889\") -> pd.DataFrame:\n    \"\"\"\n    指定期权的日频率数据\n    :param symbol: 期权代码\n    :type symbol: str\n    :return: 指定期权的所有日频率历史数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://stock.finance.sina.com.cn/futures/api/jsonp_v2.php//StockOptionDaylineService.getSymbolInfo\"\n    params = {\"symbol\": f\"CON_OP_{symbol}\"}\n    headers = {\n        \"accept\": \"*/*\",\n        \"accept-encoding\": \"gzip, deflate, br\",\n        \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"cache-control\": \"no-cache\",\n        \"pragma\": \"no-cache\",\n        \"referer\": \"https://stock.finance.sina.com.cn/option/quotes.html\",\n        \"sec-ch-ua\": '\" Not;A Brand\";v=\"99\", \"Google Chrome\";v=\"97\", \"Chromium\";v=\"97\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"sec-fetch-dest\": \"script\",\n        \"sec-fetch-mode\": \"no-cors\",\n        \"sec-fetch-site\": \"same-origin\",\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/97.0.4692.71 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_text = r.text\n    data_json = json.loads(data_text[data_text.find(\"(\") + 1 : data_text.rfind(\")\")])\n    temp_df = pd.DataFrame(data_json)\n    temp_df.columns = [\"日期\", \"开盘\", \"最高\", \"最低\", \"收盘\", \"成交量\"]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    return temp_df\n\n\ndef option_finance_minute_sina(symbol: str = \"10002530\") -> pd.DataFrame:\n    \"\"\"\n    指定期权的分钟频率数据\n    https://stock.finance.sina.com.cn/option/quotes.html\n    :param symbol: 期权代码\n    :type symbol: str\n    :return: 指定期权的分钟频率数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionDaylineService.getFiveDayLine\"\n    params = {\n        \"symbol\": f\"CON_OP_{symbol}\",\n    }\n    headers = {\n        \"accept\": \"*/*\",\n        \"accept-encoding\": \"gzip, deflate, br\",\n        \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"cache-control\": \"no-cache\",\n        \"pragma\": \"no-cache\",\n        \"referer\": \"https://stock.finance.sina.com.cn/option/quotes.html\",\n        \"sec-ch-ua\": '\" Not;A Brand\";v=\"99\", \"Google Chrome\";v=\"97\", \"Chromium\";v=\"97\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"sec-fetch-dest\": \"script\",\n        \"sec-fetch-mode\": \"no-cors\",\n        \"sec-fetch-site\": \"same-origin\",\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/97.0.4692.71 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_text = r.json()\n    temp_df = pd.DataFrame()\n    for item in data_text[\"result\"][\"data\"]:\n        temp_df = pd.concat(objs=[temp_df, pd.DataFrame(item)], ignore_index=True)\n    temp_df.ffill(inplace=True)\n    temp_df.columns = [\"time\", \"price\", \"volume\", \"_\", \"average_price\", \"date\"]\n    temp_df = temp_df[[\"date\", \"time\", \"price\", \"average_price\", \"volume\"]]\n    temp_df[\"price\"] = pd.to_numeric(temp_df[\"price\"], errors=\"coerce\")\n    temp_df[\"average_price\"] = pd.to_numeric(temp_df[\"average_price\"], errors=\"coerce\")\n    temp_df[\"volume\"] = pd.to_numeric(temp_df[\"volume\"], errors=\"coerce\")\n    return temp_df\n\n\n@lru_cache()\ndef __option_current_em() -> pd.DataFrame:\n    inner_option_current_em_df = option_current_em()\n    return inner_option_current_em_df\n\n\ndef option_minute_em(symbol: str = \"MO2404-P-4450\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-期权市场-分时行情\n    https://wap.eastmoney.com/quote/stock/151.cu2404P61000.html\n    :param symbol: 期权代码; 通过调用 ak.option_current_em() 获取\n    :type symbol: str\n    :return: 指定期权的分钟频率数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    inner_option_current_em_df = __option_current_em()\n    inner_option_current_em_df[\"标识\"] = (\n        inner_option_current_em_df[\"市场标识\"].astype(str)\n        + \".\"\n        + inner_option_current_em_df[\"代码\"]\n    )\n    id_ = inner_option_current_em_df[inner_option_current_em_df[\"代码\"] == symbol][\n        \"标识\"\n    ].values[0]\n    url = \"https://push2.eastmoney.com/api/qt/stock/trends2/get\"\n    params = {\n        \"secid\": id_,\n        \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f17\",\n        \"fields2\": \"f51,f53,f54,f55,f56,f57,f58\",\n        \"iscr\": \"0\",\n        \"iscca\": \"0\",\n        \"ut\": \"f057cbcbce2a86e2866ab8877db1d059\",\n        \"ndays\": \"1\",\n        \"cb\": \"quotepushdata1\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = json.loads(data_text[data_text.find(\"(\") + 1 : data_text.rfind(\")\")])\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"trends\"]])\n    temp_df.columns = [\"time\", \"close\", \"high\", \"low\", \"volume\", \"amount\", \"-\"]\n    temp_df = temp_df[[\"time\", \"close\", \"high\", \"low\", \"volume\", \"amount\"]]\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    temp_df[\"volume\"] = pd.to_numeric(temp_df[\"volume\"], errors=\"coerce\")\n    temp_df[\"amount\"] = pd.to_numeric(temp_df[\"amount\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    option_cffex_sz50_list_sina_df = option_cffex_sz50_list_sina()\n    print(option_cffex_sz50_list_sina_df)\n\n    # 期权-中金所-沪深300指数\n    option_cffex_hs300_list_sina_df = option_cffex_hs300_list_sina()\n    print(option_cffex_hs300_list_sina_df)\n\n    option_cffex_zz1000_list_sina_df = option_cffex_zz1000_list_sina()\n    print(option_cffex_zz1000_list_sina_df)\n\n    option_cffex_sz50_spot_sina_df = option_cffex_sz50_spot_sina(symbol=\"ho2303\")\n    print(option_cffex_sz50_spot_sina_df)\n\n    option_cffex_hs300_spot_sina_df = option_cffex_hs300_spot_sina(symbol=\"io2209\")\n    print(option_cffex_hs300_spot_sina_df)\n\n    option_cffex_zz1000_spot_sina_df = option_cffex_zz1000_spot_sina(symbol=\"mo2209\")\n    print(option_cffex_zz1000_spot_sina_df)\n\n    option_cffex_sz50_daily_sina_df = option_cffex_sz50_daily_sina(symbol=\"ho2303P2350\")\n    print(option_cffex_sz50_daily_sina_df)\n\n    option_cffex_hs300_daily_sina_df = option_cffex_hs300_daily_sina(\n        symbol=\"io2202P4350\"\n    )\n    print(option_cffex_hs300_daily_sina_df)\n\n    option_cffex_zz1000_daily_sina_df = option_cffex_zz1000_daily_sina(\n        symbol=\"mo2208P6200\"\n    )\n    print(option_cffex_zz1000_daily_sina_df)\n\n    # 期权-上交所-50ETF\n    option_sse_list_sina_df = option_sse_list_sina(symbol=\"50ETF\", exchange=\"null\")\n    print(option_sse_list_sina_df)\n\n    option_sse_expire_day_sina_df = option_sse_expire_day_sina(\n        trade_date=\"202308\", symbol=\"50ETF\", exchange=\"null\"\n    )\n    print(option_sse_expire_day_sina_df)\n\n    option_sse_codes_sina_df = option_sse_codes_sina(\n        symbol=\"看跌期权\", trade_date=\"202209\", underlying=\"510050\"\n    )\n    print(option_sse_codes_sina_df)\n\n    option_sse_spot_price_sina_df = option_sse_spot_price_sina(symbol=\"10003686\")\n    print(option_sse_spot_price_sina_df)\n\n    option_sse_underlying_spot_price_sina_df = option_sse_underlying_spot_price_sina(\n        symbol=\"sh510300\"\n    )\n    print(option_sse_underlying_spot_price_sina_df)\n\n    option_sse_greeks_sina_df = option_sse_greeks_sina(symbol=\"10004023\")\n    print(option_sse_greeks_sina_df)\n\n    option_sse_minute_sina_df = option_sse_minute_sina(symbol=\"10004023\")\n    print(option_sse_minute_sina_df)\n\n    option_sse_daily_sina_df = option_sse_daily_sina(symbol=\"10004023\")\n    print(option_sse_daily_sina_df)\n\n    option_finance_minute_sina_df = option_finance_minute_sina(symbol=\"10004023\")\n    print(option_finance_minute_sina_df)\n\n    option_current_em_df = option_current_em()\n    print(option_current_em_df)\n\n    option_minute_em_df = option_minute_em(symbol=\"10008594\")\n    print(option_minute_em_df)\n"
  },
  {
    "path": "akshare/option/option_lhb_em.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/7/30 17:00\nDesc: 东方财富网-数据中心-特色数据-期权龙虎榜单\nhttps://data.eastmoney.com/other/qqlhb.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef option_lhb_em(\n    symbol: str = \"510050\",\n    indicator: str = \"期权交易情况-认沽交易量\",\n    trade_date: str = \"20220121\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-期货期权-期权龙虎榜单\n    https://data.eastmoney.com/other/qqlhb.html\n    :param symbol: 期权代码; choice of {\"510050\", \"510300\", \"159919\"}\n    :type symbol: str\n    :param indicator: 需要获取的指标; choice of {\"期权交易情况-认沽交易量\",\"期权持仓情况-认沽持仓量\", \"期权交易情况-认购交易量\", \"期权持仓情况-认购持仓量\"}\n    :type indicator: str\n    :param trade_date: 交易日期\n    :type trade_date: str\n    :return: 期权龙虎榜单\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/get\"\n    params = {\n        \"type\": \"RPT_IF_BILLBOARD_TD\",\n        \"sty\": \"ALL\",\n        \"filter\": f\"\"\"(SECURITY_CODE=\"{symbol}\")(TRADE_DATE='{\n            \"-\".join([trade_date[:4], trade_date[4:6], trade_date[6:]])\n        }')\"\"\",\n        \"p\": \"1\",\n        \"pss\": \"200\",\n        \"source\": \"IFBILLBOARD\",\n        \"client\": \"WEB\",\n        \"ut\": \"b2884a393a59ad64002292a3e90d46a5\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    if indicator == \"期权交易情况-认沽交易量\":\n        temp_df = temp_df.iloc[:7, :]\n        temp_df.columns = [\n            \"交易类型\",\n            \"交易日期\",\n            \"证券代码\",\n            \"标的名称\",\n            \"-\",\n            \"-\",\n            \"机构\",\n            \"名次\",\n            \"交易量\",\n            \"增减\",\n            \"净认沽量\",\n            \"占总交易量比例\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n        ]\n        temp_df = temp_df[\n            [\n                \"交易类型\",\n                \"交易日期\",\n                \"证券代码\",\n                \"标的名称\",\n                \"名次\",\n                \"机构\",\n                \"交易量\",\n                \"增减\",\n                \"净认沽量\",\n                \"占总交易量比例\",\n            ]\n        ]\n        temp_df[\"交易日期\"] = pd.to_datetime(\n            temp_df[\"交易日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"名次\"] = pd.to_numeric(temp_df[\"名次\"], errors=\"coerce\")\n        temp_df[\"交易量\"] = pd.to_numeric(temp_df[\"交易量\"], errors=\"coerce\")\n        temp_df[\"增减\"] = pd.to_numeric(temp_df[\"增减\"], errors=\"coerce\")\n        temp_df[\"净认沽量\"] = pd.to_numeric(temp_df[\"净认沽量\"], errors=\"coerce\")\n        temp_df[\"占总交易量比例\"] = pd.to_numeric(\n            temp_df[\"占总交易量比例\"], errors=\"coerce\"\n        )\n        temp_df.reset_index(drop=True, inplace=True)\n        return temp_df\n    elif indicator == \"期权持仓情况-认沽持仓量\":\n        temp_df = temp_df.iloc[7:14, :]\n        temp_df.columns = [\n            \"交易类型\",\n            \"交易日期\",\n            \"证券代码\",\n            \"标的名称\",\n            \"-\",\n            \"-\",\n            \"机构\",\n            \"名次\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"持仓量\",\n            \"增减\",\n            \"净持仓量\",\n            \"占总交易量比例\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n        ]\n        temp_df = temp_df[\n            [\n                \"交易类型\",\n                \"交易日期\",\n                \"证券代码\",\n                \"标的名称\",\n                \"名次\",\n                \"机构\",\n                \"持仓量\",\n                \"增减\",\n                \"净持仓量\",\n                \"占总交易量比例\",\n            ]\n        ]\n        temp_df[\"交易日期\"] = pd.to_datetime(\n            temp_df[\"交易日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"名次\"] = pd.to_numeric(temp_df[\"名次\"], errors=\"coerce\")\n        temp_df[\"持仓量\"] = pd.to_numeric(temp_df[\"持仓量\"], errors=\"coerce\")\n        temp_df[\"增减\"] = pd.to_numeric(temp_df[\"增减\"], errors=\"coerce\")\n        temp_df[\"净持仓量\"] = pd.to_numeric(temp_df[\"净持仓量\"], errors=\"coerce\")\n        temp_df[\"占总交易量比例\"] = pd.to_numeric(\n            temp_df[\"占总交易量比例\"], errors=\"coerce\"\n        )\n        temp_df.reset_index(drop=True, inplace=True)\n        return temp_df\n    elif indicator == \"期权交易情况-认购交易量\":\n        temp_df = temp_df.iloc[14:21, :]\n        temp_df.columns = [\n            \"交易类型\",\n            \"交易日期\",\n            \"证券代码\",\n            \"标的名称\",\n            \"-\",\n            \"-\",\n            \"机构\",\n            \"名次\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"交易量\",\n            \"增减\",\n            \"净交易量\",\n            \"占总交易量比例\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n        ]\n        temp_df = temp_df[\n            [\n                \"交易类型\",\n                \"交易日期\",\n                \"证券代码\",\n                \"标的名称\",\n                \"名次\",\n                \"机构\",\n                \"交易量\",\n                \"增减\",\n                \"净交易量\",\n                \"占总交易量比例\",\n            ]\n        ]\n        temp_df[\"交易日期\"] = pd.to_datetime(\n            temp_df[\"交易日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"名次\"] = pd.to_numeric(temp_df[\"名次\"], errors=\"coerce\")\n        temp_df[\"交易量\"] = pd.to_numeric(temp_df[\"交易量\"], errors=\"coerce\")\n        temp_df[\"增减\"] = pd.to_numeric(temp_df[\"增减\"], errors=\"coerce\")\n        temp_df[\"净交易量\"] = pd.to_numeric(temp_df[\"净交易量\"], errors=\"coerce\")\n        temp_df[\"占总交易量比例\"] = pd.to_numeric(\n            temp_df[\"占总交易量比例\"], errors=\"coerce\"\n        )\n        temp_df.reset_index(drop=True, inplace=True)\n        return temp_df\n    elif indicator == \"期权持仓情况-认购持仓量\":\n        temp_df = temp_df.iloc[21:, :]\n        temp_df.rename(\n            columns={\n                \"MEMBER_RANK\": \"名次\",\n                \"MEMBER_NAME_ABBR\": \"机构\",\n                \"BUY_POSITION\": \"持仓量\",\n                \"BUY_POSITION_CHANGE\": \"增减\",\n                \"NET_BUY_POSITION\": \"净持仓量\",\n                \"BUY_POSITION_RATIO\": \"占总交易量比例\",\n                \"TRADE_TYPE\": \"交易类型\",\n                \"TRADE_DATE\": \"交易日期\",\n                \"SECURITY_CODE\": \"证券代码\",\n                \"TARGET_NAME\": \"标的名称\",\n            },\n            inplace=True,\n        )\n        temp_df = temp_df[\n            [\n                \"交易类型\",\n                \"交易日期\",\n                \"证券代码\",\n                \"标的名称\",\n                \"名次\",\n                \"机构\",\n                \"持仓量\",\n                \"增减\",\n                \"净持仓量\",\n                \"占总交易量比例\",\n            ]\n        ]\n        temp_df[\"交易日期\"] = pd.to_datetime(\n            temp_df[\"交易日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"名次\"] = pd.to_numeric(temp_df[\"名次\"], errors=\"coerce\")\n        temp_df[\"持仓量\"] = pd.to_numeric(temp_df[\"持仓量\"], errors=\"coerce\")\n        temp_df[\"增减\"] = pd.to_numeric(temp_df[\"增减\"], errors=\"coerce\")\n        temp_df[\"净持仓量\"] = pd.to_numeric(temp_df[\"净持仓量\"], errors=\"coerce\")\n        temp_df[\"占总交易量比例\"] = pd.to_numeric(\n            temp_df[\"占总交易量比例\"], errors=\"coerce\"\n        )\n        temp_df.reset_index(drop=True, inplace=True)\n        return temp_df\n\n\nif __name__ == \"__main__\":\n    option_lhb_em_df = option_lhb_em(\n        symbol=\"510300\", indicator=\"期权交易情况-认购交易量\", trade_date=\"20220124\"\n    )\n    print(option_lhb_em_df)\n\n    option_lhb_em_df = option_lhb_em(\n        symbol=\"510300\", indicator=\"期权交易情况-认沽交易量\", trade_date=\"20220124\"\n    )\n    print(option_lhb_em_df)\n\n    option_lhb_em_df = option_lhb_em(\n        symbol=\"159919\", indicator=\"期权持仓情况-认购持仓量\", trade_date=\"20240712\"\n    )\n    print(option_lhb_em_df)\n\n    option_lhb_em_df = option_lhb_em(\n        symbol=\"510300\", indicator=\"期权持仓情况-认沽持仓量\", trade_date=\"20220124\"\n    )\n    print(option_lhb_em_df)\n"
  },
  {
    "path": "akshare/option/option_margin.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/6/16 18:00\nDesc: 唯爱期货-期权保证金\nhttps://www.iweiai.com/qihuo/yuanyou\n\"\"\"\n\nimport requests\nimport pandas as pd\nfrom io import StringIO\n\nfrom bs4 import BeautifulSoup\nfrom functools import lru_cache\n\n\n@lru_cache()\ndef option_margin_symbol() -> pd.DataFrame:\n    \"\"\"\n    获取商品期权品种代码和名称\n    :return: 商品期权品种代码和名称\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.iweiai.com/qiquan/yuanyou\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.content, features=\"lxml\")\n    symbol_text = [\n        item.get_text() for item in soup.find_all(\"a\") if \"qiquan\" in item[\"href\"]\n    ]\n    symbol_url = [\n        item[\"href\"] for item in soup.find_all(\"a\") if \"qiquan\" in item[\"href\"]\n    ]\n    symbol_df = pd.DataFrame([symbol_text, symbol_url]).T\n    symbol_df.columns = [\"symbol\", \"url\"]\n    return symbol_df\n\n\ndef option_margin(symbol: str = \"原油期权\") -> pd.DataFrame:\n    \"\"\"\n    获取商品期权保证金\n    :param symbol: 商品期权品种名称, 如 \"原油期权\"，可以通过 ak.option_margin_symbol() 获取所有商品期权品种代码和名称\n    :type symbol: str\n    :return: 商品期权保证金\n    :rtype: pandas.DataFrame\n    \"\"\"\n    option_margin_symbol_df = option_margin_symbol()\n    url = option_margin_symbol_df[option_margin_symbol_df[\"symbol\"] == symbol][\n        \"url\"\n    ].values[0]\n    r = requests.get(url)\n    soup = BeautifulSoup(r.content, features=\"lxml\")\n    updated_time = soup.find_all(\"small\")[0].get_text().strip(\"最近更新：\")\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df[\"更新时间\"] = updated_time\n\n    temp_df[\"结算价\"] = pd.to_numeric(temp_df[\"结算价\"], errors=\"coerce\")\n    temp_df[\"交易乘数\"] = pd.to_numeric(temp_df[\"交易乘数\"], errors=\"coerce\")\n    temp_df[\"买方权利金\"] = pd.to_numeric(temp_df[\"买方权利金\"], errors=\"coerce\")\n    temp_df[\"卖方保证金\"] = pd.to_numeric(temp_df[\"卖方保证金\"], errors=\"coerce\")\n    temp_df[\"开仓手续费\"] = pd.to_numeric(temp_df[\"开仓手续费\"], errors=\"coerce\")\n    temp_df[\"平今手续费\"] = pd.to_numeric(temp_df[\"平今手续费\"], errors=\"coerce\")\n    temp_df[\"平昨手续费\"] = pd.to_numeric(temp_df[\"平昨手续费\"], errors=\"coerce\")\n    temp_df[\"手续费(开+平今)\"] = pd.to_numeric(\n        temp_df[\"手续费(开+平今)\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    option_margin_df = option_margin(symbol=\"原油期权\")\n    print(option_margin_df)\n"
  },
  {
    "path": "akshare/option/option_premium_analysis_em.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/3/11 17:00\nDesc: 东方财富网-数据中心-特色数据-期权折溢价\nhttps://data.eastmoney.com/other/premium.html\n\"\"\"\n\nimport pandas as pd\n\nfrom akshare.utils.func import fetch_paginated_data\n\n\ndef option_premium_analysis_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-期权折溢价\n    https://data.eastmoney.com/other/premium.html\n    :return: 期权折溢价\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"fid\": \"f250\",\n        \"po\": \"1\",\n        \"pz\": \"100\",\n        \"pn\": \"1\",\n        \"np\": \"1\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"ut\": \"b2884a393a59ad64002292a3e90d46a5\",\n        \"fields\": \"f1,f2,f3,f12,f13,f14,f161,f250,f330,f331,f332,f333,f334,f335,f337,f301,f152\",\n        \"fs\": \"m:10\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"期权代码\",\n        \"-\",\n        \"期权名称\",\n        \"-\",\n        \"行权价\",\n        \"折溢价率\",\n        \"到期日\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"标的名称\",\n        \"标的最新价\",\n        \"标的涨跌幅\",\n        \"盈亏平衡价\",\n    ]\n    temp_df = temp_df[\n        [\n            \"期权代码\",\n            \"期权名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"行权价\",\n            \"折溢价率\",\n            \"标的名称\",\n            \"标的最新价\",\n            \"标的涨跌幅\",\n            \"盈亏平衡价\",\n            \"到期日\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"行权价\"] = pd.to_numeric(temp_df[\"行权价\"], errors=\"coerce\")\n    temp_df[\"折溢价率\"] = pd.to_numeric(temp_df[\"折溢价率\"], errors=\"coerce\")\n    temp_df[\"标的最新价\"] = pd.to_numeric(temp_df[\"标的最新价\"], errors=\"coerce\")\n    temp_df[\"标的涨跌幅\"] = pd.to_numeric(temp_df[\"标的涨跌幅\"], errors=\"coerce\")\n    temp_df[\"盈亏平衡价\"] = pd.to_numeric(temp_df[\"盈亏平衡价\"], errors=\"coerce\")\n    temp_df[\"到期日\"] = pd.to_datetime(\n        temp_df[\"到期日\"].astype(str), errors=\"coerce\"\n    ).dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    option_premium_analysis_em_df = option_premium_analysis_em()\n    print(option_premium_analysis_em_df)\n"
  },
  {
    "path": "akshare/option/option_risk_analysis_em.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/3/13 21:50\nDesc: 东方财富网-数据中心-特色数据-期权风险分析\nhttps://data.eastmoney.com/other/riskanal.html\n\"\"\"\n\nimport pandas as pd\n\nfrom akshare.utils.func import fetch_paginated_data\n\n\ndef option_risk_analysis_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-期权风险分析\n    https://data.eastmoney.com/other/riskanal.html\n    :return: 期权风险分析\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"fid\": \"f12\",\n        \"po\": \"1\",\n        \"pz\": \"100\",\n        \"pn\": \"1\",\n        \"np\": \"1\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"ut\": \"b2884a393a59ad64002292a3e90d46a5\",\n        \"fields\": \"f1,f2,f3,f12,f13,f14,f302,f303,f325,f326,f327,f329,f328,f301,f152,f154\",\n        \"fs\": \"m:10\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"期权代码\",\n        \"-\",\n        \"期权名称\",\n        \"-\",\n        \"-\",\n        \"到期日\",\n        \"杠杆比率\",\n        \"实际杠杆比率\",\n        \"Delta\",\n        \"Gamma\",\n        \"Vega\",\n        \"Theta\",\n        \"Rho\",\n    ]\n    temp_df = temp_df[\n        [\n            \"期权代码\",\n            \"期权名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"杠杆比率\",\n            \"实际杠杆比率\",\n            \"Delta\",\n            \"Gamma\",\n            \"Vega\",\n            \"Rho\",\n            \"Theta\",\n            \"到期日\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"杠杆比率\"] = pd.to_numeric(temp_df[\"杠杆比率\"], errors=\"coerce\")\n    temp_df[\"实际杠杆比率\"] = pd.to_numeric(temp_df[\"实际杠杆比率\"], errors=\"coerce\")\n    temp_df[\"Delta\"] = pd.to_numeric(temp_df[\"Delta\"], errors=\"coerce\")\n    temp_df[\"Gamma\"] = pd.to_numeric(temp_df[\"Gamma\"], errors=\"coerce\")\n    temp_df[\"Vega\"] = pd.to_numeric(temp_df[\"Vega\"], errors=\"coerce\")\n    temp_df[\"Rho\"] = pd.to_numeric(temp_df[\"Rho\"], errors=\"coerce\")\n    temp_df[\"Theta\"] = pd.to_numeric(temp_df[\"Theta\"], errors=\"coerce\")\n    temp_df[\"到期日\"] = pd.to_datetime(\n        temp_df[\"到期日\"], format=\"%Y%m%d\", errors=\"coerce\"\n    ).dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    option_risk_analysis_em_df = option_risk_analysis_em()\n    print(option_risk_analysis_em_df)\n"
  },
  {
    "path": "akshare/option/option_risk_indicator_sse.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/9/8 16:20\nDesc: 上海证券交易所-产品-股票期权-期权风险指标\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef option_risk_indicator_sse(date: str = \"20240626\") -> pd.DataFrame:\n    \"\"\"\n    上海证券交易所-产品-股票期权-期权风险指标\n    http://www.sse.com.cn/assortment/options/risk/\n    :param date: 日期; 20150209 开始\n    :type date: str\n    :return: 期权风险指标\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://query.sse.com.cn/commonQuery.do\"\n    params = {\n        \"isPagination\": \"false\",\n        \"trade_date\": date,\n        \"sqlId\": \"SSE_ZQPZ_YSP_GGQQZSXT_YSHQ_QQFXZB_DATE_L\",\n        \"contractSymbol\": \"\",\n    }\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"query.sse.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"http://www.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/101.0.4951.67 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"])\n    temp_df = temp_df[\n        [\n            \"TRADE_DATE\",\n            \"SECURITY_ID\",\n            \"CONTRACT_ID\",\n            \"CONTRACT_SYMBOL\",\n            \"DELTA_VALUE\",\n            \"THETA_VALUE\",\n            \"GAMMA_VALUE\",\n            \"VEGA_VALUE\",\n            \"RHO_VALUE\",\n            \"IMPLC_VOLATLTY\",\n        ]\n    ]\n    temp_df[\"TRADE_DATE\"] = pd.to_datetime(\n        temp_df[\"TRADE_DATE\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"DELTA_VALUE\"] = pd.to_numeric(temp_df[\"DELTA_VALUE\"], errors=\"coerce\")\n    temp_df[\"THETA_VALUE\"] = pd.to_numeric(temp_df[\"THETA_VALUE\"], errors=\"coerce\")\n    temp_df[\"GAMMA_VALUE\"] = pd.to_numeric(temp_df[\"GAMMA_VALUE\"], errors=\"coerce\")\n    temp_df[\"VEGA_VALUE\"] = pd.to_numeric(temp_df[\"VEGA_VALUE\"], errors=\"coerce\")\n    temp_df[\"RHO_VALUE\"] = pd.to_numeric(temp_df[\"RHO_VALUE\"], errors=\"coerce\")\n    temp_df[\"IMPLC_VOLATLTY\"] = pd.to_numeric(\n        temp_df[\"IMPLC_VOLATLTY\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    option_risk_indicator_sse_df = option_risk_indicator_sse(date=\"20240626\")\n    print(option_risk_indicator_sse_df)\n"
  },
  {
    "path": "akshare/option/option_value_analysis_em.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/3/11 17:00\nDesc: 东方财富网-数据中心-特色数据-期权价值分析\nhttps://data.eastmoney.com/other/valueAnal.html\n\"\"\"\n\nimport pandas as pd\n\nfrom akshare.utils.func import fetch_paginated_data\n\n\ndef option_value_analysis_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-期权价值分析\n    https://data.eastmoney.com/other/valueAnal.html\n    :return: 期权价值分析\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"fid\": \"f301\",\n        \"po\": \"1\",\n        \"pz\": \"100\",\n        \"pn\": \"1\",\n        \"np\": \"1\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"ut\": \"b2884a393a59ad64002292a3e90d46a5\",\n        \"fields\": \"f1,f2,f3,f12,f13,f14,f298,f299,f249,f300,f330,f331,f332,f333,f334,f335,f336,f301,f152\",\n        \"fs\": \"m:10\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"-\",\n        \"-\",\n        \"最新价\",\n        \"-\",\n        \"期权代码\",\n        \"-\",\n        \"期权名称\",\n        \"-\",\n        \"隐含波动率\",\n        \"时间价值\",\n        \"内在价值\",\n        \"理论价格\",\n        \"到期日\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"标的名称\",\n        \"标的最新价\",\n        \"-\",\n        \"标的近一年波动率\",\n    ]\n    temp_df = temp_df[\n        [\n            \"期权代码\",\n            \"期权名称\",\n            \"最新价\",\n            \"时间价值\",\n            \"内在价值\",\n            \"隐含波动率\",\n            \"理论价格\",\n            \"标的名称\",\n            \"标的最新价\",\n            \"标的近一年波动率\",\n            \"到期日\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"时间价值\"] = pd.to_numeric(temp_df[\"时间价值\"], errors=\"coerce\")\n    temp_df[\"内在价值\"] = pd.to_numeric(temp_df[\"内在价值\"], errors=\"coerce\")\n    temp_df[\"隐含波动率\"] = pd.to_numeric(temp_df[\"隐含波动率\"], errors=\"coerce\")\n    temp_df[\"理论价格\"] = pd.to_numeric(temp_df[\"理论价格\"], errors=\"coerce\")\n    temp_df[\"标的最新价\"] = pd.to_numeric(temp_df[\"标的最新价\"], errors=\"coerce\")\n    temp_df[\"标的近一年波动率\"] = pd.to_numeric(\n        temp_df[\"标的近一年波动率\"], errors=\"coerce\"\n    )\n    temp_df[\"到期日\"] = pd.to_datetime(\n        temp_df[\"到期日\"].astype(str), errors=\"coerce\"\n    ).dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    option_value_analysis_em_df = option_value_analysis_em()\n    print(option_value_analysis_em_df)\n"
  },
  {
    "path": "akshare/other/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2021/5/14 17:52\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/other/other_car_cpca.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/8/3 20:00\nDesc: 乘联会\nhttp://data.cpcadata.com/FuelMarket\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef car_market_total_cpca(\n    symbol: str = \"狭义乘用车\", indicator: str = \"产量\"\n) -> pd.DataFrame:\n    \"\"\"\n    乘联会-统计数据-总体市场\n    http://data.cpcadata.com/TotalMarket\n    :param symbol: choice of {\"狭义乘用车\", \"广义乘用车\"}\n    :type symbol: str\n    :param indicator: choice of {\"产量\", \"批发\", \"零售\", \"出口\"}\n    :type indicator: str\n    :return: 统计数据-总体市场\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://data.cpcadata.com/api/chartlist\"\n    params = {\"charttype\": \"1\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    big_df = pd.DataFrame()\n    if symbol == \"狭义乘用车\":\n        temp_df = pd.DataFrame(data_json[0][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[0][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[2]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[1]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        if indicator == \"产量\":\n            big_df = pd.DataFrame(\n                [temp_current_year_df.iloc[:, 0], temp_previous_year_df.iloc[:, 0]]\n            ).T\n            big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n            big_df[\"月份\"] = temp_df[\"month\"]\n            big_df = big_df[\n                [\n                    \"月份\",\n                    temp_df.columns[2],\n                    temp_df.columns[1],\n                ]\n            ]\n        elif indicator == \"批发\":\n            big_df = pd.DataFrame(\n                [temp_current_year_df.iloc[:, 1], temp_previous_year_df.iloc[:, 1]]\n            ).T\n            big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n            big_df[\"月份\"] = temp_df[\"month\"]\n            big_df = big_df[\n                [\n                    \"月份\",\n                    temp_df.columns[2],\n                    temp_df.columns[1],\n                ]\n            ]\n        elif indicator == \"零售\":\n            big_df = pd.DataFrame(\n                [temp_current_year_df.iloc[:, 2], temp_previous_year_df.iloc[:, 2]]\n            ).T\n            big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n            big_df[\"月份\"] = temp_df[\"month\"]\n            big_df = big_df[\n                [\n                    \"月份\",\n                    temp_df.columns[2],\n                    temp_df.columns[1],\n                ]\n            ]\n        elif indicator == \"出口\":\n            big_df = pd.DataFrame(\n                [temp_current_year_df.iloc[:, 3], temp_previous_year_df.iloc[:, 3]]\n            ).T\n            big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n            big_df[\"月份\"] = temp_df[\"month\"]\n            big_df = big_df[\n                [\n                    \"月份\",\n                    temp_df.columns[2],\n                    temp_df.columns[1],\n                ]\n            ]\n    else:\n        temp_df = pd.DataFrame(data_json[1][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[1][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[2]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[1]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        if indicator == \"产量\":\n            big_df = pd.DataFrame(\n                [temp_current_year_df.iloc[:, 0], temp_previous_year_df.iloc[:, 0]]\n            ).T\n            big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n            big_df[\"月份\"] = temp_df[\"month\"]\n            big_df = big_df[\n                [\n                    \"月份\",\n                    temp_df.columns[2],\n                    temp_df.columns[1],\n                ]\n            ]\n        elif indicator == \"批发\":\n            big_df = pd.DataFrame(\n                [temp_current_year_df.iloc[:, 1], temp_previous_year_df.iloc[:, 1]]\n            ).T\n            big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n            big_df[\"月份\"] = temp_df[\"month\"]\n            big_df = big_df[\n                [\n                    \"月份\",\n                    temp_df.columns[2],\n                    temp_df.columns[1],\n                ]\n            ]\n        elif indicator == \"零售\":\n            big_df = pd.DataFrame(\n                [temp_current_year_df.iloc[:, 2], temp_previous_year_df.iloc[:, 2]]\n            ).T\n            big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n            big_df[\"月份\"] = temp_df[\"month\"]\n            big_df = big_df[\n                [\n                    \"月份\",\n                    temp_df.columns[2],\n                    temp_df.columns[1],\n                ]\n            ]\n        elif indicator == \"出口\":\n            big_df = pd.DataFrame(\n                [temp_current_year_df.iloc[:, 3], temp_previous_year_df.iloc[:, 3]]\n            ).T\n            big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n            big_df[\"月份\"] = temp_df[\"month\"]\n            big_df = big_df[\n                [\n                    \"月份\",\n                    temp_df.columns[2],\n                    temp_df.columns[1],\n                ]\n            ]\n\n    return big_df\n\n\ndef __car_market_man_rank_cpca_pifa(symbol: str = \"狭义乘用车-累计\") -> pd.DataFrame:\n    \"\"\"\n    乘联会-统计数据-厂商排名\n    http://data.cpcadata.com/ManRank\n    :param symbol: choice of {\"狭义乘用车-单月\", \"狭义乘用车-累计\", \"广义乘用车-单月\", \"广义乘用车-累计\"}\n    :type symbol: str\n    :return: 统计数据-厂商排名\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://data.cpcadata.com/api/chartlist\"\n    params = {\"charttype\": \"2\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    big_df = pd.DataFrame()\n    if symbol == \"狭义乘用车-累计\":\n        temp_df = pd.DataFrame(data_json[0][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[0][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[2]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[1]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 0], temp_previous_year_df.iloc[:, 0]]\n        ).T\n        big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n        big_df[\"厂商\"] = temp_df[\"厂商\"]\n        big_df = big_df[\n            [\n                \"厂商\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    elif symbol == \"狭义乘用车-单月\":\n        temp_df = pd.DataFrame(data_json[1][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[1][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[2]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[1]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 0], temp_previous_year_df.iloc[:, 0]]\n        ).T\n        big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n        big_df[\"厂商\"] = temp_df[\"厂商\"]\n        big_df = big_df[\n            [\n                \"厂商\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    elif symbol == \"广义乘用车-累计\":\n        temp_df = pd.DataFrame(data_json[2][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[2][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[2]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[1]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 0], temp_previous_year_df.iloc[:, 0]]\n        ).T\n        big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n        big_df[\"厂商\"] = temp_df[\"厂商\"]\n        big_df = big_df[\n            [\n                \"厂商\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    elif symbol == \"广义乘用车-单月\":\n        temp_df = pd.DataFrame(data_json[3][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[3][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[2]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[1]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 0], temp_previous_year_df.iloc[:, 0]]\n        ).T\n        big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n        big_df[\"厂商\"] = temp_df[\"厂商\"]\n        big_df = big_df[\n            [\n                \"厂商\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    return big_df\n\n\ndef __car_market_man_rank_cpca_lingshou(\n    symbol: str = \"狭义乘用车-累计\",\n) -> pd.DataFrame:\n    \"\"\"\n    乘联会-统计数据-厂商排名\n    http://data.cpcadata.com/ManRank\n    :param symbol: choice of {\"狭义乘用车-单月\", \"狭义乘用车-累计\", \"广义乘用车-单月\", \"广义乘用车-累计\"}\n    :type symbol: str\n    :return: 统计数据-厂商排名\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://data.cpcadata.com/api/chartlist_2\"\n    params = {\"charttype\": \"2\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    big_df = pd.DataFrame()\n    if symbol == \"狭义乘用车-累计\":\n        temp_df = pd.DataFrame(data_json[0][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[0][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[2]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[1]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 1], temp_previous_year_df.iloc[:, 1]]\n        ).T\n        big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n        big_df[\"厂商\"] = temp_df[\"厂商\"]\n        big_df = big_df[\n            [\n                \"厂商\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    elif symbol == \"狭义乘用车-单月\":\n        temp_df = pd.DataFrame(data_json[1][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[1][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[2]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[1]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 1], temp_previous_year_df.iloc[:, 1]]\n        ).T\n        big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n        big_df[\"厂商\"] = temp_df[\"厂商\"]\n        big_df = big_df[\n            [\n                \"厂商\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    elif symbol == \"广义乘用车-累计\":\n        temp_df = pd.DataFrame(data_json[2][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[2][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[2]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[1]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 1], temp_previous_year_df.iloc[:, 1]]\n        ).T\n        big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n        big_df[\"厂商\"] = temp_df[\"厂商\"]\n        big_df = big_df[\n            [\n                \"厂商\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    elif symbol == \"广义乘用车-单月\":\n        temp_df = pd.DataFrame(data_json[3][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[3][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[2]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[1]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 1], temp_previous_year_df.iloc[:, 1]]\n        ).T\n        big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n        big_df[\"厂商\"] = temp_df[\"厂商\"]\n        big_df = big_df[\n            [\n                \"厂商\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    return big_df\n\n\ndef car_market_man_rank_cpca(\n    symbol: str = \"狭义乘用车-单月\", indicator: str = \"批发\"\n) -> pd.DataFrame:\n    \"\"\"\n    乘联会-统计数据-厂商排名\n    http://data.cpcadata.com/ManRank\n    :param symbol: choice of {\"狭义乘用车-单月\", \"狭义乘用车-累计\", \"广义乘用车-单月\", \"广义乘用车-累计\"}\n    :type symbol: str\n    :param indicator: choice of {\"批发\", \"零售\"}\n    :type indicator: str\n    :return: 统计数据-厂商排名\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if indicator == \"批发\":\n        temp_df = __car_market_man_rank_cpca_pifa(symbol=symbol)\n        return temp_df\n    else:\n        temp_df = __car_market_man_rank_cpca_lingshou(symbol=symbol)\n        return temp_df\n\n\ndef __car_market_cate_cpca_pifa(symbol: str = \"MPV\") -> pd.DataFrame:\n    \"\"\"\n    乘联会-统计数据-车型大类\n    http://data.cpcadata.com/CategoryMarket\n    :param symbol: choice of {\"轿车\", \"MPV\", \"SUV\", \"占比\"}\n    :type symbol: str\n    :return: 统计数据-车型大类\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://data.cpcadata.com/api/chartlist\"\n    params = {\"charttype\": \"3\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    big_df = pd.DataFrame()\n    if symbol == \"MPV\":\n        temp_df = pd.DataFrame(data_json[0][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[0][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[1]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[2]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 1], temp_previous_year_df.iloc[:, 1]]\n        ).T\n        big_df.columns = [temp_df.columns[2], temp_df.columns[1]]\n        big_df[\"月份\"] = temp_df[\"month\"]\n        big_df = big_df[\n            [\n                \"月份\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    elif symbol == \"SUV\":\n        temp_df = pd.DataFrame(data_json[1][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[1][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[1]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[2]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 1], temp_previous_year_df.iloc[:, 1]]\n        ).T\n        big_df.columns = [temp_df.columns[2], temp_df.columns[1]]\n        big_df[\"月份\"] = temp_df[\"month\"]\n        big_df = big_df[\n            [\n                \"月份\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    elif symbol == \"轿车\":\n        temp_df = pd.DataFrame(data_json[2][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[2][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[1]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[2]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 1], temp_previous_year_df.iloc[:, 1]]\n        ).T\n        big_df.columns = [temp_df.columns[2], temp_df.columns[1]]\n        big_df[\"月份\"] = temp_df[\"month\"]\n        big_df = big_df[\n            [\n                \"月份\",\n                temp_df.columns[1],\n                temp_df.columns[2],\n            ]\n        ]\n    elif symbol == \"占比\":\n        temp_df = pd.DataFrame(data_json[3][\"dataList\"])\n        temp_mpv_year_list = []\n        temp_suv_year_list = []\n        temp_jiaoche_year_list = []\n        for item in data_json[3][\"dataList\"]:\n            temp_mpv_year_list.append(item[temp_df.columns[1]])\n            try:\n                temp_suv_year_list.append(item[temp_df.columns[2]])\n                temp_jiaoche_year_list.append(item[temp_df.columns[3]])\n            except:  # noqa: E722\n                continue\n        temp_mpv_year_df = pd.DataFrame(temp_mpv_year_list)\n        temp_suv_year_df = pd.DataFrame(temp_suv_year_list)\n        temp_jiaoche_year_df = pd.DataFrame(temp_jiaoche_year_list)\n        big_df = pd.DataFrame(\n            [\n                temp_mpv_year_df.iloc[:, 2],\n                temp_suv_year_df.iloc[:, 2],\n                temp_jiaoche_year_df.iloc[:, 2],\n            ]\n        ).T\n        big_df.columns = [temp_df.columns[1], temp_df.columns[2], temp_df.columns[3]]\n        big_df[\"月份\"] = temp_df[\"月份\"]\n        big_df = big_df[\n            [\"月份\", temp_df.columns[1], temp_df.columns[2], temp_df.columns[3]]\n        ]\n    return big_df\n\n\ndef __car_market_cate_cpca_lingshou(\n    symbol: str = \"狭义乘用车-累计\",\n) -> pd.DataFrame:\n    \"\"\"\n    乘联会-统计数据-车型大类\n    http://data.cpcadata.com/CategoryMarket\n    :param symbol: choice of {\"轿车\", \"MPV\", \"SUV\", \"占比\"}\n    :type symbol: str\n    :return: 统计数据-车型大类\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://data.cpcadata.com/api/chartlist\"\n    params = {\"charttype\": \"3\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    big_df = pd.DataFrame()\n    if symbol == \"MPV\":\n        temp_df = pd.DataFrame(data_json[0][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[0][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[1]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[2]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 2], temp_previous_year_df.iloc[:, 2]]\n        ).T\n        big_df.columns = [temp_df.columns[2], temp_df.columns[1]]\n        big_df[\"月份\"] = temp_df[\"month\"]\n        big_df = big_df[\n            [\n                \"月份\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    elif symbol == \"SUV\":\n        temp_df = pd.DataFrame(data_json[1][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[1][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[1]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[2]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 2], temp_previous_year_df.iloc[:, 2]]\n        ).T\n        big_df.columns = [temp_df.columns[2], temp_df.columns[1]]\n        big_df[\"月份\"] = temp_df[\"month\"]\n        big_df = big_df[\n            [\n                \"月份\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    elif symbol == \"轿车\":\n        temp_df = pd.DataFrame(data_json[2][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[2][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[1]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[2]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 2], temp_previous_year_df.iloc[:, 2]]\n        ).T\n        big_df.columns = [temp_df.columns[2], temp_df.columns[1]]\n        big_df[\"月份\"] = temp_df[\"month\"]\n        big_df = big_df[\n            [\n                \"月份\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    elif symbol == \"占比\":\n        temp_df = pd.DataFrame(data_json[3][\"dataList\"])\n        temp_mpv_year_list = []\n        temp_suv_year_list = []\n        temp_jiaoche_year_list = []\n        for item in data_json[3][\"dataList\"]:\n            temp_mpv_year_list.append(item[temp_df.columns[1]])\n            try:\n                temp_suv_year_list.append(item[temp_df.columns[2]])\n                temp_jiaoche_year_list.append(item[temp_df.columns[3]])\n            except:  # noqa: E722\n                continue\n        temp_mpv_year_df = pd.DataFrame(temp_mpv_year_list)\n        temp_suv_year_df = pd.DataFrame(temp_suv_year_list)\n        temp_jiaoche_year_df = pd.DataFrame(temp_jiaoche_year_list)\n        big_df = pd.DataFrame(\n            [\n                temp_mpv_year_df.iloc[:, 3],\n                temp_suv_year_df.iloc[:, 3],\n                temp_jiaoche_year_df.iloc[:, 3],\n            ]\n        ).T\n        big_df.columns = [temp_df.columns[1], temp_df.columns[2], temp_df.columns[3]]\n        big_df[\"月份\"] = temp_df[\"月份\"]\n        big_df = big_df[\n            [\"月份\", temp_df.columns[1], temp_df.columns[2], temp_df.columns[3]]\n        ]\n    return big_df\n\n\ndef car_market_cate_cpca(symbol: str = \"轿车\", indicator: str = \"批发\") -> pd.DataFrame:\n    \"\"\"\n    乘联会-统计数据-车型大类\n    http://data.cpcadata.com/CategoryMarket\n    :param symbol: choice of {\"轿车\", \"MPV\", \"SUV\", \"占比\"}\n    :type symbol: str\n    :param indicator: choice of {\"批发\", \"零售\"}\n    :type indicator: str\n    :return: 统计数据-车型大类\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if indicator == \"批发\":\n        temp_df = __car_market_cate_cpca_pifa(symbol=symbol)\n        return temp_df\n    else:\n        temp_df = __car_market_cate_cpca_lingshou(symbol=symbol)\n        return temp_df\n\n\ndef car_market_country_cpca() -> pd.DataFrame:\n    \"\"\"\n    乘联会-统计数据-国别细分市场\n    http://data.cpcadata.com/CountryMarket\n    :return: 统计数据-车型大类\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://data.cpcadata.com/api/chartlist\"\n    params = {\"charttype\": \"4\"}\n    r = requests.get(url=url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[0][\"dataList\"])\n    for item in temp_df.columns[1:]:\n        temp_list = []\n        for item_list in temp_df[item]:\n            temp_list.append(item_list[2])\n        temp_df[item] = pd.to_numeric(temp_list, errors=\"coerce\")\n    return temp_df\n\n\ndef car_market_segment_cpca(symbol: str = \"轿车\") -> pd.DataFrame:\n    \"\"\"\n    乘联会-统计数据-级别细分市场\n    http://data.cpcadata.com/SegmentMarket\n    :param symbol: choice of {\"轿车\", \"MPV\", \"SUV\"}\n    :type symbol: str\n    :return: 统计数据-车型大类\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://data.cpcadata.com/api/chartlist\"\n    params = {\"charttype\": \"5\"}\n    r = requests.get(url=url, params=params)\n    data_json = r.json()\n    if symbol == \"MPV\":\n        temp_df = pd.DataFrame(data_json[0][\"dataList\"])\n        for item in temp_df.columns[1:]:\n            temp_list = []\n            for item_list in temp_df[item]:\n                temp_list.append(item_list[2])\n            temp_df[item] = pd.to_numeric(temp_list, errors=\"coerce\")\n    elif symbol == \"SUV\":\n        temp_df = pd.DataFrame(data_json[1][\"dataList\"])\n        for item in temp_df.columns[1:]:\n            temp_list = []\n            for item_list in temp_df[item]:\n                temp_list.append(item_list[2])\n            temp_df[item] = pd.to_numeric(temp_list, errors=\"coerce\")\n    else:\n        temp_df = pd.DataFrame(data_json[2][\"dataList\"])\n        for item in temp_df.columns[1:]:\n            temp_list = []\n            for item_list in temp_df[item]:\n                temp_list.append(item_list[2])\n            temp_df[item] = pd.to_numeric(temp_list, errors=\"coerce\")\n    return temp_df\n\n\ndef car_market_fuel_cpca(symbol: str = \"整体市场\") -> pd.DataFrame:\n    \"\"\"\n    乘联会-统计数据-新能源细分市场\n    :param symbol: choice of {\"整体市场\", \"销量占比-PHEV-BEV\", \"销量占比-ICE-NEV\"}\n    :type symbol: str\n    https://data.cpcadata.com/FuelMarket\n    :return: 新能源细分市场\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://data.cpcadata.com/api/chartlist\"\n    params = {\"charttype\": \"6\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    if symbol == \"整体市场\":\n        temp_df = pd.DataFrame(data_json[0][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[0][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[2]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[1]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 2], temp_previous_year_df.iloc[:, 2]]\n        ).T\n        big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n        big_df[\"月份\"] = temp_df[\"month\"]\n        big_df = big_df[\n            [\n                \"月份\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    elif symbol == \"销量占比-PHEV-BEV\":\n        temp_df = pd.DataFrame(data_json[1][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[1][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[2]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[1]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 2], temp_previous_year_df.iloc[:, 2]]\n        ).T\n        big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n        big_df[\"月份\"] = temp_df[\"月份\"]\n        big_df = big_df[\n            [\n                \"月份\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    else:\n        temp_df = pd.DataFrame(data_json[2][\"dataList\"])\n        temp_current_year_list = []\n        temp_previous_year_list = []\n        for item in data_json[2][\"dataList\"]:\n            temp_previous_year_list.append(item[temp_df.columns[2]])\n            try:\n                temp_current_year_list.append(item[temp_df.columns[1]])\n            except:  # noqa: E722\n                continue\n        temp_current_year_df = pd.DataFrame(temp_current_year_list)\n        temp_previous_year_df = pd.DataFrame(temp_previous_year_list)\n        big_df = pd.DataFrame(\n            [temp_current_year_df.iloc[:, 2], temp_previous_year_df.iloc[:, 2]]\n        ).T\n        big_df.columns = [temp_df.columns[1], temp_df.columns[2]]\n        big_df[\"月份\"] = temp_df[\"月份\"]\n        big_df = big_df[\n            [\n                \"月份\",\n                temp_df.columns[2],\n                temp_df.columns[1],\n            ]\n        ]\n    return big_df\n\n\nif __name__ == \"__main__\":\n    car_market_total_cpca_df = car_market_total_cpca(\n        symbol=\"狭义乘用车\", indicator=\"产量\"\n    )\n    print(car_market_total_cpca_df)\n\n    car_market_total_cpca_df = car_market_total_cpca(\n        symbol=\"广义乘用车\", indicator=\"产量\"\n    )\n    print(car_market_total_cpca_df)\n\n    car_market_total_cpca_df = car_market_total_cpca(\n        symbol=\"狭义乘用车\", indicator=\"批发\"\n    )\n    print(car_market_total_cpca_df)\n\n    car_market_total_cpca_df = car_market_total_cpca(\n        symbol=\"广义乘用车\", indicator=\"批发\"\n    )\n    print(car_market_total_cpca_df)\n\n    car_market_total_cpca_df = car_market_total_cpca(\n        symbol=\"狭义乘用车\", indicator=\"零售\"\n    )\n    print(car_market_total_cpca_df)\n\n    car_market_total_cpca_df = car_market_total_cpca(\n        symbol=\"广义乘用车\", indicator=\"零售\"\n    )\n    print(car_market_total_cpca_df)\n\n    car_market_total_cpca_df = car_market_total_cpca(\n        symbol=\"狭义乘用车\", indicator=\"出口\"\n    )\n    print(car_market_total_cpca_df)\n\n    car_market_total_cpca_df = car_market_total_cpca(\n        symbol=\"广义乘用车\", indicator=\"出口\"\n    )\n    print(car_market_total_cpca_df)\n\n    car_market_man_rank_cpca_df = car_market_man_rank_cpca(\n        symbol=\"狭义乘用车-单月\", indicator=\"批发\"\n    )\n    print(car_market_man_rank_cpca_df)\n\n    car_market_man_rank_cpca_df = car_market_man_rank_cpca(\n        symbol=\"狭义乘用车-累计\", indicator=\"批发\"\n    )\n    print(car_market_man_rank_cpca_df)\n\n    car_market_man_rank_cpca_df = car_market_man_rank_cpca(\n        symbol=\"广义乘用车-单月\", indicator=\"批发\"\n    )\n    print(car_market_man_rank_cpca_df)\n\n    car_market_man_rank_cpca_df = car_market_man_rank_cpca(\n        symbol=\"广义乘用车-累计\", indicator=\"批发\"\n    )\n    print(car_market_man_rank_cpca_df)\n\n    car_market_man_rank_cpca_df = car_market_man_rank_cpca(\n        symbol=\"狭义乘用车-单月\", indicator=\"零售\"\n    )\n    print(car_market_man_rank_cpca_df)\n\n    car_market_man_rank_cpca_df = car_market_man_rank_cpca(\n        symbol=\"狭义乘用车-累计\", indicator=\"零售\"\n    )\n    print(car_market_man_rank_cpca_df)\n\n    car_market_man_rank_cpca_df = car_market_man_rank_cpca(\n        symbol=\"广义乘用车-单月\", indicator=\"零售\"\n    )\n    print(car_market_man_rank_cpca_df)\n\n    car_market_man_rank_cpca_df = car_market_man_rank_cpca(\n        symbol=\"广义乘用车-累计\", indicator=\"零售\"\n    )\n    print(car_market_man_rank_cpca_df)\n\n    car_market_cate_cpca_df = car_market_cate_cpca(symbol=\"轿车\", indicator=\"批发\")\n    print(car_market_cate_cpca_df)\n\n    car_market_cate_cpca_df = car_market_cate_cpca(symbol=\"MPV\", indicator=\"批发\")\n    print(car_market_cate_cpca_df)\n\n    car_market_cate_cpca_df = car_market_cate_cpca(symbol=\"SUV\", indicator=\"批发\")\n    print(car_market_cate_cpca_df)\n\n    car_market_cate_cpca_df = car_market_cate_cpca(symbol=\"占比\", indicator=\"批发\")\n    print(car_market_cate_cpca_df)\n\n    car_market_cate_cpca_df = car_market_cate_cpca(symbol=\"轿车\", indicator=\"零售\")\n    print(car_market_cate_cpca_df)\n\n    car_market_cate_cpca_df = car_market_cate_cpca(symbol=\"MPV\", indicator=\"零售\")\n    print(car_market_cate_cpca_df)\n\n    car_market_cate_cpca_df = car_market_cate_cpca(symbol=\"SUV\", indicator=\"零售\")\n    print(car_market_cate_cpca_df)\n\n    car_market_cate_cpca_df = car_market_cate_cpca(symbol=\"占比\", indicator=\"零售\")\n    print(car_market_cate_cpca_df)\n\n    car_market_country_cpca_df = car_market_country_cpca()\n    print(car_market_country_cpca_df)\n\n    car_market_segment_cpca_df = car_market_segment_cpca(symbol=\"轿车\")\n    print(car_market_segment_cpca_df)\n\n    car_market_segment_cpca_df = car_market_segment_cpca(symbol=\"MPV\")\n    print(car_market_segment_cpca_df)\n\n    car_market_segment_cpca_df = car_market_segment_cpca(symbol=\"SUV\")\n    print(car_market_segment_cpca_df)\n\n    car_market_fuel_cpca_df = car_market_fuel_cpca(symbol=\"整体市场\")\n    print(car_market_fuel_cpca_df)\n\n    car_market_fuel_cpca_df = car_market_fuel_cpca(symbol=\"销量占比-PHEV-BEV\")\n    print(car_market_fuel_cpca_df)\n\n    car_market_fuel_cpca_df = car_market_fuel_cpca(symbol=\"销量占比-ICE-NEV\")\n    print(car_market_fuel_cpca_df)\n"
  },
  {
    "path": "akshare/other/other_car_gasgoo.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/3 19:00\nDesc: 汽车行业制造企业数据库\nhttp://i.gasgoo.com/data/ranking\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils import demjson\n\n\ndef car_sale_rank_gasgoo(symbol: str = \"车企榜\", date: str = \"202109\") -> pd.DataFrame:\n    \"\"\"\n    盖世汽车-汽车行业制造企业数据库-销量数据\n    https://i.gasgoo.com/data/ranking\n    :param symbol: choice of {\"车企榜\", \"品牌榜\", \"车型榜\"}\n    :type symbol: str\n    :param date: 查询的年份和月份\n    :type date: str\n    :return: 销量数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"车型榜\": \"M\",\n        \"车企榜\": \"F\",\n        \"品牌榜\": \"B\",\n    }\n    url = \"https://i.gasgoo.com/data/sales/AutoModelSalesRank.aspx/GetSalesRank\"\n    payload = {\n        \"countryID\": \"\",\n        \"endM\": str(int(date[4:6])),\n        \"endY\": date[:4],\n        \"energy\": \"\",\n        \"modelGradeID\": \"\",\n        \"modelTypeID\": \"\",\n        \"orderBy\": f\"{date[:4]}-{str(int(date[4:6]))}\",\n        \"queryDate\": f\"{date[:4]}-{str(int(date[4:6]))}\",\n        \"rankType\": symbol_map[symbol],\n        \"startY\": date[:4],\n        \"startM\": str(int(date[4:6])),\n    }\n    headers = {\n        \"Accept\": \"application/json, text/javascript, */*; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Content-Length\": \"195\",\n        \"Content-Type\": \"application/json; charset=UTF-8\",\n        \"Cookie\": \"Hm_lvt_8e90480b1bf68ede548c407057660718=1636981448; _ga=GA1.2.858318653.1636981449; \"\n        \"_gid=GA1.2.1448165285.1636981449; _gat=1; Hm_lpvt_8e90480b1bf68ede548c407057660718=1636982578\",\n        \"Host\": \"i.gasgoo.com\",\n        \"Origin\": \"https://i.gasgoo.com\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://i.gasgoo.com/data/sales/AutoModelSalesRank.aspx/GetSalesRank\",\n        \"sec-ch-ua\": '\"Google Chrome\";v=\"95\", \"Chromium\";v=\"95\", \";Not A Brand\";v=\"99\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"Sec-Fetch-Dest\": \"empty\",\n        \"Sec-Fetch-Mode\": \"cors\",\n        \"Sec-Fetch-Site\": \"same-origin\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/95.0.4638.69 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.post(url, json=payload, headers=headers)\n    data_json = r.json()\n    data_json = demjson.decode(data_json[\"d\"])\n    temp_df = pd.DataFrame(data_json)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    car_sale_rank_gasgoo_df = car_sale_rank_gasgoo(symbol=\"品牌榜\", date=\"202311\")\n    print(car_sale_rank_gasgoo_df)\n\n    car_sale_rank_gasgoo_df = car_sale_rank_gasgoo(symbol=\"车型榜\", date=\"202311\")\n    print(car_sale_rank_gasgoo_df)\n\n    car_sale_rank_gasgoo_df = car_sale_rank_gasgoo(symbol=\"车企榜\", date=\"202311\")\n    print(car_sale_rank_gasgoo_df)\n"
  },
  {
    "path": "akshare/pro/__init__.py",
    "content": ""
  },
  {
    "path": "akshare/pro/client.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/11/10 22:52\nDesc: 数据接口源代码\n\"\"\"\n\nfrom functools import partial\nfrom urllib import parse\n\nimport pandas as pd\nimport requests\n\n\nclass DataApi:\n    __token = \"\"\n    __http_url = \"https://api.qhkch.com\"\n\n    def __init__(self, token, timeout=10):\n        \"\"\"\n        初始化函数\n        :param token: API接口TOKEN，用于用户认证\n        :type token: str\n        :param timeout: 超时设置\n        :type timeout: int\n        \"\"\"\n        self.__token = token\n        self.__timeout = timeout\n\n    def query(self, api_name, fields=\"\", **kwargs):\n        \"\"\"\n        :param api_name: 需要调取的接口\n        :type api_name: str\n        :param fields: 想要获取的字段\n        :type fields: str\n        :param kwargs: 指定需要输入的参数\n        :type kwargs: 键值对\n        :return: 指定的数据\n        :rtype: dict or pandas.DataFrame\n        \"\"\"\n        headers = {\n            \"X-Token\": self.__token,\n        }\n        url = parse.urljoin(self.__http_url, \"/\".join([api_name, *kwargs.values()]))\n        res = requests.get(url, headers=headers, timeout=self.__timeout)\n        if res.status_code != 200:\n            raise Exception(\"连接异常, 请检查您的Token是否过期和输入的参数是否正确\")\n        data_json = res.json()\n        if fields == \"\":\n            try:\n                return pd.DataFrame(data_json)\n            except ValueError:\n                result_df = pd.DataFrame.from_dict(\n                    data_json, orient=\"index\", columns=[api_name]\n                )\n                return result_df\n        else:  # 此处增加处理\n            if api_name == \"variety_all_positions\":\n                big_df = pd.DataFrame()\n                for item in data_json[fields].keys():\n                    temp_df = pd.DataFrame(data_json[fields][item])\n                    temp_df[\"code\"] = item\n                    big_df = big_df.append(temp_df, ignore_index=True)\n                big_df.reset_index(inplace=True, drop=True)\n                return big_df\n            else:\n                return pd.DataFrame(data_json[fields])\n\n    def __getattr__(self, name):\n        return partial(self.query, name)\n\n\nif __name__ == \"__main__\":\n    pass\n"
  },
  {
    "path": "akshare/pro/cons.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2020/12/24 16:28\nDesc: API常量文件\n\"\"\"\n\nTOKEN_F_P = \"tk.csv\"\nTOKEN_ERR_MSG = \"请设置 AKShare pro 的 token 凭证码，如果没有权限，请访问 https://qhkch.com/ 注册申请\"\n"
  },
  {
    "path": "akshare/pro/data_pro.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/11/10 22:52\nDesc: 数据接口初始化\n\"\"\"\n\nfrom akshare.pro import client\nfrom akshare.utils import token_process\n\n\ndef pro_api(token=\"\"):\n    \"\"\"\n    初始化 pro API,第一次可以通过ak.set_token('your token')来记录自己的token凭证，临时token可以通过本参数传入\n    \"\"\"\n    if token == \"\" or token is None:\n        token = token_process.get_token()\n    if token is not None and token != \"\":\n        pro = client.DataApi(token)\n        return pro\n    else:\n        raise Exception(\"api init error.\")\n\n\nif __name__ == \"__main__\":\n    pro_test = pro_api()\n    variety_all_df = pro_test.variety_all()\n    print(variety_all_df)\n    variety_no_futures_df = pro_test.variety_no_futures(symbol=\"RB\", date=\"2018-08-08\")\n    print(variety_no_futures_df)\n"
  },
  {
    "path": "akshare/qdii/__init__.py",
    "content": ""
  },
  {
    "path": "akshare/qdii/qdii_jsl.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/10/6 17:00\nDesc: 集思录-T+0 QDII\n集思录：https://www.jisilu.cn/data/qdii/#qdiie\n\"\"\"\n\nimport pandas as pd\n\nfrom akshare.request import make_request_with_retry_json\n\n\ndef qdii_e_index_jsl(cookie: str = \"\") -> pd.DataFrame:\n    \"\"\"\n    集思录-T+0 QDII-欧美市场-欧美指数\n    https://www.jisilu.cn/data/qdii/#qdiia\n    :return: T+0 QDII-亚洲市场\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.jisilu.cn/data/qdii/qdii_list/E\"\n    params = {\n        \"___jsl\": \"LST___t=1728207798534\",\n        \"rp\": \"22\",\n    }\n    headers = {\n        \"cookie\": cookie,\n    }\n    data_json = make_request_with_retry_json(url, params, headers=headers)\n    temp_df = pd.DataFrame([item[\"cell\"] for item in data_json[\"rows\"]])\n    temp_df.rename(\n        columns={\n            \"fund_id\": \"代码\",\n            \"fund_nm\": \"名称\",\n            \"price\": \"现价\",\n            \"increase_rt\": \"涨幅\",\n            \"volume\": \"成交\",\n            \"amount\": \"场内份额\",\n            \"amount_incr\": \"场内新增\",\n            \"fund_nav\": \"T-2净值\",\n            \"nav_dt\": \"净值日期\",\n            \"estimate_value\": \"T-1估值\",\n            \"last_est_dt\": \"估值日期\",\n            \"discount_rt\": \"T-1溢价率\",\n            \"index_nm\": \"相关标的\",\n            \"ref_increase_rt\": \"T-1指数涨幅\",\n            \"apply_fee\": \"申购费\",\n            \"redeem_fee\": \"赎回费\",\n            \"mt_fee\": \"托管费\",\n            \"issuer_nm\": \"基金公司\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"现价\",\n            \"涨幅\",\n            \"成交\",\n            \"场内份额\",\n            \"场内新增\",\n            \"T-2净值\",\n            \"净值日期\",\n            \"T-1估值\",\n            \"估值日期\",\n            \"T-1溢价率\",\n            \"相关标的\",\n            \"T-1指数涨幅\",\n            \"申购费\",\n            \"赎回费\",\n            \"托管费\",\n            \"基金公司\",\n        ]\n    ]\n    temp_df[\"净值日期\"] = pd.to_datetime(temp_df[\"净值日期\"], errors=\"coerce\").dt.date\n    temp_df[\"估值日期\"] = pd.to_datetime(temp_df[\"估值日期\"], errors=\"coerce\").dt.date\n    temp_df[\"现价\"] = pd.to_numeric(temp_df[\"现价\"], errors=\"coerce\")\n    temp_df[\"成交\"] = pd.to_numeric(temp_df[\"成交\"], errors=\"coerce\")\n    temp_df[\"场内份额\"] = pd.to_numeric(temp_df[\"场内份额\"], errors=\"coerce\")\n    temp_df[\"场内新增\"] = pd.to_numeric(temp_df[\"场内新增\"], errors=\"coerce\")\n    temp_df[\"T-2净值\"] = pd.to_numeric(temp_df[\"T-2净值\"], errors=\"coerce\")\n    temp_df[\"T-1估值\"] = pd.to_numeric(temp_df[\"T-1估值\"], errors=\"coerce\")\n    temp_df[\"托管费\"] = pd.to_numeric(temp_df[\"托管费\"], errors=\"coerce\")\n    return temp_df\n\n\ndef qdii_e_comm_jsl(cookie: str = \"\") -> pd.DataFrame:\n    \"\"\"\n    集思录-T+0 QDII-欧美市场-商品\n    https://www.jisilu.cn/data/qdii/#qdiia\n    :return: T+0 QDII-欧美市场-商品\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.jisilu.cn/data/qdii/qdii_list/E\"\n    params = {\n        \"___jsl\": \"LST___t=1728207798534\",\n        \"rp\": \"22\",\n    }\n    headers = {\n        \"cookie\": cookie\n    }\n    data_json = make_request_with_retry_json(url, params=params, headers=headers)\n    temp_df = pd.DataFrame([item[\"cell\"] for item in data_json[\"rows\"]])\n    temp_df.rename(\n        columns={\n            \"fund_id\": \"代码\",\n            \"fund_nm\": \"名称\",\n            \"price\": \"现价\",\n            \"increase_rt\": \"涨幅\",\n            \"volume\": \"成交\",\n            \"amount\": \"场内份额\",\n            \"amount_incr\": \"场内新增\",\n            \"fund_nav\": \"T-2净值\",\n            \"nav_dt\": \"净值日期\",\n            \"estimate_value\": \"T-1估值\",\n            \"last_est_dt\": \"估值日期\",\n            \"discount_rt\": \"T-1溢价率\",\n            \"index_nm\": \"相关标的\",\n            \"ref_increase_rt\": \"T-1指数涨幅\",\n            \"apply_fee\": \"申购费\",\n            \"redeem_fee\": \"赎回费\",\n            \"mt_fee\": \"托管费\",\n            \"issuer_nm\": \"基金公司\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"现价\",\n            \"涨幅\",\n            \"成交\",\n            \"场内份额\",\n            \"场内新增\",\n            \"T-2净值\",\n            \"净值日期\",\n            \"T-1估值\",\n            \"估值日期\",\n            \"T-1溢价率\",\n            \"相关标的\",\n            \"T-1指数涨幅\",\n            \"申购费\",\n            \"赎回费\",\n            \"托管费\",\n            \"基金公司\",\n        ]\n    ]\n    temp_df[\"净值日期\"] = pd.to_datetime(temp_df[\"净值日期\"], errors=\"coerce\").dt.date\n    temp_df[\"估值日期\"] = pd.to_datetime(temp_df[\"估值日期\"], errors=\"coerce\").dt.date\n    temp_df[\"现价\"] = pd.to_numeric(temp_df[\"现价\"], errors=\"coerce\")\n    temp_df[\"成交\"] = pd.to_numeric(temp_df[\"成交\"], errors=\"coerce\")\n    temp_df[\"场内份额\"] = pd.to_numeric(temp_df[\"场内份额\"], errors=\"coerce\")\n    temp_df[\"场内新增\"] = pd.to_numeric(temp_df[\"场内新增\"], errors=\"coerce\")\n    temp_df[\"T-2净值\"] = pd.to_numeric(temp_df[\"T-2净值\"], errors=\"coerce\")\n    temp_df[\"T-1估值\"] = pd.to_numeric(temp_df[\"T-1估值\"], errors=\"coerce\")\n    temp_df[\"托管费\"] = pd.to_numeric(temp_df[\"托管费\"], errors=\"coerce\")\n    return temp_df\n\n\ndef qdii_a_index_jsl(cookie: str = \"\") -> pd.DataFrame:\n    \"\"\"\n    集思录-T+0 QDII-亚洲市场-亚洲指数\n    https://www.jisilu.cn/data/qdii/#qdiia\n    :return: T+0 QDII-亚洲市场-亚洲指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.jisilu.cn/data/qdii/qdii_list/A\"\n    params = {\n        \"___jsl\": \"LST___t=1728206439242\",\n        \"rp\": \"22\",\n    }\n    headers = {\n        \"cookie\": cookie\n    }\n    data_json = make_request_with_retry_json(url, params=params, headers=headers)\n    temp_df = pd.DataFrame([item[\"cell\"] for item in data_json[\"rows\"]])\n    temp_df.rename(\n        columns={\n            \"fund_id\": \"代码\",\n            \"fund_nm\": \"名称\",\n            \"price\": \"现价\",\n            \"increase_rt\": \"涨幅\",\n            \"volume\": \"成交\",\n            \"amount\": \"场内份额\",\n            \"amount_incr\": \"场内新增\",\n            \"fund_nav\": \"净值\",\n            \"nav_dt\": \"净值日期\",\n            \"estimate_value\": \"估值\",\n            \"discount_rt\": \"溢价率\",\n            \"index_nm\": \"相关标的\",\n            \"ref_increase_rt\": \"指数涨幅\",\n            \"apply_fee\": \"申购费\",\n            \"redeem_fee\": \"赎回费\",\n            \"mt_fee\": \"托管费\",\n            \"issuer_nm\": \"基金公司\",\n        },\n        inplace=True,\n    )\n\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"现价\",\n            \"涨幅\",\n            \"成交\",\n            \"场内份额\",\n            \"场内新增\",\n            \"净值\",\n            \"净值日期\",\n            \"估值\",\n            \"溢价率\",\n            \"相关标的\",\n            \"指数涨幅\",\n            \"申购费\",\n            \"赎回费\",\n            \"托管费\",\n            \"基金公司\",\n        ]\n    ]\n    temp_df[\"净值日期\"] = pd.to_datetime(temp_df[\"净值日期\"], errors=\"coerce\").dt.date\n    temp_df[\"现价\"] = pd.to_numeric(temp_df[\"现价\"], errors=\"coerce\")\n    temp_df[\"成交\"] = pd.to_numeric(temp_df[\"成交\"], errors=\"coerce\")\n    temp_df[\"场内份额\"] = pd.to_numeric(temp_df[\"场内份额\"], errors=\"coerce\")\n    temp_df[\"场内新增\"] = pd.to_numeric(temp_df[\"场内新增\"], errors=\"coerce\")\n    temp_df[\"净值\"] = pd.to_numeric(temp_df[\"净值\"], errors=\"coerce\")\n    temp_df[\"估值\"] = pd.to_numeric(temp_df[\"估值\"], errors=\"coerce\")\n    temp_df[\"托管费\"] = pd.to_numeric(temp_df[\"托管费\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    qdii_e_index_jsl_df = qdii_e_index_jsl()\n    print(qdii_e_index_jsl_df)\n\n    qdii_e_comm_jsl_df = qdii_e_comm_jsl()\n    print(qdii_e_comm_jsl_df)\n\n    qdii_a_index_jsl_df = qdii_a_index_jsl()\n    print(qdii_a_index_jsl_df)\n"
  },
  {
    "path": "akshare/qhkc/__init__.py",
    "content": ""
  },
  {
    "path": "akshare/qhkc/qhkc_api.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/4/10 18:00\nDesc: 接口测试文件\n\"\"\"\n\nfrom akshare.pro.data_pro import pro_api\n\npro = pro_api()\n\n# 商品-持仓数据-多头龙虎榜\nvariety_positions_longs_df = pro.variety_positions(\n    fields=\"longs\", code=\"rb1810\", date=\"2018-08-08\"\n)\nprint(variety_positions_longs_df)\n\n# 商品-持仓数据-空头龙虎榜\nvariety_positions_shorts_df = pro.variety_positions(\n    fields=\"shorts\", code=\"rb1810\", date=\"2018-08-08\"\n)\nprint(variety_positions_shorts_df)\n\n# 商品-合约行情数据\nvariety_quotes_df = pro.variety_quotes(code=\"rb1810\", date=\"2018-08-08\")\nprint(variety_quotes_df)\n\n# 商品-商品沉淀资金数据接口\nvariety_money_df = pro.variety_money(symbol=\"RB\", date=\"2018-08-08\")\nprint(variety_money_df)\n\n# 商品-合约多空比数据\nvariety_bbr_df = pro.variety_bbr(code=\"rb1810\", date=\"2018-08-08\")\nprint(variety_bbr_df)\n\n# 商品-合约净持仓保证金变化数据\nvariety_net_money_chge_df = pro.variety_net_money_chge(code=\"rb1810\", date=\"2018-08-08\")\nprint(variety_net_money_chge_df)\n\n# 商品-合约净持仓保证金数据\nvariety_net_money_df = pro.variety_net_money(code=\"rb1810\", date=\"2018-08-08\")\nprint(variety_net_money_df)\n\n# 商品-合约总持仓保证金数据\nvariety_total_money_df = pro.variety_total_money(code=\"rb1810\", date=\"2018-08-08\")\nprint(variety_total_money_df)\n\n# 商品-商品的席位盈亏数据\nvariety_profit_df = pro.variety_profit(\n    symbol=\"RB\", start_date=\"2018-02-08\", end_date=\"2018-08-08\"\n)\nprint(variety_profit_df)\n\n# 商品-自研指标数据\nvariety_strategies_df = pro.variety_strategies(code=\"rb1810\", date=\"2018-08-08\")\nprint(variety_strategies_df)\n\n# 商品-龙虎比排行数据-多头排行\nvariety_longhu_long_top_df = pro.variety_longhu_top(fields=\"long\", date=\"2018-08-08\")\nprint(variety_longhu_long_top_df)\n\n# 商品-龙虎比排行数据-空头排行\nvariety_longhu_short_top_df = pro.variety_longhu_top(fields=\"short\", date=\"2018-08-08\")\nprint(variety_longhu_short_top_df)\n\n# 商品-牛熊线排行数据-多头排行\nvariety_niuxiong_long_top_df = pro.variety_niuxiong_top(\n    fields=\"long\", date=\"2018-08-08\"\n)\nprint(variety_niuxiong_long_top_df)\n\n# 商品-牛熊线排行数据-空头排行\nvariety_niuxiong_short_top_df = pro.variety_niuxiong_top(\n    fields=\"short\", date=\"2018-08-08\"\n)\nprint(variety_niuxiong_short_top_df)\n\n# 商品-商品相关研报数据\nvariety_reports_df = pro.variety_reports(csymbolode=\"RB\", date=\"2018-08-08\")\nprint(variety_reports_df)\n\n# 商品-商品列表数据\nvariety_all_df = pro.variety_all()\nprint(variety_all_df)\n\n\n# 席位-商品净持仓数据\nvariety_net_positions_df = pro.variety_net_positions(\n    symbol=\"RB\", broker=\"永安期货\", date=\"2018-08-08\"\n)\nprint(variety_net_positions_df)\n\n# 席位-席位持仓数据\nbroker_positions_df = pro.broker_positions(broker=\"永安期货\", date=\"2018-08-08\")\nprint(broker_positions_df)\n\n# 席位-席位盈亏数据\nbroker_calendar_df = pro.broker_calendar(\n    broker=\"永安期货\", start_date=\"2018-07-08\", end_date=\"2018-08-08\"\n)\nprint(broker_calendar_df)\n\n# 席位-席位每日大资金流动数据\nbroker_flow_df = pro.broker_flow(broker=\"永安期货\", date=\"2018-08-08\", offset=\"1000000\")\nprint(broker_flow_df)\n\n# 席位-席位多空比数据\nbroker_bbr_df = pro.broker_bbr(broker=\"永安期货\", date=\"2018-08-08\")\nprint(broker_bbr_df)\n\n# 席位-席位净持仓保证金变化数据\nbroker_net_money_chge_df = pro.broker_net_money_chge(\n    broker=\"永安期货\", date=\"2018-08-08\"\n)\nprint(broker_net_money_chge_df)\n\n# 席位-席位净持仓保证金数据\nbroker_net_money_df = pro.broker_net_money(broker=\"永安期货\", date=\"2018-08-08\")\nprint(broker_net_money_df)\n\n# 席位-席位总持仓保证金数据\nbroker_total_money_df = pro.broker_total_money(broker=\"永安期货\", date=\"2018-08-08\")\nprint(broker_total_money_df)\n\n# 席位-席位的商品盈亏数据\nbroker_profit_df = pro.broker_profit(\n    broker=\"永安期货\", start_date=\"2018-07-08\", end_date=\"2018-08-08\"\n)\nprint(broker_profit_df)\n\n# 席位-席位盈利排行\nbroker_in_profit_list_df = pro.broker_in_profit_list(\n    start_date=\"2018-07-08\", end_date=\"2018-08-08\", count=\"10\"\n)\nprint(broker_in_profit_list_df)\n\n# 席位-席位亏损排行\nbroker_in_loss_list_df = pro.broker_in_loss_list(\n    start_date=\"2018-07-08\", end_date=\"2018-08-08\", count=\"10\"\n)\nprint(broker_in_loss_list_df)\n\n# 席位-所有席位数据\nbroker_all_df = pro.broker_all(offset_days=\"365\")\nprint(broker_all_df)\n\n# 席位-建仓过程\nbroker_positions_process_df = pro.broker_positions_process(\n    broker=\"永安期货\", code=\"rb2010\", start_date=\"2020-02-03\", end_date=\"2020-06-03\"\n)\nprint(broker_positions_process_df)\n\n# 席位-席位对对碰\nbroker_pk_df = pro.broker_pk(broker1=\"永安期货\", broker2=\"兴证期货\", symbol=\"RB\")\nprint(broker_pk_df)\n\n\n# 指数-指数信息\nindex_info_df = pro.index_info(index_id=\"index0070c0eb-93ba-2da9-6633-fa70cb90e959\")\nprint(index_info_df)\n\n# 指数-指数权重数据\nindex_weights_df = pro.index_weights(\n    index_id=\"index0070c0eb-93ba-2da9-6633-fa70cb90e959\", date=\"2018-08-08\"\n)\nprint(index_weights_df)\n\n# 指数-指数行情数据\nindex_quotes_df = pro.index_quotes(\n    index_id=\"index0070c0eb-93ba-2da9-6633-fa70cb90e959\", date=\"2018-08-08\"\n)\nprint(index_quotes_df)\n\n# 指数-指数沉淀资金数据\nindex_money_df = pro.index_money(\n    index_id=\"index0070c0eb-93ba-2da9-6633-fa70cb90e959\", date=\"2018-08-08\"\n)\nprint(index_money_df)\n\n# 指数-公共指数列表\nindex_official_df = pro.index_official()\nprint(index_official_df)\n\n# 指数-个人指数列表\nindex_mine_df = pro.index_mine()\nprint(index_mine_df)\n\n# 指数-指数资金动向\nindex_trend_df = pro.index_trend(\n    index_id=\"index0070c0eb-93ba-2da9-6633-fa70cb90e959\", date=\"2018-08-08\"\n)\nprint(index_trend_df)\n\n# 指数-指数的席位盈亏数据\nindex_profit_df = pro.index_profit(\n    index_id=\"index0070c0eb-93ba-2da9-6633-fa70cb90e959\",\n    start_date=\"2018-07-08\",\n    end_date=\"2018-08-08\",\n)\nprint(index_profit_df)\n\n# 基本面-基差\nbasis_df = pro.basis(variety=\"RB\", date=\"2018-08-08\")\nprint(basis_df)\n\n# 基本面-期限结构\nterm_structure_df = pro.term_structure(variety=\"RB\", date=\"2018-08-08\")\nprint(term_structure_df)\n\n# 基本面-库存数据\ninventory_df = pro.inventory(variety=\"RB\", date=\"2018-08-08\")\nprint(inventory_df)\n\n# 基本面-利润数据\nprofit_df = pro.profit(variety=\"RB\", date=\"2019-12-12\")\nprint(profit_df)\n\n# 基本面-现货贸易商报价\ntrader_prices_df = pro.trader_prices(variety=\"RB\", date=\"2020-03-30\")\nprint(trader_prices_df)\n\n# 基本面-跨期套利数据\nintertemporal_arbitrage_df = pro.intertemporal_arbitrage(\n    variety=\"RB\", code1=\"01\", code2=\"05\", date=\"2018-08-08\"\n)\nprint(intertemporal_arbitrage_df)\n\n# 基本面-自由价差数据\nfree_spread_df = pro.free_spread(\n    variety1=\"RB\", code1=\"01\", variety2=\"HC\", code2=\"01\", date=\"2018-08-08\"\n)\nprint(free_spread_df)\n\n# 基本面-自由价比数据\nfree_ratio_df = pro.free_ratio(\n    variety1=\"RB\", code1=\"01\", variety2=\"HC\", code2=\"01\", date=\"2018-08-08\"\n)\nprint(free_ratio_df)\n\n# 基本面-仓单数据\nwarehouse_receipt_df = pro.warehouse_receipt(variety=\"RB\", date=\"2018-08-08\")\nprint(warehouse_receipt_df)\n\n# 基本面-仓单汇总数据\nwarehouse_receipt_sum_df = pro.warehouse_receipt(date=\"2018-08-08\")\nprint(warehouse_receipt_sum_df)\n\n# 基本面-虚实盘比数据\nvirtual_real_df = pro.virtual_real(variety=\"RB\", code=\"10\", date=\"2018-08-08\")\nprint(virtual_real_df)\n\n\n# 工具-龙虎牛熊多头合约池\nlong_pool_df = pro.long_pool(date=\"2018-08-08\")\nprint(long_pool_df)\n\n# 工具-龙虎牛熊空头合约池\nshort_pool_df = pro.short_pool(date=\"2018-08-08\")\nprint(short_pool_df)\n\n\n# 资金-每日净流多列表(商品)\ncommodity_flow_long_df = pro.commodity_flow_long(date=\"2018-08-08\")\nprint(commodity_flow_long_df)\n\n# 资金-每日净流空列表(商品)\ncommodity_flow_short_df = pro.commodity_flow_short(date=\"2018-08-08\")\nprint(commodity_flow_short_df)\n\n# 资金-每日净流多列表(指数)\nstock_flow_long_df = pro.stock_flow_long(date=\"2018-08-08\")\nprint(stock_flow_long_df)\n\n# 资金-每日净流空列表(指数)\nstock_flow_short_df = pro.stock_flow_short(date=\"2018-08-08\")\nprint(stock_flow_short_df)\n\n# 资金-每日商品保证金沉淀变化\nmoney_in_out_df = pro.money_in_out(date=\"2018-08-08\")\nprint(money_in_out_df)\n"
  },
  {
    "path": "akshare/qhkc_web/__init__.py",
    "content": ""
  },
  {
    "path": "akshare/qhkc_web/qhkc_fund.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/4/10 18:00\nDesc: 奇货可查网站目前已经商业化运营, 特提供奇货可查-资金数据接口, 方便您程序化调用\n注：期货价格为收盘价; 现货价格来自网络; 基差=现货价格-期货价格; 基差率=(现货价格-期货价格)/现货价格 * 100 %.\n\"\"\"\n\nimport datetime\nfrom typing import AnyStr\n\nimport pandas as pd\nimport requests\n\nfrom akshare.futures.cons import (\n    QHKC_FUND_BS_URL,\n    QHKC_FUND_POSITION_URL,\n    QHKC_FUND_POSITION_CHANGE_URL,\n    QHKC_FUND_DEAL_URL,\n)\n\n\ndef get_qhkc_fund_bs(\n    date: datetime.datetime.date = \"20190924\", url: AnyStr = QHKC_FUND_BS_URL\n):\n    \"\"\"\n    奇货可查-资金-净持仓分布\n    可获取数据的时间段为:\"2016-10-10:2019-09-30\"\n    :param url: 网址\n    :param date: 中文名称\n    :return: 净持仓分布\n    :rtype: pandas.DataFrame\n    symbol_df\n       name       value        ratio      date\n       IC  1552535406     0.195622  20190924\n       IF   536644080    0.0676182  20190924\n       橡胶   536439921    0.0675924  20190924\n       沪铜   460851099    0.0580681  20190924\n       豆粕   401005794    0.0505275  20190924\n      螺纹钢   329159263    0.0414747  20190924\n       焦炭   325646968    0.0410321  20190924\n      燃料油   313246789    0.0394697  20190924\n       IH   245556750    0.0309406  20190924\n       棉花   214538541    0.0270323  20190924\n      PTA   206340552    0.0259993  20190924\n       白糖   139901255    0.0176278  20190924\n       豆油   133664010    0.0168419  20190924\n       沪铝   109789864    0.0138337  20190924\n       沪锌   107440906    0.0135378  20190924\n       纸浆    95517374    0.0120354  20190924\n       苹果    81058733    0.0102136  20190924\n       塑料    63665245   0.00802194  20190924\n       菜油    61544593   0.00775474  20190924\n      铁矿石    60751108   0.00765475  20190924\n       焦煤    58327920   0.00734943  20190924\n       甲醇    52148752   0.00657084  20190924\n       沥青    49207374   0.00620022  20190924\n       菜粕    48266258   0.00608164  20190924\n      棕榈油    31615548   0.00398362  20190924\n       PP    29374826   0.00370128  20190924\n       豆一    22368376   0.00281846  20190924\n       玉米    13861567   0.00174658  20190924\n       沪锡     7485903  0.000943238  20190924\n       淀粉     4811234  0.000606225  20190924\n       棉纱     3627240  0.000457039  20190924\n       尿素     2290674  0.000288629  20190924\n       鸡蛋     2035406  0.000256465  20190924\n       粳米     1999282  0.000251913  20190924\n      油菜籽      533482  6.72197e-05  20190924\n      晚籼稻           0            0  20190924\n       强麦           0            0  20190924\n       沪铅       89914  1.13293e-05  20190924\n       豆二      379200  4.77799e-05  20190924\n       硅铁     5025872  0.000633269  20190924\n       红枣     8521668   0.00107375  20190924\n       锰硅     9472832   0.00119359  20190924\n       郑煤     9888272   0.00124594  20190924\n      乙二醇    18324242   0.00230889  20190924\n      PVC    19454830   0.00245135  20190924\n       玻璃    27076226   0.00341166  20190924\n       热卷    28832929     0.003633  20190924\n       沪银   375076371    0.0472603  20190924\n       沪镍   411622624    0.0518652  20190924\n       沪金   719371823    0.0906422  20190924\n\n    long_short_df\n          name       value     ratio      date\n        空  6303252093  0.794222  20190924\n        多  1633136803  0.205778  20190924\n    \"\"\"\n    date = str(date)\n    date = date[:4] + \"-\" + date[4:6] + \"-\" + date[6:]\n    print(date)\n    payload_id = {\"date\": date}\n    r = requests.post(url, data=payload_id)\n    print(\"数据获取成功\")\n    json_data = r.json()\n    symbol_name = []\n    for item in json_data[\"data\"][\"datas1\"]:\n        symbol_name.append(item[\"name\"])\n    symbol_value = []\n    for item in json_data[\"data\"][\"datas1\"]:\n        symbol_value.append(item[\"value\"])\n    long_short_name = []\n    for item in json_data[\"data\"][\"datas2\"]:\n        long_short_name.append(item[\"name\"])\n    long_short_value = []\n    for item in json_data[\"data\"][\"datas2\"]:\n        long_short_value.append(item[\"value\"])\n    symbol_df = pd.DataFrame([symbol_name, symbol_value]).T\n    long_short_df = pd.DataFrame([long_short_name, long_short_value]).T\n    symbol_df.columns = [\"name\", \"value\"]\n    symbol_df[\"ratio\"] = symbol_df[\"value\"] / symbol_df[\"value\"].sum()\n    symbol_df[\"date\"] = date\n    long_short_df.columns = [\"name\", \"value\"]\n    long_short_df[\"ratio\"] = long_short_df[\"value\"] / long_short_df[\"value\"].sum()\n    long_short_df[\"date\"] = date\n    return symbol_df, long_short_df\n\n\ndef get_qhkc_fund_position(\n    date: datetime.datetime.date = \"20190924\", url: AnyStr = QHKC_FUND_POSITION_URL\n):\n    \"\"\"\n    奇货可查-资金-总持仓分布\n    可获取数据的时间段为:\"2016-10-10:2019-09-30\"\n    :param url: 网址\n    :param date: 中文名称\n    :return: 总持仓分布\n    :rtype: pandas.DataFrame\n    symbol_df\n       name       value        ratio      date\n       IC  1552535406     0.195622  20190924\n       IF   536644080    0.0676182  20190924\n       橡胶   536439921    0.0675924  20190924\n       沪铜   460851099    0.0580681  20190924\n       豆粕   401005794    0.0505275  20190924\n      螺纹钢   329159263    0.0414747  20190924\n       焦炭   325646968    0.0410321  20190924\n      燃料油   313246789    0.0394697  20190924\n       IH   245556750    0.0309406  20190924\n       棉花   214538541    0.0270323  20190924\n      PTA   206340552    0.0259993  20190924\n       白糖   139901255    0.0176278  20190924\n       豆油   133664010    0.0168419  20190924\n       沪铝   109789864    0.0138337  20190924\n       沪锌   107440906    0.0135378  20190924\n       纸浆    95517374    0.0120354  20190924\n       苹果    81058733    0.0102136  20190924\n       塑料    63665245   0.00802194  20190924\n       菜油    61544593   0.00775474  20190924\n      铁矿石    60751108   0.00765475  20190924\n       焦煤    58327920   0.00734943  20190924\n       甲醇    52148752   0.00657084  20190924\n       沥青    49207374   0.00620022  20190924\n       菜粕    48266258   0.00608164  20190924\n      棕榈油    31615548   0.00398362  20190924\n       PP    29374826   0.00370128  20190924\n       豆一    22368376   0.00281846  20190924\n       玉米    13861567   0.00174658  20190924\n       沪锡     7485903  0.000943238  20190924\n       淀粉     4811234  0.000606225  20190924\n       棉纱     3627240  0.000457039  20190924\n       尿素     2290674  0.000288629  20190924\n       鸡蛋     2035406  0.000256465  20190924\n       粳米     1999282  0.000251913  20190924\n      油菜籽      533482  6.72197e-05  20190924\n      晚籼稻           0            0  20190924\n       强麦           0            0  20190924\n       沪铅       89914  1.13293e-05  20190924\n       豆二      379200  4.77799e-05  20190924\n       硅铁     5025872  0.000633269  20190924\n       红枣     8521668   0.00107375  20190924\n       锰硅     9472832   0.00119359  20190924\n       郑煤     9888272   0.00124594  20190924\n      乙二醇    18324242   0.00230889  20190924\n      PVC    19454830   0.00245135  20190924\n       玻璃    27076226   0.00341166  20190924\n       热卷    28832929     0.003633  20190924\n       沪银   375076371    0.0472603  20190924\n       沪镍   411622624    0.0518652  20190924\n       沪金   719371823    0.0906422  20190924\n\n    long_short_df\n          name       value     ratio      date\n        空  6303252093  0.794222  20190924\n        多  1633136803  0.205778  20190924\n    \"\"\"\n    date = str(date)\n    date = date[:4] + \"-\" + date[4:6] + \"-\" + date[6:]\n    print(date)\n    payload_id = {\"date\": date}\n    r = requests.post(url, data=payload_id)\n    print(url)\n    print(\"数据获取成功\")\n    json_data = r.json()\n    symbol_name = []\n    for item in json_data[\"data\"][\"datas1\"]:\n        symbol_name.append(item[\"name\"])\n    symbol_value = []\n    for item in json_data[\"data\"][\"datas1\"]:\n        symbol_value.append(item[\"value\"])\n    long_short_name = []\n    for item in json_data[\"data\"][\"datas2\"]:\n        long_short_name.append(item[\"name\"])\n    long_short_value = []\n    for item in json_data[\"data\"][\"datas2\"]:\n        long_short_value.append(item[\"value\"])\n    symbol_df = pd.DataFrame([symbol_name, symbol_value]).T\n    long_short_df = pd.DataFrame([long_short_name, long_short_value]).T\n    symbol_df.columns = [\"name\", \"value\"]\n    symbol_df[\"ratio\"] = symbol_df[\"value\"] / symbol_df[\"value\"].sum()\n    symbol_df[\"date\"] = date\n    long_short_df.columns = [\"name\", \"value\"]\n    long_short_df[\"ratio\"] = long_short_df[\"value\"] / long_short_df[\"value\"].sum()\n    long_short_df[\"date\"] = date\n    return symbol_df, long_short_df\n\n\ndef get_qhkc_fund_position_change(\n    date: datetime.datetime.date = \"20190924\",\n    url: AnyStr = QHKC_FUND_POSITION_CHANGE_URL,\n):\n    \"\"\"\n    奇货可查-资金-净持仓变化分布\n    可获取数据的时间段为:\"2016-10-10:2019-09-30\"\n    :param url: 网址\n    :param date: 中文名称\n    :return: pd.DataFrame\n    symbol_df\n       name       value        ratio      date\n       IC  1552535406     0.195622  20190924\n       IF   536644080    0.0676182  20190924\n       橡胶   536439921    0.0675924  20190924\n       沪铜   460851099    0.0580681  20190924\n       豆粕   401005794    0.0505275  20190924\n      螺纹钢   329159263    0.0414747  20190924\n       焦炭   325646968    0.0410321  20190924\n      燃料油   313246789    0.0394697  20190924\n       IH   245556750    0.0309406  20190924\n       棉花   214538541    0.0270323  20190924\n      PTA   206340552    0.0259993  20190924\n       白糖   139901255    0.0176278  20190924\n       豆油   133664010    0.0168419  20190924\n       沪铝   109789864    0.0138337  20190924\n       沪锌   107440906    0.0135378  20190924\n       纸浆    95517374    0.0120354  20190924\n       苹果    81058733    0.0102136  20190924\n       塑料    63665245   0.00802194  20190924\n       菜油    61544593   0.00775474  20190924\n      铁矿石    60751108   0.00765475  20190924\n       焦煤    58327920   0.00734943  20190924\n       甲醇    52148752   0.00657084  20190924\n       沥青    49207374   0.00620022  20190924\n       菜粕    48266258   0.00608164  20190924\n      棕榈油    31615548   0.00398362  20190924\n       PP    29374826   0.00370128  20190924\n       豆一    22368376   0.00281846  20190924\n       玉米    13861567   0.00174658  20190924\n       沪锡     7485903  0.000943238  20190924\n       淀粉     4811234  0.000606225  20190924\n       棉纱     3627240  0.000457039  20190924\n       尿素     2290674  0.000288629  20190924\n       鸡蛋     2035406  0.000256465  20190924\n       粳米     1999282  0.000251913  20190924\n      油菜籽      533482  6.72197e-05  20190924\n      晚籼稻           0            0  20190924\n       强麦           0            0  20190924\n       沪铅       89914  1.13293e-05  20190924\n       豆二      379200  4.77799e-05  20190924\n       硅铁     5025872  0.000633269  20190924\n       红枣     8521668   0.00107375  20190924\n       锰硅     9472832   0.00119359  20190924\n       郑煤     9888272   0.00124594  20190924\n      乙二醇    18324242   0.00230889  20190924\n      PVC    19454830   0.00245135  20190924\n       玻璃    27076226   0.00341166  20190924\n       热卷    28832929     0.003633  20190924\n       沪银   375076371    0.0472603  20190924\n       沪镍   411622624    0.0518652  20190924\n       沪金   719371823    0.0906422  20190924\n\n    long_short_df\n          name       value     ratio      date\n        空  6303252093  0.794222  20190924\n        多  1633136803  0.205778  20190924\n    \"\"\"\n    date = str(date)\n    date = date[:4] + \"-\" + date[4:6] + \"-\" + date[6:]\n    print(date)\n    payload_id = {\"date\": date}\n    r = requests.post(url, data=payload_id)\n    print(url)\n    print(\"数据获取成功\")\n    json_data = r.json()\n    symbol_name = []\n    for item in json_data[\"data\"][\"datas1\"]:\n        symbol_name.append(item[\"name\"])\n    symbol_value = []\n    for item in json_data[\"data\"][\"datas1\"]:\n        symbol_value.append(item[\"value\"])\n    long_short_name = []\n    for item in json_data[\"data\"][\"datas2\"]:\n        long_short_name.append(item[\"name\"])\n    long_short_value = []\n    for item in json_data[\"data\"][\"datas2\"]:\n        long_short_value.append(item[\"value\"])\n    symbol_df = pd.DataFrame([symbol_name, symbol_value]).T\n    long_short_df = pd.DataFrame([long_short_name, long_short_value]).T\n    symbol_df.columns = [\"name\", \"value\"]\n    symbol_df[\"ratio\"] = symbol_df[\"value\"] / symbol_df[\"value\"].sum()\n    symbol_df[\"date\"] = date\n    long_short_df.columns = [\"name\", \"value\"]\n    long_short_df[\"ratio\"] = long_short_df[\"value\"] / long_short_df[\"value\"].sum()\n    long_short_df[\"date\"] = date\n    return symbol_df, long_short_df\n\n\ndef get_qhkc_fund_money_change(\n    date: datetime.datetime.date = \"20190924\", url: AnyStr = QHKC_FUND_DEAL_URL\n):\n    \"\"\"\n    奇货可查-资金-成交额分布\n    可获取数据的时间段为:\"2016-10-10:2019-09-30\"\n    :param url: 网址\n    :param date: 中文名称\n    :return: 成交额分布\n    :rtype: pandas.DataFrame\n        name        value        ratio        date\n       沪镍    2.292e+10     0.145963  2019-09-25\n       沪银  1.22788e+10    0.0781956  2019-09-25\n       沪金  11196166005    0.0713011  2019-09-25\n       IC  1.10958e+10    0.0706619  2019-09-25\n      螺纹钢  1.02918e+10    0.0655416  2019-09-25\n       IF   9134893794    0.0581742  2019-09-25\n      铁矿石   7991427128    0.0508922  2019-09-25\n       原油   7695016910    0.0490045  2019-09-25\n       焦炭   5936589656    0.0378063  2019-09-25\n       甲醇  4.00966e+09    0.0255349  2019-09-25\n       沪铜   3806033147    0.0242381  2019-09-25\n      乙二醇  3.64376e+09    0.0232047  2019-09-25\n       橡胶   3286445958    0.0209292  2019-09-25\n      燃料油   3227355810    0.0205529  2019-09-25\n       豆粕   3124163112    0.0198958  2019-09-25\n       苹果  3.08134e+09    0.0196231  2019-09-25\n       沪锌   3076039116    0.0195893  2019-09-25\n      PTA  2.93901e+09    0.0187167  2019-09-25\n       IH   2578970688    0.0164238  2019-09-25\n       豆油   2371404714    0.0151019  2019-09-25\n       沥青  2.17662e+09    0.0138615  2019-09-25\n       白糖   1814626125    0.0115562  2019-09-25\n      棕榈油   1687834936    0.0107487  2019-09-25\n       菜粕  1.58244e+09    0.0100775  2019-09-25\n       焦煤  1.52553e+09   0.00971509  2019-09-25\n       PP  1.51981e+09    0.0096787  2019-09-25\n       塑料   1468988065   0.00935503  2019-09-25\n       沪铝  1.35968e+09   0.00865893  2019-09-25\n      不锈钢   1213656556   0.00772899  2019-09-25\n       棉花   1186243285   0.00755441  2019-09-25\n       鸡蛋   1175239681   0.00748433  2019-09-25\n       热卷  1.12293e+09   0.00715118  2019-09-25\n       纸浆  9.23876e+08   0.00588356  2019-09-25\n       沪铅    659297524   0.00419864  2019-09-25\n       菜油    587372274   0.00374059  2019-09-25\n       郑煤  5.82494e+08   0.00370953  2019-09-25\n       红枣    499089640   0.00317838  2019-09-25\n       玉米    458548474    0.0029202  2019-09-25\n      PVC    334434410   0.00212979  2019-09-25\n       玻璃    333819628   0.00212588  2019-09-25\n       沪锡  2.02186e+08   0.00128759  2019-09-25\n       豆二    185554169   0.00118167  2019-09-25\n       豆一    184729205   0.00117642  2019-09-25\n       硅铁  1.54719e+08  0.000985305  2019-09-25\n       淀粉    112331976  0.000715369  2019-09-25\n       锰硅  1.10791e+08  0.000705557  2019-09-25\n       尿素     78648750  0.000500862  2019-09-25\n       棉纱  5.17932e+07  0.000329837  2019-09-25\n       NR     34806750  0.000221661  2019-09-25\n       粳米      7375683  4.69709e-05  2019-09-25\n      油菜籽      2680922   1.7073e-05  2019-09-25\n      纤维板      2286460   1.4561e-05  2019-09-25\n      胶合板       831250  5.29369e-06  2019-09-25\n       强麦       472400  3.00841e-06  2019-09-25\n      晚籼稻       159318  1.01459e-06  2019-09-25\n       线材        90608  5.77023e-07  2019-09-25\n       粳稻            0            0  2019-09-25\n       普麦            0            0  2019-09-25\n       稻谷            0            0  2019-09-25\n    \"\"\"\n    date = str(date)\n    date = date[:4] + \"-\" + date[4:6] + \"-\" + date[6:]\n    print(date)\n    payload_id = {\"date\": date}\n    r = requests.post(url, data=payload_id)\n    print(url)\n    print(\"数据获取成功\")\n    json_data = r.json()\n    symbol_name = []\n    for item in json_data[\"data\"][\"datas\"]:\n        symbol_name.append(item[\"name\"])\n    symbol_value = []\n    for item in json_data[\"data\"][\"datas\"]:\n        symbol_value.append(item[\"value\"])\n    symbol_df = pd.DataFrame([symbol_name, symbol_value]).T\n    symbol_df.columns = [\"name\", \"value\"]\n    symbol_df[\"ratio\"] = symbol_df[\"value\"] / symbol_df[\"value\"].sum()\n    symbol_df[\"date\"] = date\n    return symbol_df\n\n\nif __name__ == \"__main__\":\n    # df1, df2 = get_qhkc_fund_bs(20190925)\n    # print(df1)\n    # print(df2)\n\n    # df1, df2 = get_qhkc_fund_position(20190925)\n    # print(df1)\n    # print(df2)\n\n    # df1, df2 = get_qhkc_fund_position_change(20190925)\n    # print(df1)\n    # print(df2)\n\n    get_qhkc_fund_money_change_df = get_qhkc_fund_money_change(20211208)\n    print(get_qhkc_fund_money_change_df)\n"
  },
  {
    "path": "akshare/qhkc_web/qhkc_index.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/4/10 18:00\nDesc: 奇货可查网站目前已经商业化运营, 特提供奇货可查-指数数据接口, 方便您程序化调用\n注：期货价格为收盘价; 现货价格来自网络; 基差=现货价格-期货价格; 基差率=(现货价格-期货价格)/现货价格 * 100 %.\n\"\"\"\n\nfrom typing import AnyStr\n\nimport pandas as pd\nimport requests\n\nfrom akshare.futures.cons import (\n    QHKC_INDEX_URL,\n    QHKC_INDEX_TREND_URL,\n    QHKC_INDEX_PROFIT_LOSS_URL,\n)\n\n\ndef get_qhkc_index(name: AnyStr = \"奇货商品\", url: AnyStr = QHKC_INDEX_URL):\n    \"\"\"\n    奇货可查-指数-指数详情\n    获得奇货可查的指数数据: '奇货黑链', '奇货商品', '奇货谷物', '奇货贵金属', '奇货饲料', '奇货软商品', '奇货化工', '奇货有色', '奇货股指', '奇货铁合金', '奇货油脂'\n    :param url: 网址\n    :type url: str\n    :param name: 中文名称\n    :type name: str\n    :return: 指数详情\n    :rtype: pandas.DataFrame\n        date    price   volume  ...      margin     profit long_short_ratio\n        2013-01-04     1000   260820  ...  1130485758    1816940            52.78\n        2013-01-07  998.244   245112  ...  1132228518    2514410            52.15\n        2013-01-08   1000.8   318866  ...  1160374489    2981010            51.99\n        2013-01-09  998.661   247352  ...  1166611242    3904220            52.44\n        2013-01-10  999.802   161292  ...  1153164771    1448190            52.81\n               ...      ...      ...  ...         ...        ...              ...\n        2019-09-24  845.391   881138  ...  1895149977  128379050             48.5\n        2019-09-25  845.674   715180  ...  1797235248  128788230            48.29\n        2019-09-26  840.154  1347570  ...  1730488227  137104890            48.44\n        2019-09-27  834.831   920160  ...  1605342767  143128540            48.77\n        2019-09-30  831.959  1031558  ...  1521875378  147810580            48.82\n    \"\"\"\n    name_id_dict = {}\n    qhkc_index_url = \"https://qhkch.com/ajax/official_indexes.php\"\n    r = requests.post(qhkc_index_url)\n    display_name = [item[\"name\"] for item in r.json()[\"data\"]]\n    index_id = [item[\"id\"] for item in r.json()[\"data\"]]\n    for item in range(len(display_name)):\n        name_id_dict[display_name[item]] = index_id[item]\n    payload_id = {\"id\": name_id_dict[name]}\n    r = requests.post(url, data=payload_id)\n    print(name, \"数据获取成功\")\n    json_data = r.json()\n    date = json_data[\"data\"][\"date\"]\n    price = json_data[\"data\"][\"price\"]\n    volume = json_data[\"data\"][\"volume\"]\n    open_interest = json_data[\"data\"][\"openint\"]\n    total_value = json_data[\"data\"][\"total_value\"]\n    profit = json_data[\"data\"][\"profit\"]\n    long_short_ratio = json_data[\"data\"][\"line\"]\n    df_temp = pd.DataFrame(\n        [date, price, volume, open_interest, total_value, profit, long_short_ratio]\n    ).T\n    df_temp.columns = [\n        \"date\",\n        \"price\",\n        \"volume\",\n        \"open_interest\",\n        \"margin\",\n        \"profit\",\n        \"long_short_ratio\",\n    ]\n    return df_temp\n\n\ndef get_qhkc_index_trend(name: AnyStr = \"奇货商品\", url: AnyStr = QHKC_INDEX_TREND_URL):\n    \"\"\"\n    奇货可查-指数-大资金动向\n    获得奇货可查的指数数据: '奇货黑链', '奇货商品', '奇货谷物', '奇货贵金属', '奇货饲料', '奇货软商品', '奇货化工', '奇货有色', '奇货股指', '奇货铁合金', '奇货油脂'\n    :param name: None\n    :type name: str\n    :param url: 网址\n    :type url: str\n    :return: 大资金动向\n    :rtype: pandas.DataFrame\n        broker    grade    money     open_order     variety\n        中金期货     B -3.68209e+07  3.68209e+07      沪金\n        浙商期货     D    -25845534     25845534      沪银\n        永安期货     A    -25614000     25614000      沪银\n        招商期货     D    -23517351     23517351      沪银\n        海通期货     A     21440845     21440845      沪金\n         美尔雅     D     21370975     21370975      沪金\n        中原期货     C    -21204612     21204612      沪银\n        国投安信     A -1.52374e+07  1.52374e+07      沪银\n        中信期货     C  1.50941e+07  1.50941e+07      沪银\n        海通期货     A -1.47184e+07  1.47184e+07      沪银\n        方正中期     E -1.31432e+07  1.31432e+07      沪银\n        东证期货     D   -1.283e+07    1.283e+07      沪银\n        一德期货     A  1.24973e+07  1.24973e+07      沪银\n        国投安信     A    -11602860     11602860      沪金\n        国泰君安     B -1.09363e+07  1.09363e+07      沪金\n        华安期货     D -9.99499e+06  9.99499e+06      沪金\n        南华期货     B -9.23675e+06  9.23675e+06      沪银\n        国贸期货     B  8.55245e+06  8.55245e+06      沪银\n        道通期货     C      8527675      8527675      沪金\n        招商期货     D -7.85457e+06  7.85457e+06      沪金\n        东方财富     E -7.58235e+06  7.58235e+06      沪银\n        五矿经易     A  6.95354e+06  6.95354e+06      沪银\n        银河期货     B  6.84522e+06  6.84522e+06      沪银\n        国贸期货     B      6731025      6731025      沪金\n        平安期货     D     -6710418      6710418      沪银\n        上海中期     C      6628800      6628800      沪金\n        中信期货     C     -6345830      6345830      沪金\n        银河期货     B     -6126295      6126295      沪金\n        华泰期货     A -5.96254e+06  5.96254e+06      沪金\n        招金期货     E -5.53029e+06  5.53029e+06      沪银\n        东证期货     D -5.47486e+06  5.47486e+06      沪金\n        光大期货     C     -5334730      5334730      沪金\n        广发期货     D  5.31904e+06  5.31904e+06      沪金\n        国信期货     D -5.05211e+06  5.05211e+06      沪金\n    \"\"\"\n    name_id_dict = {}\n    qhkc_index_url = \"https://qhkch.com/ajax/official_indexes.php\"\n    r = requests.post(qhkc_index_url)\n    display_name = [item[\"name\"] for item in r.json()[\"data\"]]\n    index_id = [item[\"id\"] for item in r.json()[\"data\"]]\n    for item in range(len(display_name)):\n        name_id_dict[display_name[item]] = index_id[item]\n    payload_id = {\"page\": 1, \"limit\": 10, \"index\": name_id_dict[name], \"date\": \"\"}\n    r = requests.post(url, data=payload_id)\n    print(f\"{name}期货指数-大资金动向数据获取成功\")\n    json_data = r.json()\n    df_temp = pd.DataFrame()\n    for item in json_data[\"data\"]:\n        broker = item[\"broker\"]\n        grade = item[\"grade\"]\n        money = item[\"money\"]\n        order_money = item[\"order_money\"]\n        variety = item[\"variety\"]\n        df_temp = df_temp._append(\n            pd.DataFrame([broker, grade, money, order_money, variety]).T\n        )\n    df_temp.columns = [\"broker\", \"grade\", \"money\", \"open_order\", \"variety\"]\n    df_temp.reset_index(drop=True, inplace=True)\n    return df_temp\n\n\ndef get_qhkc_index_profit_loss(\n    name: AnyStr = \"奇货商品\",\n    url: AnyStr = QHKC_INDEX_PROFIT_LOSS_URL,\n    start_date=\"\",\n    end_date=\"\",\n):\n    \"\"\"\n    奇货可查-指数-盈亏详情\n    获得奇货可查的指数数据: '奇货黑链', '奇货商品', '奇货谷物', '奇货贵金属', '奇货饲料', '奇货软商品', '奇货化工', '奇货有色', '奇货股指', '奇货铁合金', '奇货油脂'\n    :param url: 网址\n    :type url: str\n    :param name: None\n    :type name: str\n    :param start_date: \"\"\n    :type start_date: str\n    :param end_date: \"20190716\" 指定 end_date 就可以了\n    :type end_date: str\n    :return: 盈亏详情\n    :rtype: pandas.DataFrame\n        indexes       value  trans_date\n        招金期货-沪金  -307489200  2019-09-30\n        平安期货-沪银  -195016650  2019-09-30\n        建信期货-沪银  -160327350  2019-09-30\n        国贸期货-沪银  -159820965  2019-09-30\n        东证期货-沪银  -123508635  2019-09-30\n            ...         ...         ...\n        永安期货-沪银   187411350  2019-09-30\n        中信期货-沪金   242699750  2019-09-30\n        华泰期货-沪银   255766185  2019-09-30\n        永安期货-沪金   293008700  2019-09-30\n        国泰君安-沪金   302774950  2019-09-30\n    \"\"\"\n    name_id_dict = {}\n    qhkc_index_url = \"https://qhkch.com/ajax/official_indexes.php\"\n    r = requests.post(qhkc_index_url)\n    display_name = [item[\"name\"] for item in r.json()[\"data\"]]\n    index_id = [item[\"id\"] for item in r.json()[\"data\"]]\n    for item in range(len(display_name)):\n        name_id_dict[display_name[item]] = index_id[item]\n    payload_id = {\"index\": name_id_dict[name], \"date1\": start_date, \"date2\": end_date}\n    r = requests.post(url, data=payload_id)\n    print(f\"{name}期货指数-盈亏分布数据获取成功\")\n    json_data = r.json()\n    indexes = json_data[\"data\"][\"indexes\"]\n    value = json_data[\"data\"][\"value\"]\n    trans_date = [json_data[\"data\"][\"trans_date\"]] * len(value)\n    df_temp = pd.DataFrame([indexes, value, trans_date]).T\n    df_temp.columns = [\"indexes\", \"value\", \"trans_date\"]\n    return df_temp\n\n\nif __name__ == \"__main__\":\n    get_qhkc_index_df = get_qhkc_index(\"奇货谷物\")\n    print(get_qhkc_index_df)\n\n    get_qhkc_index_trend_df = get_qhkc_index_trend(\"奇货贵金属\")\n    print(get_qhkc_index_trend_df)\n\n    get_qhkc_index_profit_loss_df = get_qhkc_index_profit_loss(\n        \"奇货贵金属\", end_date=\"20250410\"\n    )\n    print(get_qhkc_index_profit_loss_df)\n"
  },
  {
    "path": "akshare/qhkc_web/qhkc_tool.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/9/30 13:58\nDesc: 奇货可查网站目前已经商业化运营, 特提供奇货可查-工具数据接口, 方便您程序化调用\n注：期货价格为收盘价; 现货价格来自网络; 基差=现货价格-期货价格; 基差率=(现货价格-期货价格)/现货价格 * 100 %.\n\"\"\"\n\nfrom typing import AnyStr\n\nimport pandas as pd\nimport requests\n\nfrom akshare.futures.cons import QHKC_TOOL_FOREIGN_URL, QHKC_TOOL_GDP_URL\n\n\ndef qhkc_tool_foreign(url: AnyStr = QHKC_TOOL_FOREIGN_URL):\n    \"\"\"\n    奇货可查-工具-外盘比价\n    实时更新数据, 暂不能查询历史数据\n    :param url: str 网址\n    :return: 外盘比价\n    :rtype: pandas.DataFrame\n    name    base_time base_price latest_price   rate\n     伦敦铜  10/08 01:00       5704       5746.5  0.745\n     伦敦锌  10/08 01:00    2291.25      2305.75  0.633\n     伦敦镍  10/08 01:00      17720      17372.5 -1.961\n     伦敦铝  10/08 01:00     1743.5      1742.75 -0.043\n     伦敦锡  10/07 15:00      16550        16290 -1.571\n     伦敦铅  10/08 01:00    2181.25       2177.5 -0.172\n    美原油1  10/08 02:30      52.81        53.05  0.454\n    美原油2  10/07 23:00      53.94        53.05  -1.65\n    布原油1  10/08 02:30      58.41        58.67  0.445\n    布原油2  10/07 23:00      59.54        58.67 -1.461\n     美燃油  10/07 23:00     1.9287       1.9102 -0.959\n    CMX金  10/08 02:30     1495.9       1496.5   0.04\n    CMX银  10/08 02:30     17.457       17.457      0\n      美豆  10/07 23:00     916.12       915.88 -0.026\n     美豆粕  10/07 23:00     302.75       302.65 -0.033\n     美豆油  10/07 23:00      30.02        29.91 -0.366\n     美玉米  10/07 23:00     386.38       387.88  0.388\n      美糖  10/07 23:30      12.37        12.53  1.293\n     美棉花  10/07 23:30      61.69        61.05 -1.037\n    \"\"\"\n    payload_id = {\"page\": 1, \"limit\": 10}\n    r = requests.post(url, data=payload_id)\n    print(\"数据获取成功\")\n    json_data = r.json()\n    name = []\n    base_time = []\n    base_price = []\n    latest_price = []\n    rate = []\n    for item in json_data[\"data\"]:\n        name.append(item[\"name\"])\n        base_time.append(item[\"base_time\"])\n        base_price.append(item[\"base_price\"])\n        latest_price.append(item[\"latest_price\"])\n        rate.append(item[\"rate\"])\n    temp_df = pd.DataFrame([name, base_time, base_price, latest_price, rate]).T\n    temp_df.columns = [\"name\", \"base_time\", \"base_price\", \"latest_price\", \"rate\"]\n    return temp_df\n\n\ndef qhkc_tool_nebula(url: AnyStr = QHKC_TOOL_FOREIGN_URL):\n    \"\"\"\n    奇货可查-工具-龙虎星云图\n    :param url: 网址\n    :return: pd.DataFrame\n    name    base_time base_price latest_price   rate\n     伦敦铜  10/08 01:00       5704       5746.5  0.745\n     伦敦锌  10/08 01:00    2291.25      2305.75  0.633\n     伦敦镍  10/08 01:00      17720      17372.5 -1.961\n     伦敦铝  10/08 01:00     1743.5      1742.75 -0.043\n     伦敦锡  10/07 15:00      16550        16290 -1.571\n     伦敦铅  10/08 01:00    2181.25       2177.5 -0.172\n    美原油1  10/08 02:30      52.81        53.05  0.454\n    美原油2  10/07 23:00      53.94        53.05  -1.65\n    布原油1  10/08 02:30      58.41        58.67  0.445\n    布原油2  10/07 23:00      59.54        58.67 -1.461\n     美燃油  10/07 23:00     1.9287       1.9102 -0.959\n    CMX金  10/08 02:30     1495.9       1496.5   0.04\n    CMX银  10/08 02:30     17.457       17.457      0\n      美豆  10/07 23:00     916.12       915.88 -0.026\n     美豆粕  10/07 23:00     302.75       302.65 -0.033\n     美豆油  10/07 23:00      30.02        29.91 -0.366\n     美玉米  10/07 23:00     386.38       387.88  0.388\n      美糖  10/07 23:30      12.37        12.53  1.293\n     美棉花  10/07 23:30      61.69        61.05 -1.037\n    \"\"\"\n    payload_id = {\"page\": 1, \"limit\": 10}\n    r = requests.post(url, data=payload_id)\n    print(\"数据获取成功\")\n    json_data = r.json()\n    name = []\n    base_time = []\n    base_price = []\n    latest_price = []\n    rate = []\n    for item in json_data[\"data\"]:\n        name.append(item[\"name\"])\n        base_time.append(item[\"base_time\"])\n        base_price.append(item[\"base_price\"])\n        latest_price.append(item[\"latest_price\"])\n        rate.append(item[\"rate\"])\n    temp_df = pd.DataFrame([name, base_time, base_price, latest_price, rate]).T\n    temp_df.columns = [\"name\", \"base_time\", \"base_price\", \"latest_price\", \"rate\"]\n    return temp_df\n\n\ndef qhkc_tool_gdp(url: AnyStr = QHKC_TOOL_GDP_URL):\n    \"\"\"\n      奇货可查-工具-各地区经济数据\n      实时更新数据, 暂不能查询历史数据\n      :param url:\n      :return: pandas.DataFrame\n      国家  国内生产总值 国内生产总值YoY 国内生产总值QoQ  ...       预算       债务   经常账户       人口\n       美国   20494     2.30%     2.00%  ...   -3.80%  106.10%  -2.40   327.17\n      欧元区   13670     1.20%     0.20%  ...   -0.50%   85.10%   2.90   341.15\n       中国   13608     6.20%     1.60%  ...   -4.20%   50.50%   0.40  1395.38\n       日本    4971     1.00%     0.30%  ...   -3.80%  238.20%   3.50   126.25\n       德国    3997     0.40%    -0.10%  ...    1.70%   60.90%   7.30    82.85\n       英国    2825     1.30%    -0.20%  ...   -2.00%   84.70%  -3.90    66.19\n       法国    2778     1.40%     0.30%  ...   -2.50%   98.40%  -0.30    67.19\n       印度    2726     5.00%     1.00%  ...   -3.42%   68.30%  -2.30  1298.04\n      意大利    2074    -0.10%     0.00%  ...   -2.10%  134.80%   2.50    60.48\n       巴西    1869     1.00%     0.40%  ...   -7.10%   77.22%  -0.77   208.49\n      加拿大    1709     1.60%     0.90%  ...   -0.70%   90.60%  -2.60    37.31\n      俄罗斯    1658     0.90%     0.20%  ...    2.70%   13.50%   7.00   146.90\n       韩国    1619     2.00%     1.00%  ...   -1.60%   36.60%   4.70    51.61\n     澳大利亚    1432     1.40%     0.50%  ...   -0.60%   40.70%  -1.50    25.18\n      西班牙    1426     2.00%     0.40%  ...   -2.50%   97.10%   0.90    46.66\n      墨西哥    1224    -0.80%     0.00%  ...   -2.00%   46.00%  -1.80   125.33\n       印尼    1042     5.05%     4.20%  ...   -1.76%   29.80%  -3.00   264.20\n       荷兰     913     1.80%     0.40%  ...    1.50%   52.40%  10.80    17.12\n    沙特阿拉伯     782     0.50%     0.00%  ...   -9.20%   19.10%   9.20    33.41\n      土耳其     767    -1.50%     1.20%  ...   -2.00%   30.40%  -3.50    82.00\n       瑞士     706     0.20%     0.30%  ...    1.30%   27.70%  10.20     8.48\n       台湾     589     2.40%     0.67%  ...   -1.90%   30.90%  11.60    23.58\n       波兰     586     4.50%     0.80%  ...   -0.40%   48.90%  -0.70    37.98\n       瑞典     551     1.00%     0.10%  ...    0.90%   38.80%   2.00    10.12\n      比利时     532     1.20%     0.20%  ...   -0.70%  102.00%  -1.30    11.41\n      阿根廷     519     0.60%    -0.30%  ...   -5.50%   86.20%  -5.40    44.50\n       泰国     505     2.30%     0.60%  ...   -2.50%   41.80%   7.50    66.41\n     委内瑞拉     482   -22.50%    -5.40%  ...  -20.00%   23.00%   6.00    31.83\n      奥地利     456     1.50%     0.30%  ...    0.10%   73.80%   2.30     8.82\n       伊朗     454     1.80%       NaN  ...   -3.90%   44.20%   1.30    82.10\n       挪威     435    -0.70%     0.30%  ...    7.30%   36.30%   8.10     5.30\n      阿联酋     414     2.20%     1.70%  ...   -1.80%   18.60%   9.10     9.60\n     尼日利亚     397     1.94%     2.85%  ...   -2.80%   18.20%   2.30   195.87\n      爱尔兰     376     5.80%     0.70%  ...    0.00%   64.80%   9.10     4.84\n      以色列     370     3.20%     0.30%  ...   -1.90%   61.00%   1.90     8.97\n       南非     366     0.90%     3.10%  ...   -4.40%   55.80%  -3.60    58.78\n      新加坡     364     0.10%    -3.30%  ...    0.40%  112.20%  17.70     5.64\n       香港     363     0.50%    -0.40%  ...    2.10%   38.40%   4.30     7.48\n     马来西亚     354     4.90%     1.00%  ...   -3.70%   51.80%   2.30    32.40\n       丹麦     351     2.60%     0.90%  ...    0.50%   34.10%   6.10     5.78\n      菲律宾     331     5.50%     1.40%  ...   -3.20%   41.90%  -2.40   107.00\n     哥伦比亚     330     3.00%     1.40%  ...   -3.10%   50.50%  -3.80    49.83\n     巴基斯坦     313     5.20%     5.79%  ...   -6.60%   72.50%  -4.80   212.22\n       智利     298     1.90%     0.80%  ...   -1.70%   25.60%  -3.10    18.75\n       芬兰     276     1.20%     0.50%  ...   -0.70%   58.90%  -1.90     5.51\n     孟加拉国     274     7.90%     7.90%  ...   -4.80%   27.90%  -3.60   163.70\n       埃及     251     5.70%     5.40%  ...   -8.20%   90.50%  -2.40    98.00\n       越南     245     7.31%     6.88%  ...   -3.50%   57.50%   3.00    94.67\n    捷克共和国     244     2.70%     0.70%  ...    0.90%   32.70%   0.30    10.61\n    \"\"\"\n    data = pd.read_html(url, encoding=\"utf-8\")\n    columns_list = data[0].columns.tolist()\n    columns_list[0] = \"国家\"\n    data[0].columns = columns_list\n    return data[0]\n\n\nif __name__ == \"__main__\":\n    qhkc_tool_foreign_df = qhkc_tool_foreign()\n    print(qhkc_tool_foreign_df)\n\n    qhkc_tool_gdp_df = qhkc_tool_gdp()\n    print(qhkc_tool_gdp_df)\n"
  },
  {
    "path": "akshare/rate/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2020/10/29 13:03\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/rate/repo_rate.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/1/20 23:04\nDesc: 中国外汇交易中心暨全国银行间同业拆借中心-回购定盘利率-历史数据\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef repo_rate_query(symbol: str = \"回购定盘利率\") -> pd.DataFrame:\n    \"\"\"\n    中国外汇交易中心暨全国银行间同业拆借中心-回购定盘利率-历史数据\n    https://www.chinamoney.com.cn/chinese/bkfrr/\n    :param symbol: choice of {\"回购定盘利率\", \"银银间回购定盘利率\"}\n    :type symbol: str\n    :return: 回购定盘利率-历史数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if symbol == \"回购定盘利率\":\n        url = \"https://www.chinamoney.com.cn/r/cms/www/chinamoney/data/currency/frr-chrt.csv\"\n        temp_df = pd.read_csv(url, header=None)\n        temp_df.dropna(axis=1, inplace=True)\n        temp_df.columns = [\"date\", \"FR001\", \"FR007\", \"FR014\"]\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        temp_df[\"FR001\"] = pd.to_numeric(temp_df[\"FR001\"], errors=\"coerce\")\n        temp_df[\"FR007\"] = pd.to_numeric(temp_df[\"FR007\"], errors=\"coerce\")\n        temp_df[\"FR014\"] = pd.to_numeric(temp_df[\"FR014\"], errors=\"coerce\")\n        temp_df.sort_values(by=[\"date\"], ignore_index=True, inplace=True)\n        return temp_df\n    else:\n        url = \"https://www.chinamoney.com.cn/r/cms/www/chinamoney/data/currency/fdr-chrt.csv\"\n        temp_df = pd.read_csv(url, header=None)\n        temp_df.dropna(axis=1, inplace=True)\n        temp_df.columns = [\"date\", \"FDR001\", \"FDR007\", \"FDR014\"]\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        temp_df[\"FDR001\"] = pd.to_numeric(temp_df[\"FDR001\"], errors=\"coerce\")\n        temp_df[\"FDR007\"] = pd.to_numeric(temp_df[\"FDR007\"], errors=\"coerce\")\n        temp_df[\"FDR014\"] = pd.to_numeric(temp_df[\"FDR014\"], errors=\"coerce\")\n        temp_df.sort_values(by=[\"date\"], ignore_index=True, inplace=True)\n        return temp_df\n\n\ndef repo_rate_hist(\n    start_date: str = \"20200930\", end_date: str = \"20201029\"\n) -> pd.DataFrame:\n    \"\"\"\n    中国外汇交易中心暨全国银行间同业拆借中心-回购定盘利率-历史数据\n    https://www.chinamoney.com.cn/chinese/bkfrr/\n    :param start_date: 开始时间, 开始时间与结束时间需要在一个月内\n    :type start_date: str\n    :param end_date: 结束时间, 开始时间与结束时间需要在一个月内\n    :type end_date: str\n    :return: 回购定盘利率-历史数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    start_date = \"-\".join([start_date[:4], start_date[4:6], start_date[6:]])\n    end_date = \"-\".join([end_date[:4], end_date[4:6], end_date[6:]])\n    url = \"https://www.chinamoney.com.cn/ags/ms/cm-u-bk-currency/FrrHis\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36\",\n    }\n    params = {\n        \"lang\": \"CN\",\n        \"startDate\": start_date,\n        \"endDate\": end_date,\n    }\n    r = requests.post(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df = pd.DataFrame([item for item in temp_df[\"frValueMap\"].to_list()])\n    temp_df = temp_df[\n        [\n            \"date\",\n            \"FR001\",\n            \"FR007\",\n            \"FR014\",\n            \"FDR001\",\n            \"FDR007\",\n            \"FDR014\",\n        ]\n    ]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"FR001\"] = pd.to_numeric(temp_df[\"FR001\"], errors=\"coerce\")\n    temp_df[\"FR007\"] = pd.to_numeric(temp_df[\"FR007\"], errors=\"coerce\")\n    temp_df[\"FR014\"] = pd.to_numeric(temp_df[\"FR014\"], errors=\"coerce\")\n    temp_df[\"FDR001\"] = pd.to_numeric(temp_df[\"FDR001\"], errors=\"coerce\")\n    temp_df[\"FDR007\"] = pd.to_numeric(temp_df[\"FDR007\"], errors=\"coerce\")\n    temp_df[\"FDR014\"] = pd.to_numeric(temp_df[\"FDR014\"], errors=\"coerce\")\n    temp_df.sort_values([\"date\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    repo_rate_query_df = repo_rate_query(symbol=\"回购定盘利率\")\n    print(repo_rate_query_df)\n\n    repo_rate_hist_df = repo_rate_hist(start_date=\"20231001\", end_date=\"20240101\")\n    print(repo_rate_hist_df)\n"
  },
  {
    "path": "akshare/reits/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2021/8/27 15:49\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/reits/reits_basic.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/8/26 15:00\nDesc: REITs 行情及信息\nhttps://quote.eastmoney.com/center/gridlist.html#fund_reits_all\nhttps://www.jisilu.cn/data/cnreits/#CnReits\n\"\"\"\n\nfrom functools import lru_cache\nfrom typing import Dict\n\nimport pandas as pd\nimport requests\n\n\n@lru_cache()\ndef __reits_code_market_map() -> Dict:\n    \"\"\"\n    东方财富网-行情中心-REITs-沪深 REITs\n    https://quote.eastmoney.com/center/gridlist.html#fund_reits_all\n    :return: 沪深 REITs-实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://95.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f3\",\n        \"fs\": \"m:1 t:9 e:97,m:0 t:10 e:97\",\n        \"fields\": \"f12,f13\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"])\n    temp_dict = dict(zip(temp_df[\"f12\"], temp_df[\"f13\"]))\n    return temp_dict\n\n\ndef reits_realtime_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-REITs-沪深 REITs\n    https://quote.eastmoney.com/center/gridlist.html#fund_reits_all\n    :return: 沪深 REITs-实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://95.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f3\",\n        \"fs\": \"m:1 t:9 e:97,m:0 t:10 e:97\",\n        \"fields\": \"f2,f3,f4,f5,f6,f12,f14,f15,f16,f17,f18\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = range(1, len(temp_df) + 1)\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"f2\": \"最新价\",\n            \"f3\": \"涨跌幅\",\n            \"f4\": \"涨跌额\",\n            \"f5\": \"成交量\",\n            \"f6\": \"成交额\",\n            \"f12\": \"代码\",\n            \"f14\": \"名称\",\n            \"f15\": \"最高价\",\n            \"f16\": \"最低价\",\n            \"f17\": \"开盘价\",\n            \"f18\": \"昨收\",\n            \"f13\": \"市场标识\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"成交量\",\n            \"成交额\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"昨收\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"开盘价\"] = pd.to_numeric(temp_df[\"开盘价\"], errors=\"coerce\")\n    temp_df[\"最高价\"] = pd.to_numeric(temp_df[\"最高价\"], errors=\"coerce\")\n    temp_df[\"最低价\"] = pd.to_numeric(temp_df[\"最低价\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    return temp_df\n\n\ndef reits_hist_em(symbol: str = \"508097\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-REITs-沪深 REITs-历史行情\n    https://quote.eastmoney.com/sh508097.html\n    :param symbol: REITs 代码\n    :type symbol: str\n    :return: 沪深 REITs-历史行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n    code_market_dict = __reits_code_market_map()\n    params = {\n        \"secid\": f\"{code_market_dict[symbol]}.{symbol}\",\n        \"klt\": \"101\",\n        \"fqt\": \"1\",\n        \"lmt\": \"10000\",\n        \"end\": \"20500000\",\n        \"iscca\": \"1\",\n        \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64\",\n        \"ut\": \"f057cbcbce2a86e2866ab8877db1d059\",\n        \"forcect\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df.columns = [\n        \"日期\",\n        \"今开\",\n        \"最新价\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"-\",\n        \"-\",\n        \"换手\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\"日期\", \"今开\", \"最高\", \"最低\", \"最新价\", \"成交量\", \"成交额\", \"振幅\", \"换手\"]\n    ]\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"换手\"] = pd.to_numeric(temp_df[\"换手\"], errors=\"coerce\")\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\ndef reits_hist_min_em(symbol: str = \"508097\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-REITs-沪深 REITs-历史行情\n    https://quote.eastmoney.com/sh508097.html\n    :param symbol: REITs 代码\n    :type symbol: str\n    :return: 沪深 REITs-历史行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/stock/trends2/get\"\n    code_market_dict = __reits_code_market_map()\n    params = {\n        \"secid\": f\"{code_market_dict[symbol]}.{symbol}\",\n        \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f17\",\n        \"fields2\": \"f51,f53,f54,f55,f56,f57,f58\",\n        \"iscr\": \"0\",\n        \"iscca\": \"0\",\n        \"ut\": \"f057cbcbce2a86e2866ab8877db1d059\",\n        \"ndays\": \"5\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"trends\"]])\n    temp_df.columns = [\n        \"时间\",\n        \"最新价\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"昨收\",\n    ]\n\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    reits_realtime_em_df = reits_realtime_em()\n    print(reits_realtime_em_df)\n\n    reits_hist_em_df = reits_hist_em(symbol=\"508097\")\n    print(reits_hist_em_df)\n\n    reits_hist_min_em_df = reits_hist_min_em(symbol=\"508097\")\n    print(reits_hist_min_em_df)\n"
  },
  {
    "path": "akshare/request.py",
    "content": "import time\n\nimport requests\nfrom requests.exceptions import RequestException\n\nfrom akshare.exceptions import NetworkError, APIError, RateLimitError, DataParsingError\nfrom akshare.utils.context import config\n\n\ndef make_request_with_retry_json(\n    url, params=None, headers=None, proxies=None, max_retries=3, retry_delay=1\n):\n    \"\"\"\n    发送 HTTP GET 请求，支持重试机制和代理设置。\n\n    :param url: 请求的 URL\n    :param params: URL 参数 (可选)\n    :param headers: 请求头 (可选)\n    :param proxies: 代理设置 (可选)\n    :param max_retries: 最大重试次数\n    :param retry_delay: 初始重试延迟（秒）\n    :return: 解析后的 JSON 数据\n    \"\"\"\n    if proxies is None:\n        proxies = config.proxies\n    for attempt in range(max_retries):\n        try:\n            response = requests.get(\n                url, params=params, headers=headers, proxies=proxies\n            )\n            if response.status_code == 200:\n                try:\n                    data = response.json()\n                    if not data:\n                        raise DataParsingError(\"Empty response data\")\n                    return data\n                except ValueError:\n                    raise DataParsingError(\"Failed to parse JSON response\")\n            elif response.status_code == 429:\n                raise RateLimitError(\n                    f\"Rate limit exceeded. Status code: {response.status_code}\"\n                )\n            else:\n                raise APIError(\n                    f\"API request failed. Status code: {response.status_code}\"\n                )\n\n        except (RequestException, RateLimitError, APIError, DataParsingError) as e:\n            if attempt == max_retries - 1:\n                if isinstance(e, RateLimitError):\n                    raise\n                elif isinstance(e, (APIError, DataParsingError)):\n                    raise\n                else:\n                    raise NetworkError(\n                        f\"Failed to connect after {max_retries} attempts: {str(e)}\"\n                    )\n\n            time.sleep(retry_delay)\n            retry_delay *= 2  # 指数退避策略\n\n    raise NetworkError(f\"Failed to connect after {max_retries} attempts\")\n\n\ndef make_request_with_retry_text(\n    url, params=None, headers=None, proxies=None, max_retries=3, retry_delay=1\n):\n    \"\"\"\n    发送 HTTP GET 请求，支持重试机制和代理设置。\n\n    :param url: 请求的 URL\n    :param params: URL 参数 (可选)\n    :param headers: 请求头 (可选)\n    :param proxies: 代理设置 (可选)\n    :param max_retries: 最大重试次数\n    :param retry_delay: 初始重试延迟（秒）\n    :return: 解析后的 JSON 数据\n    \"\"\"\n    if proxies is None:\n        proxies = config.proxies\n    for attempt in range(max_retries):\n        try:\n            response = requests.get(\n                url, params=params, headers=headers, proxies=proxies\n            )\n            if response.status_code == 200:\n                try:\n                    data = response.text\n                    if not data:\n                        raise DataParsingError(\"Empty response data\")\n                    return data\n                except ValueError:\n                    raise DataParsingError(\"Failed to parse JSON response\")\n            elif response.status_code == 429:\n                raise RateLimitError(\n                    f\"Rate limit exceeded. Status code: {response.status_code}\"\n                )\n            else:\n                raise APIError(\n                    f\"API request failed. Status code: {response.status_code}\"\n                )\n\n        except (RequestException, RateLimitError, APIError, DataParsingError) as e:\n            if attempt == max_retries - 1:\n                if isinstance(e, RateLimitError):\n                    raise\n                elif isinstance(e, (APIError, DataParsingError)):\n                    raise\n                else:\n                    raise NetworkError(\n                        f\"Failed to connect after {max_retries} attempts: {str(e)}\"\n                    )\n\n            time.sleep(retry_delay)\n            retry_delay *= 2  # 指数退避策略\n\n    raise NetworkError(f\"Failed to connect after {max_retries} attempts\")\n"
  },
  {
    "path": "akshare/spot/__init__.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2021/12/6 21:58\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/spot/spot_hog_soozhu.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/8/10 15:30\nDesc: 搜猪-生猪大数据-各省均价实时排行榜\nhttps://www.soozhu.com/price/data/center/\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef spot_hog_soozhu() -> pd.DataFrame:\n    \"\"\"\n    搜猪-生猪大数据-各省均价实时排行榜\n    https://www.soozhu.com/price/data/center/\n    :return: 各省均价实时排行榜\n    :rtype: pandas.DataFrame\n    \"\"\"\n    session = requests.session()\n    url = \"https://www.soozhu.com/price/data/center/\"\n    r = session.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    token = soup.find(name=\"input\", attrs={\"name\": \"csrfmiddlewaretoken\"})[\"value\"]\n    url = \"https://www.soozhu.com/price/data/center/\"\n    payload = {\"act\": \"mapdata\", \"csrfmiddlewaretoken\": token}\n    r = session.post(url, data=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"vlist\"])\n    price_list = [item[0] for item in temp_df[\"value\"]]\n    pct_list = [item[1] for item in temp_df[\"value\"]]\n    big_df = pd.DataFrame([temp_df[\"name\"].values, price_list, pct_list]).T\n    big_df.columns = [\"省份\", \"价格\", \"涨跌幅\"]\n    big_df[\"价格\"] = pd.to_numeric(big_df[\"价格\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = round(big_df[\"涨跌幅\"], 2)\n    return big_df\n\n\ndef spot_hog_year_trend_soozhu() -> pd.DataFrame:\n    \"\"\"\n    搜猪-生猪大数据-今年以来全国出栏均价走势\n    https://www.soozhu.com/price/data/center/\n    :return: 今年以来全国出栏均价走势\n    :rtype: pandas.DataFrame\n    \"\"\"\n    session = requests.session()\n    url = \"https://www.soozhu.com/price/data/center/\"\n    r = session.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    token = soup.find(name=\"input\", attrs={\"name\": \"csrfmiddlewaretoken\"})[\"value\"]\n    url = \"https://www.soozhu.com/price/data/center/\"\n    payload = {\"act\": \"yeartrend\", \"csrfmiddlewaretoken\": token}\n    r = session.post(url, data=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"nationlist\"])\n    temp_df.columns = [\"日期\", \"价格\"]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"价格\"] = pd.to_numeric(temp_df[\"价格\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"日期\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\ndef spot_hog_lean_price_soozhu() -> pd.DataFrame:\n    \"\"\"\n    搜猪-生猪大数据-全国瘦肉型肉猪\n    https://www.soozhu.com/price/data/center/\n    :return: 全国瘦肉型肉猪\n    :rtype: pandas.DataFrame\n    \"\"\"\n    session = requests.session()\n    url = \"https://www.soozhu.com/price/data/center/\"\n    r = session.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    token = soup.find(name=\"input\", attrs={\"name\": \"csrfmiddlewaretoken\"})[\"value\"]\n    url = \"https://www.soozhu.com/price/data/center/\"\n    payload = {\"act\": \"pricetrend\", \"indid\": \"\", \"csrfmiddlewaretoken\": token}\n    r = session.post(url, data=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"datalist\"])\n    temp_df.columns = [\"日期\", \"价格\"]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"价格\"] = pd.to_numeric(temp_df[\"价格\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"日期\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\ndef spot_hog_three_way_soozhu() -> pd.DataFrame:\n    \"\"\"\n    搜猪-生猪大数据-全国三元仔猪\n    https://www.soozhu.com/price/data/center/\n    :return: 全国三元仔猪\n    :rtype: pandas.DataFrame\n    \"\"\"\n    session = requests.session()\n    url = \"https://www.soozhu.com/price/data/center/\"\n    r = session.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    token = soup.find(name=\"input\", attrs={\"name\": \"csrfmiddlewaretoken\"})[\"value\"]\n    url = \"https://www.soozhu.com/price/data/center/\"\n    payload = {\"act\": \"pricetrend\", \"indid\": \"4\", \"csrfmiddlewaretoken\": token}\n    r = session.post(url, data=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"datalist\"])\n    temp_df.columns = [\"日期\", \"价格\"]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"价格\"] = pd.to_numeric(temp_df[\"价格\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"日期\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\ndef spot_hog_crossbred_soozhu() -> pd.DataFrame:\n    \"\"\"\n    搜猪-生猪大数据-全国后备二元母猪\n    https://www.soozhu.com/price/data/center/\n    :return: 全国后备二元母猪\n    :rtype: pandas.DataFrame\n    \"\"\"\n    session = requests.session()\n    url = \"https://www.soozhu.com/price/data/center/\"\n    r = session.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    token = soup.find(name=\"input\", attrs={\"name\": \"csrfmiddlewaretoken\"})[\"value\"]\n    url = \"https://www.soozhu.com/price/data/center/\"\n    payload = {\"act\": \"pricetrend\", \"indid\": \"6\", \"csrfmiddlewaretoken\": token}\n    r = session.post(url, data=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"datalist\"])\n    temp_df.columns = [\"日期\", \"价格\"]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"价格\"] = pd.to_numeric(temp_df[\"价格\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"日期\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\ndef spot_corn_price_soozhu() -> pd.DataFrame:\n    \"\"\"\n    搜猪-生猪大数据-全国玉米价格走势\n    https://www.soozhu.com/price/data/center/\n    :return: 全国玉米价格走势\n    :rtype: pandas.DataFrame\n    \"\"\"\n    session = requests.session()\n    url = \"https://www.soozhu.com/price/data/center/\"\n    r = session.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    token = soup.find(name=\"input\", attrs={\"name\": \"csrfmiddlewaretoken\"})[\"value\"]\n    url = \"https://www.soozhu.com/price/data/center/\"\n    payload = {\"act\": \"pricetrend\", \"indid\": \"8\", \"csrfmiddlewaretoken\": token}\n    r = session.post(url, data=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"datalist\"])\n    temp_df.columns = [\"日期\", \"价格\"]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"价格\"] = pd.to_numeric(temp_df[\"价格\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"日期\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\ndef spot_soybean_price_soozhu() -> pd.DataFrame:\n    \"\"\"\n    搜猪-生猪大数据-全国豆粕价格走势\n    https://www.soozhu.com/price/data/center/\n    :return: 全国豆粕价格走势\n    :rtype: pandas.DataFrame\n    \"\"\"\n    session = requests.session()\n    url = \"https://www.soozhu.com/price/data/center/\"\n    r = session.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    token = soup.find(name=\"input\", attrs={\"name\": \"csrfmiddlewaretoken\"})[\"value\"]\n    url = \"https://www.soozhu.com/price/data/center/\"\n    payload = {\"act\": \"pricetrend\", \"indid\": \"9\", \"csrfmiddlewaretoken\": token}\n    r = session.post(url, data=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"datalist\"])\n    temp_df.columns = [\"日期\", \"价格\"]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"价格\"] = pd.to_numeric(temp_df[\"价格\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"日期\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\ndef spot_mixed_feed_soozhu() -> pd.DataFrame:\n    \"\"\"\n    搜猪-生猪大数据-全国育肥猪合料（含自配料）半月走势\n    https://www.soozhu.com/price/data/center/\n    :return: 全国育肥猪合料（含自配料）半月走势\n    :rtype: pandas.DataFrame\n    \"\"\"\n    session = requests.session()\n    url = \"https://www.soozhu.com/price/data/center/\"\n    r = session.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    token = soup.find(name=\"input\", attrs={\"name\": \"csrfmiddlewaretoken\"})[\"value\"]\n    url = \"https://www.soozhu.com/price/data/center/\"\n    payload = {\"act\": \"pricetrend\", \"indid\": \"11\", \"csrfmiddlewaretoken\": token}\n    r = session.post(url, data=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"datalist\"])\n    temp_df.columns = [\"日期\", \"价格\"]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"价格\"] = pd.to_numeric(temp_df[\"价格\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"日期\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    spot_hog_soozhu_df = spot_hog_soozhu()\n    print(spot_hog_soozhu_df)\n\n    spot_hog_year_trend_soozhu_df = spot_hog_year_trend_soozhu()\n    print(spot_hog_year_trend_soozhu_df)\n\n    spot_hog_lean_price_soozhu_df = spot_hog_lean_price_soozhu()\n    print(spot_hog_lean_price_soozhu_df)\n\n    spot_hog_three_way_soozhu_df = spot_hog_three_way_soozhu()\n    print(spot_hog_three_way_soozhu_df)\n\n    spot_hog_crossbred_soozhu_df = spot_hog_crossbred_soozhu()\n    print(spot_hog_crossbred_soozhu_df)\n\n    spot_corn_price_soozhu_df = spot_corn_price_soozhu()\n    print(spot_corn_price_soozhu_df)\n\n    spot_soybean_price_soozhu_df = spot_soybean_price_soozhu()\n    print(spot_soybean_price_soozhu_df)\n\n    spot_mixed_feed_soozhu_df = spot_mixed_feed_soozhu()\n    print(spot_mixed_feed_soozhu_df)\n"
  },
  {
    "path": "akshare/spot/spot_price_qh.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/5/16 20:00\nDesc: 99 期货-数据-期现-现货走势\nhttps://www.99qh.com/data/spotTrend\n\"\"\"\n\nimport json\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef __get_item_of_spot_price_qh() -> pd.DataFrame:\n    \"\"\"\n    99 期货-数据-期现-品种和 ID 对应表\n    https://www.99qh.com/data/spotTrend\n    :return: 品种和 ID 对应表\n    :rtype: str\n    \"\"\"\n    url = \"https://www.99qh.com/data/spotTrend\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    data_text = soup.find(name=\"script\", attrs={\"id\": \"__NEXT_DATA__\"}).text\n    data_json = json.loads(data_text)\n    big_list = []\n    for item in data_json[\"props\"][\"pageProps\"][\"data\"][\"varietyListData\"]:\n        big_list.extend(item[\"productList\"])\n    temp_df = pd.DataFrame(big_list)\n    temp_df = temp_df[[\"qhExchangeName\", \"name\", \"productId\"]]\n    return temp_df\n\n\ndef __get_token_of_spot_price_qh() -> str:\n    \"\"\"\n    99 期货-数据-期现-token\n    https://www.99qh.com/data/spotTrend\n    :return: token\n    :rtype: str\n    \"\"\"\n    url = \"https://centerapi.fx168api.com/app/common/v.js\"\n    headers = {\n        \"Origin\": \"https://www.99qh.com\",\n        \"Referer\": \"https://www.99qh.com\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/124.0.0.0 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    token = r.headers[\"_pcc\"]\n    return token\n\n\ndef spot_price_table_qh() -> pd.DataFrame:\n    \"\"\"\n    99 期货-数据-期现-交易所与品种对照表\n    https://www.99qh.com/data/spotTrend\n    :return: 交易所与品种对照表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_df = __get_item_of_spot_price_qh()\n    temp_df.rename(\n        columns={\n            \"qhExchangeName\": \"交易所名称\",\n            \"name\": \"品种名称\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"交易所名称\",\n            \"品种名称\",\n        ]\n    ]\n    return temp_df\n\n\ndef spot_price_qh(symbol: str = \"螺纹钢\") -> pd.DataFrame:\n    \"\"\"\n    99 期货-数据-期现-现货走势\n    https://www.99qh.com/data/spotTrend\n    :param symbol: 品种名称\n    :type symbol: str\n    :return: 现货走势\n    :rtype: pandas.DataFrame\n    \"\"\"\n    inner_df = __get_item_of_spot_price_qh()\n    symbol_map = dict(zip(inner_df[\"name\"], inner_df[\"productId\"]))\n    url = \"https://centerapi.fx168api.com/app/qh/api/spot/trend\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/124.0.0.0 Safari/537.36\",\n        \"_pcc\": __get_token_of_spot_price_qh(),\n        \"Origin\": \"https://www.99qh.com\",\n        \"Referer\": \"https://www.99qh.com\",\n    }\n    params = {\n        \"productId\": symbol_map[symbol],\n        \"pageNo\": \"1\",\n        \"pageSize\": \"50000\",\n        \"startDate\": \"\",\n        \"endDate\": \"2050-01-01\",\n        \"appCategory\": \"web\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"list\"])\n    temp_df.rename(\n        columns={\"date\": \"日期\", \"fp\": \"期货收盘价\", \"sp\": \"现货价格\"}, inplace=True\n    )\n    temp_df.sort_values(by=[\"日期\"], inplace=True, ignore_index=True)\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"期货收盘价\"] = pd.to_numeric(temp_df[\"期货收盘价\"], errors=\"coerce\")\n    temp_df[\"现货价格\"] = pd.to_numeric(temp_df[\"现货价格\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    spot_price_qh_df = spot_price_qh(symbol=\"螺纹钢\")\n    print(spot_price_qh_df)\n"
  },
  {
    "path": "akshare/spot/spot_sge.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/4/11 22:00\nDesc: 上海黄金交易所-数据资讯-行情走势\nhttps://www.sge.com.cn/sjzx/mrhq\n上海黄金交易所-数据资讯-上海金基准价-历史数据\n上海黄金交易所-数据资讯-上海银基准价-历史数据\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.cons import headers\n\n\ndef spot_symbol_table_sge() -> pd.DataFrame:\n    \"\"\"\n    上海黄金交易所-数据资讯-行情走势-品种表\n    https://www.sge.com.cn/sjzx/mrhq\n    :return: 品种表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    temp_list = [\n        \"Au99.99\",\n        \"Au99.95\",\n        \"Au100g\",\n        \"Pt99.95\",\n        \"Ag(T+D)\",\n        \"Au(T+D)\",\n        \"mAu(T+D)\",\n        \"Au(T+N1)\",\n        \"Au(T+N2)\",\n        \"Ag99.99\",\n        \"iAu99.99\",\n        \"Au99.5\",\n        \"iAu100g\",\n        \"iAu99.5\",\n        \"PGC30g\",\n        \"NYAuTN06\",\n        \"NYAuTN12\",\n    ]\n    temp_df = pd.DataFrame(temp_list)\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\"序号\", \"品种\"]\n    temp_df[\"序号\"] = temp_df[\"序号\"] + 1\n    return temp_df\n\n\ndef spot_quotations_sge(symbol: str = \"Au99.99\") -> pd.DataFrame:\n    \"\"\"\n    上海黄金交易所-实时行情数据\n    https://www.sge.com.cn/\n    https://www.sge.com.cn/graph/quotations\n    :param symbol: choice of {'Au99.99', 'Au99.95', 'Au100g', 'Pt99.95', 'Ag(T+D)', 'Au(T+D)',\n    'mAu(T+D)', 'Au(T+N1)', 'Au(T+N2)', 'Ag99.99', 'iAu99.99', 'Au99.5', 'iAu100g',\n    'iAu99.5', 'PGC30g', 'NYAuTN06', 'NYAuTN12'}; 可以通过 ak.spot_symbol_table_sge() 获取品种表\n    :type symbol: str\n    :return: 行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.sge.com.cn/graph/quotations\"\n    payload = {\"instid\": symbol}\n    headers = {\n        \"Accept\": \"application/json, text/javascript, */*; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Content-Length\": \"15\",\n        \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\n        \"Host\": \"www.sge.com.cn\",\n        \"Origin\": \"https://www.sge.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://www.sge.com.cn/\",\n        \"sec-ch-ua\": '\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"Sec-Fetch-Dest\": \"empty\",\n        \"Sec-Fetch-Mode\": \"cors\",\n        \"Sec-Fetch-Site\": \"same-origin\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.get(url, data=payload, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(\n        {\n            \"品种\": data_json[\"heyue\"],\n            \"时间\": data_json[\"times\"],\n            \"现价\": data_json[\"data\"],\n            \"更新时间\": data_json[\"delaystr\"],\n        }\n    )\n    temp_df[\"现价\"] = pd.to_numeric(temp_df[\"现价\"], errors=\"coerce\")\n    # 将更新时间中的时间部分提取出来\n    update_time = temp_df[\"更新时间\"].iloc[0].split()[1]\n    # 将时间列转换为时间格式以便排序\n    temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"], format=\"%H:%M\").dt.time\n    # 过滤掉大于等于更新时间的数据\n    temp_df = temp_df[temp_df[\"时间\"].astype(str) < update_time]\n    # 按时间排序\n    temp_df = temp_df.sort_values(by=[\"时间\"])\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\ndef spot_hist_sge(symbol: str = \"Au99.99\") -> pd.DataFrame:\n    \"\"\"\n    上海黄金交易所-数据资讯-行情走势-历史数据\n    https://www.sge.com.cn/sjzx/mrhq\n    :param symbol: choice of {'Au99.99', 'Au99.95', 'Au100g', 'Pt99.95', 'Ag(T+D)', 'Au(T+D)',\n    'mAu(T+D)', 'Au(T+N1)', 'Au(T+N2)', 'Ag99.99', 'iAu99.99', 'Au99.5', 'iAu100g', 'iAu99.5',\n    'PGC30g', 'NYAuTN06', 'NYAuTN12'}; 可以通过 ak.spot_symbol_table_sge() 获取品种表\n    :type symbol: str\n    :return: 历史数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.sge.com.cn/graph/Dailyhq\"\n    payload = {\"instid\": symbol}\n    headers = {\n        \"Accept\": \"text/html, */*; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Content-Length\": \"15\",\n        \"Content-Type\": \"application/x-www-form-urlencoded; charset=UTF-8\",\n        \"Host\": \"www.sge.com.cn\",\n        \"Origin\": \"https://www.sge.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://www.sge.com.cn/sjzx/mrhq\",\n        \"sec-ch-ua\": '\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"Sec-Fetch-Dest\": \"empty\",\n        \"Sec-Fetch-Mode\": \"cors\",\n        \"Sec-Fetch-Site\": \"same-origin\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.post(url, data=payload, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"time\"])\n    temp_df.columns = [\n        \"date\",\n        \"open\",\n        \"close\",\n        \"low\",\n        \"high\",\n    ]\n\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"], errors=\"coerce\")\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"], errors=\"coerce\")\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"], errors=\"coerce\")\n    return temp_df\n\n\ndef spot_golden_benchmark_sge() -> pd.DataFrame:\n    \"\"\"\n    上海黄金交易所-数据资讯-上海金基准价-历史数据\n    https://www.sge.com.cn/sjzx/jzj\n    :return: 历史数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.sge.com.cn/graph/DayilyJzj\"\n    payload = {}\n    r = requests.post(url, data=payload, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"wp\"])\n    temp_df.columns = [\n        \"交易时间\",\n        \"晚盘价\",\n    ]\n    temp_df[\"交易时间\"] = pd.to_datetime(temp_df[\"交易时间\"], unit=\"ms\").dt.date\n    temp_zp_df = pd.DataFrame(data_json[\"zp\"])\n    temp_zp_df.columns = [\n        \"交易时间\",\n        \"早盘价\",\n    ]\n    temp_zp_df[\"交易时间\"] = pd.to_datetime(\n        temp_zp_df[\"交易时间\"], unit=\"ms\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"早盘价\"] = temp_zp_df[\"早盘价\"]\n    temp_df[\"晚盘价\"] = pd.to_numeric(temp_df[\"晚盘价\"], errors=\"coerce\")\n    temp_df[\"早盘价\"] = pd.to_numeric(temp_df[\"早盘价\"], errors=\"coerce\")\n    return temp_df\n\n\ndef spot_silver_benchmark_sge() -> pd.DataFrame:\n    \"\"\"\n    上海黄金交易所-数据资讯-上海银基准价-历史数据\n    https://www.sge.com.cn/sjzx/mrhq\n    :return: 历史数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.sge.com.cn/graph/DayilyShsilverJzj\"\n    payload = {}\n    r = requests.post(url, data=payload, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"wp\"])\n    temp_df.columns = [\n        \"交易时间\",\n        \"晚盘价\",\n    ]\n    temp_df[\"交易时间\"] = pd.to_datetime(temp_df[\"交易时间\"], unit=\"ms\").dt.date\n    temp_zp_df = pd.DataFrame(data_json[\"zp\"])\n    temp_zp_df.columns = [\n        \"交易时间\",\n        \"早盘价\",\n    ]\n    temp_zp_df[\"交易时间\"] = pd.to_datetime(\n        temp_zp_df[\"交易时间\"], unit=\"ms\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"早盘价\"] = temp_zp_df[\"早盘价\"]\n    temp_df[\"晚盘价\"] = pd.to_numeric(temp_df[\"晚盘价\"], errors=\"coerce\")\n    temp_df[\"早盘价\"] = pd.to_numeric(temp_df[\"早盘价\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    spot_symbol_table_sge_df = spot_symbol_table_sge()\n    print(spot_symbol_table_sge_df)\n\n    spot_hist_sge_df = spot_hist_sge(symbol=\"Au99.99\")\n    print(spot_hist_sge_df)\n\n    spot_golden_benchmark_sge_df = spot_golden_benchmark_sge()\n    print(spot_golden_benchmark_sge_df)\n\n    spot_silver_benchmark_sge_df = spot_silver_benchmark_sge()\n    print(spot_silver_benchmark_sge_df)\n\n    for spot in spot_symbol_table_sge_df[\"品种\"].tolist():\n        spot_hist_sge_df = spot_hist_sge(symbol=spot)\n        print(spot_hist_sge_df)\n\n    spot_quotations_sge_df = spot_quotations_sge(symbol=\"Au99.99\")\n    print(spot_quotations_sge_df)\n"
  },
  {
    "path": "akshare/stock/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/10/25 15:55\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/stock/cons.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/3/27 16:00\nDesc: 股票配置文件\n\"\"\"\n\nxq_a_token = \"661c0a951f439e599bc8cadb45d369aa7ac8951b\"\n\n# zh-sina-kcb\nzh_sina_kcb_stock_url = (\n    \"http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/\"\n    \"Market_Center.getHQNodeData\"\n)\nzh_sina_kcb_stock_payload = {\n    \"page\": \"1\",\n    \"num\": \"80\",\n    \"sort\": \"symbol\",\n    \"asc\": \"1\",\n    \"node\": \"kcb\",\n    \"symbol\": \"\",\n    \"_s_r_a\": \"auto\",\n}\nzh_sina_kcb_stock_count_url = (\n    \"http://vip.stock.finance.sina.com.cn/quotes_service/api/\"\n    \"json_v2.php/Market_Center.getHQNodeStockCount?node=kcb\"\n)\nzh_sina_kcb_stock_hist_url = (\n    \"https://quotes.sina.cn/cn/api/jsonp.php/var%20_{}{}=/\"\n    \"KC_MarketDataService.getKLineData?symbol={}\"\n)\nzh_sina_kcb_stock_amount_url = (\n    \"https://stock.finance.sina.com.cn/stock/api/jsonp.php/\"\n    \"var%20KKE_ShareAmount_{}=/StockService.getAmountBySymbol?_=20&symbol={}\"\n)\nzh_sina_kcb_stock_hfq_url = \"https://finance.sina.com.cn/realstock/company/{}/hfq.js\"\nzh_sina_kcb_stock_qfq_url = \"https://finance.sina.com.cn/realstock/company/{}/qfq.js\"\n\n# zh-sina-a\nzh_sina_a_stock_url = \"http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData\"\nzh_sina_a_stock_payload = {\n    \"page\": \"1\",\n    \"num\": \"80\",\n    \"sort\": \"symbol\",\n    \"asc\": \"1\",\n    \"node\": \"hs_a\",\n    \"symbol\": \"\",\n    \"_s_r_a\": \"page\",\n}\nzh_sina_a_stock_count_url = (\n    \"http://vip.stock.finance.sina.com.cn/quotes_service/api/\"\n    \"json_v2.php/Market_Center.getHQNodeStockCount?node=hs_a\"\n)\nzh_sina_a_stock_hist_url = (\n    \"https://finance.sina.com.cn/realstock/company/{}/hisdata_klc2/klc_kl.js\"\n)\nzh_sina_a_stock_amount_url = (\n    \"https://stock.finance.sina.com.cn/stock/api/jsonp.php/\"\n    \"var%20KKE_ShareAmount_{}=/StockService.getAmountBySymbol?_=20&symbol={}\"\n)\nzh_sina_a_stock_hfq_url = \"https://finance.sina.com.cn/realstock/company/{}/hfq.js\"\nzh_sina_a_stock_qfq_url = \"https://finance.sina.com.cn/realstock/company/{}/qfq.js\"\nzh_sina_a_stock_amount_page_url = \"https://money.finance.sina.com.cn/corp/go.php/vCI_StockStructureHistory/stockid/{}/stocktype/TotalStock.phtml\"\n\n# us-sina\nus_sina_stock_hist_qfq_url = (\n    \"https://finance.sina.com.cn/us_stock/company/reinstatement/{}_qfq.js\"\n)\nus_sina_stock_hist_url = (\n    \"https://finance.sina.com.cn/us_stock/company/hisdata/klc_kl_{}.js\"\n)\nus_sina_stock_list_url = (\n    \"http://stock.finance.sina.com.cn/usstock/api/jsonp.php\"\n    \"/IO.XSRV2.CallbackList[{}]/US_CategoryService.getList\"\n)\nus_sina_stock_dict_payload = {\n    \"page\": \"2\",\n    \"num\": \"20\",\n    \"sort\": \"\",\n    \"asc\": \"0\",\n    \"market\": \"\",\n    \"id\": \"\",\n}\njs_hash_text = \"\"\"\n    function d(s){\n\t\tvar a, i, j, c, c0, c1, c2, r;\n\t\tvar _s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_$';\n\t\tvar _r64 = function(s, b)\n\t\t{\n\t\t\treturn ((s | (s << 6)) >>> (b % 6)) & 63;\n\t\t};\n\t\ta = [];\n\t\tc = [];\n\t\tfor (i = 0; i < s.length; i++)\n\t\t{\n\t\t\tc0 = s.charCodeAt(i);\n\t\t\tif (c0 & ~255)\n\t\t\t{\n\t\t\t\tc0 = (c0 >> 8) ^ c0;\n\t\t\t}\n\t\t\tc.push(c0);\n\t\t\tif (c.length == 3 || i == s.length - 1)\n\t\t\t{\n\t\t\t\twhile(c.length < 3)\n\t\t\t\t{\n\t\t\t\t\tc.push(0);\n\t\t\t\t}\n\t\t\t\ta.push((c[0] >> 2) & 63);\n\t\t\t\ta.push(((c[1] >> 4) | (c[0] << 6)) & 63);\n\t\t\t\ta.push(((c[1] << 4) | (c[2] >> 2)) & 63);\n\t\t\t\ta.push(c[2] & 63);\n\t\t\t\tc = [];\n\t\t\t}\n\t\t}\n\t\twhile (a.length < 16)\n\t\t{\n\t\t\ta.push(0);\n\t\t}\n\t\tr = 0;\n\t\tfor (i = 0; i < a.length; i++)\n\t\t{\n\t\t\tr ^= (_r64(a[i] ^ (r | i), i) ^ _r64(i, r)) & 63;\n\t\t}\n\t\tfor (i = 0; i < a.length; i++)\n\t\t{\n\t\t\ta[i] = (_r64((r | i & a[i]), r) ^ a[i]) & 63;\n\t\t\tr += a[i];\n\t\t}\n\t\tfor (i = 16; i < a.length; i++)\n\t\t{\n\t\t\ta[i % 16] ^= (a[i] + (i >>> 4)) & 63;\n\t\t}\n\t\tfor (i = 0; i < 16; i++)\n\t\t{\n\t\t\ta[i] = _s.substr(a[i], 1);\n\t\t}\n\t\ta = a.slice(0, 16).join('');\n\t\treturn a;\n\t}\n\"\"\"\n# hk-sina\nhk_sina_stock_hist_hfq_url = \"https://finance.sina.com.cn/stock/hkstock/{}/hfq.js\"\nhk_sina_stock_hist_qfq_url = \"https://finance.sina.com.cn/stock/hkstock/{}/qfq.js\"\nhk_sina_stock_hist_url = \"https://finance.sina.com.cn/stock/hkstock/{}/klc2_kl.js\"\nhk_sina_stock_list_url = (\n    \"http://vip.stock.finance.sina.com.cn/quotes_service/api/\"\n    \"json_v2.php/Market_Center.getHKStockData\"\n)\n\nhk_sina_stock_dict_payload = {\n    \"page\": \"1\",\n    \"num\": \"3000\",\n    \"sort\": \"symbol\",\n    \"asc\": \"1\",\n    \"node\": \"qbgg_hk\",\n    \"_s_r_a\": \"page\",\n}\n\n# hk-tx\nhk_url = \"http://stock.gtimg.cn/data/hk_rank.php\"\nhk_headers = {\n    \"Referer\": \"http://stockapp.finance.qq.com/mstats/\",\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n    \"(KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36\",\n}\nhk_payload = {\n    \"board\": \"A_H\",\n    \"metric\": \"price\",\n    \"pageSize\": \"20\",\n    \"reqPage\": \"1\",\n    \"order\": \"decs\",\n    \"var_name\": \"list_data\",\n}\n\nhk_stock_url = \"http://web.ifzq.gtimg.cn/appstock/app/hkfqkline/get\"\nhk_stock_headers = {\n    # \"Referer\": \"http://gu.qq.com/hk00168/gp\",\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n    \"(KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36\"\n}\nhk_stock_payload = {\n    \"_var\": \"kline_dayhfq{}\",\n    \"param\": \"hk{},day,{}-01-01,{}-12-31,640,hfq\",\n    \"r\": \"\",\n}\n\n# usa\nurl_usa_daily = \"http://webusstock.hermes.hexun.com/usa/kline\"\npayload_usa_daily = {\n    \"code\": \"NASDAQNTES\",\n    \"start\": \"20191026213000\",\n    \"number\": \"-1000\",\n    \"type\": \"5\",\n}\n\n# china\nhx_url = \"http://stockdata.stock.hexun.com/zrbg/data/zrbList.aspx\"\n\nhx_headers = {\n    \"Accept\": \"*/*\",\n    \"Accept-Encoding\": \"gzip, deflate\",\n    \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    \"Cache-Control\": \"no-cache\",\n    \"Connection\": \"keep-alive\",\n    \"Cookie\": \"ADVC=371c0a2afd9a7b; UM_distinctid=16a24d29c4f142-0f969e46eea4c7-e323069-1fa400-16a24d29c50aa5; \"\n    \"HexunTrack=SID=20190416142542146f54a3710276640a88fea687ad6a7bcb0&CITY=51&TOWN=510100; \"\n    \"vjuids=11fcc219b5.16a820267e4.0.cc0391a93be56; vjlast=1556959357.1556959357.30; \"\n    \"__utma=194262068.1423418741.1558975446.1558975446.1558975446.1; \"\n    \"__utmz=194262068.1558975446.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; \"\n    \"ASL=18179,anzqo,7ca108c3ded485387ca108c27ca108b97ca108ef; \"\n    \"cn_1263247791_dplus=%7B%22distinct_id%22%3A%20%2216a24d29c4f142-0f969e46eea4c7-e323069-1fa400-\"\n    \"16a24d29c50aa5%22%2C%22userFirstDate%22%3A%20%2220190504%22%2C%22userID%22%3A%20%22%22%2C%22us\"\n    \"erName%22%3A%20%22%22%2C%22userType%22%3A%20%22nologinuser%22%2C%22userLoginDate%22%3A%20%2\"\n    \"220191010%22%2C%22%24_sessionid%22%3A%200%2C%22%24_sessionTime%22%3A%201570727325%2C%22%2\"\n    \"4dp%22%3A%200%2C%22%24_sessionPVTime%22%3A%201570727325%2C%22initial_view_time%22%3A%20%\"\n    \"221556958609%22%2C%22initial_referrer%22%3A%20%22https%3A%2F%2Fwww.baidu.com%2Flink%3F\"\n    \"url%3DJmHPP1QGABcJs0kzrvZREqHK_nobidR7d7YPCQF75loa5N33Au5q_xFu8y9VPlvl8O6I7b1LmRuhIicc\"\n    \"TnFW-_%26wd%3D%26eqid%3Db55837ee0001a310000000025ccd4f55%22%2C%22initial_referrer_doma\"\n    \"in%22%3A%20%22www.baidu.com%22%2C%22%24recent_outside_referrer%22%3A%20%22www.baidu.co\"\n    \"m%22%7D; hxck_webdev1_general=bondjlvcookie_list=019124_11%e5%9b%bd%e5%80%ba24_1&npF\"\n    \"utjlvcookie_list=czcers1409|WT1009; appToken=pc%2Cother%2Cchrome%2ChxAppSignId9625376\"\n    \"0252191461570688954189%2CHXGG20190415; __jsluid_h=08f65cba22ad34dc3fd095b5b986c8a4\",\n    \"Host\": \"stockdata.stock.hexun.com\",\n    \"Pragma\": \"no-cache\",\n    \"Referer\": \"http://stockdata.stock.hexun.com/zrbg/\",\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n    \"Chrome/77.0.3865.120 Safari/537.36\",\n}\n\nhx_params = {\n    \"date\": \"2018-12-31\",\n    \"count\": \"20\",\n    \"pname\": \"20\",\n    \"titType\": \"null\",\n    \"page\": \"8\",\n    \"callback\": \"hxbase_json11571989979887\",\n}\n\nhk_js_decode = \"\"\"\nfunction d(t) {\n            var e, i, n, r, a, o, s, l = (arguments,\n            864e5), u = 7657, c = [], d = [], h = ~(3 << 30), f = 1 << 30, m = [0, 3, 5, 6, 9, 10, 12, 15, 17, 18, 20, 23, 24, 27, 29, 30], p = Math, g = function() {\n                var l, u;\n                for (l = 0; 64 > l; l++)\n                    d[l] = p.pow(2, l),\n                    26 > l && (c[l] = v(l + 65),\n                    c[l + 26] = v(l + 97),\n                    10 > l && (c[l + 52] = v(l + 48)));\n                for (c.push(\"+\", \"/\"),\n                c = c.join(\"\"),\n                i = t.split(\"\"),\n                n = i.length,\n                l = 0; n > l; l++)\n                    i[l] = c.indexOf(i[l]);\n                return r = {},\n                e = o = 0,\n                a = {},\n                u = w([12, 6]),\n                s = 63 ^ u[1],\n                {\n                    _1479: D,\n                    _136: _,\n                    _200: C,\n                    _139: R,\n                    _197: A,\n                    _3466: O\n                }[\"_\" + u[0]] || function() {\n                    return []\n                }\n            }, v = String.fromCharCode, b = function(t) {\n                return t === {}._\n            }, N = function() {\n                var t, e;\n                for (t = y(),\n                e = 1; ; ) {\n                    if (!y())\n                        return e * (2 * t - 1);\n                    e++\n                }\n            }, y = function() {\n                var t;\n                return e >= n ? 0 : (t = i[e] & 1 << o,\n                o++,\n                o >= 6 && (o -= 6,\n                e++),\n                !!t)\n            }, w = function(t, r, a) {\n                var s, l, u, c, h;\n                for (l = [],\n                u = 0,\n                r || (r = []),\n                a || (a = []),\n                s = 0; s < t.length; s++)\n                    if (c = t[s],\n                    u = 0,\n                    c) {\n                        if (e >= n)\n                            return l;\n                        if (t[s] <= 0)\n                            u = 0;\n                        else if (t[s] <= 30) {\n                            for (; h = 6 - o,\n                            h = c > h ? h : c,\n                            u |= (i[e] >> o & (1 << h) - 1) << t[s] - c,\n                            o += h,\n                            o >= 6 && (o -= 6,\n                            e++),\n                            c -= h,\n                            !(0 >= c); )\n                                ;\n                            r[s] && u >= d[t[s] - 1] && (u -= d[t[s]])\n                        } else\n                            u = w([30, t[s] - 30], [0, r[s]]),\n                            a[s] || (u = u[0] + u[1] * d[30]);\n                        l[s] = u\n                    } else\n                        l[s] = 0;\n                return l\n            }, x = function() {\n                var t;\n                return t = w([3])[0],\n                1 == t ? (r.d = w([18], [1])[0],\n                t = 0) : t || (t = w([6])[0]),\n                t\n            }, S = function(t) {\n                var e, i, n;\n                for (t > 1 && (e = 0),\n                e = 0; t > e; e++)\n                    r.d++,\n                    n = r.d % 7,\n                    (3 == n || 4 == n) && (r.d += 5 - n);\n                return i = new Date,\n                i.setTime((u + r.d) * l),\n                i\n            }, k = function(t) {\n                var e, i, n;\n                for (n = r.wd || 62,\n                e = 0; t > e; e++)\n                    do\n                        r.d++;\n                    while (!(n & 1 << (r.d % 7 + 10) % 7));\n                return i = new Date,\n                i.setTime((u + r.d) * l),\n                i\n            }, T = function(t) {\n                var e, i, n;\n                return t ? 0 > t ? (e = T(-t),\n                [-e[0], -e[1]]) : (e = t % 3,\n                i = (t - e) / 3,\n                n = [i, i],\n                e && n[e - 1]++,\n                n) : [0, 0]\n            }, P = function(t, e, i) {\n                var n, r, a;\n                for (r = \"number\" == typeof e ? T(e) : e,\n                a = T(i),\n                n = [a[0] - r[0], a[1] - r[1]],\n                r = 1; n[0] < n[1]; )\n                    r *= 5,\n                    n[1]--;\n                for (; n[1] < n[0]; )\n                    r *= 2,\n                    n[0]--;\n                if (r > 1 && (t *= r),\n                n = n[0],\n                t = E(t),\n                0 > n) {\n                    for (; t.length + n <= 0; )\n                        t = \"0\" + t;\n                    return n += t.length,\n                    r = t.substr(0, n) - 0,\n                    void 0 === i ? r + \".\" + t.substr(n) - 0 : (a = t.charAt(n) - 0,\n                    a > 5 ? r++ : 5 == a && (t.substr(n + 1) - 0 > 0 ? r++ : r += 1 & r),\n                    r)\n                }\n                for (; n > 0; n--)\n                    t += \"0\";\n                return t - 0\n            }, C = function() {\n                var t, i, a, o, l;\n                if (s >= 1)\n                    return [];\n                for (r.d = w([18], [1])[0] - 1,\n                a = w([3, 3, 30, 6]),\n                r.p = a[0],\n                r.ld = a[1],\n                r.cd = a[2],\n                r.c = a[3],\n                r.m = p.pow(10, r.p),\n                r.pc = r.cd / r.m,\n                i = [],\n                t = 0; o = {\n                    d: 1\n                },\n                y() && (a = w([3])[0],\n                0 == a ? o.d = w([6])[0] : 1 == a ? (r.d = w([18])[0],\n                o.d = 0) : o.d = a),\n                l = {\n                    date: S(o.d)\n                },\n                y() && (r.ld += N()),\n                a = w([3 * r.ld], [1]),\n                r.cd += a[0],\n                l.close = r.cd / r.m,\n                i.push(l),\n                !(e >= n) && (e != n - 1 || 63 & (r.c ^ t + 1)); t++)\n                    ;\n                return i[0].prevclose = r.pc,\n                i\n            }, _ = function() {\n                var t, i, a, o, l, u, c, d, h, f, m;\n                if (s > 2)\n                    return [];\n                for (c = [],\n                h = {\n                    v: \"volume\",\n                    p: \"price\",\n                    a: \"avg_price\"\n                },\n                r.d = w([18], [1])[0] - 1,\n                d = {\n                    date: S(1)\n                },\n                a = w(1 > s ? [3, 3, 4, 1, 1, 1, 5] : [4, 4, 4, 1, 1, 1, 3]),\n                t = 0; 7 > t; t++)\n                    r[[\"la\", \"lp\", \"lv\", \"tv\", \"rv\", \"zv\", \"pp\"][t]] = a[t];\n                for (r.m = p.pow(10, r.pp),\n                s >= 1 ? (a = w([3, 3]),\n                r.c = a[0],\n                a = a[1]) : (a = 5,\n                r.c = 2),\n                r.pc = w([6 * a])[0],\n                d.pc = r.pc / r.m,\n                r.cp = r.pc,\n                r.da = 0,\n                r.sa = r.sv = 0,\n                t = 0; !(e >= n) && (e != n - 1 || 7 & (r.c ^ t)); t++) {\n                    for (l = {},\n                    o = {},\n                    f = r.tv ? y() : 1,\n                    i = 0; 3 > i; i++)\n                        if (m = [\"v\", \"p\", \"a\"][i],\n                        (f ? y() : 0) && (a = N(),\n                        r[\"l\" + m] += a),\n                        u = \"v\" == m && r.rv ? y() : 1,\n                        a = w([3 * r[\"l\" + m] + (\"v\" == m ? 7 * u : 0)], [!!i])[0] * (u ? 1 : 100),\n                        o[m] = a,\n                        \"v\" == m) {\n                            if (!(l[h[m]] = a) && (s > 1 || 241 > t) && (r.zv ? !y() : 1)) {\n                                o.p = 0;\n                                break\n                            }\n                        } else\n                            \"a\" == m && (r.da = (1 > s ? 0 : r.da) + o.a);\n                    r.sv += o.v,\n                    l[h.p] = (r.cp += o.p) / r.m,\n                    r.sa += o.v * r.cp,\n                    l[h.a] = b(o.a) ? t ? c[t - 1][h.a] : l[h.p] : r.sv ? ((p.floor((r.sa * (2e3 / r.m) + r.sv) / r.sv) >> 1) + r.da) / 1e3 : l[h.p] + r.da / 1e3,\n                    c.push(l)\n                }\n                return c[0].date = d.date,\n                c[0].prevclose = d.pc,\n                c\n            }, D = function() {\n                var t, e, i, n, a, o, l;\n                if (s >= 1)\n                    return [];\n                for (r.lv = 0,\n                r.ld = 0,\n                r.cd = 0,\n                r.cv = [0, 0],\n                r.p = w([6])[0],\n                r.d = w([18], [1])[0] - 1,\n                r.m = p.pow(10, r.p),\n                a = w([3, 3]),\n                r.md = a[0],\n                r.mv = a[1],\n                t = []; a = w([6]),\n                a.length; ) {\n                    if (i = {\n                        c: a[0]\n                    },\n                    n = {},\n                    i.d = 1,\n                    32 & i.c)\n                        for (; ; ) {\n                            if (a = w([6])[0],\n                            63 == (16 | a)) {\n                                l = 16 & a ? \"x\" : \"u\",\n                                a = w([3, 3]),\n                                i[l + \"_d\"] = a[0] + r.md,\n                                i[l + \"_v\"] = a[1] + r.mv;\n                                break\n                            }\n                            if (32 & a) {\n                                o = 8 & a ? \"d\" : \"v\",\n                                l = 16 & a ? \"x\" : \"u\",\n                                i[l + \"_\" + o] = (7 & a) + r[\"m\" + o];\n                                break\n                            }\n                            if (o = 15 & a,\n                            0 == o ? i.d = w([6])[0] : 1 == o ? (r.d = o = w([18])[0],\n                            i.d = 0) : i.d = o,\n                            !(16 & a))\n                                break\n                        }\n                    n.date = S(i.d);\n                    for (o in {\n                        v: 0,\n                        d: 0\n                    })\n                        b(i[\"x_\" + o]) || (r[\"l\" + o] = i[\"x_\" + o]),\n                        b(i[\"u_\" + o]) && (i[\"u_\" + o] = r[\"l\" + o]);\n                    for (i.l_l = [i.u_d, i.u_d, i.u_d, i.u_d, i.u_v],\n                    l = m[15 & i.c],\n                    1 & i.u_v && (l = 31 - l),\n                    16 & i.c && (i.l_l[4] += 2),\n                    e = 0; 5 > e; e++)\n                        l & 1 << 4 - e && i.l_l[e]++,\n                        i.l_l[e] *= 3;\n                    i.d_v = w(i.l_l, [1, 0, 0, 1, 1], [0, 0, 0, 0, 1]),\n                    o = r.cd + i.d_v[0],\n                    n.open = o / r.m,\n                    n.high = (o + i.d_v[1]) / r.m,\n                    n.low = (o - i.d_v[2]) / r.m,\n                    n.close = (o + i.d_v[3]) / r.m,\n                    a = i.d_v[4],\n                    \"number\" == typeof a && (a = [a, a >= 0 ? 0 : -1]),\n                    r.cd = o + i.d_v[3],\n                    l = r.cv[0] + a[0],\n                    r.cv = [l & h, r.cv[1] + a[1] + !!((r.cv[0] & h) + (a[0] & h) & f)],\n                    n.volume = (r.cv[0] & f - 1) + r.cv[1] * f,\n                    t.push(n)\n                }\n                return t\n            }, R = function() {\n                var t, e, i, n;\n                if (s > 1)\n                    return [];\n                for (r.l = 0,\n                n = -1,\n                r.d = w([18])[0] - 1,\n                i = w([18])[0]; r.d < i; )\n                    e = S(1),\n                    0 >= n ? (y() && (r.l += N()),\n                    n = w([3 * r.l], [0])[0] + 1,\n                    t || (t = [e],\n                    n--)) : t.push(e),\n                    n--;\n                return t\n            }, A = function() {\n                var t, i, a, o;\n                if (s >= 1)\n                    return [];\n                for (r.f = w([6])[0],\n                r.c = w([6])[0],\n                a = [],\n                r.dv = [],\n                r.dl = [],\n                t = 0; t < r.f; t++)\n                    r.dv[t] = 0,\n                    r.dl[t] = 0;\n                for (t = 0; !(e >= n) && (e != n - 1 || 7 & (r.c ^ t)); t++) {\n                    for (o = [],\n                    i = 0; i < r.f; i++)\n                        y() && (r.dl[i] += N()),\n                        r.dv[i] += w([3 * r.dl[i]], [1])[0],\n                        o[i] = r.dv[i];\n                    a.push(o)\n                }\n                return a\n            }, O = function() {\n                if (r = {\n                    b_avp: 1,\n                    b_ph: 0,\n                    b_phx: 0,\n                    b_sep: 0,\n                    p_p: 6,\n                    p_v: 0,\n                    p_a: 0,\n                    p_e: 0,\n                    p_t: 0,\n                    l_o: 3,\n                    l_h: 3,\n                    l_l: 3,\n                    l_c: 3,\n                    l_v: 5,\n                    l_a: 5,\n                    l_e: 3,\n                    l_t: 0,\n                    u_p: 0,\n                    u_v: 0,\n                    u_a: 0,\n                    wd: 62,\n                    d: 0\n                },\n                s > 0)\n                    return [];\n                var t, i, a, o, l, u, c;\n                for (t = []; ; ) {\n                    if (e >= n)\n                        return void 0;\n                    if (a = {\n                        d: 1,\n                        c: 0\n                    },\n                    y())\n                        if (y()) {\n                            if (y()) {\n                                for (a.c++,\n                                a.a = r.b_avp,\n                                y() && (r.b_avp ^= y(),\n                                r.b_ph ^= y(),\n                                r.b_phx ^= y(),\n                                a.s = r.b_sep,\n                                r.b_sep ^= y(),\n                                y() && (r.wd = w([7])[0]),\n                                a.s ^ r.b_sep && (a.s ? r.u_p = r.u_c : r.u_o = r.u_h = r.u_l = r.u_c = r.u_p)),\n                                u = 0; u < 3 + 2 * r.b_ph; u++)\n                                    if (y() && (l = \"pvaet\".charAt(u),\n                                    o = r[\"p_\" + l],\n                                    r[\"p_\" + l] += N(),\n                                    r[\"u_\" + l] = P(r[\"u_\" + l], o, r[\"p_\" + l]) - 0,\n                                    r.b_sep && !u))\n                                        for (c = 0; 4 > c; c++)\n                                            l = \"ohlc\".charAt(c),\n                                            r[\"u_\" + l] = P(r[\"u_\" + l], o, r.p_p) - 0;\n                                !r.b_avp && a.a && (r.u_a = P(i && i.amount || 0, 0, r.p_a))\n                            }\n                            if (y())\n                                for (a.c++,\n                                u = 0; u < 7 + r.b_ph + r.b_phx; u++)\n                                    y() && (6 == u ? a.d = x() : r[\"l_\" + \"ohlcva*et\".charAt(u)] += N());\n                            if (y() && (a.c++,\n                            l = r.l_o + (y() && N()),\n                            o = w([3 * l], [1])[0],\n                            a.p = r.b_sep ? r.u_c + o : r.u_p += o),\n                            !a.c)\n                                break\n                        } else\n                            y() ? y() ? y() ? a.d = x() : r.l_v += N() : r.b_ph && y() ? r[\"l_\" + \"et\".charAt(r.b_phx && y())] += N() : r.l_a += N() : r[\"l_\" + \"ohlc\".charAt(w([2])[0])] += N();\n                    for (u = 0; u < 6 + r.b_ph + r.b_phx; u++)\n                        c = \"ohlcvaet\".charAt(u),\n                        o = (r.b_sep ? 191 : 185) >> u & 1,\n                        a[\"v_\" + c] = w([3 * r[\"l_\" + c]], [o])[0];\n                    i = {\n                        date: k(a.d)\n                    },\n                    a.p && (i.prevclose = P(a.p, r.p_p)),\n                    r.b_sep ? (i.open = P(r.u_o += a.v_o, r.p_p),\n                    i.high = P(r.u_h += a.v_h, r.p_p),\n                    i.low = P(r.u_l += a.v_l, r.p_p),\n                    i.close = P(r.u_c += a.v_c, r.p_p)) : (a.o = r.u_p + a.v_o,\n                    i.open = P(a.o, r.p_p),\n                    i.high = P(a.o + a.v_h, r.p_p),\n                    i.low = P(a.o - a.v_l, r.p_p),\n                    i.close = P(r.u_p = a.o + a.v_c, r.p_p)),\n                    i.volume = P(r.u_v += a.v_v, r.p_v),\n                    r.b_avp ? (o = T(r.p_p),\n                    l = T(r.p_v),\n                    i.amount = P(P(Math.floor((r.b_sep ? (r.u_o + r.u_h + r.u_l + r.u_c) / 4 : a.o + (a.v_h - a.v_l + a.v_c) / 4) * r.u_v + .5), [o[0] + l[0], o[1] + l[1]], r.p_a) + a.v_a, r.p_a)) : (r.u_a += a.v_a,\n                    i.amount = P(r.u_a, r.p_a)),\n                    r.b_ph && (i.postVol = P(a.v_e, r.p_e),\n                    i.postAmt = P(Math.floor(i.postVol * i.close + (r.b_phx ? P(a.v_t, r.p_t) : 0) + .5), 0)),\n                    t.push(i)\n                }\n                return t\n            }, E = function(t) {\n                var e, i, n;\n                if (t = (t || 0).toString(),\n                n = [],\n                i = t.toLowerCase().indexOf(\"e\"),\n                i > 0) {\n                    for (e = t.substr(i + 1) - 0; e >= 0; e--)\n                        n.push(Math.floor(e * Math.pow(10, -e) + .5) - 0);\n                    return n.join(\"\")\n                }\n                return t\n            };\n            return g()()\n        }\n        ;\n\"\"\"\n\nzh_js_decode = \"\"\"\nfunction d(t) {\n            var e, n, i, o, r, a, s, l = (arguments,\n            864e5), c = 7657, u = [], h = [], d = ~(3 << 30), f = 1 << 30, p = [0, 3, 5, 6, 9, 10, 12, 15, 17, 18, 20, 23, 24, 27, 29, 30], g = Math, v = function() {\n                var l, c;\n                for (l = 0; 64 > l; l++)\n                    h[l] = g.pow(2, l),\n                    26 > l && (u[l] = m(l + 65),\n                    u[l + 26] = m(l + 97),\n                    10 > l && (u[l + 52] = m(l + 48)));\n                for (u.push(\"+\", \"/\"),\n                u = u.join(\"\"),\n                n = t.split(\"\"),\n                i = n.length,\n                l = 0; i > l; l++)\n                    n[l] = u.indexOf(n[l]);\n                return o = {},\n                e = a = 0,\n                r = {},\n                c = N([12, 6]),\n                s = 63 ^ c[1],\n                {\n                    _1479: M,\n                    _136: A,\n                    _200: k,\n                    _139: O,\n                    _197: _mi_run,\n                    _3466: _k2_run\n                }[\"_\" + c[0]] || function() {\n                    return []\n                }\n            }, m = String.fromCharCode, b = function(t) {\n                return t === {}._\n            }, y = function() {\n                var t, e;\n                for (t = _(),\n                e = 1; ; ) {\n                    if (!_())\n                        return e * (2 * t - 1);\n                    e++\n                }\n            }, _ = function() {\n                var t;\n                return e >= i ? 0 : (t = n[e] & 1 << a,\n                a++,\n                a >= 6 && (a -= 6,\n                e++),\n                !!t)\n            }, N = function(t, o, r) {\n                var s, l, c, u, d;\n                for (l = [],\n                c = 0,\n                o || (o = []),\n                r || (r = []),\n                s = 0; s < t.length; s++)\n                    if (u = t[s],\n                    c = 0,\n                    u) {\n                        if (e >= i)\n                            return l;\n                        if (t[s] <= 0)\n                            c = 0;\n                        else if (t[s] <= 30) {\n                            for (; d = 6 - a,\n                            d = u > d ? d : u,\n                            c |= (n[e] >> a & (1 << d) - 1) << t[s] - u,\n                            a += d,\n                            a >= 6 && (a -= 6,\n                            e++),\n                            u -= d,\n                            !(0 >= u); )\n                                ;\n                            o[s] && c >= h[t[s] - 1] && (c -= h[t[s]])\n                        } else\n                            c = N([30, t[s] - 30], [0, o[s]]),\n                            r[s] || (c = c[0] + c[1] * h[30]);\n                        l[s] = c\n                    } else\n                        l[s] = 0;\n                return l\n            }, x = function() {\n                var t;\n                return t = N([3])[0],\n                1 == t ? (o.d = N([18], [1])[0],\n                t = 0) : t || (t = N([6])[0]),\n                t\n            }, w = function(t) {\n                var e, n, i;\n                for (t > 1 && (e = 0),\n                e = 0; t > e; e++)\n                    o.d++,\n                    i = o.d % 7,\n                    (3 == i || 4 == i) && (o.d += 5 - i);\n                return n = new Date,\n                n.setTime((c + o.d) * l),\n                n\n            }, S = function(t) {\n                var e, n, i;\n                for (i = o.wd || 62,\n                e = 0; t > e; e++)\n                    do\n                        o.d++;\n                    while (!(i & 1 << (o.d % 7 + 10) % 7));\n                return n = new Date,\n                n.setTime((c + o.d) * l),\n                n\n            }, T = function(t) {\n                var e, n, i;\n                return t ? 0 > t ? (e = T(-t),\n                [-e[0], -e[1]]) : (e = t % 3,\n                n = (t - e) / 3,\n                i = [n, n],\n                e && i[e - 1]++,\n                i) : [0, 0]\n            }, C = function(t, e, n) {\n                var i, o, r;\n                for (o = \"number\" == typeof e ? T(e) : e,\n                r = T(n),\n                i = [r[0] - o[0], r[1] - o[1]],\n                o = 1; i[0] < i[1]; )\n                    o *= 5,\n                    i[1]--;\n                for (; i[1] < i[0]; )\n                    o *= 2,\n                    i[0]--;\n                if (o > 1 && (t *= o),\n                i = i[0],\n                t = _decnum(t),\n                0 > i) {\n                    for (; t.length + i <= 0; )\n                        t = \"0\" + t;\n                    return i += t.length,\n                    o = t.substr(0, i) - 0,\n                    void 0 === n ? o + \".\" + t.substr(i) - 0 : (r = t.charAt(i) - 0,\n                    r > 5 ? o++ : 5 == r && (t.substr(i + 1) - 0 > 0 ? o++ : o += 1 & o),\n                    o)\n                }\n                for (; i > 0; i--)\n                    t += \"0\";\n                return t - 0\n            }, k = function() {\n                var t, n, r, a, l;\n                if (s >= 1)\n                    return [];\n                for (o.d = N([18], [1])[0] - 1,\n                r = N([3, 3, 30, 6]),\n                o.p = r[0],\n                o.ld = r[1],\n                o.cd = r[2],\n                o.c = r[3],\n                o.m = g.pow(10, o.p),\n                o.pc = o.cd / o.m,\n                n = [],\n                t = 0; a = {\n                    d: 1\n                },\n                _() && (r = N([3])[0],\n                0 == r ? a.d = N([6])[0] : 1 == r ? (o.d = N([18])[0],\n                a.d = 0) : a.d = r),\n                l = {\n                    date: w(a.d)\n                },\n                _() && (o.ld += y()),\n                r = N([3 * o.ld], [1]),\n                o.cd += r[0],\n                l.close = o.cd / o.m,\n                n.push(l),\n                !(e >= i) && (e != i - 1 || 63 & (o.c ^ t + 1)); t++)\n                    ;\n                return n[0].prevclose = o.pc,\n                n\n            }, A = function() {\n                var t, n, r, a, l, c, u, h, d, f, p;\n                if (s > 2)\n                    return [];\n                for (u = [],\n                d = {\n                    v: \"volume\",\n                    p: \"price\",\n                    a: \"avg_price\"\n                },\n                o.d = N([18], [1])[0] - 1,\n                h = {\n                    date: w(1)\n                },\n                r = N(1 > s ? [3, 3, 4, 1, 1, 1, 5] : [4, 4, 4, 1, 1, 1, 3]),\n                t = 0; 7 > t; t++)\n                    o[[\"la\", \"lp\", \"lv\", \"tv\", \"rv\", \"zv\", \"pp\"][t]] = r[t];\n                for (o.m = g.pow(10, o.pp),\n                s >= 1 ? (r = N([3, 3]),\n                o.c = r[0],\n                r = r[1]) : (r = 5,\n                o.c = 2),\n                o.pc = N([6 * r])[0],\n                h.pc = o.pc / o.m,\n                o.cp = o.pc,\n                o.da = 0,\n                o.sa = o.sv = 0,\n                t = 0; !(e >= i) && (e != i - 1 || 7 & (o.c ^ t)); t++) {\n                    for (l = {},\n                    a = {},\n                    f = o.tv ? _() : 1,\n                    n = 0; 3 > n; n++)\n                        if (p = [\"v\", \"p\", \"a\"][n],\n                        (f ? _() : 0) && (r = y(),\n                        o[\"l\" + p] += r),\n                        c = \"v\" == p && o.rv ? _() : 1,\n                        r = N([3 * o[\"l\" + p] + (\"v\" == p ? 7 * c : 0)], [!!n])[0] * (c ? 1 : 100),\n                        a[p] = r,\n                        \"v\" == p) {\n                            if (!(l[d[p]] = r) && (s > 1 || 241 > t) && (o.zv ? !_() : 1)) {\n                                a.p = 0;\n                                break\n                            }\n                        } else\n                            \"a\" == p && (o.da = (1 > s ? 0 : o.da) + a.a);\n                    o.sv += a.v,\n                    l[d.p] = (o.cp += a.p) / o.m,\n                    o.sa += a.v * o.cp,\n                    l[d.a] = b(a.a) ? t ? u[t - 1][d.a] : l[d.p] : o.sv ? ((g.floor((o.sa * (2e3 / o.m) + o.sv) / o.sv) >> 1) + o.da) / 1e3 : l[d.p] + o.da / 1e3,\n                    u.push(l)\n                }\n                return u[0].date = h.date,\n                u[0].prevclose = h.pc,\n                u\n            }, M = function() {\n                var t, e, n, i, r, a, l;\n                if (s >= 1)\n                    return [];\n                for (o.lv = 0,\n                o.ld = 0,\n                o.cd = 0,\n                o.cv = [0, 0],\n                o.p = N([6])[0],\n                o.d = N([18], [1])[0] - 1,\n                o.m = g.pow(10, o.p),\n                r = N([3, 3]),\n                o.md = r[0],\n                o.mv = r[1],\n                t = []; r = N([6]),\n                r.length; ) {\n                    if (n = {\n                        c: r[0]\n                    },\n                    i = {},\n                    n.d = 1,\n                    32 & n.c)\n                        for (; ; ) {\n                            if (r = N([6])[0],\n                            63 == (16 | r)) {\n                                l = 16 & r ? \"x\" : \"u\",\n                                r = N([3, 3]),\n                                n[l + \"_d\"] = r[0] + o.md,\n                                n[l + \"_v\"] = r[1] + o.mv;\n                                break\n                            }\n                            if (32 & r) {\n                                a = 8 & r ? \"d\" : \"v\",\n                                l = 16 & r ? \"x\" : \"u\",\n                                n[l + \"_\" + a] = (7 & r) + o[\"m\" + a];\n                                break\n                            }\n                            if (a = 15 & r,\n                            0 == a ? n.d = N([6])[0] : 1 == a ? (o.d = a = N([18])[0],\n                            n.d = 0) : n.d = a,\n                            !(16 & r))\n                                break\n                        }\n                    i.date = w(n.d);\n                    for (a in {\n                        v: 0,\n                        d: 0\n                    })\n                        b(n[\"x_\" + a]) || (o[\"l\" + a] = n[\"x_\" + a]),\n                        b(n[\"u_\" + a]) && (n[\"u_\" + a] = o[\"l\" + a]);\n                    for (n.l_l = [n.u_d, n.u_d, n.u_d, n.u_d, n.u_v],\n                    l = p[15 & n.c],\n                    1 & n.u_v && (l = 31 - l),\n                    16 & n.c && (n.l_l[4] += 2),\n                    e = 0; 5 > e; e++)\n                        l & 1 << 4 - e && n.l_l[e]++,\n                        n.l_l[e] *= 3;\n                    n.d_v = N(n.l_l, [1, 0, 0, 1, 1], [0, 0, 0, 0, 1]),\n                    a = o.cd + n.d_v[0],\n                    i.open = a / o.m,\n                    i.high = (a + n.d_v[1]) / o.m,\n                    i.low = (a - n.d_v[2]) / o.m,\n                    i.close = (a + n.d_v[3]) / o.m,\n                    r = n.d_v[4],\n                    \"number\" == typeof r && (r = [r, r >= 0 ? 0 : -1]),\n                    o.cd = a + n.d_v[3],\n                    l = o.cv[0] + r[0],\n                    o.cv = [l & d, o.cv[1] + r[1] + !!((o.cv[0] & d) + (r[0] & d) & f)],\n                    i.volume = (o.cv[0] & f - 1) + o.cv[1] * f,\n                    t.push(i)\n                }\n                return t\n            }, O = function() {\n                var t, e, n, i;\n                if (s > 1)\n                    return [];\n                for (o.l = 0,\n                i = -1,\n                o.d = N([18])[0] - 1,\n                n = N([18])[0]; o.d < n; )\n                    e = w(1),\n                    0 >= i ? (_() && (o.l += y()),\n                    i = N([3 * o.l], [0])[0] + 1,\n                    t || (t = [e],\n                    i--)) : t.push(e),\n                    i--;\n                return t\n            };\n            return _mi_run = function() {\n                var t, n, r, a;\n                if (s >= 1)\n                    return [];\n                for (o.f = N([6])[0],\n                o.c = N([6])[0],\n                r = [],\n                o.dv = [],\n                o.dl = [],\n                t = 0; t < o.f; t++)\n                    o.dv[t] = 0,\n                    o.dl[t] = 0;\n                for (t = 0; !(e >= i) && (e != i - 1 || 7 & (o.c ^ t)); t++) {\n                    for (a = [],\n                    n = 0; n < o.f; n++)\n                        _() && (o.dl[n] += y()),\n                        o.dv[n] += N([3 * o.dl[n]], [1])[0],\n                        a[n] = o.dv[n];\n                    r.push(a)\n                }\n                return r\n            }\n            ,\n            _k2_run = function() {\n                if (o = {\n                    b_avp: 1,\n                    b_ph: 0,\n                    b_phx: 0,\n                    b_sep: 0,\n                    p_p: 6,\n                    p_v: 0,\n                    p_a: 0,\n                    p_e: 0,\n                    p_t: 0,\n                    l_o: 3,\n                    l_h: 3,\n                    l_l: 3,\n                    l_c: 3,\n                    l_v: 5,\n                    l_a: 5,\n                    l_e: 3,\n                    l_t: 0,\n                    u_p: 0,\n                    u_v: 0,\n                    u_a: 0,\n                    wd: 62,\n                    d: 0\n                },\n                s > 0)\n                    return [];\n                var t, n, r, a, l, c, u;\n                for (t = []; ; ) {\n                    if (e >= i)\n                        return void 0;\n                    if (r = {\n                        d: 1,\n                        c: 0\n                    },\n                    _())\n                        if (_()) {\n                            if (_()) {\n                                for (r.c++,\n                                r.a = o.b_avp,\n                                _() && (o.b_avp ^= _(),\n                                o.b_ph ^= _(),\n                                o.b_phx ^= _(),\n                                r.s = o.b_sep,\n                                o.b_sep ^= _(),\n                                _() && (o.wd = N([7])[0]),\n                                r.s ^ o.b_sep && (r.s ? o.u_p = o.u_c : o.u_o = o.u_h = o.u_l = o.u_c = o.u_p)),\n                                c = 0; c < 3 + 2 * o.b_ph; c++)\n                                    if (_() && (l = \"pvaet\".charAt(c),\n                                    a = o[\"p_\" + l],\n                                    o[\"p_\" + l] += y(),\n                                    o[\"u_\" + l] = C(o[\"u_\" + l], a, o[\"p_\" + l]) - 0,\n                                    o.b_sep && !c))\n                                        for (u = 0; 4 > u; u++)\n                                            l = \"ohlc\".charAt(u),\n                                            o[\"u_\" + l] = C(o[\"u_\" + l], a, o.p_p) - 0;\n                                !o.b_avp && r.a && (o.u_a = C(n && n.amount || 0, 0, o.p_a))\n                            }\n                            if (_())\n                                for (r.c++,\n                                c = 0; c < 7 + o.b_ph + o.b_phx; c++)\n                                    _() && (6 == c ? r.d = x() : o[\"l_\" + \"ohlcva*et\".charAt(c)] += y());\n                            if (_() && (r.c++,\n                            l = o.l_o + (_() && y()),\n                            a = N([3 * l], [1])[0],\n                            r.p = o.b_sep ? o.u_c + a : o.u_p += a),\n                            !r.c)\n                                break\n                        } else\n                            _() ? _() ? _() ? r.d = x() : o.l_v += y() : o.b_ph && _() ? o[\"l_\" + \"et\".charAt(o.b_phx && _())] += y() : o.l_a += y() : o[\"l_\" + \"ohlc\".charAt(N([2])[0])] += y();\n                    for (c = 0; c < 6 + o.b_ph + o.b_phx; c++)\n                        u = \"ohlcvaet\".charAt(c),\n                        a = (o.b_sep ? 191 : 185) >> c & 1,\n                        r[\"v_\" + u] = N([3 * o[\"l_\" + u]], [a])[0];\n                    n = {\n                        date: S(r.d)\n                    },\n                    r.p && (n.prevclose = C(r.p, o.p_p)),\n                    o.b_sep ? (n.open = C(o.u_o += r.v_o, o.p_p),\n                    n.high = C(o.u_h += r.v_h, o.p_p),\n                    n.low = C(o.u_l += r.v_l, o.p_p),\n                    n.close = C(o.u_c += r.v_c, o.p_p)) : (r.o = o.u_p + r.v_o,\n                    n.open = C(r.o, o.p_p),\n                    n.high = C(r.o + r.v_h, o.p_p),\n                    n.low = C(r.o - r.v_l, o.p_p),\n                    n.close = C(o.u_p = r.o + r.v_c, o.p_p)),\n                    n.volume = C(o.u_v += r.v_v, o.p_v),\n                    o.b_avp ? (a = T(o.p_p),\n                    l = T(o.p_v),\n                    n.amount = C(C(Math.floor((o.b_sep ? (o.u_o + o.u_h + o.u_l + o.u_c) / 4 : r.o + (r.v_h - r.v_l + r.v_c) / 4) * o.u_v + .5), [a[0] + l[0], a[1] + l[1]], o.p_a) + r.v_a, o.p_a)) : (o.u_a += r.v_a,\n                    n.amount = C(o.u_a, o.p_a)),\n                    o.b_ph && (n.postVol = C(r.v_e, o.p_e),\n                    n.postAmt = C(Math.floor(n.postVol * n.close + (o.b_phx ? C(r.v_t, o.p_t) : 0) + .5), 0)),\n                    t.push(n)\n                }\n                return t\n            }\n            ,\n            _decnum = function(t) {\n                var e, n, i;\n                if (t = (t || 0).toString(),\n                i = [],\n                n = t.toLowerCase().indexOf(\"e\"),\n                n > 0) {\n                    for (e = t.substr(n + 1) - 0; e >= 0; e--)\n                        i.push(Math.floor(e * Math.pow(10, -e) + .5) - 0);\n                    return i.join(\"\")\n                }\n                return t\n            }\n            ,\n            v()()\n        }\n        ;\n\"\"\"\n"
  },
  {
    "path": "akshare/stock/stock_allotment_cninfo.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/10/22 15:00\nDesc: 巨潮资讯-数据浏览器-筹资指标-公司配股实施方案\nhttps://webapi.cninfo.com.cn/#/dataBrowse\n\"\"\"\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_cninfo(file: str = \"cninfo.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef stock_allotment_cninfo(\n    symbol: str = \"600030\", start_date: str = \"19700101\", end_date: str = \"22220222\"\n) -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-个股-配股实施方案\n    https://webapi.cninfo.com.cn/#/dataBrowse\n    :param symbol: 股票代码\n    :type symbol: str\n    :param start_date: 开始查询的日期\n    :type symbol: str\n    :param end_date: 结束查询的日期\n    :type symbol: str\n    :return: 配股实施方案\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://webapi.cninfo.com.cn/api/stock/p_stock2232\"\n    params = {\n        \"scode\": symbol,\n        \"sdate\": start_date\n        if not start_date\n        else f\"{start_date[0:4]}-{start_date[4:6]}-{start_date[6:8]}\",\n        \"edate\": end_date\n        if not end_date\n        else f\"{end_date[0:4]}-{end_date[4:6]}-{end_date[6:8]}\",\n    }\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.post(url, params=params, headers=headers)\n    data_json = r.json()\n    columns = [\n        \"记录标识\",\n        \"证券简称\",\n        \"停牌起始日\",\n        \"上市公告日期\",\n        \"配股缴款起始日\",\n        \"可转配股数量\",\n        \"停牌截止日\",\n        \"实际配股数量\",\n        \"配股价格\",\n        \"配股比例\",\n        \"配股前总股本\",\n        \"每股配权转让费(元)\",\n        \"法人股实配数量\",\n        \"实际募资净额\",\n        \"大股东认购方式\",\n        \"其他配售简称\",\n        \"发行方式\",\n        \"配股失败，退还申购款日期\",\n        \"除权基准日\",\n        \"预计发行费用\",\n        \"配股发行结果公告日\",\n        \"证券代码\",\n        \"配股权证交易截止日\",\n        \"其他股份实配数量\",\n        \"国家股实配数量\",\n        \"委托单位\",\n        \"公众获转配数量\",\n        \"其他配售代码\",\n        \"配售对象\",\n        \"配股权证交易起始日\",\n        \"资金到账日\",\n        \"机构名称\",\n        \"股权登记日\",\n        \"实际募资总额\",\n        \"预计募集资金\",\n        \"大股东认购数量\",\n        \"公众股实配数量\",\n        \"转配股实配数量\",\n        \"承销费用\",\n        \"法人获转配数量\",\n        \"配股后流通股本\",\n        \"股票类别\",\n        \"公众配售简称\",\n        \"发行方式编码\",\n        \"承销方式\",\n        \"公告日期\",\n        \"配股上市日\",\n        \"配股缴款截止日\",\n        \"承销余额(股)\",\n        \"预计配股数量\",\n        \"配股后总股本\",\n        \"职工股实配数量\",\n        \"承销方式编码\",\n        \"发行费用总额\",\n        \"配股前流通股本\",\n        \"股票类别编码\",\n        \"公众配售代码\",\n    ]\n    if data_json[\"records\"]:\n        # 有配股记录\n        temp_df = pd.DataFrame(data_json[\"records\"])\n        temp_df.columns = columns\n        dates = (\n            \"停牌起始日\",\n            \"上市公告日期\",\n            \"配股失败，退还申购款日期\",\n            \"配股缴款起始日\",\n            \"停牌截止日\",\n            \"除权基准日\",\n            \"配股发行结果公告日\",\n            \"配股权证交易截止日\",\n            \"配股权证交易起始日\",\n            \"资金到账日\",\n            \"股权登记日\",\n            \"公告日期\",\n            \"配股上市日\",\n            \"配股缴款截止日\",\n        )\n        for s in dates:\n            temp_df[s] = pd.to_datetime(temp_df[s], errors=\"coerce\").dt.date\n        nums = (\n            \"可转配股数量\",\n            \"实际配股数量\",\n            \"配股价格\",\n            \"配股比例\",\n            \"配股前总股本\",\n            \"每股配权转让费(元)\",\n            \"法人股实配数量\",\n            \"实际募资净额\",\n            \"预计发行费用\",\n            \"其他股份实配数量\",\n            \"国家股实配数量\",\n            \"公众获转配数量\",\n            \"实际募资总额\",\n            \"预计募集资金\",\n            \"大股东认购数量\",\n            \"公众股实配数量\",\n            \"转配股实配数量\",\n            \"承销费用\",\n            \"法人获转配数量\",\n            \"配股后流通股本\",\n            \"承销余额(股)\",\n            \"预计配股数量\",\n            \"配股后总股本\",\n            \"职工股实配数量\",\n            \"发行费用总额\",\n            \"配股前流通股本\",\n        )\n        for s in nums:\n            temp_df[s] = pd.to_numeric(temp_df[s], errors=\"coerce\")\n    else:\n        # 没有配股数据\n        temp_df = pd.DataFrame(columns=columns)\n\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_allotment_cninfo_df = stock_allotment_cninfo(\n        symbol=\"600030\", start_date=\"19900101\", end_date=\"20241022\"\n    )\n    print(stock_allotment_cninfo_df)\n"
  },
  {
    "path": "akshare/stock/stock_ask_bid_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/2/16 18:30\nDesc: 东方财富-行情报价\nhttps://quote.eastmoney.com/sz000001.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_bid_ask_em(symbol: str = \"000001\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-行情报价\n    https://quote.eastmoney.com/sz000001.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 行情报价\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/stock/get\"\n    market_code = 1 if symbol.startswith(\"6\") else 0\n    params = {\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fields\": \"f120,f121,f122,f174,f175,f59,f163,f43,f57,f58,f169,f170,f46,f44,f51,\"\n        \"f168,f47,f164,f116,f60,f45,f52,f50,f48,f167,f117,f71,f161,f49,f530,\"\n        \"f135,f136,f137,f138,f139,f141,f142,f144,f145,f147,f148,f140,f143,f146,\"\n        \"f149,f55,f62,f162,f92,f173,f104,f105,f84,f85,f183,f184,f185,f186,f187,\"\n        \"f188,f189,f190,f191,f192,f107,f111,f86,f177,f78,f110,f262,f263,f264,f267,\"\n        \"f268,f255,f256,f257,f258,f127,f199,f128,f198,f259,f260,f261,f171,f277,f278,\"\n        \"f279,f288,f152,f250,f251,f252,f253,f254,f269,f270,f271,f272,f273,f274,f275,\"\n        \"f276,f265,f266,f289,f290,f286,f285,f292,f293,f294,f295\",\n        \"secid\": f\"{market_code}.{symbol}\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    tick_dict = {\n        \"sell_5\": data_json[\"data\"][\"f31\"],\n        \"sell_5_vol\": data_json[\"data\"][\"f32\"] * 100,\n        \"sell_4\": data_json[\"data\"][\"f33\"],\n        \"sell_4_vol\": data_json[\"data\"][\"f34\"] * 100,\n        \"sell_3\": data_json[\"data\"][\"f35\"],\n        \"sell_3_vol\": data_json[\"data\"][\"f36\"] * 100,\n        \"sell_2\": data_json[\"data\"][\"f37\"],\n        \"sell_2_vol\": data_json[\"data\"][\"f38\"] * 100,\n        \"sell_1\": data_json[\"data\"][\"f39\"],\n        \"sell_1_vol\": data_json[\"data\"][\"f40\"] * 100,\n        \"buy_1\": data_json[\"data\"][\"f19\"],\n        \"buy_1_vol\": data_json[\"data\"][\"f20\"] * 100,\n        \"buy_2\": data_json[\"data\"][\"f17\"],\n        \"buy_2_vol\": data_json[\"data\"][\"f18\"] * 100,\n        \"buy_3\": data_json[\"data\"][\"f15\"],\n        \"buy_3_vol\": data_json[\"data\"][\"f16\"] * 100,\n        \"buy_4\": data_json[\"data\"][\"f13\"],\n        \"buy_4_vol\": data_json[\"data\"][\"f14\"] * 100,\n        \"buy_5\": data_json[\"data\"][\"f11\"],\n        \"buy_5_vol\": data_json[\"data\"][\"f12\"] * 100,\n        \"最新\": data_json[\"data\"][\"f43\"],\n        \"均价\": data_json[\"data\"][\"f71\"],\n        \"涨幅\": data_json[\"data\"][\"f170\"],\n        \"涨跌\": data_json[\"data\"][\"f169\"],\n        \"总手\": data_json[\"data\"][\"f47\"],\n        \"金额\": data_json[\"data\"][\"f48\"],\n        \"换手\": data_json[\"data\"][\"f168\"],\n        \"量比\": data_json[\"data\"][\"f50\"],\n        \"最高\": data_json[\"data\"][\"f44\"],\n        \"最低\": data_json[\"data\"][\"f45\"],\n        \"今开\": data_json[\"data\"][\"f46\"],\n        \"昨收\": data_json[\"data\"][\"f60\"],\n        \"涨停\": data_json[\"data\"][\"f51\"],\n        \"跌停\": data_json[\"data\"][\"f52\"],\n        \"外盘\": data_json[\"data\"][\"f49\"],\n        \"内盘\": data_json[\"data\"][\"f161\"],\n    }\n    temp_df = pd.DataFrame.from_dict(tick_dict, orient=\"index\")\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\"item\", \"value\"]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_bid_ask_em_df = stock_bid_ask_em(symbol=\"000001\")\n    print(stock_bid_ask_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_board_concept_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/12 17:00\nDesc: 东方财富-沪深板块-概念板块\nhttps://quote.eastmoney.com/center/boardlist.html#concept_board\n\"\"\"\n\nimport re\nfrom functools import lru_cache\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.func import fetch_paginated_data\n\n\n@lru_cache()\ndef __stock_board_concept_name_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-沪深京板块-概念板块-名称\n    https://quote.eastmoney.com/center/boardlist.html#concept_board\n    :return: 概念板块-名称\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://79.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f12\",\n        \"fs\": \"m:90 t:3 f:!50\",\n        \"fields\": \"f2,f3,f4,f8,f12,f14,f15,f16,f17,f18,f20,f21,f24,f25,f22,f33,f11,f62,f128,f124,f107,f104,f105,f136\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"排名\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"换手率\",\n        \"_\",\n        \"板块代码\",\n        \"板块名称\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"总市值\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"上涨家数\",\n        \"下跌家数\",\n        \"_\",\n        \"_\",\n        \"领涨股票\",\n        \"_\",\n        \"_\",\n        \"领涨股票-涨跌幅\",\n    ]\n    temp_df = temp_df[\n        [\n            \"排名\",\n            \"板块名称\",\n            \"板块代码\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"总市值\",\n            \"换手率\",\n            \"上涨家数\",\n            \"下跌家数\",\n            \"领涨股票\",\n            \"领涨股票-涨跌幅\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"上涨家数\"] = pd.to_numeric(temp_df[\"上涨家数\"], errors=\"coerce\")\n    temp_df[\"下跌家数\"] = pd.to_numeric(temp_df[\"下跌家数\"], errors=\"coerce\")\n    temp_df[\"领涨股票-涨跌幅\"] = pd.to_numeric(\n        temp_df[\"领涨股票-涨跌幅\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_board_concept_name_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-沪深京板块-概念板块-名称\n    https://quote.eastmoney.com/center/boardlist.html#concept_board\n    :return: 概念板块-名称\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://79.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f12\",\n        \"fs\": \"m:90 t:3 f:!50\",\n        \"fields\": \"f2,f3,f4,f8,f12,f14,f15,f16,f17,f18,f20,f21,f24,f25,f22,f33,f11,f62,f128,f124,f107,f104,f105,f136\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"排名\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"换手率\",\n        \"_\",\n        \"板块代码\",\n        \"板块名称\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"总市值\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"上涨家数\",\n        \"下跌家数\",\n        \"_\",\n        \"_\",\n        \"领涨股票\",\n        \"_\",\n        \"_\",\n        \"领涨股票-涨跌幅\",\n    ]\n    temp_df = temp_df[\n        [\n            \"排名\",\n            \"板块名称\",\n            \"板块代码\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"总市值\",\n            \"换手率\",\n            \"上涨家数\",\n            \"下跌家数\",\n            \"领涨股票\",\n            \"领涨股票-涨跌幅\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"上涨家数\"] = pd.to_numeric(temp_df[\"上涨家数\"], errors=\"coerce\")\n    temp_df[\"下跌家数\"] = pd.to_numeric(temp_df[\"下跌家数\"], errors=\"coerce\")\n    temp_df[\"领涨股票-涨跌幅\"] = pd.to_numeric(\n        temp_df[\"领涨股票-涨跌幅\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_board_concept_spot_em(symbol: str = \"可燃冰\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-沪深京板块-概念板块-实时行情\n    https://quote.eastmoney.com/bk/90.BK0818.html\n    :param symbol: 概念板块代码\n    :type symbol: str\n    :return: 概念板块-实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://91.push2.eastmoney.com/api/qt/stock/get\"\n    field_map = {\n        \"f43\": \"最新\",\n        \"f44\": \"最高\",\n        \"f45\": \"最低\",\n        \"f46\": \"开盘\",\n        \"f47\": \"成交量\",\n        \"f48\": \"成交额\",\n        \"f170\": \"涨跌幅\",\n        \"f171\": \"振幅\",\n        \"f168\": \"换手率\",\n        \"f169\": \"涨跌额\",\n    }\n\n    if re.match(pattern=r\"^BK\\d+\", string=symbol):\n        em_code = symbol\n    else:\n        industry_listing = __stock_board_concept_name_em()\n        em_code = industry_listing.query(\"板块名称 == @symbol\")[\"板块代码\"].values[0]\n    params = dict(\n        fields=\",\".join(field_map.keys()),\n        mpi=\"1000\",\n        invt=\"2\",\n        fltt=\"1\",\n        secid=f\"90.{em_code}\",\n    )\n    r = requests.get(url, params=params)\n    data_dict = r.json()\n    result = pd.DataFrame.from_dict(data_dict[\"data\"], orient=\"index\")\n    result.rename(field_map, inplace=True)\n    result.reset_index(inplace=True)\n    result.columns = [\"item\", \"value\"]\n    result[\"value\"] = pd.to_numeric(result[\"value\"], errors=\"coerce\")\n\n    # 各项转换成正常单位. 除了成交量与成交额, 原始数据中已是正常单位(元)\n    result[\"value\"] = result[\"value\"] * 1e-2\n    result.iloc[4, 1] = result.iloc[4, 1] * 1e2\n    result.iloc[5, 1] = result.iloc[5, 1] * 1e2\n    return result\n\n\ndef stock_board_concept_hist_em(\n    symbol: str = \"绿色电力\",\n    period: str = \"daily\",\n    start_date: str = \"20220101\",\n    end_date: str = \"20221128\",\n    adjust: str = \"\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-沪深板块-概念板块-历史行情\n    https://quote.eastmoney.com/bk/90.BK0715.html\n    :param symbol: 板块名称\n    :type symbol: str\n    :type period: 周期; choice of {\"daily\", \"weekly\", \"monthly\"}\n    :param period: 板块名称\n    :param start_date: 开始时间\n    :type start_date: str\n    :param end_date: 结束时间\n    :type end_date: str\n    :param adjust: choice of {'': 不复权, \"qfq\": 前复权, \"hfq\": 后复权}\n    :type adjust: str\n    :return: 历史行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    period_map = {\n        \"daily\": \"101\",\n        \"weekly\": \"102\",\n        \"monthly\": \"103\",\n    }\n    stock_board_concept_em_map = __stock_board_concept_name_em()\n    stock_board_code = stock_board_concept_em_map[\n        stock_board_concept_em_map[\"板块名称\"] == symbol\n    ][\"板块代码\"].values[0]\n    adjust_map = {\"\": \"0\", \"qfq\": \"1\", \"hfq\": \"2\"}\n    url = \"https://91.push2his.eastmoney.com/api/qt/stock/kline/get\"\n    params = {\n        \"secid\": f\"90.{stock_board_code}\",\n        \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n        \"klt\": period_map[period],\n        \"fqt\": adjust_map[adjust],\n        \"beg\": start_date,\n        \"end\": end_date,\n        \"smplmt\": \"10000\",\n        \"lmt\": \"1000000\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df.columns = [\n        \"日期\",\n        \"开盘\",\n        \"收盘\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"换手率\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"换手率\",\n        ]\n    ]\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_board_concept_hist_min_em(\n    symbol: str = \"长寿药\", period: str = \"5\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-沪深板块-概念板块-分时历史行情\n    https://quote.eastmoney.com/bk/90.BK0715.html\n    :param symbol: 板块名称\n    :type symbol: str\n    :param period: choice of {\"1\", \"5\", \"15\", \"30\", \"60\"}\n    :type period: str\n    :return: 分时历史行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    stock_board_concept_em_map = __stock_board_concept_name_em()\n    stock_board_code = stock_board_concept_em_map[\n        stock_board_concept_em_map[\"板块名称\"] == symbol\n    ][\"板块代码\"].values[0]\n    if period == \"1\":\n        url = \"https://push2his.eastmoney.com/api/qt/stock/trends2/get\"\n        params = {\n            \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58\",\n            \"iscr\": \"0\",\n            \"ndays\": \"1\",\n            \"secid\": f\"90.{stock_board_code}\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"trends\"]]\n        )\n        temp_df.columns = [\n            \"日期时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"最新价\",\n        ]\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n        return temp_df\n    else:\n        url = \"https://91.push2his.eastmoney.com/api/qt/stock/kline/get\"\n        params = {\n            \"secid\": f\"90.{stock_board_code}\",\n            \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n            \"klt\": period,\n            \"fqt\": \"1\",\n            \"end\": \"20500101\",\n            \"lmt\": \"1000000\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"klines\"]]\n        )\n        temp_df.columns = [\n            \"日期时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"换手率\",\n        ]\n        temp_df = temp_df[\n            [\n                \"日期时间\",\n                \"开盘\",\n                \"收盘\",\n                \"最高\",\n                \"最低\",\n                \"涨跌幅\",\n                \"涨跌额\",\n                \"成交量\",\n                \"成交额\",\n                \"振幅\",\n                \"换手率\",\n            ]\n        ]\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n        temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n        temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n        return temp_df\n\n\ndef stock_board_concept_cons_em(symbol: str = \"融资融券\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-沪深板块-概念板块-板块成份\n    https://quote.eastmoney.com/center/boardlist.html#boards-BK06551\n    :param symbol: 板块名称或者板块代码\n    :type symbol: str\n    :return: 板块成份\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if re.match(pattern=r\"^BK\\d+\", string=symbol):\n        stock_board_code = symbol\n    else:\n        stock_board_concept_em_map = __stock_board_concept_name_em()\n        stock_board_code = stock_board_concept_em_map[\n            stock_board_concept_em_map[\"板块名称\"] == symbol\n        ][\"板块代码\"].values[0]\n    url = \"https://29.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f12\",\n        \"fs\": f\"b:{stock_board_code} f:!50\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,\"\n        \"f24,f25,f22,f11,f62,f128,f136,f115,f152,f45\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"市盈率-动态\",\n        \"_\",\n        \"_\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"市净率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"最高\",\n            \"最低\",\n            \"今开\",\n            \"昨收\",\n            \"换手率\",\n            \"市盈率-动态\",\n            \"市净率\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"市盈率-动态\"] = pd.to_numeric(temp_df[\"市盈率-动态\"], errors=\"coerce\")\n    temp_df[\"市净率\"] = pd.to_numeric(temp_df[\"市净率\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_board_concept_em_df = stock_board_concept_name_em()\n    print(stock_board_concept_em_df)\n\n    stock_board_concept_spot_em_df = stock_board_concept_spot_em(symbol=\"可燃冰\")\n    print(stock_board_concept_spot_em_df)\n\n    stock_board_concept_hist_em_df = stock_board_concept_hist_em(\n        symbol=\"绿色电力\",\n        period=\"daily\",\n        start_date=\"20220101\",\n        end_date=\"20250227\",\n        adjust=\"\",\n    )\n    print(stock_board_concept_hist_em_df)\n\n    stock_board_concept_hist_min_em_df = stock_board_concept_hist_min_em(\n        symbol=\"长寿药\", period=\"5\"\n    )\n    print(stock_board_concept_hist_min_em_df)\n\n    stock_board_concept_cons_em_df = stock_board_concept_cons_em(symbol=\"BK0655\")\n    print(stock_board_concept_cons_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_board_industry_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/10 19:30\nDesc: 东方财富-沪深板块-行业板块\nhttps://quote.eastmoney.com/center/boardlist.html#industry_board\n\"\"\"\n\nimport re\nfrom functools import lru_cache\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.func import fetch_paginated_data\n\n\n@lru_cache()\ndef __stock_board_industry_name_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-沪深板块-行业板块-名称\n    https://quote.eastmoney.com/center/boardlist.html#industry_board\n    :return: 行业板块-名称\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://17.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f3\",\n        \"fs\": \"m:90 t:2 f:!50\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,\"\n        \"f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152,f124,f107,f104,f105,\"\n        \"f140,f141,f207,f208,f209,f222\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"排名\",\n        \"-\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"-\",\n        \"_\",\n        \"-\",\n        \"换手率\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"板块代码\",\n        \"-\",\n        \"板块名称\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"总市值\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"上涨家数\",\n        \"下跌家数\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"领涨股票\",\n        \"-\",\n        \"-\",\n        \"领涨股票-涨跌幅\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"排名\",\n            \"板块名称\",\n            \"板块代码\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"总市值\",\n            \"换手率\",\n            \"上涨家数\",\n            \"下跌家数\",\n            \"领涨股票\",\n            \"领涨股票-涨跌幅\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"上涨家数\"] = pd.to_numeric(temp_df[\"上涨家数\"], errors=\"coerce\")\n    temp_df[\"下跌家数\"] = pd.to_numeric(temp_df[\"下跌家数\"], errors=\"coerce\")\n    temp_df[\"领涨股票-涨跌幅\"] = pd.to_numeric(\n        temp_df[\"领涨股票-涨跌幅\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_board_industry_name_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-沪深板块-行业板块-名称\n    https://quote.eastmoney.com/center/boardlist.html#industry_board\n    :return: 行业板块-名称\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://17.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f3\",\n        \"fs\": \"m:90 t:2 f:!50\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,\"\n        \"f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152,f124,f107,f104,f105,\"\n        \"f140,f141,f207,f208,f209,f222\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"排名\",\n        \"-\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"-\",\n        \"_\",\n        \"-\",\n        \"换手率\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"板块代码\",\n        \"-\",\n        \"板块名称\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"总市值\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"上涨家数\",\n        \"下跌家数\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"领涨股票\",\n        \"-\",\n        \"-\",\n        \"领涨股票-涨跌幅\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"排名\",\n            \"板块名称\",\n            \"板块代码\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"总市值\",\n            \"换手率\",\n            \"上涨家数\",\n            \"下跌家数\",\n            \"领涨股票\",\n            \"领涨股票-涨跌幅\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"上涨家数\"] = pd.to_numeric(temp_df[\"上涨家数\"], errors=\"coerce\")\n    temp_df[\"下跌家数\"] = pd.to_numeric(temp_df[\"下跌家数\"], errors=\"coerce\")\n    temp_df[\"领涨股票-涨跌幅\"] = pd.to_numeric(\n        temp_df[\"领涨股票-涨跌幅\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_board_industry_spot_em(symbol: str = \"小金属\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-沪深板块-行业板块-实时行情\n    https://quote.eastmoney.com/bk/90.BK1027.html\n    :param symbol: 板块名称 or 东财板块代码\n    :type symbol: str\n    :return: 实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://91.push2.eastmoney.com/api/qt/stock/get\"\n    field_map = {\n        \"f43\": \"最新\",\n        \"f44\": \"最高\",\n        \"f45\": \"最低\",\n        \"f46\": \"开盘\",\n        \"f47\": \"成交量\",\n        \"f48\": \"成交额\",\n        \"f170\": \"涨跌幅\",\n        \"f171\": \"振幅\",\n        \"f168\": \"换手率\",\n        \"f169\": \"涨跌额\",\n    }\n\n    if re.match(pattern=r\"^BK\\d+\", string=symbol):\n        em_code = symbol\n    else:\n        industry_listing = __stock_board_industry_name_em()\n        em_code = industry_listing.query(\"板块名称 == @symbol\")[\"板块代码\"].values[0]\n    params = dict(\n        fields=\",\".join(field_map.keys()),\n        mpi=\"1000\",\n        invt=\"2\",\n        fltt=\"1\",\n        secid=f\"90.{em_code}\",\n    )\n    r = requests.get(url, params=params)\n    data_dict = r.json()\n    result = pd.DataFrame.from_dict(data_dict[\"data\"], orient=\"index\")\n    result.rename(field_map, inplace=True)\n    result.reset_index(inplace=True)\n    result.columns = [\"item\", \"value\"]\n    result[\"value\"] = pd.to_numeric(result[\"value\"], errors=\"coerce\")\n\n    # 各项转换成正常单位. 除了成交量与成交额, 原始数据中已是正常单位(元)\n    result[\"value\"] = result[\"value\"] * 1e-2\n    result.iloc[4, 1] = result.iloc[4, 1] * 1e2\n    result.iloc[5, 1] = result.iloc[5, 1] * 1e2\n    return result\n\n\ndef stock_board_industry_hist_em(\n    symbol: str = \"小金属\",\n    start_date: str = \"20211201\",\n    end_date: str = \"20220401\",\n    period: str = \"日k\",\n    adjust: str = \"\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-沪深板块-行业板块-历史行情\n    https://quote.eastmoney.com/bk/90.BK1027.html\n    :param symbol: 板块名称\n    :type symbol: str\n    :param start_date: 开始时间\n    :type start_date: str\n    :param end_date: 结束时间\n    :type end_date: str\n    :param period: 周期; choice of {\"日k\", \"周k\", \"月k\"}\n    :type period: str\n    :param adjust: choice of {'': 不复权, \"qfq\": 前复权, \"hfq\": 后复权}\n    :type adjust: str\n    :return: 历史行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if re.match(pattern=r\"^BK\\d+\", string=symbol):\n        em_code = symbol\n    else:\n        industry_listing = __stock_board_industry_name_em()\n        em_code = industry_listing.query(\"板块名称 == @symbol\")[\"板块代码\"].values[0]\n    period_map = {\n        \"日k\": \"101\",\n        \"周k\": \"102\",\n        \"月k\": \"103\",\n    }\n    adjust_map = {\"\": \"0\", \"qfq\": \"1\", \"hfq\": \"2\"}\n    url = \"http://7.push2his.eastmoney.com/api/qt/stock/kline/get\"\n    params = {\n        \"secid\": f\"90.{em_code}\",\n        \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n        \"klt\": period_map[period],\n        \"fqt\": adjust_map[adjust],\n        \"beg\": start_date,\n        \"end\": end_date,\n        \"smplmt\": \"10000\",\n        \"lmt\": \"1000000\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df.columns = [\n        \"日期\",\n        \"开盘\",\n        \"收盘\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"换手率\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"换手率\",\n        ]\n    ]\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_board_industry_hist_min_em(\n    symbol: str = \"小金属\", period: str = \"5\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-沪深板块-行业板块-分时历史行情\n    https://quote.eastmoney.com/bk/90.BK1027.html\n    :param symbol: 板块名称\n    :type symbol: str\n    :param period: choice of {\"1\", \"5\", \"15\", \"30\", \"60\"}\n    :type period: str\n    :return: 分时历史行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if re.match(pattern=r\"^BK\\d+\", string=symbol):\n        em_code = symbol\n    else:\n        industry_listing = __stock_board_industry_name_em()\n        em_code = industry_listing.query(\"板块名称 == @symbol\")[\"板块代码\"].values[0]\n    if period == \"1\":\n        url = \"https://push2his.eastmoney.com/api/qt/stock/trends2/get\"\n        params = {\n            \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58\",\n            \"iscr\": \"0\",\n            \"ndays\": \"1\",\n            \"secid\": f\"90.{em_code}\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"trends\"]]\n        )\n        temp_df.columns = [\n            \"日期时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"最新价\",\n        ]\n\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n        return temp_df\n    else:\n        url = \"https://7.push2his.eastmoney.com/api/qt/stock/kline/get\"\n        params = {\n            \"secid\": f\"90.{em_code}\",\n            \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n            \"klt\": period,\n            \"fqt\": \"1\",\n            \"beg\": \"0\",\n            \"end\": \"20500101\",\n            \"smplmt\": \"10000\",\n            \"lmt\": \"1000000\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"klines\"]]\n        )\n        temp_df.columns = [\n            \"日期时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"换手率\",\n        ]\n        temp_df = temp_df[\n            [\n                \"日期时间\",\n                \"开盘\",\n                \"收盘\",\n                \"最高\",\n                \"最低\",\n                \"涨跌幅\",\n                \"涨跌额\",\n                \"成交量\",\n                \"成交额\",\n                \"振幅\",\n                \"换手率\",\n            ]\n        ]\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n        temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n        temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n        return temp_df\n\n\ndef stock_board_industry_cons_em(symbol: str = \"小金属\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-沪深板块-行业板块-板块成份\n    https://data.eastmoney.com/bkzj/BK1027.html\n    :param symbol: 板块名称或者板块代码\n    :type symbol: str\n    :return: 板块成份\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if re.match(pattern=r\"^BK\\d+\", string=symbol):\n        stock_board_code = symbol\n    else:\n        stock_board_concept_em_map = __stock_board_industry_name_em()\n        stock_board_code = stock_board_concept_em_map[\n            stock_board_concept_em_map[\"板块名称\"] == symbol\n        ][\"板块代码\"].values[0]\n    url = \"https://29.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f3\",\n        \"fs\": f\"b:{stock_board_code} f:!50\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,\"\n        \"f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"市盈率-动态\",\n        \"_\",\n        \"_\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"市净率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"最高\",\n            \"最低\",\n            \"今开\",\n            \"昨收\",\n            \"换手率\",\n            \"市盈率-动态\",\n            \"市净率\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"市盈率-动态\"] = pd.to_numeric(temp_df[\"市盈率-动态\"], errors=\"coerce\")\n    temp_df[\"市净率\"] = pd.to_numeric(temp_df[\"市净率\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_board_industry_name_em_df = stock_board_industry_name_em()\n    print(stock_board_industry_name_em_df)\n\n    stock_board_industry_spot_em_df = stock_board_industry_spot_em(symbol=\"小金属\")\n    print(stock_board_industry_spot_em_df)\n\n    stock_board_industry_hist_em_df = stock_board_industry_hist_em(\n        symbol=\"小金属\",\n        start_date=\"20211201\",\n        end_date=\"20240222\",\n        period=\"日k\",\n        adjust=\"\",\n    )\n    print(stock_board_industry_hist_em_df)\n\n    stock_board_industry_hist_min_em_df = stock_board_industry_hist_min_em(\n        symbol=\"小金属\", period=\"1\"\n    )\n    print(stock_board_industry_hist_min_em_df)\n\n    stock_board_industry_cons_em_df = stock_board_industry_cons_em(symbol=\"互联网服务\")\n    print(stock_board_industry_cons_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_cg_equity_mortgage.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/7/24 23:30\nDesc: 巨潮资讯-数据中心-专题统计-公司治理-股权质押\nhttps://webapi.cninfo.com.cn/#/thematicStatistics\n\"\"\"\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_ths(file: str = \"cninfo.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef stock_cg_equity_mortgage_cninfo(date: str = \"20210930\") -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-专题统计-公司治理-股权质押\n    https://webapi.cninfo.com.cn/#/thematicStatistics\n    :param date: 开始统计时间\n    :type date: str\n    :return: 股权质押\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1094\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"tdate\": \"-\".join([date[:4], date[4:6], date[6:]]),\n    }\n    r = requests.post(url, headers=headers, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.columns = [\n        \"质押解除数量\",\n        \"股票简称\",\n        \"公告日期\",\n        \"质押事项\",\n        \"质权人\",\n        \"出质人\",\n        \"股票代码\",\n        \"占总股本比例\",\n        \"累计质押占总股本比例\",\n        \"质押数量\",\n    ]\n    temp_df = temp_df[\n        [\n            \"股票代码\",\n            \"股票简称\",\n            \"公告日期\",\n            \"出质人\",\n            \"质权人\",\n            \"质押数量\",\n            \"占总股本比例\",\n            \"质押解除数量\",\n            \"质押事项\",\n            \"累计质押占总股本比例\",\n        ]\n    ]\n    temp_df[\"公告日期\"] = pd.to_datetime(temp_df[\"公告日期\"], errors=\"coerce\").dt.date\n    temp_df[\"质押数量\"] = pd.to_numeric(temp_df[\"质押数量\"], errors=\"coerce\")\n    temp_df[\"占总股本比例\"] = pd.to_numeric(temp_df[\"占总股本比例\"], errors=\"coerce\")\n    temp_df[\"质押解除数量\"] = pd.to_numeric(temp_df[\"质押解除数量\"], errors=\"coerce\")\n    temp_df[\"累计质押占总股本比例\"] = pd.to_numeric(\n        temp_df[\"累计质押占总股本比例\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_cg_equity_mortgage_cninfo_df = stock_cg_equity_mortgage_cninfo(\n        date=\"20210930\"\n    )\n    print(stock_cg_equity_mortgage_cninfo_df)\n"
  },
  {
    "path": "akshare/stock/stock_cg_guarantee.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/5/19 18:34\nDesc: 巨潮资讯-数据中心-专题统计-公司治理-对外担保\nhttps://webapi.cninfo.com.cn/#/thematicStatistics\n\"\"\"\n\nimport pandas as pd\nimport requests\nimport py_mini_racer\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_ths(file: str = \"cninfo.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef stock_cg_guarantee_cninfo(\n    symbol: str = \"全部\", start_date: str = \"20180630\", end_date: str = \"20210927\"\n) -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-专题统计-公司治理-对外担保\n    https://webapi.cninfo.com.cn/#/thematicStatistics\n    :param symbol: choice of {\"全部\", \"深市主板\", \"沪市\", \"创业板\", \"科创板\"}\n    :type symbol: str\n    :param start_date: 开始统计时间\n    :type start_date: str\n    :param end_date: 结束统计时间\n    :type end_date: str\n    :return: 对外担保\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"全部\": \"\",\n        \"深市主板\": \"012002\",\n        \"沪市\": \"012001\",\n        \"创业板\": \"012015\",\n        \"科创板\": \"012029\",\n    }\n    url = \"https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1054\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Accept-Enckey\": mcode,\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"sdate\": \"-\".join([start_date[:4], start_date[4:6], start_date[6:]]),\n        \"edate\": \"-\".join([end_date[:4], end_date[4:6], end_date[6:]]),\n        \"market\": symbol_map[symbol],\n    }\n    r = requests.post(url, headers=headers, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.columns = [\n        \"公告统计区间\",\n        \"担保金融占净资产比例\",\n        \"担保金额\",\n        \"担保笔数\",\n        \"证券简称\",\n        \"证券代码\",\n        \"归属于母公司所有者权益\",\n    ]\n    temp_df = temp_df[\n        [\n            \"证券代码\",\n            \"证券简称\",\n            \"公告统计区间\",\n            \"担保笔数\",\n            \"担保金额\",\n            \"归属于母公司所有者权益\",\n            \"担保金融占净资产比例\",\n        ]\n    ]\n    temp_df[\"担保笔数\"] = pd.to_numeric(temp_df[\"担保笔数\"], errors=\"coerce\")\n    temp_df[\"担保金额\"] = pd.to_numeric(temp_df[\"担保金额\"], errors=\"coerce\")\n    temp_df[\"归属于母公司所有者权益\"] = pd.to_numeric(\n        temp_df[\"归属于母公司所有者权益\"], errors=\"coerce\"\n    )\n    temp_df[\"担保金融占净资产比例\"] = pd.to_numeric(\n        temp_df[\"担保金融占净资产比例\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_corporate_governance_guarantee_df = stock_cg_guarantee_cninfo(\n        symbol=\"全部\", start_date=\"20180928\", end_date=\"20210927\"\n    )\n    print(stock_corporate_governance_guarantee_df)\n"
  },
  {
    "path": "akshare/stock/stock_cg_lawsuit.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2021/9/29 16:19\nDesc: 巨潮资讯-数据中心-专题统计-公司治理-公司诉讼\nhttp://webapi.cninfo.com.cn/#/thematicStatistics\n\"\"\"\n\nimport time\n\nimport pandas as pd\nimport requests\nimport py_mini_racer\n\njs_str = \"\"\"\n    function mcode(input) {\n                var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\"   + \"wxyz0123456789+/\" + \"=\";\n                var output = \"\";\n                var chr1, chr2, chr3 = \"\";\n                var enc1, enc2, enc3, enc4 = \"\";\n                var i = 0;\n                do {\n                    chr1 = input.charCodeAt(i++);\n                    chr2 = input.charCodeAt(i++);\n                    chr3 = input.charCodeAt(i++);\n                    enc1 = chr1 >> 2;\n                    enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n                    enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n                    enc4 = chr3 & 63;\n                    if (isNaN(chr2)) {\n                        enc3 = enc4 = 64;\n                    } else if (isNaN(chr3)) {\n                        enc4 = 64;\n                    }\n                    output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2)\n                            + keyStr.charAt(enc3) + keyStr.charAt(enc4);\n                    chr1 = chr2 = chr3 = \"\";\n                    enc1 = enc2 = enc3 = enc4 = \"\";\n                } while (i < input.length);\n\n                return output;\n            }\n\"\"\"\n\n\ndef stock_cg_lawsuit_cninfo(\n    symbol: str = \"全部\", start_date: str = \"20180630\", end_date: str = \"20210927\"\n) -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-专题统计-公司治理-公司诉讼\n    http://webapi.cninfo.com.cn/#/thematicStatistics\n    :param symbol: choice of {\"全部\", \"深市主板\", \"沪市\", \"创业板\", \"科创板\"}\n    :type symbol: str\n    :param start_date: 开始统计时间\n    :type start_date: str\n    :param end_date: 结束统计时间\n    :type end_date: str\n    :return: 对外担保\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"全部\": \"\",\n        \"深市主板\": \"012002\",\n        \"沪市\": \"012001\",\n        \"创业板\": \"012015\",\n        \"科创板\": \"012029\",\n    }\n    url = \"http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1055\"\n    random_time_str = str(int(time.time()))\n    js_code = py_mini_racer.MiniRacer()\n    js_code.eval(js_str)\n    mcode = js_code.call(\"mcode\", random_time_str)\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"mcode\": mcode,\n        \"Origin\": \"http://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"http://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"sdate\": \"-\".join([start_date[:4], start_date[4:6], start_date[6:]]),\n        \"edate\": \"-\".join([end_date[:4], end_date[4:6], end_date[6:]]),\n        \"market\": symbol_map[symbol],\n    }\n    r = requests.post(url, headers=headers, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.columns = [\n        \"公告统计区间\",\n        \"诉讼金额\",\n        \"诉讼次数\",\n        \"证券简称\",\n        \"证券代码\",\n    ]\n    temp_df = temp_df[\n        [\n            \"证券代码\",\n            \"证券简称\",\n            \"公告统计区间\",\n            \"诉讼次数\",\n            \"诉讼金额\",\n        ]\n    ]\n    temp_df[\"诉讼次数\"] = pd.to_numeric(temp_df[\"诉讼次数\"])\n    temp_df[\"诉讼金额\"] = pd.to_numeric(temp_df[\"诉讼金额\"])\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_cg_lawsuit_cninfo_df = stock_cg_lawsuit_cninfo(\n        symbol=\"全部\", start_date=\"20180928\", end_date=\"20210927\"\n    )\n    print(stock_cg_lawsuit_cninfo_df)\n"
  },
  {
    "path": "akshare/stock/stock_dividend_cninfo.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/11/20 22:00\nDesc: 巨潮资讯-个股-历史分红\nhttps://webapi.cninfo.com.cn/#/company?companyid=600009\n\"\"\"\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_ths(file: str = \"cninfo.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef stock_dividend_cninfo(symbol: str = \"600009\") -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-个股-历史分红\n    https://webapi.cninfo.com.cn/#/company?companyid=600009\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 历史分红\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1139\"\n    params = {\"scode\": symbol}\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"http://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"http://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.post(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.rename(\n        columns={\n            \"F006D\": \"实施方案公告日期\",\n            \"F044V\": \"分红类型\",\n            \"F011N\": \"转增比例\",\n            \"F010N\": \"送股比例\",\n            \"F012N\": \"派息比例\",\n            \"F018D\": \"股权登记日\",\n            \"F020D\": \"除权日\",\n            \"F023D\": \"派息日\",\n            \"F025D\": \"股份到账日\",\n            \"F007V\": \"实施方案分红说明\",\n            \"F001V\": \"报告时间\",\n        },\n        inplace=True,\n    )\n\n    temp_df[\"实施方案公告日期\"] = pd.to_datetime(\n        temp_df[\"实施方案公告日期\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"送股比例\"] = pd.to_numeric(temp_df[\"送股比例\"], errors=\"coerce\")\n    temp_df[\"转增比例\"] = pd.to_numeric(temp_df[\"转增比例\"], errors=\"coerce\")\n    temp_df[\"派息比例\"] = pd.to_numeric(temp_df[\"派息比例\"], errors=\"coerce\")\n    temp_df[\"股权登记日\"] = pd.to_datetime(\n        temp_df[\"股权登记日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"除权日\"] = pd.to_datetime(temp_df[\"除权日\"], errors=\"coerce\").dt.date\n    temp_df[\"派息日\"] = pd.to_datetime(temp_df[\"派息日\"], errors=\"coerce\").dt.date\n    temp_df.sort_values(by=\"实施方案公告日期\", ignore_index=True, inplace=True)\n    temp_df = temp_df[\n        [\n            \"实施方案公告日期\",\n            \"分红类型\",\n            \"送股比例\",\n            \"转增比例\",\n            \"派息比例\",\n            \"股权登记日\",\n            \"除权日\",\n            \"派息日\",\n            \"股份到账日\",\n            \"实施方案分红说明\",\n            \"报告时间\",\n        ]\n    ]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_dividend_cninfo_df = stock_dividend_cninfo(symbol=\"600009\")\n    print(stock_dividend_cninfo_df)\n"
  },
  {
    "path": "akshare/stock/stock_dzjy_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/1/13 22:30\nDesc: 东方财富网-数据中心-大宗交易-市场统计\nhttps://data.eastmoney.com/dzjy/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_dzjy_sctj() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-大宗交易-市场统计\n    https://data.eastmoney.com/dzjy/dzjy_sctj.html\n    :return: 市场统计表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"TRADE_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"PRT_BLOCKTRADE_MARKET_STA\",\n        \"columns\": \"TRADE_DATE,SZ_INDEX,SZ_CHANGE_RATE,BLOCKTRADE_DEAL_AMT,PREMIUM_DEAL_AMT,\"\n        \"PREMIUM_RATIO,DISCOUNT_DEAL_AMT,DISCOUNT_RATIO\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = int(data_json[\"result\"][\"pages\"])\n    big_df = pd.DataFrame()\n    for page in range(1, total_page + 1):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df[\"index\"] + 1\n    big_df.columns = [\n        \"序号\",\n        \"交易日期\",\n        \"上证指数\",\n        \"上证指数涨跌幅\",\n        \"大宗交易成交总额\",\n        \"溢价成交总额\",\n        \"溢价成交总额占比\",\n        \"折价成交总额\",\n        \"折价成交总额占比\",\n    ]\n    big_df[\"交易日期\"] = pd.to_datetime(big_df[\"交易日期\"], errors=\"coerce\").dt.date\n    big_df[\"上证指数\"] = pd.to_numeric(big_df[\"上证指数\"], errors=\"coerce\")\n    big_df[\"上证指数涨跌幅\"] = pd.to_numeric(big_df[\"上证指数涨跌幅\"], errors=\"coerce\")\n    big_df[\"大宗交易成交总额\"] = pd.to_numeric(\n        big_df[\"大宗交易成交总额\"], errors=\"coerce\"\n    )\n    big_df[\"溢价成交总额\"] = pd.to_numeric(big_df[\"溢价成交总额\"], errors=\"coerce\")\n    big_df[\"溢价成交总额占比\"] = pd.to_numeric(\n        big_df[\"溢价成交总额占比\"], errors=\"coerce\"\n    )\n    big_df[\"折价成交总额\"] = pd.to_numeric(big_df[\"折价成交总额\"], errors=\"coerce\")\n    big_df[\"折价成交总额占比\"] = pd.to_numeric(\n        big_df[\"折价成交总额占比\"], errors=\"coerce\"\n    )\n    return big_df\n\n\ndef stock_dzjy_mrmx(\n    symbol: str = \"基金\", start_date: str = \"20220104\", end_date: str = \"20220104\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-大宗交易-每日明细\n    https://data.eastmoney.com/dzjy/dzjy_mrmx.html\n    :param symbol: choice of {'A股', 'B股', '基金', '债券'}\n    :type symbol: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :return: 每日明细\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"A股\": \"1\",\n        \"B股\": \"2\",\n        \"基金\": \"3\",\n        \"债券\": \"4\",\n    }\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"SECURITY_CODE\",\n        \"sortTypes\": \"1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_DATA_BLOCKTRADE\",\n        \"columns\": \"TRADE_DATE,SECURITY_CODE,SECUCODE,SECURITY_NAME_ABBR,CHANGE_RATE,CLOSE_PRICE,\"\n        \"DEAL_PRICE,PREMIUM_RATIO,DEAL_VOLUME,DEAL_AMT,TURNOVER_RATE,BUYER_NAME,SELLER_NAME,\"\n        \"CHANGE_RATE_1DAYS,CHANGE_RATE_5DAYS,CHANGE_RATE_10DAYS,CHANGE_RATE_20DAYS,BUYER_CODE,SELLER_CODE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"\"\"(SECURITY_TYPE_WEB={symbol_map[symbol]})(TRADE_DATE>=\n        '{\"-\".join([start_date[:4], start_date[4:6], start_date[6:]])}')(TRADE_DATE<=\n        '{\"-\".join([end_date[:4], end_date[4:6], end_date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    if not data_json[\"result\"][\"data\"]:\n        return pd.DataFrame()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    if symbol in {\"A股\"}:\n        temp_df.columns = [\n            \"序号\",\n            \"交易日期\",\n            \"证券代码\",\n            \"-\",\n            \"证券简称\",\n            \"涨跌幅\",\n            \"收盘价\",\n            \"成交价\",\n            \"折溢率\",\n            \"成交量\",\n            \"成交额\",\n            \"成交额/流通市值\",\n            \"买方营业部\",\n            \"卖方营业部\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n        temp_df[\"交易日期\"] = pd.to_datetime(\n            temp_df[\"交易日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df = temp_df[\n            [\n                \"序号\",\n                \"交易日期\",\n                \"证券代码\",\n                \"证券简称\",\n                \"涨跌幅\",\n                \"收盘价\",\n                \"成交价\",\n                \"折溢率\",\n                \"成交量\",\n                \"成交额\",\n                \"成交额/流通市值\",\n                \"买方营业部\",\n                \"卖方营业部\",\n            ]\n        ]\n        temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n        temp_df[\"收盘价\"] = pd.to_numeric(temp_df[\"收盘价\"], errors=\"coerce\")\n        temp_df[\"成交价\"] = pd.to_numeric(temp_df[\"成交价\"], errors=\"coerce\")\n        temp_df[\"折溢率\"] = pd.to_numeric(temp_df[\"折溢率\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"成交额/流通市值\"] = pd.to_numeric(\n            temp_df[\"成交额/流通市值\"], errors=\"coerce\"\n        )\n    if symbol in {\"B股\", \"基金\", \"债券\"}:\n        temp_df.columns = [\n            \"序号\",\n            \"交易日期\",\n            \"证券代码\",\n            \"-\",\n            \"证券简称\",\n            \"-\",\n            \"-\",\n            \"成交价\",\n            \"-\",\n            \"成交量\",\n            \"成交额\",\n            \"-\",\n            \"买方营业部\",\n            \"卖方营业部\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n        temp_df[\"交易日期\"] = pd.to_datetime(\n            temp_df[\"交易日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df = temp_df[\n            [\n                \"序号\",\n                \"交易日期\",\n                \"证券代码\",\n                \"证券简称\",\n                \"成交价\",\n                \"成交量\",\n                \"成交额\",\n                \"买方营业部\",\n                \"卖方营业部\",\n            ]\n        ]\n        temp_df[\"成交价\"] = pd.to_numeric(temp_df[\"成交价\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_dzjy_mrtj(\n    start_date: str = \"20220105\", end_date: str = \"20220105\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-大宗交易-每日统计\n    https://data.eastmoney.com/dzjy/dzjy_mrtj.html\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :return: 每日统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"TURNOVERRATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_BLOCKTRADE_STA\",\n        \"columns\": \"TRADE_DATE,SECURITY_CODE,SECUCODE,SECURITY_NAME_ABBR,CHANGE_RATE,\"\n        \"CLOSE_PRICE,AVERAGE_PRICE,PREMIUM_RATIO,DEAL_NUM,VOLUME,DEAL_AMT,\"\n        \"TURNOVERRATE,D1_CLOSE_ADJCHRATE,D5_CLOSE_ADJCHRATE,D10_CLOSE_ADJCHRATE,D20_CLOSE_ADJCHRATE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"(TRADE_DATE>='{'-'.join([start_date[:4], start_date[4:6], start_date[6:]])}')(TRADE_DATE<=\"\n        f\"'{'-'.join([end_date[:4], end_date[4:6], end_date[6:]])}')\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    temp_df.columns = [\n        \"序号\",\n        \"交易日期\",\n        \"证券代码\",\n        \"-\",\n        \"证券简称\",\n        \"涨跌幅\",\n        \"收盘价\",\n        \"成交价\",\n        \"折溢率\",\n        \"成交笔数\",\n        \"成交总量\",\n        \"成交总额\",\n        \"成交总额/流通市值\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df[\"交易日期\"] = pd.to_datetime(temp_df[\"交易日期\"], errors=\"coerce\").dt.date\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"交易日期\",\n            \"证券代码\",\n            \"证券简称\",\n            \"涨跌幅\",\n            \"收盘价\",\n            \"成交价\",\n            \"折溢率\",\n            \"成交笔数\",\n            \"成交总量\",\n            \"成交总额\",\n            \"成交总额/流通市值\",\n        ]\n    ]\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"收盘价\"] = pd.to_numeric(temp_df[\"收盘价\"], errors=\"coerce\")\n    temp_df[\"成交价\"] = pd.to_numeric(temp_df[\"成交价\"], errors=\"coerce\")\n    temp_df[\"折溢率\"] = pd.to_numeric(temp_df[\"折溢率\"], errors=\"coerce\")\n    temp_df[\"成交笔数\"] = pd.to_numeric(temp_df[\"成交笔数\"], errors=\"coerce\")\n    temp_df[\"成交总量\"] = pd.to_numeric(temp_df[\"成交总量\"], errors=\"coerce\")\n    temp_df[\"成交总额\"] = pd.to_numeric(temp_df[\"成交总额\"], errors=\"coerce\")\n    temp_df[\"成交总额/流通市值\"] = pd.to_numeric(\n        temp_df[\"成交总额/流通市值\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_dzjy_hygtj(symbol: str = \"近三月\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-大宗交易-活跃 A 股统计\n    https://data.eastmoney.com/dzjy/dzjy_hygtj.html\n    :param symbol: choice of {'近一月', '近三月', '近六月', '近一年'}\n    :type symbol: str\n    :return: 活跃 A 股统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    period_map = {\n        \"近一月\": \"1\",\n        \"近三月\": \"3\",\n        \"近六月\": \"6\",\n        \"近一年\": \"12\",\n    }\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"DEAL_NUM,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_BLOCKTRADE_ACSTA\",\n        \"columns\": \"SECURITY_CODE,SECUCODE,SECURITY_NAME_ABBR,CLOSE_PRICE,CHANGE_RATE,TRADE_DATE,\"\n        \"DEAL_AMT,PREMIUM_RATIO,SUM_TURNOVERRATE,DEAL_NUM,PREMIUM_TIMES,DISCOUNT_TIMES,\"\n        \"D1_AVG_ADJCHRATE,D5_AVG_ADJCHRATE,D10_AVG_ADJCHRATE,D20_AVG_ADJCHRATE,DATE_TYPE_CODE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"(DATE_TYPE_CODE={period_map[symbol]})\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    for page in range(1, int(total_page) + 1):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"证券代码\",\n        \"_\",\n        \"证券简称\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"最近上榜日\",\n        \"总成交额\",\n        \"折溢率\",\n        \"成交总额/流通市值\",\n        \"上榜次数-总计\",\n        \"上榜次数-溢价\",\n        \"上榜次数-折价\",\n        \"上榜日后平均涨跌幅-1日\",\n        \"上榜日后平均涨跌幅-5日\",\n        \"上榜日后平均涨跌幅-10日\",\n        \"上榜日后平均涨跌幅-20日\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"证券代码\",\n            \"证券简称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"最近上榜日\",\n            \"上榜次数-总计\",\n            \"上榜次数-溢价\",\n            \"上榜次数-折价\",\n            \"总成交额\",\n            \"折溢率\",\n            \"成交总额/流通市值\",\n            \"上榜日后平均涨跌幅-1日\",\n            \"上榜日后平均涨跌幅-5日\",\n            \"上榜日后平均涨跌幅-10日\",\n            \"上榜日后平均涨跌幅-20日\",\n        ]\n    ]\n    big_df[\"最近上榜日\"] = pd.to_datetime(big_df[\"最近上榜日\"], errors=\"coerce\").dt.date\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"上榜次数-总计\"] = pd.to_numeric(big_df[\"上榜次数-总计\"], errors=\"coerce\")\n    big_df[\"上榜次数-溢价\"] = pd.to_numeric(big_df[\"上榜次数-溢价\"], errors=\"coerce\")\n    big_df[\"上榜次数-折价\"] = pd.to_numeric(big_df[\"上榜次数-折价\"], errors=\"coerce\")\n    big_df[\"总成交额\"] = pd.to_numeric(big_df[\"总成交额\"], errors=\"coerce\")\n    big_df[\"折溢率\"] = pd.to_numeric(big_df[\"折溢率\"], errors=\"coerce\")\n    big_df[\"成交总额/流通市值\"] = pd.to_numeric(\n        big_df[\"成交总额/流通市值\"], errors=\"coerce\"\n    )\n    big_df[\"上榜日后平均涨跌幅-1日\"] = pd.to_numeric(\n        big_df[\"上榜日后平均涨跌幅-1日\"], errors=\"coerce\"\n    )\n    big_df[\"上榜日后平均涨跌幅-5日\"] = pd.to_numeric(\n        big_df[\"上榜日后平均涨跌幅-5日\"], errors=\"coerce\"\n    )\n    big_df[\"上榜日后平均涨跌幅-10日\"] = pd.to_numeric(\n        big_df[\"上榜日后平均涨跌幅-10日\"], errors=\"coerce\"\n    )\n    big_df[\"上榜日后平均涨跌幅-20日\"] = pd.to_numeric(\n        big_df[\"上榜日后平均涨跌幅-20日\"], errors=\"coerce\"\n    )\n    return big_df\n\n\ndef stock_dzjy_hyyybtj(symbol: str = \"近3日\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-大宗交易-活跃营业部统计\n    https://data.eastmoney.com/dzjy/dzjy_hyyybtj.html\n    :param symbol: choice of {'当前交易日', '近3日', '近5日', '近10日', '近30日'}\n    :type symbol: str\n    :return: 活跃营业部统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    period_map = {\n        \"当前交易日\": \"1\",\n        \"近3日\": \"3\",\n        \"近5日\": \"5\",\n        \"近10日\": \"10\",\n        \"近30日\": \"30\",\n    }\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"BUYER_NUM,TOTAL_BUYAMT\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_BLOCKTRADE_OPERATEDEPTSTATISTICS\",\n        \"columns\": \"OPERATEDEPT_CODE,OPERATEDEPT_NAME,ONLIST_DATE,STOCK_DETAILS,\"\n        \"BUYER_NUM,SELLER_NUM,TOTAL_BUYAMT,TOTAL_SELLAMT,TOTAL_NETAMT,N_DATE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"(N_DATE=-{period_map[symbol]})\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    for page in range(1, int(total_page) + 1):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"_\",\n        \"营业部名称\",\n        \"最近上榜日\",\n        \"买入的股票\",\n        \"次数总计-买入\",\n        \"次数总计-卖出\",\n        \"成交金额统计-买入\",\n        \"成交金额统计-卖出\",\n        \"成交金额统计-净买入额\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"最近上榜日\",\n            \"营业部名称\",\n            \"次数总计-买入\",\n            \"次数总计-卖出\",\n            \"成交金额统计-买入\",\n            \"成交金额统计-卖出\",\n            \"成交金额统计-净买入额\",\n            \"买入的股票\",\n        ]\n    ]\n    big_df[\"最近上榜日\"] = pd.to_datetime(big_df[\"最近上榜日\"], errors=\"coerce\").dt.date\n    big_df[\"次数总计-买入\"] = pd.to_numeric(big_df[\"次数总计-买入\"], errors=\"coerce\")\n    big_df[\"次数总计-卖出\"] = pd.to_numeric(big_df[\"次数总计-卖出\"], errors=\"coerce\")\n    big_df[\"成交金额统计-买入\"] = pd.to_numeric(\n        big_df[\"成交金额统计-买入\"], errors=\"coerce\"\n    )\n    big_df[\"成交金额统计-卖出\"] = pd.to_numeric(\n        big_df[\"成交金额统计-卖出\"], errors=\"coerce\"\n    )\n    big_df[\"成交金额统计-净买入额\"] = pd.to_numeric(\n        big_df[\"成交金额统计-净买入额\"], errors=\"coerce\"\n    )\n    return big_df\n\n\ndef stock_dzjy_yybph(symbol: str = \"近三月\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-大宗交易-营业部排行\n    https://data.eastmoney.com/dzjy/dzjy_yybph.html\n    :param symbol: choice of {'近一月', '近三月', '近六月', '近一年'}\n    :type symbol: str\n    :return: 营业部排行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    period_map = {\n        \"近一月\": \"30\",\n        \"近三月\": \"90\",\n        \"近六月\": \"180\",\n        \"近一年\": \"360\",\n    }\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"D5_BUYER_NUM,D1_AVERAGE_INCREASE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_BLOCKTRADE_OPERATEDEPT_RANK\",\n        \"columns\": \"OPERATEDEPT_CODE,OPERATEDEPT_NAME,D1_BUYER_NUM,D1_AVERAGE_INCREASE,\"\n        \"D1_RISE_PROBABILITY,D5_BUYER_NUM,D5_AVERAGE_INCREASE,D5_RISE_PROBABILITY,\"\n        \"D10_BUYER_NUM,D10_AVERAGE_INCREASE,D10_RISE_PROBABILITY,D20_BUYER_NUM,\"\n        \"D20_AVERAGE_INCREASE,D20_RISE_PROBABILITY,N_DATE,RELATED_ORG_CODE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"(N_DATE=-{period_map[symbol]})\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    for page in range(1, int(total_page) + 1):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"_\",\n        \"营业部名称\",\n        \"上榜后1天-买入次数\",\n        \"上榜后1天-平均涨幅\",\n        \"上榜后1天-上涨概率\",\n        \"上榜后5天-买入次数\",\n        \"上榜后5天-平均涨幅\",\n        \"上榜后5天-上涨概率\",\n        \"上榜后10天-买入次数\",\n        \"上榜后10天-平均涨幅\",\n        \"上榜后10天-上涨概率\",\n        \"上榜后20天-买入次数\",\n        \"上榜后20天-平均涨幅\",\n        \"上榜后20天-上涨概率\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"营业部名称\",\n            \"上榜后1天-买入次数\",\n            \"上榜后1天-平均涨幅\",\n            \"上榜后1天-上涨概率\",\n            \"上榜后5天-买入次数\",\n            \"上榜后5天-平均涨幅\",\n            \"上榜后5天-上涨概率\",\n            \"上榜后10天-买入次数\",\n            \"上榜后10天-平均涨幅\",\n            \"上榜后10天-上涨概率\",\n            \"上榜后20天-买入次数\",\n            \"上榜后20天-平均涨幅\",\n            \"上榜后20天-上涨概率\",\n        ]\n    ]\n    big_df[\"上榜后1天-买入次数\"] = pd.to_numeric(\n        big_df[\"上榜后1天-买入次数\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后1天-平均涨幅\"] = pd.to_numeric(\n        big_df[\"上榜后1天-平均涨幅\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后1天-上涨概率\"] = pd.to_numeric(\n        big_df[\"上榜后1天-上涨概率\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后5天-买入次数\"] = pd.to_numeric(\n        big_df[\"上榜后5天-买入次数\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后5天-平均涨幅\"] = pd.to_numeric(\n        big_df[\"上榜后5天-平均涨幅\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后5天-上涨概率\"] = pd.to_numeric(\n        big_df[\"上榜后5天-上涨概率\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后10天-买入次数\"] = pd.to_numeric(\n        big_df[\"上榜后10天-买入次数\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后10天-平均涨幅\"] = pd.to_numeric(\n        big_df[\"上榜后10天-平均涨幅\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后10天-上涨概率\"] = pd.to_numeric(\n        big_df[\"上榜后10天-上涨概率\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后20天-买入次数\"] = pd.to_numeric(\n        big_df[\"上榜后20天-买入次数\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后20天-平均涨幅\"] = pd.to_numeric(\n        big_df[\"上榜后20天-平均涨幅\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后20天-上涨概率\"] = pd.to_numeric(\n        big_df[\"上榜后20天-上涨概率\"], errors=\"coerce\"\n    )\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_dzjy_sctj_df = stock_dzjy_sctj()\n    print(stock_dzjy_sctj_df)\n\n    stock_dzjy_mrmx_df = stock_dzjy_mrmx(\n        symbol=\"债券\", start_date=\"20220104\", end_date=\"20220104\"\n    )\n    print(stock_dzjy_mrmx_df)\n\n    stock_dzjy_mrtj_df = stock_dzjy_mrtj(start_date=\"20220105\", end_date=\"20220105\")\n    print(stock_dzjy_mrtj_df)\n\n    stock_dzjy_hygtj_df = stock_dzjy_hygtj(symbol=\"近三月\")\n    print(stock_dzjy_hygtj_df)\n\n    stock_dzjy_hyyybtj_df = stock_dzjy_hyyybtj(symbol=\"近3日\")\n    print(stock_dzjy_hyyybtj_df)\n\n    stock_dzjy_yybph_df = stock_dzjy_yybph(symbol=\"近三月\")\n    print(stock_dzjy_yybph_df)\n"
  },
  {
    "path": "akshare/stock/stock_fund_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/10 19:00\nDesc: 东方财富网-数据中心-资金流向\nhttps://data.eastmoney.com/zjlx/detail.html\n\"\"\"\n\nimport math\nimport time\nfrom functools import lru_cache\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.func import fetch_paginated_data\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_individual_fund_flow(\n    stock: str = \"600094\", market: str = \"sh\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-资金流向-个股\n    https://data.eastmoney.com/zjlx/detail.html\n    :param stock: 股票代码\n    :type stock: str\n    :param market: 股票市场; 上海证券交易所: sh, 深证证券交易所: sz, 北京证券交易所: bj;\n    :type market: str\n    :return: 近期个股的资金流数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    market_map = {\"sh\": 1, \"sz\": 0, \"bj\": 0}\n    url = \"https://push2his.eastmoney.com/api/qt/stock/fflow/daykline/get\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36\",\n    }\n    params = {\n        \"lmt\": \"0\",\n        \"klt\": \"101\",\n        \"secid\": f\"{market_map[market]}.{stock}\",\n        \"fields1\": \"f1,f2,f3,f7\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65\",\n        \"ut\": \"b2884a393a59ad64002292a3e90d46a5\",\n        \"_\": int(time.time() * 1000),\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    content_list = data_json[\"data\"][\"klines\"]\n    temp_df = pd.DataFrame([item.split(\",\") for item in content_list])\n    temp_df.columns = [\n        \"日期\",\n        \"主力净流入-净额\",\n        \"小单净流入-净额\",\n        \"中单净流入-净额\",\n        \"大单净流入-净额\",\n        \"超大单净流入-净额\",\n        \"主力净流入-净占比\",\n        \"小单净流入-净占比\",\n        \"中单净流入-净占比\",\n        \"大单净流入-净占比\",\n        \"超大单净流入-净占比\",\n        \"收盘价\",\n        \"涨跌幅\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"收盘价\",\n            \"涨跌幅\",\n            \"主力净流入-净额\",\n            \"主力净流入-净占比\",\n            \"超大单净流入-净额\",\n            \"超大单净流入-净占比\",\n            \"大单净流入-净额\",\n            \"大单净流入-净占比\",\n            \"中单净流入-净额\",\n            \"中单净流入-净占比\",\n            \"小单净流入-净额\",\n            \"小单净流入-净占比\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"主力净流入-净额\"] = pd.to_numeric(\n        temp_df[\"主力净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"小单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"小单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"中单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"中单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"大单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"大单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"超大单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"超大单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"主力净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"主力净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"小单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"小单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"中单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"中单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"大单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"大单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"超大单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"超大单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"收盘价\"] = pd.to_numeric(temp_df[\"收盘价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_individual_fund_flow_rank(indicator: str = \"5日\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-资金流向-排名\n    https://data.eastmoney.com/zjlx/detail.html\n    :param indicator: choice of {\"今日\", \"3日\", \"5日\", \"10日\"}\n    :type indicator: str\n    :return: 指定 indicator 资金流向排行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    indicator_map = {\n        \"今日\": [\n            \"f62\",\n            \"f12,f14,f2,f3,f62,f184,f66,f69,f72,f75,f78,f81,f84,f87,f204,f205,f124\",\n        ],\n        \"3日\": [\n            \"f267\",\n            \"f12,f14,f2,f127,f267,f268,f269,f270,f271,f272,f273,f274,f275,f276,f257,f258,f124\",\n        ],\n        \"5日\": [\n            \"f164\",\n            \"f12,f14,f2,f109,f164,f165,f166,f167,f168,f169,f170,f171,f172,f173,f257,f258,f124\",\n        ],\n        \"10日\": [\n            \"f174\",\n            \"f12,f14,f2,f160,f174,f175,f176,f177,f178,f179,f180,f181,f182,f183,f260,f261,f124\",\n        ],\n    }\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"fid\": indicator_map[indicator][0],\n        \"po\": \"1\",\n        \"pz\": \"100\",\n        \"pn\": \"1\",\n        \"np\": \"1\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"ut\": \"b2884a393a59ad64002292a3e90d46a5\",\n        \"fs\": \"m:0+t:6+f:!2,m:0+t:13+f:!2,m:0+t:80+f:!2,m:1+t:2+f:!2,m:1+t:23+f:!2,m:0+t:7+f:!2,m:1+t:3+f:!2\",\n        \"fields\": indicator_map[indicator][1],\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = math.ceil(data_json[\"data\"][\"total\"] / 100)\n    temp_list = []\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pn\": page,\n            }\n        )\n        r = requests.get(url, params=params, timeout=15)\n        data_json = r.json()\n        inner_temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"])\n        temp_list.append(inner_temp_df)\n    temp_df = pd.concat(temp_list, ignore_index=True)\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = range(1, len(temp_df) + 1)\n    if indicator == \"今日\":\n        temp_df.columns = [\n            \"序号\",\n            \"最新价\",\n            \"今日涨跌幅\",\n            \"代码\",\n            \"名称\",\n            \"今日主力净流入-净额\",\n            \"今日超大单净流入-净额\",\n            \"今日超大单净流入-净占比\",\n            \"今日大单净流入-净额\",\n            \"今日大单净流入-净占比\",\n            \"今日中单净流入-净额\",\n            \"今日中单净流入-净占比\",\n            \"今日小单净流入-净额\",\n            \"今日小单净流入-净占比\",\n            \"_\",\n            \"今日主力净流入-净占比\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n        temp_df = temp_df[\n            [\n                \"序号\",\n                \"代码\",\n                \"名称\",\n                \"最新价\",\n                \"今日涨跌幅\",\n                \"今日主力净流入-净额\",\n                \"今日主力净流入-净占比\",\n                \"今日超大单净流入-净额\",\n                \"今日超大单净流入-净占比\",\n                \"今日大单净流入-净额\",\n                \"今日大单净流入-净占比\",\n                \"今日中单净流入-净额\",\n                \"今日中单净流入-净占比\",\n                \"今日小单净流入-净额\",\n                \"今日小单净流入-净占比\",\n            ]\n        ]\n    elif indicator == \"3日\":\n        temp_df.columns = [\n            \"序号\",\n            \"最新价\",\n            \"代码\",\n            \"名称\",\n            \"_\",\n            \"3日涨跌幅\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"3日主力净流入-净额\",\n            \"3日主力净流入-净占比\",\n            \"3日超大单净流入-净额\",\n            \"3日超大单净流入-净占比\",\n            \"3日大单净流入-净额\",\n            \"3日大单净流入-净占比\",\n            \"3日中单净流入-净额\",\n            \"3日中单净流入-净占比\",\n            \"3日小单净流入-净额\",\n            \"3日小单净流入-净占比\",\n        ]\n        temp_df = temp_df[\n            [\n                \"序号\",\n                \"代码\",\n                \"名称\",\n                \"最新价\",\n                \"3日涨跌幅\",\n                \"3日主力净流入-净额\",\n                \"3日主力净流入-净占比\",\n                \"3日超大单净流入-净额\",\n                \"3日超大单净流入-净占比\",\n                \"3日大单净流入-净额\",\n                \"3日大单净流入-净占比\",\n                \"3日中单净流入-净额\",\n                \"3日中单净流入-净占比\",\n                \"3日小单净流入-净额\",\n                \"3日小单净流入-净占比\",\n            ]\n        ]\n    elif indicator == \"5日\":\n        temp_df.columns = [\n            \"序号\",\n            \"最新价\",\n            \"代码\",\n            \"名称\",\n            \"5日涨跌幅\",\n            \"_\",\n            \"5日主力净流入-净额\",\n            \"5日主力净流入-净占比\",\n            \"5日超大单净流入-净额\",\n            \"5日超大单净流入-净占比\",\n            \"5日大单净流入-净额\",\n            \"5日大单净流入-净占比\",\n            \"5日中单净流入-净额\",\n            \"5日中单净流入-净占比\",\n            \"5日小单净流入-净额\",\n            \"5日小单净流入-净占比\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n        temp_df = temp_df[\n            [\n                \"序号\",\n                \"代码\",\n                \"名称\",\n                \"最新价\",\n                \"5日涨跌幅\",\n                \"5日主力净流入-净额\",\n                \"5日主力净流入-净占比\",\n                \"5日超大单净流入-净额\",\n                \"5日超大单净流入-净占比\",\n                \"5日大单净流入-净额\",\n                \"5日大单净流入-净占比\",\n                \"5日中单净流入-净额\",\n                \"5日中单净流入-净占比\",\n                \"5日小单净流入-净额\",\n                \"5日小单净流入-净占比\",\n            ]\n        ]\n    elif indicator == \"10日\":\n        temp_df.columns = [\n            \"序号\",\n            \"最新价\",\n            \"代码\",\n            \"名称\",\n            \"_\",\n            \"10日涨跌幅\",\n            \"10日主力净流入-净额\",\n            \"10日主力净流入-净占比\",\n            \"10日超大单净流入-净额\",\n            \"10日超大单净流入-净占比\",\n            \"10日大单净流入-净额\",\n            \"10日大单净流入-净占比\",\n            \"10日中单净流入-净额\",\n            \"10日中单净流入-净占比\",\n            \"10日小单净流入-净额\",\n            \"10日小单净流入-净占比\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n        temp_df = temp_df[\n            [\n                \"序号\",\n                \"代码\",\n                \"名称\",\n                \"最新价\",\n                \"10日涨跌幅\",\n                \"10日主力净流入-净额\",\n                \"10日主力净流入-净占比\",\n                \"10日超大单净流入-净额\",\n                \"10日超大单净流入-净占比\",\n                \"10日大单净流入-净额\",\n                \"10日大单净流入-净占比\",\n                \"10日中单净流入-净额\",\n                \"10日中单净流入-净占比\",\n                \"10日小单净流入-净额\",\n                \"10日小单净流入-净占比\",\n            ]\n        ]\n    return temp_df\n\n\ndef stock_market_fund_flow() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-资金流向-大盘\n    https://data.eastmoney.com/zjlx/dpzjlx.html\n    :return: 近期大盘的资金流数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2his.eastmoney.com/api/qt/stock/fflow/daykline/get\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36\",\n    }\n    params = {\n        \"lmt\": \"0\",\n        \"klt\": \"101\",\n        \"secid\": \"1.000001\",\n        \"secid2\": \"0.399001\",\n        \"fields1\": \"f1,f2,f3,f7\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65\",\n        \"ut\": \"b2884a393a59ad64002292a3e90d46a5\",\n        \"_\": int(time.time() * 1000),\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    content_list = data_json[\"data\"][\"klines\"]\n    temp_df = pd.DataFrame([item.split(\",\") for item in content_list])\n    temp_df.columns = [\n        \"日期\",\n        \"主力净流入-净额\",\n        \"小单净流入-净额\",\n        \"中单净流入-净额\",\n        \"大单净流入-净额\",\n        \"超大单净流入-净额\",\n        \"主力净流入-净占比\",\n        \"小单净流入-净占比\",\n        \"中单净流入-净占比\",\n        \"大单净流入-净占比\",\n        \"超大单净流入-净占比\",\n        \"上证-收盘价\",\n        \"上证-涨跌幅\",\n        \"深证-收盘价\",\n        \"深证-涨跌幅\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"上证-收盘价\",\n            \"上证-涨跌幅\",\n            \"深证-收盘价\",\n            \"深证-涨跌幅\",\n            \"主力净流入-净额\",\n            \"主力净流入-净占比\",\n            \"超大单净流入-净额\",\n            \"超大单净流入-净占比\",\n            \"大单净流入-净额\",\n            \"大单净流入-净占比\",\n            \"中单净流入-净额\",\n            \"中单净流入-净占比\",\n            \"小单净流入-净额\",\n            \"小单净流入-净占比\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"上证-收盘价\"] = pd.to_numeric(temp_df[\"上证-收盘价\"], errors=\"coerce\")\n    temp_df[\"上证-涨跌幅\"] = pd.to_numeric(temp_df[\"上证-涨跌幅\"], errors=\"coerce\")\n    temp_df[\"深证-收盘价\"] = pd.to_numeric(temp_df[\"深证-收盘价\"], errors=\"coerce\")\n    temp_df[\"深证-涨跌幅\"] = pd.to_numeric(temp_df[\"深证-涨跌幅\"], errors=\"coerce\")\n    temp_df[\"主力净流入-净额\"] = pd.to_numeric(\n        temp_df[\"主力净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"主力净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"主力净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"超大单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"超大单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"超大单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"超大单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"大单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"大单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"大单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"大单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"中单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"中单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"中单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"中单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"小单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"小单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"小单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"小单净流入-净占比\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_sector_fund_flow_rank(\n    indicator: str = \"今日\", sector_type: str = \"行业资金流\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-资金流向-板块资金流-排名\n    https://data.eastmoney.com/bkzj/hy.html\n    :param indicator: choice of {\"今日\", \"5日\", \"10日\"}\n    :type indicator: str\n    :param sector_type: choice of {\"行业资金流\", \"概念资金流\", \"地域资金流\"}\n    :type sector_type: str\n    :return: 指定参数的资金流排名数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    sector_type_map = {\"行业资金流\": \"2\", \"概念资金流\": \"3\", \"地域资金流\": \"1\"}\n    indicator_map = {\n        \"今日\": [\n            \"f62\",\n            \"1\",\n            \"f12,f14,f2,f3,f62,f184,f66,f69,f72,f75,f78,f81,f84,f87,f204,f205,f124\",\n        ],\n        \"5日\": [\n            \"f164\",\n            \"5\",\n            \"f12,f14,f2,f109,f164,f165,f166,f167,f168,f169,f170,f171,f172,f173,f257,f258,f124\",\n        ],\n        \"10日\": [\n            \"f174\",\n            \"10\",\n            \"f12,f14,f2,f160,f174,f175,f176,f177,f178,f179,f180,f181,f182,f183,f260,f261,f124\",\n        ],\n    }\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36\",\n    }\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"b2884a393a59ad64002292a3e90d46a5\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid0\": indicator_map[indicator][0],\n        \"fs\": f\"m:90 t:{sector_type_map[sector_type]}\",\n        \"stat\": indicator_map[indicator][1],\n        \"fields\": indicator_map[indicator][2],\n        \"rt\": \"52975239\",\n        \"_\": int(time.time() * 1000),\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    total_page = math.ceil(data_json[\"data\"][\"total\"] / 100)\n    temp_list = []\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pn\": page,\n            }\n        )\n        r = requests.get(url, params=params, timeout=15)\n        data_json = r.json()\n        inner_temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"])\n        temp_list.append(inner_temp_df)\n    temp_df = pd.concat(temp_list, ignore_index=True)\n\n    if indicator == \"今日\":\n        temp_df.columns = [\n            \"-\",\n            \"今日涨跌幅\",\n            \"_\",\n            \"名称\",\n            \"今日主力净流入-净额\",\n            \"今日超大单净流入-净额\",\n            \"今日超大单净流入-净占比\",\n            \"今日大单净流入-净额\",\n            \"今日大单净流入-净占比\",\n            \"今日中单净流入-净额\",\n            \"今日中单净流入-净占比\",\n            \"今日小单净流入-净额\",\n            \"今日小单净流入-净占比\",\n            \"-\",\n            \"今日主力净流入-净占比\",\n            \"今日主力净流入最大股\",\n            \"今日主力净流入最大股代码\",\n            \"是否净流入\",\n        ]\n\n        temp_df = temp_df[\n            [\n                \"名称\",\n                \"今日涨跌幅\",\n                \"今日主力净流入-净额\",\n                \"今日主力净流入-净占比\",\n                \"今日超大单净流入-净额\",\n                \"今日超大单净流入-净占比\",\n                \"今日大单净流入-净额\",\n                \"今日大单净流入-净占比\",\n                \"今日中单净流入-净额\",\n                \"今日中单净流入-净占比\",\n                \"今日小单净流入-净额\",\n                \"今日小单净流入-净占比\",\n                \"今日主力净流入最大股\",\n            ]\n        ]\n        temp_df[\"今日主力净流入-净额\"] = pd.to_numeric(\n            temp_df[\"今日主力净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df.sort_values([\"今日主力净流入-净额\"], ascending=False, inplace=True)\n        temp_df.reset_index(inplace=True)\n        temp_df[\"index\"] = range(1, len(temp_df) + 1)\n        temp_df.rename({\"index\": \"序号\"}, axis=1, inplace=True)\n    elif indicator == \"5日\":\n        temp_df.columns = [\n            \"-\",\n            \"_\",\n            \"名称\",\n            \"5日涨跌幅\",\n            \"_\",\n            \"5日主力净流入-净额\",\n            \"5日主力净流入-净占比\",\n            \"5日超大单净流入-净额\",\n            \"5日超大单净流入-净占比\",\n            \"5日大单净流入-净额\",\n            \"5日大单净流入-净占比\",\n            \"5日中单净流入-净额\",\n            \"5日中单净流入-净占比\",\n            \"5日小单净流入-净额\",\n            \"5日小单净流入-净占比\",\n            \"5日主力净流入最大股\",\n            \"_\",\n            \"_\",\n        ]\n\n        temp_df = temp_df[\n            [\n                \"名称\",\n                \"5日涨跌幅\",\n                \"5日主力净流入-净额\",\n                \"5日主力净流入-净占比\",\n                \"5日超大单净流入-净额\",\n                \"5日超大单净流入-净占比\",\n                \"5日大单净流入-净额\",\n                \"5日大单净流入-净占比\",\n                \"5日中单净流入-净额\",\n                \"5日中单净流入-净占比\",\n                \"5日小单净流入-净额\",\n                \"5日小单净流入-净占比\",\n                \"5日主力净流入最大股\",\n            ]\n        ]\n        temp_df.sort_values([\"5日主力净流入-净额\"], ascending=False, inplace=True)\n        temp_df.reset_index(inplace=True)\n        temp_df[\"index\"] = range(1, len(temp_df) + 1)\n        temp_df.rename({\"index\": \"序号\"}, axis=1, inplace=True)\n    elif indicator == \"10日\":\n        temp_df.columns = [\n            \"-\",\n            \"_\",\n            \"名称\",\n            \"_\",\n            \"10日涨跌幅\",\n            \"10日主力净流入-净额\",\n            \"10日主力净流入-净占比\",\n            \"10日超大单净流入-净额\",\n            \"10日超大单净流入-净占比\",\n            \"10日大单净流入-净额\",\n            \"10日大单净流入-净占比\",\n            \"10日中单净流入-净额\",\n            \"10日中单净流入-净占比\",\n            \"10日小单净流入-净额\",\n            \"10日小单净流入-净占比\",\n            \"10日主力净流入最大股\",\n            \"_\",\n            \"_\",\n        ]\n\n        temp_df = temp_df[\n            [\n                \"名称\",\n                \"10日涨跌幅\",\n                \"10日主力净流入-净额\",\n                \"10日主力净流入-净占比\",\n                \"10日超大单净流入-净额\",\n                \"10日超大单净流入-净占比\",\n                \"10日大单净流入-净额\",\n                \"10日大单净流入-净占比\",\n                \"10日中单净流入-净额\",\n                \"10日中单净流入-净占比\",\n                \"10日小单净流入-净额\",\n                \"10日小单净流入-净占比\",\n                \"10日主力净流入最大股\",\n            ]\n        ]\n        temp_df.sort_values([\"10日主力净流入-净额\"], ascending=False, inplace=True)\n        temp_df.reset_index(inplace=True)\n        temp_df[\"index\"] = range(1, len(temp_df) + 1)\n        temp_df.rename({\"index\": \"序号\"}, axis=1, inplace=True)\n    return temp_df\n\n\n@lru_cache()\ndef _get_stock_sector_fund_flow_summary_code() -> dict:\n    \"\"\"\n    东方财富网-数据中心-资金流向-行业板块\n    https://data.eastmoney.com/bkzj/gn.html\n    :return: 行业板块与代码字典\n    :rtype: dict\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"fid\": \"f62\",\n        \"po\": \"1\",\n        \"pz\": \"100\",\n        \"pn\": \"1\",\n        \"np\": \"1\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"ut\": \"8dec03ba335b81bf4ebdf7b29ec27d15\",\n        \"fs\": \"m:90 t:2\",\n        \"fields\": \"f12,f14,f2,f3,f62,f184,f66,f69,f72,f75,f78,f81,f84,f87,f204,f205,f124,f1,f13\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    name_code_map = dict(zip(temp_df[\"f14\"], temp_df[\"f12\"]))\n    return name_code_map\n\n\ndef stock_sector_fund_flow_summary(\n    symbol: str = \"电源设备\", indicator: str = \"今日\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-资金流向-行业资金流-xx行业个股资金流\n    https://data.eastmoney.com/bkzj/BK1034.html\n    :param symbol: 行业名称\n    :type symbol: str\n    :param indicator: choice of {\"今日\", \"5日\", \"10日\"}\n    :type indicator: str\n    :return: xx行业个股资金流\n    :rtype: pandas.DataFrame\n    \"\"\"\n    code_name_map = _get_stock_sector_fund_flow_summary_code()\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    if indicator == \"今日\":\n        params = {\n            \"fid\": \"f62\",\n            \"po\": \"1\",\n            \"pz\": \"5000\",\n            \"pn\": \"1\",\n            \"np\": \"2\",\n            \"fltt\": \"2\",\n            \"invt\": \"2\",\n            \"fs\": f\"b:{code_name_map[symbol]}\",\n            \"fields\": \"f12,f14,f2,f3,f62,f184,f66,f69,f72,f75,f78,f81,f84,f87,f204,f205,f124,f1,f13\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"]).T\n        temp_df.reset_index(inplace=True)\n        temp_df[\"index\"] = temp_df[\"index\"].astype(int) + 1\n        temp_df.rename(\n            columns={\n                \"index\": \"序号\",\n                \"f12\": \"代码\",\n                \"f14\": \"名称\",\n                \"f2\": \"最新价\",\n                \"f3\": \"今天涨跌幅\",\n                \"f62\": \"今日主力净流入-净额\",\n                \"f184\": \"今日主力净流入-净占比\",\n                \"f66\": \"今日超大单净流入-净额\",\n                \"f69\": \"今日超大单净流入-净占比\",\n                \"f72\": \"今日大单净流入-净额\",\n                \"f75\": \"今日大单净流入-净占比\",\n                \"f78\": \"今日中单净流入-净额\",\n                \"f81\": \"今日中单净流入-净占比\",\n                \"f84\": \"今日小单净流入-净额\",\n                \"f87\": \"今日小单净流入-净占比\",\n            },\n            inplace=True,\n        )\n        temp_df = temp_df[\n            [\n                \"序号\",\n                \"代码\",\n                \"名称\",\n                \"最新价\",\n                \"今天涨跌幅\",\n                \"今日主力净流入-净额\",\n                \"今日主力净流入-净占比\",\n                \"今日超大单净流入-净额\",\n                \"今日超大单净流入-净占比\",\n                \"今日大单净流入-净额\",\n                \"今日大单净流入-净占比\",\n                \"今日中单净流入-净额\",\n                \"今日中单净流入-净占比\",\n                \"今日小单净流入-净额\",\n                \"今日小单净流入-净占比\",\n            ]\n        ]\n        temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n        temp_df[\"今天涨跌幅\"] = pd.to_numeric(temp_df[\"今天涨跌幅\"], errors=\"coerce\")\n        temp_df[\"今日主力净流入-净额\"] = pd.to_numeric(\n            temp_df[\"今日主力净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df[\"今日主力净流入-净占比\"] = pd.to_numeric(\n            temp_df[\"今日主力净流入-净占比\"], errors=\"coerce\"\n        )\n        temp_df[\"今日超大单净流入-净额\"] = pd.to_numeric(\n            temp_df[\"今日超大单净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df[\"今日超大单净流入-净占比\"] = pd.to_numeric(\n            temp_df[\"今日超大单净流入-净占比\"], errors=\"coerce\"\n        )\n        temp_df[\"今日大单净流入-净额\"] = pd.to_numeric(\n            temp_df[\"今日大单净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df[\"今日大单净流入-净占比\"] = pd.to_numeric(\n            temp_df[\"今日大单净流入-净占比\"], errors=\"coerce\"\n        )\n        temp_df[\"今日中单净流入-净额\"] = pd.to_numeric(\n            temp_df[\"今日中单净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df[\"今日中单净流入-净占比\"] = pd.to_numeric(\n            temp_df[\"今日中单净流入-净占比\"], errors=\"coerce\"\n        )\n        temp_df[\"今日小单净流入-净额\"] = pd.to_numeric(\n            temp_df[\"今日小单净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df[\"今日小单净流入-净占比\"] = pd.to_numeric(\n            temp_df[\"今日小单净流入-净占比\"], errors=\"coerce\"\n        )\n        return temp_df\n    if indicator == \"5日\":\n        params = {\n            \"fid\": \"f164\",\n            \"po\": \"1\",\n            \"pz\": \"50000\",\n            \"pn\": \"1\",\n            \"np\": \"2\",\n            \"fltt\": \"2\",\n            \"invt\": \"2\",\n            \"fs\": f\"b:{code_name_map[symbol]}\",\n            \"fields\": \"f12,f14,f2,f109,f164,f165,f166,f167,f168,f169,f170,f171,f172,f173,f257,f258,f124,f1,f13\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"]).T\n        temp_df.reset_index(inplace=True)\n        temp_df[\"index\"] = temp_df[\"index\"].astype(int) + 1\n        temp_df.rename(\n            columns={\n                \"index\": \"序号\",\n                \"f12\": \"代码\",\n                \"f14\": \"名称\",\n                \"f2\": \"最新价\",\n                \"f109\": \"5日涨跌幅\",\n                \"f164\": \"5日主力净流入-净额\",\n                \"f165\": \"5日主力净流入-净占比\",\n                \"f166\": \"5日超大单净流入-净额\",\n                \"f167\": \"5日超大单净流入-净占比\",\n                \"f168\": \"5日大单净流入-净额\",\n                \"f169\": \"5日大单净流入-净占比\",\n                \"f170\": \"5日中单净流入-净额\",\n                \"f171\": \"5日中单净流入-净占比\",\n                \"f172\": \"5日小单净流入-净额\",\n                \"f173\": \"5日小单净流入-净占比\",\n            },\n            inplace=True,\n        )\n        temp_df = temp_df[\n            [\n                \"序号\",\n                \"代码\",\n                \"名称\",\n                \"最新价\",\n                \"5日涨跌幅\",\n                \"5日主力净流入-净额\",\n                \"5日主力净流入-净占比\",\n                \"5日超大单净流入-净额\",\n                \"5日超大单净流入-净占比\",\n                \"5日大单净流入-净额\",\n                \"5日大单净流入-净占比\",\n                \"5日中单净流入-净额\",\n                \"5日中单净流入-净占比\",\n                \"5日小单净流入-净额\",\n                \"5日小单净流入-净占比\",\n            ]\n        ]\n        temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n        temp_df[\"5日涨跌幅\"] = pd.to_numeric(temp_df[\"5日涨跌幅\"], errors=\"coerce\")\n        temp_df[\"5日主力净流入-净额\"] = pd.to_numeric(\n            temp_df[\"5日主力净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df[\"5日主力净流入-净占比\"] = pd.to_numeric(\n            temp_df[\"5日主力净流入-净占比\"], errors=\"coerce\"\n        )\n        temp_df[\"5日超大单净流入-净额\"] = pd.to_numeric(\n            temp_df[\"5日超大单净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df[\"5日超大单净流入-净占比\"] = pd.to_numeric(\n            temp_df[\"5日超大单净流入-净占比\"], errors=\"coerce\"\n        )\n        temp_df[\"5日大单净流入-净额\"] = pd.to_numeric(\n            temp_df[\"5日大单净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df[\"5日大单净流入-净占比\"] = pd.to_numeric(\n            temp_df[\"5日大单净流入-净占比\"], errors=\"coerce\"\n        )\n        temp_df[\"5日中单净流入-净额\"] = pd.to_numeric(\n            temp_df[\"5日中单净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df[\"5日中单净流入-净占比\"] = pd.to_numeric(\n            temp_df[\"5日中单净流入-净占比\"], errors=\"coerce\"\n        )\n        temp_df[\"5日小单净流入-净额\"] = pd.to_numeric(\n            temp_df[\"5日小单净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df[\"5日小单净流入-净占比\"] = pd.to_numeric(\n            temp_df[\"5日小单净流入-净占比\"], errors=\"coerce\"\n        )\n        return temp_df\n    if indicator == \"10日\":\n        params = {\n            \"fid\": \"f174\",\n            \"po\": \"1\",\n            \"pz\": \"50000\",\n            \"pn\": \"1\",\n            \"np\": \"2\",\n            \"fltt\": \"2\",\n            \"invt\": \"2\",\n            \"fs\": f\"b:{code_name_map[symbol]}\",\n            \"fields\": \"f12,f14,f2,f160,f174,f175,f176,f177,f178,f179,f180,f181,f182,f183,f260,f261,f124,f1,f13\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"]).T\n        temp_df.reset_index(inplace=True)\n        temp_df[\"index\"] = temp_df[\"index\"].astype(int) + 1\n        temp_df.rename(\n            columns={\n                \"index\": \"序号\",\n                \"f12\": \"代码\",\n                \"f14\": \"名称\",\n                \"f2\": \"最新价\",\n                \"f160\": \"10日涨跌幅\",\n                \"f174\": \"10日主力净流入-净额\",\n                \"f175\": \"10日主力净流入-净占比\",\n                \"f176\": \"10日超大单净流入-净额\",\n                \"f177\": \"10日超大单净流入-净占比\",\n                \"f178\": \"10日大单净流入-净额\",\n                \"f179\": \"10日大单净流入-净占比\",\n                \"f180\": \"10日中单净流入-净额\",\n                \"f181\": \"10日中单净流入-净占比\",\n                \"f182\": \"10日小单净流入-净额\",\n                \"f183\": \"10日小单净流入-净占比\",\n            },\n            inplace=True,\n        )\n        temp_df = temp_df[\n            [\n                \"序号\",\n                \"代码\",\n                \"名称\",\n                \"最新价\",\n                \"10日涨跌幅\",\n                \"10日主力净流入-净额\",\n                \"10日主力净流入-净占比\",\n                \"10日超大单净流入-净额\",\n                \"10日超大单净流入-净占比\",\n                \"10日大单净流入-净额\",\n                \"10日大单净流入-净占比\",\n                \"10日中单净流入-净额\",\n                \"10日中单净流入-净占比\",\n                \"10日小单净流入-净额\",\n                \"10日小单净流入-净占比\",\n            ]\n        ]\n        temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n        temp_df[\"10日涨跌幅\"] = pd.to_numeric(temp_df[\"10日涨跌幅\"], errors=\"coerce\")\n        temp_df[\"10日主力净流入-净额\"] = pd.to_numeric(\n            temp_df[\"10日主力净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df[\"10日主力净流入-净占比\"] = pd.to_numeric(\n            temp_df[\"10日主力净流入-净占比\"], errors=\"coerce\"\n        )\n        temp_df[\"10日超大单净流入-净额\"] = pd.to_numeric(\n            temp_df[\"10日超大单净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df[\"10日超大单净流入-净占比\"] = pd.to_numeric(\n            temp_df[\"10日超大单净流入-净占比\"], errors=\"coerce\"\n        )\n        temp_df[\"10日大单净流入-净额\"] = pd.to_numeric(\n            temp_df[\"10日大单净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df[\"10日大单净流入-净占比\"] = pd.to_numeric(\n            temp_df[\"10日大单净流入-净占比\"], errors=\"coerce\"\n        )\n        temp_df[\"10日中单净流入-净额\"] = pd.to_numeric(\n            temp_df[\"10日中单净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df[\"10日中单净流入-净占比\"] = pd.to_numeric(\n            temp_df[\"10日中单净流入-净占比\"], errors=\"coerce\"\n        )\n        temp_df[\"10日小单净流入-净额\"] = pd.to_numeric(\n            temp_df[\"10日小单净流入-净额\"], errors=\"coerce\"\n        )\n        temp_df[\"10日小单净流入-净占比\"] = pd.to_numeric(\n            temp_df[\"10日小单净流入-净占比\"], errors=\"coerce\"\n        )\n        return temp_df\n    else:\n        return pd.DataFrame()\n\n\ndef stock_sector_fund_flow_hist(symbol: str = \"汽车服务\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-资金流向-行业资金流-行业历史资金流\n    https://data.eastmoney.com/bkzj/BK1034.html\n    :param symbol: 行业名称\n    :type symbol: str\n    :return: xx行业个股资金流\n    :rtype: pandas.DataFrame\n    \"\"\"\n    code_name_map = _get_stock_sector_fund_flow_summary_code()\n    url = \"https://push2his.eastmoney.com/api/qt/stock/fflow/daykline/get\"\n    params = {\n        \"lmt\": \"0\",\n        \"klt\": \"101\",\n        \"fields1\": \"f1,f2,f3,f7\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65\",\n        \"secid\": f\"90.{code_name_map[symbol]}\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df.columns = [\n        \"日期\",\n        \"主力净流入-净额\",\n        \"小单净流入-净额\",\n        \"中单净流入-净额\",\n        \"大单净流入-净额\",\n        \"超大单净流入-净额\",\n        \"主力净流入-净占比\",\n        \"小单净流入-净占比\",\n        \"中单净流入-净占比\",\n        \"大单净流入-净占比\",\n        \"超大单净流入-净占比\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"主力净流入-净额\",\n            \"主力净流入-净占比\",\n            \"超大单净流入-净额\",\n            \"超大单净流入-净占比\",\n            \"大单净流入-净额\",\n            \"大单净流入-净占比\",\n            \"中单净流入-净额\",\n            \"中单净流入-净占比\",\n            \"小单净流入-净额\",\n            \"小单净流入-净占比\",\n        ]\n    ]\n    temp_df[\"主力净流入-净额\"] = pd.to_numeric(\n        temp_df[\"主力净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"主力净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"主力净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"超大单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"超大单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"超大单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"超大单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"大单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"大单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"大单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"大单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"中单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"中单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"中单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"中单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"小单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"小单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"小单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"小单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\n@lru_cache()\ndef _get_stock_concept_fund_flow_summary_code() -> dict:\n    \"\"\"\n    东方财富网-数据中心-资金流向-概念资金流\n    https://data.eastmoney.com/bkzj/gn.html\n    :return: 概念与代码字典\n    :rtype: dict\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"fields\": \"f3,f12,f13,f14,f62\",\n        \"fid\": \"f62\",\n        \"fs\": \"m:90+t:3\",\n        \"ut\": \"b2884a393a59ad64002292a3e90d46a5\",\n        \"_\": int(time.time() * 1000),\n    }\n    temp_df = fetch_paginated_data(url, params)\n    name_code_map = dict(zip(temp_df[\"f14\"], temp_df[\"f12\"]))\n    return name_code_map\n\n\ndef stock_concept_fund_flow_hist(symbol: str = \"数据要素\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-资金流向-概念资金流-概念历史资金流\n    https://data.eastmoney.com/bkzj/BK0574.html\n    :param symbol: 概念名称\n    :type symbol: str\n    :return: 概念历史资金流\n    :rtype: pandas.DataFrame\n    \"\"\"\n    code_name_map = _get_stock_concept_fund_flow_summary_code()\n    url = \"https://push2his.eastmoney.com/api/qt/stock/fflow/daykline/get\"\n    params = {\n        \"lmt\": \"0\",\n        \"klt\": \"101\",\n        \"fields1\": \"f1,f2,f3,f7\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65\",\n        \"secid\": f\"90.{code_name_map[symbol]}\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df.columns = [\n        \"日期\",\n        \"主力净流入-净额\",\n        \"小单净流入-净额\",\n        \"中单净流入-净额\",\n        \"大单净流入-净额\",\n        \"超大单净流入-净额\",\n        \"主力净流入-净占比\",\n        \"小单净流入-净占比\",\n        \"中单净流入-净占比\",\n        \"大单净流入-净占比\",\n        \"超大单净流入-净占比\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"主力净流入-净额\",\n            \"主力净流入-净占比\",\n            \"超大单净流入-净额\",\n            \"超大单净流入-净占比\",\n            \"大单净流入-净额\",\n            \"大单净流入-净占比\",\n            \"中单净流入-净额\",\n            \"中单净流入-净占比\",\n            \"小单净流入-净额\",\n            \"小单净流入-净占比\",\n        ]\n    ]\n    temp_df[\"主力净流入-净额\"] = pd.to_numeric(\n        temp_df[\"主力净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"主力净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"主力净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"超大单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"超大单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"超大单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"超大单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"大单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"大单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"大单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"大单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"中单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"中单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"中单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"中单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"小单净流入-净额\"] = pd.to_numeric(\n        temp_df[\"小单净流入-净额\"], errors=\"coerce\"\n    )\n    temp_df[\"小单净流入-净占比\"] = pd.to_numeric(\n        temp_df[\"小单净流入-净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"]).dt.date\n    return temp_df\n\n\ndef stock_main_fund_flow(symbol: str = \"全部股票\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-资金流向-主力净流入排名\n    https://data.eastmoney.com/zjlx/list.html\n    :param symbol: 全部股票; choice of {\"全部股票\", \"沪深A股\", \"沪市A股\", \"科创板\", \"深市A股\", \"创业板\", \"沪市B股\", \"深市B股\"}\n    :type symbol: str\n    :return: 主力净流入排名\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"全部股票\": \"m:0+t:6+f:!2,m:0+t:13+f:!2,m:0+t:80+f:!2,m:1+t:2+f:!2,m:1+t:23+f:!2,m:0+t:7+f:!2,m:1+t:3+f:!2\",\n        \"沪深A股\": \"m:0+t:6+f:!2,m:0+t:13+f:!2,m:0+t:80+f:!2,m:1+t:2+f:!2,m:1+t:23+f:!2\",\n        \"沪市A股\": \"m:1+t:2+f:!2,m:1+t:23+f:!2\",\n        \"科创板\": \"m:1+t:23+f:!2\",\n        \"深市A股\": \"m:0+t:6+f:!2,m:0+t:13+f:!2,m:0+t:80+f:!2\",\n        \"创业板\": \"m:0+t:80+f:!2\",\n        \"沪市B股\": \"m:1+t:3+f:!2\",\n        \"深市B股\": \"m:0+t:7+f:!2\",\n    }\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"fid\": \"f184\",\n        \"po\": \"1\",\n        \"pz\": \"100\",\n        \"pn\": \"1\",\n        \"np\": \"1\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fields\": \"f2,f3,f12,f13,f14,f62,f184,f225,f165,f263,f109,f175,f264,f160,f100,f124,f265,f1\",\n        \"ut\": \"b2884a393a59ad64002292a3e90d46a5\",\n        \"fs\": symbol_map[symbol],\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"f12\": \"代码\",\n            \"f14\": \"名称\",\n            \"f2\": \"最新价\",\n            \"f184\": \"今日排行榜-主力净占比\",\n            \"f225\": \"今日排行榜-今日排名\",\n            \"f3\": \"今日排行榜-今日涨跌\",\n            \"f165\": \"5日排行榜-主力净占比\",\n            \"f263\": \"5日排行榜-5日排名\",\n            \"f109\": \"5日排行榜-5日涨跌\",\n            \"f175\": \"10日排行榜-主力净占比\",\n            \"f264\": \"10日排行榜-10日排名\",\n            \"f160\": \"10日排行榜-10日涨跌\",\n            \"f100\": \"所属板块\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"今日排行榜-主力净占比\",\n            \"今日排行榜-今日排名\",\n            \"今日排行榜-今日涨跌\",\n            \"5日排行榜-主力净占比\",\n            \"5日排行榜-5日排名\",\n            \"5日排行榜-5日涨跌\",\n            \"10日排行榜-主力净占比\",\n            \"10日排行榜-10日排名\",\n            \"10日排行榜-10日涨跌\",\n            \"所属板块\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"今日排行榜-主力净占比\"] = pd.to_numeric(\n        temp_df[\"今日排行榜-主力净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"今日排行榜-今日排名\"] = pd.to_numeric(\n        temp_df[\"今日排行榜-今日排名\"], errors=\"coerce\"\n    )\n    temp_df[\"今日排行榜-今日涨跌\"] = pd.to_numeric(\n        temp_df[\"今日排行榜-今日涨跌\"], errors=\"coerce\"\n    )\n    temp_df[\"5日排行榜-主力净占比\"] = pd.to_numeric(\n        temp_df[\"5日排行榜-主力净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"5日排行榜-5日排名\"] = pd.to_numeric(\n        temp_df[\"5日排行榜-5日排名\"], errors=\"coerce\"\n    )\n    temp_df[\"5日排行榜-5日涨跌\"] = pd.to_numeric(\n        temp_df[\"5日排行榜-5日涨跌\"], errors=\"coerce\"\n    )\n    temp_df[\"10日排行榜-主力净占比\"] = pd.to_numeric(\n        temp_df[\"10日排行榜-主力净占比\"], errors=\"coerce\"\n    )\n    temp_df[\"10日排行榜-10日排名\"] = pd.to_numeric(\n        temp_df[\"10日排行榜-10日排名\"], errors=\"coerce\"\n    )\n    temp_df[\"10日排行榜-10日涨跌\"] = pd.to_numeric(\n        temp_df[\"10日排行榜-10日涨跌\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_individual_fund_flow_df = stock_individual_fund_flow(\n        stock=\"600094\", market=\"sh\"\n    )\n    print(stock_individual_fund_flow_df)\n\n    stock_individual_fund_flow_rank_df = stock_individual_fund_flow_rank(\n        indicator=\"今日\"\n    )\n    print(stock_individual_fund_flow_rank_df)\n\n    stock_individual_fund_flow_rank_df = stock_individual_fund_flow_rank(\n        indicator=\"3日\"\n    )\n    print(stock_individual_fund_flow_rank_df)\n\n    stock_individual_fund_flow_rank_df = stock_individual_fund_flow_rank(\n        indicator=\"5日\"\n    )\n    print(stock_individual_fund_flow_rank_df)\n\n    stock_individual_fund_flow_rank_df = stock_individual_fund_flow_rank(\n        indicator=\"10日\"\n    )\n    print(stock_individual_fund_flow_rank_df)\n\n    stock_market_fund_flow_df = stock_market_fund_flow()\n    print(stock_market_fund_flow_df)\n\n    stock_sector_fund_flow_rank_df = stock_sector_fund_flow_rank(\n        indicator=\"今日\", sector_type=\"地域资金流\"\n    )\n    print(stock_sector_fund_flow_rank_df)\n\n    stock_sector_fund_flow_rank_df = stock_sector_fund_flow_rank(\n        indicator=\"今日\", sector_type=\"行业资金流\"\n    )\n    print(stock_sector_fund_flow_rank_df)\n\n    stock_sector_fund_flow_rank_df = stock_sector_fund_flow_rank(\n        indicator=\"今日\", sector_type=\"概念资金流\"\n    )\n    print(stock_sector_fund_flow_rank_df)\n\n    stock_sector_fund_flow_summary_df = stock_sector_fund_flow_summary(\n        symbol=\"文化传媒\", indicator=\"今日\"\n    )\n    print(stock_sector_fund_flow_summary_df)\n\n    stock_sector_fund_flow_hist_df = stock_sector_fund_flow_hist(symbol=\"汽车服务\")\n    print(stock_sector_fund_flow_hist_df)\n\n    stock_concept_fund_flow_hist_df = stock_concept_fund_flow_hist(symbol=\"半导体概念\")\n    print(stock_concept_fund_flow_hist_df)\n\n    stock_main_fund_flow_df = stock_main_fund_flow(symbol=\"全部股票\")\n    print(stock_main_fund_flow_df)\n"
  },
  {
    "path": "akshare/stock/stock_fund_hold.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2021/12/19 13:09\nDesc: 东方财富网-数据中心-主力数据-基金持仓\nhttp://data.eastmoney.com/zlsj/2020-06-30-1-2.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_report_fund_hold(\n    symbol: str = \"基金持仓\", date: str = \"20210331\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-主力数据-基金持仓\n    http://data.eastmoney.com/zlsj/2020-12-31-1-2.html\n    :param symbol: choice of {\"基金持仓\", \"QFII持仓\", \"社保持仓\", \"券商持仓\", \"保险持仓\", \"信托持仓\"}\n    :type symbol: str\n    :param date: 财报发布日期, xxxx-03-31, xxxx-06-30, xxxx-09-30, xxxx-12-31\n    :type date: str\n    :return: 基金持仓数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"基金持仓\": \"1\",\n        \"QFII持仓\": \"2\",\n        \"社保持仓\": \"3\",\n        \"券商持仓\": \"4\",\n        \"保险持仓\": \"5\",\n        \"信托持仓\": \"6\",\n    }\n    date = \"-\".join([date[:4], date[4:6], date[6:]])\n    url = \"http://data.eastmoney.com/dataapi/zlsj/list\"\n    params = {\n        \"date\": date,\n        \"type\": symbol_map[symbol],\n        \"zjc\": \"0\",\n        \"sortField\": \"HOULD_NUM\",\n        \"sortDirec\": \"1\",\n        \"pageNum\": \"1\",\n        \"pageSize\": \"500\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"pages\"]\n    big_df = pd.DataFrame()\n    for page in range(1, total_page + 1):\n        params = {\n            \"date\": date,\n            \"type\": symbol_map[symbol],\n            \"zjc\": \"0\",\n            \"sortField\": \"HOULD_NUM\",\n            \"sortDirec\": \"1\",\n            \"pageNum\": page,\n            \"pageSize\": \"500\",\n            \"p\": page,\n            \"pageNo\": page,\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = list(range(1, len(big_df) + 1))\n    big_df.columns = [\n        \"序号\",\n        \"_\",\n        \"股票简称\",\n        \"_\",\n        \"_\",\n        \"持有基金家数\",\n        \"持股总数\",\n        \"持股市值\",\n        \"_\",\n        \"持股变化\",\n        \"持股变动数值\",\n        \"持股变动比例\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"股票代码\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"持有基金家数\",\n            \"持股总数\",\n            \"持股市值\",\n            \"持股变化\",\n            \"持股变动数值\",\n            \"持股变动比例\",\n        ]\n    ]\n    return big_df\n\n\ndef stock_report_fund_hold_detail(\n    symbol: str = \"008286\", date: str = \"20220331\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-主力数据-基金持仓-明细\n    http://data.eastmoney.com/zlsj/ccjj/2020-12-31-008286.html\n    :param symbol: 基金代码\n    :type symbol: str\n    :param date: 财报发布日期, xxxx-03-31, xxxx-06-30, xxxx-09-30, xxxx-12-31\n    :type date: str\n    :return: 基金持仓-明细数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    date = \"-\".join([date[:4], date[4:6], date[6:]])\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"SECURITY_CODE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_MAINDATA_MAIN_POSITIONDETAILS\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"\",\n        \"filter\": f\"\"\"(HOLDER_CODE=\"{symbol}\")(REPORT_DATE='{date}')\"\"\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    temp_df.columns = [\n        \"序号\",\n        \"-\",\n        \"股票代码\",\n        \"-\",\n        \"股票简称\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"持股数\",\n        \"持股市值\",\n        \"占总股本比例\",\n        \"占流通股本比例\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"持股数\",\n            \"持股市值\",\n            \"占总股本比例\",\n            \"占流通股本比例\",\n        ]\n    ]\n    temp_df[\"持股数\"] = pd.to_numeric(temp_df[\"持股数\"])\n    temp_df[\"持股市值\"] = pd.to_numeric(temp_df[\"持股市值\"])\n    temp_df[\"占总股本比例\"] = pd.to_numeric(temp_df[\"占总股本比例\"])\n    temp_df[\"占流通股本比例\"] = pd.to_numeric(temp_df[\"占流通股本比例\"])\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_report_fund_hold_df = stock_report_fund_hold(\n        symbol=\"基金持仓\", date=\"20200630\"\n    )\n    print(stock_report_fund_hold_df)\n\n    stock_report_fund_hold_df = stock_report_fund_hold(\n        symbol=\"QFII持仓\", date=\"20210331\"\n    )\n    print(stock_report_fund_hold_df)\n\n    stock_report_fund_hold_df = stock_report_fund_hold(\n        symbol=\"社保持仓\", date=\"20210331\"\n    )\n    print(stock_report_fund_hold_df)\n\n    stock_report_fund_hold_df = stock_report_fund_hold(\n        symbol=\"券商持仓\", date=\"20210331\"\n    )\n    print(stock_report_fund_hold_df)\n\n    stock_report_fund_hold_df = stock_report_fund_hold(\n        symbol=\"保险持仓\", date=\"20210331\"\n    )\n    print(stock_report_fund_hold_df)\n\n    stock_report_fund_hold_df = stock_report_fund_hold(\n        symbol=\"信托持仓\", date=\"20210331\"\n    )\n    print(stock_report_fund_hold_df)\n\n    stock_report_fund_hold_detail_df = stock_report_fund_hold_detail(\n        symbol=\"005827\", date=\"20210331\"\n    )\n    print(stock_report_fund_hold_detail_df)\n"
  },
  {
    "path": "akshare/stock/stock_gsrl_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/8/8 21:30\nDesc: 东方财富网-数据中心-股市日历\nhttps://data.eastmoney.com/gsrl/gsdt.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_gsrl_gsdt_em(date: str = \"20230808\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-股市日历-公司动态\n    https://data.eastmoney.com/gsrl/gsdt.html\n    :param date: 交易日\n    :type date: str\n    :return: 公司动态\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"SECURITY_CODE\",\n        \"sortTypes\": \"1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"columns\": \"SECURITY_CODE,SECUCODE,SECURITY_NAME_ABBR,EVENT_TYPE,EVENT_CONTENT,TRADE_DATE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_ORGOP_ALL\",\n        \"filter\": f\"\"\"(TRADE_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df[\"index\"] + 1\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"SECURITY_CODE\": \"代码\",\n            \"SECUCODE\": \"-\",\n            \"SECURITY_NAME_ABBR\": \"简称\",\n            \"EVENT_TYPE\": \"事件类型\",\n            \"EVENT_CONTENT\": \"具体事项\",\n            \"TRADE_DATE\": \"交易日\",\n        },\n        inplace=True,\n    )\n\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"简称\",\n            \"事件类型\",\n            \"具体事项\",\n            \"交易日\",\n        ]\n    ]\n    temp_df[\"交易日\"] = pd.to_datetime(temp_df[\"交易日\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_gsrl_gsdt_em_df = stock_gsrl_gsdt_em(date=\"20230808\")\n    print(stock_gsrl_gsdt_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_hk_comparison_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/9/24 15:00\nDesc: 东方财富-港股-行业对比\nhttps://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/IndustryComparison\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_hk_growth_comparison_em(symbol: str = \"03900\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-港股-行业对比-成长性对比\n    https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/IndustryComparison\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 成长性对比\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_PCF10_INDUSTRY_HKGROWTH\",\n        \"columns\": \"SECUCODE,SECURITY_CODE,ORG_CODE,REPORT_DATE,TYPE_ID,TYPE_TYPE,\"\n        \"TYPE_NAME,TYPE_NAME_EN,CORRE_SECURITY_CODE,CORRE_SECUCODE,\"\n        \"CORRE_SECURITY_NAME,EPS_YOY,OPERATE_INCOME_YOY,OPERATE_PROFIT_YOY,\"\n        \"TOTAL_ASSET_YOY,EPS_YOY_RANK,OPINCOME_YOY_RANK,OPROFIT_YOY_RANK,TOASSET_YOY_RANK\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECUCODE=\"{symbol}.HK\")(CORRE_SECUCODE=\"{symbol}.HK\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"\",\n        \"sortTypes\": \"\",\n        \"sortColumns\": \"\",\n        \"source\": \"F10\",\n        \"client\": \"PC\",\n        \"v\": \"03313416193688571\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    field_mapping = {\n        \"CORRE_SECURITY_CODE\": \"代码\",\n        \"CORRE_SECURITY_NAME\": \"简称\",\n        \"EPS_YOY\": \"基本每股收益同比增长率\",\n        \"EPS_YOY_RANK\": \"基本每股收益同比增长率排名\",\n        \"OPERATE_INCOME_YOY\": \"营业收入同比增长率\",\n        \"OPINCOME_YOY_RANK\": \"营业收入同比增长率排名\",\n        \"OPERATE_PROFIT_YOY\": \"营业利润率同比增长率\",\n        \"OPROFIT_YOY_RANK\": \"营业利润率同比增长率排名\",\n        \"TOTAL_ASSET_YOY\": \"基本每股收总资产同比增长率益同比增长率\",\n        \"TOASSET_YOY_RANK\": \"总资产同比增长率排名\",\n    }\n    temp_df = pd.DataFrame(columns=field_mapping.values())\n    if data_json[\"result\"] is not None:\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        temp_df.rename(columns=field_mapping, inplace=True)\n        temp_df = temp_df[field_mapping.values()]\n    return temp_df\n\n\ndef stock_hk_valuation_comparison_em(symbol: str = \"03900\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-港股-行业对比-估值对比\n    https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/IndustryComparison\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 估值对比\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_PCF10_INDUSTRY_HKCVALUE\",\n        \"columns\": \"SECUCODE,SECURITY_CODE,ORG_CODE,REPORT_DATE,TYPE_ID,\"\n        \"TYPE_TYPE,TYPE_NAME,TYPE_NAME_EN,CORRE_SECURITY_CODE,\"\n        \"CORRE_SECUCODE,CORRE_SECURITY_NAME,PE_TTM,PE_LYR,PB_MQR,\"\n        \"PB_LYR,PS_TTM,PS_LYR,PCE_TTM,PCE_LYR,PE_TTM_RANK,PE_LYR_RANK,\"\n        \"PB_MQR_RANK,PB_LYR_RANK,PS_TTM_RANK,PS_LYR_RANK,PCE_TTM_RANK,PCE_LYR_RANK\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECUCODE=\"{symbol}.HK\")(CORRE_SECUCODE=\"{symbol}.HK\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"\",\n        \"sortTypes\": \"\",\n        \"sortColumns\": \"\",\n        \"source\": \"F10\",\n        \"client\": \"PC\",\n        \"v\": \"03445297742754925\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    field_mapping = {\n        \"CORRE_SECURITY_CODE\": \"代码\",\n        \"CORRE_SECURITY_NAME\": \"简称\",\n        \"PE_TTM\": \"市盈率-TTM\",\n        \"PE_TTM_RANK\": \"市盈率-TTM排名\",\n        \"PE_LYR\": \"市盈率-LYR\",\n        \"PE_LYR_RANK\": \"市盈率-LYR排名\",\n        \"PB_MQR\": \"市净率-MRQ\",\n        \"PB_MQR_RANK\": \"市净率-MRQ排名\",\n        \"PB_LYR\": \"市净率-LYR\",\n        \"PB_LYR_RANK\": \"市净率-LYR排名\",\n        \"PS_TTM\": \"市销率-TTM\",\n        \"PS_TTM_RANK\": \"市销率-TTM排名\",\n        \"PS_LYR\": \"市销率-LYR\",\n        \"PS_LYR_RANK\": \"市销率-LYR排名\",\n        \"PCE_TTM\": \"市现率-TTM\",\n        \"PCE_TTM_RANK\": \"市现率-TTM排名\",\n        \"PCE_LYR\": \"市现率-LYR\",\n        \"PCE_LYR_RANK\": \"市现率-LYR排名\",\n    }\n    temp_df = pd.DataFrame(columns=field_mapping.values())\n    if data_json[\"result\"] is not None:\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        temp_df.rename(columns=field_mapping, inplace=True)\n        temp_df = temp_df[field_mapping.values()]\n    return temp_df\n\n\ndef stock_hk_scale_comparison_em(symbol: str = \"03900\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-港股-行业对比-规模对比\n    https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/IndustryComparison\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 规模对比\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_PCF10_INDUSTRY_SCALE\",\n        \"columns\": \"SECURITY_CODE,SECUCODE,TYPE_ID,TYPE_TYPE,TYPE_NAME,\"\n        \"TYPE_NAME_EN,CORRE_SECURITY_CODE,CORRE_SECUCODE,\"\n        \"CORRE_SECURITY_NAME,MAXSTDREPORTDATE,HKSDQMV,\"\n        \"HKTOTAL_MARKET_CAP,OPERATE_INCOME,GROSS_PROFIT,\"\n        \"HKSDQMV_RANK,HKTOTAL_CAP_RANK,OPERATE_INCOME_RANK,GROSS_PROFIT_RANK\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECUCODE=\"{symbol}.HK\")(CORRE_SECUCODE=\"{symbol}.HK\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"\",\n        \"sortTypes\": \"\",\n        \"sortColumns\": \"\",\n        \"source\": \"F10\",\n        \"client\": \"PC\",\n        \"v\": \"07839693368708753\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    field_mapping = {\n        \"CORRE_SECURITY_CODE\": \"代码\",\n        \"CORRE_SECURITY_NAME\": \"简称\",\n        \"HKSDQMV\": \"总市值\",\n        \"HKSDQMV_RANK\": \"总市值排名\",\n        \"HKTOTAL_MARKET_CAP\": \"流通市值\",\n        \"HKTOTAL_CAP_RANK\": \"流通市值排名\",\n        \"OPERATE_INCOME\": \"营业总收入\",\n        \"OPERATE_INCOME_RANK\": \"营业总收入排名\",\n        \"GROSS_PROFIT\": \"净利润\",\n        \"GROSS_PROFIT_RANK\": \"净利润排名\",\n    }\n    temp_df = pd.DataFrame(columns=field_mapping.values())\n    if data_json[\"result\"] is not None:\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        temp_df.rename(columns=field_mapping, inplace=True)\n        temp_df = temp_df[field_mapping.values()]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hk_growth_comparison_em_df = stock_hk_growth_comparison_em(symbol=\"03900\")\n    print(stock_hk_growth_comparison_em_df)\n\n    stock_hk_valuation_comparison_em_df = stock_hk_valuation_comparison_em(\n        symbol=\"03900\"\n    )\n    print(stock_hk_valuation_comparison_em_df)\n\n    stock_hk_scale_comparison_em_df = stock_hk_scale_comparison_em(symbol=\"03900\")\n    print(stock_hk_scale_comparison_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_hk_famous.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/2/24 18:30\nDesc: 东方财富网-行情中心-港股市场-知名港股\nhttps://quote.eastmoney.com/center/gridlist.html#hk_wellknown\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_hk_famous_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-港股市场-知名港股\n    https://quote.eastmoney.com/center/gridlist.html#hk_wellknown\n    :return: 知名美股实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://69.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"50000\",\n        \"po\": \"1\",\n        \"np\": \"2\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"dect\": \"1\",\n        \"wbp2u\": \"|0|0|0|web\",\n        \"fid\": \"f3\",\n        \"fs\": \"b:DLMK0106\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,\"\n        \"f25,f26,f22,f33,f11,f62,f128,f136,f115,f152\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"]).T\n    temp_df.columns = [\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"代码\",\n        \"编码\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"总市值\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"市盈率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = range(1, len(temp_df) + 1)\n    temp_df.rename(columns={\"index\": \"序号\"}, inplace=True)\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"昨收\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hk_famous_spot_em_df = stock_hk_famous_spot_em()\n    print(stock_hk_famous_spot_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_hk_fhpx_ths.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/1/16 15:30\nDesc: 同花顺-港股-分红派息\nhttps://stockpage.10jqka.com.cn/HK0700/bonus/\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\n\ndef stock_hk_fhpx_detail_ths(symbol: str = \"0700\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-港股-分红派息\n    https://stockpage.10jqka.com.cn/HK0700/bonus/\n    :param symbol: 港股代码\n    :type symbol: str\n    :return: 分红派息\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://basic.10jqka.com.cn/176/HK{symbol}/bonus.html\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) \"\n        \"AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/89.0.4389.90 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    r.encoding = \"utf-8\"\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df.columns = [\n        \"公告日期\",\n        \"方案\",\n        \"除净日\",\n        \"派息日\",\n        \"过户日期起止日-起始\",\n        \"过户日期起止日-截止\",\n        \"类型\",\n        \"进度\",\n        \"以股代息\",\n    ]\n    # 剔除异常格式，由以股代息产生的异常\n    temp_df.dropna(subset=[\"派息日\", \"除净日\"], inplace=True, ignore_index=True)\n    temp_df[\"公告日期\"] = pd.to_datetime(\n        temp_df[\"公告日期\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"除净日\"] = pd.to_datetime(\n        temp_df[\"除净日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"派息日\"] = pd.to_datetime(\n        temp_df[\"派息日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"过户日期起止日-起始\"] = pd.to_datetime(\n        temp_df[\"过户日期起止日-起始\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"过户日期起止日-截止\"] = pd.to_datetime(\n        temp_df[\"过户日期起止日-截止\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df.sort_values([\"公告日期\"], inplace=True, ignore_index=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hk_fhpx_detail_ths_df = stock_hk_fhpx_detail_ths(symbol=\"0700\")\n    print(stock_hk_fhpx_detail_ths_df)\n"
  },
  {
    "path": "akshare/stock/stock_hk_hot_rank_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/3/25 22:15\nDesc: 东方财富个股人气榜-港股市场\nhttps://guba.eastmoney.com/rank/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_hk_hot_rank_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富-个股人气榜-人气榜-港股市场\n    https://guba.eastmoney.com/rank/\n    :return: 人气榜\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://emappdata.eastmoney.com/stockrank/getAllCurrHkUsList\"\n    payload = {\n        \"appId\": \"appId01\",\n        \"globalId\": \"786e4c21-70dc-435a-93bb-38\",\n        \"marketType\": \"000003\",\n        \"pageNo\": 1,\n        \"pageSize\": 100,\n    }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_rank_df = pd.DataFrame(data_json[\"data\"])\n    temp_rank_df[\"mark\"] = [\"116.\" + item[3:] for item in temp_rank_df[\"sc\"]]\n    params = {\n        \"ut\": \"f057cbcbce2a86e2866ab8877db1d059\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fields\": \"f14,f3,f12,f2\",\n        \"secids\": \",\".join(temp_rank_df[\"mark\"]) + \",?v=08926209912590994\",\n    }\n    url = \"https://push2.eastmoney.com/api/qt/ulist.np/get\"\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"])\n    temp_df.columns = [\"最新价\", \"涨跌幅\", \"代码\", \"股票名称\"]\n    temp_df[\"当前排名\"] = temp_rank_df[\"rk\"]\n    temp_df[\"代码\"] = temp_rank_df[\"sc\"].str.split(\"|\").str[1]\n    temp_df = temp_df[\n        [\n            \"当前排名\",\n            \"代码\",\n            \"股票名称\",\n            \"最新价\",\n            \"涨跌幅\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_hk_hot_rank_detail_em(symbol: str = \"00700\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-个股人气榜-历史趋势\n    https://guba.eastmoney.com/rank/stock?code=HK_00700\n    :param symbol: 带市场表示的证券代码\n    :type symbol: str\n    :return: 个股的历史趋势\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url_rank = \"https://emappdata.eastmoney.com/stockrank/getHisHkUsList\"\n    payload = {\n        \"appId\": \"appId01\",\n        \"globalId\": \"786e4c21-70dc-435a-93bb-38\",\n        \"marketType\": \"000003\",\n        \"srcSecurityCode\": f\"HK|{symbol}\",\n    }\n    r = requests.post(url_rank, json=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"证券代码\"] = symbol\n    temp_df.columns = [\"时间\", \"排名\", \"证券代码\"]\n    temp_df = temp_df[[\"时间\", \"排名\", \"证券代码\"]]\n    return temp_df\n\n\ndef stock_hk_hot_rank_detail_realtime_em(symbol: str = \"00700\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-个股人气榜-实时变动\n    https://guba.eastmoney.com/rank/stock?code=HK_00700\n    :param symbol: 带市场表示的证券代码\n    :type symbol: str\n    :return: 实时变动\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://emappdata.eastmoney.com/stockrank/getCurrentHkUsList\"\n    payload = {\n        \"appId\": \"appId01\",\n        \"globalId\": \"786e4c21-70dc-435a-93bb-38\",\n        \"marketType\": \"000003\",\n        \"srcSecurityCode\": f\"HK|{symbol}\",\n    }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"时间\", \"排名\"]\n    return temp_df\n\n\ndef stock_hk_hot_rank_latest_em(symbol: str = \"00700\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-个股人气榜-最新排名\n    https://guba.eastmoney.com/rank/stock?code=HK_00700\n    :param symbol: 带市场表示的证券代码\n    :type symbol: str\n    :return: 最新排名\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://emappdata.eastmoney.com/stockrank/getCurrentHkUsLatest\"\n    payload = {\n        \"appId\": \"appId01\",\n        \"globalId\": \"786e4c21-70dc-435a-93bb-38\",\n        \"marketType\": \"000003\",\n        \"srcSecurityCode\": f\"HK|{symbol}\",\n    }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame.from_dict(data_json[\"data\"], orient=\"index\")\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\"item\", \"value\"]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hk_hot_rank_em_df = stock_hk_hot_rank_em()\n    print(stock_hk_hot_rank_em_df)\n\n    stock_hk_hot_rank_detail_em_df = stock_hk_hot_rank_detail_em(symbol=\"00700\")\n    print(stock_hk_hot_rank_detail_em_df)\n\n    stock_hk_hot_rank_detail_realtime_em_df = stock_hk_hot_rank_detail_realtime_em(\n        symbol=\"00700\"\n    )\n    print(stock_hk_hot_rank_detail_realtime_em_df)\n\n    stock_hk_hot_rank_latest_em_df = stock_hk_hot_rank_latest_em(symbol=\"00700\")\n    print(stock_hk_hot_rank_latest_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_hk_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/3/15 23:00\nDesc: 新浪财经-港股-实时行情数据和历史行情数据(包含前复权和后复权因子)\nhttps://stock.finance.sina.com.cn/hkstock/quotes/00700.html\n\"\"\"\n\nimport pandas as pd\nfrom py_mini_racer import MiniRacer\nimport requests\n\nfrom akshare.stock.cons import (\n    hk_js_decode,\n    hk_sina_stock_hist_url,\n    hk_sina_stock_hist_hfq_url,\n    hk_sina_stock_hist_qfq_url,\n)\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_hk_spot() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-港股的所有港股的实时行情数据\n    https://vip.stock.finance.sina.com.cn/mkt/#qbgg_hk\n    :return: 实时行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHKStockData\"\n    params = {\n        \"page\": \"1\",\n        \"num\": \"60\",\n        \"sort\": \"symbol\",\n        \"asc\": \"1\",\n        \"node\": \"qbgg_hk\",\n        \"_s_r_a\": \"init\",\n    }\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, 100), leave=False):\n        params[\"page\"] = str(page)\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        if not data_json:\n            break\n        temp_df = pd.DataFrame(data_json)\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.columns = [\n        \"代码\",\n        \"中文名称\",\n        \"英文名称\",\n        \"交易类型\",\n        \"最新价\",\n        \"昨收\",\n        \"今开\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"-\",\n        \"成交额\",\n        \"日期时间\",\n        \"买一\",\n        \"卖一\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"涨跌额\",\n        \"涨跌幅\",\n        \"-\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"日期时间\",\n            \"代码\",\n            \"中文名称\",\n            \"英文名称\",\n            \"交易类型\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"昨收\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"买一\",\n            \"卖一\",\n        ]\n    ]\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"涨跌额\"] = pd.to_numeric(big_df[\"涨跌额\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"昨收\"] = pd.to_numeric(big_df[\"昨收\"], errors=\"coerce\")\n    big_df[\"今开\"] = pd.to_numeric(big_df[\"今开\"], errors=\"coerce\")\n    big_df[\"最高\"] = pd.to_numeric(big_df[\"最高\"], errors=\"coerce\")\n    big_df[\"最低\"] = pd.to_numeric(big_df[\"最低\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    big_df[\"成交额\"] = pd.to_numeric(big_df[\"成交额\"], errors=\"coerce\")\n    big_df[\"买一\"] = pd.to_numeric(big_df[\"买一\"], errors=\"coerce\")\n    big_df[\"卖一\"] = pd.to_numeric(big_df[\"卖一\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_hk_daily(symbol: str = \"00981\", adjust: str = \"\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-港股-个股的历史行情数据\n    https://stock.finance.sina.com.cn/hkstock/quotes/02912.html\n    :param symbol: 可以使用 ak.stock_hk_spot() 获取\n    :type symbol: str\n    :param adjust: \"\": 返回未复权的数据 ; qfq: 返回前复权后的数据; qfq-factor: 返回前复权因子和调整;\n    :type adjust: str\n    :return: 指定 adjust 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    r = requests.get(hk_sina_stock_hist_url.format(symbol))\n    js_code = MiniRacer()\n    js_code.eval(hk_js_decode)\n    dict_list = js_code.call(\n        \"d\", r.text.split(\"=\")[1].split(\";\")[0].replace('\"', \"\")\n    )  # 执行js解密代码\n    data_df = pd.DataFrame(dict_list)\n    data_df.index = pd.to_datetime(data_df[\"date\"]).dt.date\n    del data_df[\"date\"]\n    data_df = data_df.astype(\"float\")\n\n    if adjust == \"\":\n        data_df.reset_index(inplace=True)\n        data_df[\"date\"] = pd.to_datetime(data_df[\"date\"]).dt.date\n        return data_df\n\n    if adjust == \"hfq\":\n        r = requests.get(hk_sina_stock_hist_hfq_url.format(symbol))\n        try:\n            hfq_factor_df = pd.DataFrame(\n                eval(r.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"]\n            )\n            if len(hfq_factor_df) == 1:\n                data_df.reset_index(inplace=True)\n                data_df[\"date\"] = pd.to_datetime(data_df[\"date\"]).dt.date\n                return data_df\n        except SyntaxError:\n            data_df.reset_index(inplace=True)\n            data_df[\"date\"] = pd.to_datetime(data_df[\"date\"]).dt.date\n            return data_df\n        hfq_factor_df.columns = [\"date\", \"hfq_factor\", \"cash\"]\n        hfq_factor_df.index = pd.to_datetime(hfq_factor_df.date)\n        del hfq_factor_df[\"date\"]\n\n        # 处理复权因子\n        temp_date_range = pd.date_range(\n            \"1900-01-01\", hfq_factor_df.index[0].isoformat()\n        )\n        temp_df = pd.DataFrame(range(len(temp_date_range)), temp_date_range)\n        new_range = pd.merge(\n            temp_df, hfq_factor_df, left_index=True, right_index=True, how=\"outer\"\n        )\n        new_range.ffill(inplace=True)\n        new_range = new_range.iloc[:, [1, 2]]\n        temp_df = pd.merge(\n            data_df, new_range, left_index=True, right_index=True, how=\"outer\"\n        )\n        temp_df.ffill(inplace=True)\n        temp_df.drop_duplicates(\n            subset=[\"open\", \"high\", \"low\", \"close\", \"volume\"], inplace=True\n        )\n        temp_df = temp_df.astype(float)\n        temp_df[\"open\"] = temp_df[\"open\"] * temp_df[\"hfq_factor\"] + temp_df[\"cash\"]\n        temp_df[\"high\"] = temp_df[\"high\"] * temp_df[\"hfq_factor\"] + temp_df[\"cash\"]\n        temp_df[\"close\"] = temp_df[\"close\"] * temp_df[\"hfq_factor\"] + temp_df[\"cash\"]\n        temp_df[\"low\"] = temp_df[\"low\"] * temp_df[\"hfq_factor\"] + temp_df[\"cash\"]\n        temp_df = temp_df.apply(lambda x: round(x, 4))\n        temp_df.dropna(how=\"any\", inplace=True)\n        temp_df = temp_df.iloc[:, :-2]\n        temp_df.reset_index(inplace=True)\n        temp_df.rename({\"index\": \"date\"}, axis=\"columns\", inplace=True)\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n        return temp_df\n\n    if adjust == \"qfq\":\n        r = requests.get(hk_sina_stock_hist_qfq_url.format(symbol))\n        try:\n            qfq_factor_df = pd.DataFrame(\n                eval(r.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"]\n            )\n            if len(qfq_factor_df) == 1:\n                data_df.reset_index(inplace=True)\n                data_df[\"date\"] = pd.to_datetime(data_df[\"date\"]).dt.date\n                return data_df\n\n        except SyntaxError:\n            data_df.reset_index(inplace=True)\n            data_df[\"date\"] = pd.to_datetime(data_df[\"date\"]).dt.date\n            return data_df\n        qfq_factor_df.columns = [\"date\", \"qfq_factor\"]\n        qfq_factor_df.index = pd.to_datetime(qfq_factor_df.date)\n        del qfq_factor_df[\"date\"]\n\n        temp_date_range = pd.date_range(\n            \"1900-01-01\", qfq_factor_df.index[0].isoformat()\n        )\n        temp_df = pd.DataFrame(range(len(temp_date_range)), temp_date_range)\n        new_range = pd.merge(\n            temp_df, qfq_factor_df, left_index=True, right_index=True, how=\"outer\"\n        )\n        new_range.ffill(inplace=True)\n        new_range = new_range.iloc[:, [1]]\n        temp_df = pd.merge(\n            data_df, new_range, left_index=True, right_index=True, how=\"outer\"\n        )\n        temp_df.ffill(inplace=True)\n        temp_df.drop_duplicates(\n            subset=[\"open\", \"high\", \"low\", \"close\", \"volume\"], inplace=True\n        )\n        temp_df = temp_df.astype(float)\n        temp_df[\"open\"] = temp_df[\"open\"] * temp_df[\"qfq_factor\"]\n        temp_df[\"high\"] = temp_df[\"high\"] * temp_df[\"qfq_factor\"]\n        temp_df[\"close\"] = temp_df[\"close\"] * temp_df[\"qfq_factor\"]\n        temp_df[\"low\"] = temp_df[\"low\"] * temp_df[\"qfq_factor\"]\n        temp_df = temp_df.apply(lambda x: round(x, 4))\n        temp_df.dropna(how=\"any\", inplace=True)\n        temp_df = temp_df.iloc[:, :-1]\n        temp_df.reset_index(inplace=True)\n        temp_df.rename({\"index\": \"date\"}, axis=\"columns\", inplace=True)\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n        return temp_df\n\n    if adjust == \"hfq-factor\":\n        r = requests.get(hk_sina_stock_hist_hfq_url.format(symbol))\n        hfq_factor_df = pd.DataFrame(eval(r.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"])\n        hfq_factor_df.columns = [\"date\", \"hfq_factor\", \"cash\"]\n        hfq_factor_df.index = pd.to_datetime(hfq_factor_df.date)\n        del hfq_factor_df[\"date\"]\n        hfq_factor_df.reset_index(inplace=True)\n        hfq_factor_df[\"date\"] = pd.to_datetime(hfq_factor_df[\"date\"]).dt.date\n        return hfq_factor_df\n\n    if adjust == \"qfq-factor\":\n        r = requests.get(hk_sina_stock_hist_qfq_url.format(symbol))\n        qfq_factor_df = pd.DataFrame(eval(r.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"])\n        qfq_factor_df.columns = [\"date\", \"qfq_factor\"]\n        qfq_factor_df.index = pd.to_datetime(qfq_factor_df.date)\n        del qfq_factor_df[\"date\"]\n        qfq_factor_df.reset_index(inplace=True)\n        qfq_factor_df[\"date\"] = pd.to_datetime(qfq_factor_df[\"date\"]).dt.date\n        return qfq_factor_df\n    else:\n        return pd.DataFrame()\n\n\nif __name__ == \"__main__\":\n    stock_hk_daily_hfq_df = stock_hk_daily(symbol=\"00700\", adjust=\"\")\n    print(stock_hk_daily_hfq_df)\n\n    stock_hk_daily_hfq_df = stock_hk_daily(symbol=\"00700\", adjust=\"hfq\")\n    print(stock_hk_daily_hfq_df)\n\n    stock_hk_daily_hfq_df = stock_hk_daily(symbol=\"01591\", adjust=\"hfq\")\n    print(stock_hk_daily_hfq_df)\n\n    stock_hk_daily_hfq_df = stock_hk_daily(symbol=\"00700\", adjust=\"qfq\")\n    print(stock_hk_daily_hfq_df)\n\n    stock_hk_daily_df = stock_hk_daily(symbol=\"01302\", adjust=\"qfq\")\n    print(stock_hk_daily_df)\n\n    stock_hk_daily_hfq_factor_df = stock_hk_daily(symbol=\"00700\", adjust=\"hfq-factor\")\n    print(stock_hk_daily_hfq_factor_df)\n\n    stock_hk_spot_df = stock_hk_spot()\n    print(stock_hk_spot_df)\n"
  },
  {
    "path": "akshare/stock/stock_hold_control_cninfo.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/7/24 23:30\nDesc: 巨潮资讯-数据中心-专题统计-股东股本-实际控制人持股变动\nhttps://webapi.cninfo.com.cn/#/thematicStatistics\n\n巨潮资讯-数据中心-专题统计-股东股本-高管持股变动明细\nhttps://webapi.cninfo.com.cn/#/thematicStatistics\n\"\"\"\n\nimport datetime\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_cninfo(file: str = \"cninfo.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef stock_hold_control_cninfo(symbol: str = \"全部\") -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-专题统计-股东股本-实际控制人持股变动\n    https://webapi.cninfo.com.cn/#/thematicStatistics\n    :param symbol: choice of {\"单独控制\", \"实际控制人\", \"一致行动人\", \"家族控制\", \"全部\"}; 从 2010 开始\n    :type symbol: str\n    :return: 实际控制人持股变动\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"单独控制\": \"069001\",\n        \"实际控制人\": \"069002\",\n        \"一致行动人\": \"069003\",\n        \"家族控制\": \"069004\",\n        \"全部\": \"\",\n    }\n    url = \"https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1033\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"ctype\": symbol_map[symbol],\n    }\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.columns = [\n        \"控股比例\",\n        \"控股数量\",\n        \"证券简称\",\n        \"实际控制人名称\",\n        \"直接控制人名称\",\n        \"控制类型\",\n        \"证券代码\",\n        \"变动日期\",\n    ]\n    temp_df = temp_df[\n        [\n            \"证券代码\",\n            \"证券简称\",\n            \"变动日期\",\n            \"实际控制人名称\",\n            \"控股数量\",\n            \"控股比例\",\n            \"直接控制人名称\",\n            \"控制类型\",\n        ]\n    ]\n    temp_df[\"变动日期\"] = pd.to_datetime(temp_df[\"变动日期\"], errors=\"coerce\").dt.date\n    temp_df[\"控股数量\"] = pd.to_numeric(temp_df[\"控股数量\"], errors=\"coerce\")\n    temp_df[\"控股比例\"] = pd.to_numeric(temp_df[\"控股比例\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_hold_management_detail_cninfo(symbol: str = \"增持\") -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-专题统计-股东股本-高管持股变动明细\n    https://webapi.cninfo.com.cn/#/thematicStatistics\n    :param symbol: choice of {\"增持\", \"减持\"}\n    :type symbol: str\n    :return: 高管持股变动明细\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"增持\": \"B\",\n        \"减持\": \"S\",\n    }\n    current_date = datetime.datetime.now().date().isoformat()\n    url = \"https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1030\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Accept-Enckey\": mcode,\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"sdate\": str(int(current_date[:4]) - 1) + current_date[4:],\n        \"edate\": current_date,\n        \"varytype\": symbol_map[symbol],\n    }\n    r = requests.post(url, headers=headers, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.columns = [\n        \"证券简称\",\n        \"公告日期\",\n        \"高管姓名\",\n        \"期末市值\",\n        \"成交均价\",\n        \"证券代码\",\n        \"变动比例\",\n        \"变动数量\",\n        \"截止日期\",\n        \"期末持股数量\",\n        \"期初持股数量\",\n        \"变动人与董监高关系\",\n        \"董监高职务\",\n        \"董监高姓名\",\n        \"数据来源\",\n        \"持股变动原因\",\n    ]\n    temp_df = temp_df[\n        [\n            \"证券代码\",\n            \"证券简称\",\n            \"截止日期\",\n            \"公告日期\",\n            \"高管姓名\",\n            \"董监高姓名\",\n            \"董监高职务\",\n            \"变动人与董监高关系\",\n            \"期初持股数量\",\n            \"期末持股数量\",\n            \"变动数量\",\n            \"变动比例\",\n            \"成交均价\",\n            \"期末市值\",\n            \"持股变动原因\",\n            \"数据来源\",\n        ]\n    ]\n    temp_df[\"截止日期\"] = pd.to_datetime(temp_df[\"截止日期\"], errors=\"coerce\").dt.date\n    temp_df[\"公告日期\"] = pd.to_datetime(temp_df[\"公告日期\"], errors=\"coerce\").dt.date\n    temp_df[\"期初持股数量\"] = pd.to_numeric(temp_df[\"期初持股数量\"], errors=\"coerce\")\n    temp_df[\"期末持股数量\"] = pd.to_numeric(temp_df[\"期末持股数量\"], errors=\"coerce\")\n    temp_df[\"变动数量\"] = pd.to_numeric(temp_df[\"变动数量\"], errors=\"coerce\")\n    temp_df[\"变动比例\"] = pd.to_numeric(temp_df[\"变动比例\"], errors=\"coerce\")\n    temp_df[\"成交均价\"] = pd.to_numeric(temp_df[\"成交均价\"], errors=\"coerce\")\n    temp_df[\"期末市值\"] = pd.to_numeric(temp_df[\"期末市值\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_hold_change_cninfo(symbol: str = \"全部\") -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-专题统计-股东股本-股本变动\n    https://webapi.cninfo.com.cn/#/thematicStatistics\n    :param symbol: choice of {\"深市主板\", \"沪市\", \"创业板\", \"科创板\", \"北交所\", \"全部\"}\n    :type symbol: str\n    :return: 股本变动\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"深市主板\": \"012002\",\n        \"沪市\": \"012001\",\n        \"创业板\": \"012015\",\n        \"科创板\": \"012029\",\n        \"北交所\": \"012046\",\n        \"全部\": \"\",\n    }\n    url = \"https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1029\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"/\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"market\": symbol_map[symbol],\n    }\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.columns = [\n        \"已流通股份\",\n        \"总股本\",\n        \"交易市场\",\n        \"证券简称\",\n        \"公告日期\",\n        \"变动原因\",\n        \"证券代码\",\n        \"变动日期\",\n        \"流通受限股份\",\n        \"已流通比例\",\n    ]\n    temp_df = temp_df[\n        [\n            \"证券代码\",\n            \"证券简称\",\n            \"交易市场\",\n            \"公告日期\",\n            \"变动日期\",\n            \"变动原因\",\n            \"总股本\",\n            \"已流通股份\",\n            \"已流通比例\",\n            \"流通受限股份\",\n        ]\n    ]\n    temp_df[\"变动日期\"] = pd.to_datetime(temp_df[\"变动日期\"], errors=\"coerce\").dt.date\n    temp_df[\"公告日期\"] = pd.to_datetime(temp_df[\"公告日期\"], errors=\"coerce\").dt.date\n    temp_df[\"总股本\"] = pd.to_numeric(temp_df[\"总股本\"], errors=\"coerce\")\n    temp_df[\"已流通股份\"] = pd.to_numeric(temp_df[\"已流通股份\"], errors=\"coerce\")\n    temp_df[\"已流通比例\"] = pd.to_numeric(temp_df[\"已流通比例\"], errors=\"coerce\")\n    temp_df[\"流通受限股份\"] = pd.to_numeric(temp_df[\"流通受限股份\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hold_control_cninfo_df = stock_hold_control_cninfo(symbol=\"全部\")\n    print(stock_hold_control_cninfo_df)\n\n    stock_hold_management_detail_cninfo_df = stock_hold_management_detail_cninfo(\n        symbol=\"增持\"\n    )\n    print(stock_hold_management_detail_cninfo_df)\n\n    stock_hold_change_cninfo_df = stock_hold_change_cninfo(symbol=\"全部\")\n    print(stock_hold_change_cninfo_df)\n"
  },
  {
    "path": "akshare/stock/stock_hold_control_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/5/19 18:30\nDesc: 东方财富网-数据中心-特色数据-高管持股\nhttps://data.eastmoney.com/executive/list.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom tqdm import tqdm\n\n\ndef stock_hold_management_detail_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-高管持股-董监高及相关人员持股变动明细\n    https://data.eastmoney.com/executive/list.html\n    :return: 董监高及相关人员持股变动明细\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_EXECUTIVE_HOLD_DETAILS\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"\",\n        \"filter\": \"\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"5000\",\n        \"sortTypes\": \"-1,1,1\",\n        \"sortColumns\": \"CHANGE_DATE,SECURITY_CODE,PERSON_NAME\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n                \"p\": page,\n                \"pageNo\": page,\n                \"pageNum\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.rename(\n        columns={\n            \"SECURITY_CODE\": \"代码\",\n            \"DERIVE_SECURITY_CODE\": \"-\",\n            \"SECURITY_NAME\": \"名称\",\n            \"CHANGE_DATE\": \"日期\",\n            \"PERSON_NAME\": \"变动人\",\n            \"CHANGE_SHARES\": \"变动股数\",\n            \"AVERAGE_PRICE\": \"成交均价\",\n            \"CHANGE_AMOUNT\": \"变动金额\",\n            \"CHANGE_REASON\": \"变动原因\",\n            \"CHANGE_RATIO\": \"变动比例\",\n            \"CHANGE_AFTER_HOLDNUM\": \"变动后持股数\",\n            \"HOLD_TYPE\": \"持股种类\",\n            \"DSE_PERSON_NAME\": \"董监高人员姓名\",\n            \"POSITION_NAME\": \"职务\",\n            \"PERSON_DSE_RELATION\": \"变动人与董监高的关系\",\n            \"ORG_CODE\": \"-\",\n            \"GGEID\": \"-\",\n            \"BEGIN_HOLD_NUM\": \"开始时持有\",\n            \"END_HOLD_NUM\": \"结束后持有\",\n        },\n        inplace=True,\n    )\n\n    big_df = big_df[\n        [\n            \"日期\",\n            \"代码\",\n            \"名称\",\n            \"变动人\",\n            \"变动股数\",\n            \"成交均价\",\n            \"变动金额\",\n            \"变动原因\",\n            \"变动比例\",\n            \"变动后持股数\",\n            \"持股种类\",\n            \"董监高人员姓名\",\n            \"职务\",\n            \"变动人与董监高的关系\",\n            \"开始时持有\",\n            \"结束后持有\",\n        ]\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df[\"变动股数\"] = pd.to_numeric(big_df[\"变动股数\"], errors=\"coerce\")\n    big_df[\"成交均价\"] = pd.to_numeric(big_df[\"成交均价\"], errors=\"coerce\")\n    big_df[\"变动金额\"] = pd.to_numeric(big_df[\"变动金额\"], errors=\"coerce\")\n    big_df[\"变动比例\"] = pd.to_numeric(big_df[\"变动比例\"], errors=\"coerce\")\n    big_df[\"变动后持股数\"] = pd.to_numeric(big_df[\"变动后持股数\"], errors=\"coerce\")\n    big_df[\"开始时持有\"] = pd.to_numeric(big_df[\"开始时持有\"], errors=\"coerce\")\n    big_df[\"结束后持有\"] = pd.to_numeric(big_df[\"结束后持有\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_hold_management_person_em(\n    symbol: str = \"001308\", name: str = \"吴远\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-高管持股-人员增减持股变动明细\n    https://data.eastmoney.com/executive/personinfo.html?name=%E5%90%B4%E8%BF%9C&code=001308\n    :param symbol: 股票代码\n    :type name: str\n    :param name: 高管名称\n    :type symbol: str\n    :return: 人员增减持股变动明细\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_EXECUTIVE_HOLD_DETAILS\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECURITY_CODE=\"{symbol}\")(PERSON_NAME=\"{name}\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"5000\",\n        \"sortTypes\": \"-1,1,1\",\n        \"sortColumns\": \"CHANGE_DATE,SECURITY_CODE,PERSON_NAME\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.rename(\n        columns={\n            \"SECURITY_CODE\": \"代码\",\n            \"DERIVE_SECURITY_CODE\": \"-\",\n            \"SECURITY_NAME\": \"名称\",\n            \"CHANGE_DATE\": \"日期\",\n            \"PERSON_NAME\": \"变动人\",\n            \"CHANGE_SHARES\": \"变动股数\",\n            \"AVERAGE_PRICE\": \"成交均价\",\n            \"CHANGE_AMOUNT\": \"变动金额\",\n            \"CHANGE_REASON\": \"变动原因\",\n            \"CHANGE_RATIO\": \"变动比例\",\n            \"CHANGE_AFTER_HOLDNUM\": \"变动后持股数\",\n            \"HOLD_TYPE\": \"持股种类\",\n            \"DSE_PERSON_NAME\": \"董监高人员姓名\",\n            \"POSITION_NAME\": \"职务\",\n            \"PERSON_DSE_RELATION\": \"变动人与董监高的关系\",\n            \"ORG_CODE\": \"-\",\n            \"GGEID\": \"-\",\n            \"BEGIN_HOLD_NUM\": \"开始时持有\",\n            \"END_HOLD_NUM\": \"结束后持有\",\n        },\n        inplace=True,\n    )\n\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"代码\",\n            \"名称\",\n            \"变动人\",\n            \"变动股数\",\n            \"成交均价\",\n            \"变动金额\",\n            \"变动原因\",\n            \"变动比例\",\n            \"变动后持股数\",\n            \"持股种类\",\n            \"董监高人员姓名\",\n            \"职务\",\n            \"变动人与董监高的关系\",\n            \"开始时持有\",\n            \"结束后持有\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"变动股数\"] = pd.to_numeric(temp_df[\"变动股数\"], errors=\"coerce\")\n    temp_df[\"成交均价\"] = pd.to_numeric(temp_df[\"成交均价\"], errors=\"coerce\")\n    temp_df[\"变动金额\"] = pd.to_numeric(temp_df[\"变动金额\"], errors=\"coerce\")\n    temp_df[\"变动比例\"] = pd.to_numeric(temp_df[\"变动比例\"], errors=\"coerce\")\n    temp_df[\"变动后持股数\"] = pd.to_numeric(temp_df[\"变动后持股数\"], errors=\"coerce\")\n    temp_df[\"开始时持有\"] = pd.to_numeric(temp_df[\"开始时持有\"], errors=\"coerce\")\n    temp_df[\"结束后持有\"] = pd.to_numeric(temp_df[\"结束后持有\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hold_management_detail_em_df = stock_hold_management_detail_em()\n    print(stock_hold_management_detail_em_df)\n\n    stock_hold_management_person_em_df = stock_hold_management_person_em(\n        symbol=\"001308\", name=\"吴远\"\n    )\n    print(stock_hold_management_person_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_hold_num_cninfo.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/7/24 23:30\nDesc: 巨潮资讯-数据中心-专题统计-股东股本-股东人数及持股集中度\nhttps://webapi.cninfo.com.cn/#/thematicStatistics\n\"\"\"\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_ths(file: str = \"cninfo.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef stock_hold_num_cninfo(date: str = \"20210630\") -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-专题统计-股东股本-股东人数及持股集中度\n    https://webapi.cninfo.com.cn/#/thematicStatistics\n    :param date: choice of {\"XXXX0331\", \"XXXX0630\", \"XXXX0930\", \"XXXX1231\"}; 从 20170331 开始\n    :type date: str\n    :return: 股东人数及持股集中度\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1034\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"rdate\": date,\n    }\n    r = requests.post(url, headers=headers, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.columns = [\n        \"本期人均持股数量\",\n        \"股东人数增幅\",\n        \"上期股东人数\",\n        \"本期股东人数\",\n        \"证券简称\",\n        \"证券代码\",\n        \"人均持股数量增幅\",\n        \"变动日期\",\n        \"上期人均持股数量\",\n    ]\n    temp_df = temp_df[\n        [\n            \"证券代码\",\n            \"证券简称\",\n            \"变动日期\",\n            \"本期股东人数\",\n            \"上期股东人数\",\n            \"股东人数增幅\",\n            \"本期人均持股数量\",\n            \"上期人均持股数量\",\n            \"人均持股数量增幅\",\n        ]\n    ]\n    temp_df[\"变动日期\"] = pd.to_datetime(temp_df[\"变动日期\"], errors=\"coerce\").dt.date\n    temp_df[\"本期人均持股数量\"] = pd.to_numeric(\n        temp_df[\"本期人均持股数量\"], errors=\"coerce\"\n    )\n    temp_df[\"股东人数增幅\"] = pd.to_numeric(temp_df[\"股东人数增幅\"], errors=\"coerce\")\n    temp_df[\"上期股东人数\"] = pd.to_numeric(temp_df[\"上期股东人数\"], errors=\"coerce\")\n    temp_df[\"本期股东人数\"] = pd.to_numeric(temp_df[\"本期股东人数\"], errors=\"coerce\")\n    temp_df[\"人均持股数量增幅\"] = pd.to_numeric(\n        temp_df[\"人均持股数量增幅\"], errors=\"coerce\"\n    )\n    temp_df[\"上期人均持股数量\"] = pd.to_numeric(\n        temp_df[\"上期人均持股数量\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hold_num_cninfo_df = stock_hold_num_cninfo(date=\"20210630\")\n    print(stock_hold_num_cninfo_df)\n"
  },
  {
    "path": "akshare/stock/stock_hot_rank_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/7/8 17:15\nDesc: 东方财富个股人气榜\nhttps://guba.eastmoney.com/rank/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_hot_rank_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富-个股人气榜-人气榜\n    https://guba.eastmoney.com/rank/\n    :return: 人气榜\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://emappdata.eastmoney.com/stockrank/getAllCurrentList\"\n    payload = {\n        \"appId\": \"appId01\",\n        \"globalId\": \"786e4c21-70dc-435a-93bb-38\",\n        \"marketType\": \"\",\n        \"pageNo\": 1,\n        \"pageSize\": 100,\n    }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_rank_df = pd.DataFrame(data_json[\"data\"])\n\n    temp_rank_df[\"mark\"] = [\n        \"0\" + \".\" + item[2:] if \"SZ\" in item else \"1\" + \".\" + item[2:]\n        for item in temp_rank_df[\"sc\"]\n    ]\n    \",\".join(temp_rank_df[\"mark\"]) + \"?v=08926209912590994\"\n    params = {\n        \"ut\": \"f057cbcbce2a86e2866ab8877db1d059\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fields\": \"f14,f3,f12,f2\",\n        \"secids\": \",\".join(temp_rank_df[\"mark\"]) + \",?v=08926209912590994\",\n    }\n    url = \"https://push2.eastmoney.com/api/qt/ulist.np/get\"\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"])\n    temp_df.columns = [\"最新价\", \"涨跌幅\", \"代码\", \"股票名称\"]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = temp_df[\"最新价\"] * temp_df[\"涨跌幅\"] / 100\n    temp_df[\"当前排名\"] = temp_rank_df[\"rk\"]\n    temp_df[\"代码\"] = temp_rank_df[\"sc\"]\n    temp_df = temp_df[\n        [\n            \"当前排名\",\n            \"代码\",\n            \"股票名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n        ]\n    ]\n    temp_df[\"当前排名\"] = pd.to_numeric(temp_df[\"当前排名\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_hot_rank_detail_em(symbol: str = \"SZ000665\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-个股人气榜-历史趋势及粉丝特征\n    https://guba.eastmoney.com/rank/stock?code=000665\n    :param symbol: 带市场表示的证券代码\n    :type symbol: str\n    :return: 个股的历史趋势及粉丝特征\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url_rank = \"https://emappdata.eastmoney.com/stockrank/getHisList\"\n    payload = {\n        \"appId\": \"appId01\",\n        \"globalId\": \"786e4c21-70dc-435a-93bb-38\",\n        \"marketType\": \"\",\n        \"srcSecurityCode\": symbol,\n        \"yearType\": \"5\",\n    }\n    r = requests.post(url_rank, json=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"证券代码\"] = symbol\n    temp_df.columns = [\"时间\", \"排名\", \"证券代码\"]\n    temp_df = temp_df[[\"时间\", \"排名\", \"证券代码\"]]\n\n    url_follow = \"https://emappdata.eastmoney.com/stockrank/getHisProfileList\"\n    r = requests.post(url_follow, json=payload)\n    data_json = r.json()\n    temp_df[\"新晋粉丝\"] = (\n        pd.DataFrame(data_json[\"data\"])[\"newUidRate\"].str.strip(\"%\").astype(float) / 100\n    )\n    temp_df[\"铁杆粉丝\"] = (\n        pd.DataFrame(data_json[\"data\"])[\"oldUidRate\"].str.strip(\"%\").astype(float) / 100\n    )\n    temp_df.sort_values([\"时间\"], inplace=True)\n    return temp_df\n\n\ndef stock_hot_rank_detail_realtime_em(symbol: str = \"SZ000665\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-个股人气榜-实时变动\n    https://guba.eastmoney.com/rank/stock?code=000665\n    :param symbol: 带市场表示的证券代码\n    :type symbol: str\n    :return: 实时变动\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://emappdata.eastmoney.com/stockrank/getCurrentList\"\n    payload = {\n        \"appId\": \"appId01\",\n        \"globalId\": \"786e4c21-70dc-435a-93bb-38\",\n        \"marketType\": \"\",\n        \"srcSecurityCode\": symbol,\n    }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.columns = [\"时间\", \"排名\"]\n    return temp_df\n\n\ndef stock_hot_keyword_em(symbol: str = \"SZ000665\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-个股人气榜-热门关键词\n    https://guba.eastmoney.com/rank/stock?code=000665\n    :param symbol: 带市场表示的证券代码\n    :type symbol: str\n    :return: 热门关键词\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://emappdata.eastmoney.com/stockrank/getHotStockRankList\"\n    payload = {\n        \"appId\": \"appId01\",\n        \"globalId\": \"786e4c21-70dc-435a-93bb-38\",\n        \"srcSecurityCode\": symbol,\n    }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    del temp_df[\"flag\"]\n    temp_df.columns = [\"时间\", \"股票代码\", \"概念名称\", \"概念代码\", \"热度\"]\n    return temp_df\n\n\ndef stock_hot_rank_latest_em(symbol: str = \"SZ000665\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-个股人气榜-最新排名\n    https://guba.eastmoney.com/rank/stock?code=000665\n    :param symbol: 带市场表示的证券代码\n    :type symbol: str\n    :return: 最新排名\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://emappdata.eastmoney.com/stockrank/getCurrentLatest\"\n    payload = {\n        \"appId\": \"appId01\",\n        \"globalId\": \"786e4c21-70dc-435a-93bb-38\",\n        \"marketType\": \"\",\n        \"srcSecurityCode\": symbol,\n    }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame.from_dict(data_json[\"data\"], orient=\"index\")\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\"item\", \"value\"]\n    return temp_df\n\n\ndef stock_hot_rank_relate_em(symbol: str = \"SZ000665\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-个股人气榜-相关股票\n    https://guba.eastmoney.com/rank/stock?code=000665\n    :param symbol: 带市场表示的证券代码\n    :type symbol: str\n    :return: 相关股票\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://emappdata.eastmoney.com/stockrank/getFollowStockRankList\"\n    payload = {\n        \"appId\": \"appId01\",\n        \"globalId\": \"786e4c21-70dc-435a-93bb-38\",\n        \"srcSecurityCode\": symbol,\n    }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame.from_dict(data_json[\"data\"])\n    temp_df.columns = [\"时间\", \"-\", \"股票代码\", \"-\", \"相关股票代码\", \"涨跌幅\", \"-\"]\n    temp_df = temp_df[[\"时间\", \"股票代码\", \"相关股票代码\", \"涨跌幅\"]]\n    temp_df[\"涨跌幅\"] = temp_df[\"涨跌幅\"].str.strip(\"%\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hot_rank_em_df = stock_hot_rank_em()\n    print(stock_hot_rank_em_df)\n\n    stock_hot_rank_detail_em_df = stock_hot_rank_detail_em(symbol=\"SZ871245\")\n    print(stock_hot_rank_detail_em_df)\n\n    stock_hot_rank_detail_realtime_em_df = stock_hot_rank_detail_realtime_em(\n        symbol=\"SZ000665\"\n    )\n    print(stock_hot_rank_detail_realtime_em_df)\n\n    stock_hot_keyword_em_df = stock_hot_keyword_em(symbol=\"SZ000665\")\n    print(stock_hot_keyword_em_df)\n\n    stock_hot_rank_latest_em_df = stock_hot_rank_latest_em(symbol=\"SZ000665\")\n    print(stock_hot_rank_latest_em_df)\n\n    stock_hot_rank_relate_em_df = stock_hot_rank_relate_em(symbol=\"SZ000665\")\n    print(stock_hot_rank_relate_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_hot_search_baidu.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/6/16 18:19\nDesc: 百度股市通-热搜股票\nhttps://gushitong.baidu.com/hotlist?mainTab=hotSearch&market=all\n\"\"\"\n\nfrom datetime import datetime\n\nimport pandas as pd\nimport requests\n\n\ndef stock_hot_search_baidu(\n    symbol: str = \"A股\", date: str = \"20250616\", time: str = \"今日\"\n):\n    \"\"\"\n    百度股市通-热搜股票\n    https://gushitong.baidu.com/hotlist?mainTab=hotSearch&market=all\n    :param symbol: choice of {\"全部\", \"A股\", \"港股\", \"美股\"}\n    :type symbol: str\n    :param date: 日期\n    :type date: str\n    :param time: time=\"今日\"；choice of {\"今日\", \"1小时\"}\n    :type time: str\n    :return: 热搜股票\n    :rtype: pandas.DataFrame\n    \"\"\"\n    hour_str = datetime.now().hour\n    symbol_map = {\n        \"全市场\": \"all\",\n        \"A股\": \"ab\",\n        \"港股\": \"hk\",\n        \"美股\": \"us\",\n    }\n    url = \"https://finance.pae.baidu.com/selfselect/listsugrecomm\"\n    params = {\n        \"bizType\": \"wisexmlnew\",\n        \"dsp\": \"iphone\",\n        \"product\": \"search\",\n        \"style\": \"tablelist\",\n        \"market\": symbol_map[symbol],\n        \"type\": time,\n        \"day\": date,\n        \"hour\": hour_str,\n        \"pn\": \"0\",\n        \"rn\": \"12\",\n        \"finClientType\": \"pc\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"Result\"][\"list\"][\"body\"])\n    temp_df.rename(\n        columns={\n            \"name\": \"名称/代码\",\n            \"pxChangeRate\": \"涨跌幅\",\n            \"heat\": \"综合热度\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"名称/代码\",\n            \"涨跌幅\",\n            \"综合热度\",\n        ]\n    ]\n    temp_df[\"综合热度\"] = pd.to_numeric(temp_df[\"综合热度\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hot_search_baidu_df = stock_hot_search_baidu(\n        symbol=\"A股\", date=\"20250616\", time=\"今日\"\n    )\n    print(stock_hot_search_baidu_df)\n"
  },
  {
    "path": "akshare/stock/stock_hot_up_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/6/15 15:15\nDesc: 东方财富个股人气榜\nhttps://guba.eastmoney.com/rank/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_hot_up_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富-个股人气榜-飙升榜\n    https://guba.eastmoney.com/rank/\n    :return: 飙升榜\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://emappdata.eastmoney.com/stockrank/getAllHisRcList\"\n    payload = {\n        \"appId\": \"appId01\",\n        \"globalId\": \"786e4c21-70dc-435a-93bb-38\",\n        \"marketType\": \"\",\n        \"pageNo\": 1,\n        \"pageSize\": 100,\n    }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_rank_df = pd.DataFrame(data_json[\"data\"])\n\n    temp_rank_df[\"mark\"] = [\n        \"0\" + \".\" + item[2:] if \"SZ\" in item else \"1\" + \".\" + item[2:]\n        for item in temp_rank_df[\"sc\"]\n    ]\n    \",\".join(temp_rank_df[\"mark\"]) + \"?v=08926209912590994\"\n    params = {\n        \"ut\": \"f057cbcbce2a86e2866ab8877db1d059\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fields\": \"f14,f3,f12,f2\",\n        \"secids\": \",\".join(temp_rank_df[\"mark\"]) + \",?v=08926209912590994\",\n    }\n    url = \"https://push2.eastmoney.com/api/qt/ulist.np/get\"\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"])\n    temp_df.columns = [\"最新价\", \"涨跌幅\", \"代码\", \"股票名称\"]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = temp_df[\"最新价\"] * temp_df[\"涨跌幅\"] / 100\n    temp_df[\"当前排名\"] = temp_rank_df[\"rk\"]\n    temp_df[\"代码\"] = temp_rank_df[\"sc\"]\n    temp_df[\"排名较昨日变动\"] = temp_rank_df[\"hrc\"]\n    temp_df = temp_df[\n        [\n            \"排名较昨日变动\",\n            \"当前排名\",\n            \"代码\",\n            \"股票名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n        ]\n    ]\n    temp_df[\"排名较昨日变动\"] = pd.to_numeric(\n        temp_df[\"排名较昨日变动\"], errors=\"coerce\"\n    )\n    temp_df[\"当前排名\"] = pd.to_numeric(temp_df[\"当前排名\"], errors=\"coerce\")\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hot_up_em_df = stock_hot_up_em()\n    print(stock_hot_up_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_hsgt_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/9 23:00\nDesc: 东方财富网-行情中心-沪深港通\nhttps://quote.eastmoney.com/center/gridlist.html#ah_comparison\n\"\"\"\n\nimport pandas as pd\n\nfrom akshare.utils.func import fetch_paginated_data\n\n\ndef stock_zh_ah_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-沪深港通-AH股比价-实时行情\n    https://quote.eastmoney.com/center/gridlist.html#ah_comparison\n    :return: 东方财富网-行情中心-沪深港通-AH股比价-实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"np\": \"1\",\n        \"fltt\": \"1\",\n        \"invt\": \"2\",\n        \"fs\": \"b:DLMK0101\",\n        \"fields\": \"f193,f191,f192,f12,f13,f14,f1,f2,f4,f3,f152,f186,f190,f187,f189,f188\",\n        \"fid\": \"f3\",\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"dect\": \"1\",\n        \"wbp2u\": \"|0|0|0|web\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df[\"index\"].astype(int) + 1\n    temp_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"f193\": \"名称\",\n            \"f12\": \"H股代码\",\n            \"f2\": \"最新价-HKD\",\n            \"f3\": \"H股-涨跌幅\",\n            \"f191\": \"A股代码\",\n            \"f186\": \"最新价-RMB\",\n            \"f187\": \"A股-涨跌幅\",\n            \"f189\": \"比价\",\n            \"f188\": \"溢价\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"名称\",\n            \"H股代码\",\n            \"最新价-HKD\",\n            \"H股-涨跌幅\",\n            \"A股代码\",\n            \"最新价-RMB\",\n            \"A股-涨跌幅\",\n            \"比价\",\n            \"溢价\",\n        ]\n    ]\n    temp_df[\"最新价-HKD\"] = pd.to_numeric(temp_df[\"最新价-HKD\"], errors=\"coerce\") / 1000\n    temp_df[\"H股-涨跌幅\"] = pd.to_numeric(temp_df[\"H股-涨跌幅\"], errors=\"coerce\") / 100\n    temp_df[\"最新价-RMB\"] = pd.to_numeric(temp_df[\"最新价-RMB\"], errors=\"coerce\") / 100\n    temp_df[\"A股-涨跌幅\"] = pd.to_numeric(temp_df[\"A股-涨跌幅\"], errors=\"coerce\") / 100\n    temp_df[\"比价\"] = pd.to_numeric(temp_df[\"比价\"], errors=\"coerce\") / 100\n    temp_df[\"溢价\"] = pd.to_numeric(temp_df[\"溢价\"], errors=\"coerce\") / 100\n    return temp_df\n\n\ndef stock_hsgt_sh_hk_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-沪深港通-港股通(沪>港)-股票\n    https://quote.eastmoney.com/center/gridlist.html#hk_sh_stocks\n    :return: 东方财富网-行情中心-沪深港通-港股通(沪>港)-股票\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"np\": \"1\",\n        \"fltt\": \"1\",\n        \"invt\": \"2\",\n        \"fs\": \"b:DLMK0144\",\n        \"fields\": \"f12,f13,f14,f19,f1,f2,f4,f3,f152,f17,f18,f15,f16,f5,f6\",\n        \"fid\": \"f12\",\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"dect\": \"1\",\n        \"wbp2u\": \"|0|0|0|web\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.rename(\n        columns={\n            \"f12\": \"代码\",\n            \"f14\": \"名称\",\n            \"f2\": \"最新价\",\n            \"f4\": \"涨跌额\",\n            \"f3\": \"涨跌幅\",\n            \"f17\": \"今开\",\n            \"f15\": \"最高\",\n            \"f16\": \"最低\",\n            \"f18\": \"昨收\",\n            \"f5\": \"成交量\",\n            \"f6\": \"成交额\",\n        },\n        inplace=True,\n    )\n\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"昨收\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\") / 1000\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\") / 1000\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\") / 100\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\") / 1000\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\") / 1000\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\") / 1000\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\") / 1000\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\") / 100000000\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\") / 100000000\n    temp_df.sort_values([\"代码\"], ignore_index=True, inplace=True)\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df[\"index\"].astype(int) + 1\n    temp_df.rename(columns={\"index\": \"序号\"}, inplace=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_ah_spot_em_df = stock_zh_ah_spot_em()\n    print(stock_zh_ah_spot_em_df)\n\n    stock_hsgt_sh_hk_spot_em_df = stock_hsgt_sh_hk_spot_em()\n    print(stock_hsgt_sh_hk_spot_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_industry.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/5/9 17:06\nDesc: 新浪行业-板块行情\nhttp://finance.sina.com.cn/stock/sl/\n\"\"\"\n\nimport json\nimport math\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils import demjson\nfrom tqdm import tqdm\n\n\ndef stock_sector_spot(indicator: str = \"新浪行业\") -> pd.DataFrame:\n    \"\"\"\n    新浪行业-板块行情\n    http://finance.sina.com.cn/stock/sl/\n    :param indicator: choice of {\"新浪行业\", \"启明星行业\", \"概念\", \"地域\", \"行业\"}\n    :type indicator: str\n    :return: 指定 indicator 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if indicator == \"新浪行业\":\n        url = \"http://vip.stock.finance.sina.com.cn/q/view/newSinaHy.php\"\n        r = requests.get(url)\n    if indicator == \"启明星行业\":\n        url = \"http://biz.finance.sina.com.cn/hq/qmxIndustryHq.php\"\n        r = requests.get(url)\n        r.encoding = \"gb2312\"\n    if indicator == \"概念\":\n        url = \"http://money.finance.sina.com.cn/q/view/newFLJK.php\"\n        params = {\"param\": \"class\"}\n        r = requests.get(url, params=params)\n    if indicator == \"地域\":\n        url = \"http://money.finance.sina.com.cn/q/view/newFLJK.php\"\n        params = {\"param\": \"area\"}\n        r = requests.get(url, params=params)\n    if indicator == \"行业\":\n        url = \"http://money.finance.sina.com.cn/q/view/newFLJK.php\"\n        params = {\"param\": \"industry\"}\n        r = requests.get(url, params=params)\n    text_data = r.text\n    json_data = json.loads(text_data[text_data.find(\"{\") :])\n    temp_df = pd.DataFrame([value.split(\",\") for key, value in json_data.items()])\n    temp_df.columns = [\n        \"label\",\n        \"板块\",\n        \"公司家数\",\n        \"平均价格\",\n        \"涨跌额\",\n        \"涨跌幅\",\n        \"总成交量\",\n        \"总成交额\",\n        \"股票代码\",\n        \"个股-涨跌幅\",\n        \"个股-当前价\",\n        \"个股-涨跌额\",\n        \"股票名称\",\n    ]\n    temp_df[\"公司家数\"] = pd.to_numeric(temp_df[\"公司家数\"])\n    temp_df[\"平均价格\"] = pd.to_numeric(temp_df[\"平均价格\"])\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"])\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"])\n    temp_df[\"总成交量\"] = pd.to_numeric(temp_df[\"总成交量\"])\n    temp_df[\"总成交额\"] = pd.to_numeric(temp_df[\"总成交额\"])\n    temp_df[\"个股-涨跌幅\"] = pd.to_numeric(temp_df[\"个股-涨跌幅\"])\n    temp_df[\"个股-当前价\"] = pd.to_numeric(temp_df[\"个股-当前价\"])\n    temp_df[\"个股-涨跌额\"] = pd.to_numeric(temp_df[\"个股-涨跌额\"])\n    return temp_df\n\n\ndef stock_sector_detail(sector: str = \"gn_gfgn\") -> pd.DataFrame:\n    \"\"\"\n    新浪行业-板块行情-成份详情\n    http://finance.sina.com.cn/stock/sl/#area_1\n    :param sector: stock_sector_spot 返回的 label 值, choice of {\"新浪行业\", \"概念\", \"地域\", \"行业\"}; \"启明星行业\" 无详情\n    :type sector: str\n    :return: 指定 sector 的板块详情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCount\"\n    params = {\"node\": sector}\n    r = requests.get(url, params=params)\n    total_num = int(r.json())\n    total_page_num = math.ceil(int(total_num) / 80)\n    big_df = pd.DataFrame()\n    url = \"http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData\"\n    for page in tqdm(range(1, total_page_num + 1), leave=True):\n        params = {\n            \"page\": str(page),\n            \"num\": \"80\",\n            \"sort\": \"symbol\",\n            \"asc\": \"1\",\n            \"node\": sector,\n            \"symbol\": \"\",\n            \"_s_r_a\": \"page\",\n        }\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text)\n        temp_df = pd.DataFrame(data_json)\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df[\"trade\"] = pd.to_numeric(big_df[\"trade\"], errors=\"coerce\")\n    big_df[\"pricechange\"] = pd.to_numeric(big_df[\"pricechange\"], errors=\"coerce\")\n    big_df[\"changepercent\"] = pd.to_numeric(big_df[\"changepercent\"], errors=\"coerce\")\n    big_df[\"buy\"] = pd.to_numeric(big_df[\"buy\"], errors=\"coerce\")\n    big_df[\"sell\"] = pd.to_numeric(big_df[\"sell\"], errors=\"coerce\")\n    big_df[\"settlement\"] = pd.to_numeric(big_df[\"settlement\"], errors=\"coerce\")\n    big_df[\"open\"] = pd.to_numeric(big_df[\"open\"], errors=\"coerce\")\n    big_df[\"high\"] = pd.to_numeric(big_df[\"high\"], errors=\"coerce\")\n    big_df[\"low\"] = pd.to_numeric(big_df[\"low\"], errors=\"coerce\")\n    big_df[\"volume\"] = pd.to_numeric(big_df[\"volume\"], errors=\"coerce\")\n    big_df[\"amount\"] = pd.to_numeric(big_df[\"amount\"], errors=\"coerce\")\n    big_df[\"per\"] = pd.to_numeric(big_df[\"per\"], errors=\"coerce\")\n    big_df[\"pb\"] = pd.to_numeric(big_df[\"pb\"], errors=\"coerce\")\n    big_df[\"mktcap\"] = pd.to_numeric(big_df[\"mktcap\"], errors=\"coerce\")\n    big_df[\"nmc\"] = pd.to_numeric(big_df[\"nmc\"], errors=\"coerce\")\n    big_df[\"turnoverratio\"] = pd.to_numeric(big_df[\"turnoverratio\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_industry_sina_df = stock_sector_spot(indicator=\"新浪行业\")\n    print(stock_industry_sina_df)\n\n    stock_industry_con_df = stock_sector_spot(indicator=\"概念\")\n    print(stock_industry_con_df)\n\n    stock_industry_area_df = stock_sector_spot(indicator=\"地域\")\n    print(stock_industry_area_df)\n\n    stock_industry_ind_df = stock_sector_spot(indicator=\"行业\")\n    print(stock_industry_ind_df)\n\n    stock_industry_star_df = stock_sector_spot(indicator=\"启明星行业\")\n    print(stock_industry_star_df)\n\n    stock_sector_detail_df = stock_sector_detail(sector=\"hangye_ZC27\")\n    print(stock_sector_detail_df)\n"
  },
  {
    "path": "akshare/stock/stock_industry_cninfo.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/5/19 18:34\nDesc: 巨潮资讯-行业分类数据\nhttps://webapi.cninfo.com.cn/#/apiDoc\nhttps://webapi.cninfo.com.cn/api/stock/p_stock2110\n\"\"\"\n\nimport numpy as np\nimport pandas as pd\nimport requests\nimport py_mini_racer\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_ths(file: str = \"cninfo.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef stock_industry_category_cninfo(symbol: str = \"巨潮行业分类标准\") -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-行业分类数据\n    https://webapi.cninfo.com.cn/#/apiDoc\n    查询 p_public0002 接口\n    :param symbol: 行业类型; choice of {\"证监会行业分类标准\", \"巨潮行业分类标准\", \"申银万国行业分类标准\",\n    \"新财富行业分类标准\", \"国资委行业分类标准\", \"巨潮产业细分标准\", \"天相行业分类标准\", \"全球行业分类标准\"}\n    :type symbol: str\n    :return: 行业分类数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"证监会行业分类标准\": \"008001\",\n        \"巨潮行业分类标准\": \"008002\",\n        \"申银万国行业分类标准\": \"008003\",\n        \"新财富行业分类标准\": \"008004\",\n        \"国资委行业分类标准\": \"008005\",\n        \"巨潮产业细分标准\": \"008006\",\n        \"天相行业分类标准\": \"008007\",\n        \"全球行业分类标准\": \"008008\",\n    }\n    url = \"https://webapi.cninfo.com.cn/api/stock/p_public0002\"\n    params = {\"indcode\": \"\", \"indtype\": symbol_map[symbol], \"format\": \"json\"}\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Accept-Enckey\": mcode,\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    cols_map = {\n        \"PARENTCODE\": \"父类编码\",\n        \"SORTCODE\": \"类目编码\",\n        \"SORTNAME\": \"类目名称\",\n        \"F001V\": \"类目名称英文\",\n        \"F002D\": \"终止日期\",\n        \"F003V\": \"行业类型编码\",\n        \"F004V\": \"行业类型\",\n    }\n    temp_df.rename(columns=cols_map, inplace=True)\n    # 行业按分级排序\n    tmp = temp_df[[\"类目编码\"]].copy()\n    tmp[\"len\"] = temp_df[\"类目编码\"].str.len()\n    tmp[\"Level\"] = 0\n    g = tmp.groupby(\"len\")\n    level = 0\n    for k in g.groups.keys():\n        temp_df.loc[temp_df[\"类目编码\"].isin(g.get_group(k)[\"类目编码\"]), \"Level\"] = (\n            level\n        )\n        level += 1\n    temp_df[\"Level\"] = temp_df[\"Level\"].astype(int)\n    temp_df.rename(columns={\"Level\": \"分级\"}, inplace=True)\n    temp_df[\"终止日期\"] = pd.to_datetime(temp_df[\"终止日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\ndef stock_industry_change_cninfo(\n    symbol: str = \"002594\",\n    start_date: str = \"20091227\",\n    end_date: str = \"20220713\",\n) -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-上市公司行业归属的变动情况\n    https://webapi.cninfo.com.cn/#/apiDoc\n    查询 p_stock2110 接口\n    :param symbol: 股票代码\n    :type symbol: str\n    :param start_date: 开始变动日期\n    :type start_date: str\n    :param end_date: 结束变动日期\n    :type end_date: str\n    :return: 行业归属的变动情况\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://webapi.cninfo.com.cn/api/stock/p_stock2110\"\n    params = {\n        \"scode\": symbol,\n        \"sdate\": \"-\".join([start_date[:4], start_date[4:6], start_date[6:]]),\n        \"edate\": \"-\".join([end_date[:4], end_date[4:6], end_date[6:]]),\n    }\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Accept-Enckey\": mcode,\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.post(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    cols_map = {\n        \"ORGNAME\": \"机构名称\",\n        \"SECCODE\": \"证券代码\",\n        \"SECNAME\": \"新证券简称\",\n        \"VARYDATE\": \"变更日期\",\n        \"F001V\": \"分类标准编码\",\n        \"F002V\": \"分类标准\",\n        \"F003V\": \"行业编码\",\n        \"F004V\": \"行业门类\",\n        \"F005V\": \"行业次类\",\n        \"F006V\": \"行业大类\",\n        \"F007V\": \"行业中类\",\n        \"F008C\": \"最新记录标识\",\n    }\n    ignore_cols = [\"最新记录标识\"]\n    temp_df.rename(columns=cols_map, inplace=True)\n    temp_df.fillna(np.nan, inplace=True)\n    temp_df[\"变更日期\"] = pd.to_datetime(temp_df[\"变更日期\"], errors=\"coerce\").dt.date\n    data_df = temp_df[[c for c in temp_df.columns if c not in ignore_cols]]\n    return data_df\n\n\nif __name__ == \"__main__\":\n    stock_industry_category_cninfo_df = stock_industry_category_cninfo(\n        symbol=\"巨潮行业分类标准\"\n    )\n    print(stock_industry_category_cninfo_df)\n\n    stock_industry_change_cninfo_df = stock_industry_change_cninfo(\n        symbol=\"002594\", start_date=\"20091227\", end_date=\"20220708\"\n    )\n    print(stock_industry_change_cninfo_df)\n"
  },
  {
    "path": "akshare/stock/stock_industry_pe_cninfo.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/6/18 18:30\nDesc: 巨潮资讯-数据中心-行业分析-行业市盈率\nhttp://webapi.cninfo.com.cn/#/thematicStatistics?name=%E6%8A%95%E8%B5%84%E8%AF%84%E7%BA%A7\n\"\"\"\n\nimport pandas as pd\nimport requests\nimport py_mini_racer\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_ths(file: str = \"cninfo.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef stock_industry_pe_ratio_cninfo(\n    symbol: str = \"证监会行业分类\", date: str = \"20210910\"\n) -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-行业分析-行业市盈率\n    http://webapi.cninfo.com.cn/#/thematicStatistics\n    :param symbol: choice of {\"证监会行业分类\", \"国证行业分类\"}\n    :type symbol: str\n    :param date: 查询日期\n    :type date: str\n    :return: 行业市盈率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    sort_code_map = {\"证监会行业分类\": \"008001\", \"国证行业分类\": \"008200\"}\n    url = \"http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1087\"\n    params = {\n        \"tdate\": \"-\".join([date[:4], date[4:6], date[6:]]),\n        \"sortcode\": sort_code_map[symbol],\n    }\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Accept-Enckey\": mcode,\n        \"Origin\": \"http://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"http://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.post(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.columns = [\n        \"行业层级\",\n        \"静态市盈率-算术平均\",\n        \"静态市盈率-中位数\",\n        \"静态市盈率-加权平均\",\n        \"净利润-静态\",\n        \"行业名称\",\n        \"行业编码\",\n        \"行业分类\",\n        \"总市值-静态\",\n        \"纳入计算公司数量\",\n        \"变动日期\",\n        \"公司数量\",\n    ]\n    temp_df = temp_df[\n        [\n            \"变动日期\",\n            \"行业分类\",\n            \"行业层级\",\n            \"行业编码\",\n            \"行业名称\",\n            \"公司数量\",\n            \"纳入计算公司数量\",\n            \"总市值-静态\",\n            \"净利润-静态\",\n            \"静态市盈率-加权平均\",\n            \"静态市盈率-中位数\",\n            \"静态市盈率-算术平均\",\n        ]\n    ]\n    temp_df[\"行业层级\"] = pd.to_numeric(temp_df[\"行业层级\"], errors=\"coerce\")\n    temp_df[\"公司数量\"] = pd.to_numeric(temp_df[\"公司数量\"], errors=\"coerce\")\n    temp_df[\"纳入计算公司数量\"] = pd.to_numeric(\n        temp_df[\"纳入计算公司数量\"], errors=\"coerce\"\n    )\n    temp_df[\"总市值-静态\"] = pd.to_numeric(temp_df[\"总市值-静态\"], errors=\"coerce\")\n    temp_df[\"净利润-静态\"] = pd.to_numeric(temp_df[\"净利润-静态\"], errors=\"coerce\")\n    temp_df[\"静态市盈率-加权平均\"] = pd.to_numeric(\n        temp_df[\"静态市盈率-加权平均\"], errors=\"coerce\"\n    )\n    temp_df[\"静态市盈率-中位数\"] = pd.to_numeric(\n        temp_df[\"静态市盈率-中位数\"], errors=\"coerce\"\n    )\n    temp_df[\"静态市盈率-算术平均\"] = pd.to_numeric(\n        temp_df[\"静态市盈率-算术平均\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_industry_pe_ratio_cninfo_df = stock_industry_pe_ratio_cninfo(\n        symbol=\"国证行业分类\", date=\"20240617\"\n    )\n    print(stock_industry_pe_ratio_cninfo_df)\n"
  },
  {
    "path": "akshare/stock/stock_industry_sw.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/7/22 17:30\nDesc: 申万宏源研究-行业分类\nhttp://www.swhyresearch.com/institute_sw/allIndex/downloadCenter/industryType\n\"\"\"\n\nimport io\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.cons import headers\n\n\ndef stock_industry_clf_hist_sw() -> pd.DataFrame:\n    \"\"\"\n    申万宏源研究-行业分类-全部行业分类\n    https://www.swsresearch.com/swindex/pdf/SwClass2021/StockClassifyUse_stock.xls\n    :return: 个股行业分类变动历史\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.swsresearch.com/swindex/pdf/SwClass2021/StockClassifyUse_stock.xls\"  # 此处为 https\n    r = requests.get(url, headers=headers)\n    temp_df = pd.read_excel(\n        io.BytesIO(r.content), dtype={\"股票代码\": \"str\", \"行业代码\": \"str\"}\n    )\n    temp_df.rename(\n        columns={\n            \"股票代码\": \"symbol\",\n            \"计入日期\": \"start_date\",\n            \"行业代码\": \"industry_code\",\n            \"更新日期\": \"update_time\",\n        },\n        inplace=True,\n    )\n    temp_df[\"start_date\"] = pd.to_datetime(\n        temp_df[\"start_date\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"update_time\"] = pd.to_datetime(\n        temp_df[\"update_time\"], errors=\"coerce\"\n    ).dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_industry_clf_hist_sw_df = stock_industry_clf_hist_sw()\n    print(stock_industry_clf_hist_sw_df)\n"
  },
  {
    "path": "akshare/stock/stock_info.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/5/27 15:30\nDesc: 股票基本信息\n\"\"\"\n\nimport json\nimport warnings\nfrom functools import lru_cache\nfrom io import BytesIO\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom akshare.utils.tqdm import get_tqdm\n\n\n@lru_cache()\ndef stock_info_sz_name_code(symbol: str = \"A股列表\") -> pd.DataFrame:\n    \"\"\"\n    深圳证券交易所-股票列表\n    https://www.szse.cn/market/product/stock/list/index.html\n    :param symbol: choice of {\"A股列表\", \"B股列表\", \"CDR列表\", \"AB股列表\"}\n    :type symbol: str\n    :return: 指定 indicator 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.szse.cn/api/report/ShowReport\"\n    indicator_map = {\n        \"A股列表\": \"tab1\",\n        \"B股列表\": \"tab2\",\n        \"CDR列表\": \"tab3\",\n        \"AB股列表\": \"tab4\",\n    }\n    params = {\n        \"SHOWTYPE\": \"xlsx\",\n        \"CATALOGID\": \"1110\",\n        \"TABKEY\": indicator_map[symbol],\n        \"random\": \"0.6935816432433362\",\n    }\n    r = requests.get(url, params=params, timeout=15)\n    with warnings.catch_warnings(record=True):\n        warnings.simplefilter(\"always\")\n        temp_df = pd.read_excel(BytesIO(r.content))\n    if len(temp_df) > 10:\n        if symbol == \"A股列表\":\n            temp_df[\"A股代码\"] = (\n                temp_df[\"A股代码\"]\n                .astype(str)\n                .str.split(\".\", expand=True)\n                .iloc[:, 0]\n                .str.zfill(6)\n                .str.replace(\"000nan\", \"\")\n            )\n            temp_df = temp_df[\n                [\n                    \"板块\",\n                    \"A股代码\",\n                    \"A股简称\",\n                    \"A股上市日期\",\n                    \"A股总股本\",\n                    \"A股流通股本\",\n                    \"所属行业\",\n                ]\n            ]\n        elif symbol == \"B股列表\":\n            temp_df[\"B股代码\"] = (\n                temp_df[\"B股代码\"]\n                .astype(str)\n                .str.split(\".\", expand=True)\n                .iloc[:, 0]\n                .str.zfill(6)\n                .str.replace(\"000nan\", \"\")\n            )\n            temp_df = temp_df[\n                [\n                    \"板块\",\n                    \"B股代码\",\n                    \"B股简称\",\n                    \"B股上市日期\",\n                    \"B股总股本\",\n                    \"B股流通股本\",\n                    \"所属行业\",\n                ]\n            ]\n        elif symbol == \"AB股列表\":\n            temp_df[\"A股代码\"] = (\n                temp_df[\"A股代码\"]\n                .astype(str)\n                .str.split(\".\", expand=True)\n                .iloc[:, 0]\n                .str.zfill(6)\n                .str.replace(\"000nan\", \"\")\n            )\n            temp_df[\"B股代码\"] = (\n                temp_df[\"B股代码\"]\n                .astype(str)\n                .str.split(\".\", expand=True)\n                .iloc[:, 0]\n                .str.zfill(6)\n                .str.replace(\"000nan\", \"\")\n            )\n            temp_df = temp_df[\n                [\n                    \"板块\",\n                    \"A股代码\",\n                    \"A股简称\",\n                    \"A股上市日期\",\n                    \"B股代码\",\n                    \"B股简称\",\n                    \"B股上市日期\",\n                    \"所属行业\",\n                ]\n            ]\n        return temp_df\n    else:\n        return temp_df\n\n\n@lru_cache()\ndef stock_info_sh_name_code(symbol: str = \"主板A股\") -> pd.DataFrame:\n    \"\"\"\n    上海证券交易所-股票列表\n    https://www.sse.com.cn/assortment/stock/list/share/\n    :param symbol: choice of {\"主板A股\": \"1\", \"主板B股\": \"2\", \"科创板\": \"8\"}\n    :type symbol: str\n    :return: 指定 indicator 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    indicator_map = {\"主板A股\": \"1\", \"主板B股\": \"2\", \"科创板\": \"8\"}\n    url = \"https://query.sse.com.cn/sseQuery/commonQuery.do\"\n    headers = {\n        \"Host\": \"query.sse.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://www.sse.com.cn/assortment/stock/list/share/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/81.0.4044.138 Safari/537.36\",\n    }\n    params = {\n        \"STOCK_TYPE\": indicator_map[symbol],\n        \"REG_PROVINCE\": \"\",\n        \"CSRC_CODE\": \"\",\n        \"STOCK_CODE\": \"\",\n        \"sqlId\": \"COMMON_SSE_CP_GPJCTPZ_GPLB_GP_L\",\n        \"COMPANY_STATUS\": \"2,4,5,7,8\",\n        \"type\": \"inParams\",\n        \"isPagination\": \"true\",\n        \"pageHelp.cacheSize\": \"1\",\n        \"pageHelp.beginPage\": \"1\",\n        \"pageHelp.pageSize\": \"10000\",\n        \"pageHelp.pageNo\": \"1\",\n        \"pageHelp.endPage\": \"1\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"])\n    col_stock_code = \"B_STOCK_CODE\" if symbol == \"主板B股\" else \"A_STOCK_CODE\"\n    temp_df.rename(\n        columns={\n            col_stock_code: \"证券代码\",\n            \"SEC_NAME_CN\": \"证券简称\",\n            \"SEC_NAME_FULL\": \"证券全称\",\n            \"COMPANY_ABBR\": \"公司简称\",\n            \"FULL_NAME\": \"公司全称\",\n            \"LIST_DATE\": \"上市日期\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"证券代码\",\n            \"证券简称\",\n            \"证券全称\",\n            \"公司简称\",\n            \"公司全称\",\n            \"上市日期\",\n        ]\n    ]\n    temp_df[\"上市日期\"] = pd.to_datetime(temp_df[\"上市日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\n@lru_cache()\ndef stock_info_bj_name_code() -> pd.DataFrame:\n    \"\"\"\n    北京证券交易所-股票列表\n    https://www.bse.cn/nq/listedcompany.html\n    :return: 股票列表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.bse.cn/nqxxController/nqxxCnzq.do\"\n    payload = {\n        \"page\": \"0\",\n        \"typejb\": \"T\",\n        \"xxfcbj[]\": \"2\",\n        \"xxzqdm\": \"\",\n        \"sortfield\": \"xxzqdm\",\n        \"sorttype\": \"asc\",\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/110.0.0.0 Safari/537.36\"\n    }\n    r = requests.post(url, data=payload, headers=headers)\n    data_text = r.text\n    data_json = json.loads(data_text[data_text.find(\"[\") : -1])\n    total_page = data_json[0][\"totalPages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(total_page), leave=False):\n        payload.update({\"page\": page})\n        r = requests.post(url, data=payload, headers=headers)\n        data_text = r.text\n        data_json = json.loads(data_text[data_text.find(\"[\") : -1])\n        temp_df = data_json[0][\"content\"]\n        temp_df = pd.DataFrame(temp_df)\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"上市日期\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"流通股本\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"所属行业\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"报告日期\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"地区\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"券商\",\n        \"总股本\",\n        \"-\",\n        \"证券代码\",\n        \"-\",\n        \"证券简称\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"证券代码\",\n            \"证券简称\",\n            \"总股本\",\n            \"流通股本\",\n            \"上市日期\",\n            \"所属行业\",\n            \"地区\",\n            \"报告日期\",\n        ]\n    ]\n    big_df[\"报告日期\"] = pd.to_datetime(big_df[\"报告日期\"], errors=\"coerce\").dt.date\n    big_df[\"上市日期\"] = pd.to_datetime(big_df[\"上市日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_info_sh_delist(symbol: str = \"全部\") -> pd.DataFrame:\n    \"\"\"\n    上海证券交易所-终止上市公司\n    https://www.sse.com.cn/assortment/stock/list/delisting/\n    :param symbol: choice of {\"全部\", \"沪市\", \"科创板\"}\n    :type symbol: str\n    :return: 终止上市公司\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"全部\": \"1,2,8\",\n        \"沪市\": \"1,2\",\n        \"科创板\": \"8\",\n    }\n    url = \"https://query.sse.com.cn/commonQuery.do\"\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"query.sse.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://www.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/97.0.4692.71 Safari/537.36\",\n    }\n    params = {\n        \"sqlId\": \"COMMON_SSE_CP_GPJCTPZ_GPLB_GP_L\",\n        \"isPagination\": \"true\",\n        \"STOCK_CODE\": \"\",\n        \"CSRC_CODE\": \"\",\n        \"REG_PROVINCE\": \"\",\n        \"STOCK_TYPE\": symbol_map[symbol],\n        \"COMPANY_STATUS\": \"3\",\n        \"type\": \"inParams\",\n        \"pageHelp.cacheSize\": \"1\",\n        \"pageHelp.beginPage\": \"1\",\n        \"pageHelp.pageSize\": \"500\",\n        \"pageHelp.pageNo\": \"1\",\n        \"pageHelp.endPage\": \"1\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"])\n    temp_df.rename(\n        columns={\n            \"COMPANY_ABBR\": \"公司简称\",\n            \"DELIST_DATE\": \"暂停上市日期\",\n            \"LIST_DATE\": \"上市日期\",\n            \"COMPANY_CODE\": \"公司代码\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"公司代码\",\n            \"公司简称\",\n            \"上市日期\",\n            \"暂停上市日期\",\n        ]\n    ]\n    temp_df[\"上市日期\"] = pd.to_datetime(temp_df[\"上市日期\"], errors=\"coerce\").dt.date\n    temp_df[\"暂停上市日期\"] = pd.to_datetime(\n        temp_df[\"暂停上市日期\"], errors=\"coerce\"\n    ).dt.date\n    return temp_df\n\n\ndef stock_info_sz_delist(symbol: str = \"终止上市公司\") -> pd.DataFrame:\n    \"\"\"\n    深证证券交易所-暂停上市公司-终止上市公司\n    https://www.szse.cn/market/stock/suspend/index.html\n    :param symbol: choice of {\"暂停上市公司\", \"终止上市公司\"}\n    :type symbol: str\n    :return: 暂停上市公司 or 终止上市公司 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    indicator_map = {\"暂停上市公司\": \"tab1\", \"终止上市公司\": \"tab2\"}\n    url = \"https://www.szse.cn/api/report/ShowReport\"\n    params = {\n        \"SHOWTYPE\": \"xlsx\",\n        \"CATALOGID\": \"1793_ssgs\",\n        \"TABKEY\": indicator_map[symbol],\n        \"random\": \"0.6935816432433362\",\n    }\n    r = requests.get(url, params=params)\n    with warnings.catch_warnings(record=True):\n        warnings.simplefilter(\"always\")\n        temp_df = pd.read_excel(BytesIO(r.content))\n        if temp_df.empty:\n            return pd.DataFrame()\n        temp_df[\"证券代码\"] = temp_df[\"证券代码\"].astype(\"str\").str.zfill(6)\n        temp_df[\"上市日期\"] = pd.to_datetime(temp_df[\"上市日期\"]).dt.date\n        temp_df[\"终止上市日期\"] = pd.to_datetime(temp_df[\"终止上市日期\"]).dt.date\n        return temp_df\n\n\ndef stock_info_sz_change_name(symbol: str = \"全称变更\") -> pd.DataFrame:\n    \"\"\"\n    深证证券交易所-市场数据-股票数据-名称变更\n    https://www.szse.cn/www/market/stock/changename/index.html\n    :param symbol: choice of {\"全称变更\": \"tab1\", \"简称变更\": \"tab2\"}\n    :type symbol: str\n    :return: 名称变更数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    indicator_map = {\"全称变更\": \"tab1\", \"简称变更\": \"tab2\"}\n    url = \"https://www.szse.cn/api/report/ShowReport\"\n    params = {\n        \"SHOWTYPE\": \"xlsx\",\n        \"CATALOGID\": \"SSGSGMXX\",\n        \"TABKEY\": indicator_map[symbol],\n        \"random\": \"0.6935816432433362\",\n    }\n    r = requests.get(url, params=params)\n    with warnings.catch_warnings(record=True):\n        warnings.simplefilter(\"always\")\n        temp_df = pd.read_excel(BytesIO(r.content))\n        temp_df[\"证券代码\"] = temp_df[\"证券代码\"].astype(\"str\").str.zfill(6)\n        temp_df[\"变更日期\"] = pd.to_datetime(temp_df[\"变更日期\"]).dt.date\n        temp_df.sort_values([\"变更日期\"], inplace=True, ignore_index=True)\n        return temp_df\n\n\ndef stock_info_change_name(symbol: str = \"000503\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-股票曾用名\n    https://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpInfo/stockid/300378.phtml\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 股票曾用名\n    :rtype: list\n    \"\"\"\n    url = f\"https://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpInfo/stockid/{symbol}.phtml\"\n    r = requests.get(url)\n    temp_df = pd.read_html(StringIO(r.text))[3].iloc[:, :2]\n    temp_df.dropna(inplace=True)\n    temp_df.columns = [\"item\", \"value\"]\n    temp_df[\"item\"] = temp_df[\"item\"].str.split(\"：\", expand=True)[0]\n    try:\n        name_list = (\n            temp_df[temp_df[\"item\"] == \"证券简称更名历史\"].value.tolist()[0].split(\" \")\n        )\n        big_df = pd.DataFrame(name_list)\n        big_df.reset_index(inplace=True)\n        big_df[\"index\"] = big_df.index + 1\n        big_df.columns = [\"index\", \"name\"]\n        return big_df\n    except IndexError:\n        return pd.DataFrame()\n\n\n@lru_cache()\ndef stock_info_a_code_name() -> pd.DataFrame:\n    \"\"\"\n    沪深京 A 股列表\n    :return: 沪深京 A 股数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    big_df = pd.DataFrame()\n    stock_sh = stock_info_sh_name_code(symbol=\"主板A股\")\n    stock_sh = stock_sh[[\"证券代码\", \"证券简称\"]]\n\n    stock_sz = stock_info_sz_name_code(symbol=\"A股列表\")\n    stock_sz[\"A股代码\"] = stock_sz[\"A股代码\"].astype(str).str.zfill(6)\n    big_df = pd.concat(\n        objs=[big_df, stock_sz[[\"A股代码\", \"A股简称\"]]], ignore_index=True\n    )\n    big_df.columns = [\"证券代码\", \"证券简称\"]\n\n    stock_kcb = stock_info_sh_name_code(symbol=\"科创板\")\n    stock_kcb = stock_kcb[[\"证券代码\", \"证券简称\"]]\n\n    stock_bse = stock_info_bj_name_code()\n    stock_bse = stock_bse[[\"证券代码\", \"证券简称\"]]\n    stock_bse.columns = [\"证券代码\", \"证券简称\"]\n\n    big_df = pd.concat(objs=[big_df, stock_sh], ignore_index=True)\n    big_df = pd.concat(objs=[big_df, stock_kcb], ignore_index=True)\n    big_df = pd.concat(objs=[big_df, stock_bse], ignore_index=True)\n    big_df.columns = [\"code\", \"name\"]\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_info_sh_name_code_df = stock_info_sh_name_code(symbol=\"主板A股\")\n    print(stock_info_sh_name_code_df)\n\n    stock_info_sh_name_code_df = stock_info_sh_name_code(symbol=\"主板B股\")\n    print(stock_info_sh_name_code_df)\n\n    stock_info_sh_name_code_df = stock_info_sh_name_code(symbol=\"科创板\")\n    print(stock_info_sh_name_code_df)\n\n    stock_info_sz_name_code_df = stock_info_sz_name_code(symbol=\"A股列表\")\n    print(stock_info_sz_name_code_df)\n\n    stock_info_sz_df = stock_info_sz_name_code(symbol=\"B股列表\")\n    print(stock_info_sz_df)\n\n    stock_info_sz_df = stock_info_sz_name_code(symbol=\"AB股列表\")\n    print(stock_info_sz_df)\n\n    stock_info_sz_df = stock_info_sz_name_code(symbol=\"CDR列表\")\n    print(stock_info_sz_df)\n\n    stock_info_sh_delist_df = stock_info_sh_delist()\n    print(stock_info_sh_delist_df)\n\n    stock_info_sz_change_name_df = stock_info_sz_change_name(symbol=\"全称变更\")\n    print(stock_info_sz_change_name_df)\n\n    stock_info_change_name_df = stock_info_change_name(symbol=\"000503\")\n    print(stock_info_change_name_df)\n\n    stock_info_a_code_name_df = stock_info_a_code_name()\n    print(stock_info_a_code_name_df)\n\n    stock_info_bj_name_code_df = stock_info_bj_name_code()\n    print(stock_info_bj_name_code_df)\n\n    stock_info_sz_delist_df = stock_info_sz_delist(symbol=\"终止上市公司\")\n    print(stock_info_sz_delist_df)\n\n    stock_info_sz_delist_df = stock_info_sz_delist(symbol=\"暂停上市公司\")\n    print(stock_info_sz_delist_df)\n"
  },
  {
    "path": "akshare/stock/stock_info_em.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/2/15 22:00\nDesc: 东方财富网-个股-股票信息\nhttps://quote.eastmoney.com/concept/sh603777.html?from=classic\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_individual_info_em(\n    symbol: str = \"603777\", timeout: float = None\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-个股-股票信息\n    https://quote.eastmoney.com/concept/sh603777.html?from=classic\n    :param symbol: 股票代码\n    :type symbol: str\n    :param timeout: choice of None or a positive float number\n    :type timeout: float\n    :return: 股票信息\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/stock/get\"\n    market_code = 1 if symbol.startswith(\"6\") else 0\n    params = {\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fields\": \"f120,f121,f122,f174,f175,f59,f163,f43,f57,f58,f169,f170,f46,f44,f51,f168,f47,\"\n        \"f164,f116,f60,f45,f52,f50,f48,f167,f117,f71,f161,f49,f530,f135,f136,f137,f138,\"\n        \"f139,f141,f142,f144,f145,f147,f148,f140,f143,f146,f149,f55,f62,f162,f92,f173,f104,\"\n        \"f105,f84,f85,f183,f184,f185,f186,f187,f188,f189,f190,f191,f192,f107,f111,f86,f177,f78,\"\n        \"f110,f262,f263,f264,f267,f268,f255,f256,f257,f258,f127,f199,f128,f198,f259,f260,f261,\"\n        \"f171,f277,f278,f279,f288,f152,f250,f251,f252,f253,f254,f269,f270,f271,f272,f273,f274,\"\n        \"f275,f276,f265,f266,f289,f290,f286,f285,f292,f293,f294,f295,f43\",\n        \"secid\": f\"{market_code}.{symbol}\",\n    }\n    r = requests.get(url, params=params, timeout=timeout)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json)\n    temp_df.reset_index(inplace=True)\n    del temp_df[\"rc\"]\n    del temp_df[\"rt\"]\n    del temp_df[\"svr\"]\n    del temp_df[\"lt\"]\n    del temp_df[\"full\"]\n    code_name_map = {\n        \"f57\": \"股票代码\",\n        \"f58\": \"股票简称\",\n        \"f84\": \"总股本\",\n        \"f85\": \"流通股\",\n        \"f127\": \"行业\",\n        \"f116\": \"总市值\",\n        \"f117\": \"流通市值\",\n        \"f189\": \"上市时间\",\n        \"f43\": \"最新\",\n    }\n    temp_df[\"index\"] = temp_df[\"index\"].map(code_name_map)\n    temp_df = temp_df[pd.notna(temp_df[\"index\"])]\n    if \"dlmkts\" in temp_df.columns:\n        del temp_df[\"dlmkts\"]\n    temp_df.columns = [\n        \"item\",\n        \"value\",\n    ]\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_individual_info_em_df = stock_individual_info_em(symbol=\"000002\")\n    print(stock_individual_info_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_intraday_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/10 18:00\nDesc: 东财财富-日内分时数据\nhttps://quote.eastmoney.com/f1.html?newcode=0.000001\n\"\"\"\n\nimport json\n\nimport pandas as pd\nimport requests\n\n\ndef __event_stream(url, params):\n    # 使用 stream=True 参数来启用流式请求\n    response = requests.get(url, params=params, stream=True)\n    event_data = \"\"\n\n    for line in response.iter_lines():\n        # 过滤掉保持连接的空行\n        if line:\n            event_data += line.decode() + \"\\n\"\n        elif event_data:\n            yield event_data\n            event_data = \"\"\n\n\ndef stock_intraday_em(symbol: str = \"000001\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-分时数据\n    https://quote.eastmoney.com/f1.html?newcode=0.000001\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 分时数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    market_code = 1 if symbol.startswith(\"6\") else 0\n    url = \"https://70.push2.eastmoney.com/api/qt/stock/details/sse\"\n    params = {\n        \"fields1\": \"f1,f2,f3,f4\",\n        \"fields2\": \"f51,f52,f53,f54,f55\",\n        \"mpi\": \"2000\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"pos\": \"-0\",\n        \"secid\": f\"{market_code}.{symbol}\",\n        \"wbp2u\": \"|0|0|0|web\",\n    }\n\n    big_df = pd.DataFrame()  # 创建一个空的 DataFrame\n\n    for event in __event_stream(url, params):\n        # 从每个事件的数据行中删除 \"data: \"，然后解析 JSON\n        event_json = json.loads(event.replace(\"data: \", \"\"))\n        # 将 JSON 数据转换为 DataFrame，然后添加到主 DataFrame 中\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in event_json[\"data\"][\"details\"]]\n        )\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n        break\n\n    big_df.columns = [\"时间\", \"成交价\", \"手数\", \"-\", \"买卖盘性质\"]\n    big_df[\"买卖盘性质\"] = big_df[\"买卖盘性质\"].map(\n        {\"2\": \"买盘\", \"1\": \"卖盘\", \"4\": \"中性盘\"}\n    )\n    big_df = big_df[[\"时间\", \"成交价\", \"手数\", \"买卖盘性质\"]]\n    big_df[\"成交价\"] = pd.to_numeric(big_df[\"成交价\"], errors=\"coerce\")\n    big_df[\"手数\"] = pd.to_numeric(big_df[\"手数\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_intraday_em_df = stock_intraday_em(symbol=\"000001\")\n    print(stock_intraday_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_intraday_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/9/28 13:30\nDesc: 新浪财经-日内分时数据\nhttps://quote.eastmoney.com/f1.html?newcode=0.000001\n\"\"\"\n\nimport math\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_intraday_sina(\n    symbol: str = \"sz000001\", date: str = \"20240321\"\n) -> pd.DataFrame:\n    \"\"\"\n    新浪财经-日内分时数据\n    https://vip.stock.finance.sina.com.cn/quotes_service/view/cn_bill.php?symbol=sz000001\n    :param symbol: 股票代码\n    :type symbol: str\n    :param date: 交易日\n    :type date: str\n    :return: 分时数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_Bill.GetBillListCount\"\n    params = {\n        \"symbol\": f\"{symbol}\",\n        \"num\": \"60\",\n        \"page\": \"1\",\n        \"sort\": \"ticktime\",\n        \"asc\": \"0\",\n        \"volume\": \"0\",\n        \"amount\": \"0\",\n        \"type\": \"0\",\n        \"day\": \"-\".join([date[:4], date[4:6], date[6:]]),\n    }\n    headers = {\n        \"Referer\": f\"https://vip.stock.finance.sina.com.cn/quotes_service/view/cn_bill.php?symbol={symbol}\",\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/107.0.0.0 Safari/537.36\",\n    }\n    r = requests.get(url=url, params=params, headers=headers)\n    data_json = r.json()\n    total_page = math.ceil(int(data_json) / 60)\n    url = \"https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/CN_Bill.GetBillList\"\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"page\": page})\n        r = requests.get(url=url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json)\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.sort_values(by=[\"ticktime\"], inplace=True, ignore_index=True)\n    big_df[\"price\"] = pd.to_numeric(big_df[\"price\"], errors=\"coerce\")\n    big_df[\"volume\"] = pd.to_numeric(big_df[\"volume\"], errors=\"coerce\")\n    big_df[\"prev_price\"] = pd.to_numeric(big_df[\"prev_price\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_intraday_sina_df = stock_intraday_sina(symbol=\"sz000001\", date=\"20250926\")\n    print(stock_intraday_sina_df)\n"
  },
  {
    "path": "akshare/stock/stock_ipo_summary_cninfo.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/25 15:00\nDesc: 巨潮资讯-个股-上市相关\nhttps://webapi.cninfo.com.cn/#/company\n\"\"\"\n\nimport pandas as pd\nimport requests\nimport py_mini_racer\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_ths(file: str = \"cninfo.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef stock_ipo_summary_cninfo(symbol: str = \"600030\") -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-个股-上市相关\n    https://webapi.cninfo.com.cn/#/company\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 上市相关\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1134\"\n    params = {\n        \"scode\": symbol,\n    }\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Accept-Enckey\": mcode,\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.post(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame.from_dict(data_json[\"records\"][0], orient=\"index\").T\n    temp_df.columns = [\n        \"股票代码\",\n        \"招股公告日期\",\n        \"中签率公告日\",\n        \"每股面值\",\n        \"总发行数量\",\n        \"发行前每股净资产\",\n        \"摊薄发行市盈率\",\n        \"募集资金净额\",\n        \"上网发行日期\",\n        \"上市日期\",\n        \"发行价格\",\n        \"发行费用总额\",\n        \"发行后每股净资产\",\n        \"上网发行中签率\",\n        \"主承销商\",\n    ]\n    temp_df[\"招股公告日期\"] = pd.to_datetime(\n        temp_df[\"招股公告日期\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"中签率公告日\"] = pd.to_datetime(\n        temp_df[\"中签率公告日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"上网发行日期\"] = pd.to_datetime(\n        temp_df[\"上网发行日期\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"上市日期\"] = pd.to_datetime(temp_df[\"上市日期\"], errors=\"coerce\").dt.date\n    temp_df[\"每股面值\"] = pd.to_numeric(temp_df[\"每股面值\"], errors=\"coerce\")\n    temp_df[\"总发行数量\"] = pd.to_numeric(temp_df[\"总发行数量\"], errors=\"coerce\")\n    temp_df[\"发行前每股净资产\"] = pd.to_numeric(\n        temp_df[\"发行前每股净资产\"], errors=\"coerce\"\n    )\n    temp_df[\"摊薄发行市盈率\"] = pd.to_numeric(\n        temp_df[\"摊薄发行市盈率\"], errors=\"coerce\"\n    )\n    temp_df[\"募集资金净额\"] = pd.to_numeric(temp_df[\"募集资金净额\"], errors=\"coerce\")\n    temp_df[\"发行价格\"] = pd.to_numeric(temp_df[\"发行价格\"], errors=\"coerce\")\n    temp_df[\"发行费用总额\"] = pd.to_numeric(temp_df[\"发行费用总额\"], errors=\"coerce\")\n    temp_df[\"发行后每股净资产\"] = pd.to_numeric(\n        temp_df[\"发行后每股净资产\"], errors=\"coerce\"\n    )\n    temp_df[\"上网发行中签率\"] = pd.to_numeric(\n        temp_df[\"上网发行中签率\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_ipo_summary_cninfo_df = stock_ipo_summary_cninfo(symbol=\"600030\")\n    print(stock_ipo_summary_cninfo_df)\n"
  },
  {
    "path": "akshare/stock/stock_new_cninfo.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/7/25 14:30\nDesc: 巨潮资讯-数据中心-新股数据\nhttps://webapi.cninfo.com.cn/#/xinguList\n\"\"\"\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_cninfo(file: str = \"cninfo.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef stock_new_gh_cninfo() -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-新股数据-新股过会\n    https://webapi.cninfo.com.cn/#/xinguList\n    :return: 新股过会\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1098\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.post(url, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.columns = [\n        \"公司名称\",\n        \"上会日期\",\n        \"审核类型\",\n        \"审议内容\",\n        \"审核结果\",\n        \"审核公告日\",\n    ]\n    temp_df[\"上会日期\"] = pd.to_datetime(temp_df[\"上会日期\"], errors=\"coerce\").dt.date\n    temp_df[\"审核公告日\"] = pd.to_datetime(\n        temp_df[\"审核公告日\"], errors=\"coerce\"\n    ).dt.date\n    return temp_df\n\n\ndef stock_new_ipo_cninfo() -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-新股数据-新股发行\n    https://webapi.cninfo.com.cn/#/xinguList\n    :return: 新股发行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1097\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    params = {\n        \"timetype\": \"36\",\n        \"market\": \"ALL\",\n    }\n    r = requests.post(url, headers=headers, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.columns = [\n        \"摇号结果公告日\",\n        \"中签公告日\",\n        \"证券简称\",\n        \"上市日期\",\n        \"中签缴款日\",\n        \"申购日期\",\n        \"发行价\",\n        \"证劵代码\",\n        \"上网发行中签率\",\n        \"总发行数量\",\n        \"发行市盈率\",\n        \"上网发行数量\",\n        \"网上申购上限\",\n    ]\n    temp_df = temp_df[\n        [\n            \"证劵代码\",\n            \"证券简称\",\n            \"上市日期\",\n            \"申购日期\",\n            \"发行价\",\n            \"总发行数量\",\n            \"发行市盈率\",\n            \"上网发行中签率\",\n            \"摇号结果公告日\",\n            \"中签公告日\",\n            \"中签缴款日\",\n            \"网上申购上限\",\n            \"上网发行数量\",\n        ]\n    ]\n    temp_df[\"摇号结果公告日\"] = pd.to_datetime(\n        temp_df[\"摇号结果公告日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"中签公告日\"] = pd.to_datetime(\n        temp_df[\"中签公告日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"上市日期\"] = pd.to_datetime(temp_df[\"上市日期\"], errors=\"coerce\").dt.date\n    temp_df[\"中签缴款日\"] = pd.to_datetime(\n        temp_df[\"中签缴款日\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"申购日期\"] = pd.to_datetime(temp_df[\"申购日期\"], errors=\"coerce\").dt.date\n    temp_df[\"发行价\"] = pd.to_numeric(temp_df[\"发行价\"], errors=\"coerce\")\n    temp_df[\"上网发行中签率\"] = pd.to_numeric(\n        temp_df[\"上网发行中签率\"], errors=\"coerce\"\n    )\n    temp_df[\"总发行数量\"] = pd.to_numeric(temp_df[\"总发行数量\"], errors=\"coerce\")\n    temp_df[\"发行市盈率\"] = pd.to_numeric(temp_df[\"发行市盈率\"], errors=\"coerce\")\n    temp_df[\"上网发行数量\"] = pd.to_numeric(temp_df[\"上网发行数量\"], errors=\"coerce\")\n    temp_df[\"网上申购上限\"] = pd.to_numeric(temp_df[\"网上申购上限\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_new_gh_cninfo_df = stock_new_gh_cninfo()\n    print(stock_new_gh_cninfo_df)\n\n    stock_new_ipo_cninfo_df = stock_new_ipo_cninfo()\n    print(stock_new_ipo_cninfo_df)\n"
  },
  {
    "path": "akshare/stock/stock_news_cx.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/12/25 17:00\nDesc: 财新网-财新数据通\nhttps://cxdata.caixin.com/pc/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_news_main_cx() -> pd.DataFrame:\n    \"\"\"\n    财新网-财新数据通\n    https://cxdata.caixin.com/pc/\n    :return: 特定时间表示的字典\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://cxdata.caixin.com/api/dataplus/sjtPc/news\"\n    params = {\n        \"pageNum\": \"1\",\n        \"pageSize\": \"100\",\n        \"showLabels\": \"true\",\n    }\n    headers = {\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36\",\n        \"referer\": \"https://cxdata.caixin.com/index/newsTab?tab=latest\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"data\"])\n    temp_df = temp_df[[\"tag\", \"summary\", \"url\"]]\n    temp_df.columns = [\"tag\", \"summary\", \"url\"]\n    temp_df.dropna(inplace=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_news_main_cx_df = stock_news_main_cx()\n    print(stock_news_main_cx_df)\n"
  },
  {
    "path": "akshare/stock/stock_profile_cninfo.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/10/14 22:00\nDesc: 巨潮资讯-个股-公司概况\nhttps://webapi.cninfo.com.cn/#/company\n\"\"\"\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_ths(file: str = \"cninfo.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef stock_profile_cninfo(symbol: str = \"600030\") -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-个股-公司概况\n    https://webapi.cninfo.com.cn/#/company\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 公司概况\n    :rtype: pandas.DataFrame\n    :raise: Exception，如果服务器返回的数据无法被解析\n    \"\"\"\n    url = \"https://webapi.cninfo.com.cn/api/sysapi/p_sysapi1133\"\n    params = {\n        \"scode\": symbol,\n    }\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Accept-Enckey\": mcode,\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.post(url, params=params, headers=headers)\n    data_json = r.json()\n    columns = [\n        \"公司名称\",\n        \"英文名称\",\n        \"曾用简称\",\n        \"A股代码\",\n        \"A股简称\",\n        \"B股代码\",\n        \"B股简称\",\n        \"H股代码\",\n        \"H股简称\",\n        \"入选指数\",\n        \"所属市场\",\n        \"所属行业\",\n        \"法人代表\",\n        \"注册资金\",\n        \"成立日期\",\n        \"上市日期\",\n        \"官方网站\",\n        \"电子邮箱\",\n        \"联系电话\",\n        \"传真\",\n        \"注册地址\",\n        \"办公地址\",\n        \"邮政编码\",\n        \"主营业务\",\n        \"经营范围\",\n        \"机构简介\",\n    ]\n    count = data_json[\"count\"]\n    if count == 1:\n        # 有公司概况的\n        redundant_json = data_json[\"records\"][0]\n        records_json = {}\n        i = 0\n        for k, v in redundant_json.items():\n            if i == (len(redundant_json) - 4):\n                break\n            records_json[k] = v\n            i += 1\n        del i\n        temp_df = pd.Series(records_json).to_frame().T\n        temp_df.columns = columns\n    elif count == 0:\n        # 没公司概况的\n        temp_df = pd.DataFrame(columns=columns)\n    else:\n        raise Exception(\"数据错误！\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_profile_cninfo_df = stock_profile_cninfo(symbol=\"600030\")\n    print(stock_profile_cninfo_df)\n"
  },
  {
    "path": "akshare/stock/stock_profile_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/9/11 13:00\nDesc: 东方财富-港股-公司概况\nhttps://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CompanyProfile\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_hk_security_profile_em(symbol: str = \"03900\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-港股-证券资料\n    https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CompanyProfile\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 证券资料\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_HKF10_INFO_SECURITYINFO\",\n        \"columns\": \"SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,SECURITY_TYPE,LISTING_DATE,ISIN_CODE,BOARD,\"\n        \"TRADE_UNIT,TRADE_MARKET,GANGGUTONGBIAODISHEN,GANGGUTONGBIAODIHU,PAR_VALUE,\"\n        \"ISSUE_PRICE,ISSUE_NUM,YEAR_SETTLE_DAY\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECUCODE=\"{symbol}.HK\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"200\",\n        \"sortTypes\": \"\",\n        \"sortColumns\": \"\",\n        \"source\": \"F10\",\n        \"client\": \"PC\",\n        \"v\": \"04748497219912483\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    field_mapping = {\n        \"BOARD\": \"板块\",\n        \"GANGGUTONGBIAODIHU\": \"是否沪港通标的\",\n        \"GANGGUTONGBIAODISHEN\": \"是否深港通标的\",\n        \"ISIN_CODE\": \"ISIN（国际证券识别编码）\",\n        \"ISSUE_NUM\": \"发行量(股)\",\n        \"ISSUE_PRICE\": \"发行价\",\n        \"LISTING_DATE\": \"上市日期\",\n        \"PAR_VALUE\": \"每股面值\",\n        \"SECUCODE\": \"证券代码\",\n        \"SECURITY_NAME_ABBR\": \"证券简称\",\n        \"SECURITY_TYPE\": \"证券类型\",\n        \"TRADE_MARKET\": \"交易所\",\n        \"TRADE_UNIT\": \"每手股数\",\n        \"YEAR_SETTLE_DAY\": \"年结日\",\n    }\n    temp_df.rename(columns=field_mapping, inplace=True)\n    temp_df = temp_df[\n        [\n            \"证券代码\",\n            \"证券简称\",\n            \"上市日期\",\n            \"证券类型\",\n            \"发行价\",\n            \"发行量(股)\",\n            \"每手股数\",\n            \"每股面值\",\n            \"交易所\",\n            \"板块\",\n            \"年结日\",\n            \"ISIN（国际证券识别编码）\",\n            \"是否沪港通标的\",\n            \"是否深港通标的\",\n        ]\n    ]\n    return temp_df\n\n\ndef stock_hk_company_profile_em(symbol: str = \"03900\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-港股-公司资料\n    https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CompanyProfile\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 公司资料\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_HKF10_INFO_ORGPROFILE\",\n        \"columns\": \"SECUCODE,SECURITY_CODE,ORG_NAME,ORG_EN_ABBR,BELONG_INDUSTRY,FOUND_DATE,CHAIRMAN,\"\n        \"SECRETARY,ACCOUNT_FIRM,REG_ADDRESS,ADDRESS,YEAR_SETTLE_DAY,EMP_NUM,ORG_TEL,ORG_FAX,ORG_EMAIL,\"\n        \"ORG_WEB,ORG_PROFILE,REG_PLACE\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECUCODE=\"{symbol}.HK\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"200\",\n        \"sortTypes\": \"\",\n        \"sortColumns\": \"\",\n        \"source\": \"F10\",\n        \"client\": \"PC\",\n        \"v\": \"04748497219912483\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    field_mapping = {\n        \"ACCOUNT_FIRM\": \"核数师\",\n        \"ADDRESS\": \"办公地址\",\n        \"BELONG_INDUSTRY\": \"所属行业\",\n        \"CHAIRMAN\": \"董事长\",\n        \"EMP_NUM\": \"员工人数\",\n        \"FOUND_DATE\": \"公司成立日期\",\n        \"ORG_EMAIL\": \"E-MAIL\",\n        \"ORG_EN_ABBR\": \"英文名称\",\n        \"ORG_FAX\": \"传真\",\n        \"ORG_NAME\": \"公司名称\",\n        \"ORG_PROFILE\": \"公司介绍\",\n        \"ORG_TEL\": \"联系电话\",\n        \"ORG_WEB\": \"公司网址\",\n        \"REG_ADDRESS\": \"注册地址\",\n        \"REG_PLACE\": \"注册地\",\n        \"SECRETARY\": \"公司秘书\",\n        \"SECUCODE\": \"股票代码\",\n        \"SECURITY_CODE\": \"证券代码\",\n        \"YEAR_SETTLE_DAY\": \"年结日\",\n    }\n    temp_df.rename(columns=field_mapping, inplace=True)\n    temp_df = temp_df[\n        [\n            \"公司名称\",\n            \"英文名称\",\n            \"注册地\",\n            \"注册地址\",\n            \"公司成立日期\",\n            \"所属行业\",\n            \"董事长\",\n            \"公司秘书\",\n            \"员工人数\",\n            \"办公地址\",\n            \"公司网址\",\n            \"E-MAIL\",\n            \"年结日\",\n            \"联系电话\",\n            \"核数师\",\n            \"传真\",\n            \"公司介绍\",\n        ]\n    ]\n    return temp_df\n\n\ndef stock_hk_financial_indicator_em(symbol: str = \"03900\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-港股-核心必读-最新指标\n    https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CoreReading\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 财务指标\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_CUSTOM_HKF10_FN_MAININDICATORMAX\",\n        \"columns\": \"ORG_CODE,SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,SECURITY_INNER_CODE,REPORT_DATE,BASIC_EPS,\"\n        \"PER_NETCASH_OPERATE,BPS,BPS_NEDILUTED,COMMON_ACS,PER_SHARES,ISSUED_COMMON_SHARES,HK_COMMON_SHARES,\"\n        \"TOTAL_MARKET_CAP,HKSK_MARKET_CAP,OPERATE_INCOME,OPERATE_INCOME_SQ,OPERATE_INCOME_QOQ,\"\n        \"OPERATE_INCOME_QOQ_SQ,HOLDER_PROFIT,HOLDER_PROFIT_SQ,HOLDER_PROFIT_QOQ,HOLDER_PROFIT_QOQ_SQ,PE_TTM,\"\n        \"PE_TTM_SQ,PB_TTM,PB_TTM_SQ,NET_PROFIT_RATIO,NET_PROFIT_RATIO_SQ,ROE_AVG,ROE_AVG_SQ,ROA,\"\n        \"ROA_SQ,DIVIDEND_TTM,DIVIDEND_LFY,DIVI_RATIO,DIVIDEND_RATE,IS_CNY_CODE\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECUCODE=\"{symbol}.HK\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"200\",\n        \"sortTypes\": \"-1\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"source\": \"F10\",\n        \"client\": \"PC\",\n        \"v\": \"07945646099062258\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    field_mapping = {\n        \"SECURITY_CODE\": \"股票代码\",\n        \"BASIC_EPS\": \"基本每股收益(元)\",\n        \"BPS\": \"每股净资产(元)\",\n        \"COMMON_ACS\": \"法定股本(股)\",\n        \"PER_SHARES\": \"每手股\",\n        \"DIVIDEND_TTM\": \"每股股息TTM(港元)\",\n        \"DIVI_RATIO\": \"派息比率(%)\",\n        \"ISSUED_COMMON_SHARES\": \"已发行股本(股)\",\n        \"HK_COMMON_SHARES\": \"已发行股本-H股(股)\",\n        \"PER_NETCASH_OPERATE\": \"每股经营现金流(元)\",\n        \"DIVIDEND_RATE\": \"股息率TTM(%)\",\n        \"TOTAL_MARKET_CAP\": \"总市值(港元)\",\n        \"HKSK_MARKET_CAP\": \"港股市值(港元)\",\n        \"OPERATE_INCOME\": \"营业总收入\",\n        \"OPERATE_INCOME_QOQ\": \"营业总收入滚动环比增长(%)\",\n        \"NET_PROFIT_RATIO\": \"销售净利率(%)\",\n        \"HOLDER_PROFIT\": \"净利润\",\n        \"HOLDER_PROFIT_QOQ\": \"净利润滚动环比增长(%)\",\n        \"ROE_AVG\": \"股东权益回报率(%)\",\n        \"PE_TTM\": \"市盈率\",\n        \"PB_TTM\": \"市净率\",\n        \"ROA\": \"总资产回报率(%)\",\n    }\n    temp_df.rename(columns=field_mapping, inplace=True)\n    temp_df = temp_df[\n        [\n            \"基本每股收益(元)\",\n            \"每股净资产(元)\",\n            \"法定股本(股)\",\n            \"每手股\",\n            \"每股股息TTM(港元)\",\n            \"派息比率(%)\",\n            \"已发行股本(股)\",\n            \"已发行股本-H股(股)\",\n            \"每股经营现金流(元)\",\n            \"股息率TTM(%)\",\n            \"总市值(港元)\",\n            \"港股市值(港元)\",\n            \"营业总收入\",\n            \"营业总收入滚动环比增长(%)\",\n            \"销售净利率(%)\",\n            \"净利润\",\n            \"净利润滚动环比增长(%)\",\n            \"股东权益回报率(%)\",\n            \"市盈率\",\n            \"市净率\",\n            \"总资产回报率(%)\",\n        ]\n    ]\n    return temp_df\n\n\ndef stock_hk_dividend_payout_em(symbol: str = \"03900\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-港股-核心必读-分红派息\n    https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CoreReading\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 分红派息\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_HKF10_MAIN_DIVBASIC\",\n        \"columns\": \"SECURITY_CODE,UPDATE_DATE,REPORT_TYPE,EX_DIVIDEND_DATE,DIVIDEND_DATE,\"\n        \"TRANSFER_END_DATE,YEAR,PLAN_EXPLAIN,IS_BFP\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECURITY_CODE=\"{symbol}\")(IS_BFP=\"0\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"200\",\n        \"sortTypes\": \"-1,-1\",\n        \"sortColumns\": \"NOTICE_DATE,EX_DIVIDEND_DATE\",\n        \"source\": \"F10\",\n        \"client\": \"PC\",\n        \"v\": \"035584639294227527\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n\n    field_mapping = {\n        \"SECURITY_CODE\": \"股票代码\",\n        \"UPDATE_DATE\": \"最新公告日期\",\n        \"REPORT_TYPE\": \"分配类型\",\n        \"EX_DIVIDEND_DATE\": \"除净日\",\n        \"DIVIDEND_DATE\": \"发放日\",\n        \"TRANSFER_END_DATE\": \"截至过户日\",\n        \"YEAR\": \"财政年度\",\n        \"PLAN_EXPLAIN\": \"分红方案\",\n        \"IS_BFP\": \"IS_BFP\",\n    }\n    columns = [\n        \"最新公告日期\",\n        \"财政年度\",\n        \"分红方案\",\n        \"分配类型\",\n        \"除净日\",\n        \"截至过户日\",\n        \"发放日\",\n    ]\n\n    temp_df = pd.DataFrame(columns=columns)\n    if data_json[\"result\"] is not None:\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        temp_df.rename(columns=field_mapping, inplace=True)\n        temp_df = temp_df[columns]\n        temp_df[\"最新公告日期\"] = pd.to_datetime(\n            temp_df[\"最新公告日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"除净日\"] = pd.to_datetime(temp_df[\"除净日\"], errors=\"coerce\").dt.date\n        temp_df[\"发放日\"] = pd.to_datetime(\n            temp_df[\"发放日\"], format=\"%Y/%m/%d\", errors=\"coerce\"\n        ).dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hk_security_profile_em_df = stock_hk_security_profile_em(symbol=\"03900\")\n    print(stock_hk_security_profile_em_df)\n\n    stock_hk_company_profile_em_df = stock_hk_company_profile_em(symbol=\"03900\")\n    print(stock_hk_company_profile_em_df)\n\n    stock_hk_financial_indicator_em_df = stock_hk_financial_indicator_em(symbol=\"03900\")\n    print(stock_hk_financial_indicator_em_df)\n\n    stock_hk_dividend_payout_em_df = stock_hk_dividend_payout_em(symbol=\"03900\")\n    print(stock_hk_dividend_payout_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_rank_forecast.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/8/28 15:30\nDesc: 巨潮资讯-数据中心-评级预测-投资评级\nhttps://webapi.cninfo.com.cn/#/thematicStatistics?name=%E6%8A%95%E8%B5%84%E8%AF%84%E7%BA%A7\n\"\"\"\n\nimport pandas as pd\nimport requests\nimport py_mini_racer\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_cninfo(file: str = \"cninfo.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef stock_rank_forecast_cninfo(date: str = \"20230817\") -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-数据中心-评级预测-投资评级\n    https://webapi.cninfo.com.cn/#/thematicStatistics?name=%E6%8A%95%E8%B5%84%E8%AF%84%E7%BA%A7\n    :param date: 查询日期\n    :type date: str\n    :return: 投资评级\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://webapi.cninfo.com.cn/api/sysapi/p_sysapi1089\"\n    params = {\"tdate\": \"-\".join([date[:4], date[4:6], date[6:]])}\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"http://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"http://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.post(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    temp_df.columns = [\n        \"证券简称\",\n        \"发布日期\",\n        \"前一次投资评级\",\n        \"评级变化\",\n        \"目标价格-上限\",\n        \"是否首次评级\",\n        \"投资评级\",\n        \"研究员名称\",\n        \"研究机构简称\",\n        \"目标价格-下限\",\n        \"证券代码\",\n    ]\n    temp_df = temp_df[\n        [\n            \"证券代码\",\n            \"证券简称\",\n            \"发布日期\",\n            \"研究机构简称\",\n            \"研究员名称\",\n            \"投资评级\",\n            \"是否首次评级\",\n            \"评级变化\",\n            \"前一次投资评级\",\n            \"目标价格-下限\",\n            \"目标价格-上限\",\n        ]\n    ]\n    temp_df[\"目标价格-上限\"] = pd.to_numeric(temp_df[\"目标价格-上限\"], errors=\"coerce\")\n    temp_df[\"目标价格-下限\"] = pd.to_numeric(temp_df[\"目标价格-下限\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_rank_forecast_cninfo_df = stock_rank_forecast_cninfo(date=\"20230817\")\n    print(stock_rank_forecast_cninfo_df)\n"
  },
  {
    "path": "akshare/stock/stock_repurchase_em.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2022/8/29 14:20\nDesc: 东方财富网-数据中心-股票回购-股票回购数据\nhttps://data.eastmoney.com/gphg/hglist.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom tqdm import tqdm\n\n\ndef stock_repurchase_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-股票回购-股票回购数据\n    https://data.eastmoney.com/gphg/hglist.html\n    :return: 股票回购数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"UPD,DIM_DATE,DIM_SCODE\",\n        \"sortTypes\": \"-1,-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPTA_WEB_GETHGLIST_NEW\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    for page in tqdm(range(1, int(total_page) + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.rename(\n        {\n            \"DIM_SCODE\": \"股票代码\",\n            \"SECURITYSHORTNAME\": \"股票简称\",\n            \"NEWPRICE\": \"最新价\",\n            \"REPURPRICECAP\": \"计划回购价格区间\",\n            \"REPURNUMLOWER\": \"计划回购数量区间-下限\",\n            \"REPURNUMCAP\": \"计划回购数量区间-上限\",\n            \"ZSZXX\": \"占公告前一日总股本比例-下限\",\n            \"ZSZSX\": \"占公告前一日总股本比例-上限\",\n            \"JEXX\": \"计划回购金额区间-下限\",\n            \"JESX\": \"计划回购金额区间-上限\",\n            \"DIM_TRADEDATE\": \"回购起始时间\",\n            \"REPURPROGRESS\": \"实施进度\",\n            \"REPURPRICELOWER1\": \"已回购股份价格区间-下限\",\n            \"REPURPRICECAP1\": \"已回购股份价格区间-上限\",\n            \"REPURNUM\": \"已回购股份数量\",\n            \"REPURAMOUNT\": \"已回购金额\",\n            \"UPDATEDATE\": \"最新公告日期\",\n        },\n        axis=\"columns\",\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"股票代码\",\n            \"股票简称\",\n            \"最新价\",\n            \"计划回购价格区间\",\n            \"计划回购数量区间-下限\",\n            \"计划回购数量区间-上限\",\n            \"占公告前一日总股本比例-下限\",\n            \"占公告前一日总股本比例-上限\",\n            \"计划回购金额区间-下限\",\n            \"计划回购金额区间-上限\",\n            \"回购起始时间\",\n            \"实施进度\",\n            \"已回购股份价格区间-下限\",\n            \"已回购股份价格区间-上限\",\n            \"已回购股份数量\",\n            \"已回购金额\",\n            \"最新公告日期\",\n        ]\n    ]\n    big_df.reset_index(inplace=True)\n    big_df.rename(\n        {\n            \"index\": \"序号\",\n        },\n        axis=\"columns\",\n        inplace=True,\n    )\n    big_df[\"序号\"] = big_df.index + 1\n    process_map = {\n        \"001\": \"董事会预案\",\n        \"002\": \"股东大会通过\",\n        \"003\": \"股东大会否决\",\n        \"004\": \"实施中\",\n        \"005\": \"停止实施\",\n        \"006\": \"完成实施\",\n    }\n    big_df[\"实施进度\"] = big_df[\"实施进度\"].map(process_map)\n    big_df[\"回购起始时间\"] = pd.to_datetime(big_df[\"回购起始时间\"]).dt.date\n    big_df[\"最新公告日期\"] = pd.to_datetime(big_df[\"最新公告日期\"]).dt.date\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"])\n    big_df[\"计划回购价格区间\"] = pd.to_numeric(big_df[\"计划回购价格区间\"])\n    big_df[\"计划回购数量区间-下限\"] = pd.to_numeric(big_df[\"计划回购数量区间-下限\"])\n    big_df[\"计划回购数量区间-上限\"] = pd.to_numeric(big_df[\"计划回购数量区间-上限\"])\n    big_df[\"占公告前一日总股本比例-上限\"] = pd.to_numeric(\n        big_df[\"占公告前一日总股本比例-上限\"]\n    )\n    big_df[\"占公告前一日总股本比例-下限\"] = pd.to_numeric(\n        big_df[\"占公告前一日总股本比例-下限\"]\n    )\n    big_df[\"计划回购金额区间-上限\"] = pd.to_numeric(big_df[\"计划回购金额区间-上限\"])\n    big_df[\"计划回购金额区间-下限\"] = pd.to_numeric(big_df[\"计划回购金额区间-下限\"])\n    big_df[\"已回购股份价格区间-下限\"] = pd.to_numeric(big_df[\"已回购股份价格区间-下限\"])\n    big_df[\"已回购股份价格区间-上限\"] = pd.to_numeric(big_df[\"已回购股份价格区间-上限\"])\n    big_df[\"已回购股份数量\"] = pd.to_numeric(big_df[\"已回购股份数量\"])\n    big_df[\"已回购金额\"] = pd.to_numeric(big_df[\"已回购金额\"])\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_repurchase_em_df = stock_repurchase_em()\n    print(stock_repurchase_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_share_changes_cninfo.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/10/21 22:20\nDesc: 巨潮资讯-股本股东-公司股本变动\nhttps://webapi.cninfo.com.cn/api/stock/p_stock2215\n\"\"\"\n\nimport numpy as np\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_cninfo(file: str = \"cninfo.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef stock_share_change_cninfo(\n    symbol: str = \"002594\",\n    start_date: str = \"20091227\",\n    end_date: str = \"20241021\",\n) -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-股本股东-公司股本变动\n    https://webapi.cninfo.com.cn/#/apiDoc\n    查询 p_stock2215 接口\n    :param symbol: 股票代码\n    :type symbol: str\n    :param start_date: 开始变动日期\n    :type start_date: str\n    :param end_date: 结束变动日期\n    :type end_date: str\n    :return: 公司股本变动\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://webapi.cninfo.com.cn/api/stock/p_stock2215\"\n    params = {\n        \"scode\": symbol,\n        \"sdate\": \"-\".join([start_date[:4], start_date[4:6], start_date[6:]]),\n        \"edate\": \"-\".join([end_date[:4], end_date[4:6], end_date[6:]]),\n    }\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_cninfo(\"cninfo.js\")\n    js_code.eval(js_content)\n    mcode = js_code.call(\"getResCode1\")\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Enckey\": mcode,\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Content-Length\": \"0\",\n        \"Host\": \"webapi.cninfo.com.cn\",\n        \"Origin\": \"https://webapi.cninfo.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Proxy-Connection\": \"keep-alive\",\n        \"Referer\": \"https://webapi.cninfo.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.post(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"records\"])\n    cols_map = {\n        \"SECCODE\": \"证券代码\",\n        \"SECNAME\": \"证券简称\",\n        \"ORGNAME\": \"机构名称\",\n        \"DECLAREDATE\": \"公告日期\",\n        \"VARYDATE\": \"变动日期\",\n        \"F001V\": \"变动原因编码\",\n        \"F002V\": \"变动原因\",\n        \"F003N\": \"总股本\",\n        \"F004N\": \"未流通股份\",\n        \"F005N\": \"发起人股份\",\n        \"F006N\": \"国家持股\",\n        \"F007N\": \"国有法人持股\",\n        \"F008N\": \"境内法人持股\",\n        \"F009N\": \"境外法人持股\",\n        \"F010N\": \"自然人持股\",\n        \"F011N\": \"募集法人股\",\n        \"F012N\": \"内部职工股\",\n        \"F013N\": \"转配股\",\n        \"F014N\": \"其他流通受限股份\",\n        \"F015N\": \"优先股\",\n        \"F016N\": \"其他未流通股\",\n        \"F021N\": \"已流通股份\",\n        \"F022N\": \"人民币普通股\",\n        \"F023N\": \"境内上市外资股-B股\",\n        \"F024N\": \"境外上市外资股-H股\",\n        \"F025N\": \"高管股\",\n        \"F026N\": \"其他流通股\",\n        \"F028N\": \"流通受限股份\",\n        \"F017N\": \"配售法人股\",\n        \"F018N\": \"战略投资者持股\",\n        \"F019N\": \"证券投资基金持股\",\n        \"F020N\": \"一般法人持股\",\n        \"F029N\": \"国家持股-受限\",\n        \"F030N\": \"国有法人持股-受限\",\n        \"F031N\": \"其他内资持股-受限\",\n        \"F032N\": \"其中：境内法人持股\",\n        \"F033N\": \"其中：境内自然人持股\",\n        \"F034N\": \"外资持股-受限\",\n        \"F035N\": \"其中：境外法人持股\",\n        \"F036N\": \"其中：境外自然人持股\",\n        \"F037N\": \"其中：限售高管股\",\n        \"F038N\": \"其中：限售B股\",\n        \"F040N\": \"其中：限售H股\",\n        \"F027C\": \"最新记录标识\",\n        \"F049N\": \"其他\",\n        \"F050N\": \"控股股东、实际控制人\",\n    }\n    ignore_cols = [\"最新记录标识\", \"其他\"]\n    temp_df.rename(columns=cols_map, inplace=True)\n    pd.set_option(\"future.no_silent_downcasting\", True)\n    temp_df.fillna(np.nan, inplace=True)\n    temp_df[\"公告日期\"] = pd.to_datetime(temp_df[\"公告日期\"], errors=\"coerce\").dt.date\n    temp_df[\"变动日期\"] = pd.to_datetime(temp_df[\"变动日期\"], errors=\"coerce\").dt.date\n    data_df = temp_df[[c for c in temp_df.columns if c not in ignore_cols]]\n    return data_df\n\n\nif __name__ == \"__main__\":\n    stock_share_change_cninfo_df = stock_share_change_cninfo(\n        symbol=\"002594\",\n        start_date=\"20091227\",\n        end_date=\"20241021\",\n    )\n    print(stock_share_change_cninfo_df)\n"
  },
  {
    "path": "akshare/stock/stock_share_hold.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/11/8 17:00\nDesc: 董监高及相关人员持股变动\n北京证券交易所-信息披露-监管信息-董监高及相关人员持股变动\nhttps://www.bse.cn/disclosure/djg_sharehold_change.html\n深圳证券交易所-信息披露-监管信息公开-董监高人员股份变动\nhttps://www.szse.cn/disclosure/supervision/change/index.html\n上海证券交易所-披露-监管信息公开-公司监管-董董监高人员股份变动\nhttps://www.sse.com.cn/disclosure/credibility/supervision/change/\n\"\"\"\n\nimport json\n\nimport pandas as pd\nimport requests\nfrom tqdm import tqdm\n\n\ndef stock_share_hold_change_sse(symbol: str = \"600000\") -> pd.DataFrame:\n    \"\"\"\n    上海证券交易所-披露-监管信息公开-公司监管-董董监高人员股份变动\n    https://www.sse.com.cn/disclosure/credibility/supervision/change/\n    :param symbol: choice of {\"全部\", \"具体股票代码\"}\n    :type symbol: str\n    :return: 董监高人员股份变动\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://query.sse.com.cn/commonQuery.do\"\n    params = {\n        \"isPagination\": \"true\",\n        \"pageHelp.pageSize\": \"100\",\n        \"pageHelp.pageNo\": \"1\",\n        \"pageHelp.beginPage\": \"1\",\n        \"pageHelp.cacheSize\": \"1\",\n        \"pageHelp.endPage\": \"1\",\n        \"sqlId\": \"COMMON_SSE_XXPL_CXJL_SSGSGFBDQK_S\",\n        \"COMPANY_CODE\": \"\",\n        \"NAME\": \"\",\n        \"BEGIN_DATE\": \"1990-01-01\",\n        \"END_DATE\": \"2050-01-01\",\n        \"BOARDTYPE\": \"\",\n    }\n    params if symbol == \"全部\" else params.update({\"COMPANY_CODE\": symbol})\n    headers = {\n        \"Host\": \"query.sse.com.cn\",\n        \"Referer\": \"https://www.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    total_page = data_json[\"pageHelp\"][\"pageCount\"]\n    big_df = pd.DataFrame()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageHelp.pageNo\": page,\n                \"pageHelp.beginPage\": page,\n                \"pageHelp.endPage\": page,\n            }\n        )\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"])\n        big_df = pd.concat(objs=[big_df, temp_df], axis=0, ignore_index=True)\n    big_df.rename(\n        columns={\n            \"STOCK_TYPE\": \"股票种类\",\n            \"COMPANY_ABBR\": \"公司名称\",\n            \"NUM\": \"-\",\n            \"CURRENT_AVG_PRICE\": \"本次变动平均价格\",\n            \"CHANGE_DATE\": \"变动日期\",\n            \"HOLDSTOCK_NUM\": \"变动后持股数\",\n            \"NAME\": \"姓名\",\n            \"CHANGE_REASON\": \"变动原因\",\n            \"DUTY\": \"职务\",\n            \"CURRENCY_TYPE\": \"货币种类\",\n            \"COMPANY_CODE\": \"公司代码\",\n            \"FORM_DATE\": \"填报日期\",\n            \"CHANGE_NUM\": \"变动数\",\n            \"CURRENT_NUM\": \"本次变动前持股数\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"公司代码\",\n            \"公司名称\",\n            \"姓名\",\n            \"职务\",\n            \"股票种类\",\n            \"货币种类\",\n            \"本次变动前持股数\",\n            \"变动数\",\n            \"本次变动平均价格\",\n            \"变动后持股数\",\n            \"变动原因\",\n            \"变动日期\",\n            \"填报日期\",\n        ]\n    ]\n    big_df[\"变动日期\"] = pd.to_datetime(big_df[\"变动日期\"], errors=\"coerce\").dt.date\n    big_df[\"填报日期\"] = pd.to_datetime(big_df[\"填报日期\"], errors=\"coerce\").dt.date\n\n    big_df[\"本次变动前持股数\"] = pd.to_numeric(\n        big_df[\"本次变动前持股数\"], errors=\"coerce\"\n    )\n    big_df[\"变动数\"] = pd.to_numeric(big_df[\"变动数\"], errors=\"coerce\")\n    big_df[\"本次变动平均价格\"] = pd.to_numeric(\n        big_df[\"本次变动平均价格\"], errors=\"coerce\"\n    )\n    big_df[\"变动后持股数\"] = pd.to_numeric(big_df[\"变动后持股数\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_share_hold_change_szse(symbol: str = \"全部\") -> pd.DataFrame:\n    \"\"\"\n    深圳证券交易所-信息披露-监管信息公开-董监高人员股份变动\n    https://www.szse.cn/disclosure/supervision/change/index.html\n    :param symbol: choice of {\"全部\", \"具体股票代码\"}\n    :type symbol: str\n    :return: 董监高人员股份变动\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.szse.cn/api/report/ShowReport/data\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n    }\n    params = {\n        \"SHOWTYPE\": \"JSON\",\n        \"CATALOGID\": \"1801_cxda\",\n        \"TABKEY\": \"tab1\",\n        \"PAGENO\": \"1\",\n        \"random\": \"0.7874198771222201\",\n    }\n    params if symbol == \"全部\" else params.update({\"txtDMorJC\": symbol})\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    total_page = data_json[0][\"metadata\"][\"pagecount\"]\n    big_df = pd.DataFrame()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"PAGENO\": page,\n            }\n        )\n        r = requests.get(url, headers=headers, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[0][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], axis=0, ignore_index=True)\n    big_df.rename(\n        columns={\n            \"zqdm\": \"证券代码\",\n            \"zqjc\": \"证券简称\",\n            \"ggxm\": \"董监高姓名\",\n            \"jyrq\": \"变动日期\",\n            \"bdgs\": \"变动股份数量\",\n            \"bdjj\": \"成交均价\",\n            \"bdyy\": \"变动原因\",\n            \"cgbdbl\": \"变动比例\",\n            \"cgzs\": \"当日结存股数\",\n            \"gdxm\": \"股份变动人姓名\",\n            \"zw\": \"职务\",\n            \"gxlb\": \"变动人与董监高的关系\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"证券代码\",\n            \"证券简称\",\n            \"董监高姓名\",\n            \"变动日期\",\n            \"变动股份数量\",\n            \"成交均价\",\n            \"变动原因\",\n            \"变动比例\",\n            \"当日结存股数\",\n            \"股份变动人姓名\",\n            \"职务\",\n            \"变动人与董监高的关系\",\n        ]\n    ]\n    big_df[\"变动日期\"] = pd.to_datetime(big_df[\"变动日期\"], errors=\"coerce\").dt.date\n    big_df[\"变动股份数量\"] = pd.to_numeric(big_df[\"变动股份数量\"], errors=\"coerce\")\n    big_df[\"成交均价\"] = pd.to_numeric(big_df[\"成交均价\"], errors=\"coerce\")\n    big_df[\"变动比例\"] = pd.to_numeric(big_df[\"变动比例\"], errors=\"coerce\")\n    big_df[\"当日结存股数\"] = big_df[\"当日结存股数\"].str.replace(\",\", \"\")\n    big_df[\"当日结存股数\"] = pd.to_numeric(big_df[\"当日结存股数\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_share_hold_change_bse(symbol: str = \"430489\") -> pd.DataFrame:\n    \"\"\"\n    北京证券交易所-信息披露-监管信息-董监高及相关人员持股变动\n    https://www.bse.cn/disclosure/djg_sharehold_change.html\n    :param symbol: choice of {\"全部\", \"具体股票代码\"}\n    :type symbol: str\n    :return: 董监高及相关人员持股变动\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol = symbol if symbol != \"全部\" else \"\"\n    params = {\n        \"page\": \"0\",\n        \"startTime\": \"\",\n        \"endTime\": \"\",\n        \"stockCode\": symbol,\n        \"djgName\": \"\",\n        \"ssgs\": \"1\",\n        \"sortfield\": \"bean.change_date desc, bean.stock_code asc, bean.change_amount desc, bean.price\",\n        \"sorttype\": \"desc\",\n    }\n    url = \"https://www.bse.cn/djgCgbdController/getDjgCgbdList.do\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/93.0.4577.63 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers, params=params)\n    data_text = r.text\n    data_text = data_text.strip(\"null(\").strip(\")\")\n    data_json = json.loads(data_text)\n    total_page = data_json[0][\"result\"][\"totalPages\"]\n    big_df = pd.DataFrame()\n    for page in tqdm(range(0, total_page), leave=False):\n        params.update(\n            {\n                \"page\": page,\n            }\n        )\n        r = requests.get(url, headers=headers, params=params)\n        data_text = r.text\n        data_text = data_text.strip(\"null(\").strip(\")\")\n        data_json = json.loads(data_text)\n        temp_df = pd.DataFrame(data_json[0][\"result\"][\"content\"])\n        big_df = pd.concat(objs=[big_df, temp_df], axis=0, ignore_index=True)\n    big_df.rename(\n        columns={\n            \"changeAmount\": \"变动股数\",\n            \"changeDate\": \"变动日期\",\n            \"createTime\": \"-\",\n            \"djgName\": \"姓名\",\n            \"duty\": \"职务\",\n            \"id\": \"-\",\n            \"infoId\": \"-\",\n            \"newAmount\": \"变动后持股数\",\n            \"preAmount\": \"变动前持股数\",\n            \"price\": \"变动均价\",\n            \"reason\": \"变动原因\",\n            \"ssgs\": \"-\",\n            \"stockCode\": \"代码\",\n            \"stockName\": \"简称\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"代码\",\n            \"简称\",\n            \"姓名\",\n            \"职务\",\n            \"变动日期\",\n            \"变动股数\",\n            \"变动前持股数\",\n            \"变动后持股数\",\n            \"变动均价\",\n            \"变动原因\",\n        ]\n    ]\n    big_df[\"变动日期\"] = pd.to_datetime(big_df[\"变动日期\"], errors=\"coerce\").dt.date\n    big_df[\"变动股数\"] = pd.to_numeric(big_df[\"变动股数\"], errors=\"coerce\")\n    big_df[\"变动前持股数\"] = pd.to_numeric(big_df[\"变动前持股数\"], errors=\"coerce\")\n    big_df[\"变动后持股数\"] = pd.to_numeric(big_df[\"变动后持股数\"], errors=\"coerce\")\n    big_df[\"变动均价\"] = pd.to_numeric(big_df[\"变动均价\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_share_hold_change_sse_df = stock_share_hold_change_sse(symbol=\"600000\")\n    print(stock_share_hold_change_sse_df)\n\n    stock_share_hold_change_sse_df = stock_share_hold_change_sse(symbol=\"全部\")\n    print(stock_share_hold_change_sse_df)\n\n    stock_share_hold_change_szse_df = stock_share_hold_change_szse(symbol=\"001308\")\n    print(stock_share_hold_change_szse_df)\n\n    stock_share_hold_change_szse_df = stock_share_hold_change_szse(symbol=\"全部\")\n    print(stock_share_hold_change_szse_df)\n\n    stock_share_hold_change_bse_df = stock_share_hold_change_bse(symbol=\"430489\")\n    print(stock_share_hold_change_bse_df)\n\n    stock_share_hold_change_bse_df = stock_share_hold_change_bse(symbol=\"全部\")\n    print(stock_share_hold_change_bse_df)\n"
  },
  {
    "path": "akshare/stock/stock_stop.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/2/24 18:33\nDesc: 两网及退市\nhttps://quote.eastmoney.com/center/gridlist.html#staq_net_board\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_staq_net_stop() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-沪深个股-两网及退市\n    https://quote.eastmoney.com/center/gridlist.html#staq_net_board\n    :return: 两网及退市\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://5.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"50000\",\n        \"po\": \"1\",\n        \"np\": \"2\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f3\",\n        \"fs\": \"m:0 s:3\",\n        \"fields\": \"f12,f14\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"]).T\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    temp_df.columns = [\"序号\", \"代码\", \"名称\"]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_staq_net_stop_df = stock_staq_net_stop()\n    print(stock_staq_net_stop_df)\n"
  },
  {
    "path": "akshare/stock/stock_summary.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/5/5 00:00\nDesc: 股票数据-总貌-市场总貌\n股票数据-总貌-成交概括\nhttps://www.szse.cn/market/overview/index.html\nhttps://www.sse.com.cn/market/stockdata/statistic/\n\"\"\"\n\nimport warnings\nfrom io import BytesIO, StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef stock_szse_summary(date: str = \"20240830\") -> pd.DataFrame:\n    \"\"\"\n    深证证券交易所-总貌-证券类别统计\n    https://www.szse.cn/market/overview/index.html\n    :param date: 最近结束交易日\n    :type date: str\n    :return: 证券类别统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://www.szse.cn/api/report/ShowReport\"\n    params = {\n        \"SHOWTYPE\": \"xlsx\",\n        \"CATALOGID\": \"1803_sczm\",\n        \"TABKEY\": \"tab1\",\n        \"txtQueryDate\": \"-\".join([date[:4], date[4:6], date[6:]]),\n        \"random\": \"0.39339437497296137\",\n    }\n    r = requests.get(url, params=params)\n    with warnings.catch_warnings(record=True):\n        warnings.simplefilter(\"always\")\n        temp_df = pd.read_excel(BytesIO(r.content), engine=\"openpyxl\")\n    temp_df[\"证券类别\"] = temp_df[\"证券类别\"].str.strip()\n    temp_df.iloc[:, 2:] = temp_df.iloc[:, 2:].map(lambda x: x.replace(\",\", \"\"))\n    temp_df.columns = [\"证券类别\", \"数量\", \"成交金额\", \"总市值\", \"流通市值\"]\n    temp_df[\"数量\"] = pd.to_numeric(temp_df[\"数量\"], errors=\"coerce\")\n    temp_df[\"成交金额\"] = pd.to_numeric(temp_df[\"成交金额\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"流通市值\"] = pd.to_numeric(temp_df[\"流通市值\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_szse_area_summary(date: str = \"202203\") -> pd.DataFrame:\n    \"\"\"\n    深证证券交易所-总貌-地区交易排序\n    https://www.szse.cn/market/overview/index.html\n    :param date: 最近结束交易日\n    :type date: str\n    :return: 地区交易排序\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.szse.cn/api/report/ShowReport\"\n    params = {\n        \"SHOWTYPE\": \"xlsx\",\n        \"CATALOGID\": \"1803_sczm\",\n        \"TABKEY\": \"tab2\",\n        \"DATETIME\": \"-\".join([date[:4], date[4:6]]),\n        \"random\": \"0.39349437497296137\",\n    }\n    r = requests.get(url, params=params)\n    with warnings.catch_warnings(record=True):\n        warnings.simplefilter(\"always\")\n        temp_df = pd.read_excel(BytesIO(r.content), engine=\"openpyxl\")\n    column_map = {\n        \"序号\": \"序号\",\n        \"地区\": \"地区\",\n        \"总交易额(元)\": \"总交易额\",\n        \"占市场%\": \"占市场\",\n        \"股票交易额(元)\": \"股票交易额\",\n        \"基金交易额(元)\": \"基金交易额\",\n        \"债券交易额(元)\": \"债券交易额\",\n        \"优先股交易额(元)\": \"优先股交易额\",\n        \"期权交易额(元)\": \"期权交易额\",\n    }\n    temp_df.rename(columns=column_map, inplace=True)\n    temp_df[\"总交易额\"] = temp_df[\"总交易额\"].str.replace(\",\", \"\")\n    temp_df[\"总交易额\"] = pd.to_numeric(temp_df[\"总交易额\"], errors=\"coerce\")\n    temp_df[\"占市场\"] = pd.to_numeric(temp_df[\"占市场\"], errors=\"coerce\")\n    temp_df[\"股票交易额\"] = temp_df[\"股票交易额\"].str.replace(\",\", \"\")\n    temp_df[\"股票交易额\"] = pd.to_numeric(temp_df[\"股票交易额\"], errors=\"coerce\")\n    temp_df[\"基金交易额\"] = temp_df[\"基金交易额\"].str.replace(\",\", \"\")\n    temp_df[\"基金交易额\"] = pd.to_numeric(temp_df[\"基金交易额\"], errors=\"coerce\")\n    temp_df[\"债券交易额\"] = temp_df[\"债券交易额\"].str.replace(\",\", \"\")\n    temp_df[\"债券交易额\"] = pd.to_numeric(temp_df[\"债券交易额\"], errors=\"coerce\")\n    if \"优先股交易额\" in temp_df.columns:\n        temp_df[\"优先股交易额\"] = temp_df[\"优先股交易额\"].astype(\n            \"str\"\n        )  # 2025年2月为float\n        temp_df[\"优先股交易额\"] = temp_df[\"优先股交易额\"].str.replace(\",\", \"\")\n        temp_df[\"优先股交易额\"] = pd.to_numeric(\n            temp_df[\"优先股交易额\"], errors=\"coerce\"\n        )\n    if \"期权交易额\" in temp_df.columns:\n        temp_df[\"期权交易额\"] = temp_df[\"期权交易额\"].astype(\"str\")\n        temp_df[\"期权交易额\"] = temp_df[\"期权交易额\"].str.replace(\",\", \"\")\n        temp_df[\"期权交易额\"] = pd.to_numeric(temp_df[\"期权交易额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_szse_sector_summary(\n    symbol: str = \"当月\", date: str = \"202501\"\n) -> pd.DataFrame:\n    \"\"\"\n    深圳证券交易所-统计资料-股票行业成交数据\n    https://docs.static.szse.cn/www/market/periodical/month/W020220511355248518608.html\n    :param symbol: choice of {\"当月\", \"当年\"}\n    :type symbol: str\n    :param date: 交易年月\n    :type date: str\n    :return: 股票行业成交数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.szse.cn/market/periodical/month/index.html\"\n    r = requests.get(url)\n    r.encoding = \"utf8\"\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    tags_list = soup.find_all(name=\"div\", attrs={\"class\": \"g-container\"})[1].find_all(\n        \"script\"\n    )\n    tags_dict = [\n        eval(\n            item.string[item.string.find(\"{\") : item.string.find(\"}\") + 1]\n            .replace(\"\\n\", \"\")\n            .replace(\" \", \"\")\n            .replace(\"value\", \"'value'\")\n            .replace(\"text\", \"'text'\")\n        )\n        for item in tags_list\n    ]\n    date_url_dict = dict(\n        zip(\n            [item[\"text\"] for item in tags_dict],\n            [item[\"value\"][2:] for item in tags_dict],\n        )\n    )\n    date_format = \"-\".join([date[:4], date[4:]])\n    url = f\"https://www.szse.cn/market/periodical/month/{date_url_dict[date_format]}\"\n    r = requests.get(url)\n    r.encoding = \"utf8\"\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    url = [\n        item for item in soup.find_all(\"a\") if item.get_text() == \"股票行业成交数据\"\n    ][0][\"href\"]\n\n    if symbol == \"当月\":\n        r = requests.get(url)\n        temp_df = pd.read_html(StringIO(r.text), encoding=\"gbk\")[0]\n        temp_df.columns = [\n            \"项目名称\",\n            \"项目名称-英文\",\n            \"交易天数\",\n            \"成交金额-人民币元\",\n            \"成交金额-占总计\",\n            \"成交股数-股数\",\n            \"成交股数-占总计\",\n            \"成交笔数-笔\",\n            \"成交笔数-占总计\",\n        ]\n    else:\n        temp_df = pd.read_html(url, encoding=\"gbk\")[1]\n        temp_df.columns = [\n            \"项目名称\",\n            \"项目名称-英文\",\n            \"交易天数\",\n            \"成交金额-人民币元\",\n            \"成交金额-占总计\",\n            \"成交股数-股数\",\n            \"成交股数-占总计\",\n            \"成交笔数-笔\",\n            \"成交笔数-占总计\",\n        ]\n\n    temp_df[\"交易天数\"] = pd.to_numeric(temp_df[\"交易天数\"], errors=\"coerce\")\n    temp_df[\"成交金额-人民币元\"] = pd.to_numeric(\n        temp_df[\"成交金额-人民币元\"], errors=\"coerce\"\n    )\n    temp_df[\"成交金额-占总计\"] = pd.to_numeric(\n        temp_df[\"成交金额-占总计\"], errors=\"coerce\"\n    )\n    temp_df[\"成交股数-股数\"] = pd.to_numeric(temp_df[\"成交股数-股数\"], errors=\"coerce\")\n    temp_df[\"成交股数-占总计\"] = pd.to_numeric(\n        temp_df[\"成交股数-占总计\"], errors=\"coerce\"\n    )\n    temp_df[\"成交笔数-笔\"] = pd.to_numeric(temp_df[\"成交笔数-笔\"], errors=\"coerce\")\n    temp_df[\"成交笔数-占总计\"] = pd.to_numeric(\n        temp_df[\"成交笔数-占总计\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_sse_summary() -> pd.DataFrame:\n    \"\"\"\n    上海证券交易所-总貌\n    https://www.sse.com.cn/market/stockdata/statistic/\n    :return: 上海证券交易所-总貌\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://query.sse.com.cn/commonQuery.do\"\n    params = {\n        \"sqlId\": \"COMMON_SSE_SJ_GPSJ_GPSJZM_TJSJ_L\",\n        \"PRODUCT_NAME\": \"股票,主板,科创板\",\n        \"type\": \"inParams\",\n    }\n    headers = {\n        \"Referer\": \"http://www.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/89.0.4389.90 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"]).T\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = [\n        \"流通股本\",\n        \"总市值\",\n        \"平均市盈率\",\n        \"上市公司\",\n        \"上市股票\",\n        \"流通市值\",\n        \"报告时间\",\n        \"-\",\n        \"总股本\",\n        \"项目\",\n    ]\n    temp_df = temp_df[temp_df[\"index\"] != \"-\"].iloc[:-1, :]\n    temp_df.columns = [\n        \"项目\",\n        \"股票\",\n        \"主板\",\n        \"科创板\",\n    ]\n    return temp_df\n\n\ndef stock_sse_deal_daily(date: str = \"20241216\") -> pd.DataFrame:\n    \"\"\"\n    上海证券交易所-数据-股票数据-成交概况-股票成交概况-每日股票情况\n    https://www.sse.com.cn/market/stockdata/overview/day/\n    :param date: 交易日\n    :type date: str\n    :return: 每日股票情况\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://query.sse.com.cn/commonQuery.do\"\n    params = {\n        \"sqlId\": \"COMMON_SSE_SJ_GPSJ_CJGK_MRGK_C\",\n        \"PRODUCT_CODE\": \"01,02,03,11,17\",\n        \"type\": \"inParams\",\n        \"SEARCH_DATE\": \"-\".join([date[:4], date[4:6], date[6:]]),\n    }\n    headers = {\n        \"Referer\": \"https://www.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/89.0.4389.90 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"])\n    temp_df = temp_df.T\n    temp_df.reset_index(inplace=True)\n    if len(temp_df.columns) == 5:\n        # 20250228\n        temp_df.columns = [\n            \"单日情况\",\n            \"主板A\",\n            \"主板B\",\n            \"科创板\",\n            \"股票\",\n        ]\n        temp_df[\"股票回购\"] = \"-\"\n    elif len(temp_df.columns) == 4:\n        # 20220104\n        temp_df.columns = [\n            \"单日情况\",\n            \"主板A\",\n            \"主板B\",\n            \"科创板\",\n        ]\n        temp_df[\"股票\"] = \"-\"\n        temp_df[\"股票回购\"] = \"-\"\n    else:\n        temp_df.columns = [\n            \"单日情况\",\n            \"主板A\",\n            \"主板B\",\n            \"科创板\",\n            \"股票回购\",\n            \"股票\",\n        ]\n    temp_df = temp_df[\n        [\n            \"单日情况\",\n            \"股票\",\n            \"主板A\",\n            \"主板B\",\n            \"科创板\",\n            \"股票回购\",\n        ]\n    ]\n    temp_df[\"单日情况\"] = [\n        \"市价总值\",\n        \"成交量\",\n        \"平均市盈率\",\n        \"换手率\",\n        \"成交金额\",\n        \"-\",\n        \"流通市值\",\n        \"流通换手率\",\n        \"报告日期\",\n        \"挂牌数\",\n        \"-\",\n    ]\n    temp_df = temp_df[temp_df[\"单日情况\"] != \"-\"]\n    temp_df = temp_df[temp_df[\"单日情况\"] != \"报告日期\"]\n    # 定义期望的指标顺序\n    desired_order = [\n        \"挂牌数\",\n        \"市价总值\",\n        \"流通市值\",\n        \"成交金额\",\n        \"成交量\",\n        \"平均市盈率\",\n        \"换手率\",\n        \"流通换手率\",\n    ]\n    # 使用 categorical 类型重新排序\n    temp_df[\"单日情况\"] = pd.Categorical(\n        temp_df[\"单日情况\"], categories=desired_order, ordered=True\n    )\n    # 按照指标排序\n    temp_df.sort_values(\"单日情况\", ignore_index=True, inplace=True)\n    temp_df[\"股票\"] = pd.to_numeric(temp_df[\"股票\"], errors=\"coerce\")\n    temp_df[\"主板A\"] = pd.to_numeric(temp_df[\"主板A\"], errors=\"coerce\")\n    temp_df[\"主板B\"] = pd.to_numeric(temp_df[\"主板B\"], errors=\"coerce\")\n    temp_df[\"科创板\"] = pd.to_numeric(temp_df[\"科创板\"], errors=\"coerce\")\n    temp_df[\"股票回购\"] = pd.to_numeric(temp_df[\"股票回购\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_szse_summary_df = stock_szse_summary(date=\"20200619\")\n    print(stock_szse_summary_df)\n\n    stock_szse_area_summary_df = stock_szse_area_summary(date=\"202412\")\n    print(stock_szse_area_summary_df)\n\n    stock_szse_area_summary_df = stock_szse_area_summary(date=\"202502\")\n    print(stock_szse_area_summary_df)\n\n    stock_szse_sector_summary_df = stock_szse_sector_summary(\n        symbol=\"当月\", date=\"202501\"\n    )\n    print(stock_szse_sector_summary_df)\n\n    stock_sse_summary_df = stock_sse_summary()\n    print(stock_sse_summary_df)\n\n    stock_sse_deal_daily_df = stock_sse_deal_daily(date=\"20250228\")\n    print(stock_sse_deal_daily_df)\n"
  },
  {
    "path": "akshare/stock/stock_us_famous.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/2/24 18:30\nDesc: 东方财富网-行情中心-美股市场-知名美股\nhttps://quote.eastmoney.com/center/gridlist.html#us_wellknown\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_us_famous_spot_em(symbol: str = \"科技类\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-美股市场-知名美股\n    https://quote.eastmoney.com/center/gridlist.html#us_wellknown\n    :param symbol: choice of {'科技类', '金融类', '医药食品类', '媒体类', '汽车能源类', '制造零售类'}\n    :type: str\n    :return: 知名美股实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    market_map = {\n        \"科技类\": \"0216\",\n        \"金融类\": \"0217\",\n        \"医药食品类\": \"0218\",\n        \"媒体类\": \"0220\",\n        \"汽车能源类\": \"0219\",\n        \"制造零售类\": \"0221\",\n    }\n    url = \"https://69.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"50000\",\n        \"po\": \"1\",\n        \"np\": \"2\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f3\",\n        \"fs\": f\"b:MK{market_map[symbol]}\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,\"\n        \"f25,f26,f22,f33,f11,f62,f128,f136,f115,f152\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"]).T\n    temp_df.columns = [\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"简称\",\n        \"编码\",\n        \"名称\",\n        \"最高价\",\n        \"最低价\",\n        \"开盘价\",\n        \"昨收价\",\n        \"总市值\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"市盈率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = range(1, len(temp_df) + 1)\n    temp_df.rename(columns={\"index\": \"序号\"}, inplace=True)\n    temp_df[\"代码\"] = temp_df[\"编码\"].astype(str) + \".\" + temp_df[\"简称\"]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"昨收价\",\n            \"总市值\",\n            \"市盈率\",\n            \"代码\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"开盘价\"] = pd.to_numeric(temp_df[\"开盘价\"], errors=\"coerce\")\n    temp_df[\"最高价\"] = pd.to_numeric(temp_df[\"最高价\"], errors=\"coerce\")\n    temp_df[\"最低价\"] = pd.to_numeric(temp_df[\"最低价\"], errors=\"coerce\")\n    temp_df[\"昨收价\"] = pd.to_numeric(temp_df[\"昨收价\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"市盈率\"] = pd.to_numeric(temp_df[\"市盈率\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    for item in {\n        \"科技类\",\n        \"金融类\",\n        \"医药食品类\",\n        \"媒体类\",\n        \"汽车能源类\",\n        \"制造零售类\",\n    }:\n        stock_us_famous_spot_em_df = stock_us_famous_spot_em(symbol=item)\n        print(stock_us_famous_spot_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_us_js.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/11/27 13:30\nDesc: 美股目标价 or 港股目标价\nhttps://www.ushknews.com/report.html\n\"\"\"\n\nimport requests\nimport pandas as pd\n\n\ndef stock_price_js(symbol: str = \"us\") -> pd.DataFrame:\n    \"\"\"\n    美股目标价 or 港股目标价\n    https://www.ushknews.com/report.html\n    :param symbol: choice of {\"us\", \"hk\"}\n    :type symbol: str\n    :return: 美股目标价 or 港股目标价\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://calendar-api.ushknews.com/getWebTargetPriceList\"\n    params = {\n        \"limit\": \"20\",\n        \"category\": symbol,\n    }\n    headers = {\n        \"accept\": \"application/json, text/plain, */*\",\n        \"accept-encoding\": \"gzip, deflate, br\",\n        \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"cache-control\": \"no-cache\",\n        \"origin\": \"https://www.ushknews.com\",\n        \"pragma\": \"no-cache\",\n        \"referer\": \"https://www.ushknews.com/\",\n        \"sec-ch-ua\": '\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"sec-fetch-dest\": \"empty\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-site\": \"same-site\",\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36\",\n        \"x-app-id\": \"BNsiR9uq7yfW0LVz\",\n        \"x-version\": \"1.0.0\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    json_data = r.json()\n    temp_df = pd.DataFrame(json_data[\"data\"][\"list\"])\n    temp_df.columns = [\n        \"_\",\n        \"_\",\n        \"评级\",\n        \"_\",\n        \"最新目标价\",\n        \"先前目标价\",\n        \"机构名称\",\n        \"日期\",\n        \"_\",\n        \"个股名称\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"个股名称\",\n            \"评级\",\n            \"先前目标价\",\n            \"最新目标价\",\n            \"机构名称\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"]).dt.date\n    temp_df[\"先前目标价\"] = pd.to_numeric(temp_df[\"先前目标价\"], errors=\"coerce\")\n    temp_df[\"最新目标价\"] = pd.to_numeric(temp_df[\"最新目标价\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_price_js_df = stock_price_js(symbol=\"us\")\n    print(stock_price_js_df)\n\n    stock_price_js_df = stock_price_js(symbol=\"hk\")\n    print(stock_price_js_df)\n"
  },
  {
    "path": "akshare/stock/stock_us_pink.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/6/17 14:00\nDesc: 东方财富网-行情中心-美股市场-粉单市场\nhttps://quote.eastmoney.com/center/gridlist.html#us_pinksheet\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_us_pink_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-美股市场-粉单市场\n    https://quote.eastmoney.com/center/gridlist.html#us_pinksheet\n    :return: 粉单市场实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://23.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"np\": \"1\",\n        \"fltt\": \"1\",\n        \"invt\": \"1\",\n        \"fs\": \"m:153\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,\"\n        \"f26,f22,f33,f11,f62,f128,f136,f115,f152\",\n        \"fid\": \"f3\",\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"dect\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    import math\n\n    total_page = math.ceil(data_json[\"data\"][\"total\"] / 100)\n    tqdm = get_tqdm()\n    big_df = pd.DataFrame()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pn\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"简称\",\n        \"编码\",\n        \"名称\",\n        \"最高价\",\n        \"最低价\",\n        \"开盘价\",\n        \"昨收价\",\n        \"总市值\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"市盈率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = range(1, len(big_df) + 1)\n    big_df.rename(columns={\"index\": \"序号\"}, inplace=True)\n    big_df[\"代码\"] = big_df[\"编码\"].astype(str) + \".\" + big_df[\"简称\"]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"昨收价\",\n            \"总市值\",\n            \"市盈率\",\n            \"代码\",\n        ]\n    ]\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"涨跌额\"] = pd.to_numeric(big_df[\"涨跌额\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"开盘价\"] = pd.to_numeric(big_df[\"开盘价\"], errors=\"coerce\")\n    big_df[\"最高价\"] = pd.to_numeric(big_df[\"最高价\"], errors=\"coerce\")\n    big_df[\"最低价\"] = pd.to_numeric(big_df[\"最低价\"], errors=\"coerce\")\n    big_df[\"昨收价\"] = pd.to_numeric(big_df[\"昨收价\"], errors=\"coerce\")\n    big_df[\"总市值\"] = pd.to_numeric(big_df[\"总市值\"], errors=\"coerce\")\n    big_df[\"市盈率\"] = pd.to_numeric(big_df[\"市盈率\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_us_pink_spot_em_df = stock_us_pink_spot_em()\n    print(stock_us_pink_spot_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_us_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/1/14 17:00\nDesc: 新浪财经-美股实时行情数据和历史行情数据\nhttps://finance.sina.com.cn/stock/usstock/sector.shtml\n\"\"\"\n\nimport json\nfrom functools import lru_cache\n\nimport pandas as pd\nimport requests\nimport py_mini_racer\nfrom tqdm import tqdm\n\nfrom akshare.stock.cons import (\n    js_hash_text,\n    zh_js_decode,\n    us_sina_stock_list_url,\n    us_sina_stock_dict_payload,\n    us_sina_stock_hist_qfq_url,\n)\n\n\n@lru_cache()\ndef __get_us_page_count() -> int:\n    \"\"\"\n    新浪财经-美股-总页数\n    https://finance.sina.com.cn/stock/usstock/sector.shtml\n    :return: 美股总页数\n    :rtype: int\n    \"\"\"\n    page = \"1\"\n    us_js_decode = (\n        f\"US_CategoryService.getList?page={page}&num=20&sort=&asc=0&market=&id=\"\n    )\n    js_code = py_mini_racer.MiniRacer()\n    js_code.eval(js_hash_text)\n    dict_list = js_code.call(\"d\", us_js_decode)  # 执行js解密代码\n    us_sina_stock_dict_payload.update({\"page\": \"{}\".format(page)})\n    res = requests.get(\n        us_sina_stock_list_url.format(dict_list),\n        params=us_sina_stock_dict_payload,\n    )\n    data_json = json.loads(res.text[res.text.find(\"({\") + 1 : res.text.rfind(\");\")])\n    if not isinstance(int(data_json[\"count\"]) / 20, int):\n        page_count = int(int(data_json[\"count\"]) / 20) + 1\n    else:\n        page_count = int(int(data_json[\"count\"]) / 20)\n    return page_count\n\n\n@lru_cache()\ndef get_us_stock_name() -> pd.DataFrame:\n    \"\"\"\n    u.s. stock's english name, chinese name and symbol\n    you should use symbol to get apply into the next function\n    https://finance.sina.com.cn/stock/usstock/sector.shtml\n    :return: stock's english name, chinese name and symbol\n    :rtype: pandas.DataFrame\n    \"\"\"\n    big_df = pd.DataFrame()\n    page_count = __get_us_page_count()\n    for page in tqdm(range(1, page_count + 1), leave=False):\n        us_js_decode = (\n            \"US_CategoryService.getList?page={}&num=20&sort=&asc=0&market=&id=\".format(\n                page\n            )\n        )\n        js_code = py_mini_racer.MiniRacer()\n        js_code.eval(js_hash_text)\n        dict_list = js_code.call(\"d\", us_js_decode)  # 执行js解密代码\n        us_sina_stock_dict_payload.update({\"page\": \"{}\".format(page)})\n        res = requests.get(\n            us_sina_stock_list_url.format(dict_list),\n            params=us_sina_stock_dict_payload,\n        )\n        data_json = json.loads(res.text[res.text.find(\"({\") + 1 : res.text.rfind(\");\")])\n        big_df = pd.concat(\n            objs=[big_df, pd.DataFrame(data_json[\"data\"])], ignore_index=True\n        )\n    return big_df[[\"name\", \"cname\", \"symbol\"]]\n\n\ndef stock_us_spot() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-所有美股的数据, 注意延迟 15 分钟\n    https://finance.sina.com.cn/stock/usstock/sector.shtml\n    :return: 美股所有股票实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    big_df = pd.DataFrame()\n    page_count = __get_us_page_count()\n    for page in tqdm(range(1, page_count + 1), leave=False):\n        # page = \"1\"\n        us_js_decode = (\n            \"US_CategoryService.getList?page={}&num=20&sort=&asc=0&market=&id=\".format(\n                page\n            )\n        )\n        js_code = py_mini_racer.MiniRacer()\n        js_code.eval(js_hash_text)\n        dict_list = js_code.call(\"d\", us_js_decode)  # 执行js解密代码\n        us_sina_stock_dict_payload.update({\"page\": \"{}\".format(page)})\n        res = requests.get(\n            us_sina_stock_list_url.format(dict_list),\n            params=us_sina_stock_dict_payload,\n        )\n        data_json = json.loads(res.text[res.text.find(\"({\") + 1 : res.text.rfind(\");\")])\n        big_df = pd.concat(\n            objs=[big_df, pd.DataFrame(data_json[\"data\"])], ignore_index=True\n        )\n    return big_df\n\n\ndef stock_us_daily(symbol: str = \"FB\", adjust: str = \"\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-美股\n    https://finance.sina.com.cn/stock/usstock/sector.shtml\n    备注：\n    1. CIEN 新浪复权因子错误\n    2. AI 新浪复权因子错误, 该股票刚上市未发生复权, 但是返回复权因子\n    :param symbol: 可以使用 get_us_stock_name 获取\n    :type symbol: str\n    :param adjust: \"\": 返回未复权的数据 ; qfq: 返回前复权后的数据; qfq-factor: 返回前复权因子和调整;\n    :type adjust: str\n    :return: 指定 adjust 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://finance.sina.com.cn/staticdata/us/{symbol}\"\n    res = requests.get(url)\n    js_code = py_mini_racer.MiniRacer()\n    js_code.eval(zh_js_decode)\n    dict_list = js_code.call(\"d\", res.text.split(\"=\")[1].split(\";\")[0].replace('\"', \"\"))\n    data_df = pd.DataFrame(dict_list)\n    data_df[\"date\"] = pd.to_datetime(data_df[\"date\"]).dt.date\n    data_df.index = pd.to_datetime(data_df[\"date\"])\n    del data_df[\"amount\"]\n    del data_df[\"date\"]\n    data_df = data_df.astype(\"float\")\n    url = us_sina_stock_hist_qfq_url.format(symbol)\n    res = requests.get(url)\n    qfq_factor_df = pd.DataFrame(eval(res.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"])\n    qfq_factor_df.rename(\n        columns={\n            \"c\": \"adjust\",\n            \"d\": \"date\",\n            \"f\": \"qfq_factor\",\n        },\n        inplace=True,\n    )\n    qfq_factor_df.index = pd.to_datetime(qfq_factor_df[\"date\"])\n    del qfq_factor_df[\"date\"]\n\n    # 处理复权因子\n    temp_date_range = pd.date_range(\"1900-01-01\", qfq_factor_df.index[0].isoformat())\n    temp_df = pd.DataFrame(range(len(temp_date_range)), temp_date_range)\n    new_range = pd.merge(\n        temp_df, qfq_factor_df, left_index=True, right_index=True, how=\"left\"\n    )\n    new_range = new_range.ffill()\n    new_range = new_range.iloc[:, [1, 2]]\n\n    if adjust == \"qfq\":\n        if len(new_range) == 1:\n            new_range.index.values[0] = pd.to_datetime(str(data_df.index.date[0]))\n        temp_df = pd.merge(\n            data_df, new_range, left_index=True, right_index=True, how=\"left\"\n        )\n        try:\n            # try for pandas >= 2.1.0\n            temp_df.ffill(inplace=True)\n        except Exception:\n            try:\n                # try for pandas < 2.1.0\n                temp_df.fillna(method=\"ffill\", inplace=True)\n            except Exception as e:\n                print(\"Error:\", e)\n        try:\n            # try for pandas >= 2.1.0\n            temp_df.bfill(inplace=True)\n        except Exception:\n            try:\n                # try for pandas < 2.1.0\n                temp_df.fillna(method=\"bfill\", inplace=True)\n            except Exception as e:\n                print(\"Error:\", e)\n\n        temp_df = temp_df.astype(float)\n        temp_df[\"open\"] = temp_df[\"open\"] * temp_df[\"qfq_factor\"] + temp_df[\"adjust\"]\n        temp_df[\"high\"] = temp_df[\"high\"] * temp_df[\"qfq_factor\"] + temp_df[\"adjust\"]\n        temp_df[\"close\"] = temp_df[\"close\"] * temp_df[\"qfq_factor\"] + temp_df[\"adjust\"]\n        temp_df[\"low\"] = temp_df[\"low\"] * temp_df[\"qfq_factor\"] + temp_df[\"adjust\"]\n        temp_df = temp_df.apply(lambda x: round(x, 4))\n        temp_df = temp_df.astype(\"float\")\n        # 处理复权因子错误的情况-开始\n        check_df = temp_df[[\"open\", \"high\", \"low\", \"close\"]].copy()\n        check_df.dropna(inplace=True)\n        if check_df.empty:\n            data_df.reset_index(inplace=True)\n            return data_df\n        # 处理复权因子错误的情况-结束\n        result_data = temp_df.iloc[:, :-2]\n        result_data.reset_index(inplace=True)\n        return result_data\n\n    if adjust == \"qfq-factor\":\n        qfq_factor_df.reset_index(inplace=True)\n        return qfq_factor_df\n\n    if adjust == \"\":\n        data_df.reset_index(inplace=True)\n        return data_df\n\n\nif __name__ == \"__main__\":\n    stock_us_stock_name_df = get_us_stock_name()\n    print(stock_us_stock_name_df)\n\n    stock_us_spot_df = stock_us_spot()\n    print(stock_us_spot_df)\n\n    stock_us_daily_df = stock_us_daily(symbol=\".DJI\", adjust=\"\")\n    print(stock_us_daily_df)\n\n    stock_us_daily_qfq_df = stock_us_daily(symbol=\".DJI\", adjust=\"qfq\")\n    print(stock_us_daily_qfq_df)\n\n    stock_us_daily_qfq_factor_df = stock_us_daily(symbol=\"AAPL\", adjust=\"qfq-factor\")\n    print(stock_us_daily_qfq_factor_df)\n"
  },
  {
    "path": "akshare/stock/stock_weibo_nlp.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/3/5 17:00\nDesc: 金十数据中心-实时监控-微博舆情报告\nhttps://datacenter.jin10.com/market\n报告内容：时间期限可选择2小时、6小时、12小时、1天、1周、1月。\n该表格展示的是在对应的时间期限内，个股在微博讨论中的人气排行指数。\n红色颜色越深，表明该股票讨论热度越高，其当前的涨幅更大。\n绿色颜色越深，表明该股票讨论的热度越低，其当前的跌幅更大。\n\"\"\"\n\nimport time\nfrom typing import Dict\n\nimport pandas as pd\nimport requests\n\n\ndef stock_js_weibo_nlp_time() -> Dict:\n    \"\"\"\n    https://datacenter.jin10.com/market\n    :return: 特定时间表示的字典\n    :rtype: dict\n    \"\"\"\n    url = \"https://datacenter-api.jin10.com/weibo/config\"\n    payload = {\"_\": int(time.time() * 1000)}\n    headers = {\n        \"authority\": \"datacenter-api.jin10.com\",\n        \"pragma\": \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"accept\": \"*/*\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"sec-fetch-dest\": \"empty\",\n        \"x-csrf-token\": \"\",\n        \"x-version\": \"1.0.0\",\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36\",\n        \"origin\": \"https://datacenter.jin10.com\",\n        \"sec-fetch-site\": \"same-site\",\n        \"sec-fetch-mode\": \"cors\",\n        \"referer\": \"https://datacenter.jin10.com/market\",\n        \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    }\n\n    r = requests.get(url, headers=headers, data=payload)\n    return r.json()[\"data\"][\"timescale\"]\n\n\ndef stock_js_weibo_report(time_period: str = \"CNHOUR12\") -> pd.DataFrame:\n    \"\"\"\n    金十数据中心-实时监控-微博舆情报告\n    https://datacenter.jin10.com/market\n    :param time_period: {'CNHOUR2': '2小时', 'CNHOUR6': '6小时', 'CNHOUR12': '12小时', 'CNHOUR24': '1天', 'CNDAY7': '1周', 'CNDAY30': '1月'}\n    :type time_period: str\n    :return: 指定时间段的微博舆情报告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-api.jin10.com/weibo/list\"\n    payload = {\"timescale\": time_period, \"_\": int(time.time() * 1000)}\n    headers = {\n        \"authority\": \"datacenter-api.jin10.com\",\n        \"pragma\": \"no-cache\",\n        \"cache-control\": \"no-cache\",\n        \"accept\": \"*/*\",\n        \"x-app-id\": \"rU6QIu7JHe2gOUeR\",\n        \"sec-fetch-dest\": \"empty\",\n        \"x-csrf-token\": \"\",\n        \"x-version\": \"1.0.0\",\n        \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36\",\n        \"origin\": \"https://datacenter.jin10.com\",\n        \"sec-fetch-site\": \"same-site\",\n        \"sec-fetch-mode\": \"cors\",\n        \"referer\": \"https://datacenter.jin10.com/market\",\n        \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    }\n\n    r = requests.get(url, params=payload, headers=headers)\n    temp_df = pd.DataFrame(r.json()[\"data\"])\n    temp_df[\"rate\"] = pd.to_numeric(temp_df[\"rate\"])\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_js_weibo_nlp_time_map = stock_js_weibo_nlp_time()\n    print(stock_js_weibo_nlp_time_map)\n\n    get_news_df = stock_js_weibo_report(time_period=\"CNHOUR6\")\n    print(get_news_df)\n"
  },
  {
    "path": "akshare/stock/stock_xq.py",
    "content": "# !/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/1/13 15:00\nDesc: 雪球-行情中心-个股\nhttps://xueqiu.com/S/SH513520\n\"\"\"\n\nimport re\nfrom datetime import datetime\n\nimport pandas as pd\nimport requests\n\n\ndef _convert_timestamp(timestamp_ms: int) -> str:\n    \"\"\"\n    时间戳转换为字符串时间\n    :param timestamp_ms: 时间戳\n    :type timestamp_ms: int\n    :return: 字符串\n    :rtype: str\n    \"\"\"\n    timestamp_s = timestamp_ms / 1000\n    datetime_obj = datetime.fromtimestamp(timestamp_s)\n    return datetime_obj.strftime(\"%Y-%m-%d %H:%M:%S\")\n\n\ndef stock_individual_spot_xq(\n    symbol: str = \"SH600000\",\n    token: str = None,\n    timeout: float = None,\n) -> pd.DataFrame:\n    \"\"\"\n    雪球-行情中心-个股\n    https://xueqiu.com/S/SH600000\n    :param symbol: 证券代码，可以是 A 股代码，A 股场内基金代码，A 股指数，美股代码, 美股指数\n    :type symbol: str\n    :param token: set xueqiu token\n    :type token: str\n    :param timeout: choice of None or a positive float number\n    :type timeout: float\n    :return: 证券最新行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    from akshare.stock.cons import xq_a_token\n\n    session = requests.Session()\n    xq_a_token = token or xq_a_token\n    headers = {\n        \"cookie\": f\"xq_a_token={xq_a_token};\",\n        \"User-Agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 \"\n        \"(KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n    }\n    session.get(url=\"https://xueqiu.com\", headers=headers)\n    url = f\"https://stock.xueqiu.com/v5/stock/quote.json?symbol={symbol}&extend=detail\"\n    r = session.get(url, headers=headers, timeout=timeout)\n    column_name_map = {\n        \"acc_unit_nav\": \"累计净值\",\n        \"amount\": \"成交额\",\n        \"amplitude\": \"振幅\",\n        \"avg_price\": \"均价\",\n        \"chg\": \"涨跌\",\n        \"currency\": \"货币\",\n        \"current\": \"现价\",\n        \"current_year_percent\": \"今年以来涨幅\",\n        \"dividend\": \"股息(TTM)\",\n        \"dividend_yield\": \"股息率(TTM)\",\n        \"eps\": \"每股收益\",\n        \"exchange\": \"交易所\",\n        \"float_market_capital\": \"流通值\",\n        \"float_shares\": \"流通股\",\n        \"found_date\": \"成立日期\",\n        \"goodwill_in_net_assets\": \"净资产中的商誉\",\n        \"high\": \"最高\",\n        \"high52w\": \"52周最高\",\n        \"iopv\": \"参考净值\",\n        \"issue_date\": \"发行日期\",\n        \"last_close\": \"昨收\",\n        \"limit_down\": \"跌停\",\n        \"limit_up\": \"涨停\",\n        \"lot_size\": \"最小交易单位\",\n        \"low\": \"最低\",\n        \"low52w\": \"52周最低\",\n        \"market_capital\": \"资产净值/总市值\",\n        \"name\": \"名称\",\n        \"nav_date\": \"净值日期\",\n        \"navps\": \"每股净资产\",\n        \"open\": \"今开\",\n        \"pb\": \"市净率\",\n        \"pe_forecast\": \"市盈率(动)\",\n        \"pe_lyr\": \"市盈率(静)\",\n        \"pe_ttm\": \"市盈率(TTM)\",\n        \"percent\": \"涨幅\",\n        \"premium_rate\": \"溢价率\",\n        \"psr\": \"市销率\",\n        \"symbol\": \"代码\",\n        \"total_shares\": \"基金份额/总股本\",\n        \"turnover_rate\": \"周转率\",\n        \"unit_nav\": \"单位净值\",\n        \"volume\": \"成交量\",\n        \"time\": \"时间\",\n    }\n    json_data = r.json()\n    temp_df = pd.json_normalize(json_data[\"data\"][\"quote\"])\n    temp_df.columns = [\n        *map(\n            lambda x: column_name_map[x] if x in column_name_map.keys() else x,\n            temp_df.columns,\n        )  # 由于传入的 symbol 可能是个股，可能是指数，也可能是基金，所以这里取列的最大公约数，没有数据的列内容为 None\n    ]\n    temp_df = temp_df[\n        list(\n            filter(\n                lambda x: re.search(pattern=\"[\\u4e00-\\u9fa5]\", string=x),\n                temp_df.columns,\n            )  # 过滤 temp_df，留下包含汉字的列\n        )\n    ]\n    temp_df = temp_df.T.reset_index()\n    temp_df.columns = [\"item\", \"value\"]\n    temp_df.loc[temp_df[\"item\"] == \"时间\", \"value\"] = temp_df.loc[\n        temp_df[\"item\"] == \"时间\", \"value\"\n    ].apply(lambda x: _convert_timestamp(int(x)) if x and not pd.isna(x) else None)\n    temp_df.loc[temp_df[\"item\"] == \"发行日期\", \"value\"] = temp_df.loc[\n        temp_df[\"item\"] == \"发行日期\", \"value\"\n    ].apply(lambda x: _convert_timestamp(int(x)) if x and not pd.isna(x) else None)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_individual_spot_xq_df = stock_individual_spot_xq(symbol=\"BJ430139\")\n    print(stock_individual_spot_xq_df)\n\n    stock_individual_spot_xq_df = stock_individual_spot_xq(symbol=\"SH600000\")\n    print(stock_individual_spot_xq_df)\n\n    stock_individual_spot_xq_df = stock_individual_spot_xq(symbol=\"SPY\")\n    print(stock_individual_spot_xq_df)\n\n    stock_individual_spot_xq_df = stock_individual_spot_xq(symbol=\".INX\")\n    print(stock_individual_spot_xq_df)\n"
  },
  {
    "path": "akshare/stock/stock_zh_a_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/1/9 22:00\nDesc: 新浪财经-A股-实时行情数据和历史行情数据(包含前复权和后复权因子)\nhttps://finance.sina.com.cn/realstock/company/sh689009/nc.shtml\n\"\"\"\n\nimport json\nimport re\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\nfrom akshare.stock.cons import (\n    zh_sina_a_stock_payload,\n    zh_sina_a_stock_url,\n    zh_sina_a_stock_count_url,\n    zh_sina_a_stock_hist_url,\n    hk_js_decode,\n    zh_sina_a_stock_hfq_url,\n    zh_sina_a_stock_qfq_url,\n    zh_sina_a_stock_amount_url,\n)\nfrom akshare.utils import demjson\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef _get_zh_a_page_count() -> int:\n    \"\"\"\n    所有股票的总页数\n    https://vip.stock.finance.sina.com.cn/mkt/#hs_a\n    :return: 需要采集的股票总页数\n    :rtype: int\n    \"\"\"\n    res = requests.get(zh_sina_a_stock_count_url)\n    page_count = int(re.findall(re.compile(r\"\\d+\"), res.text)[0]) / 80\n    if isinstance(page_count, int):\n        return page_count\n    else:\n        return int(page_count) + 1\n\n\ndef stock_zh_a_spot() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-所有 A 股的实时行情数据; 重复运行本函数会被新浪暂时封 IP\n    https://vip.stock.finance.sina.com.cn/mkt/#hs_a\n    :return: 所有股票的实时行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    big_df = pd.DataFrame()\n    page_count = _get_zh_a_page_count()\n    zh_sina_stock_payload_copy = zh_sina_a_stock_payload.copy()\n    tqdm = get_tqdm()\n    for page in tqdm(\n        range(1, page_count + 1), leave=False, desc=\"Please wait for a moment\"\n    ):\n        zh_sina_stock_payload_copy.update({\"page\": page})\n        r = requests.get(zh_sina_a_stock_url, params=zh_sina_stock_payload_copy)\n        data_json = demjson.decode(r.text)\n        big_df = pd.concat(objs=[big_df, pd.DataFrame(data_json)], ignore_index=True)\n\n    big_df = big_df.astype(\n        {\n            \"trade\": \"float\",\n            \"pricechange\": \"float\",\n            \"changepercent\": \"float\",\n            \"buy\": \"float\",\n            \"sell\": \"float\",\n            \"settlement\": \"float\",\n            \"open\": \"float\",\n            \"high\": \"float\",\n            \"low\": \"float\",\n            \"volume\": \"float\",\n            \"amount\": \"float\",\n            \"per\": \"float\",\n            \"pb\": \"float\",\n            \"mktcap\": \"float\",\n            \"nmc\": \"float\",\n            \"turnoverratio\": \"float\",\n        }\n    )\n    big_df.columns = [\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最新价\",\n        \"涨跌额\",\n        \"涨跌幅\",\n        \"买入\",\n        \"卖出\",\n        \"昨收\",\n        \"今开\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"时间戳\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"买入\",\n            \"卖出\",\n            \"昨收\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"时间戳\",\n        ]\n    ]\n    return big_df\n\n\ndef stock_zh_a_daily(\n    symbol: str = \"sh603843\",\n    start_date: str = \"19900101\",\n    end_date: str = \"21000118\",\n    adjust: str = \"\",\n) -> pd.DataFrame:\n    \"\"\"\n    新浪财经-A 股-个股的历史行情数据, 大量抓取容易封 IP\n    https://finance.sina.com.cn/realstock/company/sh603843/nc.shtml\n    :param symbol: sh600000\n    :type symbol: str\n    :param start_date: 20201103; 开始日期\n    :type start_date: str\n    :param end_date: 20201103; 结束日期\n    :type end_date: str\n    :param adjust: 默认为空: 返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; hfq-factor: 返回后复权因子; qfq-factor: 返回前复权因子\n    :type adjust: str\n    :return: 行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n\n    def _fq_factor(method: str) -> pd.DataFrame:\n        if method == \"hfq\":\n            r = requests.get(zh_sina_a_stock_hfq_url.format(symbol))\n            hfq_factor_df = pd.DataFrame(\n                eval(r.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"]\n            )\n            if hfq_factor_df.shape[0] == 0:\n                raise ValueError(\"sina hfq factor not available\")\n            hfq_factor_df.columns = [\"date\", \"hfq_factor\"]\n            hfq_factor_df.index = pd.to_datetime(hfq_factor_df.date)\n            del hfq_factor_df[\"date\"]\n            hfq_factor_df.reset_index(inplace=True)\n            return hfq_factor_df\n        else:\n            r = requests.get(zh_sina_a_stock_qfq_url.format(symbol))\n            qfq_factor_df = pd.DataFrame(\n                eval(r.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"]\n            )\n            if qfq_factor_df.shape[0] == 0:\n                raise ValueError(\"sina hfq factor not available\")\n            qfq_factor_df.columns = [\"date\", \"qfq_factor\"]\n            qfq_factor_df.index = pd.to_datetime(qfq_factor_df.date)\n            del qfq_factor_df[\"date\"]\n            qfq_factor_df.reset_index(inplace=True)\n            return qfq_factor_df\n\n    if adjust in (\"hfq-factor\", \"qfq-factor\"):\n        return _fq_factor(adjust.split(\"-\")[0])\n\n    r = requests.get(zh_sina_a_stock_hist_url.format(symbol))\n    js_code = py_mini_racer.MiniRacer()\n    js_code.eval(hk_js_decode)\n    dict_list = js_code.call(\n        \"d\", r.text.split(\"=\")[1].split(\";\")[0].replace('\"', \"\")\n    )  # 执行js解密代码\n    data_df = pd.DataFrame(dict_list)\n    data_df.index = pd.to_datetime(data_df[\"date\"], errors=\"coerce\").dt.date\n    del data_df[\"date\"]\n    try:\n        del data_df[\"prevclose\"]\n    except:  # noqa: E722\n        pass\n    try:\n        del data_df[\"postVol\"]\n        del data_df[\"postAmt\"]\n    except:  # noqa: E722\n        pass\n    data_df = data_df.astype(\"float\")\n    r = requests.get(zh_sina_a_stock_amount_url.format(symbol, symbol))\n    amount_data_json = demjson.decode(r.text[r.text.find(\"[\") : r.text.rfind(\"]\") + 1])\n    amount_data_df = pd.DataFrame(amount_data_json)\n    amount_data_df.columns = [\"date\", \"outstanding_share\"]\n    amount_data_df.index = pd.to_datetime(amount_data_df.date)\n    del amount_data_df[\"date\"]\n    temp_df = pd.merge(\n        data_df, amount_data_df, left_index=True, right_index=True, how=\"outer\"\n    )\n    temp_df.ffill(inplace=True)\n    temp_df = temp_df.astype(float)\n    temp_df[\"outstanding_share\"] = temp_df[\"outstanding_share\"] * 10000\n    temp_df[\"turnover\"] = temp_df[\"volume\"] / temp_df[\"outstanding_share\"]\n    temp_df.columns = [\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n        \"volume\",\n        \"amount\",\n        \"outstanding_share\",\n        \"turnover\",\n    ]\n    if adjust == \"\":\n        temp_df = temp_df[start_date:end_date]\n        temp_df.drop_duplicates(\n            subset=[\"open\", \"high\", \"low\", \"close\", \"volume\", \"amount\"], inplace=True\n        )\n        temp_df[\"open\"] = round(temp_df[\"open\"], 2)\n        temp_df[\"high\"] = round(temp_df[\"high\"], 2)\n        temp_df[\"low\"] = round(temp_df[\"low\"], 2)\n        temp_df[\"close\"] = round(temp_df[\"close\"], 2)\n        temp_df.dropna(inplace=True)\n        temp_df.drop_duplicates(inplace=True)\n        temp_df.reset_index(inplace=True)\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        return temp_df\n    if adjust == \"hfq\":\n        res = requests.get(zh_sina_a_stock_hfq_url.format(symbol))\n        hfq_factor_df = pd.DataFrame(\n            eval(res.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"]\n        )\n        hfq_factor_df.columns = [\"date\", \"hfq_factor\"]\n        hfq_factor_df.index = pd.to_datetime(hfq_factor_df.date)\n        del hfq_factor_df[\"date\"]\n        temp_df = pd.merge(\n            temp_df,\n            hfq_factor_df,\n            left_index=True,\n            right_index=True,\n            how=\"outer\",\n        )\n        temp_df.ffill(inplace=True)\n        temp_df = temp_df.astype(float)\n        temp_df.dropna(inplace=True)\n        temp_df.drop_duplicates(\n            subset=[\"open\", \"high\", \"low\", \"close\", \"volume\", \"amount\"], inplace=True\n        )\n        temp_df[\"open\"] = temp_df[\"open\"] * temp_df[\"hfq_factor\"]\n        temp_df[\"high\"] = temp_df[\"high\"] * temp_df[\"hfq_factor\"]\n        temp_df[\"close\"] = temp_df[\"close\"] * temp_df[\"hfq_factor\"]\n        temp_df[\"low\"] = temp_df[\"low\"] * temp_df[\"hfq_factor\"]\n        temp_df = temp_df.iloc[:, :-1]\n        temp_df = temp_df[start_date:end_date]\n        temp_df[\"open\"] = round(temp_df[\"open\"], 2)\n        temp_df[\"high\"] = round(temp_df[\"high\"], 2)\n        temp_df[\"low\"] = round(temp_df[\"low\"], 2)\n        temp_df[\"close\"] = round(temp_df[\"close\"], 2)\n        temp_df.dropna(inplace=True)\n        temp_df.reset_index(inplace=True)\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        return temp_df\n\n    if adjust == \"qfq\":\n        res = requests.get(zh_sina_a_stock_qfq_url.format(symbol))\n        qfq_factor_df = pd.DataFrame(\n            eval(res.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"]\n        )\n        qfq_factor_df.columns = [\"date\", \"qfq_factor\"]\n        qfq_factor_df.index = pd.to_datetime(qfq_factor_df.date)\n        del qfq_factor_df[\"date\"]\n        temp_df = pd.merge(\n            temp_df,\n            qfq_factor_df,\n            left_index=True,\n            right_index=True,\n            how=\"outer\",\n        )\n        temp_df.ffill(inplace=True)\n        temp_df = temp_df.astype(float)\n        temp_df.dropna(inplace=True)\n        temp_df.drop_duplicates(\n            subset=[\"open\", \"high\", \"low\", \"close\", \"volume\", \"amount\"], inplace=True\n        )\n        temp_df[\"open\"] = temp_df[\"open\"] / temp_df[\"qfq_factor\"]\n        temp_df[\"high\"] = temp_df[\"high\"] / temp_df[\"qfq_factor\"]\n        temp_df[\"close\"] = temp_df[\"close\"] / temp_df[\"qfq_factor\"]\n        temp_df[\"low\"] = temp_df[\"low\"] / temp_df[\"qfq_factor\"]\n        temp_df = temp_df.iloc[:, :-1]\n        temp_df = temp_df[start_date:end_date]\n        temp_df[\"open\"] = round(temp_df[\"open\"], 2)\n        temp_df[\"high\"] = round(temp_df[\"high\"], 2)\n        temp_df[\"low\"] = round(temp_df[\"low\"], 2)\n        temp_df[\"close\"] = round(temp_df[\"close\"], 2)\n        temp_df.dropna(inplace=True)\n        temp_df.reset_index(inplace=True)\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        return temp_df\n\n\ndef stock_zh_a_cdr_daily(\n    symbol: str = \"sh689009\",\n    start_date: str = \"19900101\",\n    end_date: str = \"22201116\",\n) -> pd.DataFrame:\n    \"\"\"\n    新浪财经-A股-CDR个股的历史行情数据, 大量抓取容易封 IP\n    https://finance.sina.com.cn/realstock/company/sh689009/nc.shtml\n    :param start_date: 20201103; 开始日期\n    :type start_date: str\n    :param end_date: 20201103; 结束日期\n    :type end_date: str\n    :param symbol: sh689009\n    :type symbol: str\n    :return: specific data\n    :rtype: pandas.DataFrame\n    \"\"\"\n    res = requests.get(zh_sina_a_stock_hist_url.format(symbol))\n    js_code = py_mini_racer.MiniRacer()\n    js_code.eval(hk_js_decode)\n    dict_list = js_code.call(\n        \"d\", res.text.split(\"=\")[1].split(\";\")[0].replace('\"', \"\")\n    )  # 执行js解密代码\n    data_df = pd.DataFrame(dict_list)\n    data_df.index = pd.to_datetime(data_df[\"date\"])\n    del data_df[\"date\"]\n    data_df = data_df.astype(\"float\")\n    temp_df = data_df[start_date:end_date].copy()\n    temp_df[\"open\"] = pd.to_numeric(temp_df[\"open\"])\n    temp_df[\"high\"] = pd.to_numeric(temp_df[\"high\"])\n    temp_df[\"low\"] = pd.to_numeric(temp_df[\"low\"])\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"date\"] = temp_df[\"date\"].dt.date\n    return temp_df\n\n\ndef stock_zh_a_minute(\n    symbol: str = \"sh600519\", period: str = \"1\", adjust: str = \"\"\n) -> pd.DataFrame:\n    \"\"\"\n    股票及股票指数历史行情数据-分钟数据\n    https://finance.sina.com.cn/realstock/company/sh600519/nc.shtml\n    :param symbol: sh000300\n    :type symbol: str\n    :param period: 1, 5, 15, 30, 60 分钟的数据\n    :type period: str\n    :param adjust: 默认为空: 返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据;\n    :type adjust: str\n    :return: specific data\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        \"https://quotes.sina.cn/cn/api/jsonp_v2.php/=/CN_MarketDataService.getKLineData\"\n    )\n    params = {\n        \"symbol\": symbol,\n        \"scale\": period,\n        \"ma\": \"no\",\n        \"datalen\": \"1970\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    try:\n        data_json = json.loads(data_text.split(\"=(\")[1].split(\");\")[0])\n        temp_df = pd.DataFrame(data_json).iloc[:, :7]\n    except:  # noqa: E722\n        url = f\"https://quotes.sina.cn/cn/api/jsonp_v2.php/var%20_{symbol}_{period}_1658852984203=/CN_MarketDataService.getKLineData\"\n        params = {\n            \"symbol\": symbol,\n            \"scale\": period,\n            \"ma\": \"no\",\n            \"datalen\": \"1970\",\n        }\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = json.loads(data_text.split(\"=(\")[1].split(\");\")[0])\n        temp_df = pd.DataFrame(data_json).iloc[:, :7]\n    if temp_df.empty:\n        print(f\"{symbol} 股票数据不存在，请检查是否已退市\")\n        return pd.DataFrame()\n    try:\n        stock_zh_a_daily(symbol=symbol, adjust=\"qfq\")\n    except:  # noqa: E722\n        return temp_df\n\n    if adjust == \"\":\n        return temp_df\n\n    if adjust == \"qfq\":\n        temp_df[[\"date\", \"time\"]] = temp_df[\"day\"].str.split(\" \", expand=True)\n        # 处理没有最后一分钟的情况\n        need_df = temp_df[\n            [\n                True if \"09:31:00\" <= item <= \"15:00:00\" else False\n                for item in temp_df[\"time\"]\n            ]\n        ]\n        need_df.drop_duplicates(subset=[\"date\"], keep=\"last\", inplace=True)\n        need_df.index = pd.to_datetime(need_df[\"date\"])\n        stock_zh_a_daily_qfq_df = stock_zh_a_daily(symbol=symbol, adjust=\"qfq\")\n        stock_zh_a_daily_qfq_df.index = pd.to_datetime(stock_zh_a_daily_qfq_df[\"date\"])\n        result_df = stock_zh_a_daily_qfq_df.iloc[-len(need_df) :, :][\"close\"].astype(\n            float\n        ) / need_df[\"close\"].astype(float)\n        temp_df.index = pd.to_datetime(temp_df[\"date\"])\n        merged_df = pd.merge(temp_df, result_df, left_index=True, right_index=True)\n        merged_df[\"open\"] = merged_df[\"open\"].astype(float) * merged_df[\"close_y\"]\n        merged_df[\"high\"] = merged_df[\"high\"].astype(float) * merged_df[\"close_y\"]\n        merged_df[\"low\"] = merged_df[\"low\"].astype(float) * merged_df[\"close_y\"]\n        merged_df[\"close\"] = merged_df[\"close_x\"].astype(float) * merged_df[\"close_y\"]\n        temp_df = merged_df[[\"day\", \"open\", \"high\", \"low\", \"close\", \"volume\", \"amount\"]]\n        temp_df.reset_index(drop=True, inplace=True)\n        return temp_df\n    if adjust == \"hfq\":\n        temp_df[[\"date\", \"time\"]] = temp_df[\"day\"].str.split(\" \", expand=True)\n        # 处理没有最后一分钟的情况\n        need_df = temp_df[\n            [\n                True if \"09:31:00\" <= item <= \"15:00:00\" else False\n                for item in temp_df[\"time\"]\n            ]\n        ]\n        need_df.drop_duplicates(subset=[\"date\"], keep=\"last\", inplace=True)\n        need_df.index = pd.to_datetime(need_df[\"date\"])\n        stock_zh_a_daily_hfq_df = stock_zh_a_daily(symbol=symbol, adjust=\"hfq\")\n        stock_zh_a_daily_hfq_df.index = pd.to_datetime(stock_zh_a_daily_hfq_df[\"date\"])\n        result_df = stock_zh_a_daily_hfq_df.iloc[-len(need_df) :, :][\"close\"].astype(\n            float\n        ) / need_df[\"close\"].astype(float)\n        temp_df.index = pd.to_datetime(temp_df[\"date\"])\n        merged_df = pd.merge(temp_df, result_df, left_index=True, right_index=True)\n        merged_df[\"open\"] = merged_df[\"open\"].astype(float) * merged_df[\"close_y\"]\n        merged_df[\"high\"] = merged_df[\"high\"].astype(float) * merged_df[\"close_y\"]\n        merged_df[\"low\"] = merged_df[\"low\"].astype(float) * merged_df[\"close_y\"]\n        merged_df[\"close\"] = merged_df[\"close_x\"].astype(float) * merged_df[\"close_y\"]\n        temp_df = merged_df[[\"day\", \"open\", \"high\", \"low\", \"close\", \"volume\", \"amount\"]]\n        temp_df.reset_index(drop=True, inplace=True)\n        return temp_df\n    else:\n        return pd.DataFrame()\n\n\nif __name__ == \"__main__\":\n    stock_zh_a_daily_hfq_df_one = stock_zh_a_daily(\n        symbol=\"sz000002\",\n        start_date=\"19910403\",\n        end_date=\"20260109\",\n        adjust=\"hfq\",\n    )\n    print(stock_zh_a_daily_hfq_df_one)\n\n    stock_zh_a_daily_hfq_df_three = stock_zh_a_daily(\n        symbol=\"sz000001\",\n        start_date=\"19900103\",\n        end_date=\"20210118\",\n        adjust=\"qfq\",\n    )\n    print(stock_zh_a_daily_hfq_df_three)\n\n    stock_zh_a_daily_hfq_df_two = stock_zh_a_daily(\n        symbol=\"sh000001\", start_date=\"20101103\", end_date=\"20210510\"\n    )\n    print(stock_zh_a_daily_hfq_df_two)\n\n    qfq_factor_df = stock_zh_a_daily(symbol=\"sz000002\", adjust=\"qfq-factor\")\n    print(qfq_factor_df)\n\n    hfq_factor_df = stock_zh_a_daily(symbol=\"sz000002\", adjust=\"hfq-factor\")\n    print(hfq_factor_df)\n\n    stock_zh_a_daily_hfq_factor_df = stock_zh_a_daily(\n        symbol=\"sz000002\", adjust=\"hfq-factor\"\n    )\n    print(stock_zh_a_daily_hfq_factor_df)\n\n    stock_zh_a_daily_df = stock_zh_a_daily(\n        symbol=\"sz300798\", start_date=\"20200601\", end_date=\"20231101\", adjust=\"hfq\"\n    )\n    print(stock_zh_a_daily_df)\n\n    stock_zh_a_cdr_daily_df = stock_zh_a_cdr_daily(\n        symbol=\"sh689009\", start_date=\"20201103\", end_date=\"20201116\"\n    )\n    print(stock_zh_a_cdr_daily_df)\n\n    stock_zh_a_spot_df = stock_zh_a_spot()\n    print(stock_zh_a_spot_df)\n\n    stock_zh_a_minute_df = stock_zh_a_minute(\n        symbol=\"sh600751\", period=\"1\", adjust=\"qfq\"\n    )\n    print(stock_zh_a_minute_df)\n\n    stock_zh_a_minute_df = stock_zh_a_minute(\n        symbol=\"sh600519\", period=\"1\", adjust=\"hfq\"\n    )\n    print(stock_zh_a_minute_df)\n\n    stock_zh_a_minute_df = stock_zh_a_minute(\n        symbol=\"sh600751\", period=\"1\", adjust=\"\"\n    )\n    print(stock_zh_a_minute_df)\n\n    stock_zh_a_cdr_daily_df = stock_zh_a_cdr_daily(\n        symbol=\"sh689009\", start_date=\"19900101\", end_date=\"22201116\"\n    )\n    print(stock_zh_a_cdr_daily_df)\n"
  },
  {
    "path": "akshare/stock/stock_zh_a_special.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/3/19 15:30\nDesc: 新股和风险警示股\n新浪-行情中心-沪深股市-次新股\nhttps://vip.stock.finance.sina.com.cn/mkt/#new_stock\n东方财富网-行情中心-沪深个股-风险警示板\nhttps://quote.eastmoney.com/center/gridlist.html#st_board\n\"\"\"\n\nimport math\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.func import fetch_paginated_data\n\n\ndef stock_zh_a_st_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-沪深个股-风险警示板\n    https://quote.eastmoney.com/center/gridlist.html#st_board\n    :return: 风险警示板\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://40.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f3\",\n        \"fs\": \"m:0 f:4,m:1 f:4\",\n        \"fields\": \"f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,\"\n        \"f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"市盈率-动态\",\n        \"量比\",\n        \"_\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"市净率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"最高\",\n            \"最低\",\n            \"今开\",\n            \"昨收\",\n            \"量比\",\n            \"换手率\",\n            \"市盈率-动态\",\n            \"市净率\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"量比\"] = pd.to_numeric(temp_df[\"量比\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_zh_a_new_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-沪深个股-新股\n    https://quote.eastmoney.com/center/gridlist.html#newshares\n    :return: 新股\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://40.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f26\",\n        \"fs\": \"m:0 f:8,m:1 f:8\",\n        \"fields\": \"f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,\"\n        \"f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"市盈率-动态\",\n        \"量比\",\n        \"_\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"市净率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"最高\",\n            \"最低\",\n            \"今开\",\n            \"昨收\",\n            \"量比\",\n            \"换手率\",\n            \"市盈率-动态\",\n            \"市净率\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"量比\"] = pd.to_numeric(temp_df[\"量比\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_zh_a_stop_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-沪深个股-两网及退市\n    https://quote.eastmoney.com/center/gridlist.html#staq_net_board\n    :return: 两网及退市\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://40.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f3\",\n        \"fs\": \"m:0 s:3\",\n        \"fields\": \"f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,\"\n        \"f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"市盈率-动态\",\n        \"量比\",\n        \"_\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"市净率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"最高\",\n            \"最低\",\n            \"今开\",\n            \"昨收\",\n            \"量比\",\n            \"换手率\",\n            \"市盈率-动态\",\n            \"市净率\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"量比\"] = pd.to_numeric(temp_df[\"量比\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_zh_a_new() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-行情中心-沪深股市-次新股\n    https://vip.stock.finance.sina.com.cn/mkt/#new_stock\n    :return: 次新股行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCount\"\n    params = {\"node\": \"new_stock\"}\n    r = requests.get(url, params=params)\n    total_page = math.ceil(int(r.json()) / 80)\n    url = \"https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData\"\n    big_df = pd.DataFrame()\n    for page in range(1, total_page + 1):\n        params = {\n            \"page\": str(page),\n            \"num\": \"80\",\n            \"sort\": \"symbol\",\n            \"asc\": \"1\",\n            \"node\": \"new_stock\",\n            \"symbol\": \"\",\n            \"_s_r_a\": \"page\",\n        }\n        r = requests.get(url, params=params)\n        r.encoding = \"gb2312\"\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json)\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df = big_df[\n        [\n            \"symbol\",\n            \"code\",\n            \"name\",\n            \"open\",\n            \"high\",\n            \"low\",\n            \"volume\",\n            \"amount\",\n            \"mktcap\",\n            \"turnoverratio\",\n        ]\n    ]\n    big_df[\"open\"] = pd.to_numeric(big_df[\"open\"])\n    big_df[\"high\"] = pd.to_numeric(big_df[\"high\"])\n    big_df[\"low\"] = pd.to_numeric(big_df[\"low\"])\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_a_st_em_df = stock_zh_a_st_em()\n    print(stock_zh_a_st_em_df)\n\n    stock_zh_a_new_em_df = stock_zh_a_new_em()\n    print(stock_zh_a_new_em_df)\n\n    stock_zh_a_stop_em_df = stock_zh_a_stop_em()\n    print(stock_zh_a_stop_em_df)\n\n    stock_zh_a_new_df = stock_zh_a_new()\n    print(stock_zh_a_new_df)\n"
  },
  {
    "path": "akshare/stock/stock_zh_a_tick_tx.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/10/27 22:08\nDesc: 腾讯-股票-实时行情-成交明细\n成交明细-每个交易日 16:00 提供当日数据\n港股报价延时 15 分钟\n\"\"\"\n\nimport warnings\n\nimport pandas as pd\nimport requests\n\n\ndef stock_zh_a_tick_tx_js(symbol: str = \"sz000001\") -> pd.DataFrame:\n    \"\"\"\n    腾讯财经-历史分笔数据\n    https://gu.qq.com/sz300494/gp/detail\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 历史分笔数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    big_df = pd.DataFrame()\n    page = 0\n    warnings.warn(\"正在下载数据，请稍等\")\n    while True:\n        try:\n            url = \"http://stock.gtimg.cn/data/index.php\"\n            params = {\n                \"appn\": \"detail\",\n                \"action\": \"data\",\n                \"c\": symbol,\n                \"p\": page,\n            }\n            r = requests.get(url, params=params)\n            text_data = r.text\n            temp_df = (\n                pd.DataFrame(eval(text_data[text_data.find(\"[\") :])[1].split(\"|\"))\n                .iloc[:, 0]\n                .str.split(\"/\", expand=True)\n            )\n            page += 1\n            big_df = pd.concat([big_df, temp_df], ignore_index=True)\n        except:  # noqa: E722\n            break\n    if not big_df.empty:\n        big_df = big_df.iloc[:, 1:].copy()\n        big_df.columns = [\n            \"成交时间\",\n            \"成交价格\",\n            \"价格变动\",\n            \"成交量\",\n            \"成交金额\",\n            \"性质\",\n        ]\n        big_df.reset_index(drop=True, inplace=True)\n        property_map = {\n            \"S\": \"卖盘\",\n            \"B\": \"买盘\",\n            \"M\": \"中性盘\",\n        }\n        big_df[\"性质\"] = big_df[\"性质\"].map(property_map)\n        big_df = big_df.astype(\n            {\n                \"成交时间\": str,\n                \"成交价格\": float,\n                \"价格变动\": float,\n                \"成交量\": int,\n                \"成交金额\": int,\n                \"性质\": str,\n            }\n        )\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_a_tick_tx_js_df = stock_zh_a_tick_tx_js(symbol=\"sz000001\")\n    print(stock_zh_a_tick_tx_js_df)\n"
  },
  {
    "path": "akshare/stock/stock_zh_ah_tx.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/2/26 15:10\nDesc: 腾讯财经-A+H股数据, 实时行情数据和历史行情数据(后复权)\nhttps://stockapp.finance.qq.com/mstats/#mod=list&id=hk_ah&module=HK&type=AH&sort=3&page=3&max=20\n\"\"\"\n\nimport random\n\nimport pandas as pd\nimport requests\n\nfrom akshare.stock.cons import (\n    hk_url,\n    hk_headers,\n    hk_payload,\n    hk_stock_headers,\n    hk_stock_payload,\n)\nfrom akshare.utils import demjson\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef _get_zh_stock_ah_page_count() -> int:\n    \"\"\"\n    腾讯财经-港股-AH-总页数\n    https://stockapp.finance.qq.com/mstats/#mod=list&id=hk_ah&module=HK&type=AH&sort=3&page=3&max=20\n    :return: 总页数\n    :rtype: int\n    \"\"\"\n    hk_payload_copy = hk_payload.copy()\n    hk_payload_copy.update({\"reqPage\": 1})\n    r = requests.get(hk_url, params=hk_payload_copy, headers=hk_headers)\n    data_json = demjson.decode(r.text[r.text.find(\"{\") : r.text.rfind(\"}\") + 1])\n    page_count = data_json[\"data\"][\"page_count\"]\n    return page_count\n\n\ndef stock_zh_ah_spot() -> pd.DataFrame:\n    \"\"\"\n    腾讯财经-港股-AH-实时行情\n    https://stockapp.finance.qq.com/mstats/#mod=list&id=hk_ah&module=HK&type=AH&sort=3&page=3&max=20\n    :return: 腾讯财经-港股-AH-实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    page_count = _get_zh_stock_ah_page_count()\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for i in tqdm(range(0, page_count), leave=False):\n        hk_payload.update({\"reqPage\": i})\n        r = requests.get(hk_url, params=hk_payload, headers=hk_headers)\n        data_json = demjson.decode(r.text[r.text.find(\"{\") : r.text.rfind(\"}\") + 1])\n        big_df = pd.concat(\n            objs=[\n                big_df,\n                pd.DataFrame(data_json[\"data\"][\"page_data\"])\n                .iloc[:, 0]\n                .str.split(\"~\", expand=True),\n            ],\n            ignore_index=True,\n        )\n    big_df.columns = [\n        \"代码\",\n        \"名称\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"买入\",\n        \"卖出\",\n        \"成交量\",\n        \"成交额\",\n        \"今开\",\n        \"昨收\",\n        \"最高\",\n        \"最低\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"买入\",\n            \"卖出\",\n            \"成交量\",\n            \"成交额\",\n            \"今开\",\n            \"昨收\",\n            \"最高\",\n            \"最低\",\n        ]\n    ]\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"涨跌额\"] = pd.to_numeric(big_df[\"涨跌额\"], errors=\"coerce\")\n    big_df[\"买入\"] = pd.to_numeric(big_df[\"买入\"], errors=\"coerce\")\n    big_df[\"卖出\"] = pd.to_numeric(big_df[\"卖出\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    big_df[\"成交额\"] = pd.to_numeric(big_df[\"成交额\"], errors=\"coerce\")\n    big_df[\"今开\"] = pd.to_numeric(big_df[\"今开\"], errors=\"coerce\")\n    big_df[\"昨收\"] = pd.to_numeric(big_df[\"昨收\"], errors=\"coerce\")\n    big_df[\"最高\"] = pd.to_numeric(big_df[\"最高\"], errors=\"coerce\")\n    big_df[\"最低\"] = pd.to_numeric(big_df[\"最低\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_zh_ah_name() -> pd.DataFrame:\n    \"\"\"\n    腾讯财经-港股-AH-股票名称\n    https://stockapp.finance.qq.com/mstats/#mod=list&id=hk_ah&module=HK&type=AH\n    :return: 股票代码和股票名称的字典\n    :rtype: pandas.DataFrame\n    \"\"\"\n    big_df = pd.DataFrame()\n    page_count = _get_zh_stock_ah_page_count()\n    tqdm = get_tqdm()\n    for i in tqdm(range(0, page_count), leave=False):\n        hk_payload.update({\"reqPage\": i})\n        r = requests.get(hk_url, params=hk_payload, headers=hk_headers)\n        data_json = demjson.decode(r.text[r.text.find(\"{\") : r.text.rfind(\"}\") + 1])\n        big_df = pd.concat(\n            objs=[\n                big_df,\n                pd.DataFrame(data_json[\"data\"][\"page_data\"])\n                .iloc[:, 0]\n                .str.split(\"~\", expand=True),\n            ],\n            ignore_index=True,\n        ).iloc[:, :-1]\n    big_df.columns = [\n        \"代码\",\n        \"名称\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"买入\",\n        \"卖出\",\n        \"成交量\",\n        \"成交额\",\n        \"今开\",\n        \"昨收\",\n        \"最高\",\n        \"最低\",\n    ]\n    big_df = big_df[\n        [\n            \"代码\",\n            \"名称\",\n        ]\n    ]\n    return big_df\n\n\ndef stock_zh_ah_daily(\n    symbol: str = \"02318\",\n    start_year: str = \"2000\",\n    end_year: str = \"2019\",\n    adjust: str = \"\",\n) -> pd.DataFrame:\n    \"\"\"\n    腾讯财经-港股-AH-股票历史行情\n    https://gu.qq.com/hk01033/gp\n    :param symbol: 股票代码\n    :type symbol: str\n    :param start_year: 开始年份; e.g., “2000”\n    :type start_year: str\n    :param end_year: 结束年份; e.g., “2019”\n    :type end_year: str\n    :param adjust: 'qfq': 前复权, 'hfq': 后复权\n    :type adjust: str\n    :return: 指定股票在指定年份的日频率历史行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for year in tqdm(range(int(start_year), int(end_year)), leave=False):\n        # year = \"2003\"\n        hk_stock_payload_copy = hk_stock_payload.copy()\n        hk_stock_payload_copy.update({\"_var\": f\"kline_day{adjust}{year}\"})\n        if adjust == \"\":\n            hk_stock_payload_copy.update(\n                {\"param\": f\"hk{symbol},day,{year}-01-01,{int(year) + 1}-12-31,640,\"}\n            )\n        else:\n            hk_stock_payload_copy.update(\n                {\n                    \"param\": f\"hk{symbol},day,{year}-01-01,{int(year) + 1}-12-31,640,{adjust}\"\n                }\n            )\n        hk_stock_payload_copy.update({\"r\": str(random.random())})\n        if adjust == \"\":\n            headers = {\n                \"Accept\": \"*/*\",\n                \"Accept-Encoding\": \"gzip, deflate\",\n                \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n                \"Cache-Control\": \"no-cache\",\n                \"Connection\": \"keep-alive\",\n                \"Host\": \"web.ifzq.gtimg.cn\",\n                \"Pragma\": \"no-cache\",\n                \"Referer\": \"http://gu.qq.com/hk01033/gp\",\n                \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36\",\n            }\n            r = requests.get(\n                url=\"http://web.ifzq.gtimg.cn/appstock/app/kline/kline\",\n                params=hk_stock_payload_copy,\n                headers=headers,\n            )\n        else:\n            r = requests.get(\n                url=\"https://web.ifzq.gtimg.cn/appstock/app/hkfqkline/get\",\n                params=hk_stock_payload_copy,\n                headers=hk_stock_headers,\n            )\n        data_json = demjson.decode(r.text[r.text.find(\"{\") : r.text.rfind(\"}\") + 1])\n        try:\n            if adjust == \"\":\n                temp_df = pd.DataFrame(data_json[\"data\"][f\"hk{symbol}\"][\"day\"])\n            else:\n                temp_df = pd.DataFrame(data_json[\"data\"][f\"hk{symbol}\"][f\"{adjust}day\"])\n        except:  # noqa\n            continue\n        if adjust != \"\" and not temp_df.empty:\n            temp_df.columns = [\n                \"日期\",\n                \"开盘\",\n                \"收盘\",\n                \"最高\",\n                \"最低\",\n                \"成交量\",\n                \"_\",\n                \"_\",\n                \"_\",\n            ]\n            temp_df = temp_df[[\"日期\", \"开盘\", \"收盘\", \"最高\", \"最低\", \"成交量\"]]\n        elif not temp_df.empty:\n            try:\n                temp_df.columns = [\n                    \"日期\",\n                    \"开盘\",\n                    \"收盘\",\n                    \"最高\",\n                    \"最低\",\n                    \"成交量\",\n                    \"_\",\n                ]\n            except:  # noqa\n                temp_df.columns = [\"日期\", \"开盘\", \"收盘\", \"最高\", \"最低\", \"成交量\"]\n            temp_df = temp_df[[\"日期\", \"开盘\", \"收盘\", \"最高\", \"最低\", \"成交量\"]]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df[\"开盘\"] = pd.to_numeric(big_df[\"开盘\"], errors=\"coerce\")\n    big_df[\"收盘\"] = pd.to_numeric(big_df[\"收盘\"], errors=\"coerce\")\n    big_df[\"最高\"] = pd.to_numeric(big_df[\"最高\"], errors=\"coerce\")\n    big_df[\"最低\"] = pd.to_numeric(big_df[\"最低\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_ah_spot_df = stock_zh_ah_spot()\n    print(stock_zh_ah_spot_df)\n\n    stock_zh_ah_name_df = stock_zh_ah_name()\n    print(stock_zh_ah_name_df)\n\n    stock_zh_ah_daily_df = stock_zh_ah_daily(\n        symbol=\"02318\", start_year=\"2022\", end_year=\"2024\", adjust=\"\"\n    )\n    print(stock_zh_ah_daily_df)\n"
  },
  {
    "path": "akshare/stock/stock_zh_b_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/7/22 18:30\nDesc: 新浪财经-B股-实时行情数据和历史行情数据(包含前复权和后复权因子)\nhttps://finance.sina.com.cn/realstock/company/sh689009/nc.shtml\n\"\"\"\n\nimport json\nimport re\nfrom functools import lru_cache\n\nimport pandas as pd\nimport requests\nimport py_mini_racer\n\nfrom akshare.stock.cons import (\n    zh_sina_a_stock_url,\n    zh_sina_a_stock_hist_url,\n    hk_js_decode,\n    zh_sina_a_stock_hfq_url,\n    zh_sina_a_stock_qfq_url,\n    zh_sina_a_stock_amount_url,\n)\nfrom akshare.utils import demjson\n\n\n@lru_cache()\ndef _get_zh_b_page_count() -> int:\n    \"\"\"\n    所有股票的总页数\n    https://vip.stock.finance.sina.com.cn/mkt/#hs_b\n    :return: 需要采集的股票总页数\n    :rtype: int\n    \"\"\"\n    url = (\n        \"https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/\"\n        \"Market_Center.getHQNodeStockCount?node=hs_b\"\n    )\n    r = requests.get(url)\n    page_count = int(re.findall(re.compile(r\"\\d+\"), r.text)[0]) / 80\n    if isinstance(page_count, int):\n        return page_count\n    else:\n        return int(page_count) + 1\n\n\ndef stock_zh_b_spot() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-所有 B 股的实时行情数据; 重复运行本函数会被新浪暂时封 IP\n    https://vip.stock.finance.sina.com.cn/mkt/#hs_b\n    :return: 所有股票的实时行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    page_count = _get_zh_b_page_count()\n    zh_sina_stock_payload_copy = {\n        \"page\": \"1\",\n        \"num\": \"80\",\n        \"sort\": \"symbol\",\n        \"asc\": \"1\",\n        \"node\": \"hs_b\",\n        \"symbol\": \"\",\n        \"_s_r_a\": \"page\",\n    }\n    big_df = pd.DataFrame()\n    for page in range(1, page_count + 1):\n        zh_sina_stock_payload_copy.update({\"page\": page})\n        r = requests.get(zh_sina_a_stock_url, params=zh_sina_stock_payload_copy)\n        data_json = demjson.decode(r.text)\n        big_df = pd.concat(objs=[big_df, pd.DataFrame(data_json)], ignore_index=True)\n    big_df.columns = [\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最新价\",\n        \"涨跌额\",\n        \"涨跌幅\",\n        \"买入\",\n        \"卖出\",\n        \"昨收\",\n        \"今开\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"买入\",\n            \"卖出\",\n            \"昨收\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"涨跌额\"] = pd.to_numeric(big_df[\"涨跌额\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"买入\"] = pd.to_numeric(big_df[\"买入\"], errors=\"coerce\")\n    big_df[\"卖出\"] = pd.to_numeric(big_df[\"卖出\"], errors=\"coerce\")\n    big_df[\"昨收\"] = pd.to_numeric(big_df[\"昨收\"], errors=\"coerce\")\n    big_df[\"今开\"] = pd.to_numeric(big_df[\"今开\"], errors=\"coerce\")\n    big_df[\"最高\"] = pd.to_numeric(big_df[\"最高\"], errors=\"coerce\")\n    big_df[\"最低\"] = pd.to_numeric(big_df[\"最低\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    big_df[\"成交额\"] = pd.to_numeric(big_df[\"成交额\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_zh_b_daily(\n    symbol: str = \"sh900901\",\n    start_date: str = \"19900101\",\n    end_date: str = \"21000118\",\n    adjust: str = \"\",\n) -> pd.DataFrame:\n    \"\"\"\n    新浪财经-B 股-个股的历史行情数据, 大量抓取容易封 IP\n    https://finance.sina.com.cn/realstock/company/sh900901/nc.shtml\n    :param start_date: 20201103; 开始日期\n    :type start_date: str\n    :param end_date: 20201103; 结束日期\n    :type end_date: str\n    :param symbol: sh600000\n    :type symbol: str\n    :param adjust: 默认为空: 返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; hfq-factor: 返回后复权因子; qfq-factor: 返回前复权因子\n    :type adjust: str\n    :return: specific data\n    :rtype: pandas.DataFrame\n    \"\"\"\n\n    def _fq_factor(method: str) -> pd.DataFrame:\n        if method == \"hfq\":\n            r = requests.get(zh_sina_a_stock_hfq_url.format(symbol))\n            hfq_factor_df = pd.DataFrame(\n                eval(r.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"]\n            )\n            if hfq_factor_df.shape[0] == 0:\n                raise ValueError(\"sina hfq factor not available\")\n            hfq_factor_df.columns = [\"date\", \"hfq_factor\"]\n            hfq_factor_df.index = pd.to_datetime(hfq_factor_df.date)\n            del hfq_factor_df[\"date\"]\n            hfq_factor_df.reset_index(inplace=True)\n            return hfq_factor_df\n        else:\n            r = requests.get(zh_sina_a_stock_qfq_url.format(symbol))\n            qfq_factor_df = pd.DataFrame(\n                eval(r.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"]\n            )\n            if qfq_factor_df.shape[0] == 0:\n                raise ValueError(\"sina hfq factor not available\")\n            qfq_factor_df.columns = [\"date\", \"qfq_factor\"]\n            qfq_factor_df.index = pd.to_datetime(qfq_factor_df.date)\n            del qfq_factor_df[\"date\"]\n            qfq_factor_df.reset_index(inplace=True)\n            return qfq_factor_df\n\n    if adjust in (\"hfq-factor\", \"qfq-factor\"):\n        return _fq_factor(adjust.split(\"-\")[0])\n\n    r = requests.get(zh_sina_a_stock_hist_url.format(symbol))\n    js_code = py_mini_racer.MiniRacer()\n    js_code.eval(hk_js_decode)\n    dict_list = js_code.call(\n        \"d\", r.text.split(\"=\")[1].split(\";\")[0].replace('\"', \"\")\n    )  # 执行js解密代码\n    data_df = pd.DataFrame(dict_list)\n    data_df.index = pd.to_datetime(data_df[\"date\"]).dt.date\n    del data_df[\"date\"]\n    del data_df[\"amount\"]\n    del data_df[\"prevclose\"]\n\n    data_df = data_df.astype(\"float\")\n    r = requests.get(zh_sina_a_stock_amount_url.format(symbol, symbol))\n    amount_data_json = demjson.decode(r.text[r.text.find(\"[\") : r.text.rfind(\"]\") + 1])\n    amount_data_df = pd.DataFrame(amount_data_json)\n    amount_data_df.index = pd.to_datetime(amount_data_df.date)\n    del amount_data_df[\"date\"]\n    temp_df = pd.merge(\n        data_df, amount_data_df, left_index=True, right_index=True, how=\"outer\"\n    )\n    temp_df.ffill(inplace=True)\n    temp_df = temp_df.astype(float)\n    temp_df[\"amount\"] = temp_df[\"amount\"] * 10000\n    temp_df[\"turnover\"] = temp_df[\"volume\"] / temp_df[\"amount\"]\n    temp_df.columns = [\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n        \"volume\",\n        \"outstanding_share\",\n        \"turnover\",\n    ]\n    if adjust == \"\":\n        temp_df = temp_df[start_date:end_date]\n        temp_df.drop_duplicates(\n            subset=[\"open\", \"high\", \"low\", \"close\", \"volume\"], inplace=True\n        )\n        temp_df[\"open\"] = round(temp_df[\"open\"], 2)\n        temp_df[\"high\"] = round(temp_df[\"high\"], 2)\n        temp_df[\"low\"] = round(temp_df[\"low\"], 2)\n        temp_df[\"close\"] = round(temp_df[\"close\"], 2)\n        temp_df.dropna(inplace=True)\n        temp_df.drop_duplicates(inplace=True)\n        temp_df.reset_index(inplace=True)\n        return temp_df\n\n    if adjust == \"hfq\":\n        r = requests.get(zh_sina_a_stock_hfq_url.format(symbol))\n        hfq_factor_df = pd.DataFrame(eval(r.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"])\n        hfq_factor_df.columns = [\"date\", \"hfq_factor\"]\n        hfq_factor_df.index = pd.to_datetime(hfq_factor_df.date)\n        del hfq_factor_df[\"date\"]\n        temp_df = pd.merge(\n            temp_df, hfq_factor_df, left_index=True, right_index=True, how=\"outer\"\n        )\n        temp_df.ffill(inplace=True)\n        temp_df = temp_df.astype(float)\n        temp_df.dropna(inplace=True)\n        temp_df.drop_duplicates(\n            subset=[\"open\", \"high\", \"low\", \"close\", \"volume\"], inplace=True\n        )\n        temp_df[\"open\"] = temp_df[\"open\"] * temp_df[\"hfq_factor\"]\n        temp_df[\"high\"] = temp_df[\"high\"] * temp_df[\"hfq_factor\"]\n        temp_df[\"close\"] = temp_df[\"close\"] * temp_df[\"hfq_factor\"]\n        temp_df[\"low\"] = temp_df[\"low\"] * temp_df[\"hfq_factor\"]\n        temp_df = temp_df.iloc[:, :-1]\n        temp_df = temp_df[start_date:end_date]\n        temp_df[\"open\"] = round(temp_df[\"open\"], 2)\n        temp_df[\"high\"] = round(temp_df[\"high\"], 2)\n        temp_df[\"low\"] = round(temp_df[\"low\"], 2)\n        temp_df[\"close\"] = round(temp_df[\"close\"], 2)\n        temp_df.dropna(inplace=True)\n        temp_df.reset_index(inplace=True)\n        return temp_df\n\n    if adjust == \"qfq\":\n        r = requests.get(zh_sina_a_stock_qfq_url.format(symbol))\n        qfq_factor_df = pd.DataFrame(eval(r.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"])\n        qfq_factor_df.columns = [\"date\", \"qfq_factor\"]\n        qfq_factor_df.index = pd.to_datetime(qfq_factor_df.date)\n        del qfq_factor_df[\"date\"]\n        temp_df = pd.merge(\n            temp_df, qfq_factor_df, left_index=True, right_index=True, how=\"outer\"\n        )\n        temp_df.ffill(inplace=True)\n        temp_df = temp_df.astype(float)\n        temp_df.dropna(inplace=True)\n        temp_df.drop_duplicates(\n            subset=[\"open\", \"high\", \"low\", \"close\", \"volume\"], inplace=True\n        )\n        temp_df[\"open\"] = temp_df[\"open\"] / temp_df[\"qfq_factor\"]\n        temp_df[\"high\"] = temp_df[\"high\"] / temp_df[\"qfq_factor\"]\n        temp_df[\"close\"] = temp_df[\"close\"] / temp_df[\"qfq_factor\"]\n        temp_df[\"low\"] = temp_df[\"low\"] / temp_df[\"qfq_factor\"]\n        temp_df = temp_df.iloc[:, :-1]\n        temp_df = temp_df[start_date:end_date]\n        temp_df[\"open\"] = round(temp_df[\"open\"], 2)\n        temp_df[\"high\"] = round(temp_df[\"high\"], 2)\n        temp_df[\"low\"] = round(temp_df[\"low\"], 2)\n        temp_df[\"close\"] = round(temp_df[\"close\"], 2)\n        temp_df.dropna(inplace=True)\n        temp_df.reset_index(inplace=True)\n        return temp_df\n\n\ndef stock_zh_b_minute(\n    symbol: str = \"sh900901\", period: str = \"1\", adjust: str = \"\"\n) -> pd.DataFrame:\n    \"\"\"\n    股票及股票指数历史行情数据-分钟数据\n    https://finance.sina.com.cn/realstock/company/sh900901/nc.shtml\n    :param symbol: sh900901\n    :type symbol: str\n    :param period: 1, 5, 15, 30, 60 分钟的数据\n    :type period: str\n    :param adjust: 默认为空: 返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据;\n    :type adjust: str\n    :return: specific data\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        \"https://quotes.sina.cn/cn/api/jsonp_v2.php/=/CN_MarketDataService.getKLineData\"\n    )\n    params = {\n        \"symbol\": symbol,\n        \"scale\": period,\n        \"datalen\": \"1970\",\n    }\n    r = requests.get(url, params=params)\n    temp_df = pd.DataFrame(json.loads(r.text.split(\"=(\")[1].split(\");\")[0])).iloc[:, :6]\n    if temp_df.empty:\n        return pd.DataFrame()\n    try:\n        stock_zh_b_daily(symbol=symbol, adjust=\"qfq\")\n    except:  # noqa: E722\n        return temp_df\n\n    if adjust == \"\":\n        return temp_df\n\n    if adjust == \"qfq\":\n        temp_df[[\"date\", \"time\"]] = temp_df[\"day\"].str.split(\" \", expand=True)\n        # 处理没有最后一分钟的情况\n        need_df = temp_df[\n            [\n                True if \"09:31:00\" <= item <= \"15:00:00\" else False\n                for item in temp_df[\"time\"]\n            ]\n        ]\n        need_df.drop_duplicates(subset=[\"date\"], keep=\"last\", inplace=True)\n        need_df.index = pd.to_datetime(need_df[\"date\"])\n        stock_zh_b_daily_qfq_df = stock_zh_b_daily(symbol=symbol, adjust=\"qfq\")\n        stock_zh_b_daily_qfq_df.index = pd.to_datetime(stock_zh_b_daily_qfq_df[\"date\"])\n        result_df = stock_zh_b_daily_qfq_df.iloc[-len(need_df) :, :][\"close\"].astype(\n            float\n        ) / need_df[\"close\"].astype(float)\n        temp_df.index = pd.to_datetime(temp_df[\"date\"])\n        merged_df = pd.merge(temp_df, result_df, left_index=True, right_index=True)\n        merged_df[\"open\"] = merged_df[\"open\"].astype(float) * merged_df[\"close_y\"]\n        merged_df[\"high\"] = merged_df[\"high\"].astype(float) * merged_df[\"close_y\"]\n        merged_df[\"low\"] = merged_df[\"low\"].astype(float) * merged_df[\"close_y\"]\n        merged_df[\"close\"] = merged_df[\"close_x\"].astype(float) * merged_df[\"close_y\"]\n        temp_df = merged_df[[\"day\", \"open\", \"high\", \"low\", \"close\", \"volume\"]]\n        temp_df.reset_index(drop=True, inplace=True)\n        return temp_df\n    if adjust == \"hfq\":\n        temp_df[[\"date\", \"time\"]] = temp_df[\"day\"].str.split(\" \", expand=True)\n        # 处理没有最后一分钟的情况\n        need_df = temp_df[\n            [\n                True if \"09:31:00\" <= item <= \"15:00:00\" else False\n                for item in temp_df[\"time\"]\n            ]\n        ]\n        need_df.drop_duplicates(subset=[\"date\"], keep=\"last\", inplace=True)\n        need_df.index = pd.to_datetime(need_df[\"date\"])\n        stock_zh_b_daily_hfq_df = stock_zh_b_daily(symbol=symbol, adjust=\"hfq\")\n        stock_zh_b_daily_hfq_df.index = pd.to_datetime(stock_zh_b_daily_hfq_df[\"date\"])\n        result_df = stock_zh_b_daily_hfq_df.iloc[-len(need_df) :, :][\"close\"].astype(\n            float\n        ) / need_df[\"close\"].astype(float)\n        temp_df.index = pd.to_datetime(temp_df[\"date\"])\n        merged_df = pd.merge(temp_df, result_df, left_index=True, right_index=True)\n        merged_df[\"open\"] = merged_df[\"open\"].astype(float) * merged_df[\"close_y\"]\n        merged_df[\"high\"] = merged_df[\"high\"].astype(float) * merged_df[\"close_y\"]\n        merged_df[\"low\"] = merged_df[\"low\"].astype(float) * merged_df[\"close_y\"]\n        merged_df[\"close\"] = merged_df[\"close_x\"].astype(float) * merged_df[\"close_y\"]\n        temp_df = merged_df[[\"day\", \"open\", \"high\", \"low\", \"close\", \"volume\"]]\n        temp_df.reset_index(drop=True, inplace=True)\n        return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_b_daily_hfq_df_one = stock_zh_b_daily(\n        symbol=\"sh900901\", start_date=\"20071103\", end_date=\"20240916\", adjust=\"\"\n    )\n    print(stock_zh_b_daily_hfq_df_one)\n\n    stock_zh_b_daily_hfq_df_three = stock_zh_b_daily(\n        symbol=\"sh900901\", start_date=\"19900103\", end_date=\"20240722\", adjust=\"hfq\"\n    )\n    print(stock_zh_b_daily_hfq_df_three)\n\n    stock_zh_b_daily_hfq_df_two = stock_zh_b_daily(\n        symbol=\"sh900901\", start_date=\"20101103\", end_date=\"20210510\"\n    )\n    print(stock_zh_b_daily_hfq_df_two)\n\n    qfq_factor_df = stock_zh_b_daily(symbol=\"sh900901\", adjust=\"qfq-factor\")\n    print(qfq_factor_df)\n\n    hfq_factor_df = stock_zh_b_daily(symbol=\"sh900901\", adjust=\"hfq-factor\")\n    print(hfq_factor_df)\n\n    stock_zh_b_daily_hfq_factor_df = stock_zh_b_daily(\n        symbol=\"sh900901\", adjust=\"hfq-factor\"\n    )\n    print(stock_zh_b_daily_hfq_factor_df)\n\n    stock_zh_b_daily_df = stock_zh_b_daily(symbol=\"sh900901\")\n    print(stock_zh_b_daily_df)\n\n    stock_zh_b_spot_df = stock_zh_b_spot()\n    print(stock_zh_b_spot_df)\n\n    stock_zh_b_minute_df = stock_zh_b_minute(symbol=\"sh900901\", period=\"5\", adjust=\"\")\n    print(stock_zh_b_minute_df)\n\n    stock_zh_b_minute_df = stock_zh_b_minute(symbol=\"sh900901\", period=\"1\", adjust=\"\")\n    print(stock_zh_b_minute_df)\n\n    stock_zh_b_daily_qfq_df = stock_zh_b_daily(\n        symbol=\"sh900901\", start_date=\"20101103\", end_date=\"20201116\", adjust=\"qfq\"\n    )\n    print(stock_zh_b_daily_qfq_df)\n\n    stock_zh_b_daily_hfq_df = stock_zh_b_daily(\n        symbol=\"sh900901\", start_date=\"20201103\", end_date=\"20201116\", adjust=\"hfq\"\n    )\n    print(stock_zh_b_daily_hfq_df)\n\n    qfq_factor_df = stock_zh_b_daily(symbol=\"sh900901\", adjust=\"qfq-factor\")\n    print(qfq_factor_df)\n\n    hfq_factor_df = stock_zh_b_daily(symbol=\"sh900901\", adjust=\"hfq-factor\")\n    print(hfq_factor_df)\n\n    stock_zh_b_minute_df = stock_zh_b_minute(\n        symbol=\"sh900901\", period=\"1\", adjust=\"qfq\"\n    )\n    print(stock_zh_b_minute_df)\n"
  },
  {
    "path": "akshare/stock/stock_zh_comparison_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/9/24 15:00\nDesc: 东方财富-行情中心-同行比较\nhttps://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=000895&color=b#/thbj\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_zh_growth_comparison_em(symbol: str = \"SZ000895\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-行情中心-同行比较-成长性比较\n    https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=000895&color=b#/thbj/czxbj\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 成长性比较\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_PCF10_INDUSTRY_GROWTH\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECUCODE=\"{symbol[2:]}.{symbol[:2]}\")',\n        \"pageNumber\": \"\",\n        \"pageSize\": \"\",\n        \"sortTypes\": \"1\",\n        \"sortColumns\": \"PAIMING\",\n        \"source\": \"HSF10\",\n        \"client\": \"PC\",\n        \"v\": \"02747607708067783\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n\n    field_mapping = {\n        \"CORRE_SECURITY_CODE\": \"代码\",\n        \"CORRE_SECURITY_NAME\": \"简称\",\n        \"MGSY_3Y\": \"基本每股收益增长率-3年复合\",\n        \"MGSYTB\": \"基本每股收益增长率-24A\",\n        \"MGSYTTM\": \"基本每股收益增长率-TTM\",\n        \"MGSY_1E\": \"基本每股收益增长率-25E\",\n        \"MGSY_2E\": \"基本每股收益增长率-26E\",\n        \"MGSY_3E\": \"基本每股收益增长率-27E\",\n        \"YYSR_3Y\": \"营业收入增长率-3年复合\",\n        \"YYSRTB\": \"营业收入增长率-24A\",\n        \"YYSRTTM\": \"营业收入增长率-TTM\",\n        \"YYSR_1E\": \"营业收入增长率-25E\",\n        \"YYSR_2E\": \"营业收入增长率-26E\",\n        \"YYSR_3E\": \"营业收入增长率-27E\",\n        \"JLR_3Y\": \"净利润增长率-3年复合\",\n        \"JLRTB\": \"净利润增长率-24A\",\n        \"JLRTTM\": \"净利润增长率-TTM\",\n        \"JLR_1E\": \"净利润增长率-25E\",\n        \"JLR_2E\": \"净利润增长率-26E\",\n        \"JLR_3E\": \"净利润增长率-27E\",\n        \"PAIMING\": \"基本每股收益增长率-3年复合排名\",\n    }\n\n    temp_df = pd.DataFrame(columns=field_mapping.values())\n    if data_json[\"result\"] is not None:\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        temp_df.rename(columns=field_mapping, inplace=True)\n        temp_df = temp_df[field_mapping.values()]\n\n    return temp_df\n\n\ndef stock_zh_valuation_comparison_em(symbol: str = \"SZ000895\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-行情中心-同行比较-估值比较\n    https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=000895&color=b#/thbj/gzbj\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 估值比较\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_PCF10_INDUSTRY_CVALUE\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECUCODE=\"{symbol[2:]}.{symbol[:2]}\")',\n        \"pageNumber\": \"\",\n        \"pageSize\": \"\",\n        \"sortTypes\": \"1\",\n        \"sortColumns\": \"PAIMING\",\n        \"source\": \"HSF10\",\n        \"client\": \"PC\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    field_mapping_result = {\n        \"CORRE_SECUCODE\": \"对应证券代码\",\n        \"CORRE_SECURITY_CODE\": \"代码\",\n        \"CORRE_SECURITY_NAME\": \"简称\",\n        \"PB\": \"市净率-24A\",\n        \"PB_MRQ\": \"市净率-MRQ\",\n        \"PCE\": \"市现率1-24A\",\n        \"PCE_TTM\": \"市现率1-TTM\",\n        \"PCF\": \"市现率2-24A\",\n        \"PCF_TTM\": \"市现率2-TTM\",\n        \"PEG\": \"PEG\",\n        \"PE_1Y\": \"市盈率-25E\",\n        \"PE_2Y\": \"市盈率-26E\",\n        \"PE_3Y\": \"市盈率-27E\",\n        \"PE_TTM\": \"市盈率-TTM\",\n        \"PS\": \"市销率-24A\",\n        \"PS_1Y\": \"市销率-25E\",\n        \"PS_2Y\": \"市销率-26E\",\n        \"PS_3Y\": \"市销率-27E\",\n        \"PS_TTM\": \"市销率-TTM\",\n        \"QYBS\": \"EV/EBITDA-24A\",\n        \"REPORT_DATE\": \"报告日期\",\n        \"SECUCODE\": \"证券代码\",\n        \"SECURITY_CODE\": \"行业标识\",\n        \"TOTAL_COUNT\": \"证券数量\",\n        \"PAIMING\": \"排名\",\n    }\n    temp_df.rename(columns=field_mapping_result, inplace=True)\n    temp_df = temp_df[\n        [\n            \"排名\",\n            \"代码\",\n            \"简称\",\n            \"PEG\",\n            \"市盈率-TTM\",\n            \"市盈率-25E\",\n            \"市盈率-26E\",\n            \"市盈率-27E\",\n            \"市销率-24A\",\n            \"市销率-TTM\",\n            \"市销率-25E\",\n            \"市销率-26E\",\n            \"市销率-27E\",\n            \"市净率-24A\",\n            \"市净率-MRQ\",\n            \"市现率1-24A\",\n            \"市现率1-TTM\",\n            \"市现率2-24A\",\n            \"市现率2-TTM\",\n            \"EV/EBITDA-24A\",\n        ]\n    ]\n    temp_df = pd.concat([temp_df.iloc[-1:], temp_df.iloc[:-1]]).reset_index(drop=True)\n    temp_df[\"排名\"] = temp_df[\"排名\"].astype(str)\n    temp_df.iloc[0, 0] = (\n        f\"{temp_df.iloc[0, 0]}/{data_json['result']['data'][0]['TOTAL_COUNT']}\"\n    )\n    row1 = temp_df.iloc[1].copy()\n    row2 = temp_df.iloc[2].copy()\n    # 交换位置\n    temp_df.iloc[1] = row2\n    temp_df.iloc[2] = row1\n    return temp_df\n\n\ndef stock_zh_dupont_comparison_em(symbol: str = \"SZ000895\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-行情中心-同行比较-杜邦分析比较\n    https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=000895&color=b#/thbj/dbfxbj\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 杜邦分析比较\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_PCF10_INDUSTRY_DBFX\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECUCODE=\"{symbol[2:]}.{symbol[:2]}\")',\n        \"pageNumber\": \"\",\n        \"pageSize\": \"\",\n        \"sortTypes\": \"1\",\n        \"sortColumns\": \"PAIMING\",\n        \"source\": \"HSF10\",\n        \"client\": \"PC\",\n        \"v\": \"05086361194054821\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n\n    field_mapping = {\n        \"CORRE_SECURITY_CODE\": \"代码\",\n        \"CORRE_SECURITY_NAME\": \"简称\",\n        \"ROE_AVG\": \"ROE-3年平均\",\n        \"ROEPJ_L3\": \"ROE-22A\",\n        \"ROEPJ_L2\": \"ROE-23A\",\n        \"ROEPJ_L1\": \"ROE-24A\",\n        \"XSJLL_AVG\": \"净利率-3年平均\",\n        \"XSJLL_L3\": \"净利率-22A\",\n        \"XSJLL_L2\": \"净利率-23A\",\n        \"XSJLL_L1\": \"净利率-24A\",\n        \"TOAZZL_AVG\": \"总资产周转率-3年平均\",\n        \"TOAZZL_L3\": \"总资产周转率-22A\",\n        \"TOAZZL_L2\": \"总资产周转率-23A\",\n        \"TOAZZL_L1\": \"总资产周转率-24A\",\n        \"QYCS_AVG\": \"权益乘数-3年平均\",\n        \"QYCS_L3\": \"权益乘数-22A\",\n        \"QYCS_L2\": \"权益乘数-23A\",\n        \"QYCS_L1\": \"权益乘数-24A\",\n        \"PAIMING\": \"ROE-3年平均排名\",\n    }\n\n    temp_df = pd.DataFrame(columns=field_mapping.values())\n    if data_json[\"result\"] is not None:\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        temp_df.rename(columns=field_mapping, inplace=True)\n        temp_df = temp_df[field_mapping.values()]\n\n    return temp_df\n\n\ndef stock_zh_scale_comparison_em(symbol: str = \"SZ000895\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-行情中心-同行比较-公司规模\n    https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=000895&color=b#/thbj/gsgm\n    :type symbol: str\n    :return: 公司规模\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_PCF10_INDUSTRY_MARKET\",\n        \"columns\": \"SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,ORG_CODE,\"\n        \"CORRE_SECUCODE,CORRE_SECURITY_CODE,CORRE_SECURITY_NAME,\"\n        \"CORRE_ORG_CODE,TOTAL_CAP,FREECAP,TOTAL_OPERATEINCOME,\"\n        \"NETPROFIT,REPORT_TYPE,TOTAL_CAP_RANK,FREECAP_RANK,\"\n        \"TOTAL_OPERATEINCOME_RANK,NETPROFIT_RANK\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECUCODE=\"{symbol[2:]}.{symbol[:2]}\")(CORRE_SECUCODE=\"{symbol[2:]}.{symbol[:2]}\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"5\",\n        \"sortTypes\": \"-1\",\n        \"sortColumns\": \"TOTAL_CAP\",\n        \"source\": \"HSF10\",\n        \"client\": \"PC\",\n        \"v\": \"005391946600478148\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n\n    field_mapping = {\n        \"CORRE_SECURITY_CODE\": \"代码\",\n        \"CORRE_SECURITY_NAME\": \"简称\",\n        \"TOTAL_CAP\": \"总市值\",\n        \"TOTAL_CAP_RANK\": \"总市值排名\",\n        \"FREECAP\": \"流通市值\",\n        \"FREECAP_RANK\": \"流通市值排名\",\n        \"TOTAL_OPERATEINCOME\": \"营业收入\",\n        \"TOTAL_OPERATEINCOME_RANK\": \"营业收入排名\",\n        \"NETPROFIT\": \"净利润\",\n        \"NETPROFIT_RANK\": \"净利润排名\",\n    }\n\n    temp_df = pd.DataFrame(columns=field_mapping.values())\n    if data_json[\"result\"] is not None:\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        temp_df.rename(columns=field_mapping, inplace=True)\n        temp_df = temp_df[field_mapping.values()]\n\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_growth_comparison_em_df = stock_zh_growth_comparison_em(symbol=\"SZ000895\")\n    print(stock_zh_growth_comparison_em_df)\n\n    stock_zh_valuation_comparison_em_df = stock_zh_valuation_comparison_em(\n        symbol=\"SZ000895\"\n    )\n    print(stock_zh_valuation_comparison_em_df)\n\n    stock_zh_dupont_comparison_em_df = stock_zh_dupont_comparison_em(symbol=\"SZ000895\")\n    print(stock_zh_dupont_comparison_em_df)\n\n    stock_zh_scale_comparison_em_df = stock_zh_scale_comparison_em(symbol=\"SZ000895\")\n    print(stock_zh_scale_comparison_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_zh_kcb_report.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/7/21 18:00\nDesc: 科创板报告\nhttps://data.eastmoney.com/notices/kcb.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom tqdm import tqdm\n\n\ndef _stock_zh_kcb_report_em_page() -> int:\n    \"\"\"\n    科创板报告的页数\n    https://data.eastmoney.com/notices/kcb.html\n    :return: 科创板报告的页数\n    :rtype: int\n    \"\"\"\n    url = \"https://np-anotice-stock.eastmoney.com/api/security/ann\"\n    params = {\n        \"sr\": \"-1\",\n        \"page_size\": \"100\",\n        \"page_index\": \"1\",\n        \"ann_type\": \"KCB\",\n        \"client_source\": \"web\",\n        \"f_node\": \"0\",\n        \"s_node\": \"0\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    page_num = int(\n        int(data_json[\"data\"][\"total_hits\"]) / int(data_json[\"data\"][\"page_size\"])\n    )\n    return page_num\n\n\ndef stock_zh_kcb_report_em(from_page: int = 1, to_page: int = 100) -> pd.DataFrame:\n    \"\"\"\n    科创板报告内容\n    https://data.eastmoney.com/notices/kcb.html\n    :param from_page: 开始获取的页码\n    :type from_page: int\n    :param to_page: 结束获取的页码\n    :type to_page: int\n    :return: 科创板报告内容\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://np-anotice-stock.eastmoney.com/api/security/ann\"\n    total_page = _stock_zh_kcb_report_em_page()\n    big_df = pd.DataFrame()\n    if to_page >= total_page:\n        to_page = total_page\n    for i in tqdm(range(from_page, to_page + 1), leave=False):\n        params = {\n            \"sr\": \"-1\",\n            \"page_size\": \"100\",\n            \"page_index\": i,\n            \"ann_type\": \"KCB\",\n            \"client_source\": \"web\",\n            \"f_node\": \"0\",\n            \"s_node\": \"0\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [\n                [item[\"codes\"][0][\"stock_code\"] for item in data_json[\"data\"][\"list\"]],\n                [item[\"codes\"][0][\"short_name\"] for item in data_json[\"data\"][\"list\"]],\n                [item[\"title\"] for item in data_json[\"data\"][\"list\"]],\n                [\n                    item[\"columns\"][0][\"column_name\"]\n                    for item in data_json[\"data\"][\"list\"]\n                ],\n                [item[\"notice_date\"] for item in data_json[\"data\"][\"list\"]],\n                [item[\"art_code\"] for item in data_json[\"data\"][\"list\"]],\n            ]\n        ).T\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.columns = [\n        \"代码\",\n        \"名称\",\n        \"公告标题\",\n        \"公告类型\",\n        \"公告日期\",\n        \"公告代码\",\n    ]\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_kcb_report_em_df = stock_zh_kcb_report_em(from_page=1, to_page=100)\n    print(stock_zh_kcb_report_em_df)\n"
  },
  {
    "path": "akshare/stock/stock_zh_kcb_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/7/6 19:28\nDesc: 新浪财经-科创板-实时行情数据和历史行情数据(包含前复权和后复权因子)\n\"\"\"\n\nimport datetime\nimport re\n\nfrom akshare.utils import demjson\nimport pandas as pd\nimport requests\nfrom tqdm import tqdm\n\nfrom akshare.stock.cons import (\n    zh_sina_kcb_stock_payload,\n    zh_sina_kcb_stock_url,\n    zh_sina_kcb_stock_count_url,\n    zh_sina_kcb_stock_hist_url,\n    zh_sina_kcb_stock_hfq_url,\n    zh_sina_kcb_stock_qfq_url,\n    zh_sina_kcb_stock_amount_url,\n)\n\n\ndef get_zh_kcb_page_count() -> int:\n    \"\"\"\n    所有股票的总页数\n    https://vip.stock.finance.sina.com.cn/mkt/#hs_a\n    :return: 所有股票的总页数\n    :rtype: int\n    \"\"\"\n    res = requests.get(zh_sina_kcb_stock_count_url)\n    page_count = int(re.findall(re.compile(r\"\\d+\"), res.text)[0]) / 80\n    if isinstance(page_count, int):\n        return page_count\n    else:\n        return int(page_count) + 1\n\n\ndef stock_zh_kcb_spot() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-科创板实时行情数据, 大量抓取容易封IP\n    https://vip.stock.finance.sina.com.cn/mkt/#kcb\n    :return: 科创板实时行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    big_df = pd.DataFrame()\n    page_count = get_zh_kcb_page_count()\n    zh_sina_stock_payload_copy = zh_sina_kcb_stock_payload.copy()\n    for page in tqdm(range(1, page_count + 1), leave=False):\n        zh_sina_stock_payload_copy.update({\"page\": page})\n        zh_sina_stock_payload_copy.update({\"_s_r_a\": \"page\"})\n        res = requests.get(zh_sina_kcb_stock_url, params=zh_sina_stock_payload_copy)\n        data_json = demjson.decode(res.text)\n        big_df = pd.concat([big_df, pd.DataFrame(data_json)], ignore_index=True)\n    big_df.columns = [\n        \"代码\",\n        \"-\",\n        \"名称\",\n        \"最新价\",\n        \"涨跌额\",\n        \"涨跌幅\",\n        \"买入\",\n        \"卖出\",\n        \"昨收\",\n        \"今开\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"时点\",\n        \"市盈率\",\n        \"市净率\",\n        \"流通市值\",\n        \"总市值\",\n        \"换手率\",\n    ]\n    big_df = big_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"买入\",\n            \"卖出\",\n            \"昨收\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"时点\",\n            \"市盈率\",\n            \"市净率\",\n            \"流通市值\",\n            \"总市值\",\n            \"换手率\",\n        ]\n    ]\n\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"])\n    big_df[\"涨跌额\"] = pd.to_numeric(big_df[\"涨跌额\"])\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"])\n    big_df[\"买入\"] = pd.to_numeric(big_df[\"买入\"])\n    big_df[\"卖出\"] = pd.to_numeric(big_df[\"卖出\"])\n    big_df[\"昨收\"] = pd.to_numeric(big_df[\"昨收\"])\n    big_df[\"今开\"] = pd.to_numeric(big_df[\"今开\"])\n    big_df[\"最高\"] = pd.to_numeric(big_df[\"最高\"])\n    big_df[\"最低\"] = pd.to_numeric(big_df[\"最低\"])\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"])\n    big_df[\"成交额\"] = pd.to_numeric(big_df[\"成交额\"])\n    big_df[\"市盈率\"] = pd.to_numeric(big_df[\"市盈率\"])\n    big_df[\"市净率\"] = pd.to_numeric(big_df[\"市净率\"])\n    big_df[\"流通市值\"] = pd.to_numeric(big_df[\"流通市值\"])\n    big_df[\"总市值\"] = pd.to_numeric(big_df[\"总市值\"])\n    big_df[\"换手率\"] = pd.to_numeric(big_df[\"换手率\"])\n    return big_df\n\n\ndef stock_zh_kcb_daily(symbol: str = \"sh688399\", adjust: str = \"\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-科创板股票的历史行情数据, 大量抓取容易封IP\n    https://finance.sina.com.cn/realstock/company/sh688005/nc.shtml\n    :param symbol: 股票代码; 带市场标识的股票代码\n    :type symbol: str\n    :param adjust: 默认不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; hfq-factor: 返回后复权因子; qfq-factor: 返回前复权因子\n    :type adjust: str\n    :return: 科创板股票的历史行情数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    res = requests.get(\n        zh_sina_kcb_stock_hist_url.format(\n            symbol, datetime.datetime.now().strftime(\"%Y_%m_%d\"), symbol\n        )\n    )\n    data_json = demjson.decode(res.text[res.text.find(\"[\") : res.text.rfind(\"]\") + 1])\n    data_df = pd.DataFrame(data_json)\n    data_df.index = pd.to_datetime(data_df[\"d\"])\n    data_df.index.name = \"date\"\n    del data_df[\"d\"]\n\n    r = requests.get(zh_sina_kcb_stock_amount_url.format(symbol, symbol))\n    amount_data_json = demjson.decode(r.text[r.text.find(\"[\") : r.text.rfind(\"]\") + 1])\n    amount_data_df = pd.DataFrame(amount_data_json)\n    amount_data_df.index = pd.to_datetime(amount_data_df.date)\n    del amount_data_df[\"date\"]\n    temp_df = pd.merge(\n        data_df, amount_data_df, left_index=True, right_index=True, how=\"left\"\n    )\n    try:\n        # try for pandas >= 2.1.0\n        temp_df.ffill(inplace=True)\n    except Exception:\n        try:\n            # try for pandas < 2.1.0\n            temp_df.fillna(method=\"ffill\", inplace=True)\n        except Exception as e:\n            print(\"Error:\", e)\n    temp_df = temp_df.astype(float)\n    temp_df[\"amount\"] = temp_df[\"amount\"] * 10000\n    temp_df[\"turnover\"] = temp_df[\"v\"] / temp_df[\"amount\"]\n    temp_df.columns = [\n        \"open\",\n        \"high\",\n        \"low\",\n        \"close\",\n        \"volume\",\n        \"after_volume\",\n        \"after_amount\",\n        \"outstanding_share\",\n        \"turnover\",\n    ]\n\n    if not adjust:\n        temp_df.reset_index(inplace=True)\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n        return temp_df\n\n    if adjust == \"hfq\":\n        res = requests.get(zh_sina_kcb_stock_hfq_url.format(symbol))\n        hfq_factor_df = pd.DataFrame(\n            eval(res.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"]\n        )\n        hfq_factor_df.columns = [\"date\", \"hfq_factor\"]\n        hfq_factor_df.index = pd.to_datetime(hfq_factor_df.date)\n        del hfq_factor_df[\"date\"]\n\n        temp_df = pd.merge(\n            temp_df, hfq_factor_df, left_index=True, right_index=True, how=\"left\"\n        )\n        try:\n            # try for pandas >= 2.1.0\n            temp_df.ffill(inplace=True)\n        except Exception:\n            try:\n                # try for pandas < 2.1.0\n                temp_df.fillna(method=\"ffill\", inplace=True)\n            except Exception as e:\n                print(\"Error:\", e)\n        temp_df = temp_df.astype(float)\n        temp_df[\"open\"] = temp_df[\"open\"] * temp_df[\"hfq_factor\"]\n        temp_df[\"high\"] = temp_df[\"high\"] * temp_df[\"hfq_factor\"]\n        temp_df[\"close\"] = temp_df[\"close\"] * temp_df[\"hfq_factor\"]\n        temp_df[\"low\"] = temp_df[\"low\"] * temp_df[\"hfq_factor\"]\n        temp_df = temp_df.iloc[:, :-1]\n        temp_df.reset_index(inplace=True)\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n        return temp_df\n\n    if adjust == \"qfq\":\n        res = requests.get(zh_sina_kcb_stock_qfq_url.format(symbol))\n        qfq_factor_df = pd.DataFrame(\n            eval(res.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"]\n        )\n        qfq_factor_df.columns = [\"date\", \"qfq_factor\"]\n        qfq_factor_df.index = pd.to_datetime(qfq_factor_df.date)\n        del qfq_factor_df[\"date\"]\n\n        temp_df = pd.merge(\n            temp_df, qfq_factor_df, left_index=True, right_index=True, how=\"left\"\n        )\n        try:\n            # try for pandas >= 2.1.0\n            temp_df.ffill(inplace=True)\n        except Exception:\n            try:\n                # try for pandas < 2.1.0\n                temp_df.fillna(method=\"ffill\", inplace=True)\n            except Exception as e:\n                print(\"Error:\", e)\n        temp_df = temp_df.astype(float)\n        temp_df[\"open\"] = temp_df[\"open\"] / temp_df[\"qfq_factor\"]\n        temp_df[\"high\"] = temp_df[\"high\"] / temp_df[\"qfq_factor\"]\n        temp_df[\"close\"] = temp_df[\"close\"] / temp_df[\"qfq_factor\"]\n        temp_df[\"low\"] = temp_df[\"low\"] / temp_df[\"qfq_factor\"]\n        temp_df = temp_df.iloc[:, :-1]\n        temp_df.reset_index(inplace=True)\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n        return temp_df\n\n    if adjust == \"hfq-factor\":\n        res = requests.get(zh_sina_kcb_stock_hfq_url.format(symbol))\n        hfq_factor_df = pd.DataFrame(\n            eval(res.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"]\n        )\n        hfq_factor_df.columns = [\"date\", \"hfq_factor\"]\n        hfq_factor_df.index = pd.to_datetime(hfq_factor_df.date)\n        del hfq_factor_df[\"date\"]\n        hfq_factor_df.reset_index(inplace=True)\n        hfq_factor_df[\"date\"] = pd.to_datetime(hfq_factor_df[\"date\"]).dt.date\n        return hfq_factor_df\n\n    if adjust == \"qfq-factor\":\n        res = requests.get(zh_sina_kcb_stock_qfq_url.format(symbol))\n        qfq_factor_df = pd.DataFrame(\n            eval(res.text.split(\"=\")[1].split(\"\\n\")[0])[\"data\"]\n        )\n        qfq_factor_df.columns = [\"date\", \"qfq_factor\"]\n        qfq_factor_df.index = pd.to_datetime(qfq_factor_df.date)\n        del qfq_factor_df[\"date\"]\n        qfq_factor_df.reset_index(inplace=True)\n        qfq_factor_df[\"date\"] = pd.to_datetime(qfq_factor_df[\"date\"]).dt.date\n        return qfq_factor_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_kcb_daily_qfq_df = stock_zh_kcb_daily(symbol=\"sh688399\", adjust=\"qfq\")\n    print(stock_zh_kcb_daily_qfq_df)\n\n    stock_zh_kcb_daily_hfq_df = stock_zh_kcb_daily(symbol=\"sh688399\", adjust=\"hfq\")\n    print(stock_zh_kcb_daily_hfq_df)\n\n    stock_zh_kcb_daily_df = stock_zh_kcb_daily(symbol=\"sh688399\", adjust=\"qfq-factor\")\n    print(stock_zh_kcb_daily_df)\n\n    stock_zh_kcb_spot_df = stock_zh_kcb_spot()\n    print(stock_zh_kcb_spot_df)\n"
  },
  {
    "path": "akshare/stock_feature/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/12/27 18:02\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/stock_feature/cons.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/12/30 21:02\nDesc:\n\"\"\"\n\nstock_em_sy_js = \"\"\"\n    function getCode(num) {\n            var str = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n            var codes = str.split('');\n            num = num || 6;\n            var code = \"\";\n            for (var i = 0; i < num; i++) {\n                code += codes[Math.floor(Math.random() * 52)]\n            }\n            return code\n        }\n    \"\"\"\n"
  },
  {
    "path": "akshare/stock_feature/stock_a_below_net_asset_statistics.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/30 10:30\nDesc: 破净股统计历史走势\nhttps://www.legulegu.com/stockdata/below-net-asset-statistics\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.cons import headers\n\n\ndef stock_a_below_net_asset_statistics(symbol: str = \"全部A股\") -> pd.DataFrame:\n    \"\"\"\n    破净股统计历史走势\n    https://www.legulegu.com/stockdata/below-net-asset-statistics\n    :param symbol: choice of {\"全部A股\", \"沪深300\", \"上证50\", \"中证500\"}\n    :type symbol: str\n    :return: 破净股统计历史走势\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"全部A股\": \"1\",\n        \"沪深300\": \"000300.XSHG\",\n        \"上证50\": \"000016.SH\",\n        \"中证500\": \"000905.SH\",\n    }\n    url = \"https://legulegu.com/stockdata/below-net-asset-statistics-data\"\n    params = {\n        \"marketId\": symbol_map[symbol],\n        \"token\": \"325843825a2745a2a8f9b9e3355cb864\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json)\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], unit=\"ms\").dt.date\n    del temp_df[\"marketId\"]\n    big_df = temp_df.iloc[:, :3]\n    big_df.columns = [\"below_net_asset\", \"total_company\", \"date\"]\n    big_df[\"below_net_asset_ratio\"] = round(\n        big_df[\"below_net_asset\"] / big_df[\"total_company\"], 4\n    )\n    big_df = big_df[\n        [\"date\", \"below_net_asset\", \"total_company\", \"below_net_asset_ratio\"]\n    ]\n    big_df[\"date\"] = pd.to_datetime(big_df[\"date\"], errors=\"coerce\").dt.date\n    big_df[\"below_net_asset\"] = pd.to_numeric(\n        big_df[\"below_net_asset\"], errors=\"coerce\"\n    )\n    big_df[\"total_company\"] = pd.to_numeric(big_df[\"total_company\"], errors=\"coerce\")\n    big_df[\"below_net_asset_ratio\"] = pd.to_numeric(\n        big_df[\"below_net_asset_ratio\"], errors=\"coerce\"\n    )\n    big_df.sort_values([\"date\"], inplace=True, ignore_index=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_a_below_net_asset_statistics_df = stock_a_below_net_asset_statistics(\n        symbol=\"全部A股\"\n    )\n    print(stock_a_below_net_asset_statistics_df)\n\n    stock_a_below_net_asset_statistics_df = stock_a_below_net_asset_statistics(\n        symbol=\"沪深300\"\n    )\n    print(stock_a_below_net_asset_statistics_df)\n\n    stock_a_below_net_asset_statistics_df = stock_a_below_net_asset_statistics(\n        symbol=\"上证50\"\n    )\n    print(stock_a_below_net_asset_statistics_df)\n\n    stock_a_below_net_asset_statistics_df = stock_a_below_net_asset_statistics(\n        symbol=\"中证500\"\n    )\n    print(stock_a_below_net_asset_statistics_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_a_high_low.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/3/24 11:30\nDesc: 乐咕乐股-创新高、新低的股票数量\nhttps://www.legulegu.com/stockdata/high-low-statistics\n\"\"\"\n\nfrom datetime import date\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.cons import headers\n\n\ndef stock_a_high_low_statistics(symbol: str = \"all\") -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-创新高、新低的股票数量\n    https://www.legulegu.com/stockdata/high-low-statistics\n    :param symbol: choice of {\"all\", \"sz50\", \"hs300\", \"zz500\"}\n    :type symbol: str\n    :return: 创新高、新低的股票数量\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://www.legulegu.com/stockdata/member-ship/get-high-low-statistics/{symbol}\"\n    r = requests.get(url, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json)\n    del temp_df[\"indexCode\"]\n    temp_df['date'] = temp_df['date'].apply(lambda x: pd.Timestamp(date(x[0], x[1], x[2])))\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"high20\"] = pd.to_numeric(temp_df[\"high20\"], errors=\"coerce\")\n    temp_df[\"low20\"] = pd.to_numeric(temp_df[\"low20\"], errors=\"coerce\")\n    temp_df[\"high60\"] = pd.to_numeric(temp_df[\"high60\"], errors=\"coerce\")\n    temp_df[\"low60\"] = pd.to_numeric(temp_df[\"low60\"], errors=\"coerce\")\n    temp_df[\"high120\"] = pd.to_numeric(temp_df[\"high120\"], errors=\"coerce\")\n    temp_df[\"low120\"] = pd.to_numeric(temp_df[\"low120\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"date\"], inplace=True, ignore_index=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_a_high_low_statistics_df = stock_a_high_low_statistics(symbol=\"all\")\n    print(stock_a_high_low_statistics_df)\n\n    stock_a_high_low_statistics_df = stock_a_high_low_statistics(symbol=\"sz50\")\n    print(stock_a_high_low_statistics_df)\n\n    stock_a_high_low_statistics_df = stock_a_high_low_statistics(symbol=\"hs300\")\n    print(stock_a_high_low_statistics_df)\n\n    stock_a_high_low_statistics_df = stock_a_high_low_statistics(symbol=\"zz500\")\n    print(stock_a_high_low_statistics_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_a_indicator.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/10/30 20:24\nDesc: 市盈率, 市净率和股息率查询\nhttps://www.legulegu.com/stocklist\nhttps://www.legulegu.com/s/000001\n\"\"\"\n\nfrom datetime import datetime\nfrom hashlib import md5\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.utils.cons import headers\n\n\ndef get_cookie_csrf(url: str = \"\") -> dict:\n    \"\"\"\n    乐咕乐股-主板市盈率\n    https://legulegu.com/stockdata/shanghaiPE\n    :return: 指定市场的市盈率数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    # 创建独立的 session，避免污染全局状态\n    session = requests.Session()\n    session.headers.update(headers)\n    r = session.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    csrf_tag = soup.find(name=\"meta\", attrs={\"name\": \"_csrf\"})\n    csrf_token = csrf_tag.attrs[\"content\"]\n    # 创建新的 headers\n    local_headers = headers.copy()\n    local_headers.update({\"X-CSRF-Token\": csrf_token})\n    return {\"cookies\": r.cookies, \"headers\": local_headers}\n\n\ndef get_token_lg() -> str:\n    \"\"\"\n    生成乐咕的 token\n    https://legulegu.com/s/002488\n    :return: token\n    :rtype: str\n    \"\"\"\n    current_date_str = datetime.now().date().isoformat()\n    obj = md5()\n    obj.update(current_date_str.encode(\"utf-8\"))\n    token = obj.hexdigest()\n    return token\n\n\ndef stock_hk_indicator_eniu(\n    symbol: str = \"hk01093\", indicator: str = \"市盈率\"\n) -> pd.DataFrame:\n    \"\"\"\n    亿牛网-港股指标\n    https://eniu.com/gu/hk01093/roe\n    :param symbol: 港股代码\n    :type symbol: str\n    :param indicator: 需要获取的指标, choice of {\"港股\", \"市盈率\", \"市净率\", \"股息率\", \"ROE\", \"市值\"}\n    :type indicator: str\n    :return: 指定 symbol 和 indicator 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if indicator == \"港股\":\n        url = \"https://eniu.com/static/data/stock_list.json\"\n        r = requests.get(url, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json)\n        temp_df = temp_df[temp_df[\"stock_id\"].str.contains(\"hk\")]\n        temp_df.reset_index(inplace=True, drop=True)\n        return temp_df\n    if indicator == \"市盈率\":\n        url = f\"https://eniu.com/chart/peh/{symbol}\"\n    elif indicator == \"市净率\":\n        url = f\"https://eniu.com/chart/pbh/{symbol}\"\n    elif indicator == \"股息率\":\n        url = f\"https://eniu.com/chart/dvh/{symbol}\"\n    elif indicator == \"ROE\":\n        url = f\"https://eniu.com/chart/roeh/{symbol}\"\n    else:\n        url = f\"https://eniu.com/chart/marketvalueh/{symbol}\"\n    r = requests.get(url, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hk_indicator_eniu_df = stock_hk_indicator_eniu(\n        symbol=\"hk01093\", indicator=\"市盈率\"\n    )\n    print(stock_hk_indicator_eniu_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_a_pe_and_pb.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/20 20:00\nDesc: 乐咕乐股-A 股市盈率和市净率\nhttps://legulegu.com/stockdata/shanghaiPE\n\"\"\"\n\nfrom datetime import datetime\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\nfrom akshare.stock_feature.stock_a_indicator import get_cookie_csrf\n\nhash_code = \"\"\"\nfunction e(n) {\n    var e, t, r = \"\", o = -1, f;\n    if (n && n.length) {\n        f = n.length;\n        while ((o += 1) < f) {\n            e = n.charCodeAt(o);\n            t = o + 1 < f ? n.charCodeAt(o + 1) : 0;\n            if (55296 <= e && e <= 56319 && 56320 <= t && t <= 57343) {\n                e = 65536 + ((e & 1023) << 10) + (t & 1023);\n                o += 1\n            }\n            if (e <= 127) {\n                r += String.fromCharCode(e)\n            } else if (e <= 2047) {\n                r += String.fromCharCode(192 | e >>> 6 & 31, 128 | e & 63)\n            } else if (e <= 65535) {\n                r += String.fromCharCode(224 | e >>> 12 & 15, 128 | e >>> 6 & 63, 128 | e & 63)\n            } else if (e <= 2097151) {\n                r += String.fromCharCode(240 | e >>> 18 & 7, 128 | e >>> 12 & 63, 128 | e >>> 6 & 63, 128 | e & 63)\n            }\n        }\n    }\n    return r\n}\n\nfunction t(n) {\n    var e, t, r, o, f, i = [], h;\n    e = t = r = o = f = 0;\n    if (n && n.length) {\n        h = n.length;\n        n += \"\";\n        while (e < h) {\n            r = n.charCodeAt(e);\n            t += 1;\n            if (r < 128) {\n                i[t] = String.fromCharCode(r);\n                e += 1\n            } else if (r > 191 && r < 224) {\n                o = n.charCodeAt(e + 1);\n                i[t] = String.fromCharCode((r & 31) << 6 | o & 63);\n                e += 2\n            } else {\n                o = n.charCodeAt(e + 1);\n                f = n.charCodeAt(e + 2);\n                i[t] = String.fromCharCode(\n                    (r & 15) << 12 | (o & 63) << 6 | f & 63);\n                e += 3\n            }\n        }\n    }\n    return i.join(\"\")\n}\n\nfunction r(n, e) {\n    var t = (n & 65535) + (e & 65535)\n        , r = (n >> 16) + (e >> 16) + (t >> 16);\n    return r << 16 | t & 65535\n}\n\nfunction o(n, e) {\n    return n << e | n >>> 32 - e\n}\n\nfunction f(n, e) {\n    var t = e ? \"0123456789ABCDEF\" : \"0123456789abcdef\", r = \"\", o, f = 0, i = n.length;\n    for (; f < i; f += 1) {\n        o = n.charCodeAt(f);\n        r += t.charAt(o >>> 4 & 15) + t.charAt(o & 15)\n    }\n    return r\n}\n\nfunction i(n) {\n    var e, t = n.length, r = \"\";\n    for (e = 0; e < t; e += 1) {\n        r += String.fromCharCode(n.charCodeAt(e) & 255, n.charCodeAt(e) >>> 8 & 255)\n    }\n    return r\n}\n\nfunction h(n) {\n    var e, t = n.length, r = \"\";\n    for (e = 0; e < t; e += 1) {\n        r += String.fromCharCode(n.charCodeAt(e) >>> 8 & 255, n.charCodeAt(e) & 255)\n    }\n    return r\n}\n\nfunction u(n) {\n    var e, t = n.length * 32, r = \"\";\n    for (e = 0; e < t; e += 8) {\n        r += String.fromCharCode(n[e >> 5] >>> 24 - e % 32 & 255)\n    }\n    return r\n}\n\nfunction a(n) {\n    var e, t = n.length * 32, r = \"\";\n    for (e = 0; e < t; e += 8) {\n        r += String.fromCharCode(n[e >> 5] >>> e % 32 & 255)\n    }\n    return r\n}\n\nfunction c(n) {\n    var e, t = n.length * 8, r = Array(n.length >> 2), o = r.length;\n    for (e = 0; e < o; e += 1) {\n        r[e] = 0\n    }\n    for (e = 0; e < t; e += 8) {\n        r[e >> 5] |= (n.charCodeAt(e / 8) & 255) << e % 32\n    }\n    return r\n}\n\nfunction l(n) {\n    var e, t = n.length * 8, r = Array(n.length >> 2), o = r.length;\n    for (e = 0; e < o; e += 1) {\n        r[e] = 0\n    }\n    for (e = 0; e < t; e += 8) {\n        r[e >> 5] |= (n.charCodeAt(e / 8) & 255) << 24 - e % 32\n    }\n    return r\n}\n\nfunction D(n, e) {\n    var t = e.length, r = Array(), o, f, i, h, u, a, c, l;\n    a = Array(Math.ceil(n.length / 2));\n    h = a.length;\n    for (o = 0; o < h; o += 1) {\n        a[o] = n.charCodeAt(o * 2) << 8 | n.charCodeAt(o * 2 + 1)\n    }\n    while (a.length > 0) {\n        u = Array();\n        i = 0;\n        for (o = 0; o < a.length; o += 1) {\n            i = (i << 16) + a[o];\n            f = Math.floor(i / t);\n            i -= f * t;\n            if (u.length > 0 || f > 0) {\n                u[u.length] = f\n            }\n        }\n        r[r.length] = i;\n        a = u\n    }\n    c = \"\";\n    for (o = r.length - 1; o >= 0; o--) {\n        c += e.charAt(r[o])\n    }\n    l = Math.ceil(n.length * 8 / (Math.log(e.length) / Math.log(2)));\n    for (o = c.length; o < l; o += 1) {\n        c = e[0] + c\n    }\n    return c\n}\n\nfunction B(n, e) {\n    var t = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\", r = \"\", o = n.length, f, i, h;\n    e = e || \"=\";\n    for (f = 0; f < o; f += 3) {\n        h = n.charCodeAt(f) << 16 | (f + 1 < o ? n.charCodeAt(f + 1) << 8 : 0) | (f + 2 < o ? n.charCodeAt(f + 2) : 0);\n        for (i = 0; i < 4; i += 1) {\n            if (f * 8 + i * 6 > n.length * 8) {\n                r += e\n            } else {\n                r += t.charAt(h >>> 6 * (3 - i) & 63)\n            }\n        }\n    }\n    return r\n}\n\nfunction hex(n) {\n    return f(u(n, h), t)\n}\n\nfunction u(n) {\n    n = h ? e(n) : n;\n    return a(C(c(n), n.length * 8))\n}\n\nfunction l(n, t) {\n    var r, o, f, i, u;\n    n = h ? e(n) : n;\n    t = h ? e(t) : t;\n    r = c(n);\n    if (r.length > 16) {\n        r = C(r, n.length * 8)\n    }\n    o = Array(16),\n        f = Array(16);\n    for (u = 0; u < 16; u += 1) {\n        o[u] = r[u] ^ 909522486;\n        f[u] = r[u] ^ 1549556828\n    }\n    i = C(o.concat(c(t)), 512 + t.length * 8);\n    return a(C(f.concat(i), 512 + 128))\n}\n\nfunction C(n, e) {\n    var t, o, f, i, h, u = 1732584193, a = -271733879, c = -1732584194, l = 271733878;\n    n[e >> 5] |= 128 << e % 32;\n    n[(e + 64 >>> 9 << 4) + 14] = e;\n    for (t = 0; t < n.length; t += 16) {\n        o = u;\n        f = a;\n        i = c;\n        h = l;\n        u = s(u, a, c, l, n[t + 0], 7, -680876936);\n        l = s(l, u, a, c, n[t + 1], 12, -389564586);\n        c = s(c, l, u, a, n[t + 2], 17, 606105819);\n        a = s(a, c, l, u, n[t + 3], 22, -1044525330);\n        u = s(u, a, c, l, n[t + 4], 7, -176418897);\n        l = s(l, u, a, c, n[t + 5], 12, 1200080426);\n        c = s(c, l, u, a, n[t + 6], 17, -1473231341);\n        a = s(a, c, l, u, n[t + 7], 22, -45705983);\n        u = s(u, a, c, l, n[t + 8], 7, 1770035416);\n        l = s(l, u, a, c, n[t + 9], 12, -1958414417);\n        c = s(c, l, u, a, n[t + 10], 17, -42063);\n        a = s(a, c, l, u, n[t + 11], 22, -1990404162);\n        u = s(u, a, c, l, n[t + 12], 7, 1804603682);\n        l = s(l, u, a, c, n[t + 13], 12, -40341101);\n        c = s(c, l, u, a, n[t + 14], 17, -1502002290);\n        a = s(a, c, l, u, n[t + 15], 22, 1236535329);\n        u = w(u, a, c, l, n[t + 1], 5, -165796510);\n        l = w(l, u, a, c, n[t + 6], 9, -1069501632);\n        c = w(c, l, u, a, n[t + 11], 14, 643717713);\n        a = w(a, c, l, u, n[t + 0], 20, -373897302);\n        u = w(u, a, c, l, n[t + 5], 5, -701558691);\n        l = w(l, u, a, c, n[t + 10], 9, 38016083);\n        c = w(c, l, u, a, n[t + 15], 14, -660478335);\n        a = w(a, c, l, u, n[t + 4], 20, -405537848);\n        u = w(u, a, c, l, n[t + 9], 5, 568446438);\n        l = w(l, u, a, c, n[t + 14], 9, -1019803690);\n        c = w(c, l, u, a, n[t + 3], 14, -187363961);\n        a = w(a, c, l, u, n[t + 8], 20, 1163531501);\n        u = w(u, a, c, l, n[t + 13], 5, -1444681467);\n        l = w(l, u, a, c, n[t + 2], 9, -51403784);\n        c = w(c, l, u, a, n[t + 7], 14, 1735328473);\n        a = w(a, c, l, u, n[t + 12], 20, -1926607734);\n        u = F(u, a, c, l, n[t + 5], 4, -378558);\n        l = F(l, u, a, c, n[t + 8], 11, -2022574463);\n        c = F(c, l, u, a, n[t + 11], 16, 1839030562);\n        a = F(a, c, l, u, n[t + 14], 23, -35309556);\n        u = F(u, a, c, l, n[t + 1], 4, -1530992060);\n        l = F(l, u, a, c, n[t + 4], 11, 1272893353);\n        c = F(c, l, u, a, n[t + 7], 16, -155497632);\n        a = F(a, c, l, u, n[t + 10], 23, -1094730640);\n        u = F(u, a, c, l, n[t + 13], 4, 681279174);\n        l = F(l, u, a, c, n[t + 0], 11, -358537222);\n        c = F(c, l, u, a, n[t + 3], 16, -722521979);\n        a = F(a, c, l, u, n[t + 6], 23, 76029189);\n        u = F(u, a, c, l, n[t + 9], 4, -640364487);\n        l = F(l, u, a, c, n[t + 12], 11, -421815835);\n        c = F(c, l, u, a, n[t + 15], 16, 530742520);\n        a = F(a, c, l, u, n[t + 2], 23, -995338651);\n        u = E(u, a, c, l, n[t + 0], 6, -198630844);\n        l = E(l, u, a, c, n[t + 7], 10, 1126891415);\n        c = E(c, l, u, a, n[t + 14], 15, -1416354905);\n        a = E(a, c, l, u, n[t + 5], 21, -57434055);\n        u = E(u, a, c, l, n[t + 12], 6, 1700485571);\n        l = E(l, u, a, c, n[t + 3], 10, -1894986606);\n        c = E(c, l, u, a, n[t + 10], 15, -1051523);\n        a = E(a, c, l, u, n[t + 1], 21, -2054922799);\n        u = E(u, a, c, l, n[t + 8], 6, 1873313359);\n        l = E(l, u, a, c, n[t + 15], 10, -30611744);\n        c = E(c, l, u, a, n[t + 6], 15, -1560198380);\n        a = E(a, c, l, u, n[t + 13], 21, 1309151649);\n        u = E(u, a, c, l, n[t + 4], 6, -145523070);\n        l = E(l, u, a, c, n[t + 11], 10, -1120210379);\n        c = E(c, l, u, a, n[t + 2], 15, 718787259);\n        a = E(a, c, l, u, n[t + 9], 21, -343485551);\n        u = r(u, o);\n        a = r(a, f);\n        c = r(c, i);\n        l = r(l, h)\n    }\n    return Array(u, a, c, l)\n}\n\nfunction A(n, e, t, f, i, h) {\n    return r(o(r(r(e, n), r(f, h)), i), t)\n}\n\nfunction s(n, e, t, r, o, f, i) {\n    return A(e & t | ~e & r, n, e, o, f, i)\n}\n\nfunction w(n, e, t, r, o, f, i) {\n    return A(e & r | t & ~r, n, e, o, f, i)\n}\n\nfunction F(n, e, t, r, o, f, i) {\n    return A(e ^ t ^ r, n, e, o, f, i)\n}\n\nfunction E(n, e, t, r, o, f, i) {\n    return A(t ^ (e | ~r), n, e, o, f, i)\n}\n\"\"\"\n\n\ndef stock_market_pe_lg(symbol: str = \"深证\") -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-主板市盈率\n    https://legulegu.com/stockdata/shanghaiPE\n    :param symbol: choice of {\"上证\", \"深证\", \"创业板\", \"科创版\"}\n    :type symbol: str\n    :return: 指定市场的市盈率数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_functions = py_mini_racer.MiniRacer()\n    js_functions.eval(hash_code)\n    token = js_functions.call(\"hex\", datetime.now().date().isoformat()).lower()\n    if symbol in {\"上证\", \"深证\", \"创业板\"}:\n        url = \"https://legulegu.com/api/stock-data/market-pe\"\n        symbol_map = {\n            \"上证\": \"1\",\n            \"深证\": \"2\",\n            \"创业板\": \"4\",\n        }\n        url_map = {\n            \"上证\": \"https://legulegu.com/stockdata/shanghaiPE\",\n            \"深证\": \"https://legulegu.com/stockdata/shenzhenPE\",\n            \"创业板\": \"https://legulegu.com/stockdata/cybPE\",\n        }\n        params = {\"token\": token, \"marketId\": symbol_map[symbol]}\n        r = requests.get(url, params=params, **get_cookie_csrf(url=url_map[symbol]))\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df[\"date\"] = (\n            pd.to_datetime(temp_df[\"date\"], utc=True)\n            .dt.tz_convert(\"Asia/Shanghai\")\n            .dt.date\n        )\n        temp_df = temp_df[\n            [\n                \"date\",\n                \"close\",\n                \"pe\",\n            ]\n        ]\n        temp_df.columns = [\n            \"日期\",\n            \"指数\",\n            \"平均市盈率\",\n        ]\n        return temp_df\n    else:\n        url = \"https://legulegu.com/api/stockdata/get-ke-chuang-ban-pe\"\n        params = {\"token\": token}\n        r = requests.get(\n            url,\n            params=params,\n            **get_cookie_csrf(url=\"https://legulegu.com/stockdata/ke-chuang-ban-pe\"),\n        )\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        temp_df[\"date\"] = (\n            pd.to_datetime(temp_df[\"date\"], utc=True)\n            .dt.tz_convert(\"Asia/Shanghai\")\n            .dt.date\n        )\n        temp_df = temp_df[\n            [\n                \"date\",\n                \"close\",\n                \"pe\",\n            ]\n        ]\n        temp_df.columns = [\n            \"日期\",\n            \"总市值\",\n            \"市盈率\",\n        ]\n        return temp_df\n\n\ndef stock_index_pe_lg(symbol: str = \"沪深300\") -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-指数市盈率\n    https://legulegu.com/stockdata/sz50-ttm-lyr\n    :param symbol: choice of {\"上证50\", \"沪深300\", \"上证380\", \"创业板50\", \"中证500\", \"上证180\", \"深证红利\", \"深证100\", \"中证1000\", \"上证红利\", \"中证100\", \"中证800\"}\n    :type symbol: str\n    :return: 指定指数的市盈率数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_functions = py_mini_racer.MiniRacer()\n    js_functions.eval(hash_code)\n    token = js_functions.call(\"hex\", datetime.now().date().isoformat()).lower()\n    symbol_map = {\n        \"上证50\": \"000016.SH\",\n        \"沪深300\": \"000300.SH\",\n        \"上证380\": \"000009.SH\",\n        \"创业板50\": \"399673.SZ\",\n        \"中证500\": \"000905.SH\",\n        \"上证180\": \"000010.SH\",\n        \"深证红利\": \"399324.SZ\",\n        \"深证100\": \"399330.SZ\",\n        \"中证1000\": \"000852.SH\",\n        \"上证红利\": \"000015.SH\",\n        \"中证100\": \"000903.SH\",\n        \"中证800\": \"000906.SH\",\n    }\n    url = \"https://legulegu.com/api/stockdata/index-basic-pe\"\n    params = {\"token\": token, \"indexCode\": symbol_map[symbol]}\n    r = requests.get(\n        url,\n        params=params,\n        **get_cookie_csrf(url=\"https://legulegu.com/stockdata/sz50-ttm-lyr\"),\n    )\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"date\"] = (\n        pd.to_datetime(temp_df[\"date\"], utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    temp_df = temp_df[\n        [\n            \"date\",\n            \"close\",\n            \"lyrPe\",\n            \"addLyrPe\",\n            \"middleLyrPe\",\n            \"ttmPe\",\n            \"addTtmPe\",\n            \"middleTtmPe\",\n        ]\n    ]\n    temp_df.columns = [\n        \"日期\",\n        \"指数\",\n        \"等权静态市盈率\",\n        \"静态市盈率\",\n        \"静态市盈率中位数\",\n        \"等权滚动市盈率\",\n        \"滚动市盈率\",\n        \"滚动市盈率中位数\",\n    ]\n    return temp_df\n\n\ndef stock_market_pb_lg(symbol: str = \"上证\") -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-主板市净率\n    https://legulegu.com/stockdata/shanghaiPB\n    :param symbol: choice of {\"上证\", \"深证\", \"创业板\", \"科创版\"}\n    :type symbol: str\n    :return: 指定市场的市净率数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_functions = py_mini_racer.MiniRacer()\n    js_functions.eval(hash_code)\n    token = js_functions.call(\"hex\", datetime.now().date().isoformat()).lower()\n    url = \"https://legulegu.com/api/stockdata/index-basic-pb\"\n    symbol_map = {\"上证\": \"1\", \"深证\": \"2\", \"创业板\": \"4\", \"科创版\": \"7\"}\n    url_map = {\n        \"上证\": \"https://legulegu.com/stockdata/shanghaiPB\",\n        \"深证\": \"https://legulegu.com/stockdata/shenzhenPB\",\n        \"创业板\": \"https://legulegu.com/stockdata/cybPB\",\n        \"科创版\": \"https://legulegu.com/stockdata/ke-chuang-ban-pb\",\n    }\n    params = {\"token\": token, \"indexCode\": symbol_map[symbol]}\n    r = requests.get(url, params=params, **get_cookie_csrf(url=url_map[symbol]))\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"date\"] = (\n        pd.to_datetime(temp_df[\"date\"], utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    temp_df = temp_df[\n        [\n            \"date\",\n            \"close\",\n            \"addPb\",\n            \"pb\",\n            \"middlePb\",\n        ]\n    ]\n    temp_df.columns = [\n        \"日期\",\n        \"指数\",\n        \"市净率\",\n        \"等权市净率\",\n        \"市净率中位数\",\n    ]\n    return temp_df\n\n\ndef stock_index_pb_lg(symbol: str = \"上证50\") -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-指数市净率\n    https://legulegu.com/stockdata/sz50-pb\n    :param symbol: choice of {\"上证50\", \"沪深300\", \"上证380\", \"创业板50\", \"中证500\", \"上证180\", \"深证红利\", \"深证100\", \"中证1000\", \"上证红利\", \"中证100\", \"中证800\"}\n    :type symbol: str\n    :return: 指定指数的市净率数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_functions = py_mini_racer.MiniRacer()\n    js_functions.eval(hash_code)\n    token = js_functions.call(\"hex\", datetime.now().date().isoformat()).lower()\n    symbol_map = {\n        \"上证50\": \"000016.SH\",\n        \"沪深300\": \"000300.SH\",\n        \"上证380\": \"000009.SH\",\n        \"创业板50\": \"399673.SZ\",\n        \"中证500\": \"000905.SH\",\n        \"上证180\": \"000010.SH\",\n        \"深证红利\": \"399324.SZ\",\n        \"深证100\": \"399330.SZ\",\n        \"中证1000\": \"000852.SH\",\n        \"上证红利\": \"000015.SH\",\n        \"中证100\": \"000903.SH\",\n        \"中证800\": \"000906.SH\",\n    }\n    url = \"https://legulegu.com/api/stockdata/index-basic-pb\"\n    params = {\"token\": token, \"indexCode\": symbol_map[symbol]}\n    r = requests.get(\n        url,\n        params=params,\n        **get_cookie_csrf(url=\"https://legulegu.com/stockdata/zz500-ttm-lyr\"),\n    )\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"date\"] = (\n        pd.to_datetime(temp_df[\"date\"], utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    temp_df = temp_df[\n        [\n            \"date\",\n            \"close\",\n            \"addPb\",\n            \"pb\",\n            \"middlePb\",\n        ]\n    ]\n    temp_df.columns = [\n        \"日期\",\n        \"指数\",\n        \"市净率\",\n        \"等权市净率\",\n        \"市净率中位数\",\n    ]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_market_pe_lg_df = stock_market_pe_lg(symbol=\"上证\")\n    print(stock_market_pe_lg_df)\n\n    stock_market_pe_lg_df = stock_market_pe_lg(symbol=\"科创版\")\n    print(stock_market_pe_lg_df)\n\n    for item in {\"上证\", \"深证\", \"创业板\", \"科创版\"}:\n        stock_market_pe_lg_df = stock_market_pe_lg(symbol=item)\n        print(stock_market_pe_lg_df)\n\n    stock_index_pe_lg_df = stock_index_pe_lg(symbol=\"沪深300\")\n    print(stock_index_pe_lg_df)\n\n    for item in [\n        \"上证50\",\n        \"沪深300\",\n        \"上证380\",\n        \"创业板50\",\n        \"中证500\",\n        \"上证180\",\n        \"深证红利\",\n        \"深证100\",\n        \"中证1000\",\n        \"上证红利\",\n        \"中证100\",\n        \"中证800\",\n    ]:\n        stock_index_pe_lg_df = stock_index_pe_lg(symbol=item)\n        print(stock_index_pe_lg_df)\n\n    for item in {\"上证\", \"深证\", \"创业板\", \"科创版\"}:\n        stock_market_pb_lg_df = stock_market_pb_lg(symbol=item)\n        print(stock_market_pb_lg_df)\n\n    for item in [\n        \"上证50\",\n        \"沪深300\",\n        \"上证380\",\n        \"创业板50\",\n        \"中证500\",\n        \"上证180\",\n        \"深证红利\",\n        \"深证100\",\n        \"中证1000\",\n        \"上证红利\",\n        \"中证100\",\n        \"中证800\",\n    ]:\n        stock_index_pe_lg_df = stock_index_pb_lg(symbol=item)\n        print(stock_index_pe_lg_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_account_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/21 17:00\nDesc: 东方财富网-数据中心-特色数据-股票账户统计\n东方财富网-数据中心-特色数据-股票账户统计: 股票账户统计详细数据\nhttps://data.eastmoney.com/cjsj/gpkhsj.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_account_statistics_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-股票账户统计\n    https://data.eastmoney.com/cjsj/gpkhsj.html\n    :return: 股票账户统计数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_STOCK_OPEN_DATA\",\n        \"columns\": \"ALL\",\n        \"pageSize\": \"500\",\n        \"sortColumns\": \"STATISTICS_DATE\",\n        \"sortTypes\": \"-1\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n        \"pageNumber\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"数据日期\",\n        \"新增投资者-数量\",\n        \"新增投资者-环比\",\n        \"新增投资者-同比\",\n        \"期末投资者-总量\",\n        \"期末投资者-A股账户\",\n        \"期末投资者-B股账户\",\n        \"上证指数-收盘\",\n        \"上证指数-涨跌幅\",\n        \"沪深总市值\",\n        \"沪深户均市值\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"数据日期\",\n            \"新增投资者-数量\",\n            \"新增投资者-环比\",\n            \"新增投资者-同比\",\n            \"期末投资者-总量\",\n            \"期末投资者-A股账户\",\n            \"期末投资者-B股账户\",\n            \"沪深总市值\",\n            \"沪深户均市值\",\n            \"上证指数-收盘\",\n            \"上证指数-涨跌幅\",\n        ]\n    ]\n    temp_df[\"新增投资者-数量\"] = pd.to_numeric(\n        temp_df[\"新增投资者-数量\"], errors=\"coerce\"\n    )\n    temp_df[\"新增投资者-环比\"] = pd.to_numeric(\n        temp_df[\"新增投资者-环比\"], errors=\"coerce\"\n    )\n    temp_df[\"新增投资者-同比\"] = pd.to_numeric(\n        temp_df[\"新增投资者-同比\"], errors=\"coerce\"\n    )\n    temp_df[\"期末投资者-总量\"] = pd.to_numeric(\n        temp_df[\"期末投资者-总量\"], errors=\"coerce\"\n    )\n    temp_df[\"期末投资者-A股账户\"] = pd.to_numeric(\n        temp_df[\"期末投资者-A股账户\"], errors=\"coerce\"\n    )\n    temp_df[\"期末投资者-B股账户\"] = pd.to_numeric(\n        temp_df[\"期末投资者-B股账户\"], errors=\"coerce\"\n    )\n    temp_df[\"沪深总市值\"] = pd.to_numeric(temp_df[\"沪深总市值\"], errors=\"coerce\")\n    temp_df[\"沪深户均市值\"] = pd.to_numeric(temp_df[\"沪深户均市值\"], errors=\"coerce\")\n    temp_df[\"上证指数-收盘\"] = pd.to_numeric(temp_df[\"上证指数-收盘\"], errors=\"coerce\")\n    temp_df[\"上证指数-涨跌幅\"] = pd.to_numeric(\n        temp_df[\"上证指数-涨跌幅\"], errors=\"coerce\"\n    )\n    temp_df.sort_values([\"数据日期\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_account_statistics_em_df = stock_account_statistics_em()\n    print(stock_account_statistics_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_all_pb.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/4/11 20:40\nDesc: 全部A股-等权重市净率、中位数市净率\nhttps://www.legulegu.com/stockdata/all-pb\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.stock_feature.stock_a_indicator import get_token_lg, get_cookie_csrf\n\n\ndef stock_a_all_pb() -> pd.DataFrame:\n    \"\"\"\n    全部A股-等权重市净率、中位数市净率\n    https://legulegu.com/stockdata/all-pb\n    :return: 全部A股-等权重市盈率、中位数市盈率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://legulegu.com/api/stock-data/market-index-pb\"\n    params = {\n        \"marketId\": \"ALL\",\n        \"token\": get_token_lg(),\n    }\n    r = requests.get(\n        url,\n        params=params,\n        **get_cookie_csrf(url=\"https://legulegu.com/stockdata/all-pb\"),\n    )\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"date\"] = (\n        pd.to_datetime(temp_df[\"date\"], utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    del temp_df[\"weightingAveragePB\"]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_a_all_pb_df = stock_a_all_pb()\n    print(stock_a_all_pb_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_analyst_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/8/20 20:00\nDesc: 东方财富网-数据中心-研究报告-东方财富分析师指数\nhttps://data.eastmoney.com/invest/invest/list.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom akshare.utils.tqdm import get_tqdm\nfrom akshare.utils.cons import headers\n\n\ndef stock_analyst_rank_em(year: str = \"2024\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-研究报告-东方财富分析师指数-东方财富分析师指数\n    https://data.eastmoney.com/invest/invest/list.html\n    :param year: 从 2015 年至今\n    :type year: str\n    :return: 东方财富分析师指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://data.eastmoney.com/dataapi/invest/list\"\n    params = {\n        \"sortColumns\": \"YEAR_YIELD\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_ANALYST_INDEX_RANK\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f'(YEAR=\"{year}\")',\n        \"distinct\": \"ANALYST_CODE\",\n        \"limit\": \"top100\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        data_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, data_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = list(range(1, len(big_df) + 1))\n    big_df.columns = [\n        \"序号\",\n        \"分析师ID\",\n        \"分析师名称\",\n        \"更新日期\",\n        \"年度\",\n        \"分析师单位\",\n        \"_\",\n        \"年度指数\",\n        f\"{year}年收益率\",\n        \"3个月收益率\",\n        \"6个月收益率\",\n        \"12个月收益率\",\n        \"成分股个数\",\n        f\"{year}最新个股评级-股票名称\",\n        \"_\",\n        f\"{year}最新个股评级-股票代码\",\n        \"_\",\n        \"行业代码\",\n        \"行业\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"分析师名称\",\n            \"分析师单位\",\n            \"年度指数\",\n            f\"{year}年收益率\",\n            \"3个月收益率\",\n            \"6个月收益率\",\n            \"12个月收益率\",\n            \"成分股个数\",\n            f\"{year}最新个股评级-股票名称\",\n            f\"{year}最新个股评级-股票代码\",\n            \"分析师ID\",\n            \"行业代码\",\n            \"行业\",\n            \"更新日期\",\n            \"年度\",\n        ]\n    ]\n    big_df[\"更新日期\"] = pd.to_datetime(big_df[\"更新日期\"], errors=\"coerce\").dt.date\n    big_df[\"年度指数\"] = pd.to_numeric(big_df[\"年度指数\"], errors=\"coerce\")\n    big_df[f\"{year}年收益率\"] = pd.to_numeric(\n        big_df[f\"{year}年收益率\"], errors=\"coerce\"\n    )\n    big_df[\"3个月收益率\"] = pd.to_numeric(big_df[\"3个月收益率\"], errors=\"coerce\")\n    big_df[\"6个月收益率\"] = pd.to_numeric(big_df[\"6个月收益率\"], errors=\"coerce\")\n    big_df[\"12个月收益率\"] = pd.to_numeric(big_df[\"12个月收益率\"], errors=\"coerce\")\n    big_df[\"成分股个数\"] = pd.to_numeric(big_df[\"成分股个数\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_analyst_detail_em(\n    analyst_id: str = \"11000200926\", indicator: str = \"最新跟踪成分股\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-研究报告-东方财富分析师指数-东方财富分析师指数2020最新排行-分析师详情\n    https://data.eastmoney.com/invest/invest/11000257131.html\n    :param analyst_id: 分析师 ID, 从 ak.stock_analyst_rank_em() 获取\n    :type analyst_id: str\n    :param indicator: choice of {\"最新跟踪成分股\", \"历史跟踪成分股\", \"历史指数\"}\n    :type indicator: str\n    :return: 具体指标的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/special/api/data/v1/get\"\n    if indicator == \"最新跟踪成分股\":\n        params = {\n            \"reportName\": \"RPT_RESEARCHER_NTCSTOCK\",\n            \"columns\": \"ALL\",\n            \"source\": \"WEB\",\n            \"client\": \"WEB\",\n            \"sortColumns\": \"CHANGE_DATE\",\n            \"sortTypes\": \"-1\",\n            \"pageNumber\": \"1\",\n            \"pageSize\": \"1000\",\n            \"filter\": f'(ANALYST_CODE=\"{analyst_id}\")',\n        }\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        temp_df.reset_index(inplace=True)\n        temp_df[\"index\"] = list(range(1, len(temp_df) + 1))\n        temp_df.columns = [\n            \"序号\",\n            \"最新评级日期\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"股票代码\",\n            \"-\",\n            \"股票名称\",\n            \"调入日期\",\n            \"当前评级名称\",\n            \"成交价格(前复权)\",\n            \"最新价格\",\n            \"阶段涨跌幅\",\n        ]\n        temp_df = temp_df[\n            [\n                \"序号\",\n                \"股票代码\",\n                \"股票名称\",\n                \"调入日期\",\n                \"最新评级日期\",\n                \"当前评级名称\",\n                \"成交价格(前复权)\",\n                \"最新价格\",\n                \"阶段涨跌幅\",\n            ]\n        ]\n        temp_df[\"调入日期\"] = pd.to_datetime(\n            temp_df[\"调入日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"最新评级日期\"] = pd.to_datetime(\n            temp_df[\"最新评级日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"成交价格(前复权)\"] = pd.to_numeric(\n            temp_df[\"成交价格(前复权)\"], errors=\"coerce\"\n        )\n        temp_df[\"最新价格\"] = pd.to_numeric(temp_df[\"最新价格\"], errors=\"coerce\")\n        temp_df[\"阶段涨跌幅\"] = pd.to_numeric(temp_df[\"阶段涨跌幅\"], errors=\"coerce\")\n        return temp_df\n    elif indicator == \"历史跟踪成分股\":\n        params = {\n            \"reportName\": \"RPT_RESEARCHER_HISTORYSTOCK\",\n            \"columns\": \"ALL\",\n            \"source\": \"WEB\",\n            \"client\": \"WEB\",\n            \"sortColumns\": \"CHANGE_DATE\",\n            \"sortTypes\": \"-1\",\n            \"pageNumber\": \"1\",\n            \"pageSize\": \"1000\",\n            \"filter\": f'(ANALYST_CODE=\"{analyst_id}\")',\n        }\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        temp_df.reset_index(inplace=True)\n        temp_df[\"index\"] = list(range(1, len(temp_df) + 1))\n        temp_df.columns = [\n            \"序号\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"股票代码\",\n            \"-\",\n            \"股票名称\",\n            \"调入日期\",\n            \"调出日期\",\n            \"调入时评级名称\",\n            \"调出原因\",\n            \"累计涨跌幅\",\n        ]\n        temp_df = temp_df[\n            [\n                \"序号\",\n                \"股票代码\",\n                \"股票名称\",\n                \"调入日期\",\n                \"调出日期\",\n                \"调入时评级名称\",\n                \"调出原因\",\n                \"累计涨跌幅\",\n            ]\n        ]\n        temp_df[\"调入日期\"] = pd.to_datetime(\n            temp_df[\"调入日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"调出日期\"] = pd.to_datetime(\n            temp_df[\"调出日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"累计涨跌幅\"] = pd.to_numeric(temp_df[\"累计涨跌幅\"], errors=\"coerce\")\n        return temp_df\n    elif indicator == \"历史指数\":\n        params = {\n            \"reportName\": \"RPT_RESEARCHER_DETAILS\",\n            \"columns\": \"ALL\",\n            \"sortColumns\": \"TRADE_DATE\",\n            \"sortTypes\": \"-1\",\n            \"filter\": f'(ANALYST_CODE=\"{analyst_id}\")',\n            \"source\": \"WEB\",\n            \"client\": \"WEB\",\n        }\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        temp_df = temp_df[\n            [\n                \"TRADE_DATE\",\n                \"INDEX_HVALUE\",\n            ]\n        ]\n        temp_df.columns = [\"date\", \"value\"]\n        temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n        temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n        temp_df.sort_values([\"date\"], inplace=True, ignore_index=True)\n        return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_analyst_rank_em_df = stock_analyst_rank_em(year=\"2024\")\n    print(stock_analyst_rank_em_df)\n\n    stock_analyst_detail_em_df = stock_analyst_detail_em(\n        analyst_id=\"11000200926\", indicator=\"最新跟踪成分股\"\n    )\n    print(stock_analyst_detail_em_df)\n\n    stock_analyst_detail_em_df = stock_analyst_detail_em(\n        analyst_id=\"11000200926\", indicator=\"历史跟踪成分股\"\n    )\n    print(stock_analyst_detail_em_df)\n\n    stock_analyst_detail_em_df = stock_analyst_detail_em(\n        analyst_id=\"11000200926\", indicator=\"历史指数\"\n    )\n    print(stock_analyst_detail_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_board_concept_ths.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/27 14:20\nDesc: 同花顺-板块-概念板块\nhttps://q.10jqka.com.cn/thshy/\n\"\"\"\n\nfrom typing import Dict\nfrom datetime import datetime\nfrom functools import lru_cache\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\nimport py_mini_racer\n\nfrom akshare.datasets import get_ths_js\nfrom akshare.utils import demjson\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef _get_file_content_ths(file: str = \"ths.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\n@lru_cache()\ndef _get_stock_board_concept_name_ths() -> dict:\n    \"\"\"\n    获取同花顺概念板块代码和名称字典\n    :return: 获取同花顺概念板块代码和名称字典\n    :rtype: dict\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = \"https://q.10jqka.com.cn/gn/detail/code/307822/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    code_list = [\n        item[\"href\"].split(\"/\")[-2]\n        for item in soup.find(name=\"div\", attrs={\"class\": \"cate_inner\"}).find_all(\"a\")\n    ]\n    name_list = [\n        item.text\n        for item in soup.find(name=\"div\", attrs={\"class\": \"cate_inner\"}).find_all(\"a\")\n    ]\n    name_code_map = dict(zip(name_list, code_list))\n    temp_dict = __stock_board_concept_summary_ths()\n    name_code_map.update(temp_dict)\n    return name_code_map\n\n\ndef stock_board_concept_name_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺-板块-概念板块-概念\n    http://q.10jqka.com.cn/thshy/\n    :return: 所有概念板块的名称和链接\n    :rtype: pandas.DataFrame\n    \"\"\"\n    code_name_ths_map = _get_stock_board_concept_name_ths()\n    temp_df = pd.DataFrame.from_dict(code_name_ths_map, orient=\"index\")\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\"name\", \"code\"]\n    temp_df = temp_df[\n        [\n            \"name\",\n            \"code\",\n        ]\n    ]\n    return temp_df\n\n\ndef stock_board_concept_info_ths(symbol: str = \"阿里巴巴概念\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-板块-概念板块-板块简介\n    http://q.10jqka.com.cn/gn/detail/code/301558/\n    :param symbol: 板块简介\n    :type symbol: str\n    :return: 板块简介\n    :rtype: pandas.DataFrame\n    \"\"\"\n    stock_board_ths_map_df = stock_board_concept_name_ths()\n    symbol_code = stock_board_ths_map_df[stock_board_ths_map_df[\"name\"] == symbol][\n        \"code\"\n    ].values[0]\n    url = f\"http://q.10jqka.com.cn/gn/detail/code/{symbol_code}/\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/89.0.4389.90 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    name_list = [\n        item.text.strip()\n        for item in soup.find(name=\"div\", attrs={\"class\": \"board-infos\"}).find_all(\"dt\")\n    ]\n    value_list = [\n        item.text.strip().replace(\"\\n\", \"/\")\n        for item in soup.find(name=\"div\", attrs={\"class\": \"board-infos\"}).find_all(\"dd\")\n    ]\n    temp_df = pd.DataFrame([name_list, value_list]).T\n    temp_df.columns = [\"项目\", \"值\"]\n    return temp_df\n\n\ndef stock_board_concept_index_ths(\n    symbol: str = \"阿里巴巴概念\",\n    start_date: str = \"20200101\",\n    end_date: str = \"20250228\",\n) -> pd.DataFrame:\n    \"\"\"\n    同花顺-板块-概念板块-指数数据\n    https://q.10jqka.com.cn/gn/detail/code/301558/\n    :param start_date: 开始时间\n    :type start_date: str\n    :param end_date: 结束时间\n    :type end_date: str\n    :param symbol: 指数数据\n    :type symbol: str\n    :return: 指数数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n\n    code_map = _get_stock_board_concept_name_ths()\n    symbol_code = code_map[symbol]\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/89.0.4389.90 Safari/537.36\",\n    }\n    url = f\"https://q.10jqka.com.cn/gn/detail/code/{symbol_code}\"\n    r = requests.get(url=url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    inner_code = soup.find(name=\"input\", attrs={\"id\": \"clid\"})[\"value\"]\n    big_df = pd.DataFrame()\n    current_year = datetime.now().year\n    begin_year = int(start_date[:4])\n    tqdm = get_tqdm()\n    for year in tqdm(range(begin_year, current_year + 1), leave=False):\n        url = f\"https://d.10jqka.com.cn/v4/line/bk_{inner_code}/01/{year}.js\"\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/89.0.4389.90 Safari/537.36\",\n            \"Referer\": \"http://q.10jqka.com.cn\",\n            \"Host\": \"d.10jqka.com.cn\",\n            \"Cookie\": f\"v={v_code}\",\n        }\n        r = requests.get(url, headers=headers)\n        data_text = r.text\n\n        try:\n            demjson.decode(data_text[data_text.find(\"{\") : -1])\n        except:  # noqa: E722\n            continue\n        temp_df = demjson.decode(data_text[data_text.find(\"{\") : -1])\n        temp_df = pd.DataFrame(temp_df[\"data\"].split(\";\"))\n        temp_df = temp_df.iloc[:, 0].str.split(\",\", expand=True)\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    if len(big_df.columns) == 11:\n        big_df.columns = [\n            \"日期\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"收盘价\",\n            \"成交量\",\n            \"成交额\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n    else:\n        big_df.columns = [\n            \"日期\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"收盘价\",\n            \"成交量\",\n            \"成交额\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n    big_df = big_df[\n        [\n            \"日期\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"收盘价\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df.index = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\")\n    big_df = big_df[start_date:end_date]\n    big_df.reset_index(drop=True, inplace=True)\n    big_df[\"开盘价\"] = pd.to_numeric(big_df[\"开盘价\"], errors=\"coerce\")\n    big_df[\"最高价\"] = pd.to_numeric(big_df[\"最高价\"], errors=\"coerce\")\n    big_df[\"最低价\"] = pd.to_numeric(big_df[\"最低价\"], errors=\"coerce\")\n    big_df[\"收盘价\"] = pd.to_numeric(big_df[\"收盘价\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    big_df[\"成交额\"] = pd.to_numeric(big_df[\"成交额\"], errors=\"coerce\")\n    return big_df\n\n\n@lru_cache()\ndef __stock_board_concept_summary_ths() -> Dict:\n    \"\"\"\n    同花顺-数据中心-概念板块-概念时间表-辅助函数\n    https://q.10jqka.com.cn/gn/\n    :return: 概念时间表\n    :rtype: dict\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = \"http://q.10jqka.com.cn/gn/index/field/addtime/order/desc/page/1/ajax/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    page_num = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text.split(\"/\")[1]\n    big_dict = dict()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(page_num) + 1), leave=False):\n        url = f\"http://q.10jqka.com.cn/gn/index/field/addtime/order/desc/page/{page}/ajax/1/\"\n        r = requests.get(url, headers=headers)\n        try:\n            soup = BeautifulSoup(r.text, features=\"lxml\")\n            temp_dict = {\n                item.get_text(): item[\"href\"].rsplit(\"/\")[-2]\n                for item in soup.find_all(name=\"a\")\n                if \"detail\" in item[\"href\"]\n            }\n            big_dict.update(temp_dict)\n        except ValueError:\n            break\n    return big_dict\n\n\ndef stock_board_concept_summary_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-概念板块-概念时间表\n    https://q.10jqka.com.cn/gn/\n    :return: 概念时间表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = \"http://q.10jqka.com.cn/gn/index/field/addtime/order/desc/page/1/ajax/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    page_num = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text.split(\"/\")[1]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(page_num) + 1), leave=False):\n        url = f\"http://q.10jqka.com.cn/gn/index/field/addtime/order/desc/page/{page}/ajax/1/\"\n        r = requests.get(url, headers=headers)\n        try:\n            temp_df = pd.read_html(StringIO(r.text))[0]\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n        except ValueError:\n            break\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df[\"成分股数量\"] = pd.to_numeric(big_df[\"成分股数量\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_board_concept_name_ths_df = stock_board_concept_name_ths()\n    print(stock_board_concept_name_ths_df)\n\n    stock_board_concept_info_ths_df = stock_board_concept_info_ths(\n        symbol=\"阿里巴巴概念\"\n    )\n    print(stock_board_concept_info_ths_df)\n\n    stock_board_concept_index_ths_df = stock_board_concept_index_ths(\n        symbol=\"DeepSeek概念\", start_date=\"20200101\", end_date=\"20250321\"\n    )\n    print(stock_board_concept_index_ths_df)\n\n    stock_board_concept_summary_ths_df = stock_board_concept_summary_ths()\n    print(stock_board_concept_summary_ths_df)\n\n    for stock in stock_board_concept_name_ths_df[\"name\"]:\n        print(stock)\n        stock_board_industry_index_ths_df = stock_board_concept_index_ths(symbol=stock)\n        print(stock_board_industry_index_ths_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_board_industry_ths.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/2/28 13:20\nDesc: 同花顺-板块-同花顺行业\nhttps://q.10jqka.com.cn/thshy/\n\"\"\"\n\nfrom datetime import datetime\nfrom functools import lru_cache\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\nimport py_mini_racer\n\nfrom akshare.datasets import get_ths_js\nfrom akshare.utils import demjson\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef _get_file_content_ths(file: str = \"ths.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\n@lru_cache()\ndef _get_stock_board_industry_name_ths() -> dict:\n    \"\"\"\n    获取同花顺行业代码和名称字典\n    :return: 获取同花顺行业代码和名称字典\n    :rtype: dict\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = \"https://q.10jqka.com.cn/thshy/detail/code/881272/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    code_list = [\n        item[\"href\"].split(\"/\")[-2]\n        for item in soup.find(name=\"div\", attrs={\"class\": \"cate_inner\"}).find_all(\"a\")\n    ]\n    name_list = [\n        item.text\n        for item in soup.find(name=\"div\", attrs={\"class\": \"cate_inner\"}).find_all(\"a\")\n    ]\n    name_code_map = dict(zip(name_list, code_list))\n    return name_code_map\n\n\ndef stock_board_industry_name_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺-板块-行业板块-行业\n    http://q.10jqka.com.cn/thshy/\n    :return: 所有行业板块的名称和链接\n    :rtype: pandas.DataFrame\n    \"\"\"\n    code_name_ths_map = _get_stock_board_industry_name_ths()\n    temp_df = pd.DataFrame.from_dict(code_name_ths_map, orient=\"index\")\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\"name\", \"code\"]\n    temp_df = temp_df[\n        [\n            \"name\",\n            \"code\",\n        ]\n    ]\n    return temp_df\n\n\ndef stock_board_industry_info_ths(symbol: str = \"半导体\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-板块-行业板块-板块简介\n    http://q.10jqka.com.cn/gn/detail/code/301558/\n    :param symbol: 板块简介\n    :type symbol: str\n    :return: 板块简介\n    :rtype: pandas.DataFrame\n    \"\"\"\n    stock_board_ths_map_df = stock_board_industry_name_ths()\n    symbol_code = stock_board_ths_map_df[stock_board_ths_map_df[\"name\"] == symbol][\n        \"code\"\n    ].values[0]\n    url = f\"http://q.10jqka.com.cn/thshy/detail/code/{symbol_code}/\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/89.0.4389.90 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    name_list = [\n        item.text.strip()\n        for item in soup.find(name=\"div\", attrs={\"class\": \"board-infos\"}).find_all(\"dt\")\n    ]\n    value_list = [\n        item.text.strip().replace(\"\\n\", \"/\")\n        for item in soup.find(name=\"div\", attrs={\"class\": \"board-infos\"}).find_all(\"dd\")\n    ]\n    temp_df = pd.DataFrame([name_list, value_list]).T\n    temp_df.columns = [\"项目\", \"值\"]\n    return temp_df\n\n\ndef stock_board_industry_index_ths(\n    symbol: str = \"元件\",\n    start_date: str = \"20200101\",\n    end_date: str = \"20240108\",\n) -> pd.DataFrame:\n    \"\"\"\n    同花顺-板块-行业板块-指数数据\n    https://q.10jqka.com.cn/thshy/detail/code/881270/\n    :param start_date: 开始时间\n    :type start_date: str\n    :param end_date: 结束时间\n    :type end_date: str\n    :param symbol: 指数数据\n    :type symbol: str\n    :return: 指数数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    code_map = _get_stock_board_industry_name_ths()\n    symbol_code = code_map[symbol]\n    big_df = pd.DataFrame()\n    current_year = datetime.now().year\n    begin_year = int(start_date[:4])\n    tqdm = get_tqdm()\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    for year in tqdm(range(begin_year, current_year + 1), leave=False):\n        url = f\"https://d.10jqka.com.cn/v4/line/bk_{symbol_code}/01/{year}.js\"\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/89.0.4389.90 Safari/537.36\",\n            \"Referer\": \"http://q.10jqka.com.cn\",\n            \"Host\": \"d.10jqka.com.cn\",\n            \"Cookie\": f\"v={v_code}\",\n        }\n        r = requests.get(url, headers=headers)\n        data_text = r.text\n\n        try:\n            demjson.decode(data_text[data_text.find(\"{\") : -1])\n        except:  # noqa: E722\n            continue\n        temp_df = demjson.decode(data_text[data_text.find(\"{\") : -1])\n        temp_df = pd.DataFrame(temp_df[\"data\"].split(\";\"))\n        temp_df = temp_df.iloc[:, 0].str.split(\",\", expand=True)\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    if len(big_df.columns) == 11:\n        big_df.columns = [\n            \"日期\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"收盘价\",\n            \"成交量\",\n            \"成交额\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n    else:\n        big_df.columns = [\n            \"日期\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"收盘价\",\n            \"成交量\",\n            \"成交额\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n    big_df = big_df[\n        [\n            \"日期\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"收盘价\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df.index = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\")\n    big_df = big_df[start_date:end_date]\n    big_df.reset_index(drop=True, inplace=True)\n    big_df[\"开盘价\"] = pd.to_numeric(big_df[\"开盘价\"], errors=\"coerce\")\n    big_df[\"最高价\"] = pd.to_numeric(big_df[\"最高价\"], errors=\"coerce\")\n    big_df[\"最低价\"] = pd.to_numeric(big_df[\"最低价\"], errors=\"coerce\")\n    big_df[\"收盘价\"] = pd.to_numeric(big_df[\"收盘价\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    big_df[\"成交额\"] = pd.to_numeric(big_df[\"成交额\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_xgsr_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-新股数据-新股上市首日\n    https://data.10jqka.com.cn/ipo/xgsr/\n    :return: 新股上市首日\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n        \"hexin-v\": v_code,\n    }\n    url = \"https://data.10jqka.com.cn/ipo/xgsr/field/SSRQ/order/desc/page/1/ajax/1/free/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    page_num = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text.split(\"/\")[1]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(page_num) + 1), leave=False):\n        url = f\"https://data.10jqka.com.cn/ipo/xgsr/field/SSRQ/order/desc/page/{page}/ajax/1/free/1/\"\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/89.0.4389.90 Safari/537.36\",\n            \"Cookie\": f\"v={v_code}\",\n            \"hexin-v\": v_code,\n        }\n        r = requests.get(url, headers=headers)\n        temp_df = pd.read_html(StringIO(r.text))[0]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.rename(columns={\"发行价(元)\": \"发行价\"}, inplace=True)\n    big_df[\"序号\"] = pd.to_numeric(big_df[\"序号\"], errors=\"coerce\")\n    big_df[\"股票代码\"] = big_df[\"股票代码\"].astype(str).str.zfill(6)\n    big_df[\"发行价\"] = pd.to_numeric(big_df[\"发行价\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"首日开盘价\"] = pd.to_numeric(big_df[\"首日开盘价\"], errors=\"coerce\")\n    big_df[\"首日收盘价\"] = pd.to_numeric(big_df[\"首日收盘价\"], errors=\"coerce\")\n    big_df[\"首日最高价\"] = pd.to_numeric(big_df[\"首日最高价\"], errors=\"coerce\")\n    big_df[\"首日最低价\"] = pd.to_numeric(big_df[\"首日最低价\"], errors=\"coerce\")\n    big_df[\"首日涨跌幅\"] = (\n        pd.to_numeric(big_df[\"首日涨跌幅\"].str.strip(\"%\"), errors=\"coerce\") / 100\n    )\n    big_df[\"上市日期\"] = pd.to_datetime(big_df[\"上市日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_ipo_benefit_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-新股数据-IPO受益股\n    https://data.10jqka.com.cn/ipo/syg/\n    :return: IPO受益股\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n        \"hexin-v\": v_code,\n    }\n    url = \"https://data.10jqka.com.cn/ipo/syg/field/invest/order/desc/page/1/ajax/1/free/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    page_num = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text.split(\"/\")[1]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(page_num) + 1), leave=False):\n        url = f\"https://data.10jqka.com.cn/ipo/syg/field/invest/order/desc/page/{page}/ajax/1/free/1/\"\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/89.0.4389.90 Safari/537.36\",\n            \"Cookie\": f\"v={v_code}\",\n            \"hexin-v\": v_code,\n        }\n        r = requests.get(url, headers=headers)\n        temp_df = pd.read_html(StringIO(r.text))[0]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"收盘价\",\n        \"涨跌幅\",\n        \"市值\",\n        \"参股家数\",\n        \"投资总额\",\n        \"投资占市值比\",\n        \"参股对象\",\n    ]\n    big_df[\"股票代码\"] = big_df[\"股票代码\"].astype(str).str.zfill(6)\n    big_df[\"序号\"] = pd.to_numeric(big_df[\"序号\"], errors=\"coerce\")\n    big_df[\"收盘价\"] = pd.to_numeric(big_df[\"收盘价\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"参股家数\"] = pd.to_numeric(big_df[\"参股家数\"], errors=\"coerce\")\n    big_df[\"投资占市值比\"] = pd.to_numeric(big_df[\"投资占市值比\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_board_industry_summary_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-行业板块-同花顺行业一览表\n    https://q.10jqka.com.cn/thshy/\n    :return: 同花顺行业一览表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = \"http://q.10jqka.com.cn/thshy/index/field/199112/order/desc/page/1/ajax/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    page_num = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text.split(\"/\")[1]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(page_num) + 1), leave=False):\n        url = f\"http://q.10jqka.com.cn/thshy/index/field/199112/order/desc/page/{page}/ajax/1/\"\n        r = requests.get(url, headers=headers)\n        temp_df = pd.read_html(StringIO(r.text))[0]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.columns = [\n        \"序号\",\n        \"板块\",\n        \"涨跌幅\",\n        \"总成交量\",\n        \"总成交额\",\n        \"净流入\",\n        \"上涨家数\",\n        \"下跌家数\",\n        \"均价\",\n        \"领涨股\",\n        \"领涨股-最新价\",\n        \"领涨股-涨跌幅\",\n    ]\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"总成交量\"] = pd.to_numeric(big_df[\"总成交量\"], errors=\"coerce\")\n    big_df[\"总成交额\"] = pd.to_numeric(big_df[\"总成交额\"], errors=\"coerce\")\n    big_df[\"净流入\"] = pd.to_numeric(big_df[\"净流入\"], errors=\"coerce\")\n    big_df[\"上涨家数\"] = pd.to_numeric(big_df[\"上涨家数\"], errors=\"coerce\")\n    big_df[\"下跌家数\"] = pd.to_numeric(big_df[\"下跌家数\"], errors=\"coerce\")\n    big_df[\"均价\"] = pd.to_numeric(big_df[\"均价\"], errors=\"coerce\")\n    big_df[\"领涨股-最新价\"] = pd.to_numeric(big_df[\"领涨股-最新价\"], errors=\"coerce\")\n    big_df[\"领涨股-涨跌幅\"] = pd.to_numeric(big_df[\"领涨股-涨跌幅\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_board_industry_name_ths_df = stock_board_industry_name_ths()\n    print(stock_board_industry_name_ths_df)\n\n    stock_board_industry_info_ths_df = stock_board_industry_info_ths(symbol=\"橡胶制品\")\n    print(stock_board_industry_info_ths_df)\n\n    stock_board_industry_index_ths_df = stock_board_industry_index_ths(\n        symbol=\"消费电子\", start_date=\"20240101\", end_date=\"20240724\"\n    )\n    print(stock_board_industry_index_ths_df)\n\n    stock_board_industry_summary_ths_df = stock_board_industry_summary_ths()\n    print(stock_board_industry_summary_ths_df)\n\n    for stock in stock_board_industry_name_ths_df[\"name\"]:\n        print(stock)\n        stock_board_industry_index_ths_df = stock_board_industry_index_ths(symbol=stock)\n        print(stock_board_industry_index_ths_df)\n\n    stock_xgsr_ths_df = stock_xgsr_ths()\n    print(stock_xgsr_ths_df)\n\n    stock_ipo_benefit_ths_df = stock_ipo_benefit_ths()\n    print(stock_ipo_benefit_ths_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_buffett_index_lg.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/9/20 18:05\nDesc: 乐估乐股-底部研究-巴菲特指标\nhttps://legulegu.com/stockdata/marketcap-gdp\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.stock_feature.stock_a_indicator import get_token_lg, get_cookie_csrf\n\n\ndef stock_buffett_index_lg() -> pd.DataFrame:\n    \"\"\"\n    乐估乐股-底部研究-巴菲特指标\n    https://legulegu.com/stockdata/marketcap-gdp\n    :return: 巴菲特指标\n    :rtype: pandas.DataFrame\n    \"\"\"\n    token = get_token_lg()\n    url = \"https://legulegu.com/api/stockdata/marketcap-gdp/get-marketcap-gdp\"\n    params = {\"token\": token}\n    r = requests.get(\n        url,\n        params=params,\n        **get_cookie_csrf(url=\"https://legulegu.com/stockdata/marketcap-gdp\"),\n    )\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.rename(\n        columns={\n            \"marketCap\": \"总市值\",\n            \"gdp\": \"GDP\",\n            \"close\": \"收盘价\",\n            \"date\": \"日期\",\n            \"quantileInAllHistory\": \"总历史分位数\",\n            \"quantileInRecent10Years\": \"近十年分位数\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"收盘价\",\n            \"总市值\",\n            \"GDP\",\n            \"近十年分位数\",\n            \"总历史分位数\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], utc=True).dt.date\n    temp_df[\"收盘价\"] = pd.to_numeric(temp_df[\"收盘价\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"GDP\"] = pd.to_numeric(temp_df[\"GDP\"], errors=\"coerce\")\n    temp_df[\"近十年分位数\"] = pd.to_numeric(temp_df[\"近十年分位数\"], errors=\"coerce\")\n    temp_df[\"总历史分位数\"] = pd.to_numeric(temp_df[\"总历史分位数\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_buffett_index_lg_df = stock_buffett_index_lg()\n    print(stock_buffett_index_lg_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_classify_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/7/13 16:16\nDesc: 新浪财经-股票-行业分类\nhttp://vip.stock.finance.sina.com.cn/mkt/\n\"\"\"\n\nimport math\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\nfrom tqdm import tqdm\n\n\ndef stock_classify_board() -> dict:\n    \"\"\"\n    http://vip.stock.finance.sina.com.cn/mkt/\n    :return: 股票分类字典\n    :rtype: dict\n    \"\"\"\n    url = \"http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodes\"\n    r = requests.get(url)\n    data_json = r.json()\n    big_dict = {}\n    class_name_list = [\n        BeautifulSoup(item[0], \"lxml\").find(\"font\").text\n        if \"font\" in item[0]\n        else item[0]\n        for item in data_json[1][0][1]\n    ]  # 沪深股市\n    for num, class_name in enumerate(class_name_list):\n        temp_df = pd.DataFrame([item for item in data_json[1][0][1][num][1:][0]])\n        if temp_df.shape[1] == 5:\n            temp_df.columns = [\"name\", \"_\", \"code\", \"_\", \"_\"]\n            temp_df = temp_df[[\"name\", \"code\"]]\n        if temp_df.shape[1] == 4:\n            temp_df.columns = [\"name\", \"_\", \"code\", \"_\"]\n            temp_df = temp_df[[\"name\", \"code\"]]\n        if temp_df.shape[1] == 3:\n            temp_df.columns = [\"name\", \"_\", \"code\"]\n            temp_df = temp_df[[\"name\", \"code\"]]\n        big_dict.update({class_name: temp_df})\n    return big_dict\n\n\ndef stock_classify_sina(symbol: str = \"热门概念\") -> pd.DataFrame:\n    \"\"\"\n    按 symbol 分类后的股票\n    http://vip.stock.finance.sina.com.cn/mkt/\n    :param symbol: choice of {'申万行业', '申万二级', '热门概念', '地域板块'}\n    :type symbol: str\n    :return: 分类后的股票\n    :rtype: pandas.DataFrame\n    \"\"\"\n    stock_classify_board_dict = stock_classify_board()\n    data_df = pd.DataFrame()\n    for num in tqdm(range(len(stock_classify_board_dict[symbol][\"code\"])), leave=False):\n        url = \"http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCount\"\n        params = {\"node\": stock_classify_board_dict[symbol][\"code\"][num]}\n        r = requests.get(url, params=params)\n        page_num = math.ceil(int(r.json()) / 80)\n        url = \"http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData\"\n        big_df = pd.DataFrame()\n        for page in range(1, page_num + 1):\n            params = {\n                \"page\": page,\n                \"num\": \"80\",\n                \"sort\": \"symbol\",\n                \"asc\": \"1\",\n                \"node\": stock_classify_board_dict[symbol][\"code\"][num],\n                \"symbol\": \"\",\n                \"_s_r_a\": \"init\",\n            }\n            r = requests.get(url, params=params)\n            data_json = r.json()\n            temp_df = pd.DataFrame(data_json)\n            big_df = pd.concat([big_df, temp_df], ignore_index=True)\n            big_df[\"class\"] = stock_classify_board_dict[symbol][\"name\"][num]\n        data_df = pd.concat([data_df, big_df], ignore_index=True)\n    return data_df\n\n\nif __name__ == \"__main__\":\n    stock_classify_sina_df = stock_classify_sina(symbol=\"热门概念\")\n    print(stock_classify_sina_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_comment_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/4 18:20\nDesc: 东方财富网-数据中心-特色数据-千股千评\nhttps://data.eastmoney.com/stockcomment/\n\"\"\"\n\nimport json\nimport re\nimport time\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_comment_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-千股千评\n    https://data.eastmoney.com/stockcomment/\n    :return: 千股千评数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"SECURITY_CODE\",\n        \"sortTypes\": \"1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_DMSK_TS_STOCKNEW\",\n        \"quoteColumns\": \"f2~01~SECURITY_CODE~CLOSE_PRICE,f8~01~SECURITY_CODE~TURNOVERRATE,\"\n        \"f3~01~SECURITY_CODE~CHANGE_RATE,f9~01~SECURITY_CODE~PE_DYNAMIC\",\n        \"columns\": \"ALL\",\n        \"filter\": \"\",\n        \"token\": \"894050c76af8597a853f5b408b759f5d\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"-\",\n        \"代码\",\n        \"-\",\n        \"交易日\",\n        \"名称\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"-\",\n        \"换手率\",\n        \"主力成本\",\n        \"市盈率\",\n        \"-\",\n        \"-\",\n        \"机构参与度\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"综合得分\",\n        \"上升\",\n        \"目前排名\",\n        \"关注指数\",\n        \"-\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"换手率\",\n            \"市盈率\",\n            \"主力成本\",\n            \"机构参与度\",\n            \"综合得分\",\n            \"上升\",\n            \"目前排名\",\n            \"关注指数\",\n            \"交易日\",\n        ]\n    ]\n\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"换手率\"] = pd.to_numeric(big_df[\"换手率\"], errors=\"coerce\")\n    big_df[\"市盈率\"] = pd.to_numeric(big_df[\"市盈率\"], errors=\"coerce\")\n    big_df[\"主力成本\"] = pd.to_numeric(big_df[\"主力成本\"], errors=\"coerce\")\n    big_df[\"机构参与度\"] = pd.to_numeric(big_df[\"机构参与度\"], errors=\"coerce\")\n    big_df[\"综合得分\"] = pd.to_numeric(big_df[\"综合得分\"], errors=\"coerce\")\n    big_df[\"上升\"] = pd.to_numeric(big_df[\"上升\"], errors=\"coerce\")\n    big_df[\"目前排名\"] = pd.to_numeric(big_df[\"目前排名\"], errors=\"coerce\")\n    big_df[\"关注指数\"] = pd.to_numeric(big_df[\"关注指数\"], errors=\"coerce\")\n    big_df[\"交易日\"] = pd.to_datetime(big_df[\"交易日\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_comment_detail_zlkp_jgcyd_em(symbol: str = \"600000\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-千股千评-主力控盘-机构参与度\n    https://data.eastmoney.com/stockcomment/stock/600000.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 主力控盘-机构参与度\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_DMSK_TS_STOCKEVALUATE\",\n        \"filter\": f'(SECURITY_CODE=\"{symbol}\")',\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"sortColumns\": \"TRADE_DATE\",\n        \"sortTypes\": \"-1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df = temp_df[[\"TRADE_DATE\", \"ORG_PARTICIPATE\"]]\n    temp_df.columns = [\"交易日\", \"机构参与度\"]\n    temp_df[\"交易日\"] = pd.to_datetime(temp_df[\"交易日\"], errors=\"coerce\").dt.date\n    temp_df.sort_values([\"交易日\"], inplace=True)\n    temp_df.reset_index(inplace=True, drop=True)\n    temp_df[\"机构参与度\"] = pd.to_numeric(temp_df[\"机构参与度\"], errors=\"coerce\") * 100\n    return temp_df\n\n\ndef stock_comment_detail_zhpj_lspf_em(symbol: str = \"600000\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-千股千评-综合评价-历史评分\n    https://data.eastmoney.com/stockcomment/stock/600000.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 综合评价-历史评分\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"filter\": f'(SECURITY_CODE=\"{symbol}\")',\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_STOCK_HISTORYMARK\",\n        \"sortColumns\": \"DIAGNOSE_DATE\",\n        \"sortTypes\": \"1\",\n    }\n    r = requests.get(url=url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.rename(\n        columns={\n            \"TOTAL_SCORE\": \"评分\",\n            \"DIAGNOSE_DATE\": \"交易日\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[[\"交易日\", \"评分\"]]\n    temp_df[\"交易日\"] = pd.to_datetime(temp_df[\"交易日\"], errors=\"coerce\").dt.date\n    temp_df.sort_values(by=[\"交易日\"], inplace=True)\n    temp_df.reset_index(inplace=True, drop=True)\n    temp_df[\"评分\"] = pd.to_numeric(temp_df[\"评分\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_comment_detail_scrd_focus_em(symbol: str = \"600000\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-千股千评-市场热度-用户关注指数\n    https://data.eastmoney.com/stockcomment/stock/600000.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 市场热度-用户关注指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"filter\": f'(SECURITY_CODE=\"{symbol}\")',\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_STOCK_MARKETFOCUS\",\n        \"sortColumns\": \"TRADE_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"30\",\n    }\n    r = requests.get(url=url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.rename(\n        columns={\n            \"MARKET_FOCUS\": \"用户关注指数\",\n            \"TRADE_DATE\": \"交易日\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[[\"交易日\", \"用户关注指数\"]]\n    temp_df[\"交易日\"] = pd.to_datetime(temp_df[\"交易日\"], errors=\"coerce\").dt.date\n    temp_df.sort_values(by=[\"交易日\"], inplace=True)\n    temp_df.reset_index(inplace=True, drop=True)\n    temp_df[\"用户关注指数\"] = pd.to_numeric(temp_df[\"用户关注指数\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_comment_detail_scrd_desire_em(\n    symbol: str = \"600000\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-千股千评-市场热度-市场参与意愿\n    https://data.eastmoney.com/stockcomment/stock/600000.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 市场热度-市场参与意愿\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"callback\": f\"jQuery11230899775623921407_{int(time.time() * 1000)}\",\n        \"filter\": f'(SECURITY_CODE=\"{symbol}\")',\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"reportName\": \"RPT_STOCK_PARTICIPATION\",\n        \"sortColumns\": \"TRADE_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"30\",\n        \"_\": int(time.time() * 1000),\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/91.0.4472.124 Safari/537.36\",\n        \"Referer\": \"https://data.eastmoney.com/\",\n        \"Accept\": \"*/*\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    jsonp_data = r.text\n    json_str = re.search(r\"\\((.*)\\)\", jsonp_data).group(1)\n    data_json = json.loads(json_str)\n    data_list = data_json[\"result\"][\"data\"]\n    temp_df = pd.DataFrame(data_list)\n    temp_df[\"TRADE_DATE\"] = pd.to_datetime(\n        temp_df[\"TRADE_DATE\"], errors=\"coerce\"\n    ).dt.date\n    column_mapping = {\n        \"SECURITY_INNER_CODE\": \"内部代码\",\n        \"SECURITY_CODE\": \"股票代码\",\n        \"TRADE_DATE\": \"交易日期\",\n        \"PARTICIPATION_WISH\": \"参与意愿\",\n        \"PARTICIPATION_WISH_5DAYS\": \"5日平均参与意愿\",\n        \"PARTICIPATION_WISH_CHANGE\": \"参与意愿变化\",\n        \"PARTICIPATION_WISH_5DAYSCHANGE\": \"5日平均变化\",\n    }\n    temp_df = temp_df.rename(columns=column_mapping)\n    column_order = [\n        \"交易日期\",\n        \"股票代码\",\n        \"内部代码\",\n        \"参与意愿\",\n        \"5日平均参与意愿\",\n        \"参与意愿变化\",\n        \"5日平均变化\",\n    ]\n    temp_df = temp_df[column_order]\n    del temp_df[\"内部代码\"]\n    temp_df.sort_values(by=[\"交易日期\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_comment_em_df = stock_comment_em()\n    print(stock_comment_em_df)\n\n    stock_comment_detail_zlkp_jgcyd_em_df = stock_comment_detail_zlkp_jgcyd_em(\n        symbol=\"600000\"\n    )\n    print(stock_comment_detail_zlkp_jgcyd_em_df)\n\n    stock_comment_detail_zhpj_lspf_em_df = stock_comment_detail_zhpj_lspf_em(\n        symbol=\"600000\"\n    )\n    print(stock_comment_detail_zhpj_lspf_em_df)\n\n    stock_comment_detail_scrd_focus_em_df = stock_comment_detail_scrd_focus_em(\n        symbol=\"600000\"\n    )\n    print(stock_comment_detail_scrd_focus_em_df)\n\n    stock_comment_detail_scrd_desire_em_df = stock_comment_detail_scrd_desire_em(\n        symbol=\"600000\"\n    )\n    print(stock_comment_detail_scrd_desire_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_concept_futu.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/7/16 22:00\nDesc: 富途牛牛-主题投资-概念板块-成分股\nhttps://www.futunn.com/quote/sparks-us\n\"\"\"\n\nimport json\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef _stock_concept_cons_futu(symbol: str = \"巴菲特持仓\") -> pd.DataFrame:\n    \"\"\"\n    富途牛牛-主题投资-概念板块-成分股\n    https://www.futunn.com/quote/sparks-us\n    :param symbol: 板块名称; choice of {\"巴菲特持仓\", \"佩洛西持仓\"}\n    :type symbol: str\n    :return: 概念板块\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"巴菲特持仓\": \"BK2999\",\n        \"佩洛西持仓\": \"BK20883\",\n    }\n    url = f\"https://www.futunn.com/stock/{symbol_map[symbol]}\"\n    # 定义查询参数\n    params = {\"global_content\": json.dumps({\"promote_id\": 13766, \"sub_promote_id\": 24})}\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    temp_code_name = [\n        item.find_all(\"div\", attrs={\"class\": \"fix-left\"})\n        for item in soup.find(name=\"div\", attrs={\"class\": \"content-main\"}).find_all(\"a\")\n    ]\n    temp_value_list = [\n        item.find_all(\"div\", attrs={\"class\": \"middle\"})\n        for item in soup.find(name=\"div\", attrs={\"class\": \"content-main\"}).find_all(\"a\")\n    ]\n    code_name_list = [item[0].find_all(\"span\") for item in temp_code_name]\n\n    quant_list = [item[0].find_all(\"span\") for item in temp_value_list]\n    temp_df = pd.DataFrame(\n        [\n            [item[0][\"title\"] for item in code_name_list],\n            [item[1][\"title\"] for item in code_name_list],\n            [item[0][\"title\"] for item in quant_list],\n            [item[1][\"title\"] for item in quant_list],\n            [item[2][\"title\"] for item in quant_list],\n            [item[3][\"title\"] for item in quant_list],\n            [item[4][\"title\"] for item in quant_list],\n            [item[5][\"title\"] for item in quant_list],\n            [item[6][\"title\"] for item in quant_list],\n            [item[7][\"title\"] for item in quant_list],\n            [item[8][\"title\"] for item in quant_list],\n            [item[9][\"title\"] for item in quant_list],\n            [item[10][\"title\"] for item in quant_list],\n            [item[11][\"title\"] for item in quant_list],\n            [item[12][\"title\"] for item in quant_list],\n            [item[13][\"title\"] for item in quant_list],\n            [item[14][\"title\"] for item in quant_list],\n        ]\n    ).T\n    temp_df.columns = [\n        \"代码\",\n        \"股票名称\",\n        \"最新价\",\n        \"涨跌额\",\n        \"涨跌幅\",\n        \"成交量\",\n        \"成交额\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"代码\",\n            \"股票名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    return temp_df\n\n\ndef stock_concept_cons_futu(symbol: str = \"特朗普概念股\") -> pd.DataFrame:\n    \"\"\"\n    富途牛牛-主题投资-概念板块-成分股\n    https://www.futunn.com/quote/sparks-us\n    :param symbol: 板块名称; choice of {\"巴菲特持仓\", \"佩洛西持仓\", \"特朗普概念股\"}\n    :type symbol: str\n    :return: 概念板块\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if symbol == \"特朗普概念股\":\n        url = \"https://www.futunn.com/quote-api/quote-v2/get-plate-stock\"\n        params = {\n            \"marketType\": \"2\",\n            \"plateId\": \"10102960\",\n            \"page\": \"0\",\n            \"pageSize\": \"30\",\n        }\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n            \"(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36\",\n            \"Quote-Token\": \"7f74cd2a5e\",\n        }\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        total_page = data_json[\"data\"][\"pagination\"][\"pageCount\"]\n        big_df = pd.DataFrame()\n        for page in range(0, total_page):\n            params.update(\n                {\n                    \"page\": page,\n                }\n            )\n            if page == 1:\n                headers.update({\"Quote-Token\": \"a3043d6fed\"})\n            r = requests.get(url, params=params, headers=headers)\n            data_json = r.json()\n            temp_df = pd.DataFrame(data_json[\"data\"][\"list\"])\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n        big_df.rename(\n            columns={\n                \"stockCode\": \"代码\",\n                \"name\": \"股票名称\",\n                \"price\": \"最新价\",\n                \"change\": \"涨跌额\",\n                \"changeRatio\": \"涨跌幅\",\n                \"tradeVolumn\": \"成交量\",\n                \"tradeTrunover\": \"成交额\",\n            },\n            inplace=True,\n        )\n        big_df = big_df[\n            [\n                \"代码\",\n                \"股票名称\",\n                \"最新价\",\n                \"涨跌额\",\n                \"涨跌幅\",\n                \"成交量\",\n                \"成交额\",\n            ]\n        ]\n        big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n        big_df[\"涨跌额\"] = pd.to_numeric(big_df[\"涨跌额\"], errors=\"coerce\")\n        return big_df\n    else:\n        temp_df = _stock_concept_cons_futu(symbol)\n        temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n        temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n        return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_concept_cons_futu_df = stock_concept_cons_futu(symbol=\"特朗普概念股\")\n    print(stock_concept_cons_futu_df)\n\n    stock_concept_cons_futu_df = stock_concept_cons_futu(symbol=\"巴菲特持仓\")\n    print(stock_concept_cons_futu_df)\n\n    stock_concept_cons_futu_df = stock_concept_cons_futu(symbol=\"佩洛西持仓\")\n    print(stock_concept_cons_futu_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_congestion_lg.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/4/7 15:05\nDesc: 乐咕乐股-大盘拥挤度\nhttps://legulegu.com/stockdata/ashares-congestion\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.stock_feature.stock_a_indicator import get_token_lg, get_cookie_csrf\n\n\ndef stock_a_congestion_lg() -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-大盘拥挤度\n    https://legulegu.com/stockdata/ashares-congestion\n    :return: 大盘拥挤度\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://legulegu.com/api/stockdata/ashares-congestion\"\n    token = get_token_lg()\n    params = {\"token\": token}\n    r = requests.get(\n        url,\n        params=params,\n        **get_cookie_csrf(url=\"https://legulegu.com/stockdata/ashares-congestion\"),\n    )\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"items\"])\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n    temp_df = temp_df[\n        [\n            \"date\",\n            \"close\",\n            \"congestion\",\n        ]\n    ]\n    temp_df[\"close\"] = pd.to_numeric(temp_df[\"close\"], errors=\"coerce\")\n    temp_df[\"congestion\"] = pd.to_numeric(temp_df[\"congestion\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_a_congestion_lg_df = stock_a_congestion_lg()\n    print(stock_a_congestion_lg_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_cyq_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/11/4 18:00\nDesc: 东方财富网-概念板-行情中心-日K-筹码分布\nhttps://quote.eastmoney.com/concept/sz000001.html\n\"\"\"\n\nfrom datetime import datetime\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\n\n\ndef stock_cyq_em(symbol: str = \"000001\", adjust: str = \"\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-概念板-行情中心-日K-筹码分布\n    https://quote.eastmoney.com/concept/sz000001.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :param adjust: choice of {\"qfq\": \"前复权\", \"hfq\": \"后复权\", \"\": \"不复权\"}\n    :type adjust: str\n    :return: 筹码分布\n    :rtype: pandas.DataFrame\n    \"\"\"\n    html_str = \"\"\"\n    // @ts-nocheck\n\n    /**\n     * 计算分布及相关指标\n     * @param {number} index 当前选中的K线的索引\n     * @return {{x: Array.<number>, y: Array.<number>}}\n     */\n    /**\n    this.range = 120;\n    */\n    function CYQCalculator(index, klinedata) {\n        var maxprice = 0;\n        var minprice = 0;\n        var factor = 150;\n        var start = this.range ? Math.max(0, index - this.range + 1) : 0;\n        /**\n         * K图数据[time,open,close,high,low,volume,amount,amplitude,turnoverRate]\n         */\n        var kdata = klinedata.slice(start, Math.max(1, index + 1));\n        if (kdata.length === 0) throw 'invaild index';\n        for (var i = 0; i < kdata.length; i++) {\n            var elements = kdata[i];\n            maxprice = !maxprice ? elements.high : Math.max(maxprice, elements.high);\n            minprice = !minprice ? elements.low : Math.min(minprice, elements.low);\n        }\n\n        // 精度不小于0.01 产品逻辑\n        var accuracy = Math.max(0.01, (maxprice - minprice) / (factor - 1));\n        /**\n         * 值域\n         * @type {Array.<number>}\n         */\n        var yrange = [];\n        for (var i = 0; i < factor; i++) {\n            yrange.push((minprice + accuracy * i).toFixed(2) / 1);\n        }\n        /**\n         * 横轴数据\n         */\n        var xdata = createNumberArray(factor);\n\n        for (var i = 0; i < kdata.length; i++) {\n            var eles = kdata[i];\n\n            var open = eles.open,\n                close = eles.close,\n                high = eles.high,\n                low = eles.low,\n                avg = (open + close + high + low) / 4,\n                turnoverRate = Math.min(1, eles.hsl / 100 || 0);\n\n            var H = Math.floor((high - minprice) / accuracy),\n                L = Math.ceil((low - minprice) / accuracy),\n                // G点坐标, 一字板时, X为进度因子\n                GPoint = [high == low ? factor - 1 : 2 / (high - low), Math.floor((avg - minprice) / accuracy)];\n            // 衰减\n            for (var n = 0; n < xdata.length; n++) {\n                xdata[n] *= (1 - turnoverRate);\n            }\n\n            if (high == low) {\n                // 一字板时，画矩形面积是三角形的2倍\n                xdata[GPoint[1]] += GPoint[0] * turnoverRate / 2;\n            } else {\n                for (var j = L; j <= H; j++) {\n                    var curprice = minprice + accuracy * j;\n                    if (curprice <= avg) {\n                        // 上半三角叠加分布分布\n                        if (Math.abs(avg - low) < 1e-8) {\n                            xdata[j] += GPoint[0] * turnoverRate;\n                        } else {\n                            xdata[j] += (curprice - low) / (avg - low) * GPoint[0] * turnoverRate;\n                        }\n                    } else {\n                        // 下半三角叠加分布分布\n                        if (Math.abs(high - avg) < 1e-8) {\n                            xdata[j] += GPoint[0] * turnoverRate;\n                        } else {\n                            xdata[j] += (high - curprice) / (high - avg) * GPoint[0] * turnoverRate;\n                        }\n                    }\n                }\n            }\n\n        }\n\n\n        var currentprice = klinedata[index].close;\n        var totalChips = 0;\n        for (var i = 0; i < factor; i++) {\n            var x = xdata[i].toPrecision(12) / 1;\n            //if (x < 0) xdata[i] = 0;\n            totalChips += x;\n        }\n        var result = new CYQData();\n        result.x = xdata;\n        result.y = yrange;\n        result.benefitPart = result.getBenefitPart(currentprice);\n        result.avgCost = getCostByChip(totalChips * 0.5).toFixed(2);\n        result.percentChips = {\n            '90': result.computePercentChips(0.9),\n            '70': result.computePercentChips(0.7)\n        };\n        return result;\n\n        /**\n         * 获取指定筹码处的成本\n         * @param {number} chip 堆叠筹码\n         */\n        function getCostByChip(chip) {\n            var result = 0,\n                sum = 0;\n            for (var i = 0; i < factor; i++) {\n                var x = xdata[i].toPrecision(12) / 1;\n                if (sum + x > chip) {\n                    result = minprice + i * accuracy;\n                    break;\n                }\n                sum += x;\n            }\n            return result;\n        }\n\n        /**\n         * 筹码分布数据\n         */\n        function CYQData() {\n            /**\n             * 筹码堆叠\n             * @type {Array.<number>}\n             */\n            this.x = arguments[0];\n            /**\n             * 价格分布\n             * @type {Array.<number>}\n             */\n            this.y = arguments[1];\n            /**\n             * 获利比例\n             * @type {number}\n             */\n            this.benefitPart = arguments[2];\n            /**\n             * 平均成本\n             * @type {number}\n             */\n            this.avgCost = arguments[3];\n            /**\n             * 百分比筹码\n             * @type {{Object.<string, {{priceRange: number[], concentration: number}}>}}\n             */\n            this.percentChips = arguments[4];\n            /**\n             * 计算指定百分比的筹码\n             * @param {number} percent 百分比大于0，小于1\n             */\n            this.computePercentChips = function (percent) {\n                if (percent > 1 || percent < 0) throw 'argument \"percent\" out of range';\n                var ps = [(1 - percent) / 2, (1 + percent) / 2];\n                var pr = [getCostByChip(totalChips * ps[0]), getCostByChip(totalChips * ps[1])];\n                return {\n                    priceRange: [pr[0].toFixed(2), pr[1].toFixed(2)],\n                    concentration: pr[0] + pr[1] === 0 ? 0 : (pr[1] - pr[0]) / (pr[0] + pr[1])\n                };\n            };\n            /**\n             * 获取指定价格的获利比例\n             * @param {number} price 价格\n             */\n            this.getBenefitPart = function (price) {\n                var below = 0;\n                for (var i = 0; i < factor; i++) {\n                    var x = xdata[i].toPrecision(12) / 1;\n                    if (price >= minprice + i * accuracy) {\n                        below += x;\n                    }\n                }\n                return totalChips == 0 ? 0 : below / totalChips;\n            };\n        }\n    }\n\n\n    function createNumberArray(count) {\n        var array = [];\n        for (var i = 0; i < count; i++) {\n            array.push(0);\n        }\n        return array;\n    }\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_code.eval(html_str)\n    adjust_dict = {\"qfq\": \"1\", \"hfq\": \"2\", \"\": \"0\"}\n    market_code = 1 if symbol.startswith(\"6\") else 0\n    url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n    params = {\n        \"secid\": f\"{market_code}.{symbol}\",\n        \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n        \"klt\": \"101\",\n        \"fqt\": adjust_dict[adjust],\n        \"end\": datetime.now().date().strftime(\"%Y%m%d\"),\n        \"lmt\": \"210\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df.columns = [\n        \"date\",\n        \"open\",\n        \"close\",\n        \"high\",\n        \"low\",\n        \"volume\",\n        \"volume_money\",\n        \"zf\",\n        \"zdf\",\n        \"zde\",\n        \"hsl\",\n    ]\n    for item in temp_df.columns[1:]:\n        temp_df[item] = pd.to_numeric(temp_df[item])\n    temp_df[\"index\"] = range(0, len(temp_df))\n    records = temp_df.to_dict(orient=\"records\")\n    date_list = []\n    benefit_part = []\n    avg_cost = []\n    pct_70_low = []\n    pct_70_high = []\n    pct_90_low = []\n    pct_90_high = []\n    pct_70_con = []\n    pct_90_con = []\n    for i in range(0, len(records)):\n        mcode = js_code.call(\"CYQCalculator\", i, records)\n        date_list.append(records[i][\"date\"])\n        benefit_part.append(mcode[\"benefitPart\"])\n        avg_cost.append(mcode[\"avgCost\"])\n        pct_70_low.append(mcode[\"percentChips\"][\"70\"][\"priceRange\"][0])\n        pct_70_high.append(mcode[\"percentChips\"][\"70\"][\"priceRange\"][1])\n        pct_90_low.append(mcode[\"percentChips\"][\"90\"][\"priceRange\"][0])\n        pct_90_high.append(mcode[\"percentChips\"][\"90\"][\"priceRange\"][1])\n        pct_70_con.append(mcode[\"percentChips\"][\"70\"][\"concentration\"])\n        pct_90_con.append(mcode[\"percentChips\"][\"90\"][\"concentration\"])\n    temp_df = pd.DataFrame(\n        [\n            date_list,\n            benefit_part,\n            avg_cost,\n            pct_90_low,\n            pct_90_high,\n            pct_90_con,\n            pct_70_low,\n            pct_70_high,\n            pct_70_con,\n        ]\n    ).T\n    temp_df.columns = [\n        \"日期\",\n        \"获利比例\",\n        \"平均成本\",\n        \"90成本-低\",\n        \"90成本-高\",\n        \"90集中度\",\n        \"70成本-低\",\n        \"70成本-高\",\n        \"70集中度\",\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"获利比例\"] = pd.to_numeric(temp_df[\"获利比例\"], errors=\"coerce\")\n    temp_df[\"平均成本\"] = pd.to_numeric(temp_df[\"平均成本\"], errors=\"coerce\")\n    temp_df[\"90成本-低\"] = pd.to_numeric(temp_df[\"90成本-低\"], errors=\"coerce\")\n    temp_df[\"90成本-高\"] = pd.to_numeric(temp_df[\"90成本-高\"], errors=\"coerce\")\n    temp_df[\"90集中度\"] = pd.to_numeric(temp_df[\"90集中度\"], errors=\"coerce\")\n    temp_df[\"70成本-低\"] = pd.to_numeric(temp_df[\"70成本-低\"], errors=\"coerce\")\n    temp_df[\"70成本-高\"] = pd.to_numeric(temp_df[\"70成本-高\"], errors=\"coerce\")\n    temp_df[\"70集中度\"] = pd.to_numeric(temp_df[\"70集中度\"], errors=\"coerce\")\n    temp_df = temp_df.iloc[-90:, :].copy()\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_cyq_em_df = stock_cyq_em(symbol=\"000001\", adjust=\"\")\n    print(stock_cyq_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_disclosure_cninfo.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/5/1 20:00\nDesc: 巨潮资讯-首页-公告查询-信息披露\nhttp://www.cninfo.com.cn/new/commonUrl/pageOfSearch?url=disclosure/list/search\n\"\"\"\n\nimport math\nfrom functools import lru_cache\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\n@lru_cache()\ndef __get_category_dict() -> dict:\n    \"\"\"\n    获取巨潮资讯-首页-公告查询-信息披露-类别字典\n    http://www.cninfo.com.cn/new/js/app/disclosure/notice/history-notice.js?v=20231124083101\n    :return: dict\n    :rtype: dict\n    \"\"\"\n    big_dict = {\n        \"年报\": \"category_ndbg_szsh\",\n        \"半年报\": \"category_bndbg_szsh\",\n        \"一季报\": \"category_yjdbg_szsh\",\n        \"三季报\": \"category_sjdbg_szsh\",\n        \"业绩预告\": \"category_yjygjxz_szsh\",\n        \"权益分派\": \"category_qyfpxzcs_szsh\",\n        \"董事会\": \"category_dshgg_szsh\",\n        \"监事会\": \"category_jshgg_szsh\",\n        \"股东大会\": \"category_gddh_szsh\",\n        \"日常经营\": \"category_rcjy_szsh\",\n        \"公司治理\": \"category_gszl_szsh\",\n        \"中介报告\": \"category_zj_szsh\",\n        \"首发\": \"category_sf_szsh\",\n        \"增发\": \"category_zf_szsh\",\n        \"股权激励\": \"category_gqjl_szsh\",\n        \"配股\": \"category_pg_szsh\",\n        \"解禁\": \"category_jj_szsh\",\n        \"公司债\": \"category_gszq_szsh\",\n        \"可转债\": \"category_kzzq_szsh\",\n        \"其他融资\": \"category_qtrz_szsh\",\n        \"股权变动\": \"category_gqbd_szsh\",\n        \"补充更正\": \"category_bcgz_szsh\",\n        \"澄清致歉\": \"category_cqdq_szsh\",\n        \"风险提示\": \"category_fxts_szsh\",\n        \"特别处理和退市\": \"category_tbclts_szsh\",\n        \"退市整理期\": \"category_tszlq_szsh\",\n    }\n    return big_dict\n\n\n@lru_cache()\ndef __get_stock_json(symbol: str = \"沪深京\") -> dict:\n    \"\"\"\n    获取巨潮资讯-首页-公告查询-信息披露-股票代码字典\n    :param symbol: choice of {\"沪深京\", \"港股\", \"三板\", \"基金\", \"债券\"}\n    :type symbol: str\n    :return: 股票代码字典\n    :rtype: dict\n    \"\"\"\n    url = \"http://www.cninfo.com.cn/new/data/szse_stock.json\"\n    if symbol == \"沪深京\":\n        url = \"http://www.cninfo.com.cn/new/data/szse_stock.json\"\n    elif symbol == \"港股\":\n        url = \"http://www.cninfo.com.cn/new/data/hke_stock.json\"\n    elif symbol == \"三板\":\n        url = \"http://www.cninfo.com.cn/new/data/gfzr_stock.json\"\n    elif symbol == \"基金\":\n        url = \"http://www.cninfo.com.cn/new/data/fund_stock.json\"\n    elif symbol == \"债券\":\n        url = \"http://www.cninfo.com.cn/new/data/bond_stock.json\"\n    r = requests.get(url)\n    text_json = r.json()\n    temp_df = pd.DataFrame([item for item in text_json[\"stockList\"]])\n    return dict(zip(temp_df[\"code\"], temp_df[\"orgId\"]))\n\n\ndef stock_zh_a_disclosure_report_cninfo(\n    symbol: str = \"000001\",\n    market: str = \"沪深京\",\n    keyword: str = \"\",\n    category: str = \"\",\n    start_date: str = \"20230618\",\n    end_date: str = \"20231219\",\n) -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-首页-公告查询-信息披露公告\n    http://www.cninfo.com.cn/new/commonUrl/pageOfSearch?url=disclosure/list/search\n    :param symbol: 股票代码\n    :type symbol: str\n    :param market: choice of {\"沪深京\", \"港股\", \"三板\", \"基金\", \"债券\", \"监管\", \"预披露\"}\n    :type market: str\n    :param keyword: 关键词\n    :type keyword: str\n    :param category: choice of {'年报', '半年报', '一季报', '三季报', '业绩预告', '权益分派',\n    '董事会', '监事会', '股东大会', '日常经营', '公司治理', '中介报告',\n     '首发', '增发', '股权激励', '配股', '解禁', '公司债', '可转债', '其他融资',\n     '股权变动', '补充更正', '澄清致歉', '风险提示', '特别处理和退市', '退市整理期'}\n    :type category: str\n    :param start_date: 开始时间\n    :type start_date: str\n    :param end_date: 开始时间\n    :type end_date: str\n    :return: 指定 symbol 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    column_map = {\n        \"沪深京\": \"szse\",\n        \"港股\": \"hke\",\n        \"三板\": \"third\",\n        \"基金\": \"fund\",\n        \"债券\": \"bond\",\n        \"监管\": \"regulator\",\n        \"预披露\": \"pre_disclosure\",\n    }\n    stock_id_map = \"\"\n    if market == \"沪深京\" or \"基金\":\n        stock_id_map = __get_stock_json(market)\n    category_dict = __get_category_dict()\n    url = \"http://www.cninfo.com.cn/new/hisAnnouncement/query\"\n    stock_item = \"\" if symbol == \"\" else f\"{symbol},{stock_id_map[symbol]}\"\n    category_item = \"\" if category == \"\" else f\"{category_dict[category]}\"\n    payload = {\n        \"pageNum\": \"1\",\n        \"pageSize\": \"30\",\n        \"column\": column_map[market],\n        \"tabName\": \"fulltext\",\n        \"plate\": \"\",\n        \"stock\": stock_item,\n        \"searchkey\": keyword,\n        \"secid\": \"\",\n        \"category\": category_item,\n        \"trade\": \"\",\n        \"seDate\": f\"{'-'.join([start_date[:4], start_date[4:6], start_date[6:]])}~\"\n        f\"{'-'.join([end_date[:4], end_date[4:6], end_date[6:]])}\",\n        \"sortName\": \"\",\n        \"sortType\": \"\",\n        \"isHLtitle\": \"true\",\n    }\n    r = requests.post(url, params=payload)\n    text_json = r.json()\n    page_num = math.ceil(int(text_json[\"totalAnnouncement\"]) / 30)\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        payload.update({\"pageNum\": page})\n        r = requests.post(url, data=payload)\n        text_json = r.json()\n        temp_df = pd.DataFrame(text_json[\"announcements\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.rename(\n        columns={\n            \"secCode\": \"代码\",\n            \"secName\": \"简称\",\n            \"announcementTitle\": \"公告标题\",\n            \"announcementTime\": \"公告时间\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[[\"代码\", \"简称\", \"公告标题\", \"公告时间\", \"announcementId\", \"orgId\"]]\n    big_df[\"公告时间\"] = pd.to_datetime(\n        big_df[\"公告时间\"], unit=\"ms\", utc=True, errors=\"coerce\"\n    )\n    big_df[\"公告时间\"] = (\n        big_df[\"公告时间\"]\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.tz_localize(None)\n        .astype(str)\n    )\n    url_list = []\n    for item in zip(\n        big_df[\"代码\"], big_df[\"announcementId\"], big_df[\"orgId\"], big_df[\"公告时间\"]\n    ):\n        url_format = (\n            f\"http://www.cninfo.com.cn/new/disclosure/detail?stockCode={item[0]}&\"\n            f\"announcementId={item[1]}&orgId={item[2]}&announcementTime={item[3]}\"\n        )\n        url_list.append(url_format)\n    big_df[\"公告链接\"] = url_list\n    big_df = big_df[[\"代码\", \"简称\", \"公告标题\", \"公告时间\", \"公告链接\"]]\n    return big_df\n\n\ndef stock_zh_a_disclosure_relation_cninfo(\n    symbol: str = \"000001\",\n    market: str = \"沪深京\",\n    start_date: str = \"20230618\",\n    end_date: str = \"20231219\",\n) -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-首页-数据-预约披露调研\n    http://www.cninfo.com.cn/new/commonUrl?url=data/yypl\n    :param symbol: 股票代码\n    :type symbol: str\n    :param market: choice of {\"沪深京\", \"港股\", \"三板\", \"基金\", \"债券\", \"监管\", \"预披露\"}\n    :type market: str\n    :param start_date: 开始时间\n    :type start_date: str\n    :param end_date: 开始时间\n    :type end_date: str\n    :return: 指定 symbol 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    column_map = {\n        \"沪深京\": \"szse\",\n        \"港股\": \"hke\",\n        \"三板\": \"third\",\n        \"基金\": \"fund\",\n        \"债券\": \"bond\",\n        \"监管\": \"regulator\",\n        \"预披露\": \"pre_disclosure\",\n    }\n    stock_id_map = \"\"\n    if market == \"沪深京\":\n        stock_id_map = __get_stock_json(symbol)\n    stock_item = \"\" if symbol == \"\" else f\"{symbol},{stock_id_map[symbol]}\"\n    url = \"http://www.cninfo.com.cn/new/hisAnnouncement/query\"\n    payload = {\n        \"pageNum\": \"1\",\n        \"pageSize\": \"30\",\n        \"column\": column_map[market],\n        \"tabName\": \"relation\",\n        \"plate\": \"\",\n        \"stock\": stock_item,\n        \"searchkey\": \"\",\n        \"secid\": \"\",\n        \"category\": \"\",\n        \"trade\": \"\",\n        \"seDate\": f\"{'-'.join([start_date[:4], start_date[4:6], start_date[6:]])}~\"\n        f\"{'-'.join([end_date[:4], end_date[4:6], end_date[6:]])}\",\n        \"sortName\": \"\",\n        \"sortType\": \"\",\n        \"isHLtitle\": \"true\",\n    }\n    r = requests.post(url, data=payload)\n    text_json = r.json()\n    page_num = math.ceil(int(text_json[\"totalAnnouncement\"]) / 30)\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        payload.update({\"pageNum\": page})\n        r = requests.post(url, data=payload)\n        text_json = r.json()\n        temp_df = pd.DataFrame(text_json[\"announcements\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.rename(\n        columns={\n            \"secCode\": \"代码\",\n            \"secName\": \"简称\",\n            \"announcementTitle\": \"公告标题\",\n            \"announcementTime\": \"公告时间\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[[\"代码\", \"简称\", \"公告标题\", \"公告时间\", \"announcementId\", \"orgId\"]]\n    big_df[\"公告时间\"] = pd.to_datetime(\n        big_df[\"公告时间\"], unit=\"ms\", utc=True, errors=\"coerce\"\n    )\n    big_df[\"公告时间\"] = (\n        big_df[\"公告时间\"]\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.tz_convert(None)\n        .astype(str)\n    )\n    url_list = []\n    for item in zip(\n        big_df[\"代码\"], big_df[\"announcementId\"], big_df[\"orgId\"], big_df[\"公告时间\"]\n    ):\n        url_format = (\n            f\"http://www.cninfo.com.cn/new/disclosure/detail?stockCode={item[0]}\"\n            f\"&announcementId={item[1]}&orgId={item[2]}&announcementTime={item[3]}\"\n        )\n        url_list.append(url_format)\n    big_df[\"公告链接\"] = url_list\n    big_df = big_df[[\"代码\", \"简称\", \"公告标题\", \"公告时间\", \"公告链接\"]]\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_a_disclosure_report_cninfo_df = stock_zh_a_disclosure_report_cninfo(\n        symbol=\"164701\",\n        market=\"基金\",\n        keyword=\"大模型\",\n        category=\"\",\n        start_date=\"20240422\",\n        end_date=\"20250422\",\n    )\n    print(stock_zh_a_disclosure_report_cninfo_df)\n\n    stock_zh_a_disclosure_relation_cninfo_df = stock_zh_a_disclosure_relation_cninfo(\n        symbol=\"000001\", market=\"沪深京\", start_date=\"20230619\", end_date=\"20231220\"\n    )\n    print(stock_zh_a_disclosure_relation_cninfo_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_dxsyl_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/2/1 16:20\nDesc: 东方财富网-数据中心-新股数据-打新收益率\n东方财富网-数据中心-新股申购-打新收益率\nhttps://data.eastmoney.com/xg/xg/dxsyl.html\n东方财富网-数据中心-新股数据-新股申购与中签查询\nhttps://data.eastmoney.com/xg/xg/default_2.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_dxsyl_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-新股申购-打新收益率\n    https://data.eastmoney.com/xg/xg/dxsyl.html\n    :return: 打新收益率数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"LISTING_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPTA_APP_IPOAPPLY\",\n        \"quoteColumns\": \"f2~01~SECURITY_CODE,f14~01~SECURITY_CODE\",\n        \"quoteType\": \"0\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": \"\"\"((APPLY_DATE>'2010-01-01')(|@APPLY_DATE=\"NULL\"))((LISTING_DATE>'2010-01-01')(|@LISTING_DATE=\"NULL\"))(TRADE_MARKET_CODE!=\"069001017\")\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"SECURITY_CODE\": \"股票代码\",\n            \"f14\": \"股票简称\",\n            \"ISSUE_PRICE\": \"发行价\",\n            \"LATELY_PRICE\": \"最新价\",\n            \"ONLINE_ISSUE_LWR\": \"网上-发行中签率\",\n            \"ONLINE_VA_SHARES\": \"网上-有效申购股数\",\n            \"ONLINE_VA_NUM\": \"网上-有效申购户数\",\n            \"ONLINE_ES_MULTIPLE\": \"网上-超额认购倍数\",\n            \"OFFLINE_VAP_RATIO\": \"网下-配售中签率\",\n            \"OFFLINE_VATS\": \"网下-有效申购股数\",\n            \"OFFLINE_VAP_OBJECT\": \"网下-有效申购户数\",\n            \"OFFLINE_VAS_MULTIPLE\": \"网下-配售认购倍数\",\n            \"ISSUE_NUM\": \"总发行数量\",\n            \"LD_OPEN_PREMIUM\": \"开盘溢价\",\n            \"LD_CLOSE_CHANGE\": \"首日涨幅\",\n            \"LISTING_DATE\": \"上市日期\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"发行价\",\n            \"最新价\",\n            \"网上-发行中签率\",\n            \"网上-有效申购股数\",\n            \"网上-有效申购户数\",\n            \"网上-超额认购倍数\",\n            \"网下-配售中签率\",\n            \"网下-有效申购股数\",\n            \"网下-有效申购户数\",\n            \"网下-配售认购倍数\",\n            \"总发行数量\",\n            \"开盘溢价\",\n            \"首日涨幅\",\n            \"上市日期\",\n        ]\n    ]\n    big_df[\"发行价\"] = pd.to_numeric(big_df[\"发行价\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"网上-发行中签率\"] = pd.to_numeric(\n        big_df[\"网上-发行中签率\"], errors=\"coerce\"\n    )\n    big_df[\"网上-有效申购股数\"] = pd.to_numeric(\n        big_df[\"网上-有效申购股数\"], errors=\"coerce\"\n    )\n    big_df[\"网上-有效申购户数\"] = pd.to_numeric(\n        big_df[\"网上-有效申购户数\"], errors=\"coerce\"\n    )\n    big_df[\"网上-超额认购倍数\"] = pd.to_numeric(\n        big_df[\"网上-超额认购倍数\"], errors=\"coerce\"\n    )\n    big_df[\"网下-配售中签率\"] = pd.to_numeric(\n        big_df[\"网下-配售中签率\"], errors=\"coerce\"\n    )\n    big_df[\"网下-有效申购股数\"] = pd.to_numeric(\n        big_df[\"网下-有效申购股数\"], errors=\"coerce\"\n    )\n    big_df[\"网下-有效申购户数\"] = pd.to_numeric(\n        big_df[\"网下-有效申购户数\"], errors=\"coerce\"\n    )\n    big_df[\"网下-配售认购倍数\"] = pd.to_numeric(\n        big_df[\"网下-配售认购倍数\"], errors=\"coerce\"\n    )\n    big_df[\"总发行数量\"] = pd.to_numeric(big_df[\"总发行数量\"], errors=\"coerce\")\n    big_df[\"开盘溢价\"] = pd.to_numeric(big_df[\"开盘溢价\"], errors=\"coerce\")\n    big_df[\"首日涨幅\"] = pd.to_numeric(big_df[\"首日涨幅\"], errors=\"coerce\")\n    big_df[\"上市日期\"] = pd.to_datetime(big_df[\"上市日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_xgsglb_em(symbol: str = \"全部股票\") -> pd.DataFrame:\n    \"\"\"\n    新股申购与中签查询\n    https://data.eastmoney.com/xg/xg/default_2.html\n    :param symbol: choice of {\"全部股票\", \"沪市主板\", \"科创板\", \"深市主板\", \"创业板\", \"北交所\"}\n    :type symbol: str\n    :return: 新股申购与中签数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    market_map = {\n        \"全部股票\": \"\"\"(APPLY_DATE>'2010-01-01')\"\"\",\n        \"沪市主板\": \"\"\"(APPLY_DATE>'2010-01-01')(SECURITY_TYPE_CODE in (\"058001001\",\"058001008\"))(TRADE_MARKET_CODE in (\"069001001001\",\"069001001003\",\"069001001006\"))\"\"\",\n        \"科创板\": \"\"\"(APPLY_DATE>'2010-01-01')(SECURITY_TYPE_CODE in (\"058001001\",\"058001008\"))(TRADE_MARKET_CODE=\"069001001006\")\"\"\",\n        \"深市主板\": \"\"\"(APPLY_DATE>'2010-01-01')(SECURITY_TYPE_CODE=\"058001001\")(TRADE_MARKET_CODE in (\"069001002001\",\"069001002002\",\"069001002003\",\"069001002005\"))\"\"\",\n        \"创业板\": \"\"\"(APPLY_DATE>'2010-01-01')(SECURITY_TYPE_CODE=\"058001001\")(TRADE_MARKET_CODE=\"069001002002\")\"\"\",\n    }\n    url = \"http://datacenter-web.eastmoney.com/api/data/v1/get\"\n    if symbol == \"北交所\":\n        params = {\n            \"sortColumns\": \"APPLY_DATE\",\n            \"sortTypes\": \"-1\",\n            \"pageSize\": \"500\",\n            \"pageNumber\": \"1\",\n            \"columns\": \"ALL\",\n            \"reportName\": \"RPT_NEEQ_ISSUEINFO_LIST\",\n            \"quoteColumns\": \"f14~01~SECURITY_CODE~SECURITY_NAME_ABBR\",\n            \"source\": \"NEEQSELECT\",\n            \"client\": \"WEB\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        total_page = data_json[\"result\"][\"pages\"]\n        big_df = pd.DataFrame()\n        tqdm = get_tqdm()\n        for page in tqdm(range(1, 1 + int(total_page)), leave=False):\n            params.update({\"pageNumber\": page})\n            r = requests.get(url, params=params)\n            data_json = r.json()\n            temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n            big_df = pd.concat([big_df, temp_df], ignore_index=True)\n\n        big_df.rename(\n            columns={\n                \"ORG_CODE\": \"-\",\n                \"SECURITY_CODE\": \"代码\",\n                \"SECUCODE\": \"带市场标识股票代码\",\n                \"SECURITY_NAME_ABBR\": \"简称\",\n                \"APPLY_CODE\": \"申购代码\",\n                \"EXPECT_ISSUE_NUM\": \"发行总数\",\n                \"PRICE_WAY\": \"定价方式\",\n                \"ISSUE_PRICE\": \"发行价格\",\n                \"ISSUE_PE_RATIO\": \"发行市盈率\",\n                \"APPLY_DATE\": \"申购日\",\n                \"RESULT_NOTICE_DATE\": \"发行结果公告日期\",\n                \"SELECT_LISTING_DATE\": \"上市首日-上市日\",\n                \"ONLINE_ISSUE_NUM\": \"网上-发行数量\",\n                \"APPLY_AMT_UPPER\": \"网上-顶格所需资金\",\n                \"APPLY_NUM_UPPER\": \"网上-申购上限\",\n                \"ONLINE_PAY_DATE\": \"网上申购缴款日期\",\n                \"ONLINE_REFUND_DATE\": \"网上申购资金退款日\",\n                \"INFO_CODE\": \"-\",\n                \"ONLINE_ISSUE_LWR\": \"中签率\",\n                \"NEWEST_PRICE\": \"最新价格-价格\",\n                \"CLOSE_PRICE\": \"首日收盘价\",\n                \"INITIAL_MULTIPLE\": \"-\",\n                \"PER_SHARES_INCOME\": \"上市首日-每百股获利\",\n                \"LD_CLOSE_CHANGE\": \"上市首日-涨幅\",\n                \"TURNOVERRATE\": \"首日换手率\",\n                \"AMPLITUDE\": \"首日振幅\",\n                \"ONLINE_APPLY_LOWER\": \"-\",\n                \"MAIN_BUSINESS\": \"主营业务\",\n                \"INDUSTRY_PE_RATIO\": \"行业市盈率\",\n                \"APPLY_AMT_100\": \"稳获百股需配资金\",\n                \"TAKE_UP_TIME\": \"资金占用时间\",\n                \"CAPTURE_PROFIT\": \"上市首日-约合年化收益\",\n                \"APPLY_SHARE_100\": \"每获配百股需配股数\",\n                \"AVERAGE_PRICE\": \"上市首日-均价\",\n                \"ORG_VAN\": \"参与申购人数\",\n                \"VA_AMT\": \"参与申购资金\",\n                \"ISSUE_PRICE_ADJFACTOR\": \"-\",\n            },\n            inplace=True,\n        )\n        big_df[\"最新价格-累计涨幅\"] = big_df[\"首日收盘价\"] / big_df[\"最新价格-价格\"]\n\n        big_df = big_df[\n            [\n                \"代码\",\n                \"简称\",\n                \"申购代码\",\n                \"发行总数\",\n                \"网上-发行数量\",\n                \"网上-申购上限\",\n                \"网上-顶格所需资金\",\n                \"发行价格\",\n                \"申购日\",\n                \"中签率\",\n                \"稳获百股需配资金\",\n                \"最新价格-价格\",\n                \"最新价格-累计涨幅\",\n                \"上市首日-上市日\",\n                \"上市首日-均价\",\n                \"上市首日-涨幅\",\n                \"上市首日-每百股获利\",\n                \"上市首日-约合年化收益\",\n                \"发行市盈率\",\n                \"行业市盈率\",\n                \"参与申购资金\",\n                \"参与申购人数\",\n            ]\n        ]\n        big_df[\"发行总数\"] = pd.to_numeric(big_df[\"发行总数\"], errors=\"coerce\")\n        big_df[\"网上-发行数量\"] = pd.to_numeric(\n            big_df[\"网上-发行数量\"], errors=\"coerce\"\n        )\n        big_df[\"网上-申购上限\"] = pd.to_numeric(\n            big_df[\"网上-申购上限\"], errors=\"coerce\"\n        )\n        big_df[\"网上-顶格所需资金\"] = pd.to_numeric(\n            big_df[\"网上-顶格所需资金\"], errors=\"coerce\"\n        )\n        big_df[\"发行价格\"] = pd.to_numeric(big_df[\"发行价格\"], errors=\"coerce\")\n        big_df[\"中签率\"] = pd.to_numeric(big_df[\"中签率\"], errors=\"coerce\")\n        big_df[\"稳获百股需配资金\"] = pd.to_numeric(\n            big_df[\"稳获百股需配资金\"], errors=\"coerce\"\n        )\n        big_df[\"最新价格-价格\"] = pd.to_numeric(\n            big_df[\"最新价格-价格\"], errors=\"coerce\"\n        )\n        big_df[\"最新价格-累计涨幅\"] = pd.to_numeric(\n            big_df[\"最新价格-累计涨幅\"], errors=\"coerce\"\n        )\n        big_df[\"上市首日-均价\"] = pd.to_numeric(\n            big_df[\"上市首日-均价\"], errors=\"coerce\"\n        )\n        big_df[\"上市首日-涨幅\"] = pd.to_numeric(\n            big_df[\"上市首日-涨幅\"], errors=\"coerce\"\n        )\n        big_df[\"上市首日-每百股获利\"] = pd.to_numeric(\n            big_df[\"上市首日-每百股获利\"], errors=\"coerce\"\n        )\n        big_df[\"上市首日-约合年化收益\"] = pd.to_numeric(\n            big_df[\"上市首日-约合年化收益\"], errors=\"coerce\"\n        )\n        big_df[\"发行市盈率\"] = pd.to_numeric(big_df[\"发行市盈率\"], errors=\"coerce\")\n        big_df[\"行业市盈率\"] = pd.to_numeric(big_df[\"行业市盈率\"], errors=\"coerce\")\n        big_df[\"参与申购资金\"] = pd.to_numeric(big_df[\"参与申购资金\"], errors=\"coerce\")\n        big_df[\"参与申购人数\"] = pd.to_numeric(big_df[\"参与申购人数\"], errors=\"coerce\")\n        big_df[\"申购日\"] = pd.to_datetime(big_df[\"申购日\"], errors=\"coerce\").dt.date\n        big_df[\"上市首日-上市日\"] = pd.to_datetime(\n            big_df[\"上市首日-上市日\"], errors=\"coerce\"\n        ).dt.date\n        return big_df\n    else:\n        params = {\n            \"sortColumns\": \"APPLY_DATE,SECURITY_CODE\",\n            \"sortTypes\": \"-1,-1\",\n            \"pageSize\": \"5000\",\n            \"pageNumber\": \"1\",\n            \"reportName\": \"RPTA_APP_IPOAPPLY\",\n            \"columns\": \"SECURITY_CODE,SECURITY_NAME,TRADE_MARKET_CODE,APPLY_CODE,TRADE_MARKET,MARKET_TYPE,ORG_TYPE,ISSUE_NUM,ONLINE_ISSUE_NUM,OFFLINE_PLACING_NUM,TOP_APPLY_MARKETCAP,PREDICT_ONFUND_UPPER,ONLINE_APPLY_UPPER,PREDICT_ONAPPLY_UPPER,ISSUE_PRICE,LATELY_PRICE,CLOSE_PRICE,APPLY_DATE,BALLOT_NUM_DATE,BALLOT_PAY_DATE,LISTING_DATE,AFTER_ISSUE_PE,ONLINE_ISSUE_LWR,INITIAL_MULTIPLE,INDUSTRY_PE_NEW,OFFLINE_EP_OBJECT,CONTINUOUS_1WORD_NUM,TOTAL_CHANGE,PROFIT,LIMIT_UP_PRICE,INFO_CODE,OPEN_PRICE,LD_OPEN_PREMIUM,LD_CLOSE_CHANGE,TURNOVERRATE,LD_HIGH_CHANG,LD_AVERAGE_PRICE,OPEN_DATE,OPEN_AVERAGE_PRICE,PREDICT_PE,PREDICT_ISSUE_PRICE2,PREDICT_ISSUE_PRICE,PREDICT_ISSUE_PRICE1,PREDICT_ISSUE_PE,PREDICT_PE_THREE,ONLINE_APPLY_PRICE,MAIN_BUSINESS\",\n            \"filter\": market_map[symbol],\n            \"source\": \"WEB\",\n            \"client\": \"WEB\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        total_page = data_json[\"result\"][\"pages\"]\n        big_df = pd.DataFrame()\n        tqdm = get_tqdm()\n        for page in tqdm(range(1, total_page + 1), leave=False):\n            params.update({\"pageNumber\": page})\n            r = requests.get(url, params=params)\n            data_json = r.json()\n            temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n        big_df.rename(\n            columns={\n                \"SECURITY_CODE\": \"股票代码\",\n                \"SECURITY_NAME\": \"股票简称\",\n                \"TRADE_MARKET_CODE\": \"-\",\n                \"APPLY_CODE\": \"申购代码\",\n                \"TRADE_MARKET\": \"交易所\",\n                \"MARKET_TYPE\": \"板块\",\n                \"ORG_TYPE\": \"-\",\n                \"ISSUE_NUM\": \"发行总数\",\n                \"ONLINE_ISSUE_NUM\": \"网上发行\",\n                \"OFFLINE_PLACING_NUM\": \"_\",\n                \"TOP_APPLY_MARKETCAP\": \"顶格申购需配市值\",\n                \"PREDICT_ONFUND_UPPER\": \"_\",\n                \"ONLINE_APPLY_UPPER\": \"申购上限\",\n                \"PREDICT_ONAPPLY_UPPER\": \"_\",\n                \"ISSUE_PRICE\": \"发行价格\",\n                \"LATELY_PRICE\": \"最新价\",\n                \"CLOSE_PRICE\": \"首日收盘价\",\n                \"APPLY_DATE\": \"申购日期\",\n                \"BALLOT_NUM_DATE\": \"中签号公布日\",\n                \"BALLOT_PAY_DATE\": \"中签缴款日期\",\n                \"LISTING_DATE\": \"上市日期\",\n                \"AFTER_ISSUE_PE\": \"发行市盈率\",\n                \"ONLINE_ISSUE_LWR\": \"中签率\",\n                \"INITIAL_MULTIPLE\": \"询价累计报价倍数\",\n                \"INDUSTRY_PE_NEW\": \"行业市盈率\",\n                \"OFFLINE_EP_OBJECT\": \"配售对象报价家数\",\n                \"CONTINUOUS_1WORD_NUM\": \"连续一字板数量\",\n                \"TOTAL_CHANGE\": \"涨幅\",\n                \"PROFIT\": \"每中一签获利\",\n                \"LIMIT_UP_PRICE\": \"_\",\n                \"INFO_CODE\": \"_\",\n                \"OPEN_PRICE\": \"_\",\n                \"LD_OPEN_PREMIUM\": \"_\",\n                \"LD_CLOSE_CHANGE\": \"_\",\n                \"TURNOVERRATE\": \"_\",\n                \"LD_HIGH_CHANG\": \"_\",\n                \"LD_AVERAGE_PRICE\": \"_\",\n                \"OPEN_DATE\": \"_\",\n                \"OPEN_AVERAGE_PRICE\": \"_\",\n                \"PREDICT_PE\": \"_\",\n                \"PREDICT_ISSUE_PRICE2\": \"_\",\n                \"PREDICT_ISSUE_PRICE\": \"_\",\n                \"PREDICT_ISSUE_PRICE1\": \"_\",\n                \"PREDICT_ISSUE_PE\": \"_\",\n                \"PREDICT_PE_THREE\": \"_\",\n                \"ONLINE_APPLY_PRICE\": \"_\",\n                \"MAIN_BUSINESS\": \"_\",\n                \"IS_REGISTRATION\": \"_\",\n            },\n            inplace=True,\n        )\n        big_df = big_df[\n            [\n                \"股票代码\",\n                \"股票简称\",\n                \"申购代码\",\n                \"交易所\",\n                \"板块\",\n                \"发行总数\",\n                \"网上发行\",\n                \"顶格申购需配市值\",\n                \"申购上限\",\n                \"发行价格\",\n                \"最新价\",\n                \"首日收盘价\",\n                \"申购日期\",\n                \"中签号公布日\",\n                \"中签缴款日期\",\n                \"上市日期\",\n                \"发行市盈率\",\n                \"行业市盈率\",\n                \"中签率\",\n                \"询价累计报价倍数\",\n                \"配售对象报价家数\",\n                \"连续一字板数量\",\n                \"涨幅\",\n                \"每中一签获利\",\n            ]\n        ]\n\n        big_df[\"申购日期\"] = pd.to_datetime(big_df[\"申购日期\"], errors=\"coerce\").dt.date\n        big_df[\"中签号公布日\"] = pd.to_datetime(big_df[\"中签号公布日\"]).dt.date\n        big_df[\"中签缴款日期\"] = pd.to_datetime(big_df[\"中签缴款日期\"]).dt.date\n        big_df[\"发行总数\"] = pd.to_numeric(big_df[\"发行总数\"], errors=\"coerce\")\n        big_df[\"网上发行\"] = pd.to_numeric(big_df[\"网上发行\"], errors=\"coerce\")\n        big_df[\"顶格申购需配市值\"] = pd.to_numeric(\n            big_df[\"顶格申购需配市值\"], errors=\"coerce\"\n        )\n        big_df[\"申购上限\"] = pd.to_numeric(big_df[\"申购上限\"], errors=\"coerce\")\n        big_df[\"发行价格\"] = pd.to_numeric(big_df[\"发行价格\"], errors=\"coerce\")\n        big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n        big_df[\"首日收盘价\"] = pd.to_numeric(big_df[\"首日收盘价\"], errors=\"coerce\")\n        big_df[\"发行市盈率\"] = pd.to_numeric(big_df[\"发行市盈率\"], errors=\"coerce\")\n        big_df[\"行业市盈率\"] = pd.to_numeric(big_df[\"行业市盈率\"], errors=\"coerce\")\n        big_df[\"中签率\"] = pd.to_numeric(big_df[\"中签率\"], errors=\"coerce\")\n        big_df[\"询价累计报价倍数\"] = pd.to_numeric(\n            big_df[\"询价累计报价倍数\"], errors=\"coerce\"\n        )\n        big_df[\"配售对象报价家数\"] = pd.to_numeric(\n            big_df[\"配售对象报价家数\"], errors=\"coerce\"\n        )\n        big_df[\"涨幅\"] = pd.to_numeric(big_df[\"涨幅\"], errors=\"coerce\")\n        big_df[\"每中一签获利\"] = pd.to_numeric(big_df[\"每中一签获利\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_dxsyl_em_df = stock_dxsyl_em()\n    print(stock_dxsyl_em_df)\n\n    stock_xgsglb_em_df = stock_xgsglb_em(symbol=\"全部股票\")\n    print(stock_xgsglb_em_df)\n\n    stock_xgsglb_em_df = stock_xgsglb_em(symbol=\"沪市主板\")\n    print(stock_xgsglb_em_df)\n\n    stock_xgsglb_em_df = stock_xgsglb_em(symbol=\"科创板\")\n    print(stock_xgsglb_em_df)\n\n    stock_xgsglb_em_df = stock_xgsglb_em(symbol=\"深市主板\")\n    print(stock_xgsglb_em_df)\n\n    stock_xgsglb_em_df = stock_xgsglb_em(symbol=\"创业板\")\n    print(stock_xgsglb_em_df)\n\n    stock_xgsglb_em_df = stock_xgsglb_em(symbol=\"北交所\")\n    print(stock_xgsglb_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_ebs_lg.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/19 15:30\nDesc: 乐咕乐股-股债利差\nhttps://legulegu.com/stockdata/equity-bond-spread\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.stock_feature.stock_a_indicator import get_token_lg, get_cookie_csrf\n\n\ndef stock_ebs_lg() -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-股债利差\n    https://legulegu.com/stockdata/equity-bond-spread\n    :return: 股债利差\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://legulegu.com/api/stockdata/equity-bond-spread\"\n    token = get_token_lg()\n    params = {\"token\": token, \"code\": \"000300.SH\"}\n    r = requests.get(\n        url,\n        params=params,\n        **get_cookie_csrf(url=\"https://legulegu.com/stockdata/equity-bond-spread\"),\n    )\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df.rename(\n        columns={\n            \"date\": \"日期\",\n            \"close\": \"沪深300指数\",\n            \"peSpread\": \"股债利差\",\n            \"peSpreadAverage\": \"股债利差均线\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"沪深300指数\",\n            \"股债利差\",\n            \"股债利差均线\",\n        ]\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"沪深300指数\"] = pd.to_numeric(temp_df[\"沪深300指数\"], errors=\"coerce\")\n    temp_df[\"股债利差\"] = pd.to_numeric(temp_df[\"股债利差\"], errors=\"coerce\")\n    temp_df[\"股债利差均线\"] = pd.to_numeric(temp_df[\"股债利差均线\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_ebs_lg_df = stock_ebs_lg()\n    print(stock_ebs_lg_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_esg_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/7/15 16:30\nDesc: 新浪财经-ESG评级中心\nhttps://finance.sina.com.cn/esg/\n\"\"\"\n\nimport math\nfrom akshare.utils.tqdm import get_tqdm\n\nimport pandas as pd\nimport requests\n\n\ndef stock_esg_msci_sina() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-ESG评级中心-ESG评级-MSCI\n    https://finance.sina.com.cn/esg/grade.shtml\n    :return: MSCI\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://global.finance.sina.com.cn/api/openapi.php/EsgService.getMsciEsgStocks?p=1&num=100\"\n    r = requests.get(url)\n    data_json = r.json()\n    page_num = math.ceil(int(data_json[\"result\"][\"data\"][\"total\"]) / 100)\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        headers = {\n            \"Referer\": \"https://finance.sina.com.cn/\",\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/123.0.0.0 Safari/537.36\",\n        }\n        url = f\"https://global.finance.sina.com.cn/api/openapi.php/EsgService.getMsciEsgStocks?p={page}&num=100\"\n        r = requests.get(url, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.rename(\n        columns={\n            \"agency_id\": \"-\",\n            \"agency_name\": \"评级机构\",\n            \"symbol\": \"股票代码\",\n            \"delist\": \"-\",\n            \"comp_code\": \"-\",\n            \"name\": \"股票名称\",\n            \"market\": \"交易市场\",\n            \"industry_code\": \"行业代码\",\n            \"industry_name\": \"行业名称\",\n            \"sw1_code\": \"-\",\n            \"sw1_name\": \"-\",\n            \"sw2_code\": \"-\",\n            \"sw2_name\": \"-\",\n            \"sw3_code\": \"-\",\n            \"sw3_name\": \"-\",\n            \"hs1_code\": \"-\",\n            \"hs1_name\": \"-\",\n            \"hs2_code\": \"-\",\n            \"hs2_name\": \"-\",\n            \"hs3_code\": \"-\",\n            \"hs3_name\": \"-\",\n            \"factset_sector_code\": \"-\",\n            \"factset_sector_name\": \"-\",\n            \"factset_industry_code\": \"-\",\n            \"factset_industry_name\": \"-\",\n            \"date\": \"-\",\n            \"quarter_date\": \"评级日期\",\n            \"grade\": \"ESG等级\",\n            \"score\": \"-\",\n            \"env_score\": \"环境总评\",\n            \"env_grade\": \"-\",\n            \"social_score\": \"社会责任总评\",\n            \"social_grade\": \"-\",\n            \"governance_score\": \"治理总评\",\n            \"governance_grade\": \"-\",\n            \"change_status\": \"-\",\n            \"updated_time\": \"更新时间\",\n            \"created_time\": \"创建时间\",\n            \"esg_rating\": \"ESG评分\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"股票代码\",\n            \"ESG评分\",\n            \"环境总评\",\n            \"社会责任总评\",\n            \"治理总评\",\n            \"评级日期\",\n            \"交易市场\",\n        ]\n    ]\n    big_df[\"评级日期\"] = pd.to_datetime(big_df[\"评级日期\"], errors=\"coerce\").dt.date\n    big_df[\"环境总评\"] = pd.to_numeric(big_df[\"环境总评\"], errors=\"coerce\")\n    big_df[\"社会责任总评\"] = pd.to_numeric(big_df[\"社会责任总评\"], errors=\"coerce\")\n    big_df[\"治理总评\"] = pd.to_numeric(big_df[\"治理总评\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_esg_rft_sina() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-ESG评级中心-ESG评级-路孚特\n    https://finance.sina.com.cn/esg/grade.shtml\n    :return: 路孚特\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://global.finance.sina.com.cn/api/openapi.php/EsgService.getRftEsgStocks?p=1&num=20000\"\n    r = requests.get(url)\n    data_json = r.json()\n    big_df = pd.DataFrame(data_json[\"result\"][\"data\"][\"data\"])\n    big_df.rename(\n        columns={\n            \"symbol\": \"股票代码\",\n            \"esg_score\": \"ESG评分\",\n            \"esg_score_date\": \"ESG评分日期\",\n            \"env_score\": \"环境总评\",\n            \"env_score_date\": \"环境总评日期\",\n            \"social_score\": \"社会责任总评\",\n            \"social_score_date\": \"社会责任总评日期\",\n            \"governance_score\": \"治理总评\",\n            \"governance_score_date\": \"治理总评日期\",\n            \"zy_score\": \"争议总评\",\n            \"zy_score_date\": \"争议总评日期\",\n            \"industry\": \"行业\",\n            \"exchange\": \"交易所\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"股票代码\",\n            \"ESG评分\",\n            \"ESG评分日期\",\n            \"环境总评\",\n            \"环境总评日期\",\n            \"社会责任总评\",\n            \"社会责任总评日期\",\n            \"治理总评\",\n            \"治理总评日期\",\n            \"争议总评\",\n            \"争议总评日期\",\n            \"行业\",\n            \"交易所\",\n        ]\n    ]\n    big_df[\"ESG评分日期\"] = pd.to_datetime(\n        big_df[\"ESG评分日期\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"环境总评日期\"] = pd.to_datetime(\n        big_df[\"环境总评日期\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"社会责任总评日期\"] = pd.to_datetime(\n        big_df[\"社会责任总评日期\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"治理总评日期\"] = pd.to_datetime(\n        big_df[\"治理总评日期\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"争议总评日期\"] = pd.to_datetime(\n        big_df[\"争议总评日期\"], errors=\"coerce\"\n    ).dt.date\n    return big_df\n\n\ndef stock_esg_rate_sina() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-ESG评级中心-ESG评级-ESG评级数据\n    https://finance.sina.com.cn/esg/grade.shtml\n    :return: ESG评级数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://global.finance.sina.com.cn/api/openapi.php/EsgService.getEsgStocks?page=1&num=200\"\n    r = requests.get(url)\n    data_json = r.json()\n    page_num = math.ceil(int(data_json[\"result\"][\"data\"][\"info\"][\"total\"]) / 200)\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        url = f\"https://global.finance.sina.com.cn/api/openapi.php/EsgService.getEsgStocks?page={page}&num=200\"\n        r = requests.get(url)\n        data_json = r.json()\n        stock_num = len(data_json[\"result\"][\"data\"][\"info\"][\"stocks\"])\n        for num in range(stock_num):\n            temp_df = pd.DataFrame(\n                data_json[\"result\"][\"data\"][\"info\"][\"stocks\"][num][\"esg_info\"]\n            )\n            temp_df[\"symbol\"] = data_json[\"result\"][\"data\"][\"info\"][\"stocks\"][num][\n                \"symbol\"\n            ]\n            temp_df[\"market\"] = data_json[\"result\"][\"data\"][\"info\"][\"stocks\"][num][\n                \"market\"\n            ]\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.rename(\n        columns={\n            \"symbol\": \"成分股代码\",\n            \"agency_name\": \"评级机构\",\n            \"esg_score\": \"评级\",\n            \"esg_dt\": \"评级季度\",\n            \"remark\": \"标识\",\n            \"market\": \"交易市场\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"成分股代码\",\n            \"评级机构\",\n            \"评级\",\n            \"评级季度\",\n            \"标识\",\n            \"交易市场\",\n        ]\n    ]\n    return big_df\n\n\ndef stock_esg_zd_sina() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-ESG评级中心-ESG评级-秩鼎\n    https://finance.sina.com.cn/esg/grade.shtml\n    :return: 秩鼎\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://global.finance.sina.com.cn/api/openapi.php/EsgService.getZdEsgStocks\"\n    params = {\"p\": \"1\", \"num\": \"100\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    tqdm = get_tqdm()\n    total_page = math.ceil(int(data_json[\"result\"][\"data\"][\"total\"]) / 100)\n    temp_list = []\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params = {\"p\": str(page), \"num\": \"100\"}\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"][\"data\"])\n        temp_list.append(temp_df)\n    big_df = pd.concat(temp_list, ignore_index=True)\n    big_df.rename(\n        columns={\n            \"ticker\": \"股票代码\",\n            \"esg_score\": \"ESG评分\",\n            \"report_date\": \"评分日期\",\n            \"environmental_score\": \"环境总评\",\n            \"social_score\": \"社会责任总评\",\n            \"governance_score\": \"治理总评\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"股票代码\",\n            \"ESG评分\",\n            \"环境总评\",\n            \"社会责任总评\",\n            \"治理总评\",\n            \"评分日期\",\n        ]\n    ]\n    big_df[\"评分日期\"] = pd.to_datetime(big_df[\"评分日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_esg_hz_sina() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-ESG评级中心-ESG评级-华证指数\n    https://finance.sina.com.cn/esg/grade.shtml\n    :return: 华证指数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://global.finance.sina.com.cn/api/openapi.php/EsgService.getHzEsgStocks\"\n    params = {\"p\": 1, \"num\": \"100\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = math.ceil(int(data_json[\"result\"][\"data\"][\"total\"]) / 100)\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params = {\"p\": str(page), \"num\": \"100\"}\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.rename(\n        columns={\n            \"date\": \"日期\",\n            \"symbol\": \"股票代码\",\n            \"market\": \"交易市场\",\n            \"name\": \"股票名称\",\n            \"esg_score\": \"ESG评分\",\n            \"esg_score_grade\": \"ESG等级\",\n            \"e_score\": \"环境\",\n            \"e_score_grade\": \"环境等级\",\n            \"s_score\": \"社会\",\n            \"s_score_grade\": \"社会等级\",\n            \"g_score\": \"公司治理\",\n            \"g_score_grade\": \"公司治理等级\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"日期\",\n            \"股票代码\",\n            \"交易市场\",\n            \"股票名称\",\n            \"ESG评分\",\n            \"ESG等级\",\n            \"环境\",\n            \"环境等级\",\n            \"社会\",\n            \"社会等级\",\n            \"公司治理\",\n            \"公司治理等级\",\n        ]\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df[\"ESG评分\"] = pd.to_numeric(big_df[\"ESG评分\"], errors=\"coerce\")\n    big_df[\"环境\"] = pd.to_numeric(big_df[\"环境\"], errors=\"coerce\")\n    big_df[\"社会\"] = pd.to_numeric(big_df[\"社会\"], errors=\"coerce\")\n    big_df[\"公司治理\"] = pd.to_numeric(big_df[\"公司治理\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_esg_msci_sina_df = stock_esg_msci_sina()\n    print(stock_esg_msci_sina_df)\n\n    stock_esg_rft_sina_df = stock_esg_rft_sina()\n    print(stock_esg_rft_sina_df)\n\n    stock_esg_rate_sina_df = stock_esg_rate_sina()\n    print(stock_esg_rate_sina_df)\n\n    stock_esg_zd_sina_df = stock_esg_zd_sina()\n    print(stock_esg_zd_sina_df)\n\n    stock_esg_hz_sina_df = stock_esg_hz_sina()\n    print(stock_esg_hz_sina_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_fhps_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/18 15:00\nDesc: 东方财富网-数据中心-年报季报-分红送配\nhttps://data.eastmoney.com/yjfp/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_fhps_em(date: str = \"20231231\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-年报季报-分红送配\n    https://data.eastmoney.com/yjfp/\n    :param date: 分红送配报告期\n    :type date: str\n    :return: 分红送配\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.simplefilter(action=\"ignore\", category=FutureWarning)\n\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"PLAN_NOTICE_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_SHAREBONUS_DET\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"\",\n        \"js\": '{\"data\":(x),\"pages\":(tp)}',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"\"\"(REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_pages = int(data_json[\"result\"][\"pages\"])\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_pages + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.columns = [\n        \"_\",\n        \"名称\",\n        \"_\",\n        \"_\",\n        \"代码\",\n        \"送转股份-送转总比例\",\n        \"送转股份-送转比例\",\n        \"送转股份-转股比例\",\n        \"现金分红-现金分红比例\",\n        \"预案公告日\",\n        \"股权登记日\",\n        \"除权除息日\",\n        \"_\",\n        \"方案进度\",\n        \"_\",\n        \"最新公告日期\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"每股收益\",\n        \"每股净资产\",\n        \"每股公积金\",\n        \"每股未分配利润\",\n        \"净利润同比增长\",\n        \"总股本\",\n        \"_\",\n        \"现金分红-股息率\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"送转股份-送转总比例\",\n            \"送转股份-送转比例\",\n            \"送转股份-转股比例\",\n            \"现金分红-现金分红比例\",\n            \"现金分红-股息率\",\n            \"每股收益\",\n            \"每股净资产\",\n            \"每股公积金\",\n            \"每股未分配利润\",\n            \"净利润同比增长\",\n            \"总股本\",\n            \"预案公告日\",\n            \"股权登记日\",\n            \"除权除息日\",\n            \"方案进度\",\n            \"最新公告日期\",\n        ]\n    ]\n    big_df[\"送转股份-送转总比例\"] = pd.to_numeric(\n        big_df[\"送转股份-送转总比例\"], errors=\"coerce\"\n    )\n    big_df[\"送转股份-送转比例\"] = pd.to_numeric(\n        big_df[\"送转股份-送转比例\"], errors=\"coerce\"\n    )\n    big_df[\"送转股份-转股比例\"] = pd.to_numeric(\n        big_df[\"送转股份-转股比例\"], errors=\"coerce\"\n    )\n    big_df[\"现金分红-现金分红比例\"] = pd.to_numeric(\n        big_df[\"现金分红-现金分红比例\"], errors=\"coerce\"\n    )\n    big_df[\"现金分红-股息率\"] = pd.to_numeric(\n        big_df[\"现金分红-股息率\"], errors=\"coerce\"\n    )\n    big_df[\"每股收益\"] = pd.to_numeric(big_df[\"每股收益\"], errors=\"coerce\")\n    big_df[\"每股净资产\"] = pd.to_numeric(big_df[\"每股净资产\"], errors=\"coerce\")\n    big_df[\"每股公积金\"] = pd.to_numeric(big_df[\"每股公积金\"], errors=\"coerce\")\n    big_df[\"每股未分配利润\"] = pd.to_numeric(big_df[\"每股未分配利润\"], errors=\"coerce\")\n    big_df[\"净利润同比增长\"] = pd.to_numeric(big_df[\"净利润同比增长\"], errors=\"coerce\")\n    big_df[\"总股本\"] = pd.to_numeric(big_df[\"总股本\"], errors=\"coerce\")\n\n    big_df[\"预案公告日\"] = pd.to_datetime(big_df[\"预案公告日\"], errors=\"coerce\").dt.date\n    big_df[\"股权登记日\"] = pd.to_datetime(big_df[\"股权登记日\"], errors=\"coerce\").dt.date\n    big_df[\"除权除息日\"] = pd.to_datetime(big_df[\"除权除息日\"], errors=\"coerce\").dt.date\n    big_df[\"最新公告日期\"] = pd.to_datetime(\n        big_df[\"最新公告日期\"], errors=\"coerce\"\n    ).dt.date\n    big_df.sort_values([\"最新公告日期\"], inplace=True, ignore_index=True)\n    return big_df\n\n\ndef stock_fhps_detail_em(symbol: str = \"300073\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-分红送配-分红送配详情\n    https://data.eastmoney.com/yjfp/detail/300073.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 分红送配详情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_SHAREBONUS_DET\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"\",\n        \"js\": '{\"data\":(x),\"pages\":(tp)}',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"\"\"(SECURITY_CODE=\"{symbol}\")\"\"\",\n    }\n\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_pages = int(data_json[\"result\"][\"pages\"])\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_pages + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.columns = [\n        \"_\",\n        \"-\",\n        \"_\",\n        \"_\",\n        \"-\",\n        \"送转股份-送转总比例\",\n        \"送转股份-送股比例\",\n        \"送转股份-转股比例\",\n        \"现金分红-现金分红比例\",\n        \"业绩披露日期\",\n        \"股权登记日\",\n        \"除权除息日\",\n        \"报告期\",\n        \"方案进度\",\n        \"现金分红-现金分红比例描述\",\n        \"最新公告日期\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"每股收益\",\n        \"每股净资产\",\n        \"每股公积金\",\n        \"每股未分配利润\",\n        \"净利润同比增长\",\n        \"总股本\",\n        \"预案公告日\",\n        \"现金分红-股息率\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"报告期\",\n            \"业绩披露日期\",\n            \"送转股份-送转总比例\",\n            \"送转股份-送股比例\",\n            \"送转股份-转股比例\",\n            \"现金分红-现金分红比例\",\n            \"现金分红-现金分红比例描述\",\n            \"现金分红-股息率\",\n            \"每股收益\",\n            \"每股净资产\",\n            \"每股公积金\",\n            \"每股未分配利润\",\n            \"净利润同比增长\",\n            \"总股本\",\n            \"预案公告日\",\n            \"股权登记日\",\n            \"除权除息日\",\n            \"方案进度\",\n            \"最新公告日期\",\n        ]\n    ]\n    big_df[\"报告期\"] = pd.to_datetime(big_df[\"报告期\"], errors=\"coerce\").dt.date\n    big_df[\"业绩披露日期\"] = pd.to_datetime(\n        big_df[\"业绩披露日期\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"预案公告日\"] = pd.to_datetime(big_df[\"预案公告日\"], errors=\"coerce\").dt.date\n    big_df[\"股权登记日\"] = pd.to_datetime(big_df[\"股权登记日\"], errors=\"coerce\").dt.date\n    big_df[\"除权除息日\"] = pd.to_datetime(big_df[\"除权除息日\"], errors=\"coerce\").dt.date\n    big_df[\"最新公告日期\"] = pd.to_datetime(\n        big_df[\"最新公告日期\"], errors=\"coerce\"\n    ).dt.date\n\n    big_df[\"送转股份-送转总比例\"] = pd.to_numeric(\n        big_df[\"送转股份-送转总比例\"], errors=\"coerce\"\n    )\n    big_df[\"送转股份-送股比例\"] = pd.to_numeric(\n        big_df[\"送转股份-送股比例\"], errors=\"coerce\"\n    )\n    big_df[\"送转股份-转股比例\"] = pd.to_numeric(\n        big_df[\"送转股份-转股比例\"], errors=\"coerce\"\n    )\n    big_df[\"现金分红-现金分红比例\"] = pd.to_numeric(\n        big_df[\"现金分红-现金分红比例\"], errors=\"coerce\"\n    )\n    big_df[\"现金分红-股息率\"] = pd.to_numeric(\n        big_df[\"现金分红-股息率\"], errors=\"coerce\"\n    )\n    big_df[\"每股收益\"] = pd.to_numeric(big_df[\"每股收益\"], errors=\"coerce\")\n    big_df[\"每股净资产\"] = pd.to_numeric(big_df[\"每股净资产\"], errors=\"coerce\")\n    big_df[\"每股公积金\"] = pd.to_numeric(big_df[\"每股公积金\"], errors=\"coerce\")\n    big_df[\"每股未分配利润\"] = pd.to_numeric(big_df[\"每股未分配利润\"], errors=\"coerce\")\n    big_df[\"净利润同比增长\"] = pd.to_numeric(big_df[\"净利润同比增长\"], errors=\"coerce\")\n    big_df[\"总股本\"] = pd.to_numeric(big_df[\"总股本\"], errors=\"coerce\")\n    big_df.sort_values([\"报告期\"], inplace=True, ignore_index=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_fhps_em_df = stock_fhps_em(date=\"20231231\")\n    print(stock_fhps_em_df)\n\n    stock_fhps_detail_em_df = stock_fhps_detail_em(symbol=\"000005\")\n    print(stock_fhps_detail_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_fhps_ths.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/5/13 10:30\nDesc: 同花顺-分红情况\nhttps://basic.10jqka.com.cn/new/603444/bonus.html\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\n\ndef stock_fhps_detail_ths(symbol: str = \"603444\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-分红情况\n    https://basic.10jqka.com.cn/new/603444/bonus.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 分红融资\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://basic.10jqka.com.cn/new/{symbol}/bonus.html\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) \"\n        \"AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/89.0.4389.90 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    r.encoding = \"gbk\"\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df[\"董事会日期\"] = pd.to_datetime(\n        temp_df[\"董事会日期\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"股东大会预案公告日期\"] = pd.to_datetime(\n        temp_df[\"股东大会预案公告日期\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n    ).dt.date\n    temp_df[\"实施公告日\"] = pd.to_datetime(\n        temp_df[\"实施公告日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n    ).dt.date\n    if \"A股股权登记日\" in temp_df.columns:\n        temp_df[\"A股股权登记日\"] = pd.to_datetime(\n            temp_df[\"A股股权登记日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n        ).dt.date\n        temp_df[\"A股除权除息日\"] = pd.to_datetime(\n            temp_df[\"A股除权除息日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n        ).dt.date\n    else:\n        temp_df[\"B股股权登记日\"] = pd.to_datetime(\n            temp_df[\"B股股权登记日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n        ).dt.date\n        temp_df[\"B股除权除息日\"] = pd.to_datetime(\n            temp_df[\"B股除权除息日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n        ).dt.date\n    temp_df.sort_values(by=[\"董事会日期\"], ignore_index=True, inplace=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_fhps_detail_ths_df = stock_fhps_detail_ths(symbol=\"200596\")\n    print(stock_fhps_detail_ths_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_fund_flow.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/8/15 18:00\nDesc: 同花顺-数据中心-资金流向\n同花顺-数据中心-资金流向-个股资金流\nhttps://data.10jqka.com.cn/funds/ggzjl/#refCountId=data_55f13c2c_254\n同花顺-数据中心-资金流向-概念资金流\nhttps://data.10jqka.com.cn/funds/gnzjl/#refCountId=data_55f13c2c_254\n同花顺-数据中心-资金流向-行业资金流\nhttps://data.10jqka.com.cn/funds/hyzjl/#refCountId=data_55f13c2c_254\n同花顺-数据中心-资金流向-打单追踪\nhttps://data.10jqka.com.cn/funds/ddzz/#refCountId=data_55f13c2c_254\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\nimport py_mini_racer\nfrom akshare.utils.tqdm import get_tqdm\n\nfrom akshare.datasets import get_ths_js\n\n\ndef _get_file_content_ths(file: str = \"ths.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef stock_fund_flow_individual(symbol: str = \"即时\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-资金流向-个股资金流\n    https://data.10jqka.com.cn/funds/ggzjl/#refCountId=data_55f13c2c_254\n    :param symbol: choice of {“即时”, \"3日排行\", \"5日排行\", \"10日排行\", \"20日排行\"}\n    :type symbol: str\n    :return: 个股资金流\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"Accept\": \"text/html, */*; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"hexin-v\": v_code,\n        \"Host\": \"data.10jqka.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"http://data.10jqka.com.cn/funds/hyzjl/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/90.0.4430.85 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    url = \"http://data.10jqka.com.cn/funds/ggzjl/field/code/order/desc/ajax/1/free/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    raw_page = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text\n    page_num = raw_page.split(\"/\")[1]\n    if symbol == \"3日排行\":\n        url = \"http://data.10jqka.com.cn/funds/ggzjl/board/3/field/zdf/order/desc/page/{}/ajax/1/free/1/\"\n    elif symbol == \"5日排行\":\n        url = \"http://data.10jqka.com.cn/funds/ggzjl/board/5/field/zdf/order/desc/page/{}/ajax/1/free/1/\"\n    elif symbol == \"10日排行\":\n        url = \"http://data.10jqka.com.cn/funds/ggzjl/board/10/field/zdf/order/desc/page/{}/ajax/1/free/1/\"\n    elif symbol == \"20日排行\":\n        url = \"http://data.10jqka.com.cn/funds/ggzjl/board/20/field/zdf/order/desc/page/{}/ajax/1/free/1/\"\n    else:\n        url = \"http://data.10jqka.com.cn/funds/ggzjl/field/zdf/order/desc/page/{}/ajax/1/free/1/\"\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(page_num) + 1), leave=False):\n        js_code = py_mini_racer.MiniRacer()\n        js_content = _get_file_content_ths(\"ths.js\")\n        js_code.eval(js_content)\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"Accept\": \"text/html, */*; q=0.01\",\n            \"Accept-Encoding\": \"gzip, deflate\",\n            \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n            \"Cache-Control\": \"no-cache\",\n            \"Connection\": \"keep-alive\",\n            \"hexin-v\": v_code,\n            \"Host\": \"data.10jqka.com.cn\",\n            \"Pragma\": \"no-cache\",\n            \"Referer\": \"http://data.10jqka.com.cn/funds/hyzjl/\",\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/90.0.4430.85 Safari/537.36\",\n            \"X-Requested-With\": \"XMLHttpRequest\",\n        }\n        r = requests.get(url.format(page), headers=headers)\n        temp_df = pd.read_html(StringIO(r.text))[0]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    del big_df[\"序号\"]\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = range(1, len(big_df) + 1)\n    if symbol == \"即时\":\n        big_df.columns = [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"换手率\",\n            \"流入资金\",\n            \"流出资金\",\n            \"净额\",\n            \"成交额\",\n        ]\n    else:\n        big_df.columns = [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"最新价\",\n            \"阶段涨跌幅\",\n            \"连续换手率\",\n            \"资金流入净额\",\n        ]\n    return big_df\n\n\ndef stock_fund_flow_concept(symbol: str = \"即时\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-资金流向-概念资金流\n    https://data.10jqka.com.cn/funds/gnzjl/#refCountId=data_55f13c2c_254\n    :param symbol: choice of {“即时”, \"3日排行\", \"5日排行\", \"10日排行\", \"20日排行\"}\n    :type symbol: str\n    :return: 概念资金流\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"Accept\": \"text/html, */*; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"hexin-v\": v_code,\n        \"Host\": \"data.10jqka.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"http://data.10jqka.com.cn/funds/gnzjl/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/90.0.4430.85 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    url = (\n        \"http://data.10jqka.com.cn/funds/gnzjl/field/tradezdf/order/desc/ajax/1/free/1/\"\n    )\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    raw_page = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text\n    page_num = raw_page.split(\"/\")[1]\n    if symbol == \"3日排行\":\n        url = \"http://data.10jqka.com.cn/funds/gnzjl/board/3/field/tradezdf/order/desc/page/{}/ajax/1/free/1/\"\n    elif symbol == \"5日排行\":\n        url = \"http://data.10jqka.com.cn/funds/gnzjl/board/5/field/tradezdf/order/desc/page/{}/ajax/1/free/1/\"\n    elif symbol == \"10日排行\":\n        url = \"http://data.10jqka.com.cn/funds/gnzjl/board/10/field/tradezdf/order/desc/page/{}/ajax/1/free/1/\"\n    elif symbol == \"20日排行\":\n        url = \"http://data.10jqka.com.cn/funds/gnzjl/board/20/field/tradezdf/order/desc/page/{}/ajax/1/free/1/\"\n    else:\n        url = \"http://data.10jqka.com.cn/funds/gnzjl/field/tradezdf/order/desc/page/{}/ajax/1/free/1/\"\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(page_num) + 1), leave=False):\n        js_code = py_mini_racer.MiniRacer()\n        js_content = _get_file_content_ths(\"ths.js\")\n        js_code.eval(js_content)\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"Accept\": \"text/html, */*; q=0.01\",\n            \"Accept-Encoding\": \"gzip, deflate\",\n            \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n            \"Cache-Control\": \"no-cache\",\n            \"Connection\": \"keep-alive\",\n            \"hexin-v\": v_code,\n            \"Host\": \"data.10jqka.com.cn\",\n            \"Pragma\": \"no-cache\",\n            \"Referer\": \"http://data.10jqka.com.cn/funds/gnzjl/\",\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/90.0.4430.85 Safari/537.36\",\n            \"X-Requested-With\": \"XMLHttpRequest\",\n        }\n        r = requests.get(url.format(page), headers=headers)\n        temp_df = pd.read_html(StringIO(r.text))[0]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    del big_df[\"序号\"]\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = range(1, len(big_df) + 1)\n    if symbol == \"即时\":\n        big_df.columns = [\n            \"序号\",\n            \"行业\",\n            \"行业指数\",\n            \"行业-涨跌幅\",\n            \"流入资金\",\n            \"流出资金\",\n            \"净额\",\n            \"公司家数\",\n            \"领涨股\",\n            \"领涨股-涨跌幅\",\n            \"当前价\",\n        ]\n        big_df[\"行业-涨跌幅\"] = big_df[\"行业-涨跌幅\"].str.strip(\"%\")\n        big_df[\"领涨股-涨跌幅\"] = big_df[\"领涨股-涨跌幅\"].str.strip(\"%\")\n        big_df[\"行业-涨跌幅\"] = pd.to_numeric(big_df[\"行业-涨跌幅\"], errors=\"coerce\")\n        big_df[\"领涨股-涨跌幅\"] = pd.to_numeric(\n            big_df[\"领涨股-涨跌幅\"], errors=\"coerce\"\n        )\n    else:\n        big_df.columns = [\n            \"序号\",\n            \"行业\",\n            \"公司家数\",\n            \"行业指数\",\n            \"阶段涨跌幅\",\n            \"流入资金\",\n            \"流出资金\",\n            \"净额\",\n        ]\n    return big_df\n\n\ndef stock_fund_flow_industry(symbol: str = \"即时\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-资金流向-行业资金流\n    https://data.10jqka.com.cn/funds/hyzjl/#refCountId=data_55f13c2c_254\n    :param symbol: choice of {“即时”, \"3日排行\", \"5日排行\", \"10日排行\", \"20日排行\"}\n    :type symbol: str\n    :return: 行业资金流\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"Accept\": \"text/html, */*; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"hexin-v\": v_code,\n        \"Host\": \"data.10jqka.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"http://data.10jqka.com.cn/funds/hyzjl/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/90.0.4430.85 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    url = (\n        \"http://data.10jqka.com.cn/funds/hyzjl/field/tradezdf/order/desc/ajax/1/free/1/\"\n    )\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    raw_page = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text\n    page_num = raw_page.split(\"/\")[1]\n    if symbol == \"3日排行\":\n        url = \"http://data.10jqka.com.cn/funds/hyzjl/board/3/field/tradezdf/order/desc/page/{}/ajax/1/free/1/\"\n    elif symbol == \"5日排行\":\n        url = \"http://data.10jqka.com.cn/funds/hyzjl/board/5/field/tradezdf/order/desc/page/{}/ajax/1/free/1/\"\n    elif symbol == \"10日排行\":\n        url = \"http://data.10jqka.com.cn/funds/hyzjl/board/10/field/tradezdf/order/desc/page/{}/ajax/1/free/1/\"\n    elif symbol == \"20日排行\":\n        url = \"http://data.10jqka.com.cn/funds/hyzjl/board/20/field/tradezdf/order/desc/page/{}/ajax/1/free/1/\"\n    else:\n        url = \"http://data.10jqka.com.cn/funds/hyzjl/field/tradezdf/order/desc/page/{}/ajax/1/free/1/\"\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(page_num) + 1), leave=False):\n        js_code = py_mini_racer.MiniRacer()\n        js_content = _get_file_content_ths(\"ths.js\")\n        js_code.eval(js_content)\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"Accept\": \"text/html, */*; q=0.01\",\n            \"Accept-Encoding\": \"gzip, deflate\",\n            \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n            \"Cache-Control\": \"no-cache\",\n            \"Connection\": \"keep-alive\",\n            \"hexin-v\": v_code,\n            \"Host\": \"data.10jqka.com.cn\",\n            \"Pragma\": \"no-cache\",\n            \"Referer\": \"http://data.10jqka.com.cn/funds/hyzjl/\",\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/90.0.4430.85 Safari/537.36\",\n            \"X-Requested-With\": \"XMLHttpRequest\",\n        }\n        r = requests.get(url.format(page), headers=headers)\n        temp_df = pd.read_html(StringIO(r.text))[0]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    del big_df[\"序号\"]\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = range(1, len(big_df) + 1)\n    if symbol == \"即时\":\n        big_df.columns = [\n            \"序号\",\n            \"行业\",\n            \"行业指数\",\n            \"行业-涨跌幅\",\n            \"流入资金\",\n            \"流出资金\",\n            \"净额\",\n            \"公司家数\",\n            \"领涨股\",\n            \"领涨股-涨跌幅\",\n            \"当前价\",\n        ]\n        big_df[\"行业-涨跌幅\"] = big_df[\"行业-涨跌幅\"].str.strip(\"%\")\n        big_df[\"领涨股-涨跌幅\"] = big_df[\"领涨股-涨跌幅\"].str.strip(\"%\")\n        big_df[\"行业-涨跌幅\"] = pd.to_numeric(big_df[\"行业-涨跌幅\"], errors=\"coerce\")\n        big_df[\"领涨股-涨跌幅\"] = pd.to_numeric(\n            big_df[\"领涨股-涨跌幅\"], errors=\"coerce\"\n        )\n    else:\n        big_df.columns = [\n            \"序号\",\n            \"行业\",\n            \"公司家数\",\n            \"行业指数\",\n            \"阶段涨跌幅\",\n            \"流入资金\",\n            \"流出资金\",\n            \"净额\",\n        ]\n    return big_df\n\n\ndef stock_fund_flow_big_deal() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-资金流向-大单追踪\n    https://data.10jqka.com.cn/funds/ddzz\n    :return: 大单追踪\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"Accept\": \"text/html, */*; q=0.01\",\n        \"Accept-Encoding\": \"gzip, deflate\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"hexin-v\": v_code,\n        \"Host\": \"data.10jqka.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"http://data.10jqka.com.cn/funds/hyzjl/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/90.0.4430.85 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    url = \"http://data.10jqka.com.cn/funds/ddzz/order/desc/ajax/1/free/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    raw_page = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text\n    page_num = raw_page.split(\"/\")[1]\n    url = \"http://data.10jqka.com.cn/funds/ddzz/order/asc/page/{}/ajax/1/free/1/\"\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(page_num) + 1), leave=False):\n        js_code = py_mini_racer.MiniRacer()\n        js_content = _get_file_content_ths(\"ths.js\")\n        js_code.eval(js_content)\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"Accept\": \"text/html, */*; q=0.01\",\n            \"Accept-Encoding\": \"gzip, deflate\",\n            \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n            \"Cache-Control\": \"no-cache\",\n            \"Connection\": \"keep-alive\",\n            \"hexin-v\": v_code,\n            \"Host\": \"data.10jqka.com.cn\",\n            \"Pragma\": \"no-cache\",\n            \"Referer\": \"http://data.10jqka.com.cn/funds/hyzjl/\",\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n            \"Chrome/90.0.4430.85 Safari/537.36\",\n            \"X-Requested-With\": \"XMLHttpRequest\",\n        }\n        r = requests.get(url.format(page), headers=headers)\n        temp_df = pd.read_html(StringIO(r.text))[0]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.columns = [\n        \"成交时间\",\n        \"股票代码\",\n        \"股票简称\",\n        \"成交价格\",\n        \"成交量\",\n        \"成交额\",\n        \"大单性质\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"详细\",\n    ]\n    del big_df[\"详细\"]\n    return big_df\n\n\nif __name__ == \"__main__\":\n    # 同花顺-数据中心-资金流向-个股资金流\n    stock_fund_flow_individual_df = stock_fund_flow_individual(symbol=\"即时\")\n    print(stock_fund_flow_individual_df)\n\n    stock_fund_flow_individual_df = stock_fund_flow_individual(symbol=\"3日排行\")\n    print(stock_fund_flow_individual_df)\n\n    stock_fund_flow_individual_df = stock_fund_flow_individual(symbol=\"5日排行\")\n    print(stock_fund_flow_individual_df)\n\n    stock_fund_flow_individual_df = stock_fund_flow_individual(symbol=\"10日排行\")\n    print(stock_fund_flow_individual_df)\n\n    stock_fund_flow_individual_df = stock_fund_flow_individual(symbol=\"20日排行\")\n    print(stock_fund_flow_individual_df)\n\n    # 同花顺-数据中心-资金流向-概念资金流\n    stock_fund_flow_concept_df = stock_fund_flow_concept(symbol=\"即时\")\n    print(stock_fund_flow_concept_df)\n\n    stock_fund_flow_concept_df = stock_fund_flow_concept(symbol=\"3日排行\")\n    print(stock_fund_flow_concept_df)\n\n    stock_fund_flow_concept_df = stock_fund_flow_concept(symbol=\"5日排行\")\n    print(stock_fund_flow_concept_df)\n\n    stock_fund_flow_concept_df = stock_fund_flow_concept(symbol=\"10日排行\")\n    print(stock_fund_flow_concept_df)\n\n    stock_fund_flow_concept_df = stock_fund_flow_concept(symbol=\"20日排行\")\n    print(stock_fund_flow_concept_df)\n\n    # 同花顺-数据中心-资金流向-行业资金流\n    stock_fund_flow_industry_df = stock_fund_flow_industry(symbol=\"即时\")\n    print(stock_fund_flow_industry_df)\n\n    stock_fund_flow_industry_df = stock_fund_flow_industry(symbol=\"3日排行\")\n    print(stock_fund_flow_industry_df)\n\n    stock_fund_flow_industry_df = stock_fund_flow_industry(symbol=\"5日排行\")\n    print(stock_fund_flow_industry_df)\n\n    stock_fund_flow_industry_df = stock_fund_flow_industry(symbol=\"10日排行\")\n    print(stock_fund_flow_industry_df)\n\n    stock_fund_flow_industry_df = stock_fund_flow_industry(symbol=\"20日排行\")\n    print(stock_fund_flow_industry_df)\n\n    # 同花顺-数据中心-资金流向-大单追踪\n    stock_fund_flow_big_deal_df = stock_fund_flow_big_deal()\n    print(stock_fund_flow_big_deal_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_gddh_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/2/11 16:00\nDesc: 东方财富网-数据中心-股东大会\nhttps://data.eastmoney.com/gddh/\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_gddh_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-股东大会\n    https://data.eastmoney.com/gddh/\n    :return: 股东大会\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"NOTICE_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_GENERALMEETING_DETAIL\",\n        \"columns\": \"SECURITY_CODE,SECURITY_NAME_ABBR,MEETING_TITLE,START_ADJUST_DATE,EQUITY_RECORD_DATE,\"\n        \"ONSITE_RECORD_DATE,DECISION_NOTICE_DATE,NOTICE_DATE,WEB_START_DATE,\"\n        \"WEB_END_DATE,SERIAL_NUM,PROPOSAL\",\n        \"filter\": '(IS_LASTDATE=\"1\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], axis=0, ignore_index=True)\n    big_df.rename(\n        columns={\n            \"SECURITY_CODE\": \"代码\",\n            \"SECURITY_NAME_ABBR\": \"简称\",\n            \"MEETING_TITLE\": \"股东大会名称\",\n            \"START_ADJUST_DATE\": \"召开开始日\",\n            \"EQUITY_RECORD_DATE\": \"股权登记日\",\n            \"ONSITE_RECORD_DATE\": \"现场登记日\",\n            \"DECISION_NOTICE_DATE\": \"决议公告日\",\n            \"NOTICE_DATE\": \"公告日\",\n            \"WEB_START_DATE\": \"网络投票时间-开始日\",\n            \"WEB_END_DATE\": \"网络投票时间-结束日\",\n            \"SERIAL_NUM\": \"序列号\",\n            \"PROPOSAL\": \"提案\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"代码\",\n            \"简称\",\n            \"股东大会名称\",\n            \"召开开始日\",\n            \"股权登记日\",\n            \"现场登记日\",\n            \"网络投票时间-开始日\",\n            \"网络投票时间-结束日\",\n            \"决议公告日\",\n            \"公告日\",\n            \"序列号\",\n            \"提案\",\n        ]\n    ]\n    big_df[\"召开开始日\"] = pd.to_datetime(big_df[\"召开开始日\"], errors=\"coerce\").dt.date\n    big_df[\"股权登记日\"] = pd.to_datetime(big_df[\"股权登记日\"], errors=\"coerce\").dt.date\n    big_df[\"现场登记日\"] = pd.to_datetime(big_df[\"现场登记日\"], errors=\"coerce\").dt.date\n    big_df[\"网络投票时间-开始日\"] = pd.to_datetime(\n        big_df[\"网络投票时间-开始日\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"网络投票时间-结束日\"] = pd.to_datetime(\n        big_df[\"网络投票时间-结束日\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"决议公告日\"] = pd.to_datetime(big_df[\"决议公告日\"], errors=\"coerce\").dt.date\n    big_df[\"公告日\"] = pd.to_datetime(big_df[\"公告日\"], errors=\"coerce\").dt.date\n    big_df[\"提案\"] = big_df[\"提案\"].str.replace(\"\\r\\n2\", \"\").str.replace(\"\\r\\n3\", \"\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_gddh_em_df = stock_gddh_em()\n    print(stock_gddh_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_gdfx_em.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/3/26 21:15\nDesc: 东方财富网-数据中心-股东分析\nhttps://data.eastmoney.com/gdfx/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_gdfx_free_holding_statistics_em(\n    date: str = \"20210630\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-股东分析-股东持股统计-十大流通股东\n    https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n    :param date: 报告期\n    :type date: str\n    :return: 十大流通股东\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"STATISTICS_TIMES,COOPERATION_HOLDER_MARK\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_COOPFREEHOLDERS_ANALYSIS\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"\"\"(HOLDNUM_CHANGE_TYPE=\"001\")(END_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"-\",\n        \"-\",\n        \"股东名称\",\n        \"股东类型\",\n        \"-\",\n        \"统计次数\",\n        \"公告日后涨幅统计-10个交易日-平均涨幅\",\n        \"公告日后涨幅统计-10个交易日-最大涨幅\",\n        \"公告日后涨幅统计-10个交易日-最小涨幅\",\n        \"公告日后涨幅统计-30个交易日-平均涨幅\",\n        \"公告日后涨幅统计-30个交易日-最大涨幅\",\n        \"公告日后涨幅统计-30个交易日-最小涨幅\",\n        \"公告日后涨幅统计-60个交易日-平均涨幅\",\n        \"公告日后涨幅统计-60个交易日-最大涨幅\",\n        \"公告日后涨幅统计-60个交易日-最小涨幅\",\n        \"持有个股\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股东名称\",\n            \"股东类型\",\n            \"统计次数\",\n            \"公告日后涨幅统计-10个交易日-平均涨幅\",\n            \"公告日后涨幅统计-10个交易日-最大涨幅\",\n            \"公告日后涨幅统计-10个交易日-最小涨幅\",\n            \"公告日后涨幅统计-30个交易日-平均涨幅\",\n            \"公告日后涨幅统计-30个交易日-最大涨幅\",\n            \"公告日后涨幅统计-30个交易日-最小涨幅\",\n            \"公告日后涨幅统计-60个交易日-平均涨幅\",\n            \"公告日后涨幅统计-60个交易日-最大涨幅\",\n            \"公告日后涨幅统计-60个交易日-最小涨幅\",\n            \"持有个股\",\n        ]\n    ]\n    big_df[\"统计次数\"] = pd.to_numeric(big_df[\"统计次数\"])\n    big_df[\"公告日后涨幅统计-10个交易日-平均涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-10个交易日-平均涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-10个交易日-最大涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-10个交易日-最大涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-10个交易日-最小涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-10个交易日-最小涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-30个交易日-平均涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-30个交易日-平均涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-30个交易日-最大涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-30个交易日-最大涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-30个交易日-最小涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-30个交易日-最小涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-60个交易日-平均涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-60个交易日-平均涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-60个交易日-最大涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-60个交易日-最大涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-60个交易日-最小涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-60个交易日-最小涨幅\"]\n    )\n    return big_df\n\n\ndef stock_gdfx_holding_statistics_em(date: str = \"20210930\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-股东分析-股东持股统计-十大股东\n    https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n    :param date: 报告期\n    :type date: str\n    :return: 十大股东\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"STATISTICS_TIMES,COOPERATION_HOLDER_MARK\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_COOPHOLDERS_ANALYSIS\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"\"\"(HOLDNUM_CHANGE_TYPE=\"001\")(END_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"-\",\n        \"-\",\n        \"股东名称\",\n        \"股东类型\",\n        \"-\",\n        \"统计次数\",\n        \"公告日后涨幅统计-10个交易日-平均涨幅\",\n        \"公告日后涨幅统计-10个交易日-最大涨幅\",\n        \"公告日后涨幅统计-10个交易日-最小涨幅\",\n        \"公告日后涨幅统计-30个交易日-平均涨幅\",\n        \"公告日后涨幅统计-30个交易日-最大涨幅\",\n        \"公告日后涨幅统计-30个交易日-最小涨幅\",\n        \"公告日后涨幅统计-60个交易日-平均涨幅\",\n        \"公告日后涨幅统计-60个交易日-最大涨幅\",\n        \"公告日后涨幅统计-60个交易日-最小涨幅\",\n        \"持有个股\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股东名称\",\n            \"股东类型\",\n            \"统计次数\",\n            \"公告日后涨幅统计-10个交易日-平均涨幅\",\n            \"公告日后涨幅统计-10个交易日-最大涨幅\",\n            \"公告日后涨幅统计-10个交易日-最小涨幅\",\n            \"公告日后涨幅统计-30个交易日-平均涨幅\",\n            \"公告日后涨幅统计-30个交易日-最大涨幅\",\n            \"公告日后涨幅统计-30个交易日-最小涨幅\",\n            \"公告日后涨幅统计-60个交易日-平均涨幅\",\n            \"公告日后涨幅统计-60个交易日-最大涨幅\",\n            \"公告日后涨幅统计-60个交易日-最小涨幅\",\n            \"持有个股\",\n        ]\n    ]\n    big_df[\"统计次数\"] = pd.to_numeric(big_df[\"统计次数\"])\n    big_df[\"公告日后涨幅统计-10个交易日-平均涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-10个交易日-平均涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-10个交易日-最大涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-10个交易日-最大涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-10个交易日-最小涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-10个交易日-最小涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-30个交易日-平均涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-30个交易日-平均涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-30个交易日-最大涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-30个交易日-最大涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-30个交易日-最小涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-30个交易日-最小涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-60个交易日-平均涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-60个交易日-平均涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-60个交易日-最大涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-60个交易日-最大涨幅\"]\n    )\n    big_df[\"公告日后涨幅统计-60个交易日-最小涨幅\"] = pd.to_numeric(\n        big_df[\"公告日后涨幅统计-60个交易日-最小涨幅\"]\n    )\n    return big_df\n\n\ndef stock_gdfx_free_holding_change_em(date: str = \"20210930\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-股东分析-股东持股变动统计-十大流通股东\n    https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n    :param date: 报告期\n    :type date: str\n    :return: 十大流通股东\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"HOLDER_NUM,HOLDER_NEW\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_FREEHOLDERS_BASIC_INFO\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"(END_DATE='{'-'.join([date[:4], date[4:6], date[6:]])}')\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"-\",\n        \"-\",\n        \"股东名称\",\n        \"-\",\n        \"股东类型\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"期末持股只数统计-总持有\",\n        \"期末持股只数统计-新进\",\n        \"期末持股只数统计-增加\",\n        \"期末持股只数统计-减少\",\n        \"期末持股只数统计-不变\",\n        \"-\",\n        \"流通市值统计\",\n        \"持有个股\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股东名称\",\n            \"股东类型\",\n            \"期末持股只数统计-总持有\",\n            \"期末持股只数统计-新进\",\n            \"期末持股只数统计-增加\",\n            \"期末持股只数统计-不变\",\n            \"期末持股只数统计-减少\",\n            \"流通市值统计\",\n            \"持有个股\",\n        ]\n    ]\n    big_df[\"期末持股只数统计-总持有\"] = pd.to_numeric(\n        big_df[\"期末持股只数统计-总持有\"], errors=\"coerce\"\n    )\n    big_df[\"期末持股只数统计-新进\"] = pd.to_numeric(\n        big_df[\"期末持股只数统计-新进\"], errors=\"coerce\"\n    )\n    big_df[\"期末持股只数统计-增加\"] = pd.to_numeric(\n        big_df[\"期末持股只数统计-增加\"], errors=\"coerce\"\n    )\n    big_df[\"期末持股只数统计-不变\"] = pd.to_numeric(\n        big_df[\"期末持股只数统计-不变\"], errors=\"coerce\"\n    )\n    big_df[\"期末持股只数统计-减少\"] = pd.to_numeric(\n        big_df[\"期末持股只数统计-减少\"], errors=\"coerce\"\n    )\n    big_df[\"流通市值统计\"] = pd.to_numeric(big_df[\"流通市值统计\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_gdfx_holding_change_em(date: str = \"20210930\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-股东分析-股东持股变动统计-十大股东\n    https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n    :param date: 报告期\n    :type date: str\n    :return: 十大流通股东\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"HOLDER_NUM,HOLDER_NEW\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_HOLDERS_BASIC_INFO\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"(END_DATE='{'-'.join([date[:4], date[4:6], date[6:]])}')\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"-\",\n        \"-\",\n        \"股东名称\",\n        \"-\",\n        \"股东类型\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"期末持股只数统计-总持有\",\n        \"期末持股只数统计-新进\",\n        \"期末持股只数统计-增加\",\n        \"期末持股只数统计-减少\",\n        \"期末持股只数统计-不变\",\n        \"-\",\n        \"-\",\n        \"持有个股\",\n        \"流通市值统计\",\n        \"-\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股东名称\",\n            \"股东类型\",\n            \"期末持股只数统计-总持有\",\n            \"期末持股只数统计-新进\",\n            \"期末持股只数统计-增加\",\n            \"期末持股只数统计-不变\",\n            \"期末持股只数统计-减少\",\n            \"流通市值统计\",\n            \"持有个股\",\n        ]\n    ]\n    big_df[\"期末持股只数统计-总持有\"] = pd.to_numeric(big_df[\"期末持股只数统计-总持有\"])\n    big_df[\"期末持股只数统计-新进\"] = pd.to_numeric(big_df[\"期末持股只数统计-新进\"])\n    big_df[\"期末持股只数统计-增加\"] = pd.to_numeric(big_df[\"期末持股只数统计-增加\"])\n    big_df[\"期末持股只数统计-不变\"] = pd.to_numeric(big_df[\"期末持股只数统计-不变\"])\n    big_df[\"期末持股只数统计-减少\"] = pd.to_numeric(big_df[\"期末持股只数统计-减少\"])\n    big_df[\"流通市值统计\"] = pd.to_numeric(big_df[\"流通市值统计\"])\n    return big_df\n\n\ndef stock_gdfx_free_top_10_em(\n    symbol: str = \"sh688686\", date: str = \"20240930\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-个股-十大流通股东\n    https://emweb.securities.eastmoney.com/PC_HSF10/ShareholderResearch/Index?type=web&code=SH688686#sdltgd-0\n    :param symbol: 带市场标识的股票代码\n    :type symbol: str\n    :param date: 报告期\n    :type date: str\n    :return: 十大股东\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        \"https://emweb.securities.eastmoney.com/PC_HSF10/ShareholderResearch/PageSDLTGD\"\n    )\n    params = {\n        \"code\": f\"{symbol.upper()}\",\n        \"date\": f\"{'-'.join([date[:4], date[4:6], date[6:]])}\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"sdltgd\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    temp_df.columns = [\n        \"名次\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"股东名称\",\n        \"股东性质\",\n        \"股份类型\",\n        \"持股数\",\n        \"占总流通股本持股比例\",\n        \"增减\",\n        \"变动比率\",\n    ]\n    temp_df = temp_df[\n        [\n            \"名次\",\n            \"股东名称\",\n            \"股东性质\",\n            \"股份类型\",\n            \"持股数\",\n            \"占总流通股本持股比例\",\n            \"增减\",\n            \"变动比率\",\n        ]\n    ]\n    temp_df[\"持股数\"] = pd.to_numeric(temp_df[\"持股数\"], errors=\"coerce\")\n    temp_df[\"占总流通股本持股比例\"] = pd.to_numeric(\n        temp_df[\"占总流通股本持股比例\"], errors=\"coerce\"\n    )\n    temp_df[\"变动比率\"] = pd.to_numeric(temp_df[\"变动比率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_gdfx_top_10_em(\n    symbol: str = \"sh688686\", date: str = \"20210630\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-个股-十大股东\n    https://emweb.securities.eastmoney.com/PC_HSF10/ShareholderResearch/Index?type=web&code=SH688686#sdgd-0\n    :param symbol: 带市场标识的股票代码\n    :type symbol: str\n    :param date: 报告期\n    :type date: str\n    :return: 十大股东\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://emweb.securities.eastmoney.com/PC_HSF10/ShareholderResearch/PageSDGD\"\n    params = {\n        \"code\": f\"{symbol.upper()}\",\n        \"date\": f\"{'-'.join([date[:4], date[4:6], date[6:]])}\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"sdgd\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    temp_df.columns = [\n        \"名次\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"股东名称\",\n        \"股份类型\",\n        \"持股数\",\n        \"占总股本持股比例\",\n        \"增减\",\n        \"变动比率\",\n    ]\n    temp_df = temp_df[\n        [\n            \"名次\",\n            \"股东名称\",\n            \"股份类型\",\n            \"持股数\",\n            \"占总股本持股比例\",\n            \"增减\",\n            \"变动比率\",\n        ]\n    ]\n    temp_df[\"持股数\"] = pd.to_numeric(temp_df[\"持股数\"])\n    temp_df[\"占总股本持股比例\"] = pd.to_numeric(temp_df[\"占总股本持股比例\"])\n    temp_df[\"变动比率\"] = pd.to_numeric(temp_df[\"变动比率\"])\n    return temp_df\n\n\ndef stock_gdfx_free_holding_detail_em(date: str = \"20210930\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-股东分析-股东持股明细-十大流通股东\n    https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n    :param date: 报告期\n    :type date: str\n    :return: 十大流通股东\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"UPDATE_DATE,SECURITY_CODE,HOLDER_RANK\",\n        \"sortTypes\": \"-1,1,1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_F10_EH_FREEHOLDERS\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"(END_DATE='{'-'.join([date[:4], date[4:6], date[6:]])}')\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"HOLDER_NAME\": \"股东名称\",\n            \"HOLDER_TYPE\": \"股东类型\",\n            \"SHARES_TYPE\": \"股份类型\",\n            \"HOLDER_RANK\": \"股东排名\",\n            \"SECURITY_CODE\": \"股票代码\",\n            \"SECURITY_NAME_ABBR\": \"股票简称\",\n            \"HOLD_NUM\": \"期末持股-数量\",\n            \"FREE_HOLDNUM_RATIO\": \"期末持股-持股占流通股比\",\n            \"XZCHANGE\": \"期末持股-数量变化\",\n            \"CHANGE_RATIO\": \"期末持股-数量变化比例\",\n            \"HOLDNUM_CHANGE_NAME\": \"期末持股-持股变动\",\n            \"HOLDER_MARKET_CAP\": \"期末持股-流通市值\",\n            \"END_DATE\": \"报告期\",\n            \"UPDATE_DATE\": \"公告日\",\n            \"REPORT_DATE_NAME\": \"报告名称\",\n        },\n        inplace=True,\n    )\n\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股东名称\",\n            \"股东类型\",\n            \"股票代码\",\n            \"股票简称\",\n            \"报告期\",\n            \"期末持股-数量\",\n            \"期末持股-数量变化\",\n            \"期末持股-数量变化比例\",\n            \"期末持股-持股变动\",\n            \"期末持股-流通市值\",\n            \"公告日\",\n        ]\n    ]\n    big_df[\"报告期\"] = pd.to_datetime(big_df[\"报告期\"], errors=\"coerce\").dt.date\n    big_df[\"公告日\"] = pd.to_datetime(big_df[\"公告日\"], errors=\"coerce\").dt.date\n    big_df[\"期末持股-数量\"] = pd.to_numeric(big_df[\"期末持股-数量\"], errors=\"coerce\")\n    big_df[\"期末持股-数量变化\"] = pd.to_numeric(\n        big_df[\"期末持股-数量变化\"], errors=\"coerce\"\n    )\n    big_df[\"期末持股-数量变化比例\"] = pd.to_numeric(\n        big_df[\"期末持股-数量变化比例\"], errors=\"coerce\"\n    )\n    big_df[\"期末持股-流通市值\"] = pd.to_numeric(\n        big_df[\"期末持股-流通市值\"], errors=\"coerce\"\n    )\n    return big_df\n\n\ndef stock_gdfx_holding_detail_em(\n    date: str = \"20230331\", indicator: str = \"个人\", symbol: str = \"新进\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-股东分析-股东持股明细-十大股东\n    https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n    :param date: 报告期\n    :type date: str\n    :param indicator: 股东类型; choice of {\"个人\", \"基金\", \"QFII\", \"社保\", \"券商\", \"信托\"}\n    :type indicator: str\n    :param symbol: 持股变动; choice of {\"新进\", \"增加\", \"不变\", \"减少\"}\n    :type symbol: str\n    :return: 十大股东\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(action=\"ignore\", category=FutureWarning)\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"NOTICE_DATE,SECURITY_CODE,RANK\",\n        \"sortTypes\": \"-1,1,1\",\n        \"pageSize\": \"50\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_DMSK_HOLDERS\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"\"\"(HOLDER_NEWTYPE=\"{indicator}\")(HOLDNUM_CHANGE_NAME=\"{symbol}\")(END_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"HOLDER_NAME\": \"股东名称\",\n            \"HOLDER_NEWTYPE\": \"股东类型\",\n            \"RANK\": \"股东排名\",\n            \"SECURITY_CODE\": \"股票代码\",\n            \"SECURITY_NAME_ABBR\": \"股票简称\",\n            \"END_DATE\": \"报告期\",\n            \"HOLD_NUM\": \"期末持股-数量\",\n            \"HOLD_NUM_CHANGE\": \"期末持股-数量变化\",\n            \"HOLD_RATIO_CHANGE\": \"期末持股-数量变化比例\",\n            \"HOLDNUM_CHANGE_NAME\": \"期末持股-持股变动\",\n            \"HOLDER_MARKET_CAP\": \"期末持股-流通市值\",\n            \"NOTICE_DATE\": \"公告日\",\n        },\n        inplace=True,\n    )\n\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股东名称\",\n            \"股东类型\",\n            \"股票代码\",\n            \"股票简称\",\n            \"报告期\",\n            \"期末持股-数量\",\n            \"期末持股-数量变化\",\n            \"期末持股-数量变化比例\",\n            \"期末持股-持股变动\",\n            \"期末持股-流通市值\",\n            \"公告日\",\n            \"股东排名\",\n        ]\n    ]\n    big_df[\"报告期\"] = pd.to_datetime(big_df[\"报告期\"], errors=\"coerce\").dt.date\n    big_df[\"公告日\"] = pd.to_datetime(big_df[\"公告日\"], errors=\"coerce\").dt.date\n    big_df[\"期末持股-数量\"] = pd.to_numeric(big_df[\"期末持股-数量\"], errors=\"coerce\")\n    big_df[\"期末持股-数量变化\"] = pd.to_numeric(\n        big_df[\"期末持股-数量变化\"], errors=\"coerce\"\n    )\n    big_df[\"期末持股-数量变化比例\"] = pd.to_numeric(\n        big_df[\"期末持股-数量变化比例\"], errors=\"coerce\"\n    )\n    big_df[\"期末持股-流通市值\"] = pd.to_numeric(\n        big_df[\"期末持股-流通市值\"], errors=\"coerce\"\n    )\n    big_df[\"股东排名\"] = pd.to_numeric(big_df[\"股东排名\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_gdfx_free_holding_analyse_em(date: str = \"20230930\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-股东分析-股东持股分析-十大流通股东\n    https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n    :param date: 报告期\n    :type date: str\n    :return: 十大流通股东\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"UPDATE_DATE,SECURITY_CODE,HOLDER_RANK\",\n        \"sortTypes\": \"-1,1,1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_CUSTOM_F10_EH_FREEHOLDERS_JOIN_FREEHOLDER_SHAREANALYSIS\",\n        \"columns\": \"ALL;D10_ADJCHRATE,D30_ADJCHRATE,D60_ADJCHRATE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"(END_DATE='{'-'.join([date[:4], date[4:6], date[6:]])}')\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"HOLDER_NAME\": \"股东名称\",\n            \"HOLDER_TYPE\": \"股东类型\",\n            \"SECURITY_CODE\": \"股票代码\",\n            \"SECURITY_NAME_ABBR\": \"股票简称\",\n            \"END_DATE\": \"报告期\",\n            \"HOLD_NUM\": \"期末持股-数量\",\n            \"XZCHANGE\": \"期末持股-数量变化\",\n            \"HOLD_RATIO_CHANGE\": \"期末持股-数量变化比例\",\n            \"HOLDNUM_CHANGE_NAME\": \"期末持股-持股变动\",\n            \"HOLDER_MARKET_CAP\": \"期末持股-流通市值\",\n            \"UPDATE_DATE\": \"公告日\",\n            \"D10_ADJCHRATE\": \"公告日后涨跌幅-10个交易日\",\n            \"D30_ADJCHRATE\": \"公告日后涨跌幅-30个交易日\",\n            \"D60_ADJCHRATE\": \"公告日后涨跌幅-60个交易日\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股东名称\",\n            \"股东类型\",\n            \"股票代码\",\n            \"股票简称\",\n            \"报告期\",\n            \"期末持股-数量\",\n            \"期末持股-数量变化\",\n            \"期末持股-数量变化比例\",\n            \"期末持股-持股变动\",\n            \"期末持股-流通市值\",\n            \"公告日\",\n            \"公告日后涨跌幅-10个交易日\",\n            \"公告日后涨跌幅-30个交易日\",\n            \"公告日后涨跌幅-60个交易日\",\n        ]\n    ]\n    big_df[\"报告期\"] = pd.to_datetime(big_df[\"报告期\"], errors=\"coerce\").dt.date\n    big_df[\"公告日\"] = pd.to_datetime(big_df[\"公告日\"], errors=\"coerce\").dt.date\n    big_df[\"期末持股-数量\"] = pd.to_numeric(big_df[\"期末持股-数量\"], errors=\"coerce\")\n    big_df[\"期末持股-数量变化\"] = pd.to_numeric(\n        big_df[\"期末持股-数量变化\"], errors=\"coerce\"\n    )\n    big_df[\"期末持股-数量变化比例\"] = pd.to_numeric(\n        big_df[\"期末持股-数量变化比例\"], errors=\"coerce\"\n    )\n    big_df[\"期末持股-流通市值\"] = pd.to_numeric(\n        big_df[\"期末持股-流通市值\"], errors=\"coerce\"\n    )\n    big_df[\"公告日后涨跌幅-10个交易日\"] = pd.to_numeric(\n        big_df[\"公告日后涨跌幅-10个交易日\"], errors=\"coerce\"\n    )\n    big_df[\"公告日后涨跌幅-30个交易日\"] = pd.to_numeric(\n        big_df[\"公告日后涨跌幅-30个交易日\"], errors=\"coerce\"\n    )\n    big_df[\"公告日后涨跌幅-60个交易日\"] = pd.to_numeric(\n        big_df[\"公告日后涨跌幅-60个交易日\"], errors=\"coerce\"\n    )\n    return big_df\n\n\ndef stock_gdfx_holding_analyse_em(date: str = \"20230331\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-股东分析-股东持股分析-十大股东\n    https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n    :param date: 报告期\n    :type date: str\n    :return: 十大股东\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"NOTICE_DATE,SECURITY_CODE,RANK\",\n        \"sortTypes\": \"-1,1,1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_CUSTOM_DMSK_HOLDERS_JOIN_HOLDER_SHAREANALYSIS\",\n        \"columns\": \"ALL;D10_ADJCHRATE,D30_ADJCHRATE,D60_ADJCHRATE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"(END_DATE='{'-'.join([date[:4], date[4:6], date[6:]])}')\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df[\"index\"] + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"SECUCODE\": \"-\",\n            \"SECURITY_CODE\": \"股票代码\",\n            \"ORG_CODE\": \"-\",\n            \"SECURITY_TYPE_CODE\": \"-\",\n            \"END_DATE\": \"报告期\",\n            \"HOLDER_CODE\": \"-\",\n            \"HOLDER_NAME\": \"股东名称\",\n            \"HOLD_NUM\": \"期末持股-数量\",\n            \"HOLD_RATIO\": \"-\",\n            \"HOLD_NUM_CHANGE\": \"期末持股-数量变化\",\n            \"HOLD_RATIO_CHANGE\": \"期末持股-数量变化比例\",\n            \"NOTICE_DATE\": \"公告日\",\n            \"SECURITY_NAME_ABBR\": \"股票简称\",\n            \"HOLDER_MARKET_CAP\": \"期末持股-流通市值\",\n            \"HOLDNUM_CHANGE_NAME\": \"期末持股-持股变动\",\n            \"HOLDER_TYPE_ORG\": \"股东类型\",\n            \"D10_ADJCHRATE\": \"公告日后涨跌幅-10个交易日\",\n            \"D30_ADJCHRATE\": \"公告日后涨跌幅-30个交易日\",\n            \"D60_ADJCHRATE\": \"公告日后涨跌幅-60个交易日\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股东名称\",\n            \"股东类型\",\n            \"股票代码\",\n            \"股票简称\",\n            \"报告期\",\n            \"期末持股-数量\",\n            \"期末持股-数量变化\",\n            \"期末持股-数量变化比例\",\n            \"期末持股-持股变动\",\n            \"期末持股-流通市值\",\n            \"公告日\",\n            \"公告日后涨跌幅-10个交易日\",\n            \"公告日后涨跌幅-30个交易日\",\n            \"公告日后涨跌幅-60个交易日\",\n        ]\n    ]\n    big_df[\"公告日\"] = pd.to_datetime(big_df[\"公告日\"]).dt.date\n    big_df[\"报告期\"] = pd.to_datetime(big_df[\"报告期\"]).dt.date\n    big_df[\"期末持股-数量\"] = pd.to_numeric(big_df[\"期末持股-数量\"], errors=\"coerce\")\n    big_df[\"期末持股-数量变化\"] = pd.to_numeric(\n        big_df[\"期末持股-数量变化\"], errors=\"coerce\"\n    )\n    big_df[\"期末持股-数量变化比例\"] = pd.to_numeric(\n        big_df[\"期末持股-数量变化比例\"], errors=\"coerce\"\n    )\n    big_df[\"期末持股-流通市值\"] = pd.to_numeric(\n        big_df[\"期末持股-流通市值\"], errors=\"coerce\"\n    )\n    big_df[\"公告日后涨跌幅-10个交易日\"] = pd.to_numeric(\n        big_df[\"公告日后涨跌幅-10个交易日\"], errors=\"coerce\"\n    )\n    big_df[\"公告日后涨跌幅-30个交易日\"] = pd.to_numeric(\n        big_df[\"公告日后涨跌幅-30个交易日\"], errors=\"coerce\"\n    )\n    big_df[\"公告日后涨跌幅-60个交易日\"] = pd.to_numeric(\n        big_df[\"公告日后涨跌幅-60个交易日\"], errors=\"coerce\"\n    )\n    return big_df\n\n\ndef stock_gdfx_free_holding_teamwork_em(symbol: str = \"社保\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-股东分析-股东协同-十大流通股东\n    https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n    :param symbol: 全部; choice of {\"全部\", \"个人\", \"基金\", \"QFII\", \"社保\", \"券商\", \"信托\"}\n    :type symbol: str\n    :return: 十大流通股东\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_dict = {} if symbol == \"全部\" else {\"filter\": f'(HOLDER_TYPE=\"{symbol}\")'}\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"COOPERAT_NUM,HOLDER_NEW,COOPERAT_HOLDER_NEW\",\n        \"sortTypes\": \"-1,-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_COOPFREEHOLDER\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    params.update(symbol_dict)\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"-\",\n        \"股东名称\",\n        \"股东类型\",\n        \"-\",\n        \"协同股东名称\",\n        \"协同股东类型\",\n        \"协同次数\",\n        \"-\",\n        \"个股详情\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股东名称\",\n            \"股东类型\",\n            \"协同股东名称\",\n            \"协同股东类型\",\n            \"协同次数\",\n            \"个股详情\",\n        ]\n    ]\n    big_df[\"协同次数\"] = pd.to_numeric(big_df[\"协同次数\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_gdfx_holding_teamwork_em(symbol: str = \"社保\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-股东分析-股东协同-十大股东\n    https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n    :param symbol: 全部; choice of {\"全部\", \"个人\", \"基金\", \"QFII\", \"社保\", \"券商\", \"信托\"}\n    :type symbol: str\n    :return: 十大股东\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_dict = {} if symbol == \"全部\" else {\"filter\": f'(HOLDER_TYPE=\"{symbol}\")'}\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"COOPERAT_NUM,HOLDER_NEW,COOPERAT_HOLDER_NEW\",\n        \"sortTypes\": \"-1,-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_TENHOLDERS_COOPHOLDERS\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    params.update(symbol_dict)\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"-\",\n        \"股东名称\",\n        \"股东类型\",\n        \"-\",\n        \"协同股东名称\",\n        \"协同股东类型\",\n        \"协同次数\",\n        \"-\",\n        \"个股详情\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股东名称\",\n            \"股东类型\",\n            \"协同股东名称\",\n            \"协同股东类型\",\n            \"协同次数\",\n            \"个股详情\",\n        ]\n    ]\n    big_df[\"协同次数\"] = pd.to_numeric(big_df[\"协同次数\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_gdfx_free_holding_statistics_em_df = stock_gdfx_free_holding_statistics_em(\n        date=\"20210930\"\n    )\n    print(stock_gdfx_free_holding_statistics_em_df)\n\n    stock_gdfx_holding_statistics_em_df = stock_gdfx_holding_statistics_em(\n        date=\"20210930\"\n    )\n    print(stock_gdfx_holding_statistics_em_df)\n\n    stock_gdfx_free_holding_change_em_df = stock_gdfx_free_holding_change_em(\n        date=\"20210930\"\n    )\n    print(stock_gdfx_free_holding_change_em_df)\n\n    stock_gdfx_holding_change_em_df = stock_gdfx_holding_change_em(date=\"20210930\")\n    print(stock_gdfx_holding_change_em_df)\n\n    stock_gdfx_free_top_10_em_df = stock_gdfx_free_top_10_em(\n        symbol=\"sz000420\", date=\"20220331\"\n    )\n    print(stock_gdfx_free_top_10_em_df)\n\n    stock_gdfx_top_10_em_df = stock_gdfx_top_10_em(symbol=\"sh688686\", date=\"20210630\")\n    print(stock_gdfx_top_10_em_df)\n\n    stock_gdfx_free_holding_detail_em_df = stock_gdfx_free_holding_detail_em(\n        date=\"20210930\"\n    )\n    print(stock_gdfx_free_holding_detail_em_df)\n\n    stock_gdfx_holding_detail_em_df = stock_gdfx_holding_detail_em(date=\"20230331\")\n    print(stock_gdfx_holding_detail_em_df)\n\n    stock_gdfx_free_holding_analyse_em_df = stock_gdfx_free_holding_analyse_em(\n        date=\"20230930\"\n    )\n    print(stock_gdfx_free_holding_analyse_em_df)\n\n    stock_gdfx_holding_analyse_em_df = stock_gdfx_holding_analyse_em(date=\"20220331\")\n    print(stock_gdfx_holding_analyse_em_df)\n\n    stock_gdfx_free_holding_teamwork_em_df = stock_gdfx_free_holding_teamwork_em()\n    print(stock_gdfx_free_holding_teamwork_em_df)\n\n    stock_gdfx_holding_teamwork_em_df = stock_gdfx_holding_teamwork_em(symbol=\"社保\")\n    print(stock_gdfx_holding_teamwork_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_gdhs.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/10/1 22:00\nDesc: 东方财富网-数据中心-特色数据-股东户数\nhttps://data.eastmoney.com/gdhs/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_zh_a_gdhs(symbol: str = \"20230930\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-股东户数\n    https://data.eastmoney.com/gdhs/\n    :param symbol: choice of {\"最新\", \"每个季度末\"}, 其中 每个季度末需要写成 `20230930` 格式\n    :type symbol: str\n    :return: 股东户数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    if symbol == \"最新\":\n        params = {\n            \"sortColumns\": \"HOLD_NOTICE_DATE,SECURITY_CODE\",\n            \"sortTypes\": \"-1,-1\",\n            \"pageSize\": \"500\",\n            \"pageNumber\": \"1\",\n            \"reportName\": \"RPT_HOLDERNUMLATEST\",\n            \"columns\": \"SECURITY_CODE,SECURITY_NAME_ABBR,END_DATE,INTERVAL_CHRATE,AVG_MARKET_CAP,AVG_HOLD_NUM,\"\n            \"TOTAL_MARKET_CAP,TOTAL_A_SHARES,HOLD_NOTICE_DATE,HOLDER_NUM,PRE_HOLDER_NUM,\"\n            \"HOLDER_NUM_CHANGE,HOLDER_NUM_RATIO,END_DATE,PRE_END_DATE\",\n            \"quoteColumns\": \"f2,f3\",\n            \"source\": \"WEB\",\n            \"client\": \"WEB\",\n        }\n    else:\n        params = {\n            \"sortColumns\": \"HOLD_NOTICE_DATE,SECURITY_CODE\",\n            \"sortTypes\": \"-1,-1\",\n            \"pageSize\": \"500\",\n            \"pageNumber\": \"1\",\n            \"reportName\": \"RPT_HOLDERNUM_DET\",\n            \"columns\": \"SECURITY_CODE,SECURITY_NAME_ABBR,END_DATE,INTERVAL_CHRATE,AVG_MARKET_CAP,\"\n            \"AVG_HOLD_NUM,TOTAL_MARKET_CAP,TOTAL_A_SHARES,HOLD_NOTICE_DATE,HOLDER_NUM,\"\n            \"PRE_HOLDER_NUM,HOLDER_NUM_CHANGE,HOLDER_NUM_RATIO,END_DATE,PRE_END_DATE\",\n            \"quoteColumns\": \"f2,f3\",\n            \"source\": \"WEB\",\n            \"client\": \"WEB\",\n            \"filter\": f\"(END_DATE='{symbol[:4] + '-' + symbol[4:6] + '-' + symbol[6:]}')\",\n        }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page_num in tqdm(range(1, total_page_num + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page_num,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"代码\",\n        \"名称\",\n        \"股东户数统计截止日-本次\",\n        \"区间涨跌幅\",\n        \"户均持股市值\",\n        \"户均持股数量\",\n        \"总市值\",\n        \"总股本\",\n        \"公告日期\",\n        \"股东户数-本次\",\n        \"股东户数-上次\",\n        \"股东户数-增减\",\n        \"股东户数-增减比例\",\n        \"股东户数统计截止日-上次\",\n        \"最新价\",\n        \"涨跌幅\",\n    ]\n    big_df = big_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"股东户数-本次\",\n            \"股东户数-上次\",\n            \"股东户数-增减\",\n            \"股东户数-增减比例\",\n            \"区间涨跌幅\",\n            \"股东户数统计截止日-本次\",\n            \"股东户数统计截止日-上次\",\n            \"户均持股市值\",\n            \"户均持股数量\",\n            \"总市值\",\n            \"总股本\",\n            \"公告日期\",\n        ]\n    ]\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"股东户数-本次\"] = pd.to_numeric(big_df[\"股东户数-本次\"], errors=\"coerce\")\n    big_df[\"股东户数-上次\"] = pd.to_numeric(big_df[\"股东户数-上次\"], errors=\"coerce\")\n    big_df[\"股东户数-增减\"] = pd.to_numeric(big_df[\"股东户数-增减\"], errors=\"coerce\")\n    big_df[\"股东户数-增减比例\"] = pd.to_numeric(\n        big_df[\"股东户数-增减比例\"], errors=\"coerce\"\n    )\n    big_df[\"区间涨跌幅\"] = pd.to_numeric(big_df[\"区间涨跌幅\"], errors=\"coerce\")\n    big_df[\"股东户数统计截止日-本次\"] = pd.to_datetime(\n        big_df[\"股东户数统计截止日-本次\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"股东户数统计截止日-上次\"] = pd.to_datetime(\n        big_df[\"股东户数统计截止日-上次\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"户均持股市值\"] = pd.to_numeric(big_df[\"户均持股市值\"], errors=\"coerce\")\n    big_df[\"户均持股数量\"] = pd.to_numeric(big_df[\"户均持股数量\"], errors=\"coerce\")\n    big_df[\"总市值\"] = pd.to_numeric(big_df[\"总市值\"], errors=\"coerce\")\n    big_df[\"总股本\"] = pd.to_numeric(big_df[\"总股本\"], errors=\"coerce\")\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_zh_a_gdhs_detail_em(symbol: str = \"000001\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-股东户数详情\n    https://data.eastmoney.com/gdhs/detail/000002.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 股东户数\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"END_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_HOLDERNUM_DET\",\n        \"columns\": \"SECURITY_CODE,SECURITY_NAME_ABBR,CHANGE_SHARES,CHANGE_REASON,END_DATE,INTERVAL_CHRATE,\"\n        \"AVG_MARKET_CAP,AVG_HOLD_NUM,TOTAL_MARKET_CAP,TOTAL_A_SHARES,HOLD_NOTICE_DATE,HOLDER_NUM,\"\n        \"PRE_HOLDER_NUM,HOLDER_NUM_CHANGE,HOLDER_NUM_RATIO,END_DATE,PRE_END_DATE\",\n        \"quoteColumns\": \"f2,f3\",\n        \"filter\": f'(SECURITY_CODE=\"{symbol}\")',\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page_num in tqdm(range(1, total_page_num + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page_num,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"代码\",\n        \"名称\",\n        \"股本变动\",\n        \"股本变动原因\",\n        \"股东户数统计截止日\",\n        \"区间涨跌幅\",\n        \"户均持股市值\",\n        \"户均持股数量\",\n        \"总市值\",\n        \"总股本\",\n        \"股东户数公告日期\",\n        \"股东户数-本次\",\n        \"股东户数-上次\",\n        \"股东户数-增减\",\n        \"股东户数-增减比例\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"股东户数统计截止日\",\n            \"区间涨跌幅\",\n            \"股东户数-本次\",\n            \"股东户数-上次\",\n            \"股东户数-增减\",\n            \"股东户数-增减比例\",\n            \"户均持股市值\",\n            \"户均持股数量\",\n            \"总市值\",\n            \"总股本\",\n            \"股本变动\",\n            \"股本变动原因\",\n            \"股东户数公告日期\",\n            \"代码\",\n            \"名称\",\n        ]\n    ]\n    big_df[\"区间涨跌幅\"] = pd.to_numeric(big_df[\"区间涨跌幅\"], errors=\"coerce\")\n    big_df[\"股东户数-本次\"] = pd.to_numeric(big_df[\"股东户数-本次\"], errors=\"coerce\")\n    big_df[\"股东户数-上次\"] = pd.to_numeric(big_df[\"股东户数-上次\"], errors=\"coerce\")\n    big_df[\"股东户数-增减\"] = pd.to_numeric(big_df[\"股东户数-增减\"], errors=\"coerce\")\n    big_df[\"股东户数-增减比例\"] = pd.to_numeric(\n        big_df[\"股东户数-增减比例\"], errors=\"coerce\"\n    )\n    big_df[\"户均持股市值\"] = pd.to_numeric(big_df[\"户均持股市值\"], errors=\"coerce\")\n    big_df[\"户均持股数量\"] = pd.to_numeric(big_df[\"户均持股数量\"], errors=\"coerce\")\n    big_df[\"总市值\"] = pd.to_numeric(big_df[\"总市值\"], errors=\"coerce\")\n    big_df[\"总股本\"] = pd.to_numeric(big_df[\"总股本\"], errors=\"coerce\")\n    big_df[\"股本变动\"] = pd.to_numeric(big_df[\"股本变动\"], errors=\"coerce\")\n    big_df[\"股东户数统计截止日\"] = pd.to_datetime(\n        big_df[\"股东户数统计截止日\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"股东户数公告日期\"] = pd.to_datetime(\n        big_df[\"股东户数公告日期\"], errors=\"coerce\"\n    ).dt.date\n    big_df.sort_values(by=[\"股东户数统计截止日\"], ignore_index=True, inplace=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_a_gdhs_df = stock_zh_a_gdhs(symbol=\"20230930\")\n    print(stock_zh_a_gdhs_df)\n\n    stock_zh_a_gdhs_detail_em_df = stock_zh_a_gdhs_detail_em(symbol=\"002631\")\n    print(stock_zh_a_gdhs_detail_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_gdzjc_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/6/16 18:03\nDesc: 东方财富网-数据中心-特色数据-高管持股\nhttps://data.eastmoney.com/executive/gdzjc.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_ggcg_em(symbol: str = \"全部\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-高管持股\n    https://data.eastmoney.com/executive/gdzjc.html\n    :param symbol: choice of {\"全部\", \"股东增持\", \"股东减持\"}\n    :type symbol: str\n    :return: 高管持股\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"全部\": \"\",\n        \"股东增持\": '(DIRECTION=\"增持\")',\n        \"股东减持\": '(DIRECTION=\"减持\")',\n    }\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"END_DATE,SECURITY_CODE,EITIME\",\n        \"sortTypes\": \"-1,-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_SHARE_HOLDER_INCREASE\",\n        \"quoteColumns\": \"f2~01~SECURITY_CODE~NEWEST_PRICE,f3~01~SECURITY_CODE~CHANGE_RATE_QUOTES\",\n        \"quoteType\": \"0\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": symbol_map[symbol],\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.columns = [\n        \"持股变动信息-变动数量\",\n        \"公告日\",\n        \"代码\",\n        \"股东名称\",\n        \"持股变动信息-占总股本比例\",\n        \"_\",\n        \"-\",\n        \"变动截止日\",\n        \"-\",\n        \"变动后持股情况-持股总数\",\n        \"变动后持股情况-占总股本比例\",\n        \"_\",\n        \"变动后持股情况-占流通股比例\",\n        \"变动后持股情况-持流通股数\",\n        \"_\",\n        \"名称\",\n        \"持股变动信息-增减\",\n        \"_\",\n        \"持股变动信息-占流通股比例\",\n        \"变动开始日\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"股东名称\",\n            \"持股变动信息-增减\",\n            \"持股变动信息-变动数量\",\n            \"持股变动信息-占总股本比例\",\n            \"持股变动信息-占流通股比例\",\n            \"变动后持股情况-持股总数\",\n            \"变动后持股情况-占总股本比例\",\n            \"变动后持股情况-持流通股数\",\n            \"变动后持股情况-占流通股比例\",\n            \"变动开始日\",\n            \"变动截止日\",\n            \"公告日\",\n        ]\n    ]\n\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"持股变动信息-变动数量\"] = pd.to_numeric(big_df[\"持股变动信息-变动数量\"])\n    big_df[\"持股变动信息-占总股本比例\"] = pd.to_numeric(\n        big_df[\"持股变动信息-占总股本比例\"]\n    )\n    big_df[\"持股变动信息-占流通股比例\"] = pd.to_numeric(\n        big_df[\"持股变动信息-占流通股比例\"]\n    )\n    big_df[\"变动后持股情况-持股总数\"] = pd.to_numeric(big_df[\"变动后持股情况-持股总数\"])\n    big_df[\"变动后持股情况-占总股本比例\"] = pd.to_numeric(\n        big_df[\"变动后持股情况-占总股本比例\"]\n    )\n    big_df[\"变动后持股情况-持流通股数\"] = pd.to_numeric(\n        big_df[\"变动后持股情况-持流通股数\"]\n    )\n    big_df[\"变动后持股情况-占流通股比例\"] = pd.to_numeric(\n        big_df[\"变动后持股情况-占流通股比例\"]\n    )\n    big_df[\"变动开始日\"] = pd.to_datetime(big_df[\"变动开始日\"]).dt.date\n    big_df[\"变动截止日\"] = pd.to_datetime(big_df[\"变动截止日\"]).dt.date\n    big_df[\"公告日\"] = pd.to_datetime(big_df[\"公告日\"]).dt.date\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_ggcg_em_df = stock_ggcg_em(symbol=\"股东增持\")\n    print(stock_ggcg_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_gpzy_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/12/18 17:30\nDesc: 东方财富网-数据中心-特色数据-股权质押\n东方财富网-数据中心-特色数据-股权质押-股权质押市场概况: https://data.eastmoney.com/gpzy/marketProfile.aspx\n东方财富网-数据中心-特色数据-股权质押-上市公司质押比例: https://data.eastmoney.com/gpzy/pledgeRatio.aspx\n东方财富网-数据中心-特色数据-股权质押-重要股东股权质押明细: https://data.eastmoney.com/gpzy/pledgeDetail.aspx\n东方财富网-数据中心-特色数据-股权质押-质押机构分布统计-证券公司: https://data.eastmoney.com/gpzy/distributeStatistics.aspx\n东方财富网-数据中心-特色数据-股权质押-质押机构分布统计-银行: https://data.eastmoney.com/gpzy/distributeStatistics.aspx\n东方财富网-数据中心-特色数据-股权质押-行业数据: https://data.eastmoney.com/gpzy/industryData.aspx\n\"\"\"\n\nimport math\n\nimport pandas as pd\nimport requests\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_gpzy_profile_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-股权质押-股权质押市场概况\n    https://data.eastmoney.com/gpzy/marketProfile.aspx\n    :return: 股权质押市场概况\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"TRADE_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_CSDC_STATISTICS\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    for page in range(1, total_page + 1):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.columns = [\n        \"交易日期\",\n        \"质押总股数\",\n        \"质押总市值\",\n        \"沪深300指数\",\n        \"涨跌幅\",\n        \"A股质押总比例\",\n        \"质押公司数量\",\n        \"质押笔数\",\n    ]\n    big_df = big_df[\n        [\n            \"交易日期\",\n            \"A股质押总比例\",\n            \"质押公司数量\",\n            \"质押笔数\",\n            \"质押总股数\",\n            \"质押总市值\",\n            \"沪深300指数\",\n            \"涨跌幅\",\n        ]\n    ]\n    big_df[\"交易日期\"] = pd.to_datetime(big_df[\"交易日期\"], errors=\"coerce\").dt.date\n    big_df[\"A股质押总比例\"] = pd.to_numeric(big_df[\"A股质押总比例\"], errors=\"coerce\")\n    big_df[\"质押公司数量\"] = pd.to_numeric(big_df[\"质押公司数量\"], errors=\"coerce\")\n    big_df[\"质押笔数\"] = pd.to_numeric(big_df[\"质押笔数\"], errors=\"coerce\")\n    big_df[\"质押总股数\"] = pd.to_numeric(big_df[\"质押总股数\"], errors=\"coerce\")\n    big_df[\"质押总市值\"] = pd.to_numeric(big_df[\"质押总市值\"], errors=\"coerce\")\n    big_df[\"沪深300指数\"] = pd.to_numeric(big_df[\"沪深300指数\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"A股质押总比例\"] = big_df[\"A股质押总比例\"] / 100\n    big_df[\"A股质押总比例\"] = pd.to_numeric(big_df[\"A股质押总比例\"], errors=\"coerce\")\n    big_df.sort_values([\"交易日期\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef stock_gpzy_pledge_ratio_em(date: str = \"20240906\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-股权质押-上市公司质押比例\n    https://data.eastmoney.com/gpzy/pledgeRatio.aspx\n    :param date: 指定交易日, 访问 https://data.eastmoney.com/gpzy/pledgeRatio.aspx 查询\n    :type date: str\n    :return: 上市公司质押比例\n    :rtype: pandas.DataFrame\n    \"\"\"\n    trade_date = \"-\".join([date[:4], date[4:6], date[6:]])\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"PLEDGE_RATIO\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_CSDC_LIST\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"(TRADE_DATE='{trade_date}')\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"-\",\n        \"股票代码\",\n        \"股票简称\",\n        \"交易日期\",\n        \"质押比例\",\n        \"质押股数\",\n        \"质押笔数\",\n        \"无限售股质押数\",\n        \"限售股质押数\",\n        \"质押市值\",\n        \"所属行业\",\n        \"近一年涨跌幅\",\n        \"所属行业代码\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"交易日期\",\n            \"所属行业\",\n            \"质押比例\",\n            \"质押股数\",\n            \"质押市值\",\n            \"质押笔数\",\n            \"无限售股质押数\",\n            \"限售股质押数\",\n            \"近一年涨跌幅\",\n            \"所属行业代码\",\n        ]\n    ]\n    big_df[\"质押比例\"] = pd.to_numeric(big_df[\"质押比例\"], errors=\"coerce\")\n    big_df[\"质押股数\"] = pd.to_numeric(big_df[\"质押股数\"], errors=\"coerce\")\n    big_df[\"质押市值\"] = pd.to_numeric(big_df[\"质押市值\"], errors=\"coerce\")\n    big_df[\"质押笔数\"] = pd.to_numeric(big_df[\"质押笔数\"], errors=\"coerce\")\n    big_df[\"无限售股质押数\"] = pd.to_numeric(big_df[\"无限售股质押数\"], errors=\"coerce\")\n    big_df[\"限售股质押数\"] = pd.to_numeric(big_df[\"限售股质押数\"], errors=\"coerce\")\n    big_df[\"近一年涨跌幅\"] = pd.to_numeric(big_df[\"近一年涨跌幅\"], errors=\"coerce\")\n    big_df[\"交易日期\"] = pd.to_datetime(big_df[\"交易日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef _get_page_num_gpzy_market_pledge_ratio_detail(filter: str = None) -> int:\n    \"\"\"\n    东方财富网-数据中心-特色数据-股权质押-重要股东股权质押明细\n    https://data.eastmoney.com/gpzy/pledgeDetail.aspx\n    :return: int 获取 重要股东股权质押明细 的总页数\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"NOTICE_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPTA_APP_ACCUMDETAILS\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": filter,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = math.ceil(int(data_json[\"result\"][\"count\"]) / 500)\n    return total_page\n\n\ndef _stock_gpzy_pledge_ratio_detail_em(filter: str = None) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-股权质押-重要股东股权质押明细\n    https://data.eastmoney.com/gpzy/pledgeDetail.aspx\n    :return: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    total_page = _get_page_num_gpzy_market_pledge_ratio_detail(filter)\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params = {\n            \"sortColumns\": \"NOTICE_DATE\",\n            \"sortTypes\": \"-1\",\n            \"pageSize\": \"500\",\n            \"pageNumber\": page,\n            \"reportName\": \"RPTA_APP_ACCUMDETAILS\",\n            \"columns\": \"ALL\",\n            \"quoteColumns\": \"\",\n            \"source\": \"WEB\",\n            \"client\": \"WEB\",\n            \"filter\": filter,\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"股票简称\",\n        \"_\",\n        \"股票代码\",\n        \"股东名称\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"公告日期\",\n        \"质押机构\",\n        \"质押股份数量\",\n        \"占所持股份比例\",\n        \"占总股本比例\",\n        \"质押日收盘价\",\n        \"质押开始日期\",\n        \"质押结束日期\",\n        \"状态\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"预估平仓线\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"最新价\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"股东名称\",\n            \"质押股份数量\",\n            \"占所持股份比例\",\n            \"占总股本比例\",\n            \"质押机构\",\n            \"最新价\",\n            \"质押日收盘价\",\n            \"预估平仓线\",\n            \"质押开始日期\",\n            \"质押结束日期\",\n            \"状态\",\n            \"公告日期\",\n        ]\n    ]\n\n    big_df[\"质押股份数量\"] = pd.to_numeric(big_df[\"质押股份数量\"], errors=\"coerce\")\n    big_df[\"占所持股份比例\"] = pd.to_numeric(big_df[\"占所持股份比例\"], errors=\"coerce\")\n    big_df[\"占总股本比例\"] = pd.to_numeric(big_df[\"占总股本比例\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"质押日收盘价\"] = pd.to_numeric(big_df[\"质押日收盘价\"], errors=\"coerce\")\n    big_df[\"预估平仓线\"] = pd.to_numeric(big_df[\"预估平仓线\"], errors=\"coerce\")\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    big_df[\"质押开始日期\"] = pd.to_datetime(\n        big_df[\"质押开始日期\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"质押结束日期\"] = pd.to_datetime(\n        big_df[\"质押结束日期\"], errors=\"coerce\"\n    ).dt.date\n    return big_df\n\n\ndef stock_gpzy_pledge_ratio_detail_em() -> pd.DataFrame:\n    return _stock_gpzy_pledge_ratio_detail_em()\n\n\ndef stock_gpzy_individual_pledge_ratio_detail_em(symbol: str) -> pd.DataFrame:\n    return _stock_gpzy_pledge_ratio_detail_em(filter=f'(SECURITY_CODE=\"{symbol}\")')\n\n\ndef stock_gpzy_distribute_statistics_company_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-股权质押-质押机构分布统计-证券公司\n    https://data.eastmoney.com/gpzy/distributeStatistics.aspx\n    :return: 质押机构分布统计-证券公司\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"ORG_NUM\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_GDZY_ZYJG_SUM\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": '(PFORG_TYPE=\"证券\")',\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"质押机构\",\n        \"_\",\n        \"质押公司数量\",\n        \"质押笔数\",\n        \"质押数量\",\n        \"未达预警线比例\",\n        \"达到预警线未达平仓线比例\",\n        \"达到平仓线比例\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"质押机构\",\n            \"质押公司数量\",\n            \"质押笔数\",\n            \"质押数量\",\n            \"未达预警线比例\",\n            \"达到预警线未达平仓线比例\",\n            \"达到平仓线比例\",\n        ]\n    ]\n    temp_df[\"质押公司数量\"] = pd.to_numeric(temp_df[\"质押公司数量\"], errors=\"coerce\")\n    temp_df[\"质押笔数\"] = pd.to_numeric(temp_df[\"质押笔数\"], errors=\"coerce\")\n    temp_df[\"质押数量\"] = pd.to_numeric(temp_df[\"质押数量\"], errors=\"coerce\")\n    temp_df[\"未达预警线比例\"] = pd.to_numeric(\n        temp_df[\"未达预警线比例\"], errors=\"coerce\"\n    )\n    temp_df[\"达到预警线未达平仓线比例\"] = pd.to_numeric(\n        temp_df[\"达到预警线未达平仓线比例\"], errors=\"coerce\"\n    )\n    temp_df[\"达到平仓线比例\"] = pd.to_numeric(\n        temp_df[\"达到平仓线比例\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_gpzy_distribute_statistics_bank_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-股权质押-质押机构分布统计-银行\n    https://data.eastmoney.com/gpzy/distributeStatistics.aspx\n    :return: 质押机构分布统计-银行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"ORG_NUM\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_GDZY_ZYJG_SUM\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": '(PFORG_TYPE=\"银行\")',\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"质押机构\",\n        \"_\",\n        \"质押公司数量\",\n        \"质押笔数\",\n        \"质押数量\",\n        \"未达预警线比例\",\n        \"达到预警线未达平仓线比例\",\n        \"达到平仓线比例\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"质押机构\",\n            \"质押公司数量\",\n            \"质押笔数\",\n            \"质押数量\",\n            \"未达预警线比例\",\n            \"达到预警线未达平仓线比例\",\n            \"达到平仓线比例\",\n        ]\n    ]\n    temp_df[\"质押公司数量\"] = pd.to_numeric(temp_df[\"质押公司数量\"], errors=\"coerce\")\n    temp_df[\"质押笔数\"] = pd.to_numeric(temp_df[\"质押笔数\"], errors=\"coerce\")\n    temp_df[\"质押数量\"] = pd.to_numeric(temp_df[\"质押数量\"], errors=\"coerce\")\n    temp_df[\"未达预警线比例\"] = pd.to_numeric(\n        temp_df[\"未达预警线比例\"], errors=\"coerce\"\n    )\n    temp_df[\"达到预警线未达平仓线比例\"] = pd.to_numeric(\n        temp_df[\"达到预警线未达平仓线比例\"], errors=\"coerce\"\n    )\n    temp_df[\"达到平仓线比例\"] = pd.to_numeric(\n        temp_df[\"达到平仓线比例\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_gpzy_industry_data_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-股权质押-上市公司质押比例-行业数据\n    https://data.eastmoney.com/gpzy/industryData.aspx\n    :return: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"AVERAGE_PLEDGE_RATIO\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_CSDC_INDUSTRY_STATISTICS\",\n        \"columns\": \"INDUSTRY_CODE,INDUSTRY,TRADE_DATE,AVERAGE_PLEDGE_RATIO,ORG_NUM,PLEDGE_TOTAL_NUM,\"\n        \"TOTAL_PLEDGE_SHARES,PLEDGE_TOTAL_MARKETCAP\",\n        \"quoteColumns\": \"\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    temp_df.columns = [\n        \"序号\",\n        \"-\",\n        \"行业\",\n        \"统计时间\",\n        \"平均质押比例\",\n        \"公司家数\",\n        \"质押总笔数\",\n        \"质押总股本\",\n        \"最新质押市值\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"行业\",\n            \"平均质押比例\",\n            \"公司家数\",\n            \"质押总笔数\",\n            \"质押总股本\",\n            \"最新质押市值\",\n            \"统计时间\",\n        ]\n    ]\n    temp_df[\"统计时间\"] = pd.to_datetime(temp_df[\"统计时间\"], errors=\"coerce\").dt.date\n    temp_df[\"平均质押比例\"] = pd.to_numeric(temp_df[\"平均质押比例\"], errors=\"coerce\")\n    temp_df[\"公司家数\"] = pd.to_numeric(temp_df[\"公司家数\"], errors=\"coerce\")\n    temp_df[\"质押总笔数\"] = pd.to_numeric(temp_df[\"质押总笔数\"], errors=\"coerce\")\n    temp_df[\"质押总股本\"] = pd.to_numeric(temp_df[\"质押总股本\"], errors=\"coerce\")\n    temp_df[\"最新质押市值\"] = pd.to_numeric(temp_df[\"最新质押市值\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_gpzy_profile_em_df = stock_gpzy_profile_em()\n    print(stock_gpzy_profile_em_df)\n\n    stock_em_gpzy_pledge_ratio_df = stock_gpzy_pledge_ratio_em(date=\"20241220\")\n    print(stock_em_gpzy_pledge_ratio_df)\n\n    stock_gpzy_pledge_ratio_detail_em_df = stock_gpzy_pledge_ratio_detail_em()\n    print(stock_gpzy_pledge_ratio_detail_em_df)\n\n    stock_gpzy_individual_pledge_ratio_detail_em_df = (\n        stock_gpzy_individual_pledge_ratio_detail_em(symbol=\"603132\")\n    )\n    print(stock_gpzy_individual_pledge_ratio_detail_em_df)\n\n    stock_em_gpzy_distribute_statistics_company_df = (\n        stock_gpzy_distribute_statistics_company_em()\n    )\n    print(stock_em_gpzy_distribute_statistics_company_df)\n\n    stock_em_gpzy_distribute_statistics_bank_df = (\n        stock_gpzy_distribute_statistics_bank_em()\n    )\n    print(stock_em_gpzy_distribute_statistics_bank_df)\n\n    stock_gpzy_industry_data_em_df = stock_gpzy_industry_data_em()\n    print(stock_gpzy_industry_data_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_gxl_lg.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/4/10 16:05\nDesc: 乐咕乐股-股息率-A 股股息率\nhttps://legulegu.com/stockdata/guxilv\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.stock_feature.stock_a_indicator import get_token_lg, get_cookie_csrf\n\n\ndef stock_a_gxl_lg(symbol: str = \"上证A股\") -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-股息率-A 股股息率\n    https://legulegu.com/stockdata/guxilv\n    :param symbol: choice of {\"上证A股\", \"深证A股\", \"创业板\", \"科创板\"}\n    :type symbol: str\n    :return: A 股股息率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"上证A股\": \"shangzheng\",\n        \"深证A股\": \"shenzheng\",\n        \"创业板\": \"chuangyeban\",\n        \"科创板\": \"kechuangban\",\n    }\n    url = \"https://legulegu.com/api/stockdata/guxilv\"\n    token = get_token_lg()\n    params = {\"token\": token}\n    r = requests.get(\n        url,\n        params=params,\n        **get_cookie_csrf(url=\"https://legulegu.com/stockdata/guxilv\"),\n    )\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[symbol_map[symbol]])\n    temp_df[\"date\"] = (\n        pd.to_datetime(temp_df[\"date\"], unit=\"ms\") + pd.Timedelta(hours=8)\n    ).dt.date\n    temp_df.rename(columns={\"addDvTtm\": \"股息率\", \"date\": \"日期\"}, inplace=True)\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"股息率\",\n        ]\n    ]\n    temp_df[\"股息率\"] = pd.to_numeric(temp_df[\"股息率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_hk_gxl_lg() -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股-股息率-恒生指数股息率\n    https://legulegu.com/stockdata/market/hk/dv/hsi\n    :return: 恒生指数股息率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://legulegu.com/api/stockdata/hs\"\n    token = get_token_lg()\n    params = {\"token\": token, \"indexCode\": \"HSI\"}\n    r = requests.get(\n        url,\n        params=params,\n        **get_cookie_csrf(url=\"https://legulegu.com/stockdata/market/hk/dv/hsi\"),\n    )\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json)\n    temp_df[\"date\"] = (\n        pd.to_datetime(temp_df[\"date\"], unit=\"ms\") + pd.Timedelta(hours=8)\n    ).dt.date\n    temp_df.rename(columns={\"addDvRatio\": \"股息率\", \"date\": \"日期\"}, inplace=True)\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"股息率\",\n        ]\n    ]\n    temp_df[\"股息率\"] = pd.to_numeric(temp_df[\"股息率\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_a_gxl_lg_df = stock_a_gxl_lg(symbol=\"上证A股\")\n    print(stock_a_gxl_lg_df)\n\n    stock_hk_gxl_lg_df = stock_hk_gxl_lg()\n    print(stock_hk_gxl_lg_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_hist_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/10 18:00\nDesc: 东方财富网-行情首页-沪深京 A 股\nhttps://quote.eastmoney.com/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.func import fetch_paginated_data\n\n\ndef stock_zh_a_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-沪深京 A 股-实时行情\n    https://quote.eastmoney.com/center/gridlist.html#hs_a_board\n    :return: 实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://82.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f12\",\n        \"fs\": \"m:0 t:6,m:0 t:80,m:1 t:2,m:1 t:23,m:0 t:81 s:2048\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,\"\n        \"f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"index\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"市盈率-动态\",\n        \"量比\",\n        \"5分钟涨跌\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"总市值\",\n        \"流通市值\",\n        \"涨速\",\n        \"市净率\",\n        \"60日涨跌幅\",\n        \"年初至今涨跌幅\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df.rename(columns={\"index\": \"序号\"}, inplace=True)\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"最高\",\n            \"最低\",\n            \"今开\",\n            \"昨收\",\n            \"量比\",\n            \"换手率\",\n            \"市盈率-动态\",\n            \"市净率\",\n            \"总市值\",\n            \"流通市值\",\n            \"涨速\",\n            \"5分钟涨跌\",\n            \"60日涨跌幅\",\n            \"年初至今涨跌幅\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"量比\"] = pd.to_numeric(temp_df[\"量比\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"市盈率-动态\"] = pd.to_numeric(temp_df[\"市盈率-动态\"], errors=\"coerce\")\n    temp_df[\"市净率\"] = pd.to_numeric(temp_df[\"市净率\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"流通市值\"] = pd.to_numeric(temp_df[\"流通市值\"], errors=\"coerce\")\n    temp_df[\"涨速\"] = pd.to_numeric(temp_df[\"涨速\"], errors=\"coerce\")\n    temp_df[\"5分钟涨跌\"] = pd.to_numeric(temp_df[\"5分钟涨跌\"], errors=\"coerce\")\n    temp_df[\"60日涨跌幅\"] = pd.to_numeric(temp_df[\"60日涨跌幅\"], errors=\"coerce\")\n    temp_df[\"年初至今涨跌幅\"] = pd.to_numeric(\n        temp_df[\"年初至今涨跌幅\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_sh_a_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-沪 A 股-实时行情\n    https://quote.eastmoney.com/center/gridlist.html#hs_a_board\n    :return: 实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://82.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f12\",\n        \"fs\": \"m:1 t:2,m:1 t:23\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,\"\n        \"f24,f25,f22,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"市盈率-动态\",\n        \"量比\",\n        \"5分钟涨跌\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"总市值\",\n        \"流通市值\",\n        \"涨速\",\n        \"市净率\",\n        \"60日涨跌幅\",\n        \"年初至今涨跌幅\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"最高\",\n            \"最低\",\n            \"今开\",\n            \"昨收\",\n            \"量比\",\n            \"换手率\",\n            \"市盈率-动态\",\n            \"市净率\",\n            \"总市值\",\n            \"流通市值\",\n            \"涨速\",\n            \"5分钟涨跌\",\n            \"60日涨跌幅\",\n            \"年初至今涨跌幅\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"量比\"] = pd.to_numeric(temp_df[\"量比\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"市盈率-动态\"] = pd.to_numeric(temp_df[\"市盈率-动态\"], errors=\"coerce\")\n    temp_df[\"市净率\"] = pd.to_numeric(temp_df[\"市净率\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"流通市值\"] = pd.to_numeric(temp_df[\"流通市值\"], errors=\"coerce\")\n    temp_df[\"涨速\"] = pd.to_numeric(temp_df[\"涨速\"], errors=\"coerce\")\n    temp_df[\"5分钟涨跌\"] = pd.to_numeric(temp_df[\"5分钟涨跌\"], errors=\"coerce\")\n    temp_df[\"60日涨跌幅\"] = pd.to_numeric(temp_df[\"60日涨跌幅\"], errors=\"coerce\")\n    temp_df[\"年初至今涨跌幅\"] = pd.to_numeric(\n        temp_df[\"年初至今涨跌幅\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_sz_a_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-深 A 股-实时行情\n    https://quote.eastmoney.com/center/gridlist.html#hs_a_board\n    :return: 实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://82.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f12\",\n        \"fs\": \"m:0 t:6,m:0 t:80\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,\"\n        \"f25,f22,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"市盈率-动态\",\n        \"量比\",\n        \"5分钟涨跌\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"总市值\",\n        \"流通市值\",\n        \"涨速\",\n        \"市净率\",\n        \"60日涨跌幅\",\n        \"年初至今涨跌幅\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"最高\",\n            \"最低\",\n            \"今开\",\n            \"昨收\",\n            \"量比\",\n            \"换手率\",\n            \"市盈率-动态\",\n            \"市净率\",\n            \"总市值\",\n            \"流通市值\",\n            \"涨速\",\n            \"5分钟涨跌\",\n            \"60日涨跌幅\",\n            \"年初至今涨跌幅\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"量比\"] = pd.to_numeric(temp_df[\"量比\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"市盈率-动态\"] = pd.to_numeric(temp_df[\"市盈率-动态\"], errors=\"coerce\")\n    temp_df[\"市净率\"] = pd.to_numeric(temp_df[\"市净率\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"流通市值\"] = pd.to_numeric(temp_df[\"流通市值\"], errors=\"coerce\")\n    temp_df[\"涨速\"] = pd.to_numeric(temp_df[\"涨速\"], errors=\"coerce\")\n    temp_df[\"5分钟涨跌\"] = pd.to_numeric(temp_df[\"5分钟涨跌\"], errors=\"coerce\")\n    temp_df[\"60日涨跌幅\"] = pd.to_numeric(temp_df[\"60日涨跌幅\"], errors=\"coerce\")\n    temp_df[\"年初至今涨跌幅\"] = pd.to_numeric(\n        temp_df[\"年初至今涨跌幅\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_bj_a_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-京 A 股-实时行情\n    https://quote.eastmoney.com/center/gridlist.html#hs_a_board\n    :return: 实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://82.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f12\",\n        \"fs\": \"m:0 t:81 s:2048\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24\"\n        \",f25,f22,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"市盈率-动态\",\n        \"量比\",\n        \"5分钟涨跌\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"总市值\",\n        \"流通市值\",\n        \"涨速\",\n        \"市净率\",\n        \"60日涨跌幅\",\n        \"年初至今涨跌幅\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"最高\",\n            \"最低\",\n            \"今开\",\n            \"昨收\",\n            \"量比\",\n            \"换手率\",\n            \"市盈率-动态\",\n            \"市净率\",\n            \"总市值\",\n            \"流通市值\",\n            \"涨速\",\n            \"5分钟涨跌\",\n            \"60日涨跌幅\",\n            \"年初至今涨跌幅\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"量比\"] = pd.to_numeric(temp_df[\"量比\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"市盈率-动态\"] = pd.to_numeric(temp_df[\"市盈率-动态\"], errors=\"coerce\")\n    temp_df[\"市净率\"] = pd.to_numeric(temp_df[\"市净率\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"流通市值\"] = pd.to_numeric(temp_df[\"流通市值\"], errors=\"coerce\")\n    temp_df[\"涨速\"] = pd.to_numeric(temp_df[\"涨速\"], errors=\"coerce\")\n    temp_df[\"5分钟涨跌\"] = pd.to_numeric(temp_df[\"5分钟涨跌\"], errors=\"coerce\")\n    temp_df[\"60日涨跌幅\"] = pd.to_numeric(temp_df[\"60日涨跌幅\"], errors=\"coerce\")\n    temp_df[\"年初至今涨跌幅\"] = pd.to_numeric(\n        temp_df[\"年初至今涨跌幅\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_new_a_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-新股-实时行情\n    https://quote.eastmoney.com/center/gridlist.html#newshares\n    :return: 实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://82.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"wbp2u\": \"|0|0|0|web\",\n        \"fid\": \"f26\",\n        \"fs\": \"m:0 f:8,m:1 f:8\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,\"\n        \"f25,f26,f22,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"市盈率-动态\",\n        \"量比\",\n        \"5分钟涨跌\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"总市值\",\n        \"流通市值\",\n        \"涨速\",\n        \"市净率\",\n        \"60日涨跌幅\",\n        \"年初至今涨跌幅\",\n        \"上市日期\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"最高\",\n            \"最低\",\n            \"今开\",\n            \"昨收\",\n            \"量比\",\n            \"换手率\",\n            \"市盈率-动态\",\n            \"市净率\",\n            \"上市日期\",\n            \"总市值\",\n            \"流通市值\",\n            \"涨速\",\n            \"5分钟涨跌\",\n            \"60日涨跌幅\",\n            \"年初至今涨跌幅\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"量比\"] = pd.to_numeric(temp_df[\"量比\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"市盈率-动态\"] = pd.to_numeric(temp_df[\"市盈率-动态\"], errors=\"coerce\")\n    temp_df[\"市净率\"] = pd.to_numeric(temp_df[\"市净率\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"流通市值\"] = pd.to_numeric(temp_df[\"流通市值\"], errors=\"coerce\")\n    temp_df[\"涨速\"] = pd.to_numeric(temp_df[\"涨速\"], errors=\"coerce\")\n    temp_df[\"5分钟涨跌\"] = pd.to_numeric(temp_df[\"5分钟涨跌\"], errors=\"coerce\")\n    temp_df[\"60日涨跌幅\"] = pd.to_numeric(temp_df[\"60日涨跌幅\"], errors=\"coerce\")\n    temp_df[\"年初至今涨跌幅\"] = pd.to_numeric(\n        temp_df[\"年初至今涨跌幅\"], errors=\"coerce\"\n    )\n\n    temp_df[\"上市日期\"] = pd.to_datetime(temp_df[\"上市日期\"], format=\"%Y%m%d\").dt.date\n    return temp_df\n\n\ndef stock_cy_a_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-创业板-实时行情\n    https://quote.eastmoney.com/center/gridlist.html#gem_board\n    :return: 实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://7.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"wbp2u\": \"|0|0|0|web\",\n        \"fid\": \"f12\",\n        \"fs\": \"m:0 t:80\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,\"\n        \"f23,f24,f25,f22,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"市盈率-动态\",\n        \"量比\",\n        \"5分钟涨跌\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"总市值\",\n        \"流通市值\",\n        \"涨速\",\n        \"市净率\",\n        \"60日涨跌幅\",\n        \"年初至今涨跌幅\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"最高\",\n            \"最低\",\n            \"今开\",\n            \"昨收\",\n            \"量比\",\n            \"换手率\",\n            \"市盈率-动态\",\n            \"市净率\",\n            \"总市值\",\n            \"流通市值\",\n            \"涨速\",\n            \"5分钟涨跌\",\n            \"60日涨跌幅\",\n            \"年初至今涨跌幅\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"量比\"] = pd.to_numeric(temp_df[\"量比\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"市盈率-动态\"] = pd.to_numeric(temp_df[\"市盈率-动态\"], errors=\"coerce\")\n    temp_df[\"市净率\"] = pd.to_numeric(temp_df[\"市净率\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"流通市值\"] = pd.to_numeric(temp_df[\"流通市值\"], errors=\"coerce\")\n    temp_df[\"涨速\"] = pd.to_numeric(temp_df[\"涨速\"], errors=\"coerce\")\n    temp_df[\"5分钟涨跌\"] = pd.to_numeric(temp_df[\"5分钟涨跌\"], errors=\"coerce\")\n    temp_df[\"60日涨跌幅\"] = pd.to_numeric(temp_df[\"60日涨跌幅\"], errors=\"coerce\")\n    temp_df[\"年初至今涨跌幅\"] = pd.to_numeric(\n        temp_df[\"年初至今涨跌幅\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_kc_a_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-科创板-实时行情\n    https://quote.eastmoney.com/center/gridlist.html#kcb_board\n    :return: 实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://7.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"wbp2u\": \"|0|0|0|web\",\n        \"fid\": \"f12\",\n        \"fs\": \"m:1 t:23\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,\"\n        \"f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"市盈率-动态\",\n        \"量比\",\n        \"5分钟涨跌\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"总市值\",\n        \"流通市值\",\n        \"涨速\",\n        \"市净率\",\n        \"60日涨跌幅\",\n        \"年初至今涨跌幅\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"最高\",\n            \"最低\",\n            \"今开\",\n            \"昨收\",\n            \"量比\",\n            \"换手率\",\n            \"市盈率-动态\",\n            \"市净率\",\n            \"总市值\",\n            \"流通市值\",\n            \"涨速\",\n            \"5分钟涨跌\",\n            \"60日涨跌幅\",\n            \"年初至今涨跌幅\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"量比\"] = pd.to_numeric(temp_df[\"量比\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"市盈率-动态\"] = pd.to_numeric(temp_df[\"市盈率-动态\"], errors=\"coerce\")\n    temp_df[\"市净率\"] = pd.to_numeric(temp_df[\"市净率\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"流通市值\"] = pd.to_numeric(temp_df[\"流通市值\"], errors=\"coerce\")\n    temp_df[\"涨速\"] = pd.to_numeric(temp_df[\"涨速\"], errors=\"coerce\")\n    temp_df[\"5分钟涨跌\"] = pd.to_numeric(temp_df[\"5分钟涨跌\"], errors=\"coerce\")\n    temp_df[\"60日涨跌幅\"] = pd.to_numeric(temp_df[\"60日涨跌幅\"], errors=\"coerce\")\n    temp_df[\"年初至今涨跌幅\"] = pd.to_numeric(\n        temp_df[\"年初至今涨跌幅\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_zh_ab_comparison_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-沪深京个股-AB股比价-全部AB股比价\n    https://quote.eastmoney.com/center/gridlist.html#ab_comparison\n    :return: 实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"np\": \"1\",\n        \"fltt\": \"1\",\n        \"invt\": \"2\",\n        \"fs\": \"m:1+b:BK0498,m:0+b:BK0498\",\n        \"fields\": \"f201,f202,f203,f196,f200,f197,f152,f12,f13,f14,f1,f2,f4,f3,f199\",\n        \"fid\": \"f199\",\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"dect\": \"1\",\n        \"wbp2u\": \"|0|0|0|web\",\n    }\n    columns_map = {\n        \"index\": \"序号\",\n        \"f1\": \"-\",\n        \"f2\": \"最新价B\",\n        \"f3\": \"涨跌幅B\",\n        \"f4\": \"-\",\n        \"f12\": \"A股代码\",\n        \"f13\": \"-\",\n        \"f14\": \"A股名称\",\n        \"f152\": \"-\",\n        \"f196\": \"最新价A\",\n        \"f197\": \"涨跌幅A\",\n        \"f199\": \"比价\",\n        \"f200\": \"-\",\n        \"f201\": \"B股代码\",\n        \"f202\": \"-\",\n        \"f203\": \"B股名称\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df = temp_df.rename(columns=columns_map)\n    list_name = [value for key, value in columns_map.items() if value != \"_\"]\n    temp_df = temp_df[list_name]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"B股代码\",\n            \"B股名称\",\n            \"最新价B\",\n            \"涨跌幅B\",\n            \"A股代码\",\n            \"A股名称\",\n            \"最新价A\",\n            \"涨跌幅A\",\n            \"比价\",\n        ]\n    ]\n    temp_df[\"最新价B\"] = pd.to_numeric(temp_df[\"最新价B\"], errors=\"coerce\") / 100\n    temp_df[\"涨跌幅B\"] = pd.to_numeric(temp_df[\"涨跌幅B\"], errors=\"coerce\") / 100\n    temp_df[\"最新价A\"] = pd.to_numeric(temp_df[\"最新价A\"], errors=\"coerce\") / 100\n    temp_df[\"涨跌幅A\"] = pd.to_numeric(temp_df[\"涨跌幅A\"], errors=\"coerce\") / 100\n    temp_df[\"比价\"] = pd.to_numeric(temp_df[\"比价\"], errors=\"coerce\") / 100\n    return temp_df\n\n\ndef stock_zh_b_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网- B 股-实时行情\n    https://quote.eastmoney.com/center/gridlist.html#hs_a_board\n    :return: 实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://28.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f12\",\n        \"fs\": \"m:0 t:7,m:1 t:3\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20\"\n        \",f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"市盈率-动态\",\n        \"量比\",\n        \"5分钟涨跌\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"总市值\",\n        \"流通市值\",\n        \"涨速\",\n        \"市净率\",\n        \"60日涨跌幅\",\n        \"年初至今涨跌幅\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"最高\",\n            \"最低\",\n            \"今开\",\n            \"昨收\",\n            \"量比\",\n            \"换手率\",\n            \"市盈率-动态\",\n            \"市净率\",\n            \"总市值\",\n            \"流通市值\",\n            \"涨速\",\n            \"5分钟涨跌\",\n            \"60日涨跌幅\",\n            \"年初至今涨跌幅\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"量比\"] = pd.to_numeric(temp_df[\"量比\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"市盈率-动态\"] = pd.to_numeric(temp_df[\"市盈率-动态\"], errors=\"coerce\")\n    temp_df[\"市净率\"] = pd.to_numeric(temp_df[\"市净率\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"流通市值\"] = pd.to_numeric(temp_df[\"流通市值\"], errors=\"coerce\")\n    temp_df[\"涨速\"] = pd.to_numeric(temp_df[\"涨速\"], errors=\"coerce\")\n    temp_df[\"5分钟涨跌\"] = pd.to_numeric(temp_df[\"5分钟涨跌\"], errors=\"coerce\")\n    temp_df[\"60日涨跌幅\"] = pd.to_numeric(temp_df[\"60日涨跌幅\"], errors=\"coerce\")\n    temp_df[\"年初至今涨跌幅\"] = pd.to_numeric(\n        temp_df[\"年初至今涨跌幅\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_zh_a_hist(\n    symbol: str = \"000001\",\n    period: str = \"daily\",\n    start_date: str = \"19700101\",\n    end_date: str = \"20500101\",\n    adjust: str = \"\",\n    timeout: float = None,\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情首页-沪深京 A 股-每日行情\n    https://quote.eastmoney.com/concept/sh603777.html?from=classic\n    :param symbol: 股票代码\n    :type symbol: str\n    :param period: choice of {'daily', 'weekly', 'monthly'}\n    :type period: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :param adjust: choice of {\"qfq\": \"前复权\", \"hfq\": \"后复权\", \"\": \"不复权\"}\n    :type adjust: str\n    :param timeout: choice of None or a positive float number\n    :type timeout: float\n    :return: 每日行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    market_code = 1 if symbol.startswith(\"6\") else 0\n    adjust_dict = {\"qfq\": \"1\", \"hfq\": \"2\", \"\": \"0\"}\n    period_dict = {\"daily\": \"101\", \"weekly\": \"102\", \"monthly\": \"103\"}\n    url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n    params = {\n        \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116\",\n        \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n        \"klt\": period_dict[period],\n        \"fqt\": adjust_dict[adjust],\n        \"secid\": f\"{market_code}.{symbol}\",\n        \"beg\": start_date,\n        \"end\": end_date,\n    }\n    r = requests.get(url, params=params, timeout=timeout)\n    data_json = r.json()\n    if not (data_json[\"data\"] and data_json[\"data\"][\"klines\"]):\n        return pd.DataFrame()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df[\"股票代码\"] = symbol\n    temp_df.columns = [\n        \"日期\",\n        \"开盘\",\n        \"收盘\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"换手率\",\n        \"股票代码\",\n    ]\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df = temp_df[\n        [\n            \"日期\",\n            \"股票代码\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"换手率\",\n        ]\n    ]\n    return temp_df\n\n\ndef stock_zh_a_hist_min_em(\n    symbol: str = \"000001\",\n    start_date: str = \"1979-09-01 09:32:00\",\n    end_date: str = \"2222-01-01 09:32:00\",\n    period: str = \"5\",\n    adjust: str = \"\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情首页-沪深京 A 股-每日分时行情\n    https://quote.eastmoney.com/concept/sh603777.html?from=classic\n    :param symbol: 股票代码\n    :type symbol: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :param period: choice of {'1', '5', '15', '30', '60'}\n    :type period: str\n    :param adjust: choice of {'', 'qfq', 'hfq'}\n    :type adjust: str\n    :return: 每日分时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    market_code = 1 if symbol.startswith(\"6\") else 0\n    adjust_map = {\n        \"\": \"0\",\n        \"qfq\": \"1\",\n        \"hfq\": \"2\",\n    }\n    if period == \"1\":\n        url = \"https://push2his.eastmoney.com/api/qt/stock/trends2/get\"\n        params = {\n            \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58\",\n            \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n            \"ndays\": \"5\",\n            \"iscr\": \"0\",\n            \"secid\": f\"{market_code}.{symbol}\",\n        }\n        r = requests.get(url, timeout=15, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"trends\"]]\n        )\n        temp_df.columns = [\n            \"时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"均价\",\n        ]\n        temp_df.index = pd.to_datetime(temp_df[\"时间\"])\n        temp_df = temp_df[start_date:end_date]\n        temp_df.reset_index(drop=True, inplace=True)\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"均价\"] = pd.to_numeric(temp_df[\"均价\"], errors=\"coerce\")\n        temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"]).astype(str)\n        return temp_df\n    else:\n        url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n        params = {\n            \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n            \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n            \"klt\": period,\n            \"fqt\": adjust_map[adjust],\n            \"secid\": f\"{market_code}.{symbol}\",\n            \"beg\": \"0\",\n            \"end\": \"20500000\",\n        }\n        r = requests.get(url, timeout=15, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"klines\"]]\n        )\n        temp_df.columns = [\n            \"时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"换手率\",\n        ]\n        temp_df.index = pd.to_datetime(temp_df[\"时间\"])\n        temp_df = temp_df[start_date:end_date]\n        temp_df.reset_index(drop=True, inplace=True)\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n        temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n        temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n        temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n        temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"]).astype(str)\n        temp_df = temp_df[\n            [\n                \"时间\",\n                \"开盘\",\n                \"收盘\",\n                \"最高\",\n                \"最低\",\n                \"涨跌幅\",\n                \"涨跌额\",\n                \"成交量\",\n                \"成交额\",\n                \"振幅\",\n                \"换手率\",\n            ]\n        ]\n        return temp_df\n\n\ndef stock_zh_a_hist_pre_min_em(\n    symbol: str = \"000001\",\n    start_time: str = \"09:00:00\",\n    end_time: str = \"15:50:00\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情首页-沪深京 A 股-每日分时行情包含盘前数据\n    https://quote.eastmoney.com/concept/sh603777.html?from=classic\n    :param symbol: 股票代码\n    :type symbol: str\n    :param start_time: 开始时间\n    :type start_time: str\n    :param end_time: 结束时间\n    :type end_time: str\n    :return: 每日分时行情包含盘前数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    market_code = 1 if symbol.startswith(\"6\") else 0\n    url = \"https://push2.eastmoney.com/api/qt/stock/trends2/get\"\n    params = {\n        \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58\",\n        \"ndays\": \"1\",\n        \"iscr\": \"1\",\n        \"iscca\": \"0\",\n        \"secid\": f\"{market_code}.{symbol}\",\n    }\n    r = requests.get(url, timeout=15, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"trends\"]])\n    temp_df.columns = [\n        \"时间\",\n        \"开盘\",\n        \"收盘\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"最新价\",\n    ]\n    temp_df.index = pd.to_datetime(temp_df[\"时间\"])\n    date_format = temp_df.index[0].date().isoformat()\n    temp_df = temp_df[date_format + \" \" + start_time : date_format + \" \" + end_time]\n    temp_df.reset_index(drop=True, inplace=True)\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"]).astype(str)\n    return temp_df\n\n\ndef stock_hk_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-港股-实时行情\n    https://quote.eastmoney.com/center/gridlist.html#hk_stocks\n    :return: 港股-实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://72.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f12\",\n        \"fs\": \"m:128 t:3,m:128 t:4,m:128 t:1,m:128 t:2\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,\"\n        \"f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"市盈率-动态\",\n        \"量比\",\n        \"_\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"市净率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"昨收\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    temp_df[\"序号\"] = pd.to_numeric(temp_df[\"序号\"], errors=\"coerce\")\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_hk_main_board_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-港股-主板-实时行情\n    https://quote.eastmoney.com/center/gridlist.html#hk_mainboard\n    :return: 港股-主板-实时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://81.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f12\",\n        \"fs\": \"m:128 t:3\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,\"\n        \"f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"市盈率-动态\",\n        \"量比\",\n        \"_\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"市净率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"昨收\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    temp_df[\"序号\"] = pd.to_numeric(temp_df[\"序号\"], errors=\"coerce\")\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"今开\"] = pd.to_numeric(temp_df[\"今开\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"昨收\"] = pd.to_numeric(temp_df[\"昨收\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_hk_hist(\n    symbol: str = \"00593\",\n    period: str = \"daily\",\n    start_date: str = \"19700101\",\n    end_date: str = \"22220101\",\n    adjust: str = \"\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情-港股-每日行情\n    https://quote.eastmoney.com/hk/08367.html\n    :param symbol: 港股-每日行情\n    :type symbol: str\n    :param period: choice of {'daily', 'weekly', 'monthly'}\n    :type period: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :param adjust: choice of {\"qfq\": \"1\", \"hfq\": \"2\", \"\": \"不复权\"}\n    :type adjust: str\n    :return: 每日行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    adjust_dict = {\"qfq\": \"1\", \"hfq\": \"2\", \"\": \"0\"}\n    period_dict = {\"daily\": \"101\", \"weekly\": \"102\", \"monthly\": \"103\"}\n    url = \"https://33.push2his.eastmoney.com/api/qt/stock/kline/get\"\n    params = {\n        \"secid\": f\"116.{symbol}\",\n        \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n        \"klt\": period_dict[period],\n        \"fqt\": adjust_dict[adjust],\n        \"end\": \"20500000\",\n        \"lmt\": \"1000000\",\n    }\n    r = requests.get(url, timeout=15, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    if temp_df.empty:\n        return pd.DataFrame()\n    temp_df.columns = [\n        \"日期\",\n        \"开盘\",\n        \"收盘\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"换手率\",\n    ]\n    temp_df.index = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\")\n    temp_df = temp_df[start_date:end_date]\n    if temp_df.empty:\n        return pd.DataFrame()\n    temp_df.reset_index(inplace=True, drop=True)\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\ndef stock_hk_hist_min_em(\n    symbol: str = \"01611\",\n    period: str = \"1\",\n    adjust: str = \"\",\n    start_date: str = \"1979-09-01 09:32:00\",\n    end_date: str = \"2222-01-01 09:32:00\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情-港股-每日分时行情\n    https://quote.eastmoney.com/hk/00948.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :param period: choice of {'1', '5', '15', '30', '60'}\n    :type period: str\n    :param adjust: choice of {'', 'qfq', 'hfq'}\n    :type adjust: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :return: 每日分时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    adjust_map = {\n        \"\": \"0\",\n        \"qfq\": \"1\",\n        \"hfq\": \"2\",\n    }\n    if period == \"1\":\n        url = \"https://push2his.eastmoney.com/api/qt/stock/trends2/get\"\n        params = {\n            \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58\",\n            \"iscr\": \"0\",\n            \"ndays\": \"5\",\n            \"secid\": f\"116.{symbol}\",\n        }\n        r = requests.get(url, timeout=15, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"trends\"]]\n        )\n        temp_df.columns = [\n            \"时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"最新价\",\n        ]\n        temp_df.index = pd.to_datetime(temp_df[\"时间\"])\n        temp_df = temp_df[start_date:end_date]\n        temp_df.reset_index(drop=True, inplace=True)\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n        temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"]).astype(str)\n        return temp_df\n    else:\n        url = \"https://push2his.eastmoney.com/api/qt/stock/kline/get\"\n        params = {\n            \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n            \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n            \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n            \"klt\": period,\n            \"fqt\": adjust_map[adjust],\n            \"secid\": f\"116.{symbol}\",\n            \"beg\": \"0\",\n            \"end\": \"20500000\",\n        }\n        r = requests.get(url, timeout=15, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(\n            [item.split(\",\") for item in data_json[\"data\"][\"klines\"]]\n        )\n        temp_df.columns = [\n            \"时间\",\n            \"开盘\",\n            \"收盘\",\n            \"最高\",\n            \"最低\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"涨跌幅\",\n            \"涨跌额\",\n            \"换手率\",\n        ]\n        temp_df.index = pd.to_datetime(temp_df[\"时间\"])\n        temp_df = temp_df[start_date:end_date]\n        temp_df.reset_index(drop=True, inplace=True)\n        temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n        temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n        temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n        temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n        temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n        temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n        temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n        temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"]).astype(str)\n        temp_df = temp_df[\n            [\n                \"时间\",\n                \"开盘\",\n                \"收盘\",\n                \"最高\",\n                \"最低\",\n                \"涨跌幅\",\n                \"涨跌额\",\n                \"成交量\",\n                \"成交额\",\n                \"振幅\",\n                \"换手率\",\n            ]\n        ]\n    return temp_df\n\n\ndef stock_us_spot_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-美股-实时行情\n    https://quote.eastmoney.com/center/gridlist.html#us_stocks\n    :return: 美股-实时行情; 延迟 15 min\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://72.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"invt\": \"2\",\n        \"fid\": \"f12\",\n        \"fs\": \"m:105,m:106,m:107\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,\"\n        \"f21,f23,f24,f25,f26,f22,f33,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url, params)\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"换手率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"简称\",\n        \"编码\",\n        \"名称\",\n        \"最高价\",\n        \"最低价\",\n        \"开盘价\",\n        \"昨收价\",\n        \"总市值\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"市盈率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df[\"代码\"] = temp_df[\"编码\"].astype(str) + \".\" + temp_df[\"简称\"]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"开盘价\",\n            \"最高价\",\n            \"最低价\",\n            \"昨收价\",\n            \"总市值\",\n            \"市盈率\",\n            \"成交量\",\n            \"成交额\",\n            \"振幅\",\n            \"换手率\",\n            \"代码\",\n        ]\n    ]\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"开盘价\"] = pd.to_numeric(temp_df[\"开盘价\"], errors=\"coerce\")\n    temp_df[\"最高价\"] = pd.to_numeric(temp_df[\"最高价\"], errors=\"coerce\")\n    temp_df[\"最低价\"] = pd.to_numeric(temp_df[\"最低价\"], errors=\"coerce\")\n    temp_df[\"昨收价\"] = pd.to_numeric(temp_df[\"昨收价\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"市盈率\"] = pd.to_numeric(temp_df[\"市盈率\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_us_hist(\n    symbol: str = \"105.MSFT\",\n    period: str = \"daily\",\n    start_date: str = \"19700101\",\n    end_date: str = \"22220101\",\n    adjust: str = \"\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情-美股-每日行情\n    https://quote.eastmoney.com/us/ENTX.html#fullScreenChart\n    :param symbol: 股票代码; 此股票代码需要通过调用 ak.stock_us_spot_em() 的 `代码` 字段获取\n    :type symbol: str\n    :param period: choice of {'daily', 'weekly', 'monthly'}\n    :type period: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :param adjust: choice of {\"qfq\": \"1\", \"hfq\": \"2\", \"\": \"不复权\"}\n    :type adjust: str\n    :return: 每日行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    period_dict = {\"daily\": \"101\", \"weekly\": \"102\", \"monthly\": \"103\"}\n    adjust_dict = {\"qfq\": \"1\", \"hfq\": \"2\", \"\": \"0\"}\n    url = \"https://63.push2his.eastmoney.com/api/qt/stock/kline/get\"\n    params = {\n        \"secid\": f\"{symbol}\",\n        \"fields1\": \"f1,f2,f3,f4,f5,f6\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61\",\n        \"klt\": period_dict[period],\n        \"fqt\": adjust_dict[adjust],\n        \"end\": \"20500000\",\n        \"lmt\": \"1000000\",\n    }\n    r = requests.get(url, timeout=15, params=params)\n    data_json = r.json()\n    if not data_json[\"data\"][\"klines\"]:\n        return pd.DataFrame()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"klines\"]])\n    temp_df.columns = [\n        \"日期\",\n        \"开盘\",\n        \"收盘\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"振幅\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"换手率\",\n    ]\n    temp_df.index = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\")\n    temp_df = temp_df[start_date:end_date]\n    temp_df.reset_index(inplace=True, drop=True)\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"振幅\"] = pd.to_numeric(temp_df[\"振幅\"], errors=\"coerce\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"涨跌额\"] = pd.to_numeric(temp_df[\"涨跌额\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df.sort_values([\"日期\"], inplace=True, ignore_index=True)\n    return temp_df\n\n\ndef stock_us_hist_min_em(\n    symbol: str = \"105.ATER\",\n    start_date: str = \"1979-09-01 09:32:00\",\n    end_date: str = \"2222-01-01 09:32:00\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情首页-美股-每日分时行情\n    https://quote.eastmoney.com/us/ATER.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :return: 每日分时行情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2his.eastmoney.com/api/qt/stock/trends2/get\"\n    params = {\n        \"fields1\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13\",\n        \"fields2\": \"f51,f52,f53,f54,f55,f56,f57,f58\",\n        \"iscr\": \"0\",\n        \"ndays\": \"5\",\n        \"secid\": f\"{symbol.split('.')[0]}.{symbol.split('.')[1]}\",\n    }\n    r = requests.get(url, params=params, timeout=15)\n    data_json = r.json()\n    if not data_json[\"data\"][\"trends\"]:\n        return pd.DataFrame()\n    temp_df = pd.DataFrame([item.split(\",\") for item in data_json[\"data\"][\"trends\"]])\n    temp_df.columns = [\n        \"时间\",\n        \"开盘\",\n        \"收盘\",\n        \"最高\",\n        \"最低\",\n        \"成交量\",\n        \"成交额\",\n        \"最新价\",\n    ]\n    temp_df.index = pd.to_datetime(temp_df[\"时间\"], errors=\"coerce\")\n    temp_df = temp_df[start_date:end_date]\n    temp_df.reset_index(drop=True, inplace=True)\n    temp_df[\"开盘\"] = pd.to_numeric(temp_df[\"开盘\"], errors=\"coerce\")\n    temp_df[\"收盘\"] = pd.to_numeric(temp_df[\"收盘\"], errors=\"coerce\")\n    temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n    temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n    temp_df[\"成交量\"] = pd.to_numeric(temp_df[\"成交量\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"时间\"] = pd.to_datetime(temp_df[\"时间\"], errors=\"coerce\").astype(str)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_a_spot_em_df = stock_zh_a_spot_em()\n    print(stock_zh_a_spot_em_df)\n\n    stock_sh_a_spot_em_df = stock_sh_a_spot_em()\n    print(stock_sh_a_spot_em_df)\n\n    stock_sz_a_spot_em_df = stock_sz_a_spot_em()\n    print(stock_sz_a_spot_em_df)\n\n    stock_bj_a_spot_em_df = stock_bj_a_spot_em()\n    print(stock_bj_a_spot_em_df)\n\n    stock_new_a_spot_em_df = stock_new_a_spot_em()\n    print(stock_new_a_spot_em_df)\n\n    stock_cy_a_spot_em_df = stock_cy_a_spot_em()\n    print(stock_cy_a_spot_em_df)\n\n    stock_kc_a_spot_em_df = stock_kc_a_spot_em()\n    print(stock_kc_a_spot_em_df)\n\n    stock_zh_b_spot_em_df = stock_zh_b_spot_em()\n    print(stock_zh_b_spot_em_df)\n\n    stock_hk_spot_em_df = stock_hk_spot_em()\n    print(stock_hk_spot_em_df)\n\n    stock_hk_main_board_spot_em_df = stock_hk_main_board_spot_em()\n    print(stock_hk_main_board_spot_em_df)\n\n    stock_zh_a_hist_df = stock_zh_a_hist(\n        symbol=\"600734\",\n        period=\"daily\",\n        start_date=\"20050501\",\n        end_date=\"20250304\",\n        adjust=\"hfq\",\n    )\n    print(stock_zh_a_hist_df)\n\n    stock_zh_a_hist_min_em_df = stock_zh_a_hist_min_em(symbol=\"603777\", period=\"1\")\n    print(stock_zh_a_hist_min_em_df)\n\n    stock_zh_a_hist_pre_min_em_df = stock_zh_a_hist_pre_min_em(symbol=\"000001\")\n    print(stock_zh_a_hist_pre_min_em_df)\n\n    stock_hk_hist_df = stock_hk_hist(\n        symbol=\"00593\",\n        period=\"daily\",\n        start_date=\"19700101\",\n        end_date=\"22220101\",\n        adjust=\"\",\n    )\n    print(stock_hk_hist_df)\n\n    stock_hk_hist_qfq_df = stock_hk_hist(\n        symbol=\"00593\",\n        period=\"daily\",\n        start_date=\"19700101\",\n        end_date=\"22220101\",\n        adjust=\"qfq\",\n    )\n    print(stock_hk_hist_qfq_df)\n\n    stock_hk_hist_hfq_df = stock_hk_hist(\n        symbol=\"00593\",\n        period=\"daily\",\n        start_date=\"19700101\",\n        end_date=\"22220101\",\n        adjust=\"hfq\",\n    )\n    print(stock_hk_hist_hfq_df)\n\n    stock_us_spot_em_df = stock_us_spot_em()\n    print(stock_us_spot_em_df)\n\n    stock_us_hist_df = stock_us_hist(\n        symbol=\"106.TTE\",\n        period=\"daily\",\n        start_date=\"20200101\",\n        end_date=\"20240414\",\n        adjust=\"qfq\",\n    )\n    print(stock_us_hist_df)\n\n    stock_zh_a_spot_em_df = stock_zh_a_spot_em()\n    print(stock_zh_a_spot_em_df)\n\n    stock_hk_hist_min_em_df = stock_hk_hist_min_em(symbol=\"01611\")\n    print(stock_hk_hist_min_em_df)\n\n    stock_us_spot_em_df = stock_us_spot_em()\n    print(stock_us_spot_em_df)\n\n    stock_us_hist_min_em_df = stock_us_hist_min_em(symbol=\"106.TTE\")\n    print(stock_us_hist_min_em_df)\n\n    stock_us_hist_min_em_df = stock_us_hist_min_em(symbol=\"105.ATER\")\n    print(stock_us_hist_min_em_df)\n\n    stock_zh_a_hist_min_em_df = stock_zh_a_hist_min_em(\n        symbol=\"300364\",\n        start_date=\"2025-03-07 09:30:00\",\n        end_date=\"2025-03-07 15:00:00\",\n        period=\"5\",\n        adjust=\"hfq\",\n    )\n    print(stock_zh_a_hist_min_em_df)\n\n    stock_zh_a_hist_df = stock_zh_a_hist(\n        symbol=\"833454\",\n        period=\"daily\",\n        start_date=\"20170301\",\n        end_date=\"20241115\",\n        adjust=\"hfq\",\n    )\n    print(stock_zh_a_hist_df)\n\n    stock_hk_hist_min_em_df = stock_hk_hist_min_em(\n        symbol=\"01611\",\n        period=\"1\",\n        adjust=\"\",\n        start_date=\"2025-03-07 09:30:00\",\n        end_date=\"2025-03-07 18:32:00\",\n    )\n    print(stock_hk_hist_min_em_df)\n\n    stock_zh_b_spot_em_df = stock_zh_b_spot_em()\n    print(stock_zh_b_spot_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_hist_tx.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/10/15 22:30\nDesc: 腾讯证券-行情首页-沪深京A股\nhttps://quote.eastmoney.com/\n\"\"\"\n\nimport datetime\n\nimport pandas as pd\nimport requests\n\nfrom akshare.index.index_stock_zh import get_tx_start_year\nfrom akshare.utils import demjson\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_zh_a_hist_tx(\n    symbol: str = \"sz000001\",\n    start_date: str = \"19000101\",\n    end_date: str = \"20500101\",\n    adjust: str = \"\",\n    timeout: float = None,\n) -> pd.DataFrame:\n    \"\"\"\n    腾讯证券-日频-股票历史数据\n    https://gu.qq.com/sh000919/zs\n    :param symbol: 带市场标识的股票或者指数代码\n    :type symbol: str\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :param adjust: choice of {\"qfq\": \"前复权\", \"hfq\": \"后复权\", \"\": \"不复权\"}\n    :type adjust: str\n    :param timeout: choice of None or a positive float number\n    :type timeout: float\n    :return: 前复权的股票和指数数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    init_start_date = get_tx_start_year(symbol=symbol)\n    if int(start_date.replace(\"-\", \"\")) < int(init_start_date.replace(\"-\", \"\")):\n        start_date = init_start_date\n    url = \"https://proxy.finance.qq.com/ifzqgtimg/appstock/app/newfqkline/get\"\n    range_start = int(start_date[:4])\n    if int(end_date.split(\"-\")[0]) > datetime.date.today().year:\n        range_end = datetime.date.today().year + 1\n    else:\n        range_end = int(end_date.split(\"-\")[0]) + 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for year in tqdm(range(range_start, range_end), leave=False):\n        params = {\n            \"_var\": f\"kline_day{adjust}{year}\",\n            \"param\": f\"{symbol},day,{year}-01-01,{year + 1}-12-31,640,{adjust}\",\n            \"r\": \"0.8205512681390605\",\n        }\n        r = requests.get(url, params=params, timeout=timeout)\n        data_text = r.text\n        data_json = demjson.decode(data_text[data_text.find(\"={\") + 1 :])[\"data\"][\n            symbol\n        ]\n        if \"day\" in data_json.keys():\n            temp_df = pd.DataFrame(data_json[\"day\"])\n        elif \"hfqday\" in data_json.keys():\n            temp_df = pd.DataFrame(data_json[\"hfqday\"])\n        else:\n            temp_df = pd.DataFrame(data_json[\"qfqday\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df = big_df.iloc[:, :6]\n    big_df.columns = [\"date\", \"open\", \"close\", \"high\", \"low\", \"amount\"]\n    big_df[\"date\"] = pd.to_datetime(big_df[\"date\"], errors=\"coerce\").dt.date\n    big_df[\"open\"] = pd.to_numeric(big_df[\"open\"], errors=\"coerce\")\n    big_df[\"close\"] = pd.to_numeric(big_df[\"close\"], errors=\"coerce\")\n    big_df[\"high\"] = pd.to_numeric(big_df[\"high\"], errors=\"coerce\")\n    big_df[\"low\"] = pd.to_numeric(big_df[\"low\"], errors=\"coerce\")\n    big_df[\"amount\"] = pd.to_numeric(big_df[\"amount\"], errors=\"coerce\")\n    big_df.drop_duplicates(inplace=True, ignore_index=True)\n    big_df.index = pd.to_datetime(big_df[\"date\"], errors=\"coerce\")\n    big_df.sort_index(inplace=True)\n    big_df = big_df[start_date:end_date]\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_a_hist_tx_df = stock_zh_a_hist_tx(\n        symbol=\"sz000001\", start_date=\"20200101\", end_date=\"20231027\", adjust=\"hfq\"\n    )\n    print(stock_zh_a_hist_tx_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_hk_valuation_baidu.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/11/21 18:26\nDesc: 百度股市通-港股-财务报表-估值数据\nhttps://gushitong.baidu.com/stock/hk-06969\n\"\"\"\n\nimport http.client\nimport json\nimport urllib\n\nimport pandas as pd\n\n\ndef stock_hk_valuation_baidu(\n    symbol: str = \"06969\", indicator: str = \"总市值\", period: str = \"近一年\"\n) -> pd.DataFrame:\n    \"\"\"\n    百度股市通-港股-财务报表-估值数据\n    https://gushitong.baidu.com/stock/hk-06969\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: choice of {\"总市值\", \"市盈率(TTM)\", \"市盈率(静)\", \"市净率\", \"市现率\"}\n    :type indicator: str\n    :param period: choice of {\"近一年\", \"近三年\", \"全部\"}\n    :type period: str\n    :return: 估值数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    params = {\n        \"openapi\": \"1\",\n        \"dspName\": \"iphone\",\n        \"tn\": \"tangram\",\n        \"client\": \"app\",\n        \"query\": indicator,\n        \"code\": symbol,\n        \"word\": \"\",\n        \"resource_id\": \"51171\",\n        \"market\": \"hk\",\n        \"tag\": indicator,\n        \"chart_select\": period,\n        \"industry_select\": \"\",\n        \"skip_industry\": \"1\",\n        \"finClientType\": \"pc\",\n    }\n    conn = http.client.HTTPSConnection(\"gushitong.baidu.com\")\n    conn.request(method=\"GET\", url=f\"/opendata?{urllib.parse.urlencode(params)}\")\n    r = conn.getresponse()\n    data_json = json.loads(r.read())\n    temp_df = pd.DataFrame(\n        data_json[\"Result\"][0][\"DisplayData\"][\"resultData\"][\"tplData\"][\"result\"][\n            \"chartInfo\"\n        ][0][\"body\"]\n    )\n    temp_df.columns = [\"date\", \"value\"]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n    temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"])\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hk_valuation_baidu_df = stock_hk_valuation_baidu(\n        symbol=\"06969\", indicator=\"总市值\", period=\"近三年\"\n    )\n    print(stock_hk_valuation_baidu_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_hot_xq.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/1/7 17:00\nDesc: 雪球-沪深股市-热度排行榜\nhttps://xueqiu.com/hq\n\"\"\"\n\nimport math\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_hot_follow_xq(symbol: str = \"最热门\") -> pd.DataFrame:\n    \"\"\"\n    雪球-沪深股市-热度排行榜-关注排行榜\n    https://xueqiu.com/hq\n    :param symbol: choice of {\"本周新增\", \"最热门\"}\n    :type symbol: str\n    :return: 关注排行榜\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"本周新增\": \"follow7d\",\n        \"最热门\": \"follow\",\n    }\n    url = \"https://xueqiu.com/service/v5/stock/screener/screen\"\n    params = {\n        \"category\": \"CN\",\n        \"size\": \"200\",\n        \"order\": \"desc\",\n        \"order_by\": symbol_map[symbol],\n        \"only_count\": \"0\",\n        \"page\": \"1\",\n    }\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"xueqiu.com\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://xueqiu.com/hq\",\n        \"sec-ch-ua\": '\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"100\", \"Google Chrome\";v=\"100\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"Sec-Fetch-Dest\": \"empty\",\n        \"Sec-Fetch-Mode\": \"cors\",\n        \"Sec-Fetch-Site\": \"same-origin\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    total_num = data_json[\"data\"][\"count\"]\n    total_page = math.ceil(total_num / 200)\n    tqdm = get_tqdm()\n    big_df = pd.DataFrame()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"page\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        try:\n            temp_df = pd.DataFrame(data_json[\"data\"][\"list\"])\n        except TypeError:\n            temp_df = pd.DataFrame()\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    if symbol == \"本周新增\":\n        big_df = big_df[\n            [\n                \"symbol\",\n                \"name\",\n                \"follow7d\",\n                \"current\",\n            ]\n        ]\n    else:\n        big_df = big_df[\n            [\n                \"symbol\",\n                \"name\",\n                \"follow\",\n                \"current\",\n            ]\n        ]\n    big_df.columns = [\n        \"股票代码\",\n        \"股票简称\",\n        \"关注\",\n        \"最新价\",\n    ]\n    big_df[\"关注\"] = pd.to_numeric(big_df[\"关注\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_hot_tweet_xq(symbol: str = \"最热门\") -> pd.DataFrame:\n    \"\"\"\n    雪球-沪深股市-热度排行榜-讨论排行榜\n    https://xueqiu.com/hq\n    :param symbol: choice of {\"本周新增\", \"最热门\"}\n    :type symbol: str\n    :return: 讨论排行榜\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"本周新增\": \"tweet7d\",\n        \"最热门\": \"tweet\",\n    }\n    url = \"https://xueqiu.com/service/v5/stock/screener/screen\"\n    params = {\n        \"category\": \"CN\",\n        \"size\": \"200\",\n        \"order\": \"desc\",\n        \"order_by\": symbol_map[symbol],\n        \"only_count\": \"0\",\n        \"page\": \"1\",\n    }\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"xueqiu.com\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://xueqiu.com/hq\",\n        \"sec-ch-ua\": '\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"100\", \"Google Chrome\";v=\"100\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"Sec-Fetch-Dest\": \"empty\",\n        \"Sec-Fetch-Mode\": \"cors\",\n        \"Sec-Fetch-Site\": \"same-origin\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    total_num = data_json[\"data\"][\"count\"]\n    total_page = math.ceil(total_num / 200)\n    tqdm = get_tqdm()\n    big_df = pd.DataFrame()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"page\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        try:\n            temp_df = pd.DataFrame(data_json[\"data\"][\"list\"])\n        except TypeError:\n            temp_df = pd.DataFrame()\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    if symbol == \"本周新增\":\n        big_df = big_df[\n            [\n                \"symbol\",\n                \"name\",\n                \"tweet7d\",\n                \"current\",\n            ]\n        ]\n    else:\n        big_df = big_df[\n            [\n                \"symbol\",\n                \"name\",\n                \"tweet\",\n                \"current\",\n            ]\n        ]\n    big_df.columns = [\n        \"股票代码\",\n        \"股票简称\",\n        \"关注\",\n        \"最新价\",\n    ]\n    big_df[\"关注\"] = pd.to_numeric(big_df[\"关注\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_hot_deal_xq(symbol: str = \"最热门\") -> pd.DataFrame:\n    \"\"\"\n    雪球-沪深股市-热度排行榜-分享交易排行榜\n    https://xueqiu.com/hq\n    :param symbol: choice of {\"本周新增\", \"最热门\"}\n    :type symbol: str\n    :return: 分享交易排行榜\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"本周新增\": \"deal7d\",\n        \"最热门\": \"deal\",\n    }\n    url = \"https://xueqiu.com/service/v5/stock/screener/screen\"\n    params = {\n        \"category\": \"CN\",\n        \"size\": \"10000\",\n        \"order\": \"desc\",\n        \"order_by\": symbol_map[symbol],\n        \"only_count\": \"0\",\n        \"page\": \"1\",\n    }\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"xueqiu.com\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://xueqiu.com/hq\",\n        \"sec-ch-ua\": '\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"100\", \"Google Chrome\";v=\"100\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"Sec-Fetch-Dest\": \"empty\",\n        \"Sec-Fetch-Mode\": \"cors\",\n        \"Sec-Fetch-Site\": \"same-origin\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    total_num = data_json[\"data\"][\"count\"]\n    total_page = math.ceil(total_num / 200)\n    tqdm = get_tqdm()\n    big_df = pd.DataFrame()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"page\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        try:\n            temp_df = pd.DataFrame(data_json[\"data\"][\"list\"])\n        except TypeError:\n            temp_df = pd.DataFrame()\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    if symbol == \"本周新增\":\n        big_df = big_df[\n            [\n                \"symbol\",\n                \"name\",\n                \"deal7d\",\n                \"current\",\n            ]\n        ]\n    else:\n        big_df = big_df[\n            [\n                \"symbol\",\n                \"name\",\n                \"deal\",\n                \"current\",\n            ]\n        ]\n    big_df.columns = [\n        \"股票代码\",\n        \"股票简称\",\n        \"关注\",\n        \"最新价\",\n    ]\n    big_df[\"关注\"] = pd.to_numeric(big_df[\"关注\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_hot_follow_xq_df = stock_hot_follow_xq(symbol=\"本周新增\")\n    print(stock_hot_follow_xq_df)\n\n    stock_hot_follow_xq_df = stock_hot_follow_xq(symbol=\"最热门\")\n    print(stock_hot_follow_xq_df)\n\n    stock_hot_tweet_xq_df = stock_hot_tweet_xq(symbol=\"本周新增\")\n    print(stock_hot_tweet_xq_df)\n\n    stock_hot_tweet_xq_df = stock_hot_tweet_xq(symbol=\"最热门\")\n    print(stock_hot_tweet_xq_df)\n\n    stock_hot_deal_xq_df = stock_hot_deal_xq(symbol=\"本周新增\")\n    print(stock_hot_deal_xq_df)\n\n    stock_hot_deal_xq_df = stock_hot_deal_xq(symbol=\"最热门\")\n    print(stock_hot_deal_xq_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_hsgt_em.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/3/4 23:00\nDesc: 东方财富网-数据中心-沪深港通持股\nhttps://data.eastmoney.com/hsgtcg/\n沪深港通详情: https://finance.eastmoney.com/news/1622,20161118685370149.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.utils.func import fetch_paginated_data\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_hsgt_fund_flow_summary_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-资金流向-沪深港通资金流向\n    https://data.eastmoney.com/hsgt/index.html#lssj\n    :return: 沪深港通资金流向\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_MUTUAL_QUOTA\",\n        \"columns\": \"TRADE_DATE,MUTUAL_TYPE,BOARD_TYPE,MUTUAL_TYPE_NAME,FUNDS_DIRECTION,\"\n        \"INDEX_CODE,INDEX_NAME,BOARD_CODE\",\n        \"quoteColumns\": \"status~07~BOARD_CODE,dayNetAmtIn~07~BOARD_CODE,dayAmtRemain~07~BOARD_CODE,\"\n        \"dayAmtThreshold~07~BOARD_CODE,f104~07~BOARD_CODE,f105~07~BOARD_CODE,\"\n        \"f106~07~BOARD_CODE,f3~03~INDEX_CODE~INDEX_f3,netBuyAmt~07~BOARD_CODE\",\n        \"quoteType\": \"0\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"2000\",\n        \"sortTypes\": \"1\",\n        \"sortColumns\": \"MUTUAL_TYPE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"交易日\",\n        \"-\",\n        \"类型\",\n        \"板块\",\n        \"资金方向\",\n        \"-\",\n        \"相关指数\",\n        \"-\",\n        \"交易状态\",\n        \"资金净流入\",\n        \"当日资金余额\",\n        \"-\",\n        \"上涨数\",\n        \"下跌数\",\n        \"持平数\",\n        \"指数涨跌幅\",\n        \"成交净买额\",\n    ]\n    temp_df = temp_df[\n        [\n            \"交易日\",\n            \"类型\",\n            \"板块\",\n            \"资金方向\",\n            \"交易状态\",\n            \"成交净买额\",\n            \"资金净流入\",\n            \"当日资金余额\",\n            \"上涨数\",\n            \"持平数\",\n            \"下跌数\",\n            \"相关指数\",\n            \"指数涨跌幅\",\n        ]\n    ]\n    temp_df[\"交易日\"] = pd.to_datetime(temp_df[\"交易日\"], errors=\"coerce\").dt.date\n    temp_df[\"成交净买额\"] = pd.to_numeric(temp_df[\"成交净买额\"], errors=\"coerce\")\n    temp_df[\"资金净流入\"] = pd.to_numeric(temp_df[\"资金净流入\"], errors=\"coerce\")\n    temp_df[\"当日资金余额\"] = pd.to_numeric(temp_df[\"当日资金余额\"], errors=\"coerce\")\n    temp_df[\"上涨数\"] = pd.to_numeric(temp_df[\"上涨数\"], errors=\"coerce\")\n    temp_df[\"持平数\"] = pd.to_numeric(temp_df[\"持平数\"], errors=\"coerce\")\n    temp_df[\"下跌数\"] = pd.to_numeric(temp_df[\"下跌数\"], errors=\"coerce\")\n    temp_df[\"指数涨跌幅\"] = pd.to_numeric(temp_df[\"指数涨跌幅\"], errors=\"coerce\")\n    temp_df[\"成交净买额\"] = temp_df[\"成交净买额\"] / 10000\n    temp_df[\"资金净流入\"] = temp_df[\"资金净流入\"] / 10000\n    temp_df[\"当日资金余额\"] = temp_df[\"当日资金余额\"] / 10000\n    return temp_df\n\n\ndef stock_hk_ggt_components_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-港股市场-港股通成份股\n    https://quote.eastmoney.com/center/gridlist.html#hk_components\n    :return: 港股通成份股\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://33.push2.eastmoney.com/api/qt/clist/get\"\n    params = {\n        \"pn\": \"1\",\n        \"pz\": \"100\",\n        \"po\": \"1\",\n        \"np\": \"1\",\n        \"ut\": \"bd1d9ddb04089700cf9c27f6f7426281\",\n        \"fltt\": \"2\",\n        \"fid\": \"f12\",\n        \"fs\": \"b:DLMK0146,b:DLMK0144\",\n        \"fields\": \"f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f23,f24,\"\n        \"f25,f26,f22,f33,f11,f62,f128,f136,f115,f152\",\n    }\n    temp_df = fetch_paginated_data(url=url, base_params=params)\n    temp_df.columns = [\n        \"序号\",\n        \"-\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"涨跌额\",\n        \"成交量\",\n        \"成交额\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"代码\",\n        \"-\",\n        \"名称\",\n        \"最高\",\n        \"最低\",\n        \"今开\",\n        \"昨收\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌额\",\n            \"涨跌幅\",\n            \"今开\",\n            \"最高\",\n            \"最低\",\n            \"昨收\",\n            \"成交量\",\n            \"成交额\",\n        ]\n    ]\n    return temp_df\n\n\ndef stock_hsgt_hold_stock_em(\n    market: str = \"沪股通\", indicator: str = \"5日排行\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-沪深港通持股-个股排行\n    https://data.eastmoney.com/hsgtcg/list.html\n    :param market: choice of {\"北向\", \"沪股通\", \"深股通\"}\n    :type market: str\n    :param indicator: choice of {\"今日排行\", \"3日排行\", \"5日排行\", \"10日排行\", \"月排行\", \"季排行\", \"年排行\"}\n    :type indicator: str\n    :return: 指定 sector 和 indicator 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://data.eastmoney.com/hsgtcg/list.html\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    date = (\n        soup.find(name=\"div\", attrs={\"class\": \"title\"})\n        .find(\"span\")\n        .text.strip(\"（\")\n        .strip(\"）\")\n    )\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    indicator_type = \"\"\n    filter_str = \"\"\n    if indicator == \"今日排行\":\n        indicator_type = \"1\"\n    if indicator == \"3日排行\":\n        indicator_type = \"3\"\n    if indicator == \"5日排行\":\n        indicator_type = \"5\"\n    if indicator == \"10日排行\":\n        indicator_type = \"10\"\n    if indicator == \"月排行\":\n        indicator_type = \"M\"\n    if indicator == \"季排行\":\n        indicator_type = \"Q\"\n    if indicator == \"年排行\":\n        indicator_type = \"Y\"\n    if market == \"北向\":\n        filter_str = f\"\"\"(TRADE_DATE='{date}')(INTERVAL_TYPE=\"{indicator_type}\")\"\"\"\n    elif market == \"沪股通\":\n        filter_str = f\"\"\"(TRADE_DATE='{date}')(INTERVAL_TYPE=\"{indicator_type}\")(MUTUAL_TYPE=\"001\")\"\"\"\n    elif market == \"深股通\":\n        filter_str = f\"\"\"(TRADE_DATE='{date}')(INTERVAL_TYPE=\"{indicator_type}\")(MUTUAL_TYPE=\"003\")\"\"\"\n    params = {\n        \"sortColumns\": \"ADD_MARKET_CAP\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"50000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_MUTUAL_STOCK_NORTHSTA\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": filter_str,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = range(1, len(big_df) + 1)\n    big_df.columns = [\n        \"序号\",\n        \"_\",\n        \"_\",\n        \"日期\",\n        \"_\",\n        \"名称\",\n        \"_\",\n        \"_\",\n        \"代码\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"今日持股-股数\",\n        \"今日持股-市值\",\n        \"今日持股-占流通股比\",\n        \"今日持股-占总股本比\",\n        \"今日收盘价\",\n        \"今日涨跌幅\",\n        \"_\",\n        \"所属板块\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        f\"{indicator.split('排')[0]}增持估计-市值\",\n        f\"{indicator.split('排')[0]}增持估计-股数\",\n        f\"{indicator.split('排')[0]}增持估计-市值增幅\",\n        f\"{indicator.split('排')[0]}增持估计-占流通股比\",\n        f\"{indicator.split('排')[0]}增持估计-占总股本比\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"今日收盘价\",\n            \"今日涨跌幅\",\n            \"今日持股-股数\",\n            \"今日持股-市值\",\n            \"今日持股-占流通股比\",\n            \"今日持股-占总股本比\",\n            f\"{indicator.split('排')[0]}增持估计-股数\",\n            f\"{indicator.split('排')[0]}增持估计-市值\",\n            f\"{indicator.split('排')[0]}增持估计-市值增幅\",\n            f\"{indicator.split('排')[0]}增持估计-占流通股比\",\n            f\"{indicator.split('排')[0]}增持估计-占总股本比\",\n            \"所属板块\",\n            \"日期\",\n        ]\n    ]\n    big_df[\"今日收盘价\"] = pd.to_numeric(big_df[\"今日收盘价\"], errors=\"coerce\")\n    big_df[\"今日涨跌幅\"] = pd.to_numeric(big_df[\"今日涨跌幅\"], errors=\"coerce\")\n    big_df[\"今日持股-股数\"] = pd.to_numeric(big_df[\"今日持股-股数\"], errors=\"coerce\")\n    big_df[\"今日持股-市值\"] = pd.to_numeric(big_df[\"今日持股-市值\"], errors=\"coerce\")\n    big_df[\"今日持股-占流通股比\"] = pd.to_numeric(\n        big_df[\"今日持股-占流通股比\"], errors=\"coerce\"\n    )\n    big_df[\"今日持股-占总股本比\"] = pd.to_numeric(\n        big_df[\"今日持股-占总股本比\"], errors=\"coerce\"\n    )\n    big_df[f\"{indicator.split('排')[0]}增持估计-股数\"] = pd.to_numeric(\n        big_df[f\"{indicator.split('排')[0]}增持估计-股数\"], errors=\"coerce\"\n    )\n    big_df[f\"{indicator.split('排')[0]}增持估计-市值\"] = pd.to_numeric(\n        big_df[f\"{indicator.split('排')[0]}增持估计-市值\"], errors=\"coerce\"\n    )\n    big_df[f\"{indicator.split('排')[0]}增持估计-市值增幅\"] = pd.to_numeric(\n        big_df[f\"{indicator.split('排')[0]}增持估计-市值增幅\"], errors=\"coerce\"\n    )\n    big_df[f\"{indicator.split('排')[0]}增持估计-占流通股比\"] = pd.to_numeric(\n        big_df[f\"{indicator.split('排')[0]}增持估计-占流通股比\"], errors=\"coerce\"\n    )\n    big_df[f\"{indicator.split('排')[0]}增持估计-占总股本比\"] = pd.to_numeric(\n        big_df[f\"{indicator.split('排')[0]}增持估计-占总股本比\"], errors=\"coerce\"\n    )\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_hsgt_stock_statistics_em(\n    symbol: str = \"北向持股\",\n    start_date: str = \"20240110\",\n    end_date: str = \"20240110\",\n):\n    \"\"\"\n    东方财富网-数据中心-沪深港通-沪深港通持股-每日个股统计\n    https://data.eastmoney.com/hsgtcg/StockStatistics.aspx\n    market=001, 沪股通持股\n    market=003, 深股通持股\n    :param symbol: choice of {\"北向持股\", \"南向持股\"}\n    :type symbol: str\n    :param start_date: 指定数据获取开始的时间, e.g., \"20200713\"\n    :type start_date: str\n    :param end_date: 指定数据获取结束的时间, e.g., \"20200715\"\n    :type end_date:str\n    :return: 指定市场和指定时间段的每日个股统计数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    start_date = \"-\".join([start_date[:4], start_date[4:6], start_date[6:]])\n    end_date = \"-\".join([end_date[:4], end_date[4:6], end_date[6:]])\n    big_df = pd.DataFrame()\n    if symbol == \"南向持股\":\n        params = {\n            \"sortColumns\": \"TRADE_DATE\",\n            \"sortTypes\": \"-1\",\n            \"pageSize\": \"1000\",\n            \"pageNumber\": \"1\",\n            \"columns\": \"ALL\",\n            \"source\": \"WEB\",\n            \"client\": \"WEB\",\n            \"filter\": f\"\"\"(INTERVAL_TYPE=\"1\")(RN=1)(TRADE_DATE>='{start_date}')(TRADE_DATE<='{end_date}')\"\"\",\n            \"rt\": \"53160469\",\n            \"reportName\": \"RPT_MUTUAL_STOCK_HOLDRANKS\",\n        }\n        if start_date == end_date:\n            params.update(\n                {\"filter\": f\"\"\"(INTERVAL_TYPE=\"1\")(RN=1)(TRADE_DATE='{start_date}')\"\"\"}\n            )\n        url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        total_page = data_json[\"result\"][\"pages\"]\n        big_df = pd.DataFrame()\n        tqdm = get_tqdm()\n        for page in tqdm(range(1, int(total_page) + 1), leave=False):\n            params.update({\"pageNumber\": page})\n            r = requests.get(url, params=params)\n            data_json = r.json()\n            temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n        big_df.columns = [\n            \"-\",\n            \"持股日期\",\n            \"-\",\n            \"-\",\n            \"股票简称\",\n            \"股票代码\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"持股市值\",\n            \"持股数量\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"当日收盘价\",\n            \"当日涨跌幅\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"持股数量占发行股百分比\",\n            \"-\",\n            \"持股市值变化-1日\",\n            \"持股市值变化-5日\",\n            \"持股市值变化-10日\",\n            \"-\",\n        ]\n        big_df = big_df[\n            [\n                \"持股日期\",\n                \"股票代码\",\n                \"股票简称\",\n                \"当日收盘价\",\n                \"当日涨跌幅\",\n                \"持股数量\",\n                \"持股市值\",\n                \"持股数量占发行股百分比\",\n                \"持股市值变化-1日\",\n                \"持股市值变化-5日\",\n                \"持股市值变化-10日\",\n            ]\n        ]\n        big_df[\"持股日期\"] = pd.to_datetime(big_df[\"持股日期\"], errors=\"coerce\").dt.date\n        big_df[\"当日收盘价\"] = pd.to_numeric(big_df[\"当日收盘价\"], errors=\"coerce\")\n        big_df[\"当日涨跌幅\"] = pd.to_numeric(big_df[\"当日涨跌幅\"], errors=\"coerce\")\n        big_df[\"持股数量\"] = pd.to_numeric(big_df[\"持股数量\"], errors=\"coerce\")\n        big_df[\"持股市值\"] = pd.to_numeric(big_df[\"持股市值\"], errors=\"coerce\")\n        big_df[\"持股数量占发行股百分比\"] = pd.to_numeric(\n            big_df[\"持股数量占发行股百分比\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-1日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-1日\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-5日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-5日\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-10日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-10日\"], errors=\"coerce\"\n        )\n    elif symbol == \"北向持股\":\n        params = {\n            \"sortColumns\": \"TRADE_DATE\",\n            \"sortTypes\": \"-1\",\n            \"pageSize\": \"1000\",\n            \"pageNumber\": \"1\",\n            \"columns\": \"ALL\",\n            \"source\": \"WEB\",\n            \"client\": \"WEB\",\n            \"filter\": f\"\"\"(INTERVAL_TYPE=\"1\")(MUTUAL_TYPE in (\"001\",\"003\"))(TRADE_DATE>='{start_date}')(TRADE_DATE<='{end_date}')\"\"\",\n            \"rt\": \"53160469\",\n            \"reportName\": \"RPT_MUTUAL_STOCK_NORTHSTA\",\n        }\n        if start_date == end_date:\n            params.update(\n                {\n                    \"filter\": f\"\"\"(INTERVAL_TYPE=\"1\")(MUTUAL_TYPE in (\"001\",\"003\"))(TRADE_DATE='{start_date}')\"\"\"\n                }\n            )\n        url = \"http://datacenter-web.eastmoney.com/api/data/v1/get\"\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        total_page = data_json[\"result\"][\"pages\"]\n        big_df = pd.DataFrame()\n        tqdm = get_tqdm()\n        for page in tqdm(range(1, int(total_page) + 1), leave=False):\n            params.update({\"pageNumber\": page})\n            r = requests.get(url, params=params)\n            data_json = r.json()\n            temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n        big_df.columns = [\n            \"-\",\n            \"-\",\n            \"持股日期\",\n            \"-\",\n            \"股票简称\",\n            \"-\",\n            \"-\",\n            \"股票代码\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"持股数量\",\n            \"持股市值\",\n            \"-\",\n            \"持股数量占发行股百分比\",\n            \"当日收盘价\",\n            \"当日涨跌幅\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"持股市值变化-1日\",\n            \"持股市值变化-5日\",\n            \"持股市值变化-10日\",\n            \"-\",\n            \"-\",\n            \"-\",\n        ]\n        big_df = big_df[\n            [\n                \"持股日期\",\n                \"股票代码\",\n                \"股票简称\",\n                \"当日收盘价\",\n                \"当日涨跌幅\",\n                \"持股数量\",\n                \"持股市值\",\n                \"持股数量占发行股百分比\",\n                \"持股市值变化-1日\",\n                \"持股市值变化-5日\",\n                \"持股市值变化-10日\",\n            ]\n        ]\n        big_df[\"持股日期\"] = pd.to_datetime(big_df[\"持股日期\"], errors=\"coerce\").dt.date\n        big_df[\"当日收盘价\"] = pd.to_numeric(big_df[\"当日收盘价\"], errors=\"coerce\")\n        big_df[\"当日涨跌幅\"] = pd.to_numeric(big_df[\"当日涨跌幅\"], errors=\"coerce\")\n        big_df[\"持股数量\"] = pd.to_numeric(big_df[\"持股数量\"], errors=\"coerce\")\n        big_df[\"持股市值\"] = pd.to_numeric(big_df[\"持股市值\"], errors=\"coerce\")\n        big_df[\"持股数量占发行股百分比\"] = pd.to_numeric(\n            big_df[\"持股数量占发行股百分比\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-1日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-1日\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-5日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-5日\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-10日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-10日\"], errors=\"coerce\"\n        )\n    elif symbol == \"沪股通持股\":\n        params = {\n            \"sortColumns\": \"TRADE_DATE\",\n            \"sortTypes\": \"-1\",\n            \"pageSize\": \"1000\",\n            \"pageNumber\": \"1\",\n            \"columns\": \"ALL\",\n            \"source\": \"WEB\",\n            \"client\": \"WEB\",\n            \"filter\": f\"\"\"(INTERVAL_TYPE=\"1\")(MUTUAL_TYPE=\"001\")(TRADE_DATE>='{start_date}')(TRADE_DATE<='{end_date}')\"\"\",\n            \"reportName\": \"RPT_MUTUAL_STOCK_NORTHSTA\",\n        }\n        if start_date == end_date:\n            params.update(\n                {\n                    \"filter\": f\"\"\"(INTERVAL_TYPE=\"1\")(MUTUAL_TYPE=\"001\")(TRADE_DATE='{start_date}')\"\"\"\n                }\n            )\n        url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        total_page = data_json[\"result\"][\"pages\"]\n        big_df = pd.DataFrame()\n        tqdm = get_tqdm()\n        for page in tqdm(range(1, int(total_page) + 1), leave=False):\n            params.update({\"pageNumber\": page})\n            r = requests.get(url, params=params)\n            data_json = r.json()\n            temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n        big_df.columns = [\n            \"-\",\n            \"-\",\n            \"持股日期\",\n            \"-\",\n            \"股票简称\",\n            \"-\",\n            \"-\",\n            \"股票代码\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"持股数量\",\n            \"持股市值\",\n            \"-\",\n            \"持股数量占发行股百分比\",\n            \"当日收盘价\",\n            \"当日涨跌幅\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"持股市值变化-1日\",\n            \"持股市值变化-5日\",\n            \"持股市值变化-10日\",\n            \"-\",\n            \"-\",\n            \"-\",\n        ]\n        big_df = big_df[\n            [\n                \"持股日期\",\n                \"股票代码\",\n                \"股票简称\",\n                \"当日收盘价\",\n                \"当日涨跌幅\",\n                \"持股数量\",\n                \"持股市值\",\n                \"持股数量占发行股百分比\",\n                \"持股市值变化-1日\",\n                \"持股市值变化-5日\",\n                \"持股市值变化-10日\",\n            ]\n        ]\n        big_df[\"持股日期\"] = pd.to_datetime(big_df[\"持股日期\"], errors=\"coerce\").dt.date\n        big_df[\"当日收盘价\"] = pd.to_numeric(big_df[\"当日收盘价\"], errors=\"coerce\")\n        big_df[\"当日涨跌幅\"] = pd.to_numeric(big_df[\"当日涨跌幅\"], errors=\"coerce\")\n        big_df[\"持股数量\"] = pd.to_numeric(big_df[\"持股数量\"], errors=\"coerce\")\n        big_df[\"持股市值\"] = pd.to_numeric(big_df[\"持股市值\"], errors=\"coerce\")\n        big_df[\"持股数量占发行股百分比\"] = pd.to_numeric(\n            big_df[\"持股数量占发行股百分比\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-1日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-1日\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-5日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-5日\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-10日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-10日\"], errors=\"coerce\"\n        )\n    elif symbol == \"深股通持股\":\n        params = {\n            \"sortColumns\": \"TRADE_DATE\",\n            \"sortTypes\": \"-1\",\n            \"pageSize\": \"1000\",\n            \"pageNumber\": \"1\",\n            \"columns\": \"ALL\",\n            \"source\": \"WEB\",\n            \"client\": \"WEB\",\n            \"filter\": f\"\"\"(INTERVAL_TYPE=\"1\")(MUTUAL_TYPE=\"003\")(TRADE_DATE\n            >='{start_date}')(TRADE_DATE<='{end_date}')\"\"\",\n            \"reportName\": \"RPT_MUTUAL_STOCK_NORTHSTA\",\n        }\n        if start_date == end_date:\n            params.update(\n                {\n                    \"filter\": f\"\"\"(INTERVAL_TYPE=\"1\")(MUTUAL_TYPE=\"003\")(TRADE_DATE='{start_date}')\"\"\"\n                }\n            )\n        url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        total_page = data_json[\"result\"][\"pages\"]\n        big_df = pd.DataFrame()\n        tqdm = get_tqdm()\n        for page in tqdm(range(1, int(total_page) + 1), leave=False):\n            params.update({\"pageNumber\": page})\n            r = requests.get(url, params=params)\n            data_json = r.json()\n            temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n        big_df.columns = [\n            \"-\",\n            \"-\",\n            \"持股日期\",\n            \"-\",\n            \"股票简称\",\n            \"-\",\n            \"-\",\n            \"股票代码\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"持股数量\",\n            \"持股市值\",\n            \"-\",\n            \"持股数量占发行股百分比\",\n            \"当日收盘价\",\n            \"当日涨跌幅\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"持股市值变化-1日\",\n            \"持股市值变化-5日\",\n            \"持股市值变化-10日\",\n            \"-\",\n            \"-\",\n            \"-\",\n        ]\n        big_df = big_df[\n            [\n                \"持股日期\",\n                \"股票代码\",\n                \"股票简称\",\n                \"当日收盘价\",\n                \"当日涨跌幅\",\n                \"持股数量\",\n                \"持股市值\",\n                \"持股数量占发行股百分比\",\n                \"持股市值变化-1日\",\n                \"持股市值变化-5日\",\n                \"持股市值变化-10日\",\n            ]\n        ]\n        big_df[\"持股日期\"] = pd.to_datetime(big_df[\"持股日期\"], errors=\"coerce\").dt.date\n        big_df[\"当日收盘价\"] = pd.to_numeric(big_df[\"当日收盘价\"], errors=\"coerce\")\n        big_df[\"当日涨跌幅\"] = pd.to_numeric(big_df[\"当日涨跌幅\"], errors=\"coerce\")\n        big_df[\"持股数量\"] = pd.to_numeric(big_df[\"持股数量\"], errors=\"coerce\")\n        big_df[\"持股市值\"] = pd.to_numeric(big_df[\"持股市值\"], errors=\"coerce\")\n        big_df[\"持股数量占发行股百分比\"] = pd.to_numeric(\n            big_df[\"持股数量占发行股百分比\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-1日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-1日\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-5日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-5日\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-10日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-10日\"], errors=\"coerce\"\n        )\n    return big_df\n\n\ndef stock_hsgt_institution_statistics_em(\n    market: str = \"北向持股\",\n    start_date: str = \"20220601\",\n    end_date: str = \"20220609\",\n):\n    \"\"\"\n    东方财富网-数据中心-沪深港通-沪深港通持股-每日机构统计\n    https://data.eastmoney.com/hsgtcg/InstitutionStatistics.aspx\n    :param market: choice of {\"北向持股\", \"南向持股\", \"沪股通持股\", \"深股通持股\"}\n    :type market: str\n    :param start_date: 指定数据获取开始的时间, e.g., \"20200713\"\n    :type start_date: str\n    :param end_date: 指定数据获取结束的时间, e.g., \"20200715\"\n    :type end_date:str\n    :return: 指定市场和指定时间段的每日个股统计数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    start_date = \"-\".join([start_date[:4], start_date[4:6], start_date[6:]])\n    end_date = \"-\".join([end_date[:4], end_date[4:6], end_date[6:]])\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/114.0.0.0 Safari/537.36\"\n    }\n    if market == \"南向持股\":\n        params = {\n            \"sortColumns\": \"HOLD_DATE\",\n            \"sortTypes\": \"-1\",\n            \"pageSize\": \"500\",\n            \"pageNumber\": \"1\",\n            \"reportName\": \"PRT_MUTUAL_ORG_STA\",\n            \"columns\": \"ALL\",\n            \"source\": \"WEB\",\n            \"client\": \"WEB\",\n            \"filter\": f\"\"\"(MARKET_TYPE=\"S\")(HOLD_DATE>='{start_date}')(HOLD_DATE<='{end_date}')\"\"\",\n        }\n        url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        temp_df.columns = [\n            \"持股日期\",\n            \"_\",\n            \"持股只数\",\n            \"_\",\n            \"持股市值\",\n            \"持股市值变化-1日\",\n            \"持股市值变化-5日\",\n            \"持股市值变化-10日\",\n            \"_\",\n            \"机构名称\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n        temp_df = temp_df[\n            [\n                \"持股日期\",\n                \"机构名称\",\n                \"持股只数\",\n                \"持股市值\",\n                \"持股市值变化-1日\",\n                \"持股市值变化-5日\",\n                \"持股市值变化-10日\",\n            ]\n        ]\n        temp_df[\"持股日期\"] = pd.to_datetime(\n            temp_df[\"持股日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"持股只数\"] = pd.to_numeric(temp_df[\"持股只数\"], errors=\"coerce\")\n        temp_df[\"持股市值\"] = pd.to_numeric(temp_df[\"持股市值\"], errors=\"coerce\")\n        temp_df[\"持股市值变化-1日\"] = pd.to_numeric(\n            temp_df[\"持股市值变化-1日\"], errors=\"coerce\"\n        )\n        temp_df[\"持股市值变化-5日\"] = pd.to_numeric(\n            temp_df[\"持股市值变化-5日\"], errors=\"coerce\"\n        )\n        temp_df[\"持股市值变化-10日\"] = pd.to_numeric(\n            temp_df[\"持股市值变化-10日\"], errors=\"coerce\"\n        )\n        return temp_df\n\n    elif market == \"北向持股\":\n        params = {\n            \"sortColumns\": \"HOLD_DATE\",\n            \"sortTypes\": \"-1\",\n            \"pageSize\": \"500\",\n            \"pageNumber\": \"1\",\n            \"reportName\": \"PRT_MUTUAL_ORG_STA\",\n            \"columns\": \"ALL\",\n            \"source\": \"WEB\",\n            \"client\": \"WEB\",\n            \"filter\": f\"\"\"(MARKET_TYPE=\"N\")(HOLD_DATE>='{start_date}')(HOLD_DATE<='{end_date}')\"\"\",\n        }\n        url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        total_page = data_json[\"result\"][\"pages\"]\n        big_df = pd.DataFrame()\n        tqdm = get_tqdm()\n        for page in tqdm(range(1, total_page + 1), leave=False):\n            params.update({\"pageNumber\": page})\n            r = requests.get(url, params=params, headers=headers)\n            data_json = r.json()\n            temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n        big_df.columns = [\n            \"持股日期\",\n            \"_\",\n            \"持股只数\",\n            \"_\",\n            \"持股市值\",\n            \"持股市值变化-1日\",\n            \"持股市值变化-5日\",\n            \"持股市值变化-10日\",\n            \"_\",\n            \"机构名称\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n        big_df = big_df[\n            [\n                \"持股日期\",\n                \"机构名称\",\n                \"持股只数\",\n                \"持股市值\",\n                \"持股市值变化-1日\",\n                \"持股市值变化-5日\",\n                \"持股市值变化-10日\",\n            ]\n        ]\n        big_df[\"持股日期\"] = pd.to_datetime(big_df[\"持股日期\"], errors=\"coerce\").dt.date\n        big_df[\"持股只数\"] = pd.to_numeric(big_df[\"持股只数\"], errors=\"coerce\")\n        big_df[\"持股市值\"] = pd.to_numeric(big_df[\"持股市值\"], errors=\"coerce\")\n        big_df[\"持股市值变化-1日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-1日\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-5日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-5日\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-10日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-10日\"], errors=\"coerce\"\n        )\n        return big_df\n    elif market == \"沪股通持股\":\n        params = {\n            \"sortColumns\": \"HOLD_DATE\",\n            \"sortTypes\": \"-1\",\n            \"pageSize\": \"500\",\n            \"pageNumber\": \"1\",\n            \"reportName\": \"PRT_MUTUAL_ORG_STA\",\n            \"columns\": \"ALL\",\n            \"source\": \"WEB\",\n            \"client\": \"WEB\",\n            \"filter\": f\"\"\"(MARKET_TYPE=\"001\")(HOLD_DATE>='{start_date}')(HOLD_DATE<='{end_date}')\"\"\",\n        }\n        url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        total_page = data_json[\"result\"][\"pages\"]\n        big_df = pd.DataFrame()\n        tqdm = get_tqdm()\n        for page in tqdm(range(1, total_page + 1), leave=False):\n            params.update({\"pageNumber\": page})\n            r = requests.get(url, params=params, headers=headers)\n            data_json = r.json()\n            temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n        big_df.columns = [\n            \"持股日期\",\n            \"_\",\n            \"持股只数\",\n            \"_\",\n            \"持股市值\",\n            \"持股市值变化-1日\",\n            \"持股市值变化-5日\",\n            \"持股市值变化-10日\",\n            \"_\",\n            \"机构名称\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n        big_df = big_df[\n            [\n                \"持股日期\",\n                \"机构名称\",\n                \"持股只数\",\n                \"持股市值\",\n                \"持股市值变化-1日\",\n                \"持股市值变化-5日\",\n                \"持股市值变化-10日\",\n            ]\n        ]\n        big_df[\"持股日期\"] = pd.to_datetime(big_df[\"持股日期\"], errors=\"coerce\").dt.date\n        big_df[\"持股只数\"] = pd.to_numeric(big_df[\"持股只数\"], errors=\"coerce\")\n        big_df[\"持股市值\"] = pd.to_numeric(big_df[\"持股市值\"], errors=\"coerce\")\n        big_df[\"持股市值变化-1日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-1日\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-5日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-5日\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-10日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-10日\"], errors=\"coerce\"\n        )\n        return big_df\n    elif market == \"深股通持股\":\n        params = {\n            \"sortColumns\": \"HOLD_DATE\",\n            \"sortTypes\": \"-1\",\n            \"pageSize\": \"500\",\n            \"pageNumber\": \"1\",\n            \"reportName\": \"PRT_MUTUAL_ORG_STA\",\n            \"columns\": \"ALL\",\n            \"source\": \"WEB\",\n            \"client\": \"WEB\",\n            \"filter\": f\"\"\"(MARKET_TYPE=\"003\")(HOLD_DATE>='{start_date}')(HOLD_DATE<='{end_date}')\"\"\",\n        }\n        url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        total_page = data_json[\"result\"][\"pages\"]\n        big_df = pd.DataFrame()\n        tqdm = get_tqdm()\n        for page in tqdm(range(1, total_page + 1), leave=False):\n            params.update({\"pageNumber\": page})\n            r = requests.get(url, params=params, headers=headers)\n            data_json = r.json()\n            temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n        big_df.columns = [\n            \"持股日期\",\n            \"_\",\n            \"持股只数\",\n            \"_\",\n            \"持股市值\",\n            \"持股市值变化-1日\",\n            \"持股市值变化-5日\",\n            \"持股市值变化-10日\",\n            \"_\",\n            \"机构名称\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n            \"_\",\n        ]\n        big_df = big_df[\n            [\n                \"持股日期\",\n                \"机构名称\",\n                \"持股只数\",\n                \"持股市值\",\n                \"持股市值变化-1日\",\n                \"持股市值变化-5日\",\n                \"持股市值变化-10日\",\n            ]\n        ]\n        big_df[\"持股日期\"] = pd.to_datetime(big_df[\"持股日期\"], errors=\"coerce\").dt.date\n        big_df[\"持股只数\"] = pd.to_numeric(big_df[\"持股只数\"], errors=\"coerce\")\n        big_df[\"持股市值\"] = pd.to_numeric(big_df[\"持股市值\"], errors=\"coerce\")\n        big_df[\"持股市值变化-1日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-1日\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-5日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-5日\"], errors=\"coerce\"\n        )\n        big_df[\"持股市值变化-10日\"] = pd.to_numeric(\n            big_df[\"持股市值变化-10日\"], errors=\"coerce\"\n        )\n        return big_df\n\n\ndef stock_hsgt_hist_em(symbol: str = \"北向资金\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-资金流向-沪深港通资金流向-沪深港通历史数据\n    https://data.eastmoney.com/hsgt/index.html\n    :param symbol: choice of {\"北向资金\", \"沪股通\", \"深股通\", \"南向资金\", \"港股通沪\", \"港股通深\"}\n    :type symbol: str\n    :return: 沪深港通历史数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(action=\"ignore\", category=FutureWarning)\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    symbol_map = {\n        \"北向资金\": \"5\",\n        \"沪股通\": \"1\",\n        \"深股通\": \"3\",\n        \"南向资金\": \"6\",\n        \"港股通沪\": \"2\",\n        \"港股通深\": \"4\",\n    }\n    params = {\n        \"sortColumns\": \"TRADE_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"1000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_MUTUAL_DEAL_HISTORY\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f'(MUTUAL_TYPE=\"00{symbol_map[symbol]}\")',\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    temp_list = []\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(total_page) + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        temp_list.append(temp_df)\n\n    big_df = pd.concat(objs=temp_list, ignore_index=True)\n    if symbol == \"北向资金\":\n        index_name = \"沪深300\"\n    elif symbol == \"沪股通\":\n        index_name = \"上证指数\"\n    elif symbol == \"深股通\":\n        index_name = \"深证指数\"\n    elif symbol == \"南向资金\":\n        index_name = \"沪深300\"\n    else:\n        index_name = \"恒生指数\"\n\n    big_df.rename(\n        columns={\n            \"MUTUAL_TYPE\": \"-\",\n            \"TRADE_DATE\": \"日期\",\n            \"FUND_INFLOW\": \"当日资金流入\",\n            \"NET_DEAL_AMT\": \"当日成交净买额\",\n            \"QUOTA_BALANCE\": \"当日余额\",\n            \"ACCUM_DEAL_AMT\": \"历史累计净买额\",\n            \"BUY_AMT\": \"买入成交额\",\n            \"SELL_AMT\": \"卖出成交额\",\n            \"LEAD_STOCKS_CODE\": \"领涨股-代码\",\n            \"LEAD_STOCKS_NAME\": \"领涨股\",\n            \"LS_CHANGE_RATE\": \"领涨股-涨跌幅\",\n            \"INDEX_CLOSE_PRICE\": index_name,\n            \"INDEX_CHANGE_RATE\": f\"{index_name}-涨跌幅\",\n            \"HOLD_MARKET_CAP\": \"持股市值\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"日期\",\n            \"当日成交净买额\",\n            \"买入成交额\",\n            \"卖出成交额\",\n            \"历史累计净买额\",\n            \"当日资金流入\",\n            \"当日余额\",\n            \"持股市值\",\n            \"领涨股\",\n            \"领涨股-涨跌幅\",\n            index_name,\n            f\"{index_name}-涨跌幅\",\n            \"领涨股-代码\",\n        ]\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df.sort_values([\"日期\"], inplace=True, ignore_index=True)\n    big_df[\"当日资金流入\"] = (\n        pd.to_numeric(big_df[\"当日资金流入\"], errors=\"coerce\") / 100\n    )\n    big_df[\"当日余额\"] = pd.to_numeric(big_df[\"当日余额\"], errors=\"coerce\") / 100\n    if symbol == \"沪股通\" or symbol == \"深股通\":\n        big_df[\"历史累计净买额\"] = (\n            pd.to_numeric(big_df[\"历史累计净买额\"], errors=\"coerce\") / 100\n        )\n    else:\n        big_df[\"历史累计净买额\"] = (\n            pd.to_numeric(big_df[\"历史累计净买额\"], errors=\"coerce\") / 100 / 10000\n        )\n    big_df[\"当日成交净买额\"] = (\n        pd.to_numeric(big_df[\"当日成交净买额\"], errors=\"coerce\") / 100\n    )\n    big_df[\"买入成交额\"] = pd.to_numeric(big_df[\"买入成交额\"], errors=\"coerce\") / 100\n    big_df[\"卖出成交额\"] = pd.to_numeric(big_df[\"卖出成交额\"], errors=\"coerce\") / 100\n    big_df[\"领涨股-涨跌幅\"] = pd.to_numeric(big_df[\"领涨股-涨跌幅\"], errors=\"coerce\")\n    big_df[index_name] = pd.to_numeric(big_df[index_name], errors=\"coerce\")\n    big_df[f\"{index_name}-涨跌幅\"] = pd.to_numeric(\n        big_df[f\"{index_name}-涨跌幅\"], errors=\"coerce\"\n    )\n    big_df[\"持股市值\"] = pd.to_numeric(big_df[\"持股市值\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_hsgt_board_rank_em(\n    symbol: str = \"北向资金增持行业板块排行\", indicator: str = \"今日\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-沪深港通持股-行业板块排行-北向资金增持行业板块排行\n    https://data.eastmoney.com/hsgtcg/bk.html\n    :param symbol: choice of {\"北向资金增持行业板块排行\", \"北向资金增持概念板块排行\", \"北向资金增持地域板块排行\"}\n    :type symbol: str\n    :param indicator: choice of {\"今日\", \"3日\", \"5日\", \"10日\", \"1月\", \"1季\", \"1年\"}\n    :type indicator: str\n    :return: 北向资金增持行业板块排行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://data.eastmoney.com/hsgtcg/hy.html\"\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    current_date = soup.find(attrs={\"id\": \"bkph_date\"}).text.strip(\"（\").strip(\"）\")\n    symbol_map = {\n        \"北向资金增持行业板块排行\": \"5\",\n        \"北向资金增持概念板块排行\": \"4\",\n        \"北向资金增持地域板块排行\": \"3\",\n    }\n    indicator_map = {\n        \"今日\": \"1\",\n        \"3日\": \"3\",\n        \"5日\": \"5\",\n        \"10日\": \"10\",\n        \"1月\": \"M\",\n        \"1季\": \"Q\",\n        \"1年\": \"Y\",\n    }\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"ADD_MARKET_CAP\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_MUTUAL_BOARD_HOLDRANK_WEB\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"f3~05~SECURITY_CODE~INDEX_CHANGE_RATIO\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"\"\"(BOARD_TYPE=\"{symbol_map[symbol]}\")(TRADE_DATE='{current_date}')(INTERVAL_TYPE=\"{indicator_map[indicator]}\")\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    temp_df.columns = [\n        \"序号\",\n        \"_\",\n        \"_\",\n        \"名称\",\n        \"_\",\n        \"最新涨跌幅\",\n        \"报告时间\",\n        \"_\",\n        \"_\",\n        \"北向资金今日增持估计-股票只数\",\n        \"北向资金今日持股-股票只数\",\n        \"北向资金今日增持估计-市值\",\n        \"北向资金今日增持估计-市值增幅\",\n        \"-\",\n        \"北向资金今日增持估计-占板块比\",\n        \"北向资金今日增持估计-占北向资金比\",\n        \"北向资金今日持股-市值\",\n        \"北向资金今日持股-占北向资金比\",\n        \"北向资金今日持股-占板块比\",\n        \"_\",\n        \"_\",\n        \"今日增持最大股-市值\",\n        \"_\",\n        \"_\",\n        \"今日减持最大股-市值\",\n        \"今日增持最大股-占总市值比\",\n        \"_\",\n        \"_\",\n        \"今日减持最大股-占总市值比\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"名称\",\n            \"最新涨跌幅\",\n            \"北向资金今日持股-股票只数\",\n            \"北向资金今日持股-市值\",\n            \"北向资金今日持股-占板块比\",\n            \"北向资金今日持股-占北向资金比\",\n            \"北向资金今日增持估计-股票只数\",\n            \"北向资金今日增持估计-市值\",\n            \"北向资金今日增持估计-市值增幅\",\n            \"北向资金今日增持估计-占板块比\",\n            \"北向资金今日增持估计-占北向资金比\",\n            \"今日增持最大股-市值\",\n            \"今日增持最大股-占总市值比\",\n            \"今日减持最大股-市值\",\n            \"今日减持最大股-占总市值比\",\n            \"报告时间\",\n        ]\n    ]\n    temp_df[\"最新涨跌幅\"] = pd.to_numeric(temp_df[\"最新涨跌幅\"], errors=\"coerce\")\n    temp_df[\"北向资金今日持股-股票只数\"] = pd.to_numeric(\n        temp_df[\"北向资金今日持股-股票只数\"], errors=\"coerce\"\n    )\n    temp_df[\"北向资金今日持股-市值\"] = pd.to_numeric(\n        temp_df[\"北向资金今日持股-市值\"], errors=\"coerce\"\n    )\n    temp_df[\"北向资金今日持股-占板块比\"] = pd.to_numeric(\n        temp_df[\"北向资金今日持股-占板块比\"], errors=\"coerce\"\n    )\n    temp_df[\"北向资金今日持股-占北向资金比\"] = pd.to_numeric(\n        temp_df[\"北向资金今日持股-占北向资金比\"], errors=\"coerce\"\n    )\n    temp_df[\"北向资金今日增持估计-股票只数\"] = pd.to_numeric(\n        temp_df[\"北向资金今日增持估计-股票只数\"], errors=\"coerce\"\n    )\n    temp_df[\"北向资金今日增持估计-市值\"] = pd.to_numeric(\n        temp_df[\"北向资金今日增持估计-市值\"], errors=\"coerce\"\n    )\n    temp_df[\"北向资金今日增持估计-市值增幅\"] = pd.to_numeric(\n        temp_df[\"北向资金今日增持估计-市值增幅\"], errors=\"coerce\"\n    )\n    temp_df[\"北向资金今日增持估计-占板块比\"] = pd.to_numeric(\n        temp_df[\"北向资金今日增持估计-占板块比\"], errors=\"coerce\"\n    )\n    temp_df[\"北向资金今日增持估计-占北向资金比\"] = pd.to_numeric(\n        temp_df[\"北向资金今日增持估计-占北向资金比\"], errors=\"coerce\"\n    )\n    temp_df[\"报告时间\"] = pd.to_datetime(temp_df[\"报告时间\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\ndef __stock_hsgt_individual_zh_hk_em(symbol: str = \"00700\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-沪深港通-沪深港通持股-具体股票\n    https://data.eastmoney.com/hsgt/StockHdDetail/00700.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 具体股票-沪深港通持股\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"TRADE_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_MUTUAL_STOCK_HOLDRANKS\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"\"\"(SECUCODE=\"{symbol}.HK\")(MUTUAL_TYPE=\"002\")\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    for page in range(1, total_page + 1):\n        params.update({\"pageNumber\": str(page)})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        if page == 1:\n            temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        else:\n            temp_df = pd.concat(\n                objs=[temp_df, pd.DataFrame(data_json[\"result\"][\"data\"])],\n                ignore_index=True,\n            )\n\n    temp_df.rename(\n        columns={\n            \"SECURITY_INNER_CODE\": \"-\",\n            \"SECUCODE\": \"-\",\n            \"TRADE_DATE\": \"持股日期\",\n            \"SECURITY_CODE\": \"-\",\n            \"SECURITY_NAME\": \"-\",\n            \"MUTUAL_TYPE\": \"-\",\n            \"CHANGE_RATE\": \"当日涨跌幅\",\n            \"CLOSE_PRICE\": \"当日收盘价\",\n            \"HOLD_SHARES\": \"持股数量\",\n            \"HOLD_MARKET_CAP\": \"持股市值\",\n            \"A_SHARES_RATIO\": \"-\",\n            \"HOLD_SHARES_RATIO\": \"持股数量占A股百分比\",\n            \"FREE_SHARES_RATIO\": \"-\",\n            \"TOTAL_SHARES_RATIO\": \"-\",\n            \"HOLD_MARKETCAP_CHG1\": \"持股市值变化-1日\",\n            \"HOLD_MARKETCAP_CHG5\": \"持股市值变化-5日\",\n            \"HOLD_MARKETCAP_CHG10\": \"持股市值变化-10日\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"持股日期\",\n            \"当日收盘价\",\n            \"当日涨跌幅\",\n            \"持股数量\",\n            \"持股市值\",\n            \"持股数量占A股百分比\",\n            \"持股市值变化-1日\",\n            \"持股市值变化-5日\",\n            \"持股市值变化-10日\",\n        ]\n    ]\n    temp_df[\"持股日期\"] = pd.to_datetime(temp_df[\"持股日期\"], errors=\"coerce\").dt.date\n    temp_df[\"当日收盘价\"] = pd.to_numeric(temp_df[\"当日收盘价\"], errors=\"coerce\")\n    temp_df[\"当日涨跌幅\"] = pd.to_numeric(temp_df[\"当日涨跌幅\"], errors=\"coerce\")\n    temp_df[\"持股数量\"] = pd.to_numeric(temp_df[\"持股数量\"], errors=\"coerce\")\n    temp_df[\"持股市值\"] = pd.to_numeric(temp_df[\"持股市值\"], errors=\"coerce\")\n    temp_df[\"持股数量占A股百分比\"] = pd.to_numeric(\n        temp_df[\"持股数量占A股百分比\"], errors=\"coerce\"\n    )\n    temp_df[\"持股市值变化-1日\"] = pd.to_numeric(\n        temp_df[\"持股市值变化-1日\"], errors=\"coerce\"\n    )\n    temp_df[\"持股市值变化-5日\"] = pd.to_numeric(\n        temp_df[\"持股市值变化-5日\"], errors=\"coerce\"\n    )\n    temp_df[\"持股市值变化-10日\"] = pd.to_numeric(\n        temp_df[\"持股市值变化-10日\"], errors=\"coerce\"\n    )\n    temp_df.sort_values(\"持股日期\", ignore_index=True, inplace=True)\n    return temp_df\n\n\ndef __stock_hsgt_individual_zh_a_em(symbol: str = \"002008\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-沪深港通-沪深港通持股-具体股票\n    https://data.eastmoney.com/hsgt/StockHdStatistics/002008.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 具体股票-沪深港通持股\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"TRADE_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_MUTUAL_HOLDSTOCKNDATE_STA\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"\"\"(SECURITY_CODE=\"{symbol}\")(INTERVAL_TYPE=\"1\")\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    for page in range(1, total_page + 1):\n        params.update({\"pageNumber\": str(page)})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        if page == 1:\n            temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        else:\n            temp_df = pd.concat(\n                objs=[temp_df, pd.DataFrame(data_json[\"result\"][\"data\"])],\n                ignore_index=True,\n            )\n\n    temp_df.rename(\n        columns={\n            \"SECURITY_INNER_CODE\": \"-\",\n            \"SECUCODE\": \"-\",\n            \"TRADE_DATE\": \"持股日期\",\n            \"SECURITY_CODE\": \"-\",\n            \"SECURITY_NAME\": \"-\",\n            \"MUTUAL_TYPE\": \"-\",\n            \"CHANGE_RATE\": \"当日涨跌幅\",\n            \"CLOSE_PRICE\": \"当日收盘价\",\n            \"HOLD_SHARES\": \"持股数量\",\n            \"HOLD_MARKET_CAP\": \"持股市值\",\n            \"A_SHARES_RATIO\": \"-\",\n            \"HOLD_SHARES_RATIO\": \"持股数量占A股百分比\",\n            \"FREE_SHARES_RATIO\": \"-\",\n            \"TOTAL_SHARES_RATIO\": \"-\",\n            \"HMC_CHANGE\": \"今日持股市值变化\",\n            \"ADD_SHARES_REPAIR\": \"今日增持股数\",\n            \"PREDICT_AMC\": \"今日增持资金\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"持股日期\",\n            \"当日收盘价\",\n            \"当日涨跌幅\",\n            \"持股数量\",\n            \"持股市值\",\n            \"持股数量占A股百分比\",\n            \"今日增持股数\",\n            \"今日增持资金\",\n            \"今日持股市值变化\",\n        ]\n    ]\n    temp_df[\"持股日期\"] = pd.to_datetime(temp_df[\"持股日期\"], errors=\"coerce\").dt.date\n    temp_df[\"当日收盘价\"] = pd.to_numeric(temp_df[\"当日收盘价\"], errors=\"coerce\")\n    temp_df[\"当日涨跌幅\"] = pd.to_numeric(temp_df[\"当日涨跌幅\"], errors=\"coerce\")\n    temp_df[\"持股数量\"] = pd.to_numeric(temp_df[\"持股数量\"], errors=\"coerce\")\n    temp_df[\"持股市值\"] = pd.to_numeric(temp_df[\"持股市值\"], errors=\"coerce\")\n    temp_df[\"持股数量占A股百分比\"] = pd.to_numeric(\n        temp_df[\"持股数量占A股百分比\"], errors=\"coerce\"\n    )\n    temp_df[\"今日增持股数\"] = pd.to_numeric(temp_df[\"今日增持股数\"], errors=\"coerce\")\n    temp_df[\"今日增持资金\"] = pd.to_numeric(temp_df[\"今日增持资金\"], errors=\"coerce\")\n    temp_df[\"今日持股市值变化\"] = pd.to_numeric(\n        temp_df[\"今日持股市值变化\"], errors=\"coerce\"\n    )\n    temp_df.sort_values(\"持股日期\", ignore_index=True, inplace=True)\n    return temp_df\n\n\ndef stock_hsgt_individual_em(symbol: str = \"002008\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-沪深港通-沪深港通持股-具体股票\n    https://data.eastmoney.com/hsgt/StockHdDetail/002008.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 具体股票-沪深港通持股\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if len(symbol) == 6:\n        return __stock_hsgt_individual_zh_a_em(symbol=symbol)\n    else:\n        return __stock_hsgt_individual_zh_hk_em(symbol=symbol)\n\n\ndef stock_hsgt_individual_detail_em(\n    symbol: str = \"002008\",\n    start_date: str = \"20220130\",\n    end_date: str = \"20220330\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-沪深港通-沪深港通持股-具体股票详情\n    https://data.eastmoney.com/hsgtcg/StockHdStatistics/002008.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :param start_date: 开始时间\n    :type start_date: str\n    :param end_date: 结束时间\n    :type end_date: str\n    :return: 沪深港通持股-具体股票详情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"HOLD_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_MUTUAL_HOLD_DET\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"\"\"(SECURITY_CODE=\"{symbol}\")(MARKET_CODE=\"003\")(HOLD_DATE\n        >='{\"-\".join([start_date[:4], start_date[4:6], start_date[6:]])}')(HOLD_DATE\n        <='{\"-\".join([end_date[:4], end_date[4:6], end_date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    try:\n        data_json[\"result\"][\"pages\"]\n    except TypeError:\n        params.update(\n            {\n                \"filter\": f\"\"\"(SECURITY_CODE=\"{symbol}\")(MARKET_CODE=\"001\")(HOLD_DATE\n                >='{\"-\".join([start_date[:4], start_date[4:6], start_date[6:]])}')(HOLD_DATE\n                <='{\"-\".join([end_date[:4], end_date[4:6], end_date[6:]])}')\"\"\",\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(total_page) + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.rename(\n        columns={\n            \"SECUCODE\": \"-\",\n            \"SECURITY_CODE\": \"-\",\n            \"SECURITY_INNER_CODE\": \"-\",\n            \"SECURITY_NAME_ABBR\": \"-\",\n            \"HOLD_DATE\": \"持股日期\",\n            \"ORG_CODE\": \"-\",\n            \"ORG_NAME\": \"机构名称\",\n            \"HOLD_NUM\": \"持股数量\",\n            \"MARKET_CODE\": \"-\",\n            \"HOLD_SHARES_RATIO\": \"持股数量占A股百分比\",\n            \"HOLD_MARKET_CAP\": \"持股市值\",\n            \"CLOSE_PRICE\": \"当日收盘价\",\n            \"CHANGE_RATE\": \"当日涨跌幅\",\n            \"HOLD_MARKET_CAPONE\": \"持股市值变化-1日\",\n            \"HOLD_MARKET_CAPFIVE\": \"持股市值变化-5日\",\n            \"HOLD_MARKET_CAPTEN\": \"持股市值变化-10日\",\n            \"PARTICIPANT_CODE\": \"-\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"持股日期\",\n            \"当日收盘价\",\n            \"当日涨跌幅\",\n            \"机构名称\",\n            \"持股数量\",\n            \"持股市值\",\n            \"持股数量占A股百分比\",\n            \"持股市值变化-1日\",\n            \"持股市值变化-5日\",\n            \"持股市值变化-10日\",\n        ]\n    ]\n    big_df[\"持股日期\"] = pd.to_datetime(big_df[\"持股日期\"], errors=\"coerce\").dt.date\n    big_df[\"当日收盘价\"] = pd.to_numeric(big_df[\"当日收盘价\"], errors=\"coerce\")\n    big_df[\"当日涨跌幅\"] = pd.to_numeric(big_df[\"当日涨跌幅\"], errors=\"coerce\")\n    big_df[\"持股数量\"] = pd.to_numeric(big_df[\"持股数量\"], errors=\"coerce\")\n    big_df[\"持股市值\"] = pd.to_numeric(big_df[\"持股市值\"], errors=\"coerce\")\n    big_df[\"持股数量占A股百分比\"] = pd.to_numeric(\n        big_df[\"持股数量占A股百分比\"], errors=\"coerce\"\n    )\n    big_df[\"持股市值变化-1日\"] = pd.to_numeric(\n        big_df[\"持股市值变化-1日\"], errors=\"coerce\"\n    )\n    big_df[\"持股市值变化-5日\"] = pd.to_numeric(\n        big_df[\"持股市值变化-5日\"], errors=\"coerce\"\n    )\n    big_df[\"持股市值变化-10日\"] = pd.to_numeric(\n        big_df[\"持股市值变化-10日\"], errors=\"coerce\"\n    )\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_hsgt_fund_flow_summary_em_df = stock_hsgt_fund_flow_summary_em()\n    print(stock_hsgt_fund_flow_summary_em_df)\n\n    stock_hk_ggt_components_em_df = stock_hk_ggt_components_em()\n    print(stock_hk_ggt_components_em_df)\n\n    stock_hsgt_hold_stock_em_df = stock_hsgt_hold_stock_em(\n        market=\"北向\", indicator=\"今日排行\"\n    )\n    print(stock_hsgt_hold_stock_em_df)\n\n    stock_hsgt_hold_stock_em_df = stock_hsgt_hold_stock_em(\n        market=\"沪股通\", indicator=\"5日排行\"\n    )\n    print(stock_hsgt_hold_stock_em_df)\n\n    stock_hsgt_hold_stock_em_df = stock_hsgt_hold_stock_em(\n        market=\"深股通\", indicator=\"5日排行\"\n    )\n    print(stock_hsgt_hold_stock_em_df)\n\n    stock_hsgt_hold_stock_em_df = stock_hsgt_hold_stock_em(\n        market=\"沪股通\", indicator=\"10日排行\"\n    )\n    print(stock_hsgt_hold_stock_em_df)\n\n    stock_hsgt_stock_statistics_em_df = stock_hsgt_stock_statistics_em(\n        symbol=\"北向持股\", start_date=\"20240110\", end_date=\"20240110\"\n    )\n    print(stock_hsgt_stock_statistics_em_df)\n\n    stock_hsgt_stock_statistics_em_df = stock_hsgt_stock_statistics_em(\n        symbol=\"南向持股\", start_date=\"20250314\", end_date=\"20250314\"\n    )\n    print(stock_hsgt_stock_statistics_em_df)\n\n    stock_hsgt_stock_statistics_em_df = stock_hsgt_stock_statistics_em(\n        symbol=\"沪股通持股\", start_date=\"20240110\", end_date=\"20240110\"\n    )\n    print(stock_hsgt_stock_statistics_em_df)\n\n    stock_hsgt_stock_statistics_em_df = stock_hsgt_stock_statistics_em(\n        symbol=\"深股通持股\", start_date=\"20240110\", end_date=\"20240110\"\n    )\n    print(stock_hsgt_stock_statistics_em_df)\n\n    stock_hsgt_institution_statistics_em_df = stock_hsgt_institution_statistics_em(\n        market=\"北向持股\", start_date=\"20240110\", end_date=\"20240110\"\n    )\n    print(stock_hsgt_institution_statistics_em_df)\n\n    stock_hsgt_institution_statistics_em_df = stock_hsgt_institution_statistics_em(\n        market=\"南向持股\", start_date=\"20240110\", end_date=\"20240110\"\n    )\n    print(stock_hsgt_institution_statistics_em_df)\n\n    stock_hsgt_institution_statistics_em_df = stock_hsgt_institution_statistics_em(\n        market=\"沪股通持股\", start_date=\"20240110\", end_date=\"20240110\"\n    )\n    print(stock_hsgt_institution_statistics_em_df)\n\n    stock_hsgt_institution_statistics_em_df = stock_hsgt_institution_statistics_em(\n        market=\"深股通持股\", start_date=\"20240110\", end_date=\"20240110\"\n    )\n    print(stock_hsgt_institution_statistics_em_df)\n\n    stock_hsgt_hist_em_df = stock_hsgt_hist_em(symbol=\"港股通沪\")\n    print(stock_hsgt_hist_em_df)\n\n    stock_hsgt_board_rank_em_df = stock_hsgt_board_rank_em(\n        symbol=\"北向资金增持行业板块排行\", indicator=\"今日\"\n    )\n    print(stock_hsgt_board_rank_em_df)\n\n    stock_hsgt_individual_em_df = stock_hsgt_individual_em(symbol=\"00700\")\n    print(stock_hsgt_individual_em_df)\n\n    stock_hsgt_individual_detail_em_df = stock_hsgt_individual_detail_em(\n        symbol=\"002008\", start_date=\"20240110\", end_date=\"20240110\"\n    )\n    print(stock_hsgt_individual_detail_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_hsgt_exchange_rate.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/2/19 22:00\nDesc: 参考汇率和结算汇率\n深港通-港股通业务信息\n深港通-港股通业务信息: https://www.szse.cn/szhk/hkbussiness/exchangerate/index.html\n沪港通-港股通信息披露: https://www.sse.com.cn/services/hkexsc/disclo/ratios/\n\"\"\"\n\nimport warnings\nfrom datetime import datetime\n\nimport pandas as pd\nimport requests\n\n\ndef stock_sgt_settlement_exchange_rate_szse() -> pd.DataFrame:\n    \"\"\"\n    深港通-港股通业务信息-结算汇率\n    https://www.szse.cn/szhk/hkbussiness/exchangerate/index.html\n    :return: 结算汇率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.szse.cn/api/report/ShowReport\"\n    params = {\n        \"SHOWTYPE\": \"xlsx\",\n        \"CATALOGID\": \"SGT_LSHL\",\n        \"TABKEY\": \"tab2\",\n        \"random\": \"0.9184251620553985\",\n    }\n    r = requests.get(url, params=params)\n    with warnings.catch_warnings(record=True):\n        warnings.simplefilter(\"always\")\n        temp_df = pd.read_excel(r.content, engine=\"openpyxl\")\n    temp_df.sort_values(by=\"适用日期\", inplace=True, ignore_index=True)\n    temp_df[\"适用日期\"] = pd.to_datetime(temp_df[\"适用日期\"], errors=\"coerce\").dt.date\n    temp_df[\"买入结算汇兑比率\"] = pd.to_numeric(\n        temp_df[\"买入结算汇兑比率\"], errors=\"coerce\"\n    )\n    temp_df[\"卖出结算汇兑比率\"] = pd.to_numeric(\n        temp_df[\"卖出结算汇兑比率\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_sgt_reference_exchange_rate_szse() -> pd.DataFrame:\n    \"\"\"\n    深港通-港股通业务信息-参考汇率\n    https://www.szse.cn/szhk/hkbussiness/exchangerate/index.html\n    :return: 参考汇率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.szse.cn/api/report/ShowReport\"\n    params = {\n        \"SHOWTYPE\": \"xlsx\",\n        \"CATALOGID\": \"SGT_LSHL\",\n        \"TABKEY\": \"tab1\",\n        \"random\": \"0.9184251620553985\",\n    }\n    r = requests.get(url, params=params)\n    with warnings.catch_warnings(record=True):\n        warnings.simplefilter(\"always\")\n        temp_df = pd.read_excel(r.content, engine=\"openpyxl\")\n    temp_df.sort_values(by=\"适用日期\", inplace=True, ignore_index=True)\n    temp_df[\"适用日期\"] = pd.to_datetime(temp_df[\"适用日期\"], errors=\"coerce\").dt.date\n    temp_df[\"参考汇率买入价\"] = pd.to_numeric(\n        temp_df[\"参考汇率买入价\"], errors=\"coerce\"\n    )\n    temp_df[\"参考汇率卖出价\"] = pd.to_numeric(\n        temp_df[\"参考汇率卖出价\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_sgt_reference_exchange_rate_sse() -> pd.DataFrame:\n    \"\"\"\n    沪港通-港股通信息披露-参考汇率\n    https://www.sse.com.cn/services/hkexsc/disclo/ratios/\n    :return: 参考汇率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    current_date = datetime.now().date().isoformat().replace(\"-\", \"\")\n    url = \"https://query.sse.com.cn/commonSoaQuery.do\"\n    params = {\n        \"isPagination\": \"true\",\n        \"updateDate\": \"20120601\",\n        \"updateDateEnd\": current_date,\n        \"sqlId\": \"FW_HGT_GGTHL\",\n        \"pageHelp.cacheSize\": \"1\",\n        \"pageHelp.pageSize\": \"10000\",\n        \"pageHelp.pageNo\": \"1\",\n        \"pageHelp.beginPage\": \"1\",\n        \"pageHelp.endPage\": \"1\",\n    }\n    headers = {\n        \"Host\": \"query.sse.com.cn\",\n        \"Referer\": \"https://www.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/105.0.0.0 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"])\n    temp_df.rename(\n        columns={\n            \"currencyType\": \"货币种类\",\n            \"buyPrice\": \"参考汇率买入价\",\n            \"updateDate\": \"-\",\n            \"validDate\": \"适用日期\",\n            \"sellPrice\": \"参考汇率卖出价\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"适用日期\",\n            \"参考汇率买入价\",\n            \"参考汇率卖出价\",\n            \"货币种类\",\n        ]\n    ]\n    temp_df.sort_values(\"适用日期\", inplace=True, ignore_index=True)\n    temp_df[\"适用日期\"] = pd.to_datetime(temp_df[\"适用日期\"], errors=\"coerce\").dt.date\n    temp_df[\"参考汇率买入价\"] = pd.to_numeric(\n        temp_df[\"参考汇率买入价\"], errors=\"coerce\"\n    )\n    temp_df[\"参考汇率卖出价\"] = pd.to_numeric(\n        temp_df[\"参考汇率卖出价\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_sgt_settlement_exchange_rate_sse() -> pd.DataFrame:\n    \"\"\"\n    沪港通-港股通信息披露-结算汇兑\n    https://www.sse.com.cn/services/hkexsc/disclo/ratios/\n    :return: 结算汇兑比率\n    :rtype: pandas.DataFrame\n    \"\"\"\n    current_date = datetime.now().date().isoformat().replace(\"-\", \"\")\n    url = \"https://query.sse.com.cn/commonSoaQuery.do\"\n    params = {\n        \"isPagination\": \"true\",\n        \"updateDate\": \"20120601\",\n        \"updateDateEnd\": current_date,\n        \"sqlId\": \"FW_HGT_JSHDBL\",\n        \"pageHelp.cacheSize\": \"1\",\n        \"pageHelp.pageSize\": \"10000\",\n        \"pageHelp.pageNo\": \"1\",\n        \"pageHelp.beginPage\": \"1\",\n        \"pageHelp.endPage\": \"1\",\n    }\n    headers = {\n        \"Host\": \"query.sse.com.cn\",\n        \"Referer\": \"https://www.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/105.0.0.0 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"])\n    temp_df.rename(\n        columns={\n            \"currencyType\": \"货币种类\",\n            \"buyPrice\": \"买入结算汇兑比率\",\n            \"updateDate\": \"-\",\n            \"validDate\": \"适用日期\",\n            \"sellPrice\": \"卖出结算汇兑比率\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"适用日期\",\n            \"买入结算汇兑比率\",\n            \"卖出结算汇兑比率\",\n            \"货币种类\",\n        ]\n    ]\n    temp_df.sort_values(\"适用日期\", inplace=True, ignore_index=True)\n    temp_df[\"适用日期\"] = pd.to_datetime(temp_df[\"适用日期\"], errors=\"coerce\").dt.date\n    temp_df[\"买入结算汇兑比率\"] = pd.to_numeric(\n        temp_df[\"买入结算汇兑比率\"], errors=\"coerce\"\n    )\n    temp_df[\"卖出结算汇兑比率\"] = pd.to_numeric(\n        temp_df[\"卖出结算汇兑比率\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_sgt_settlement_exchange_rate_szse_df = (\n        stock_sgt_settlement_exchange_rate_szse()\n    )\n    print(stock_sgt_settlement_exchange_rate_szse_df)\n\n    stock_sgt_reference_exchange_rate_szse_df = stock_sgt_reference_exchange_rate_szse()\n    print(stock_sgt_reference_exchange_rate_szse_df)\n\n    stock_sgt_reference_exchange_rate_sse_df = stock_sgt_reference_exchange_rate_sse()\n    print(stock_sgt_reference_exchange_rate_sse_df)\n\n    stock_sgt_settlement_exchange_rate_sse_df = stock_sgt_settlement_exchange_rate_sse()\n    print(stock_sgt_settlement_exchange_rate_sse_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_hsgt_min_em.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/2/5 18:00\nDesc: 东方财富网-数据中心-沪深港通-市场概括\nhttps://data.eastmoney.com/hsgt/hsgtDetail/scgk.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_hsgt_fund_min_em(symbol: str = \"北向资金\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-沪深港通-市场概括-分时数据\n    https://data.eastmoney.com/hsgt/hsgtDetail/scgk.html\n    :param symbol: 北向资金; choice of {\"北向资金\", \"南向资金\"}\n    :type symbol: str\n    :return: 沪深港通持股-分时数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2.eastmoney.com/api/qt/kamtbs.rtmin/get\"\n    params = {\n        \"fields1\": \"f1,f2,f3,f4\",\n        \"fields2\": \"f51,f54,f52,f58,f53,f62,f56,f57,f60,f61\",\n        \"ut\": \"b2884a393a59ad64002292a3e90d46a5\",\n        \"_\": \"1707125786160\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n\n    if symbol == \"南向资金\":\n        n2s_str_list = data_json[\"data\"][\"n2s\"]\n        temp_df = pd.DataFrame([item.split(\",\") for item in n2s_str_list])\n        temp_df[\"date\"] = data_json[\"data\"][\"n2sDate\"]\n        temp_df = temp_df.iloc[:, [0, 1, 3, 5, -1]]\n        temp_df.columns = [\"时间\", \"港股通(沪)\", \"港股通(深)\", \"南向资金\", \"日期\"]\n        temp_df = temp_df[[\"日期\", \"时间\", \"港股通(沪)\", \"港股通(深)\", \"南向资金\"]]\n        temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n        temp_df[\"港股通(沪)\"] = pd.to_numeric(temp_df[\"港股通(沪)\"], errors=\"coerce\")\n        temp_df[\"港股通(深)\"] = pd.to_numeric(temp_df[\"港股通(深)\"], errors=\"coerce\")\n        temp_df[\"南向资金\"] = pd.to_numeric(temp_df[\"南向资金\"], errors=\"coerce\")\n        return temp_df\n    else:\n        s2n_str_list = data_json[\"data\"][\"s2n\"]\n        temp_df = pd.DataFrame([item.split(\",\") for item in s2n_str_list])\n        temp_df[\"date\"] = data_json[\"data\"][\"s2nDate\"]\n        temp_df = temp_df.iloc[:, [0, 1, 3, 5, -1]]\n        temp_df.columns = [\"时间\", \"沪股通\", \"深股通\", \"北向资金\", \"日期\"]\n        temp_df = temp_df[[\"日期\", \"时间\", \"沪股通\", \"深股通\", \"北向资金\"]]\n        temp_df[\"日期\"] = pd.to_datetime(temp_df[\"日期\"], errors=\"coerce\").dt.date\n        temp_df[\"沪股通\"] = pd.to_numeric(temp_df[\"沪股通\"], errors=\"coerce\")\n        temp_df[\"深股通\"] = pd.to_numeric(temp_df[\"深股通\"], errors=\"coerce\")\n        temp_df[\"北向资金\"] = pd.to_numeric(temp_df[\"北向资金\"], errors=\"coerce\")\n        return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hsgt_fund_min_em_df = stock_hsgt_fund_min_em(symbol=\"北向资金\")\n    print(stock_hsgt_fund_min_em_df)\n\n    stock_hsgt_fund_min_em_df = stock_hsgt_fund_min_em(symbol=\"南向资金\")\n    print(stock_hsgt_fund_min_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_info.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/8/25 15:00\nDesc: 东方财富-财经早餐\nhttps://stock.eastmoney.com/a/czpnc.html\n\"\"\"\n\nfrom datetime import datetime\n\nimport pandas as pd\nimport requests\n\nfrom akshare.request import make_request_with_retry_json\nfrom akshare.utils.cons import headers\n\n\ndef stock_info_cjzc_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富-财经早餐\n    https://stock.eastmoney.com/a/czpnc.html\n    :return: 财经早餐\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://np-listapi.eastmoney.com/comm/web/getNewsByColumns\"\n    params = {\n        \"client\": \"web\",\n        \"biz\": \"web_news_col\",\n        \"column\": \"1207\",\n        \"order\": \"1\",\n        \"needInteractData\": \"0\",\n        \"page_index\": \"1\",\n        \"page_size\": \"200\",\n        \"req_trace\": \"1710314682980\",\n        \"fields\": \"code,showTime,title,mediaName,summary,image,url,uniqueUrl,Np_dst\",\n    }\n    big_df = pd.DataFrame()\n    for page in range(1, 3):\n        params.update({\"page_index\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"][\"list\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df = big_df[[\"title\", \"summary\", \"showTime\", \"uniqueUrl\"]]\n    big_df.rename(\n        columns={\n            \"title\": \"标题\",\n            \"summary\": \"摘要\",\n            \"showTime\": \"发布时间\",\n            \"uniqueUrl\": \"链接\",\n        },\n        inplace=True,\n    )\n    return big_df\n\n\ndef stock_info_global_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富-全球财经快讯\n    https://kuaixun.eastmoney.com/7_24.html\n    :return: 全球财经快讯\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://np-weblist.eastmoney.com/comm/web/getFastNewsList\"\n    params = {\n        \"client\": \"web\",\n        \"biz\": \"web_724\",\n        \"fastColumn\": \"102\",\n        \"sortEnd\": \"\",\n        \"pageSize\": \"200\",\n        \"req_trace\": \"1710315450384\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"fastNewsList\"])\n    temp_df = temp_df[[\"title\", \"summary\", \"showTime\", \"code\"]]\n    temp_df[\"code\"] = [\n        f\"https://finance.eastmoney.com/a/{item}.html\" for item in temp_df[\"code\"]\n    ]\n    temp_df.rename(\n        columns={\n            \"title\": \"标题\",\n            \"summary\": \"摘要\",\n            \"showTime\": \"发布时间\",\n            \"code\": \"链接\",\n        },\n        inplace=True,\n    )\n    return temp_df\n\n\ndef stock_info_global_sina() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-全球财经快讯\n    https://finance.sina.com.cn/7x24\n    :return: 全球财经快讯\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://zhibo.sina.com.cn/api/zhibo/feed\"\n    params = {\n        \"page\": \"1\",\n        \"page_size\": \"20\",\n        \"zhibo_id\": \"152\",\n        \"tag_id\": \"0\",\n        \"dire\": \"f\",\n        \"dpc\": \"1\",\n        \"pagesize\": \"20\",\n        \"type\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    time_list = [\n        item[\"create_time\"] for item in data_json[\"result\"][\"data\"][\"feed\"][\"list\"]\n    ]\n    text_list = [\n        item[\"rich_text\"] for item in data_json[\"result\"][\"data\"][\"feed\"][\"list\"]\n    ]\n    temp_df = pd.DataFrame([time_list, text_list]).T\n    temp_df.columns = [\"时间\", \"内容\"]\n    return temp_df\n\n\ndef stock_info_global_futu() -> pd.DataFrame:\n    \"\"\"\n    富途牛牛-快讯\n    https://news.futunn.com/main/live\n    :return: 快讯\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://news.futunn.com/news-site-api/main/get-flash-list\"\n    params = {\n        \"pageSize\": \"50\",\n    }\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)\"\n        \" Chrome/111.0.0.0 Safari/537.36\"\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"data\"][\"news\"])\n    temp_df = temp_df[[\"title\", \"content\", \"time\", \"detailUrl\"]]\n    temp_df[\"time\"] = [\n        datetime.fromtimestamp(int(item)).strftime(\"%Y-%m-%d %H:%M:%S\")\n        for item in temp_df[\"time\"]\n    ]\n    temp_df.rename(\n        columns={\n            \"title\": \"标题\",\n            \"content\": \"内容\",\n            \"time\": \"发布时间\",\n            \"detailUrl\": \"链接\",\n        },\n        inplace=True,\n    )\n    return temp_df\n\n\ndef stock_info_global_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺财经-全球财经直播\n    https://news.10jqka.com.cn/realtimenews.html\n    :return: 全球财经直播\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://news.10jqka.com.cn/tapp/news/push/stock\"\n    params = {\n        \"page\": \"1\",\n        \"tag\": \"\",\n        \"track\": \"website\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"list\"])\n    temp_df = temp_df[[\"title\", \"digest\", \"rtime\", \"url\"]]\n    temp_df[\"rtime\"] = [\n        datetime.fromtimestamp(int(item)).strftime(\"%Y-%m-%d %H:%M:%S\")\n        for item in temp_df[\"rtime\"]\n    ]\n    temp_df.rename(\n        columns={\n            \"title\": \"标题\",\n            \"digest\": \"内容\",\n            \"rtime\": \"发布时间\",\n            \"url\": \"链接\",\n        },\n        inplace=True,\n    )\n    return temp_df\n\n\ndef stock_info_global_cls(symbol: str = \"全部\") -> pd.DataFrame:\n    \"\"\"\n    财联社-电报\n    https://www.cls.cn/telegraph\n    :param symbol: choice of {\"全部\", \"重点\"}\n    :type symbol: str\n    :return: 财联社-电报\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.cls.cn/nodeapi/telegraphList\"\n    data_json = make_request_with_retry_json(url, max_retries=10, headers=headers)\n    temp_df = pd.DataFrame(data_json[\"data\"][\"roll_data\"])\n    big_df = temp_df.copy()\n    big_df = big_df[[\"title\", \"content\", \"ctime\", \"level\"]]\n    big_df[\"ctime\"] = pd.to_datetime(big_df[\"ctime\"], unit=\"s\", utc=True).dt.tz_convert(\n        \"Asia/Shanghai\"\n    )\n    big_df.columns = [\"标题\", \"内容\", \"发布时间\", \"等级\"]\n    big_df.sort_values([\"发布时间\"], inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    big_df[\"发布日期\"] = big_df[\"发布时间\"].dt.date\n    big_df[\"发布时间\"] = big_df[\"发布时间\"].dt.time\n    if symbol == \"重点\":\n        big_df = big_df[(big_df[\"等级\"] == \"B\") | (big_df[\"等级\"] == \"A\")]\n        big_df.reset_index(inplace=True, drop=True)\n        big_df = big_df[[\"标题\", \"内容\", \"发布日期\", \"发布时间\"]]\n        return big_df\n    else:\n        big_df = big_df[[\"标题\", \"内容\", \"发布日期\", \"发布时间\"]]\n        return big_df\n\n\nif __name__ == \"__main__\":\n    stock_info_cjzc_em_df = stock_info_cjzc_em()\n    print(stock_info_cjzc_em_df)\n\n    stock_info_global_em_df = stock_info_global_em()\n    print(stock_info_global_em_df)\n\n    stock_info_global_sina_df = stock_info_global_sina()\n    print(stock_info_global_sina_df)\n\n    stock_info_global_futu_df = stock_info_global_futu()\n    print(stock_info_global_futu_df)\n\n    stock_info_global_ths_df = stock_info_global_ths()\n    print(stock_info_global_ths_df)\n\n    stock_info_global_cls_df = stock_info_global_cls(symbol=\"全部\")\n    print(stock_info_global_cls_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_inner_trade_xq.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/11/5 16:00\nDesc: 雪球-行情中心-沪深股市-内部交易\nhttps://xueqiu.com/hq/insider\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_inner_trade_xq() -> pd.DataFrame:\n    \"\"\"\n    雪球-行情中心-沪深股市-内部交易\n    https://xueqiu.com/hq/insider\n    :return: 内部交易\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://xueqiu.com/service/v5/stock/f10/cn/skholderchg\"\n    params = {\n        \"size\": \"100000\",\n        \"page\": \"1\",\n        \"extend\": \"true\",\n    }\n    headers = {\n        \"Accept\": \"*/*\",\n        \"Accept-Encoding\": \"gzip, deflate, br\",\n        \"Accept-Language\": \"zh-CN,zh;q=0.9,en;q=0.8\",\n        \"Cache-Control\": \"no-cache\",\n        \"Connection\": \"keep-alive\",\n        \"Host\": \"xueqiu.com\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"https://xueqiu.com/hq\",\n        \"sec-ch-ua\": '\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"100\", \"Google Chrome\";v=\"100\"',\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": '\"Windows\"',\n        \"Sec-Fetch-Dest\": \"empty\",\n        \"Sec-Fetch-Mode\": \"cors\",\n        \"Sec-Fetch-Site\": \"same-origin\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/100.0.4896.127 Safari/537.36\",\n        \"X-Requested-With\": \"XMLHttpRequest\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"items\"])\n    temp_df.columns = [\n        \"股票代码\",\n        \"股票名称\",\n        \"变动人\",\n        \"-\",\n        \"变动日期\",\n        \"变动股数\",\n        \"成交均价\",\n        \"变动后持股数\",\n        \"与董监高关系\",\n        \"董监高职务\",\n    ]\n    temp_df = temp_df[\n        [\n            \"股票代码\",\n            \"股票名称\",\n            \"变动日期\",\n            \"变动人\",\n            \"变动股数\",\n            \"成交均价\",\n            \"变动后持股数\",\n            \"与董监高关系\",\n            \"董监高职务\",\n        ]\n    ]\n    temp_df[\"变动日期\"] = (\n        pd.to_datetime(temp_df[\"变动日期\"], unit=\"ms\", utc=True)\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.date\n    )\n    temp_df[\"变动股数\"] = pd.to_numeric(temp_df[\"变动股数\"], errors=\"coerce\")\n    temp_df[\"成交均价\"] = pd.to_numeric(temp_df[\"成交均价\"], errors=\"coerce\")\n    temp_df[\"变动后持股数\"] = pd.to_numeric(temp_df[\"变动后持股数\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_inner_trade_xq_df = stock_inner_trade_xq()\n    print(stock_inner_trade_xq_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_irm_cninfo.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/5/20 16:00\nDesc: 互动易-提问与回答\nhttps://irm.cninfo.com.cn/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef _fetch_org_id(symbol: str = \"000001\") -> str:\n    \"\"\"\n    股票-互动易-组织代码\n    https://irm.cninfo.com.cn/\n    :return: 组织代码\n    :rtype: str\n    \"\"\"\n    url = \"https://irm.cninfo.com.cn/newircs/index/queryKeyboardInfo\"\n    params = {\"_t\": \"1691144074\"}\n    data = {\"keyWord\": symbol}\n    r = requests.post(url, params=params, data=data)\n    data_json = r.json()\n    org_id = data_json[\"data\"][0][\"secid\"]\n    return org_id\n\n\ndef stock_irm_cninfo(symbol: str = \"002594\") -> pd.DataFrame:\n    \"\"\"\n    互动易-提问\n    https://irm.cninfo.com.cn/ircs/question/questionDetail?questionId=1515236357817618432\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 提问\n    :rtype: str\n    \"\"\"\n    url = \"https://irm.cninfo.com.cn/newircs/company/question\"\n    params = {\n        \"_t\": \"1691142650\",\n        \"stockcode\": symbol,\n        \"orgId\": _fetch_org_id(symbol),\n        \"pageSize\": \"1000\",\n        \"pageNum\": \"1\",\n        \"keyWord\": \"\",\n        \"startDay\": \"\",\n        \"endDay\": \"\",\n    }\n    r = requests.post(url, params=params)\n    data_json = r.json()\n    total_page = int(data_json[\"totalPage\"])\n    total_page = 10 if total_page > 10 else total_page\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, 1 + total_page), leave=False):\n        params.update({\"pageNum\": page})\n        r = requests.post(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"rows\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.rename(\n        columns={\n            \"indexId\": \"问题编号\",\n            \"contentType\": \"-\",\n            \"trade\": \"行业\",\n            \"mainContent\": \"问题\",\n            \"attachmentUrl\": \"-\",\n            \"boardType\": \"行业代码\",\n            \"filetype\": \"-\",\n            \"pubDate\": \"提问时间\",\n            \"stockCode\": \"股票代码\",\n            \"companyShortName\": \"公司简称\",\n            \"author\": \"提问者编号\",\n            \"authorName\": \"提问者\",\n            \"authorLogo\": \"-\",\n            \"pubClient\": \"来源\",\n            \"attachedId\": \"回答ID\",\n            \"attachedContent\": \"回答内容\",\n            \"attachedAuthor\": \"回答者\",\n            \"attachedPubDate\": \"-\",\n            \"updateDate\": \"更新时间\",\n            \"isPraise\": \"-\",\n            \"isFavorite\": \"-\",\n            \"isForward\": \"-\",\n            \"praiseCount\": \"-\",\n            \"qaStatus\": \"-\",\n            \"rights\": \"-\",\n            \"topStatus\": \"-\",\n            \"companyLogo\": \"-\",\n            \"favoriteCount\": \"-\",\n            \"forwardCount\": \"-\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"股票代码\",\n            \"公司简称\",\n            \"行业\",\n            \"行业代码\",\n            \"问题\",\n            \"提问者\",\n            \"来源\",\n            \"提问时间\",\n            \"更新时间\",\n            \"提问者编号\",\n            \"问题编号\",\n            \"回答ID\",\n            \"回答内容\",\n            \"回答者\",\n        ]\n    ]\n    big_df[\"行业\"] = [item[0] for item in big_df[\"行业\"]]\n    big_df[\"行业代码\"] = [item[0] for item in big_df[\"行业代码\"]]\n    big_df[\"提问时间\"] = (\n        pd.to_datetime(big_df[\"提问时间\"], unit=\"ms\", errors=\"coerce\")\n        .dt.tz_localize(\"UTC\")\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.strftime(\"%Y-%m-%d %H:%M:%S\")\n    )\n    big_df[\"更新时间\"] = (\n        pd.to_datetime(big_df[\"更新时间\"], unit=\"ms\", errors=\"coerce\")\n        .dt.tz_localize(\"UTC\")\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.strftime(\"%Y-%m-%d %H:%M:%S\")\n    )\n    big_df[\"来源\"] = big_df[\"来源\"].map(\n        {\n            \"2\": \"APP\",\n            \"5\": \"公众号\",\n            \"4\": \"网站\",\n        }\n    )\n    big_df[\"来源\"] = big_df[\"来源\"].fillna(\"网站\")\n    return big_df\n\n\ndef stock_irm_ans_cninfo(symbol: str = \"1513586704097333248\") -> pd.DataFrame:\n    \"\"\"\n    互动易-回答\n    https://irm.cninfo.com.cn/ircs/question/questionDetail?questionId=1515236357817618432\n    :param symbol: 提问者编号; 通过 ak.stock_irm_cninfo() 来获取具体的提问者编号\n    :type symbol: str\n    :return: 回答\n    :rtype: str\n    \"\"\"\n    url = \"https://irm.cninfo.com.cn/newircs/question/getQuestionDetail\"\n    params = {\"questionId\": symbol, \"_t\": \"1691146921\"}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame.from_dict(data_json[\"data\"], orient=\"index\").T\n    if \"replyDate\" not in temp_df.columns:\n        return pd.DataFrame()\n    temp_df.rename(\n        columns={\n            \"questionContent\": \"问题\",\n            \"questioner\": \"提问者\",\n            \"questionDate\": \"提问时间\",\n            \"replyDate\": \"回答时间\",\n            \"replyContent\": \"回答内容\",\n            \"stockCode\": \"股票代码\",\n            \"shortName\": \"公司简称\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"股票代码\",\n            \"公司简称\",\n            \"问题\",\n            \"回答内容\",\n            \"提问者\",\n            \"提问时间\",\n            \"回答时间\",\n        ]\n    ]\n    temp_df[\"提问时间\"] = (\n        pd.to_datetime(temp_df[\"提问时间\"], unit=\"ms\", errors=\"coerce\")\n        .dt.tz_localize(\"UTC\")\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.strftime(\"%Y-%m-%d %H:%M:%S\")\n    )\n    temp_df[\"回答时间\"] = (\n        pd.to_datetime(temp_df[\"回答时间\"], unit=\"ms\", errors=\"coerce\")\n        .dt.tz_localize(\"UTC\")\n        .dt.tz_convert(\"Asia/Shanghai\")\n        .dt.strftime(\"%Y-%m-%d %H:%M:%S\")\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_irm_cninfo_df = stock_irm_cninfo(symbol=\"002594\")\n    print(stock_irm_cninfo_df)\n\n    stock_irm_ans_cninfo_df = stock_irm_ans_cninfo(symbol=\"1495108801386602496\")\n    print(stock_irm_ans_cninfo_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_jgdy_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\ndate: 2022/2/14 20:02\ndesc: 东方财富网-数据中心-特色数据-机构调研\nhttp://data.eastmoney.com/jgdy/\n东方财富网-数据中心-特色数据-机构调研-机构调研统计: http://data.eastmoney.com/jgdy/tj.html\n东方财富网-数据中心-特色数据-机构调研-机构调研详细: http://data.eastmoney.com/jgdy/xx.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom tqdm import tqdm\n\n\ndef stock_jgdy_tj_em(date: str = \"20220101\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-机构调研-机构调研统计\n    https://data.eastmoney.com/jgdy/tj.html\n    :param date: 开始时间\n    :type date: str\n    :return: 机构调研统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"NOTICE_DATE,SUM,RECEIVE_START_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1,-1,1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_ORG_SURVEYNEW\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"f2~01~SECURITY_CODE~CLOSE_PRICE,f3~01~SECURITY_CODE~CHANGE_RATE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"\"\"(NUMBERNEW=\"1\")(IS_SOURCE=\"1\")(NOTICE_DATE>'{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df])\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = list(range(1, len(big_df) + 1))\n    big_df.columns = [\n        \"序号\",\n        \"_\",\n        \"代码\",\n        \"名称\",\n        \"_\",\n        \"公告日期\",\n        \"接待日期\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"接待地点\",\n        \"_\",\n        \"接待方式\",\n        \"_\",\n        \"接待人员\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"接待机构数量\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"最新价\",\n        \"涨跌幅\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"接待机构数量\",\n            \"接待方式\",\n            \"接待人员\",\n            \"接待地点\",\n            \"接待日期\",\n            \"公告日期\",\n        ]\n    ]\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"接待机构数量\"] = pd.to_numeric(big_df[\"接待机构数量\"], errors=\"coerce\")\n    big_df[\"接待日期\"] = pd.to_datetime(big_df[\"接待日期\"], errors=\"coerce\").dt.date\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_jgdy_detail_em(date: str = \"20241211\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-机构调研-机构调研详细\n    https://data.eastmoney.com/jgdy/xx.html\n    :param date: 开始时间\n    :type date: str\n    :return: 机构调研详细\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"NOTICE_DATE,RECEIVE_START_DATE,SECURITY_CODE,NUMBERNEW\",\n        \"sortTypes\": \"-1,-1,1,-1\",\n        \"pageSize\": \"50\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_ORG_SURVEY\",\n        \"columns\": \"SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,NOTICE_DATE,RECEIVE_START_DATE,\"\n        \"RECEIVE_OBJECT,RECEIVE_PLACE,RECEIVE_WAY_EXPLAIN,INVESTIGATORS,RECEPTIONIST,ORG_TYPE\",\n        \"quoteColumns\": \"f2~01~SECURITY_CODE~CLOSE_PRICE,f3~01~SECURITY_CODE~CHANGE_RATE\",\n        \"quoteType\": \"0\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"\"\"(IS_SOURCE=\"1\")(RECEIVE_START_DATE>'{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df])\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = list(range(1, len(big_df) + 1))\n    big_df.columns = [\n        \"序号\",\n        \"_\",\n        \"代码\",\n        \"名称\",\n        \"公告日期\",\n        \"调研日期\",\n        \"调研机构\",\n        \"接待地点\",\n        \"接待方式\",\n        \"调研人员\",\n        \"接待人员\",\n        \"机构类型\",\n        \"最新价\",\n        \"涨跌幅\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最新价\",\n            \"涨跌幅\",\n            \"调研机构\",\n            \"机构类型\",\n            \"调研人员\",\n            \"接待方式\",\n            \"接待人员\",\n            \"接待地点\",\n            \"调研日期\",\n            \"公告日期\",\n        ]\n    ]\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"调研日期\"] = pd.to_datetime(big_df[\"调研日期\"], errors=\"coerce\").dt.date\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_jgdy_tj_em_df = stock_jgdy_tj_em(date=\"20180928\")\n    print(stock_jgdy_tj_em_df)\n\n    stock_jgdy_detail_em_df = stock_jgdy_detail_em(date=\"20210915\")\n    print(stock_jgdy_detail_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_lh_yybpm.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/5/6 20:30\nDesc: 同花顺-数据中心-营业部排名\nhttps://data.10jqka.com.cn/market/longhu/\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.utils.tqdm import get_tqdm\nfrom akshare.utils.cons import headers\n\n\ndef stock_lh_yyb_most() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-营业部排名-上榜次数最多\n    https://data.10jqka.com.cn/market/longhu/\n    :return: 上榜次数最多\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://data.10jqka.com.cn/ifmarket/lhbyyb/type/1/tab/sbcs/field/sbcs/sort/desc/page/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    page_str = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text\n    total_page = int(page_str.split(\"/\")[1]) + 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page), leave=False):\n        url = f\"https://data.10jqka.com.cn/ifmarket/lhbyyb/type/1/tab/sbcs/field/sbcs/sort/desc/page/{page}/\"\n        r = requests.get(url, headers=headers)\n        temp_df = pd.read_html(StringIO(r.text))[0]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef stock_lh_yyb_capital() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-营业部排名-资金实力最强\n    https://data.10jqka.com.cn/market/longhu/\n    :return: 资金实力最强\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://data.10jqka.com.cn/ifmarket/lhbyyb/type/1/tab/zjsl/field/zgczje/sort/desc/page/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    page_str = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text\n    total_page = int(page_str.split(\"/\")[1]) + 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page), leave=False):\n        url = f\"https://data.10jqka.com.cn/ifmarket/lhbyyb/type/1/tab/zjsl/field/zgczje/sort/desc/page/{page}/\"\n        r = requests.get(url, headers=headers)\n        temp_df = pd.read_html(StringIO(r.text))[0]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef stock_lh_yyb_control() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-营业部排名-抱团操作实力\n    https://data.10jqka.com.cn/market/longhu/\n    :return: 抱团操作实力\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://data.10jqka.com.cn/ifmarket/lhbyyb/type/1/tab/btcz/field/xsjs/sort/desc/page/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    page_str = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text\n    total_page = int(page_str.split(\"/\")[1]) + 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page), leave=False):\n        url = f\"https://data.10jqka.com.cn/ifmarket/lhbyyb/type/1/tab/btcz/field/xsjs/sort/desc/page/{page}/\"\n        r = requests.get(url, headers=headers)\n        temp_df = pd.read_html(StringIO(r.text))[0]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_lh_yyb_most_df = stock_lh_yyb_most()\n    print(stock_lh_yyb_most_df)\n\n    stock_lh_yyb_capital_df = stock_lh_yyb_capital()\n    print(stock_lh_yyb_capital_df)\n\n    stock_lh_yyb_control_df = stock_lh_yyb_control()\n    print(stock_lh_yyb_control_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_lhb_em.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/4/22 14:00\nDesc: 东方财富网-数据中心-龙虎榜单\nhttps://data.eastmoney.com/stock/tradedetail.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_lhb_detail_em(\n    start_date: str = \"20230403\", end_date: str = \"20230417\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-龙虎榜单-龙虎榜详情\n    https://data.eastmoney.com/stock/tradedetail.html\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :return: 龙虎榜详情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    start_date = \"-\".join([start_date[:4], start_date[4:6], start_date[6:]])\n    end_date = \"-\".join([end_date[:4], end_date[4:6], end_date[6:]])\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"SECURITY_CODE,TRADE_DATE\",\n        \"sortTypes\": \"1,-1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_DAILYBILLBOARD_DETAILSNEW\",\n        \"columns\": \"SECURITY_CODE,SECUCODE,SECURITY_NAME_ABBR,TRADE_DATE,EXPLAIN,CLOSE_PRICE,CHANGE_RATE,\"\n        \"BILLBOARD_NET_AMT,BILLBOARD_BUY_AMT,BILLBOARD_SELL_AMT,BILLBOARD_DEAL_AMT,ACCUM_AMOUNT,\"\n        \"DEAL_NET_RATIO,DEAL_AMOUNT_RATIO,TURNOVERRATE,FREE_MARKET_CAP,EXPLANATION,D1_CLOSE_ADJCHRATE,\"\n        \"D2_CLOSE_ADJCHRATE,D5_CLOSE_ADJCHRATE,D10_CLOSE_ADJCHRATE,SECURITY_TYPE_CODE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"(TRADE_DATE<='{end_date}')(TRADE_DATE>='{start_date}')\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page_num + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"SECURITY_CODE\": \"代码\",\n            \"SECUCODE\": \"-\",\n            \"SECURITY_NAME_ABBR\": \"名称\",\n            \"TRADE_DATE\": \"上榜日\",\n            \"EXPLAIN\": \"解读\",\n            \"CLOSE_PRICE\": \"收盘价\",\n            \"CHANGE_RATE\": \"涨跌幅\",\n            \"BILLBOARD_NET_AMT\": \"龙虎榜净买额\",\n            \"BILLBOARD_BUY_AMT\": \"龙虎榜买入额\",\n            \"BILLBOARD_SELL_AMT\": \"龙虎榜卖出额\",\n            \"BILLBOARD_DEAL_AMT\": \"龙虎榜成交额\",\n            \"ACCUM_AMOUNT\": \"市场总成交额\",\n            \"DEAL_NET_RATIO\": \"净买额占总成交比\",\n            \"DEAL_AMOUNT_RATIO\": \"成交额占总成交比\",\n            \"TURNOVERRATE\": \"换手率\",\n            \"FREE_MARKET_CAP\": \"流通市值\",\n            \"EXPLANATION\": \"上榜原因\",\n            \"D1_CLOSE_ADJCHRATE\": \"上榜后1日\",\n            \"D2_CLOSE_ADJCHRATE\": \"上榜后2日\",\n            \"D5_CLOSE_ADJCHRATE\": \"上榜后5日\",\n            \"D10_CLOSE_ADJCHRATE\": \"上榜后10日\",\n        },\n        inplace=True,\n    )\n\n    big_df = big_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"上榜日\",\n            \"解读\",\n            \"收盘价\",\n            \"涨跌幅\",\n            \"龙虎榜净买额\",\n            \"龙虎榜买入额\",\n            \"龙虎榜卖出额\",\n            \"龙虎榜成交额\",\n            \"市场总成交额\",\n            \"净买额占总成交比\",\n            \"成交额占总成交比\",\n            \"换手率\",\n            \"流通市值\",\n            \"上榜原因\",\n            \"上榜后1日\",\n            \"上榜后2日\",\n            \"上榜后5日\",\n            \"上榜后10日\",\n        ]\n    ]\n    big_df[\"上榜日\"] = pd.to_datetime(big_df[\"上榜日\"], errors=\"coerce\").dt.date\n    big_df[\"收盘价\"] = pd.to_numeric(big_df[\"收盘价\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"龙虎榜净买额\"] = pd.to_numeric(big_df[\"龙虎榜净买额\"], errors=\"coerce\")\n    big_df[\"龙虎榜买入额\"] = pd.to_numeric(big_df[\"龙虎榜买入额\"], errors=\"coerce\")\n    big_df[\"龙虎榜卖出额\"] = pd.to_numeric(big_df[\"龙虎榜卖出额\"], errors=\"coerce\")\n    big_df[\"龙虎榜成交额\"] = pd.to_numeric(big_df[\"龙虎榜成交额\"], errors=\"coerce\")\n    big_df[\"市场总成交额\"] = pd.to_numeric(big_df[\"市场总成交额\"], errors=\"coerce\")\n    big_df[\"净买额占总成交比\"] = pd.to_numeric(\n        big_df[\"净买额占总成交比\"], errors=\"coerce\"\n    )\n    big_df[\"成交额占总成交比\"] = pd.to_numeric(\n        big_df[\"成交额占总成交比\"], errors=\"coerce\"\n    )\n    big_df[\"换手率\"] = pd.to_numeric(big_df[\"换手率\"], errors=\"coerce\")\n    big_df[\"流通市值\"] = pd.to_numeric(big_df[\"流通市值\"], errors=\"coerce\")\n    big_df[\"上榜后1日\"] = pd.to_numeric(big_df[\"上榜后1日\"], errors=\"coerce\")\n    big_df[\"上榜后2日\"] = pd.to_numeric(big_df[\"上榜后2日\"], errors=\"coerce\")\n    big_df[\"上榜后5日\"] = pd.to_numeric(big_df[\"上榜后5日\"], errors=\"coerce\")\n    big_df[\"上榜后10日\"] = pd.to_numeric(big_df[\"上榜后10日\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_lhb_stock_statistic_em(symbol: str = \"近一月\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-龙虎榜单-个股上榜统计\n    https://data.eastmoney.com/stock/tradedetail.html\n    :param symbol: choice of {\"近一月\", \"近三月\", \"近六月\", \"近一年\"}\n    :type symbol: str\n    :return: 个股上榜统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"近一月\": \"01\",\n        \"近三月\": \"02\",\n        \"近六月\": \"03\",\n        \"近一年\": \"04\",\n    }\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"BILLBOARD_TIMES,LATEST_TDATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1,1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_BILLBOARD_TRADEALL\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f'(STATISTICS_CYCLE=\"{symbol_map[symbol]}\")',\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    temp_df.columns = [\n        \"序号\",\n        \"-\",\n        \"代码\",\n        \"最近上榜日\",\n        \"名称\",\n        \"近1个月涨跌幅\",\n        \"近3个月涨跌幅\",\n        \"近6个月涨跌幅\",\n        \"近1年涨跌幅\",\n        \"涨跌幅\",\n        \"收盘价\",\n        \"-\",\n        \"龙虎榜总成交额\",\n        \"龙虎榜净买额\",\n        \"-\",\n        \"-\",\n        \"机构买入净额\",\n        \"上榜次数\",\n        \"龙虎榜买入额\",\n        \"龙虎榜卖出额\",\n        \"机构买入总额\",\n        \"机构卖出总额\",\n        \"买方机构次数\",\n        \"卖方机构次数\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"最近上榜日\",\n            \"收盘价\",\n            \"涨跌幅\",\n            \"上榜次数\",\n            \"龙虎榜净买额\",\n            \"龙虎榜买入额\",\n            \"龙虎榜卖出额\",\n            \"龙虎榜总成交额\",\n            \"买方机构次数\",\n            \"卖方机构次数\",\n            \"机构买入净额\",\n            \"机构买入总额\",\n            \"机构卖出总额\",\n            \"近1个月涨跌幅\",\n            \"近3个月涨跌幅\",\n            \"近6个月涨跌幅\",\n            \"近1年涨跌幅\",\n        ]\n    ]\n    temp_df[\"最近上榜日\"] = pd.to_datetime(\n        temp_df[\"最近上榜日\"], errors=\"coerce\"\n    ).dt.date\n    return temp_df\n\n\ndef stock_lhb_jgmmtj_em(\n    start_date: str = \"20240417\", end_date: str = \"20240430\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-龙虎榜单-机构买卖每日统计\n    https://data.eastmoney.com/stock/jgmmtj.html\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :return: 机构买卖每日统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    start_date = \"-\".join([start_date[:4], start_date[4:6], start_date[6:]])\n    end_date = \"-\".join([end_date[:4], end_date[4:6], end_date[6:]])\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"NET_BUY_AMT,TRADE_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1,1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_ORGANIZATION_TRADE_DETAILS\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"(TRADE_DATE>='{start_date}')(TRADE_DATE<='{end_date}')\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"-\",\n        \"名称\",\n        \"代码\",\n        \"上榜日期\",\n        \"收盘价\",\n        \"涨跌幅\",\n        \"买方机构数\",\n        \"卖方机构数\",\n        \"机构买入总额\",\n        \"机构卖出总额\",\n        \"机构买入净额\",\n        \"市场总成交额\",\n        \"机构净买额占总成交额比\",\n        \"换手率\",\n        \"流通市值\",\n        \"上榜原因\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"收盘价\",\n            \"涨跌幅\",\n            \"买方机构数\",\n            \"卖方机构数\",\n            \"机构买入总额\",\n            \"机构卖出总额\",\n            \"机构买入净额\",\n            \"市场总成交额\",\n            \"机构净买额占总成交额比\",\n            \"换手率\",\n            \"流通市值\",\n            \"上榜原因\",\n            \"上榜日期\",\n        ]\n    ]\n    big_df[\"上榜日期\"] = pd.to_datetime(big_df[\"上榜日期\"], errors=\"coerce\").dt.date\n    big_df[\"收盘价\"] = pd.to_numeric(big_df[\"收盘价\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"买方机构数\"] = pd.to_numeric(big_df[\"买方机构数\"], errors=\"coerce\")\n    big_df[\"卖方机构数\"] = pd.to_numeric(big_df[\"卖方机构数\"], errors=\"coerce\")\n    big_df[\"机构买入总额\"] = pd.to_numeric(big_df[\"机构买入总额\"], errors=\"coerce\")\n    big_df[\"机构卖出总额\"] = pd.to_numeric(big_df[\"机构卖出总额\"], errors=\"coerce\")\n    big_df[\"机构买入净额\"] = pd.to_numeric(big_df[\"机构买入净额\"], errors=\"coerce\")\n    big_df[\"市场总成交额\"] = pd.to_numeric(big_df[\"市场总成交额\"], errors=\"coerce\")\n    big_df[\"机构净买额占总成交额比\"] = pd.to_numeric(\n        big_df[\"机构净买额占总成交额比\"], errors=\"coerce\"\n    )\n    big_df[\"换手率\"] = pd.to_numeric(big_df[\"换手率\"], errors=\"coerce\")\n    big_df[\"流通市值\"] = pd.to_numeric(big_df[\"流通市值\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_lhb_jgstatistic_em(symbol: str = \"近一月\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-龙虎榜单-机构席位追踪\n    https://data.eastmoney.com/stock/jgstatistic.html\n    :param symbol: choice of {\"近一月\", \"近三月\", \"近六月\", \"近一年\"}\n    :type symbol: str\n    :return: 机构席位追踪\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"近一月\": \"01\",\n        \"近三月\": \"02\",\n        \"近六月\": \"03\",\n        \"近一年\": \"04\",\n    }\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"ONLIST_TIMES,SECURITY_CODE\",\n        \"sortTypes\": \"-1,1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_ORGANIZATION_SEATNEW\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f'(STATISTICSCYCLE=\"{symbol_map[symbol]}\")',\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"SECURITY_CODE\": \"代码\",\n            \"SECURITY_NAME_ABBR\": \"名称\",\n            \"CLOSE_PRICE\": \"收盘价\",\n            \"CHANGE_RATE\": \"涨跌幅\",\n            \"AMOUNT\": \"龙虎榜成交金额\",\n            \"ONLIST_TIMES\": \"上榜次数\",\n            \"BUY_AMT\": \"机构买入额\",\n            \"BUY_TIMES\": \"机构买入次数\",\n            \"SELL_AMT\": \"机构卖出额\",\n            \"SELL_TIMES\": \"机构卖出次数\",\n            \"NET_BUY_AMT\": \"机构净买额\",\n            \"M1_CLOSE_ADJCHRATE\": \"近1个月涨跌幅\",\n            \"M3_CLOSE_ADJCHRATE\": \"近3个月涨跌幅\",\n            \"M6_CLOSE_ADJCHRATE\": \"近6个月涨跌幅\",\n            \"Y1_CLOSE_ADJCHRATE\": \"近1年涨跌幅\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"收盘价\",\n            \"涨跌幅\",\n            \"龙虎榜成交金额\",\n            \"上榜次数\",\n            \"机构买入额\",\n            \"机构买入次数\",\n            \"机构卖出额\",\n            \"机构卖出次数\",\n            \"机构净买额\",\n            \"近1个月涨跌幅\",\n            \"近3个月涨跌幅\",\n            \"近6个月涨跌幅\",\n            \"近1年涨跌幅\",\n        ]\n    ]\n\n    big_df[\"收盘价\"] = pd.to_numeric(big_df[\"收盘价\"], errors=\"coerce\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"龙虎榜成交金额\"] = pd.to_numeric(big_df[\"龙虎榜成交金额\"], errors=\"coerce\")\n    big_df[\"上榜次数\"] = pd.to_numeric(big_df[\"上榜次数\"], errors=\"coerce\")\n    big_df[\"机构买入额\"] = pd.to_numeric(big_df[\"机构买入额\"], errors=\"coerce\")\n    big_df[\"机构买入次数\"] = pd.to_numeric(big_df[\"机构买入次数\"], errors=\"coerce\")\n    big_df[\"机构卖出额\"] = pd.to_numeric(big_df[\"机构卖出额\"], errors=\"coerce\")\n    big_df[\"机构卖出次数\"] = pd.to_numeric(big_df[\"机构卖出次数\"], errors=\"coerce\")\n    big_df[\"机构净买额\"] = pd.to_numeric(big_df[\"机构净买额\"], errors=\"coerce\")\n    big_df[\"近1个月涨跌幅\"] = pd.to_numeric(big_df[\"近1个月涨跌幅\"], errors=\"coerce\")\n    big_df[\"近3个月涨跌幅\"] = pd.to_numeric(big_df[\"近3个月涨跌幅\"], errors=\"coerce\")\n    big_df[\"近6个月涨跌幅\"] = pd.to_numeric(big_df[\"近6个月涨跌幅\"], errors=\"coerce\")\n    big_df[\"近1年涨跌幅\"] = pd.to_numeric(big_df[\"近1年涨跌幅\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_lhb_hyyyb_em(\n    start_date: str = \"20220324\", end_date: str = \"20220324\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-龙虎榜单-每日活跃营业部\n    https://data.eastmoney.com/stock/hyyyb.html\n    :param start_date: 开始日期\n    :type start_date: str\n    :param end_date: 结束日期\n    :type end_date: str\n    :return: 每日活跃营业部\n    :rtype: pandas.DataFrame\n    \"\"\"\n    start_date = \"-\".join([start_date[:4], start_date[4:6], start_date[6:]])\n    end_date = \"-\".join([end_date[:4], end_date[4:6], end_date[6:]])\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"TOTAL_NETAMT,ONLIST_DATE,OPERATEDEPT_CODE\",\n        \"sortTypes\": \"-1,-1,1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_OPERATEDEPT_ACTIVE\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"(ONLIST_DATE>='{start_date}')(ONLIST_DATE<='{end_date}')\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"营业部名称\",\n        \"上榜日\",\n        \"买入个股数\",\n        \"卖出个股数\",\n        \"买入总金额\",\n        \"卖出总金额\",\n        \"总买卖净额\",\n        \"-\",\n        \"营业部代码\",\n        \"买入股票\",\n        \"-\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"营业部名称\",\n            \"上榜日\",\n            \"买入个股数\",\n            \"卖出个股数\",\n            \"买入总金额\",\n            \"卖出总金额\",\n            \"总买卖净额\",\n            \"买入股票\",\n            \"营业部代码\",\n        ]\n    ]\n\n    big_df[\"上榜日\"] = pd.to_datetime(big_df[\"上榜日\"], errors=\"coerce\").dt.date\n    big_df[\"买入个股数\"] = pd.to_numeric(big_df[\"买入个股数\"], errors=\"coerce\")\n    big_df[\"卖出个股数\"] = pd.to_numeric(big_df[\"卖出个股数\"], errors=\"coerce\")\n    big_df[\"买入总金额\"] = pd.to_numeric(big_df[\"买入总金额\"], errors=\"coerce\")\n    big_df[\"卖出总金额\"] = pd.to_numeric(big_df[\"卖出总金额\"], errors=\"coerce\")\n    big_df[\"总买卖净额\"] = pd.to_numeric(big_df[\"总买卖净额\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_lhb_yybph_em(symbol: str = \"近一月\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-龙虎榜单-营业部排行\n    https://data.eastmoney.com/stock/yybph.html\n    :param symbol: choice of {\"近一月\", \"近三月\", \"近六月\", \"近一年\"}\n    :type symbol: str\n    :return: 营业部排行\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"近一月\": \"01\",\n        \"近三月\": \"02\",\n        \"近六月\": \"03\",\n        \"近一年\": \"04\",\n    }\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"TOTAL_BUYER_SALESTIMES_1DAY,OPERATEDEPT_CODE\",\n        \"sortTypes\": \"-1,1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_RATEDEPT_RETURNT_RANKING\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f'(STATISTICSCYCLE=\"{symbol_map[symbol]}\")',\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"OPERATEDEPT_NAME\": \"营业部名称\",\n            \"TOTAL_BUYER_SALESTIMES_1DAY\": \"上榜后1天-买入次数\",\n            \"AVERAGE_INCREASE_1DAY\": \"上榜后1天-平均涨幅\",\n            \"RISE_PROBABILITY_1DAY\": \"上榜后1天-上涨概率\",\n            \"TOTAL_BUYER_SALESTIMES_2DAY\": \"上榜后2天-买入次数\",\n            \"AVERAGE_INCREASE_2DAY\": \"上榜后2天-平均涨幅\",\n            \"RISE_PROBABILITY_2DAY\": \"上榜后2天-上涨概率\",\n            \"TOTAL_BUYER_SALESTIMES_3DAY\": \"上榜后3天-买入次数\",\n            \"AVERAGE_INCREASE_3DAY\": \"上榜后3天-平均涨幅\",\n            \"RISE_PROBABILITY_3DAY\": \"上榜后3天-上涨概率\",\n            \"TOTAL_BUYER_SALESTIMES_5DAY\": \"上榜后5天-买入次数\",\n            \"AVERAGE_INCREASE_5DAY\": \"上榜后5天-平均涨幅\",\n            \"RISE_PROBABILITY_5DAY\": \"上榜后5天-上涨概率\",\n            \"TOTAL_BUYER_SALESTIMES_10DAY\": \"上榜后10天-买入次数\",\n            \"AVERAGE_INCREASE_10DAY\": \"上榜后10天-平均涨幅\",\n            \"RISE_PROBABILITY_10DAY\": \"上榜后10天-上涨概率\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"序号\",\n            \"营业部名称\",\n            \"上榜后1天-买入次数\",\n            \"上榜后1天-平均涨幅\",\n            \"上榜后1天-上涨概率\",\n            \"上榜后2天-买入次数\",\n            \"上榜后2天-平均涨幅\",\n            \"上榜后2天-上涨概率\",\n            \"上榜后3天-买入次数\",\n            \"上榜后3天-平均涨幅\",\n            \"上榜后3天-上涨概率\",\n            \"上榜后5天-买入次数\",\n            \"上榜后5天-平均涨幅\",\n            \"上榜后5天-上涨概率\",\n            \"上榜后10天-买入次数\",\n            \"上榜后10天-平均涨幅\",\n            \"上榜后10天-上涨概率\",\n        ]\n    ]\n\n    big_df[\"上榜后1天-买入次数\"] = pd.to_numeric(\n        big_df[\"上榜后1天-买入次数\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后1天-平均涨幅\"] = pd.to_numeric(\n        big_df[\"上榜后1天-平均涨幅\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后1天-上涨概率\"] = pd.to_numeric(\n        big_df[\"上榜后1天-上涨概率\"], errors=\"coerce\"\n    )\n\n    big_df[\"上榜后2天-买入次数\"] = pd.to_numeric(\n        big_df[\"上榜后2天-买入次数\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后2天-平均涨幅\"] = pd.to_numeric(\n        big_df[\"上榜后2天-平均涨幅\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后2天-上涨概率\"] = pd.to_numeric(\n        big_df[\"上榜后2天-上涨概率\"], errors=\"coerce\"\n    )\n\n    big_df[\"上榜后3天-买入次数\"] = pd.to_numeric(\n        big_df[\"上榜后3天-买入次数\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后3天-平均涨幅\"] = pd.to_numeric(\n        big_df[\"上榜后3天-平均涨幅\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后3天-上涨概率\"] = pd.to_numeric(\n        big_df[\"上榜后3天-上涨概率\"], errors=\"coerce\"\n    )\n\n    big_df[\"上榜后5天-买入次数\"] = pd.to_numeric(\n        big_df[\"上榜后5天-买入次数\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后5天-平均涨幅\"] = pd.to_numeric(\n        big_df[\"上榜后5天-平均涨幅\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后5天-上涨概率\"] = pd.to_numeric(\n        big_df[\"上榜后5天-上涨概率\"], errors=\"coerce\"\n    )\n\n    big_df[\"上榜后10天-买入次数\"] = pd.to_numeric(\n        big_df[\"上榜后10天-买入次数\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后10天-平均涨幅\"] = pd.to_numeric(\n        big_df[\"上榜后10天-平均涨幅\"], errors=\"coerce\"\n    )\n    big_df[\"上榜后10天-上涨概率\"] = pd.to_numeric(\n        big_df[\"上榜后10天-上涨概率\"], errors=\"coerce\"\n    )\n    return big_df\n\n\ndef stock_lhb_traderstatistic_em(symbol: str = \"近一月\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-龙虎榜单-营业部统计\n    https://data.eastmoney.com/stock/traderstatistic.html\n    :param symbol: choice of {\"近一月\", \"近三月\", \"近六月\", \"近一年\"}\n    :type symbol: str\n    :return: 营业部统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"近一月\": \"01\",\n        \"近三月\": \"02\",\n        \"近六月\": \"03\",\n        \"近一年\": \"04\",\n    }\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"AMOUNT,OPERATEDEPT_CODE\",\n        \"sortTypes\": \"-1,1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_OPERATEDEPT_LIST_STATISTICS\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f'(STATISTICSCYCLE=\"{symbol_map[symbol]}\")',\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"OPERATEDEPT_NAME\": \"营业部名称\",\n            \"AMOUNT\": \"龙虎榜成交金额\",\n            \"SALES_ONLIST_TIMES\": \"上榜次数\",\n            \"ACT_BUY\": \"买入额\",\n            \"TOTAL_BUYER_SALESTIMES\": \"买入次数\",\n            \"ACT_SELL\": \"卖出额\",\n            \"TOTAL_SELLER_SALESTIMES\": \"卖出次数\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"序号\",\n            \"营业部名称\",\n            \"龙虎榜成交金额\",\n            \"上榜次数\",\n            \"买入额\",\n            \"买入次数\",\n            \"卖出额\",\n            \"卖出次数\",\n        ]\n    ]\n\n    big_df[\"龙虎榜成交金额\"] = pd.to_numeric(big_df[\"龙虎榜成交金额\"], errors=\"coerce\")\n    big_df[\"上榜次数\"] = pd.to_numeric(big_df[\"上榜次数\"], errors=\"coerce\")\n    big_df[\"买入额\"] = pd.to_numeric(big_df[\"买入额\"], errors=\"coerce\")\n    big_df[\"买入次数\"] = pd.to_numeric(big_df[\"买入次数\"], errors=\"coerce\")\n    big_df[\"卖出额\"] = pd.to_numeric(big_df[\"卖出额\"], errors=\"coerce\")\n    big_df[\"卖出次数\"] = pd.to_numeric(big_df[\"卖出次数\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_lhb_stock_detail_date_em(symbol: str = \"600077\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-龙虎榜单-个股龙虎榜详情-日期\n    https://data.eastmoney.com/stock/tradedetail.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 个股龙虎榜详情-日期\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_LHB_BOARDDATE\",\n        \"columns\": \"SECURITY_CODE,TRADE_DATE,TR_DATE\",\n        \"filter\": f'(SECURITY_CODE=\"{symbol}\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"1000\",\n        \"sortTypes\": \"-1\",\n        \"sortColumns\": \"TRADE_DATE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n    temp_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"交易日\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"交易日\",\n        ]\n    ]\n    temp_df[\"交易日\"] = pd.to_datetime(temp_df[\"交易日\"]).dt.date\n    return temp_df\n\n\ndef stock_lhb_stock_detail_em(\n    symbol: str = \"000788\", date: str = \"20220315\", flag: str = \"卖出\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-龙虎榜单-个股龙虎榜详情\n    https://data.eastmoney.com/stock/lhb/600077.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :param date: 查询日期; 需要通过 ak.stock_lhb_stock_detail_date_em(symbol=\"600077\") 接口获取相应股票的有龙虎榜详情数据的日期\n    :type date: str\n    :param flag: choice of {\"买入\", \"卖出\"}\n    :type flag: str\n    :return: 个股龙虎榜详情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    flag_map = {\n        \"买入\": \"BUY\",\n        \"卖出\": \"SELL\",\n    }\n    report_map = {\n        \"买入\": \"RPT_BILLBOARD_DAILYDETAILSBUY\",\n        \"卖出\": \"RPT_BILLBOARD_DAILYDETAILSSELL\",\n    }\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": report_map[flag],\n        \"columns\": \"ALL\",\n        \"filter\": f\"\"\"(TRADE_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')(SECURITY_CODE=\"{symbol}\")\"\"\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"500\",\n        \"sortTypes\": \"-1\",\n        \"sortColumns\": flag_map[flag],\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df.index + 1\n\n    if flag == \"买入\":\n        temp_df.columns = [\n            \"序号\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"交易营业部名称\",\n            \"类型\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"买入金额\",\n            \"卖出金额\",\n            \"净额\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"买入金额-占总成交比例\",\n            \"卖出金额-占总成交比例\",\n            \"-\",\n        ]\n        temp_df = temp_df[\n            [\n                \"序号\",\n                \"交易营业部名称\",\n                \"买入金额\",\n                \"买入金额-占总成交比例\",\n                \"卖出金额\",\n                \"卖出金额-占总成交比例\",\n                \"净额\",\n                \"类型\",\n            ]\n        ]\n        temp_df[\"买入金额\"] = pd.to_numeric(temp_df[\"买入金额\"], errors=\"coerce\")\n        temp_df[\"买入金额-占总成交比例\"] = pd.to_numeric(\n            temp_df[\"买入金额-占总成交比例\"], errors=\"coerce\"\n        )\n        temp_df[\"卖出金额\"] = pd.to_numeric(temp_df[\"卖出金额\"], errors=\"coerce\")\n        temp_df[\"卖出金额-占总成交比例\"] = pd.to_numeric(\n            temp_df[\"卖出金额-占总成交比例\"], errors=\"coerce\"\n        )\n        temp_df.sort_values(\"类型\", inplace=True, ignore_index=True)\n        temp_df.reset_index(inplace=True, drop=True)\n        temp_df[\"序号\"] = range(1, len(temp_df[\"序号\"]) + 1)\n    else:\n        temp_df.columns = [\n            \"序号\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"交易营业部名称\",\n            \"类型\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"买入金额\",\n            \"卖出金额\",\n            \"净额\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"-\",\n            \"买入金额-占总成交比例\",\n            \"卖出金额-占总成交比例\",\n            \"-\",\n        ]\n        temp_df = temp_df[\n            [\n                \"序号\",\n                \"交易营业部名称\",\n                \"买入金额\",\n                \"买入金额-占总成交比例\",\n                \"卖出金额\",\n                \"卖出金额-占总成交比例\",\n                \"净额\",\n                \"类型\",\n            ]\n        ]\n        temp_df[\"买入金额\"] = pd.to_numeric(temp_df[\"买入金额\"], errors=\"coerce\")\n        temp_df[\"买入金额-占总成交比例\"] = pd.to_numeric(\n            temp_df[\"买入金额-占总成交比例\"], errors=\"coerce\"\n        )\n        temp_df[\"卖出金额\"] = pd.to_numeric(temp_df[\"卖出金额\"], errors=\"coerce\")\n        temp_df[\"卖出金额-占总成交比例\"] = pd.to_numeric(\n            temp_df[\"卖出金额-占总成交比例\"], errors=\"coerce\"\n        )\n        temp_df.sort_values(\"类型\", inplace=True, ignore_index=True)\n        temp_df.reset_index(inplace=True, drop=True)\n        temp_df[\"序号\"] = range(1, len(temp_df[\"序号\"]) + 1)\n    return temp_df\n\n\ndef stock_lhb_yyb_detail_em(symbol: str = \"10188715\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-龙虎榜单-营业部历史交易明细-营业部交易明细\n    https://data.eastmoney.com/stock/lhb/yyb/10188715.html\n    :param symbol: 营业部代码, 如 \"10188715\", 通过 ak.stock_lhb_hyyyb_em() 接口获取\n    :type symbol: str\n    :return: 营业部交易明细数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"TRADE_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,1\",\n        \"pageSize\": \"100\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_OPERATEDEPT_TRADE_DETAILSNEW\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f'(OPERATEDEPT_CODE=\"{symbol}\")',\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    # 检查DataFrame是否为空\n    if big_df.empty:\n        return pd.DataFrame()\n\n    # 确保列名与实际返回的JSON数据结构一致\n    column_map = {\n        \"OPERATEDEPT_CODE\": \"营业部代码\",\n        \"OPERATEDEPT_NAME\": \"营业部名称\",\n        \"TRADE_DATE\": \"交易日期\",\n        \"D1_CLOSE_ADJCHRATE\": \"1日后涨跌幅\",\n        \"D2_CLOSE_ADJCHRATE\": \"2日后涨跌幅\",\n        \"D3_CLOSE_ADJCHRATE\": \"3日后涨跌幅\",\n        \"D5_CLOSE_ADJCHRATE\": \"5日后涨跌幅\",\n        \"D10_CLOSE_ADJCHRATE\": \"10日后涨跌幅\",\n        \"SECURITY_CODE\": \"股票代码\",\n        \"SECURITY_NAME_ABBR\": \"股票名称\",\n        \"ACT_BUY\": \"买入金额\",\n        \"ACT_SELL\": \"卖出金额\",\n        \"NET_AMT\": \"净额\",\n        \"EXPLANATION\": \"上榜原因\",\n        \"D20_CLOSE_ADJCHRATE\": \"20日后涨跌幅\",\n        \"D30_CLOSE_ADJCHRATE\": \"30日后涨跌幅\",\n        \"SECUCODE\": \"证券代码\",\n        \"OPERATEDEPT_CODE_OLD\": \"营业部旧代码\",\n        \"ORG_NAME_ABBR\": \"营业部简称\",\n        \"CHANGE_RATE\": \"涨跌幅\",\n    }\n\n    # 重命名列\n    big_df.rename(columns=column_map, inplace=True)\n\n    # 添加序号列\n    big_df.reset_index(inplace=True)\n    big_df[\"序号\"] = big_df.index + 1\n\n    # 选择需要的列并排序\n    result_columns = [\n        \"序号\",\n        \"营业部代码\",\n        \"营业部名称\",\n        \"营业部简称\",\n        \"交易日期\",\n        \"股票代码\",\n        \"股票名称\",\n        \"涨跌幅\",\n        \"买入金额\",\n        \"卖出金额\",\n        \"净额\",\n        \"上榜原因\",\n        \"1日后涨跌幅\",\n        \"2日后涨跌幅\",\n        \"3日后涨跌幅\",\n        \"5日后涨跌幅\",\n        \"10日后涨跌幅\",\n        \"20日后涨跌幅\",\n        \"30日后涨跌幅\",\n    ]\n\n    # 确保所有列都存在\n    for col in result_columns:\n        if col not in big_df.columns and col != \"序号\":\n            big_df[col] = None\n\n    big_df = big_df[result_columns]\n\n    # 处理日期格式\n    big_df[\"交易日期\"] = pd.to_datetime(big_df[\"交易日期\"], errors=\"coerce\").dt.date\n\n    # 处理数值列\n    numeric_cols = [\n        \"涨跌幅\",\n        \"买入金额\",\n        \"卖出金额\",\n        \"净额\",\n        \"1日后涨跌幅\",\n        \"2日后涨跌幅\",\n        \"3日后涨跌幅\",\n        \"5日后涨跌幅\",\n        \"10日后涨跌幅\",\n        \"20日后涨跌幅\",\n        \"30日后涨跌幅\",\n    ]\n    for col in numeric_cols:\n        big_df[col] = pd.to_numeric(big_df[col], errors=\"coerce\")\n\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_lhb_detail_em_df = stock_lhb_detail_em(\n        start_date=\"20250201\", end_date=\"20250228\"\n    )\n    print(stock_lhb_detail_em_df)\n\n    stock_lhb_stock_statistic_em_df = stock_lhb_stock_statistic_em(symbol=\"近一月\")\n    print(stock_lhb_stock_statistic_em_df)\n\n    stock_lhb_stock_statistic_em_df = stock_lhb_stock_statistic_em(symbol=\"近三月\")\n    print(stock_lhb_stock_statistic_em_df)\n\n    stock_lhb_stock_statistic_em_df = stock_lhb_stock_statistic_em(symbol=\"近六月\")\n    print(stock_lhb_stock_statistic_em_df)\n\n    stock_lhb_stock_statistic_em_df = stock_lhb_stock_statistic_em(symbol=\"近一年\")\n    print(stock_lhb_stock_statistic_em_df)\n\n    stock_lhb_jgmmtj_em_df = stock_lhb_jgmmtj_em(\n        start_date=\"20240417\", end_date=\"20240430\"\n    )\n    print(stock_lhb_jgmmtj_em_df)\n\n    stock_lhb_jgstatistic_em_df = stock_lhb_jgstatistic_em(symbol=\"近一月\")\n    print(stock_lhb_jgstatistic_em_df)\n\n    stock_lhb_hyyyb_em_df = stock_lhb_hyyyb_em(\n        start_date=\"20240401\", end_date=\"20240430\"\n    )\n    print(stock_lhb_hyyyb_em_df)\n\n    stock_lhb_yybph_em_df = stock_lhb_yybph_em(symbol=\"近一月\")\n    print(stock_lhb_yybph_em_df)\n\n    stock_lhb_traderstatistic_em_df = stock_lhb_traderstatistic_em(symbol=\"近一月\")\n    print(stock_lhb_traderstatistic_em_df)\n\n    stock_lhb_stock_detail_date_em_df = stock_lhb_stock_detail_date_em(symbol=\"002901\")\n    print(stock_lhb_stock_detail_date_em_df)\n\n    stock_lhb_stock_detail_em_df = stock_lhb_stock_detail_em(\n        symbol=\"002901\", date=\"20221012\", flag=\"买入\"\n    )\n    print(stock_lhb_stock_detail_em_df)\n\n    stock_lhb_stock_detail_em_df = stock_lhb_stock_detail_em(\n        symbol=\"600077\", date=\"20070416\", flag=\"买入\"\n    )\n    print(stock_lhb_stock_detail_em_df)\n\n    stock_lhb_yyb_detail_em_df = stock_lhb_yyb_detail_em(symbol=\"10188715\")\n    print(stock_lhb_yyb_detail_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_lhb_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/5/10 00:00\nDesc: 新浪财经-龙虎榜\nhttps://vip.stock.finance.sina.com.cn/q/go.php/vInvestConsult/kind/lhb/index.phtml\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_lhb_detail_daily_sina(date: str = \"20240222\") -> pd.DataFrame:\n    \"\"\"\n    龙虎榜-每日详情\n    https://vip.stock.finance.sina.com.cn/q/go.php/vInvestConsult/kind/lhb/index.phtml\n    :param date: 交易日\n    :type date: str\n    :return: 龙虎榜-每日详情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    date = \"-\".join([date[:4], date[4:6], date[6:]])\n    url = \"https://vip.stock.finance.sina.com.cn/q/go.php/vInvestConsult/kind/lhb/index.phtml\"\n    params = {\"tradedate\": date}\n    r = requests.get(url, params=params)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    selected_html = soup.find(name=\"div\", attrs={\"class\": \"list\"}).find_all(\n        name=\"table\", attrs={\"class\": \"list_table\"}\n    )\n    big_df = pd.DataFrame()\n    for table in selected_html:\n        temp_df = pd.read_html(StringIO(table.prettify()), header=0, skiprows=1)[0]\n        temp_symbol = pd.read_html(StringIO(table.prettify()))[0].iat[0, 0]\n        temp_df[\"指标\"] = temp_symbol\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df[\"股票代码\"] = big_df[\"股票代码\"].astype(str).str.zfill(6)\n    del big_df[\"查看详情\"]\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票名称\",\n        \"收盘价\",\n        \"对应值\",\n        \"成交量\",\n        \"成交额\",\n        \"指标\",\n    ]\n    big_df[\"收盘价\"] = pd.to_numeric(big_df[\"收盘价\"], errors=\"coerce\")\n    big_df[\"对应值\"] = pd.to_numeric(big_df[\"对应值\"], errors=\"coerce\")\n    big_df[\"成交量\"] = pd.to_numeric(big_df[\"成交量\"], errors=\"coerce\")\n    big_df[\"成交额\"] = pd.to_numeric(big_df[\"成交额\"], errors=\"coerce\")\n    return big_df\n\n\ndef _find_last_page(\n    url: str = \"https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/ggtj/index.phtml\",\n    recent_day: str = \"60\",\n):\n    params = {\n        \"last\": recent_day,\n        \"p\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    soup = BeautifulSoup(r.text, \"lxml\")\n    try:\n        previous_page = int(soup.find_all(attrs={\"class\": \"page\"})[-2].text)\n    except:  # noqa: E722\n        previous_page = 1\n    if previous_page != 1:\n        while True:\n            params = {\n                \"last\": recent_day,\n                \"p\": previous_page,\n            }\n            r = requests.get(url, params=params)\n            soup = BeautifulSoup(r.text, features=\"lxml\")\n            last_page = int(soup.find_all(attrs={\"class\": \"page\"})[-2].text)\n            if last_page != previous_page:\n                previous_page = last_page\n                continue\n            else:\n                break\n    return previous_page\n\n\ndef stock_lhb_ggtj_sina(symbol: str = \"5\") -> pd.DataFrame:\n    \"\"\"\n    龙虎榜-个股上榜统计\n    https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/ggtj/index.phtml\n    :param symbol: choice of {\"5\": 最近 5 天; \"10\": 最近 10 天; \"30\": 最近 30 天; \"60\": 最近 60 天;}\n    :type symbol: str\n    :return: 龙虎榜-个股上榜统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        \"https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/ggtj/index.phtml\"\n    )\n    last_page_num = _find_last_page(url, symbol)\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, last_page_num + 1), leave=False):\n        params = {\n            \"last\": symbol,\n            \"p\": page,\n        }\n        r = requests.get(url, params=params)\n        temp_df = pd.read_html(StringIO(r.text))[0].iloc[0:, :]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df[\"股票代码\"] = big_df[\"股票代码\"].astype(str).str.zfill(6)\n    big_df.columns = [\n        \"股票代码\",\n        \"股票名称\",\n        \"上榜次数\",\n        \"累积购买额\",\n        \"累积卖出额\",\n        \"净额\",\n        \"买入席位数\",\n        \"卖出席位数\",\n    ]\n    return big_df\n\n\ndef stock_lhb_yytj_sina(symbol: str = \"5\") -> pd.DataFrame:\n    \"\"\"\n    龙虎榜-营业部上榜统计\n    https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/yytj/index.phtml\n    :param symbol: choice of {\"5\": 最近 5 天; \"10\": 最近 10 天; \"30\": 最近 30 天; \"60\": 最近 60 天;}\n    :type symbol: str\n    :return: 龙虎榜-营业部上榜统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        \"https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/yytj/index.phtml\"\n    )\n    last_page_num = _find_last_page(url, symbol)\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, last_page_num + 1), leave=False):\n        params = {\n            \"last\": \"5\",\n            \"p\": page,\n        }\n        r = requests.get(url, params=params)\n        temp_df = pd.read_html(StringIO(r.text))[0].iloc[0:, :]\n        big_df = pd.concat([big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"营业部名称\",\n        \"上榜次数\",\n        \"累积购买额\",\n        \"买入席位数\",\n        \"累积卖出额\",\n        \"卖出席位数\",\n        \"买入前三股票\",\n    ]\n    big_df[\"上榜次数\"] = pd.to_numeric(big_df[\"上榜次数\"], errors=\"coerce\")\n    big_df[\"买入席位数\"] = pd.to_numeric(big_df[\"买入席位数\"], errors=\"coerce\")\n    big_df[\"卖出席位数\"] = pd.to_numeric(big_df[\"卖出席位数\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_lhb_jgzz_sina(symbol: str = \"5\") -> pd.DataFrame:\n    \"\"\"\n    龙虎榜-机构席位追踪\n    https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/jgzz/index.phtml\n    :param symbol: choice of {\"5\": 最近 5 天; \"10\": 最近 10 天; \"30\": 最近 30 天; \"60\": 最近 60 天;}\n    :type symbol: str\n    :return: 龙虎榜-机构席位追踪\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        \"https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/jgzz/index.phtml\"\n    )\n    last_page_num = _find_last_page(url, symbol)\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, last_page_num + 1), leave=False):\n        params = {\n            \"last\": symbol,\n            \"p\": page,\n        }\n        r = requests.get(url, params=params)\n        temp_df = pd.read_html(StringIO(r.text))[0].iloc[0:, :]\n        if temp_df.empty:\n            continue\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df[\"股票代码\"] = big_df[\"股票代码\"].astype(str).str.zfill(6)\n    del big_df[\"当前价\"]\n    del big_df[\"涨跌幅\"]\n    big_df.columns = [\n        \"股票代码\",\n        \"股票名称\",\n        \"累积买入额\",\n        \"买入次数\",\n        \"累积卖出额\",\n        \"卖出次数\",\n        \"净额\",\n    ]\n    big_df[\"买入次数\"] = pd.to_numeric(big_df[\"买入次数\"], errors=\"coerce\")\n    big_df[\"卖出次数\"] = pd.to_numeric(big_df[\"卖出次数\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_lhb_jgmx_sina() -> pd.DataFrame:\n    \"\"\"\n    龙虎榜-机构席位成交明细\n    https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/jgmx/index.phtml\n    :return: 龙虎榜-机构席位成交明细\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        \"https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/jgmx/index.phtml\"\n    )\n    params = {\n        \"p\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    try:\n        last_page_num = int(soup.find_all(attrs={\"class\": \"page\"})[-2].text)\n    except:  # noqa: E722\n        last_page_num = 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, last_page_num + 1), leave=False):\n        params = {\n            \"p\": page,\n        }\n        r = requests.get(url, params=params)\n        temp_df = pd.read_html(StringIO(r.text))[0].iloc[0:, :]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df[\"股票代码\"] = big_df[\"股票代码\"].astype(str).str.zfill(6)\n    big_df[\"交易日期\"] = pd.to_datetime(big_df[\"交易日期\"], errors=\"coerce\").dt.date\n    big_df.rename(\n        columns={\n            \"机构席位买入额(万)\": \"机构席位买入额\",\n            \"机构席位卖出额(万)\": \"机构席位卖出额\",\n        },\n        inplace=True,\n    )\n    big_df[\"机构席位买入额\"] = pd.to_numeric(big_df[\"机构席位买入额\"], errors=\"coerce\")\n    big_df[\"机构席位卖出额\"] = pd.to_numeric(big_df[\"机构席位卖出额\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_lhb_detail_daily_sina_df = stock_lhb_detail_daily_sina(date=\"20240222\")\n    print(stock_lhb_detail_daily_sina_df)\n\n    stock_lhb_ggtj_sina_df = stock_lhb_ggtj_sina(symbol=\"5\")\n    print(stock_lhb_ggtj_sina_df)\n\n    stock_lhb_yytj_sina_df = stock_lhb_yytj_sina(symbol=\"5\")\n    print(stock_lhb_yytj_sina_df)\n\n    stock_lhb_jgzz_sina_df = stock_lhb_jgzz_sina(symbol=\"5\")\n    print(stock_lhb_jgzz_sina_df)\n\n    stock_lhb_jgmx_sina_df = stock_lhb_jgmx_sina()\n    print(stock_lhb_jgmx_sina_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_margin_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/6/14 17:00\nDesc: 东方财富网-数据中心-融资融券-融资融券账户统计-两融账户信息\nhttps://www.szse.cn/disclosure/margin/object/index.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_margin_account_info() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-融资融券-融资融券账户统计-两融账户信息\n    https://data.eastmoney.com/rzrq/zhtjday.html\n    :return: 融资融券账户统计\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(action=\"ignore\", category=FutureWarning)\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPTA_WEB_MARGIN_DAILYTRADE\",\n        \"columns\": \"ALL\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"500\",\n        \"sortColumns\": \"STATISTICS_DATE\",\n        \"sortTypes\": \"-1\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    r = requests.get(url=url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    tqdm = get_tqdm()\n    big_df = pd.DataFrame()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n                \"p\": page,\n                \"pageNo\": page,\n                \"pageNum\": page,\n            }\n        )\n        r = requests.get(url=url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.rename(\n        columns={\n            \"STATISTICS_DATE\": \"日期\",\n            \"FIN_BALANCE\": \"融资余额\",\n            \"LOAN_BALANCE\": \"融券余额\",\n            \"FIN_BUY_AMT\": \"融资买入额\",\n            \"LOAN_SELL_AMT\": \"融券卖出额\",\n            \"SECURITY_ORG_NUM\": \"证券公司数量\",\n            \"OPERATEDEPT_NUM\": \"营业部数量\",\n            \"PERSONAL_INVESTOR_NUM\": \"个人投资者数量\",\n            \"ORG_INVESTOR_NUM\": \"机构投资者数量\",\n            \"INVESTOR_NUM\": \"参与交易的投资者数量\",\n            \"MARGINLIAB_INVESTOR_NUM\": \"有融资融券负债的投资者数量\",\n            \"TOTAL_GUARANTEE\": \"担保物总价值\",\n            \"AVG_GUARANTEE_RATIO\": \"平均维持担保比例\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"日期\",\n            \"融资余额\",\n            \"融券余额\",\n            \"融资买入额\",\n            \"融券卖出额\",\n            \"证券公司数量\",\n            \"营业部数量\",\n            \"个人投资者数量\",\n            \"机构投资者数量\",\n            \"参与交易的投资者数量\",\n            \"有融资融券负债的投资者数量\",\n            \"担保物总价值\",\n            \"平均维持担保比例\",\n        ]\n    ]\n\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    for item in big_df.columns[1:]:\n        big_df[item] = pd.to_numeric(big_df[item], errors=\"coerce\")\n    big_df.sort_values([\"日期\"], ignore_index=True, inplace=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_margin_account_info_df = stock_margin_account_info()\n    print(stock_margin_account_info_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_margin_sse.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2026/1/13 15:20\nDesc: 上海证券交易所-融资融券数据\nhttps://www.sse.com.cn/market/othersdata/margin/sum/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_margin_ratio_pa(symbol: str = \"深市\", date: str = \"20260113\") -> pd.DataFrame:\n    \"\"\"\n    融资融券-标的证券名单及保证金比例查询\n    https://stock.pingan.com/static/webinfo/margin/business.html?businessType=0\n    :param symbol: choice of {\"深市\", \"沪市\", \"北交所\"}\n    :type symbol: str\n    :param date: 交易日期\n    :type date: str\n    :return: 标的证券名单及保证金比例查询\n    :rtype: pandas.DataFrame\n    \"\"\"\n    market_code = {\n        \"深市\": \"00\",\n        \"沪市\": \"10\",\n        \"北交所\": \"30\",\n    }\n    url = \"https://stock.pingan.com/fss/servlet/fsscoreapp/stockSource/mrgRatio\"\n    payload = {\n        \"currentPage\": 1,\n        \"pageSize\": 50000,\n        \"type\": \"bdzq\",\n        \"setdate\": \"-\".join([date[:4], date[4:6], date[6:]]),\n        \"stockMes\": \"\",\n        \"market\": market_code[symbol],\n        \"appName\": \"AYLCH5\",\n        \"tokenId\": \"\",\n        \"appChannel\": \"LRSP\",\n        \"requestId\": \"194055910e2075c03e25fabf6ffc5a7f\",\n        \"channel\": \"pa18\",\n    }\n    r = requests.post(url, json=payload)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"list\"])\n    temp_df.rename(\n        columns={\n            \"fiMarginRatio\": \"融资比例\",\n            \"secuCode\": \"证券代码\",\n            \"secuName\": \"证券简称\",\n            \"slMarginRatio\": \"融券比例\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"证券代码\",\n            \"证券简称\",\n            \"融资比例\",\n            \"融券比例\",\n        ]\n    ]\n    temp_df[\"融资比例\"] = pd.to_numeric(temp_df[\"融资比例\"], errors=\"coerce\")\n    temp_df[\"融券比例\"] = pd.to_numeric(temp_df[\"融券比例\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_margin_sse(\n    start_date: str = \"20010106\", end_date: str = \"20230922\"\n) -> pd.DataFrame:\n    \"\"\"\n    上海证券交易所-融资融券数据-融资融券汇总\n    https://www.sse.com.cn/market/othersdata/margin/sum/\n    :param start_date: 交易开始日期\n    :type start_date: str\n    :param end_date: 交易结束日期\n    :type end_date: str\n    :return: 融资融券汇总\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://query.sse.com.cn/marketdata/tradedata/queryMargin.do\"\n    params = {\n        \"isPagination\": \"true\",\n        \"beginDate\": start_date,\n        \"endDate\": end_date,\n        \"tabType\": \"\",\n        \"stockCode\": \"\",\n        \"pageHelp.pageSize\": \"5000\",\n        \"pageHelp.pageNo\": \"1\",\n        \"pageHelp.beginPage\": \"1\",\n        \"pageHelp.cacheSize\": \"1\",\n        \"pageHelp.endPage\": \"5\",\n    }\n    headers = {\n        \"Referer\": \"https://www.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/88.0.4324.150 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"])\n    temp_df.columns = [\n        \"_\",\n        \"信用交易日期\",\n        \"_\",\n        \"融券卖出量\",\n        \"融券余量\",\n        \"融券余量金额\",\n        \"_\",\n        \"_\",\n        \"融资买入额\",\n        \"融资融券余额\",\n        \"融资余额\",\n        \"_\",\n        \"_\",\n    ]\n    temp_df = temp_df[\n        [\n            \"信用交易日期\",\n            \"融资余额\",\n            \"融资买入额\",\n            \"融券余量\",\n            \"融券余量金额\",\n            \"融券卖出量\",\n            \"融资融券余额\",\n        ]\n    ]\n    temp_df[\"融资余额\"] = pd.to_numeric(temp_df[\"融资余额\"], errors=\"coerce\")\n    temp_df[\"融资买入额\"] = pd.to_numeric(temp_df[\"融资买入额\"], errors=\"coerce\")\n    temp_df[\"融券余量\"] = pd.to_numeric(temp_df[\"融券余量\"], errors=\"coerce\")\n    temp_df[\"融券余量金额\"] = pd.to_numeric(temp_df[\"融券余量金额\"], errors=\"coerce\")\n    temp_df[\"融券卖出量\"] = pd.to_numeric(temp_df[\"融券卖出量\"], errors=\"coerce\")\n    temp_df[\"融资融券余额\"] = pd.to_numeric(temp_df[\"融资融券余额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_margin_detail_sse(date: str = \"20230922\") -> pd.DataFrame:\n    \"\"\"\n    上海证券交易所-融资融券数据-融资融券明细\n    https://www.sse.com.cn/market/othersdata/margin/detail/\n    :param date: 交易日期\n    :type date: str\n    :return: 融资融券明细\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://query.sse.com.cn/marketdata/tradedata/queryMargin.do\"\n    params = {\n        \"isPagination\": \"true\",\n        \"tabType\": \"mxtype\",\n        \"detailsDate\": date,\n        \"stockCode\": \"\",\n        \"beginDate\": \"\",\n        \"endDate\": \"\",\n        \"pageHelp.pageSize\": \"5000\",\n        \"pageHelp.pageCount\": \"50\",\n        \"pageHelp.pageNo\": \"1\",\n        \"pageHelp.beginPage\": \"1\",\n        \"pageHelp.cacheSize\": \"1\",\n        \"pageHelp.endPage\": \"21\",\n    }\n    headers = {\n        \"Referer\": \"https://www.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/88.0.4324.150 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"])\n    temp_df.columns = [\n        \"_\",\n        \"信用交易日期\",\n        \"融券偿还量\",\n        \"融券卖出量\",\n        \"融券余量\",\n        \"_\",\n        \"_\",\n        \"融资偿还额\",\n        \"融资买入额\",\n        \"_\",\n        \"融资余额\",\n        \"标的证券简称\",\n        \"标的证券代码\",\n    ]\n    temp_df = temp_df[\n        [\n            \"信用交易日期\",\n            \"标的证券代码\",\n            \"标的证券简称\",\n            \"融资余额\",\n            \"融资买入额\",\n            \"融资偿还额\",\n            \"融券余量\",\n            \"融券卖出量\",\n            \"融券偿还量\",\n        ]\n    ]\n    temp_df[\"融资余额\"] = pd.to_numeric(temp_df[\"融资余额\"], errors=\"coerce\")\n    temp_df[\"融资买入额\"] = pd.to_numeric(temp_df[\"融资买入额\"], errors=\"coerce\")\n    temp_df[\"融资偿还额\"] = pd.to_numeric(temp_df[\"融资偿还额\"], errors=\"coerce\")\n    temp_df[\"融券余量\"] = pd.to_numeric(temp_df[\"融券余量\"], errors=\"coerce\")\n    temp_df[\"融券卖出量\"] = pd.to_numeric(temp_df[\"融券卖出量\"], errors=\"coerce\")\n    temp_df[\"融券偿还量\"] = pd.to_numeric(temp_df[\"融券偿还量\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_margin_ratio_pa_df = stock_margin_ratio_pa(symbol=\"沪市\", date=\"20260113\")\n    print(stock_margin_ratio_pa_df)\n\n    stock_margin_sse_df = stock_margin_sse(start_date=\"20010106\", end_date=\"20210401\")\n    print(stock_margin_sse_df)\n\n    stock_margin_detail_sse_df = stock_margin_detail_sse(date=\"20230922\")\n    print(stock_margin_detail_sse_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_margin_szse.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/6/14 17:00\nDesc: 深圳证券交易所-融资融券数据\nhttps://www.szse.cn/disclosure/margin/object/index.html\n\"\"\"\n\nimport warnings\nfrom io import BytesIO\nimport pandas as pd\nimport requests\n\n\ndef stock_margin_underlying_info_szse(date: str = \"20221129\") -> pd.DataFrame:\n    \"\"\"\n    深圳证券交易所-融资融券数据-标的证券信息\n    https://www.szse.cn/disclosure/margin/object/index.html\n    :param date: 交易日\n    :type date: str\n    :return: 标的证券信息\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.szse.cn/api/report/ShowReport\"\n    params = {\n        \"SHOWTYPE\": \"xlsx\",\n        \"CATALOGID\": \"1834_xxpl\",\n        \"txtDate\": \"-\".join([date[:4], date[4:6], date[6:]]),\n        \"tab1PAGENO\": \"1\",\n        \"random\": \"0.7425245522795993\",\n        \"TABKEY\": \"tab1\",\n    }\n    headers = {\n        \"Referer\": \"https://www.szse.cn/disclosure/margin/object/index.html\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/88.0.4324.150 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    with warnings.catch_warnings(record=True):\n        warnings.simplefilter(\"always\")\n        temp_df = pd.read_excel(BytesIO(r.content), engine=\"openpyxl\", dtype={\"证券代码\": str})\n    return temp_df\n\n\ndef stock_margin_szse(date: str = \"20240411\") -> pd.DataFrame:\n    \"\"\"\n    深圳证券交易所-融资融券数据-融资融券汇总\n    https://www.szse.cn/disclosure/margin/margin/index.html\n    :param date: 交易日\n    :type date: str\n    :return: 融资融券汇总\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.szse.cn/api/report/ShowReport/data\"\n    params = {\n        \"SHOWTYPE\": \"JSON\",\n        \"CATALOGID\": \"1837_xxpl\",\n        \"txtDate\": \"-\".join([date[:4], date[4:6], date[6:]]),\n        \"tab1PAGENO\": \"1\",\n        \"random\": \"0.7425245522795993\",\n    }\n    headers = {\n        \"Referer\": \"https://www.szse.cn/disclosure/margin/object/index.html\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/88.0.4324.150 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[0][\"data\"])\n    temp_df.columns = [\n        \"融资买入额\",\n        \"融资余额\",\n        \"融券卖出量\",\n        \"融券余量\",\n        \"融券余额\",\n        \"融资融券余额\",\n    ]\n    temp_df[\"融资买入额\"] = temp_df[\"融资买入额\"].str.replace(\",\", \"\")\n    temp_df[\"融资买入额\"] = pd.to_numeric(temp_df[\"融资买入额\"], errors=\"coerce\")\n    temp_df[\"融资余额\"] = temp_df[\"融资余额\"].str.replace(\",\", \"\")\n    temp_df[\"融资余额\"] = pd.to_numeric(temp_df[\"融资余额\"], errors=\"coerce\")\n    temp_df[\"融券卖出量\"] = temp_df[\"融券卖出量\"].str.replace(\",\", \"\")\n    temp_df[\"融券卖出量\"] = pd.to_numeric(temp_df[\"融券卖出量\"], errors=\"coerce\")\n    temp_df[\"融券余量\"] = temp_df[\"融券余量\"].str.replace(\",\", \"\")\n    temp_df[\"融券余量\"] = pd.to_numeric(temp_df[\"融券余量\"], errors=\"coerce\")\n    temp_df[\"融券余额\"] = temp_df[\"融券余额\"].str.replace(\",\", \"\")\n    temp_df[\"融券余额\"] = pd.to_numeric(temp_df[\"融券余额\"], errors=\"coerce\")\n    temp_df[\"融资融券余额\"] = temp_df[\"融资融券余额\"].str.replace(\",\", \"\")\n    temp_df[\"融资融券余额\"] = pd.to_numeric(temp_df[\"融资融券余额\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_margin_detail_szse(date: str = \"20230925\") -> pd.DataFrame:\n    \"\"\"\n    深证证券交易所-融资融券数据-融资融券交易明细\n    https://www.szse.cn/disclosure/margin/margin/index.html\n    :param date: 交易日期\n    :type date: str\n    :return: 融资融券明细\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.szse.cn/api/report/ShowReport\"\n    params = {\n        \"SHOWTYPE\": \"xlsx\",\n        \"CATALOGID\": \"1837_xxpl\",\n        \"txtDate\": \"-\".join([date[:4], date[4:6], date[6:]]),\n        \"tab2PAGENO\": \"1\",\n        \"random\": \"0.24279342734085696\",\n        \"TABKEY\": \"tab2\",\n    }\n    headers = {\n        \"Referer\": \"https://www.szse.cn/disclosure/margin/margin/index.html\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/88.0.4324.150 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    with warnings.catch_warnings(record=True):\n        warnings.simplefilter(\"always\")\n        temp_df = pd.read_excel(BytesIO(r.content), engine=\"openpyxl\", dtype={\"证券代码\": str})\n    temp_df.columns = [\n        \"证券代码\",\n        \"证券简称\",\n        \"融资买入额\",\n        \"融资余额\",\n        \"融券卖出量\",\n        \"融券余量\",\n        \"融券余额\",\n        \"融资融券余额\",\n    ]\n    temp_df[\"证券简称\"] = temp_df[\"证券简称\"].str.replace(\"&nbsp;\", \"\")\n    temp_df[\"融资买入额\"] = temp_df[\"融资买入额\"].str.replace(\",\", \"\")\n    temp_df[\"融资买入额\"] = pd.to_numeric(temp_df[\"融资买入额\"], errors=\"coerce\")\n    temp_df[\"融资余额\"] = temp_df[\"融资余额\"].str.replace(\",\", \"\")\n    temp_df[\"融资余额\"] = pd.to_numeric(temp_df[\"融资余额\"], errors=\"coerce\")\n    temp_df[\"融券卖出量\"] = temp_df[\"融券卖出量\"].astype(str).str.replace(\",\", \"\")\n    temp_df[\"融券卖出量\"] = pd.to_numeric(temp_df[\"融券卖出量\"], errors=\"coerce\")\n    temp_df[\"融券余量\"] = temp_df[\"融券余量\"].str.replace(\",\", \"\")\n    temp_df[\"融券余量\"] = pd.to_numeric(temp_df[\"融券余量\"], errors=\"coerce\")\n    temp_df[\"融券余额\"] = temp_df[\"融券余额\"].str.replace(\",\", \"\")\n    temp_df[\"融券余额\"] = pd.to_numeric(temp_df[\"融券余额\"], errors=\"coerce\")\n    temp_df[\"融资融券余额\"] = temp_df[\"融资融券余额\"].str.replace(\",\", \"\")\n    temp_df[\"融资融券余额\"] = pd.to_numeric(temp_df[\"融资融券余额\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_margin_underlying_info_szse_df = stock_margin_underlying_info_szse(\n        date=\"20221129\"\n    )\n    print(stock_margin_underlying_info_szse_df)\n\n    stock_margin_szse_df = stock_margin_szse(date=\"20240411\")\n    print(stock_margin_szse_df)\n\n    stock_margin_detail_szse_df = stock_margin_detail_szse(date=\"20240411\")\n    print(stock_margin_detail_szse_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_market_legu.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/25 20:22\nDesc: 乐咕乐股网-赚钱效应分析\nhttps://www.legulegu.com/stockdata/market-activity\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.utils.cons import headers\n\n\ndef stock_market_activity_legu() -> pd.DataFrame:\n    \"\"\"\n    乐咕乐股网-赚钱效应分析\n    https://www.legulegu.com/stockdata/market-activity\n    :return: 乐咕乐股网-赚钱效应分析\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://legulegu.com/stockdata/market-activity\"\n    r = requests.get(url, headers=headers)\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df_one = temp_df.iloc[:, :2]\n    temp_df_one.columns = [\"item\", \"value\"]\n    temp_df_two = temp_df.iloc[:, 2:4]\n    temp_df_two.columns = [\"item\", \"value\"]\n    temp_df_three = temp_df.iloc[:, 4:6]\n    temp_df_three.columns = [\"item\", \"value\"]\n    temp_df = pd.concat(\n        objs=[temp_df_one, temp_df_two, temp_df_three], ignore_index=True\n    )\n    temp_df.dropna(how=\"all\", axis=0, inplace=True)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    item_str = soup.find(name=\"div\", attrs={\"class\": \"current-index\"}).text\n    inner_temp_df = pd.DataFrame([item.strip() for item in item_str.split(\"：\")]).T\n    inner_temp_df.columns = [\"item\", \"value\"]\n    temp_df = pd.concat(objs=[temp_df, inner_temp_df], ignore_index=True)\n    item_str = soup.find(name=\"div\", attrs={\"class\": \"current-data\"}).text.strip()\n    inner_temp_df = pd.DataFrame([\"统计日期\", item_str]).T\n    inner_temp_df.columns = [\"item\", \"value\"]\n    temp_df = pd.concat(objs=[temp_df, inner_temp_df], ignore_index=True)\n    temp_df.reset_index(inplace=True, drop=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_market_activity_legu_df = stock_market_activity_legu()\n    print(stock_market_activity_legu_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_pankou_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/12/27 21:11\nDesc: 东方财富-行情中心-盘口异动\nhttps://quote.eastmoney.com/changes/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_changes_em(symbol: str = \"大笔买入\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-行情中心-盘口异动\n    https://quote.eastmoney.com/changes/\n    :param symbol: choice of {'火箭发射', '快速反弹', '大笔买入', '封涨停板', '打开跌停板', '有大买盘',\n    '竞价上涨', '高开5日线', '向上缺口', '60日新高', '60日大幅上涨', '加速下跌', '高台跳水',\n    '大笔卖出', '封跌停板', '打开涨停板', '有大卖盘', '竞价下跌', '低开5日线', '向下缺口', '60日新低', '60日大幅下跌'}\n    :type symbol: str\n    :return: 盘口异动\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2ex.eastmoney.com/getAllStockChanges\"\n    symbol_map = {\n        \"火箭发射\": \"8201\",\n        \"快速反弹\": \"8202\",\n        \"大笔买入\": \"8193\",\n        \"封涨停板\": \"4\",\n        \"打开跌停板\": \"32\",\n        \"有大买盘\": \"64\",\n        \"竞价上涨\": \"8207\",\n        \"高开5日线\": \"8209\",\n        \"向上缺口\": \"8211\",\n        \"60日新高\": \"8213\",\n        \"60日大幅上涨\": \"8215\",\n        \"加速下跌\": \"8204\",\n        \"高台跳水\": \"8203\",\n        \"大笔卖出\": \"8194\",\n        \"封跌停板\": \"8\",\n        \"打开涨停板\": \"16\",\n        \"有大卖盘\": \"128\",\n        \"竞价下跌\": \"8208\",\n        \"低开5日线\": \"8210\",\n        \"向下缺口\": \"8212\",\n        \"60日新低\": \"8214\",\n        \"60日大幅下跌\": \"8216\",\n    }\n    reversed_symbol_map = {v: k for k, v in symbol_map.items()}\n    params = {\n        \"type\": symbol_map[symbol],\n        \"pageindex\": \"0\",\n        \"pagesize\": \"5000\",\n        \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n        \"dpt\": \"wzchanges\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"allstock\"])\n    temp_df[\"tm\"] = pd.to_datetime(temp_df[\"tm\"], format=\"%H%M%S\").dt.time\n    temp_df.columns = [\n        \"时间\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"板块\",\n        \"相关信息\",\n    ]\n    temp_df = temp_df[\n        [\n            \"时间\",\n            \"代码\",\n            \"名称\",\n            \"板块\",\n            \"相关信息\",\n        ]\n    ]\n    temp_df[\"板块\"] = temp_df[\"板块\"].astype(str)\n    temp_df[\"板块\"] = temp_df[\"板块\"].map(reversed_symbol_map)\n    return temp_df\n\n\ndef stock_board_change_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富-行情中心-当日板块异动详情\n    https://quote.eastmoney.com/changes/\n    :return: 当日板块异动详情页\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2ex.eastmoney.com/getAllBKChanges\"\n    params = {\n        \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n        \"dpt\": \"wzchanges\",\n        \"pageindex\": \"0\",\n        \"pagesize\": \"5000\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    data_df = pd.DataFrame(data_json[\"data\"][\"allbk\"])\n    data_df.columns = [\n        \"-\",\n        \"-\",\n        \"板块名称\",\n        \"涨跌幅\",\n        \"主力净流入\",\n        \"板块异动总次数\",\n        \"ms\",\n        \"板块具体异动类型列表及出现次数\",\n    ]\n    data_df[\"板块异动最频繁个股及所属类型-买卖方向\"] = [\n        item[\"m\"] for item in data_df[\"ms\"]\n    ]\n    data_df[\"板块异动最频繁个股及所属类型-股票代码\"] = [\n        item[\"c\"] for item in data_df[\"ms\"]\n    ]\n    data_df[\"板块异动最频繁个股及所属类型-股票名称\"] = [\n        item[\"n\"] for item in data_df[\"ms\"]\n    ]\n    data_df[\"板块异动最频繁个股及所属类型-买卖方向\"] = data_df[\n        \"板块异动最频繁个股及所属类型-买卖方向\"\n    ].map({0: \"大笔买入\", 1: \"大笔卖出\"})\n    data_df = data_df[\n        [\n            \"板块名称\",\n            \"涨跌幅\",\n            \"主力净流入\",\n            \"板块异动总次数\",\n            \"板块异动最频繁个股及所属类型-股票代码\",\n            \"板块异动最频繁个股及所属类型-股票名称\",\n            \"板块异动最频繁个股及所属类型-买卖方向\",\n            \"板块具体异动类型列表及出现次数\",\n        ]\n    ]\n    data_df[\"涨跌幅\"] = pd.to_numeric(data_df[\"涨跌幅\"], errors=\"coerce\")\n    data_df[\"主力净流入\"] = pd.to_numeric(data_df[\"主力净流入\"], errors=\"coerce\")\n    data_df[\"板块异动总次数\"] = pd.to_numeric(\n        data_df[\"板块异动总次数\"], errors=\"coerce\"\n    )\n    return data_df\n\n\nif __name__ == \"__main__\":\n    stock_changes_em_df = stock_changes_em(symbol=\"大笔买入\")\n    print(stock_changes_em_df)\n\n    stock_board_change_em_df = stock_board_change_em()\n    print(stock_board_change_em_df)\n\n    for item in {\n        \"火箭发射\",\n        \"快速反弹\",\n        \"大笔买入\",\n        \"封涨停板\",\n        \"打开跌停板\",\n        \"有大买盘\",\n        \"竞价上涨\",\n        \"高开5日线\",\n        \"向上缺口\",\n        \"60日新高\",\n        \"60日大幅上涨\",\n        \"加速下跌\",\n        \"高台跳水\",\n        \"大笔卖出\",\n        \"封跌停板\",\n        \"打开涨停板\",\n        \"有大卖盘\",\n        \"竞价下跌\",\n        \"低开5日线\",\n        \"向下缺口\",\n        \"60日新低\",\n        \"60日大幅下跌\",\n    }:\n        stock_changes_em_df = stock_changes_em(symbol=item)\n        print(stock_changes_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_qsjy_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/9/21 16:49\nDesc: 东方财富网-数据中心-特色数据-券商业绩月报\nhttp://data.eastmoney.com/other/qsjy.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_qsjy_em(date: str = \"20200731\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-券商业绩月报\n    http://data.eastmoney.com/other/qsjy.html\n    :param date: 数据月份，从 2010-06-01 开始, e.g., 需要 2011 年 7 月, 则输入 2011-07-01\n    :type date: str\n    :return: 券商业绩月报\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"END_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_PERFORMANCE\",\n        \"columns\": \"SECURITY_CODE,SECURITY_NAME_ABBR,END_DATE,NETPROFIT,NP_YOY,NP_QOQ,ACCUMPROFIT,ACCUMPROFIT_YOY,OPERATE_INCOME,OI_YOY,OI_QOQ,ACCUMOI,ACCUMOI_YOY,NET_ASSETS,NA_YOY\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"(END_DATE='{'-'.join([date[:4], date[4:6], date[6:]])}')\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.columns = [\n        \"代码\",\n        \"简称\",\n        \"-\",\n        \"当月净利润-净利润\",\n        \"当月净利润-同比增长\",\n        \"当月净利润-环比增长\",\n        \"当年累计净利润-累计净利润\",\n        \"当年累计净利润-同比增长\",\n        \"当月营业收入-营业收入\",\n        \"当月营业收入-环比增长\",\n        \"当月营业收入-同比增长\",\n        \"当年累计营业收入-累计营业收入\",\n        \"当年累计营业收入-同比增长\",\n        \"净资产-净资产\",\n        \"净资产-同比增长\",\n    ]\n    temp_df = temp_df[\n        [\n            \"简称\",\n            \"代码\",\n            \"当月净利润-净利润\",\n            \"当月净利润-同比增长\",\n            \"当月净利润-环比增长\",\n            \"当年累计净利润-累计净利润\",\n            \"当年累计净利润-同比增长\",\n            \"当月营业收入-营业收入\",\n            \"当月营业收入-环比增长\",\n            \"当月营业收入-同比增长\",\n            \"当年累计营业收入-累计营业收入\",\n            \"当年累计营业收入-同比增长\",\n            \"净资产-净资产\",\n            \"净资产-同比增长\",\n        ]\n    ]\n    temp_df[\"当月净利润-净利润\"] = pd.to_numeric(temp_df[\"当月净利润-净利润\"])\n    temp_df[\"当月净利润-同比增长\"] = pd.to_numeric(temp_df[\"当月净利润-同比增长\"])\n    temp_df[\"当月净利润-环比增长\"] = pd.to_numeric(temp_df[\"当月净利润-环比增长\"])\n    temp_df[\"当年累计净利润-累计净利润\"] = pd.to_numeric(\n        temp_df[\"当年累计净利润-累计净利润\"]\n    )\n    temp_df[\"当年累计净利润-同比增长\"] = pd.to_numeric(\n        temp_df[\"当年累计净利润-同比增长\"]\n    )\n    temp_df[\"当月营业收入-营业收入\"] = pd.to_numeric(temp_df[\"当月营业收入-营业收入\"])\n    temp_df[\"当月营业收入-环比增长\"] = pd.to_numeric(temp_df[\"当月营业收入-环比增长\"])\n    temp_df[\"当月营业收入-同比增长\"] = pd.to_numeric(temp_df[\"当月营业收入-同比增长\"])\n    temp_df[\"当年累计营业收入-累计营业收入\"] = pd.to_numeric(\n        temp_df[\"当年累计营业收入-累计营业收入\"]\n    )\n    temp_df[\"当年累计营业收入-同比增长\"] = pd.to_numeric(\n        temp_df[\"当年累计营业收入-同比增长\"]\n    )\n    temp_df[\"净资产-净资产\"] = pd.to_numeric(temp_df[\"净资产-净资产\"])\n    temp_df[\"净资产-同比增长\"] = pd.to_numeric(temp_df[\"净资产-同比增长\"])\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_qsjy_em_df = stock_qsjy_em(date=\"20200430\")\n    print(stock_qsjy_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_report_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/9/20 15:30\nDesc: 东方财富-数据中心-年报季报-业绩快报-三大报表\n资产负债表\nhttps://data.eastmoney.com/bbsj/202003/zcfz.html\n利润表\nhttps://data.eastmoney.com/bbsj/202003/lrb.html\n现金流量表\nhttps://data.eastmoney.com/bbsj/202003/xjll.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_zcfz_em(date: str = \"20240331\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-年报季报-业绩快报-资产负债表\n    https://data.eastmoney.com/bbsj/202003/zcfz.html\n    :param date: choice of {\"20200331\", \"20200630\", \"20200930\", \"20201231\", \"...\"}; 从 20100331 开始\n    :type date: str\n    :return: 资产负债表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(action=\"ignore\", category=FutureWarning)\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"NOTICE_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_DMSK_FN_BALANCE\",\n        \"columns\": \"ALL\",\n        \"filter\": f\"\"\"(SECURITY_TYPE_CODE in (\"058001001\",\"058001008\"))(TRADE_MARKET_CODE!=\"069001017\")\n        (REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], join=\"outer\", ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"_\",\n        \"股票代码\",\n        \"_\",\n        \"_\",\n        \"股票简称\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"公告日期\",\n        \"_\",\n        \"资产-总资产\",\n        \"_\",\n        \"资产-货币资金\",\n        \"_\",\n        \"资产-应收账款\",\n        \"_\",\n        \"资产-存货\",\n        \"_\",\n        \"负债-总负债\",\n        \"负债-应付账款\",\n        \"_\",\n        \"负债-预收账款\",\n        \"_\",\n        \"股东权益合计\",\n        \"_\",\n        \"资产-总资产同比\",\n        \"负债-总负债同比\",\n        \"_\",\n        \"资产负债率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"资产-货币资金\",\n            \"资产-应收账款\",\n            \"资产-存货\",\n            \"资产-总资产\",\n            \"资产-总资产同比\",\n            \"负债-应付账款\",\n            \"负债-预收账款\",\n            \"负债-总负债\",\n            \"负债-总负债同比\",\n            \"资产负债率\",\n            \"股东权益合计\",\n            \"公告日期\",\n        ]\n    ]\n\n    big_df[\"资产-货币资金\"] = pd.to_numeric(big_df[\"资产-货币资金\"], errors=\"coerce\")\n    big_df[\"资产-应收账款\"] = pd.to_numeric(big_df[\"资产-应收账款\"], errors=\"coerce\")\n    big_df[\"资产-存货\"] = pd.to_numeric(big_df[\"资产-存货\"], errors=\"coerce\")\n    big_df[\"资产-总资产\"] = pd.to_numeric(big_df[\"资产-总资产\"], errors=\"coerce\")\n    big_df[\"资产-总资产同比\"] = pd.to_numeric(\n        big_df[\"资产-总资产同比\"], errors=\"coerce\"\n    )\n    big_df[\"负债-应付账款\"] = pd.to_numeric(big_df[\"负债-应付账款\"], errors=\"coerce\")\n    big_df[\"负债-预收账款\"] = pd.to_numeric(big_df[\"负债-预收账款\"], errors=\"coerce\")\n    big_df[\"负债-总负债\"] = pd.to_numeric(big_df[\"负债-总负债\"], errors=\"coerce\")\n    big_df[\"负债-总负债同比\"] = pd.to_numeric(\n        big_df[\"负债-总负债同比\"], errors=\"coerce\"\n    )\n    big_df[\"资产负债率\"] = pd.to_numeric(big_df[\"资产负债率\"], errors=\"coerce\")\n    big_df[\"股东权益合计\"] = pd.to_numeric(big_df[\"股东权益合计\"], errors=\"coerce\")\n    big_df[\"股东权益合计\"] = pd.to_numeric(big_df[\"股东权益合计\"], errors=\"coerce\")\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_zcfz_bj_em(date: str = \"20240331\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-年报季报-业绩快报-资产负债表\n    https://data.eastmoney.com/bbsj/202003/zcfz.html\n    :param date: choice of {\"20200331\", \"20200630\", \"20200930\", \"20201231\", \"...\"}; 从 20100331 开始\n    :type date: str\n    :return: 资产负债表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(action=\"ignore\", category=FutureWarning)\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"NOTICE_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_DMSK_FN_BALANCE\",\n        \"columns\": \"ALL\",\n        \"filter\": f\"\"\"(TRADE_MARKET_CODE=\"069001017\")\n        (REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], join=\"outer\", ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"_\",\n        \"股票代码\",\n        \"_\",\n        \"_\",\n        \"股票简称\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"公告日期\",\n        \"_\",\n        \"资产-总资产\",\n        \"_\",\n        \"资产-货币资金\",\n        \"_\",\n        \"资产-应收账款\",\n        \"_\",\n        \"资产-存货\",\n        \"_\",\n        \"负债-总负债\",\n        \"负债-应付账款\",\n        \"_\",\n        \"负债-预收账款\",\n        \"_\",\n        \"股东权益合计\",\n        \"_\",\n        \"资产-总资产同比\",\n        \"负债-总负债同比\",\n        \"_\",\n        \"资产负债率\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"资产-货币资金\",\n            \"资产-应收账款\",\n            \"资产-存货\",\n            \"资产-总资产\",\n            \"资产-总资产同比\",\n            \"负债-应付账款\",\n            \"负债-预收账款\",\n            \"负债-总负债\",\n            \"负债-总负债同比\",\n            \"资产负债率\",\n            \"股东权益合计\",\n            \"公告日期\",\n        ]\n    ]\n\n    big_df[\"资产-货币资金\"] = pd.to_numeric(big_df[\"资产-货币资金\"], errors=\"coerce\")\n    big_df[\"资产-应收账款\"] = pd.to_numeric(big_df[\"资产-应收账款\"], errors=\"coerce\")\n    big_df[\"资产-存货\"] = pd.to_numeric(big_df[\"资产-存货\"], errors=\"coerce\")\n    big_df[\"资产-总资产\"] = pd.to_numeric(big_df[\"资产-总资产\"], errors=\"coerce\")\n    big_df[\"资产-总资产同比\"] = pd.to_numeric(\n        big_df[\"资产-总资产同比\"], errors=\"coerce\"\n    )\n    big_df[\"负债-应付账款\"] = pd.to_numeric(big_df[\"负债-应付账款\"], errors=\"coerce\")\n    big_df[\"负债-预收账款\"] = pd.to_numeric(big_df[\"负债-预收账款\"], errors=\"coerce\")\n    big_df[\"负债-总负债\"] = pd.to_numeric(big_df[\"负债-总负债\"], errors=\"coerce\")\n    big_df[\"负债-总负债同比\"] = pd.to_numeric(\n        big_df[\"负债-总负债同比\"], errors=\"coerce\"\n    )\n    big_df[\"资产负债率\"] = pd.to_numeric(big_df[\"资产负债率\"], errors=\"coerce\")\n    big_df[\"股东权益合计\"] = pd.to_numeric(big_df[\"股东权益合计\"], errors=\"coerce\")\n    big_df[\"股东权益合计\"] = pd.to_numeric(big_df[\"股东权益合计\"], errors=\"coerce\")\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_lrb_em(date: str = \"20240331\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-年报季报-业绩快报-利润表\n    https://data.eastmoney.com/bbsj/202003/lrb.html\n    :param date: choice of {\"20200331\", \"20200630\", \"20200930\", \"20201231\", \"...\"}; 从 20100331 开始\n    :type date: str\n    :return: 利润表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(action=\"ignore\", category=FutureWarning)\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"NOTICE_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_DMSK_FN_INCOME\",\n        \"columns\": \"ALL\",\n        \"filter\": f\"\"\"(SECURITY_TYPE_CODE in (\"058001001\",\"058001008\"))(TRADE_MARKET_CODE!=\"069001017\")\n        (REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"_\",\n        \"股票代码\",\n        \"_\",\n        \"_\",\n        \"股票简称\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"公告日期\",\n        \"_\",\n        \"净利润\",\n        \"营业总收入\",\n        \"营业总支出-营业总支出\",\n        \"_\",\n        \"营业总支出-营业支出\",\n        \"_\",\n        \"_\",\n        \"营业总支出-销售费用\",\n        \"营业总支出-管理费用\",\n        \"营业总支出-财务费用\",\n        \"营业利润\",\n        \"利润总额\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"营业总收入同比\",\n        \"_\",\n        \"净利润同比\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"净利润\",\n            \"净利润同比\",\n            \"营业总收入\",\n            \"营业总收入同比\",\n            \"营业总支出-营业支出\",\n            \"营业总支出-销售费用\",\n            \"营业总支出-管理费用\",\n            \"营业总支出-财务费用\",\n            \"营业总支出-营业总支出\",\n            \"营业利润\",\n            \"利润总额\",\n            \"公告日期\",\n        ]\n    ]\n\n    big_df[\"净利润\"] = pd.to_numeric(big_df[\"净利润\"], errors=\"coerce\")\n    big_df[\"净利润同比\"] = pd.to_numeric(big_df[\"净利润同比\"], errors=\"coerce\")\n    big_df[\"营业总收入\"] = pd.to_numeric(big_df[\"营业总收入\"], errors=\"coerce\")\n    big_df[\"营业总收入同比\"] = pd.to_numeric(big_df[\"营业总收入同比\"], errors=\"coerce\")\n    big_df[\"营业总支出-营业支出\"] = pd.to_numeric(\n        big_df[\"营业总支出-营业支出\"], errors=\"coerce\"\n    )\n    big_df[\"营业总支出-销售费用\"] = pd.to_numeric(\n        big_df[\"营业总支出-销售费用\"], errors=\"coerce\"\n    )\n    big_df[\"营业总支出-管理费用\"] = pd.to_numeric(\n        big_df[\"营业总支出-管理费用\"], errors=\"coerce\"\n    )\n    big_df[\"营业总支出-财务费用\"] = pd.to_numeric(\n        big_df[\"营业总支出-财务费用\"], errors=\"coerce\"\n    )\n    big_df[\"营业总支出-营业总支出\"] = pd.to_numeric(\n        big_df[\"营业总支出-营业总支出\"], errors=\"coerce\"\n    )\n    big_df[\"营业利润\"] = pd.to_numeric(big_df[\"营业利润\"], errors=\"coerce\")\n    big_df[\"利润总额\"] = pd.to_numeric(big_df[\"利润总额\"], errors=\"coerce\")\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n\n    return big_df\n\n\ndef stock_xjll_em(date: str = \"20240331\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-年报季报-业绩快报-现金流量表\n    https://data.eastmoney.com/bbsj/202003/xjll.html\n    :param date: choice of {\"20200331\", \"20200630\", \"20200930\", \"20201231\", \"...\"}; 从 20100331 开始\n    :type date: str\n    :return: 现金流量表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(action=\"ignore\", category=FutureWarning)\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"NOTICE_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_DMSK_FN_CASHFLOW\",\n        \"columns\": \"ALL\",\n        \"filter\": f\"\"\"(SECURITY_TYPE_CODE in (\"058001001\",\"058001008\"))(TRADE_MARKET_CODE!=\"069001017\")\n        (REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.columns = [\n        \"序号\",\n        \"_\",\n        \"股票代码\",\n        \"_\",\n        \"_\",\n        \"股票简称\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"公告日期\",\n        \"_\",\n        \"经营性现金流-现金流量净额\",\n        \"经营性现金流-净现金流占比\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"投资性现金流-现金流量净额\",\n        \"投资性现金流-净现金流占比\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"融资性现金流-现金流量净额\",\n        \"融资性现金流-净现金流占比\",\n        \"净现金流-净现金流\",\n        \"净现金流-同比增长\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"净现金流-净现金流\",\n            \"净现金流-同比增长\",\n            \"经营性现金流-现金流量净额\",\n            \"经营性现金流-净现金流占比\",\n            \"投资性现金流-现金流量净额\",\n            \"投资性现金流-净现金流占比\",\n            \"融资性现金流-现金流量净额\",\n            \"融资性现金流-净现金流占比\",\n            \"公告日期\",\n        ]\n    ]\n\n    big_df[\"净现金流-净现金流\"] = pd.to_numeric(\n        big_df[\"净现金流-净现金流\"], errors=\"coerce\"\n    )\n    big_df[\"净现金流-同比增长\"] = pd.to_numeric(\n        big_df[\"净现金流-同比增长\"], errors=\"coerce\"\n    )\n    big_df[\"经营性现金流-现金流量净额\"] = pd.to_numeric(\n        big_df[\"经营性现金流-现金流量净额\"], errors=\"coerce\"\n    )\n    big_df[\"经营性现金流-净现金流占比\"] = pd.to_numeric(\n        big_df[\"经营性现金流-净现金流占比\"], errors=\"coerce\"\n    )\n    big_df[\"投资性现金流-现金流量净额\"] = pd.to_numeric(\n        big_df[\"投资性现金流-现金流量净额\"], errors=\"coerce\"\n    )\n    big_df[\"投资性现金流-净现金流占比\"] = pd.to_numeric(\n        big_df[\"投资性现金流-净现金流占比\"], errors=\"coerce\"\n    )\n    big_df[\"融资性现金流-现金流量净额\"] = pd.to_numeric(\n        big_df[\"融资性现金流-现金流量净额\"], errors=\"coerce\"\n    )\n    big_df[\"融资性现金流-净现金流占比\"] = pd.to_numeric(\n        big_df[\"融资性现金流-净现金流占比\"], errors=\"coerce\"\n    )\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_zcfz_em_df = stock_zcfz_em(date=\"20240331\")\n    print(stock_zcfz_em_df)\n\n    stock_zcfz_bj_em_df = stock_zcfz_bj_em(date=\"20240331\")\n    print(stock_zcfz_bj_em_df)\n\n    stock_lrb_em_df = stock_lrb_em(date=\"20240331\")\n    print(stock_lrb_em_df)\n\n    stock_xjll_em_df = stock_xjll_em(date=\"20240331\")\n    print(stock_xjll_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_research_report_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/2/28 13:00\nDesc: 东方财富网-数据中心-研究报告-个股研报\nhttps://data.eastmoney.com/report/stock.jshtml\n\"\"\"\n\nimport datetime\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_research_report_em(symbol: str = \"000001\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-研究报告-个股研报\n    https://data.eastmoney.com/report/stock.jshtml\n    :param symbol: 个股代码\n    :type symbol: str\n    :return: 个股研报\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://reportapi.eastmoney.com/report/list\"\n    params = {\n        \"industryCode\": \"*\",\n        \"pageSize\": \"5000\",\n        \"industry\": \"*\",\n        \"rating\": \"*\",\n        \"ratingChange\": \"*\",\n        \"beginTime\": \"2000-01-01\",\n        \"endTime\": f\"{datetime.datetime.now().year + 1}-01-01\",\n        \"pageNo\": \"1\",\n        \"fields\": \"\",\n        \"qType\": \"0\",\n        \"orgCode\": \"\",\n        \"code\": symbol,\n        \"rcode\": \"\",\n        \"p\": \"1\",\n        \"pageNum\": \"1\",\n        \"pageNumber\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"TotalPage\"]\n    current_year = data_json[\"currentYear\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageNo\": page,\n                \"p\": page,\n                \"pageNum\": page,\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], axis=0, ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df[\"index\"] + 1\n    predict_this_year_eps_title = f\"{current_year}-盈利预测-收益\"\n    predict_this_year_pe_title = f\"{current_year}-盈利预测-市盈率\"\n    predict_next_year_eps_title = f\"{current_year + 1}-盈利预测-收益\"\n    predict_next_year_pe_title = f\"{current_year + 1}-盈利预测-市盈率\"\n    predict_next_two_year_eps_title = f\"{current_year + 2}-盈利预测-收益\"\n    predict_next_two_year_pe_title = f\"{current_year + 2}-盈利预测-市盈率\"\n    big_df[\"pdfUrl\"] = big_df[\"infoCode\"].apply(\n        lambda x: f\"https://pdf.dfcfw.com/pdf/H3_{x}_1.pdf\"\n    )\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"title\": \"报告名称\",\n            \"stockName\": \"股票简称\",\n            \"stockCode\": \"股票代码\",\n            \"orgCode\": \"-\",\n            \"orgName\": \"-\",\n            \"orgSName\": \"机构\",\n            \"publishDate\": \"日期\",\n            \"infoCode\": \"-\",\n            \"column\": \"-\",\n            \"predictNextTwoYearEps\": predict_next_two_year_eps_title,\n            \"predictNextTwoYearPe\": predict_next_two_year_pe_title,\n            \"predictNextYearEps\": predict_next_year_eps_title,\n            \"predictNextYearPe\": predict_next_year_pe_title,\n            \"predictThisYearEps\": predict_this_year_eps_title,\n            \"predictThisYearPe\": predict_this_year_pe_title,\n            \"predictLastYearEps\": \"-\",\n            \"predictLastYearPe\": \"-\",\n            \"actualLastTwoYearEps\": \"-\",\n            \"actualLastYearEps\": \"-\",\n            \"industryCode\": \"-\",\n            \"industryName\": \"-\",\n            \"emIndustryCode\": \"-\",\n            \"indvInduCode\": \"-\",\n            \"indvInduName\": \"行业\",\n            \"emRatingCode\": \"-\",\n            \"emRatingValue\": \"-\",\n            \"emRatingName\": \"东财评级\",\n            \"lastEmRatingCode\": \"-\",\n            \"lastEmRatingValue\": \"-\",\n            \"lastEmRatingName\": \"-\",\n            \"ratingChange\": \"-\",\n            \"reportType\": \"-\",\n            \"author\": \"-\",\n            \"indvIsNew\": \"-\",\n            \"researcher\": \"-\",\n            \"newListingDate\": \"-\",\n            \"newPurchaseDate\": \"-\",\n            \"newIssuePrice\": \"-\",\n            \"newPeIssueA\": \"-\",\n            \"indvAimPriceT\": \"-\",\n            \"indvAimPriceL\": \"-\",\n            \"attachType\": \"-\",\n            \"attachSize\": \"-\",\n            \"attachPages\": \"-\",\n            \"encodeUrl\": \"-\",\n            \"sRatingName\": \"-\",\n            \"sRatingCode\": \"-\",\n            \"market\": \"-\",\n            \"authorID\": \"-\",\n            \"count\": \"近一月个股研报数\",\n            \"orgType\": \"-\",\n            \"pdfUrl\": \"报告PDF链接\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"报告名称\",\n            \"东财评级\",\n            \"机构\",\n            \"近一月个股研报数\",\n            predict_this_year_eps_title,\n            predict_this_year_pe_title,\n            predict_next_year_eps_title,\n            predict_next_year_pe_title,\n            predict_next_two_year_eps_title,\n            predict_next_two_year_pe_title,\n            \"行业\",\n            \"日期\",\n            \"报告PDF链接\",\n        ]\n    ]\n    big_df[\"日期\"] = pd.to_datetime(big_df[\"日期\"], errors=\"coerce\").dt.date\n    big_df[\"近一月个股研报数\"] = pd.to_numeric(\n        big_df[\"近一月个股研报数\"], errors=\"coerce\"\n    )\n    big_df[predict_this_year_eps_title] = pd.to_numeric(\n        big_df[predict_this_year_eps_title], errors=\"coerce\"\n    )\n    big_df[predict_this_year_pe_title] = pd.to_numeric(\n        big_df[predict_this_year_pe_title], errors=\"coerce\"\n    )\n    big_df[predict_next_year_eps_title] = pd.to_numeric(\n        big_df[predict_next_year_eps_title], errors=\"coerce\"\n    )\n    big_df[predict_next_year_pe_title] = pd.to_numeric(\n        big_df[predict_next_year_pe_title], errors=\"coerce\"\n    )\n    big_df[predict_next_two_year_eps_title] = pd.to_numeric(\n        big_df[predict_next_two_year_eps_title], errors=\"coerce\"\n    )\n    big_df[predict_next_two_year_pe_title] = pd.to_numeric(\n        big_df[predict_next_two_year_pe_title], errors=\"coerce\"\n    )\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_research_report_em_df = stock_research_report_em(symbol=\"000001\")\n    print(stock_research_report_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_sns_sseinfo.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/5/21 19:20\nDesc: 上证e互动-提问与回答\nhttps://sns.sseinfo.com/\n\"\"\"\n\nimport warnings\nfrom functools import lru_cache\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\n@lru_cache()\ndef _fetch_stock_uid() -> dict:\n    \"\"\"\n    上证e互动-代码ID映射\n    https://sns.sseinfo.com/list/company.do\n    :return: 代码ID映射\n    :rtype: str\n    \"\"\"\n    url = \"https://sns.sseinfo.com/allcompany.do\"\n    data = {\n        \"code\": \"0\",\n        \"order\": \"2\",\n        \"areaId\": \"0\",\n        \"page\": \"1\",\n    }\n    uid_list = list()\n    code_list = list()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, 73), leave=False):\n        data.update({\"page\": page})\n        r = requests.post(url, data=data)\n        data_json = r.json()\n        soup = BeautifulSoup(data_json[\"content\"], features=\"lxml\")\n        soup.find_all(name=\"a\", attrs={\"rel\": \"tag\"})\n        uid_list.extend(\n            [item[\"uid\"] for item in soup.find_all(name=\"a\", attrs={\"rel\": \"tag\"})]\n        )\n        code_list.extend(\n            [\n                item.find(\"img\")[\"src\"].split(\"?\")[0].split(\"/\")[-1].split(\".\")[0]\n                for item in soup.find_all(name=\"a\", attrs={\"rel\": \"tag\"})\n            ]\n        )\n    code_uid_map = dict(zip(code_list, uid_list))\n    return code_uid_map\n\n\ndef stock_sns_sseinfo(symbol: str = \"603119\") -> pd.DataFrame:\n    \"\"\"\n    上证e互动-提问与回答\n    https://sns.sseinfo.com/company.do?uid=65\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 提问与回答\n    :rtype: str\n    \"\"\"\n    code_uid_map = _fetch_stock_uid()\n    url = \"https://sns.sseinfo.com/ajax/userfeeds.do\"\n    params = {\n        \"typeCode\": \"company\",\n        \"type\": \"11\",\n        \"pageSize\": \"100\",\n        \"uid\": code_uid_map[symbol],\n        \"page\": \"1\",\n    }\n    big_df = pd.DataFrame()\n    page = 1\n    warnings.warn(\"正在下载中\")\n    while True:\n        params.update({\"page\": page})\n        r = requests.post(url, params=params)\n        if len(r.text) < 300:\n            break\n        else:\n            page += 1\n        r = requests.post(url, params=params)\n        soup = BeautifulSoup(r.text, features=\"lxml\")\n        content_list = [\n            item.get_text().strip()\n            for item in soup.find_all(name=\"div\", attrs={\"class\": \"m_feed_txt\"})\n        ]\n        date_list = [\n            item.get_text().strip().split(\"\\n\")[0]\n            for item in soup.find_all(name=\"div\", attrs={\"class\": \"m_feed_from\"})\n        ]\n        source_list = [\n            item.get_text().strip().split(\"\\n\")[2]\n            for item in soup.find_all(name=\"div\", attrs={\"class\": \"m_feed_from\"})\n        ]\n        q_list = [\n            item.split(\")\")[1]\n            for index, item in enumerate(content_list)\n            if index % 2 == 0\n        ]\n        stock_name = [\n            item.split(\"(\")[0].strip(\":\")\n            for index, item in enumerate(content_list)\n            if index % 2 == 0\n        ]\n        stock_code = [\n            item.split(\"(\")[1].split(\")\")[0]\n            for index, item in enumerate(content_list)\n            if index % 2 == 0\n        ]\n        a_list = [item for index, item in enumerate(content_list) if index % 2 != 0]\n        d_q_list = [item for index, item in enumerate(date_list) if index % 2 == 0]\n        d_a_list = [item for index, item in enumerate(date_list) if index % 2 != 0]\n        s_q_list = [item for index, item in enumerate(source_list) if index % 2 == 0]\n        s_a_list = [item for index, item in enumerate(source_list) if index % 2 != 0]\n        author_name = [\n            item[\"title\"] for item in soup.find_all(name=\"a\", attrs={\"rel\": \"face\"})\n        ]\n        temp_df = pd.DataFrame(\n            [\n                stock_code,\n                stock_name,\n                q_list,\n                a_list,\n                d_q_list,\n                d_a_list,\n                s_q_list,\n                s_a_list,\n                author_name,\n            ]\n        ).T\n        temp_df.columns = [\n            \"股票代码\",\n            \"公司简称\",\n            \"问题\",\n            \"回答\",\n            \"问题时间\",\n            \"回答时间\",\n            \"问题来源\",\n            \"回答来源\",\n            \"用户名\",\n        ]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_sns_sseinfo_df = stock_sns_sseinfo(symbol=\"603119\")\n    print(stock_sns_sseinfo_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_sy_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/9/15 15:30\nDesc: 东方财富网-数据中心-特色数据-商誉\n东方财富网-数据中心-特色数据-商誉-A股商誉市场概况: https://data.eastmoney.com/sy/scgk.html\n东方财富网-数据中心-特色数据-商誉-商誉减值预期明细: https://data.eastmoney.com/sy/yqlist.html\n东方财富网-数据中心-特色数据-商誉-个股商誉减值明细: https://data.eastmoney.com/sy/jzlist.html\n东方财富网-数据中心-特色数据-商誉-个股商誉明细: https://data.eastmoney.com/sy/list.html\n东方财富网-数据中心-特色数据-商誉-行业商誉: https://data.eastmoney.com/sy/hylist.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_sy_profile_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-商誉-A股商誉市场概况\n    https://data.eastmoney.com/sy/scgk.html\n    :return: A股商誉市场概况\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REPORT_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_GOODWILL_MARKETSTATISTICS\",\n        \"token\": \"894050c76af8597a853f5b408b759f5d\",\n        \"columns\": \"ALL\",\n        \"filter\": \"\"\"((GOODWILL_STATE=\"1\")( | IMPAIRMENT_STATE=\"1\"))(TRADE_BOARD=\"all\")\"\"\",\n    }\n\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    data_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    data_df.columns = [\n        \"_\",\n        \"报告期\",\n        \"商誉\",\n        \"商誉减值\",\n        \"净资产\",\n        \"商誉占净资产比例\",\n        \"商誉减值占净资产比例\",\n        \"净利润规模\",\n        \"商誉减值占净利润比例\",\n        \"_\",\n        \"_\",\n    ]\n    data_df = data_df[\n        [\n            \"报告期\",\n            \"商誉\",\n            \"商誉减值\",\n            \"净资产\",\n            \"商誉占净资产比例\",\n            \"商誉减值占净资产比例\",\n            \"净利润规模\",\n            \"商誉减值占净利润比例\",\n        ]\n    ]\n    data_df[\"报告期\"] = pd.to_datetime(data_df[\"报告期\"], errors=\"coerce\").dt.date\n    data_df[\"商誉\"] = pd.to_numeric(data_df[\"商誉\"], errors=\"coerce\")\n    data_df[\"商誉减值\"] = pd.to_numeric(data_df[\"商誉减值\"], errors=\"coerce\")\n    data_df[\"净资产\"] = pd.to_numeric(data_df[\"净资产\"], errors=\"coerce\")\n    data_df[\"商誉占净资产比例\"] = pd.to_numeric(\n        data_df[\"商誉占净资产比例\"], errors=\"coerce\"\n    )\n    data_df[\"商誉减值占净资产比例\"] = pd.to_numeric(\n        data_df[\"商誉减值占净资产比例\"], errors=\"coerce\"\n    )\n    data_df[\"净利润规模\"] = pd.to_numeric(data_df[\"净利润规模\"], errors=\"coerce\")\n    data_df[\"商誉减值占净利润比例\"] = pd.to_numeric(\n        data_df[\"商誉减值占净利润比例\"], errors=\"coerce\"\n    )\n    data_df.sort_values([\"报告期\"], inplace=True, ignore_index=True)\n    return data_df\n\n\ndef stock_sy_yq_em(date: str = \"20240630\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-商誉-商誉减值预期明细\n    https://data.eastmoney.com/sy/yqlist.html\n    :param date: 参考网站指定的数据日期\n    :type date: str\n    :return: 商誉减值预期明细\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"NOTICE_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"columns\": \"ALL\",\n        \"token\": \"894050c76af8597a853f5b408b759f5d\",\n        \"reportName\": \"RPT_GOODWILL_STOCKPREDICT\",\n        \"filter\": f\"\"\"(REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    big_df = pd.DataFrame()\n    total_page = int(data_json[\"result\"][\"pages\"])\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df[\"index\"] + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"SECUCODE\": \"-\",\n            \"SECURITY_CODE\": \"股票代码\",\n            \"ORG_CODE\": \"-\",\n            \"SECURITY_NAME_ABBR\": \"股票简称\",\n            \"TRADE_MARKET\": \"交易市场\",\n            \"INDUSTRY_NAME\": \"-\",\n            \"INDUSTRY_CODE\": \"-\",\n            \"NOTICE_DATE\": \"公告日期\",\n            \"REPORT_DATE\": \"数据日期\",\n            \"PE_REPORT_DATE\": \"-\",\n            \"PREDICT_NETPROFIT_LOWER\": \"预计净利润-下限\",\n            \"PREDICT_NETPROFIT_UPPER\": \"预计净利润-上限\",\n            \"PERFORM_CHANGE_UPPER\": \"业绩变动幅度-上限\",\n            \"PERFORM_CHANGE_LOWER\": \"业绩变动幅度-下限\",\n            \"PERFORM_CHANGE\": \"-\",\n            \"PERFORM_CHANGE_EXPLAIN\": \"业绩变动原因\",\n            \"PREDICT_TYPE\": \"-\",\n            \"PREDICT_INDICATOR_CODE\": \"-\",\n            \"PREDICT_PERIOD\": \"-\",\n            \"PE_SAMEREPORT_NETPROFIT\": \"上年度同期净利润\",\n            \"NETPROFIT\": \"-\",\n            \"PE_GOODWILL\": \"上年商誉\",\n            \"NEWEST_REPORT_DATE\": \"最新商誉报告期\",\n            \"NEWEST_GOODWILL\": \"最新一期商誉\",\n            \"PE_SAMEREPORT_DATE\": \"-\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"业绩变动原因\",\n            \"最新商誉报告期\",\n            \"最新一期商誉\",\n            \"上年商誉\",\n            \"预计净利润-下限\",\n            \"预计净利润-上限\",\n            \"业绩变动幅度-下限\",\n            \"业绩变动幅度-上限\",\n            \"上年度同期净利润\",\n            \"公告日期\",\n            \"交易市场\",\n        ]\n    ]\n    big_df[\"交易市场\"] = big_df[\"交易市场\"].map(\n        {\"shzb\": \"沪市主板\", \"kcb\": \"科创板\", \"szzb\": \"深市主板\", \"cyb\": \"创业板\"}\n    )\n    big_df[\"最新商誉报告期\"] = pd.to_datetime(\n        big_df[\"最新商誉报告期\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    big_df[\"最新一期商誉\"] = pd.to_numeric(big_df[\"最新一期商誉\"], errors=\"coerce\")\n    big_df[\"上年商誉\"] = pd.to_numeric(big_df[\"上年商誉\"], errors=\"coerce\")\n    big_df[\"预计净利润-下限\"] = pd.to_numeric(\n        big_df[\"预计净利润-下限\"], errors=\"coerce\"\n    )\n    big_df[\"预计净利润-上限\"] = pd.to_numeric(\n        big_df[\"预计净利润-上限\"], errors=\"coerce\"\n    )\n    big_df[\"业绩变动幅度-下限\"] = pd.to_numeric(\n        big_df[\"业绩变动幅度-下限\"], errors=\"coerce\"\n    )\n    big_df[\"业绩变动幅度-上限\"] = pd.to_numeric(\n        big_df[\"业绩变动幅度-上限\"], errors=\"coerce\"\n    )\n    big_df[\"上年度同期净利润\"] = pd.to_numeric(\n        big_df[\"上年度同期净利润\"], errors=\"coerce\"\n    )\n    return big_df\n\n\ndef stock_sy_jz_em(date: str = \"20240630\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-商誉-个股商誉减值明细\n    https://data.eastmoney.com/sy/jzlist.html\n    :param date: 参考网站指定的数据日期\n    :type date: str\n    :return: 个股商誉减值明细\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"GOODWILL_CHANGE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"columns\": \"ALL\",\n        \"token\": \"894050c76af8597a853f5b408b759f5d\",\n        \"reportName\": \"RPT_GOODWILL_STOCKDETAILS\",\n        \"filter\": f\"\"\"(REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    big_df = pd.DataFrame()\n    total_page = int(data_json[\"result\"][\"pages\"])\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df[\"index\"] + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"SECUCODE\": \"-\",\n            \"SECURITY_CODE\": \"股票代码\",\n            \"SECURITY_NAME_ABBR\": \"股票简称\",\n            \"ORG_CODE\": \"-\",\n            \"LISTING_DATE\": \"-\",\n            \"LISTING_STATE\": \"-\",\n            \"TRADE_BOARD\": \"交易市场\",\n            \"GOODWILL\": \"商誉\",\n            \"DATE_TYPE\": \"-\",\n            \"REPORT_TYPE_CODE\": \"-\",\n            \"DATA_ADJUST_TYPE\": \"-\",\n            \"NOTICE_DATE\": \"公告日期\",\n            \"REPORT_DATE\": \"数据日期\",\n            \"GOODWILL_PRE\": \"-\",\n            \"GOODWILL_CHANGE\": \"商誉减值\",\n            \"SUMSHEQUITY\": \"-\",\n            \"SUMSHEQUITY_RATIO\": \"商誉占净资产比例\",\n            \"SE_CHANGE_RATIO\": \"商誉减值占净资产比例\",\n            \"PARENTNETPROFIT\": \"净利润\",\n            \"PNP_CHANGE_RATIO\": \"商誉减值占净利润比例\",\n            \"PNP_YOY_RATIO\": \"-\",\n            \"INDUSTRY_CFT\": \"-\",\n            \"INDUSTRY_CFTCODE\": \"-\",\n            \"IS_SHOW\": \"-\",\n            \"MAXREPORTDATE\": \"-\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"商誉\",\n            \"商誉减值\",\n            \"商誉占净资产比例\",\n            \"商誉减值占净资产比例\",\n            \"净利润\",\n            \"商誉减值占净利润比例\",\n            \"公告日期\",\n            \"交易市场\",\n        ]\n    ]\n    big_df[\"交易市场\"] = big_df[\"交易市场\"].map(\n        {\"shzb\": \"沪市主板\", \"kcb\": \"科创板\", \"szzb\": \"深市主板\", \"cyb\": \"创业板\"}\n    )\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    big_df[\"商誉\"] = pd.to_numeric(big_df[\"商誉\"], errors=\"coerce\")\n    big_df[\"商誉减值\"] = pd.to_numeric(big_df[\"商誉减值\"], errors=\"coerce\")\n    big_df[\"商誉占净资产比例\"] = pd.to_numeric(\n        big_df[\"商誉占净资产比例\"], errors=\"coerce\"\n    )\n    big_df[\"商誉减值占净资产比例\"] = pd.to_numeric(\n        big_df[\"商誉减值占净资产比例\"], errors=\"coerce\"\n    )\n    big_df[\"净利润\"] = pd.to_numeric(big_df[\"净利润\"], errors=\"coerce\")\n    big_df[\"商誉减值占净利润比例\"] = pd.to_numeric(\n        big_df[\"商誉减值占净利润比例\"], errors=\"coerce\"\n    )\n    big_df[\"商誉减值占净利润比例\"] = pd.to_numeric(\n        big_df[\"商誉减值占净利润比例\"], errors=\"coerce\"\n    )\n    return big_df\n\n\ndef stock_sy_em(date: str = \"20231231\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-商誉-个股商誉明细\n    https://data.eastmoney.com/sy/list.html\n    :param date: 参考网站指定的数据日期\n    :type date: str\n    :return: 个股商誉明细\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"NOTICE_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"columns\": \"ALL\",\n        \"token\": \"894050c76af8597a853f5b408b759f5d\",\n        \"reportName\": \"RPT_GOODWILL_STOCKDETAILS\",\n        \"filter\": f\"\"\"(REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    big_df = pd.DataFrame()\n    total_page = int(data_json[\"result\"][\"pages\"])\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df[\"index\"] + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"SECUCODE\": \"-\",\n            \"SECURITY_CODE\": \"股票代码\",\n            \"SECURITY_NAME_ABBR\": \"股票简称\",\n            \"ORG_CODE\": \"-\",\n            \"LISTING_DATE\": \"-\",\n            \"LISTING_STATE\": \"-\",\n            \"TRADE_BOARD\": \"交易市场\",\n            \"GOODWILL\": \"商誉\",\n            \"DATE_TYPE\": \"-\",\n            \"REPORT_TYPE_CODE\": \"-\",\n            \"DATA_ADJUST_TYPE\": \"-\",\n            \"NOTICE_DATE\": \"公告日期\",\n            \"REPORT_DATE\": \"数据日期\",\n            \"GOODWILL_PRE\": \"上年商誉\",\n            \"GOODWILL_CHANGE\": \"商誉减值\",\n            \"SUMSHEQUITY\": \"-\",\n            \"SUMSHEQUITY_RATIO\": \"商誉占净资产比例\",\n            \"SE_CHANGE_RATIO\": \"商誉减值占净资产比例\",\n            \"PARENTNETPROFIT\": \"净利润\",\n            \"PNP_CHANGE_RATIO\": \"商誉减值占净利润比例\",\n            \"PNP_YOY_RATIO\": \"净利润同比\",\n            \"INDUSTRY_CFT\": \"-\",\n            \"INDUSTRY_CFTCODE\": \"-\",\n            \"IS_SHOW\": \"-\",\n            \"MAXREPORTDATE\": \"-\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"商誉\",\n            \"商誉占净资产比例\",\n            \"净利润\",\n            \"净利润同比\",\n            \"上年商誉\",\n            \"公告日期\",\n            \"交易市场\",\n        ]\n    ]\n    big_df[\"交易市场\"] = big_df[\"交易市场\"].map(\n        {\"shzb\": \"沪市主板\", \"kcb\": \"科创板\", \"szzb\": \"深市主板\", \"cyb\": \"创业板\"}\n    )\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    big_df[\"商誉\"] = pd.to_numeric(big_df[\"商誉\"], errors=\"coerce\")\n    big_df[\"商誉占净资产比例\"] = pd.to_numeric(\n        big_df[\"商誉占净资产比例\"], errors=\"coerce\"\n    )\n    big_df[\"净利润\"] = pd.to_numeric(big_df[\"净利润\"], errors=\"coerce\")\n    big_df[\"净利润同比\"] = pd.to_numeric(big_df[\"净利润同比\"], errors=\"coerce\")\n    big_df[\"上年商誉\"] = pd.to_numeric(big_df[\"上年商誉\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_sy_hy_em(date: str = \"20240930\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-商誉-行业商誉\n    https://data.eastmoney.com/sy/hylist.html\n    :param date: 参考网站指定的数据日期\n    :type date: str\n    :return: 个股商誉明细\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"SUMSHEQUITY_RATIO\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"columns\": \"ALL\",\n        \"token\": \"894050c76af8597a853f5b408b759f5d\",\n        \"reportName\": \"RPT_GOODWILL_INDUSTATISTICS\",\n        \"filter\": f\"\"\"(REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    big_df = pd.DataFrame()\n    total_page = int(data_json[\"result\"][\"pages\"])\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True, drop=True)\n    big_df.rename(\n        columns={\n            \"REPORT_DATE\": \"数据日期\",\n            \"INDUSTRY_NAME\": \"行业名称\",\n            \"INDUSTRY_CODE\": \"-\",\n            \"ORG_NUM\": \"公司家数\",\n            \"GOODWILL\": \"商誉规模\",\n            \"GOODWILL_CHANGE\": \"-\",\n            \"SUMSHEQUITY\": \"净资产\",\n            \"SUMSHEQUITY_RATIO\": \"商誉规模占净资产规模比例\",\n            \"SE_CHANGE_RATIO\": \"-\",\n            \"PARENTNETPROFIT\": \"净利润规模\",\n            \"PNP_CHANGE_RATIO\": \"-\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"行业名称\",\n            \"公司家数\",\n            \"商誉规模\",\n            \"净资产\",\n            \"商誉规模占净资产规模比例\",\n            \"净利润规模\",\n        ]\n    ]\n    big_df[\"公司家数\"] = pd.to_numeric(big_df[\"公司家数\"], errors=\"coerce\")\n    big_df[\"商誉规模\"] = pd.to_numeric(big_df[\"商誉规模\"], errors=\"coerce\")\n    big_df[\"净资产\"] = pd.to_numeric(big_df[\"净资产\"], errors=\"coerce\")\n    big_df[\"商誉规模占净资产规模比例\"] = pd.to_numeric(\n        big_df[\"商誉规模占净资产规模比例\"], errors=\"coerce\"\n    )\n    big_df[\"净利润规模\"] = pd.to_numeric(big_df[\"净利润规模\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_sy_profile_em_df = stock_sy_profile_em()\n    print(stock_sy_profile_em_df)\n\n    stock_sy_yq_em_df = stock_sy_yq_em(date=\"20240630\")\n    print(stock_sy_yq_em_df)\n\n    stock_sy_jz_em_df = stock_sy_jz_em(date=\"20240630\")\n    print(stock_sy_jz_em_df)\n\n    stock_sy_em_df = stock_sy_em(date=\"20240630\")\n    print(stock_sy_em_df)\n\n    stock_sy_hy_em_df = stock_sy_hy_em(date=\"20240930\")\n    print(stock_sy_hy_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_technology_ths.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/9/21 19:00\nDesc: 同花顺-数据中心-技术选股\nhttps://data.10jqka.com.cn/rank/cxg/\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport py_mini_racer\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.datasets import get_ths_js\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef _get_file_content_ths(file: str = \"ths.js\") -> str:\n    \"\"\"\n    获取 JS 文件的内容\n    :param file:  JS 文件名\n    :type file: str\n    :return: 文件内容\n    :rtype: str\n    \"\"\"\n    setting_file_path = get_ths_js(file)\n    with open(setting_file_path, encoding=\"utf-8\") as f:\n        file_data = f.read()\n    return file_data\n\n\ndef stock_rank_cxg_ths(symbol: str = \"创月新高\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-技术选股-创新高\n    https://data.10jqka.com.cn/rank/cxg/\n    :param symbol: choice of {\"创月新高\", \"半年新高\", \"一年新高\", \"历史新高\"}\n    :type symbol: str\n    :return: 创新高数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"创月新高\": \"4\",\n        \"半年新高\": \"3\",\n        \"一年新高\": \"2\",\n        \"历史新高\": \"1\",\n    }\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = (\n        f\"http://data.10jqka.com.cn/rank/cxg/board/{symbol_map[symbol]}/field/\"\n        f\"stockcode/order/asc/page/1/ajax/1/free/1/\"\n    )\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    try:\n        total_page = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text.split(\n            \"/\"\n        )[1]\n    except AttributeError:\n        total_page = 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(total_page) + 1), leave=False):\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n            \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n            \"Cookie\": f\"v={v_code}\",\n        }\n        url = (\n            f\"http://data.10jqka.com.cn/rank/cxg/board/{symbol_map[symbol]}/field/stockcode/\"\n            f\"order/asc/page/{page}/ajax/1/free/1/\"\n        )\n        r = requests.get(url, headers=headers)\n        temp_df = pd.read_html(StringIO(r.text))[0].iloc[:, :-1]  # 20260214 新增\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"涨跌幅\",\n        \"换手率\",\n        \"最新价\",\n        \"前期高点\",\n        \"前期高点日期\",\n    ]\n    big_df[\"股票代码\"] = big_df[\"股票代码\"].astype(str).str.zfill(6)\n    big_df[\"涨跌幅\"] = big_df[\"涨跌幅\"].str.strip(\"%\")\n    big_df[\"换手率\"] = big_df[\"换手率\"].str.strip(\"%\")\n    big_df[\"前期高点日期\"] = pd.to_datetime(\n        big_df[\"前期高点日期\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"换手率\"] = pd.to_numeric(big_df[\"换手率\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"前期高点\"] = pd.to_numeric(big_df[\"前期高点\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_rank_cxd_ths(symbol: str = \"创月新低\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-技术选股-创新低\n    https://data.10jqka.com.cn/rank/cxd/\n    :param symbol: choice of {\"创月新低\", \"半年新低\", \"一年新低\", \"历史新低\"}\n    :type symbol: str\n    :return: 创新低数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"创月新低\": \"4\",\n        \"半年新低\": \"3\",\n        \"一年新低\": \"2\",\n        \"历史新低\": \"1\",\n    }\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = (\n        f\"http://data.10jqka.com.cn/rank/cxd/board/{symbol_map[symbol]}/field/\"\n        f\"stockcode/order/asc/page/1/ajax/1/free/1/\"\n    )\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    try:\n        total_page = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text.split(\n            \"/\"\n        )[1]\n    except AttributeError:\n        total_page = 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(total_page) + 1), leave=False):\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n            \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n            \"Cookie\": f\"v={v_code}\",\n        }\n        url = (\n            f\"http://data.10jqka.com.cn/rank/cxd/board/{symbol_map[symbol]}/field/\"\n            f\"stockcode/order/asc/page/{page}/ajax/1/free/1/\"\n        )\n        r = requests.get(url, headers=headers)\n        temp_df = pd.read_html(StringIO(r.text))[0].iloc[:, :-1]  # 20260214 新增\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"涨跌幅\",\n        \"换手率\",\n        \"最新价\",\n        \"前期低点\",\n        \"前期低点日期\",\n    ]\n    big_df[\"股票代码\"] = big_df[\"股票代码\"].astype(str).str.zfill(6)\n    big_df[\"涨跌幅\"] = big_df[\"涨跌幅\"].str.strip(\"%\")\n    big_df[\"换手率\"] = big_df[\"换手率\"].str.strip(\"%\")\n    big_df[\"前期低点日期\"] = pd.to_datetime(\n        big_df[\"前期低点日期\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"换手率\"] = pd.to_numeric(big_df[\"换手率\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"前期低点\"] = pd.to_numeric(big_df[\"前期低点\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_rank_lxsz_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-技术选股-连续上涨\n    https://data.10jqka.com.cn/rank/lxsz/\n    :return: 连续上涨\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = \"http://data.10jqka.com.cn/rank/lxsz/field/lxts/order/desc/page/1/ajax/1/free/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    try:\n        total_page = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text.split(\n            \"/\"\n        )[1]\n    except AttributeError:\n        total_page = 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(total_page) + 1), leave=False):\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n            \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n            \"Cookie\": f\"v={v_code}\",\n        }\n        url = f\"http://data.10jqka.com.cn/rank/lxsz/field/lxts/order/desc/page/{page}/ajax/1/free/1/\"\n        r = requests.get(url, headers=headers)\n        temp_df = pd.read_html(StringIO(r.text), converters={\"股票代码\": str})[0]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"收盘价\",\n        \"最高价\",\n        \"最低价\",\n        \"连涨天数\",\n        \"连续涨跌幅\",\n        \"累计换手率\",\n        \"所属行业\",\n    ]\n    big_df[\"连续涨跌幅\"] = big_df[\"连续涨跌幅\"].str.strip(\"%\")\n    big_df[\"累计换手率\"] = big_df[\"累计换手率\"].str.strip(\"%\")\n    big_df[\"连续涨跌幅\"] = pd.to_numeric(big_df[\"连续涨跌幅\"], errors=\"coerce\")\n    big_df[\"累计换手率\"] = pd.to_numeric(big_df[\"累计换手率\"], errors=\"coerce\")\n    big_df[\"收盘价\"] = pd.to_numeric(big_df[\"收盘价\"], errors=\"coerce\")\n    big_df[\"最高价\"] = pd.to_numeric(big_df[\"最高价\"], errors=\"coerce\")\n    big_df[\"最低价\"] = pd.to_numeric(big_df[\"最低价\"], errors=\"coerce\")\n    big_df[\"连涨天数\"] = pd.to_numeric(big_df[\"连涨天数\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_rank_lxxd_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-技术选股-连续下跌\n    https://data.10jqka.com.cn/rank/lxxd/\n    :return: 连续下跌\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = \"http://data.10jqka.com.cn/rank/lxxd/field/lxts/order/desc/page/1/ajax/1/free/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    try:\n        total_page = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text.split(\n            \"/\"\n        )[1]\n    except AttributeError:\n        total_page = 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(total_page) + 1), leave=False):\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n            \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n            \"Cookie\": f\"v={v_code}\",\n        }\n        url = f\"http://data.10jqka.com.cn/rank/lxxd/field/lxts/order/desc/page/{page}/ajax/1/free/1/\"\n        r = requests.get(url, headers=headers)\n        temp_df = pd.read_html(StringIO(r.text), converters={\"股票代码\": str})[0]\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"收盘价\",\n        \"最高价\",\n        \"最低价\",\n        \"连涨天数\",\n        \"连续涨跌幅\",\n        \"累计换手率\",\n        \"所属行业\",\n    ]\n    big_df[\"连续涨跌幅\"] = big_df[\"连续涨跌幅\"].str.strip(\"%\")\n    big_df[\"累计换手率\"] = big_df[\"累计换手率\"].str.strip(\"%\")\n    big_df[\"连续涨跌幅\"] = pd.to_numeric(big_df[\"连续涨跌幅\"], errors=\"coerce\")\n    big_df[\"累计换手率\"] = pd.to_numeric(big_df[\"累计换手率\"], errors=\"coerce\")\n    big_df[\"收盘价\"] = pd.to_numeric(big_df[\"收盘价\"], errors=\"coerce\")\n    big_df[\"最高价\"] = pd.to_numeric(big_df[\"最高价\"], errors=\"coerce\")\n    big_df[\"最低价\"] = pd.to_numeric(big_df[\"最低价\"], errors=\"coerce\")\n    big_df[\"连涨天数\"] = pd.to_numeric(big_df[\"连涨天数\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_rank_cxfl_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-技术选股-持续放量\n    https://data.10jqka.com.cn/rank/cxfl/\n    :return: 持续放量\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = \"http://data.10jqka.com.cn/rank/cxfl/field/count/order/desc/ajax/1/free/1/page/1/free/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    try:\n        total_page = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text.split(\n            \"/\"\n        )[1]\n    except AttributeError:\n        total_page = 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(total_page) + 1), leave=False):\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n            \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n            \"Cookie\": f\"v={v_code}\",\n        }\n        url = f\"http://data.10jqka.com.cn/rank/cxfl/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/\"\n        r = requests.get(url, headers=headers)\n        soup = BeautifulSoup(r.text, 'html.parser')\n        table = soup.find('table', class_='m-table J-ajax-table')\n        if not table:\n            print(\"未找到表格\")\n            exit()\n\n        rows = table.find('tbody').find_all('tr')\n        data = []\n\n        for row in rows:\n            cols = row.find_all('td')\n            if len(cols) >= 10:  # 确保是数据行\n                item = {\n                    '序号': cols[0].text.strip(),\n                    '股票代码': cols[1].find('a').text.strip() if cols[1].find('a') else cols[1].text.strip(),\n                    '股票简称': cols[2].find('a').text.strip() if cols[2].find('a') else cols[2].text.strip(),\n                    '涨跌幅': cols[3].text.strip(),\n                    '最新价': cols[4].text.strip(),\n                    '成交量': cols[5].text.strip(),\n                    '基准日成交量': cols[6].text.strip(),\n                    '放量天数': cols[7].text.strip(),\n                    '阶段涨跌幅': cols[8].text.strip(),\n                    '所属行业': cols[9].find('a').text.strip() if cols[9].find('a') else cols[9].text.strip()\n                }\n                data.append(item)\n\n        temp_df = pd.DataFrame(data)\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"涨跌幅\",\n        \"最新价\",\n        \"成交量\",\n        \"基准日成交量\",\n        \"放量天数\",\n        \"阶段涨跌幅\",\n        \"所属行业\",\n    ]\n    big_df[\"股票代码\"] = big_df[\"股票代码\"].astype(str).str.zfill(6)\n    big_df[\"涨跌幅\"] = big_df[\"涨跌幅\"].astype(str).str.strip(\"%\")\n    big_df[\"阶段涨跌幅\"] = big_df[\"阶段涨跌幅\"].astype(str).str.strip(\"%\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"阶段涨跌幅\"] = pd.to_numeric(big_df[\"阶段涨跌幅\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"放量天数\"] = pd.to_numeric(big_df[\"放量天数\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_rank_cxsl_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-技术选股-持续缩量\n    https://data.10jqka.com.cn/rank/cxsl/\n    :return: 持续缩量\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = \"http://data.10jqka.com.cn/rank/cxsl/field/count/order/desc/ajax/1/free/1/page/1/free/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    try:\n        total_page = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text.split(\n            \"/\"\n        )[1]\n    except AttributeError:\n        total_page = 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(total_page) + 1), leave=False):\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n            \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n            \"Cookie\": f\"v={v_code}\",\n        }\n        url = f\"http://data.10jqka.com.cn/rank/cxsl/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/\"\n        r = requests.get(url, headers=headers)\n        soup = BeautifulSoup(r.text, 'html.parser')\n        table = soup.find('table', class_='m-table J-ajax-table')\n        if not table:\n            print(\"未找到表格\")\n            exit()\n\n        rows = table.find('tbody').find_all('tr')\n        data = []\n\n        for row in rows:\n            cols = row.find_all('td')\n            if len(cols) >= 10:  # 确保是数据行\n                item = {\n                    '序号': cols[0].text.strip(),\n                    '股票代码': cols[1].find('a').text.strip() if cols[1].find('a') else cols[1].text.strip(),\n                    '股票简称': cols[2].find('a').text.strip() if cols[2].find('a') else cols[2].text.strip(),\n                    '涨跌幅': cols[3].text.strip(),\n                    '最新价': cols[4].text.strip(),\n                    '成交量': cols[5].text.strip(),\n                    '基准日成交量': cols[6].text.strip(),\n                    '放量天数': cols[7].text.strip(),\n                    '阶段涨跌幅': cols[8].text.strip(),\n                    '所属行业': cols[9].find('a').text.strip() if cols[9].find('a') else cols[9].text.strip()\n                }\n                data.append(item)\n\n        temp_df = pd.DataFrame(data)\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"涨跌幅\",\n        \"最新价\",\n        \"成交量\",\n        \"基准日成交量\",\n        \"缩量天数\",\n        \"阶段涨跌幅\",\n        \"所属行业\",\n    ]\n    big_df[\"股票代码\"] = big_df[\"股票代码\"].astype(str).str.zfill(6)\n    big_df[\"涨跌幅\"] = big_df[\"涨跌幅\"].astype(str).str.strip(\"%\")\n    big_df[\"阶段涨跌幅\"] = big_df[\"阶段涨跌幅\"].astype(str).str.strip(\"%\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"阶段涨跌幅\"] = pd.to_numeric(big_df[\"阶段涨跌幅\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"缩量天数\"] = pd.to_numeric(big_df[\"缩量天数\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_rank_xstp_ths(symbol: str = \"500日均线\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-技术选股-向上突破\n    https://data.10jqka.com.cn/rank/xstp/\n    :param symbol: choice of {\"5日均线\", \"10日均线\", \"20日均线\", \"30日均线\", \"60日均线\", \"90日均线\", \"250日均线\", \"500日均线\"}\n    :type symbol: str\n    :return: 向上突破\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"5日均线\": 5,\n        \"10日均线\": 10,\n        \"20日均线\": 20,\n        \"30日均线\": 30,\n        \"60日均线\": 60,\n        \"90日均线\": 90,\n        \"250日均线\": 250,\n        \"500日均线\": 500,\n    }\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = f\"http://data.10jqka.com.cn/rank/xstp/board/{symbol_map[symbol]}/order/asc/ajax/1/free/1/page/1/free/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    try:\n        total_page = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text.split(\n            \"/\"\n        )[1]\n    except AttributeError:\n        total_page = 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(total_page) + 1), leave=False):\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n            \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n            \"Cookie\": f\"v={v_code}\",\n        }\n        url = (\n            f\"http://data.10jqka.com.cn/rank/xstp/board/{symbol_map[symbol]}/order/\"\n            f\"asc/ajax/1/free/1/page/{page}/free/1/\"\n        )\n        r = requests.get(url, headers=headers)\n        pd.read_html(StringIO(r.text))\n        soup = BeautifulSoup(r.text, 'html.parser')\n        table = soup.find('table', class_='m-table J-ajax-table')\n        if not table:\n            print(\"未找到表格\")\n            exit()\n\n        rows = table.find('tbody').find_all('tr')\n        data = []\n\n        for row in rows:\n            cols = row.find_all('td')\n            if len(cols) >= 8:  # 确保是数据行\n                item = {\n                    '序号': cols[0].text.strip(),\n                    '股票代码': cols[1].find('a').text.strip() if cols[1].find('a') else cols[1].text.strip(),\n                    '股票简称': cols[2].find('a').text.strip() if cols[2].find('a') else cols[2].text.strip(),\n                    '最新价': cols[3].text.strip(),\n                    '成交额': cols[4].text.strip(),\n                    '成交量': cols[5].text.strip(),\n                    '涨跌幅': cols[6].text.strip(),\n                    '换手率': cols[7].text.strip(),\n                }\n                data.append(item)\n\n        temp_df = pd.DataFrame(data)\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"最新价\",\n        \"成交额\",\n        \"成交量\",\n        \"涨跌幅\",\n        \"换手率\",\n    ]\n    big_df[\"股票代码\"] = big_df[\"股票代码\"].astype(str).str.zfill(6)\n    big_df[\"涨跌幅\"] = big_df[\"涨跌幅\"].astype(str).str.strip(\"%\")\n    big_df[\"换手率\"] = big_df[\"换手率\"].astype(str).str.strip(\"%\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"换手率\"] = pd.to_numeric(big_df[\"换手率\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_rank_xxtp_ths(symbol: str = \"500日均线\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-技术选股-向下突破\n    https://data.10jqka.com.cn/rank/xxtp/\n    :param symbol: choice of {\"5日均线\", \"10日均线\", \"20日均线\", \"30日均线\", \"60日均线\", \"90日均线\", \"250日均线\", \"500日均线\"}\n    :type symbol: str\n    :return: 向下突破\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"5日均线\": 5,\n        \"10日均线\": 10,\n        \"20日均线\": 20,\n        \"30日均线\": 30,\n        \"60日均线\": 60,\n        \"90日均线\": 90,\n        \"250日均线\": 250,\n        \"500日均线\": 500,\n    }\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = f\"http://data.10jqka.com.cn/rank/xxtp/board/{symbol_map[symbol]}/order/asc/ajax/1/free/1/page/1/free/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    try:\n        total_page = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text.split(\n            \"/\"\n        )[1]\n    except AttributeError:\n        total_page = 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(total_page) + 1), leave=False):\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n            \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n            \"Cookie\": f\"v={v_code}\",\n        }\n        url = (\n            f\"http://data.10jqka.com.cn/rank/xxtp/board/{symbol_map[symbol]}/order/\"\n            f\"asc/ajax/1/free/1/page/{page}/free/1/\"\n        )\n        r = requests.get(url, headers=headers)\n        soup = BeautifulSoup(r.text, 'html.parser')\n        table = soup.find('table', class_='m-table J-ajax-table')\n        if not table:\n            print(\"未找到表格\")\n            exit()\n\n        rows = table.find('tbody').find_all('tr')\n        data = []\n\n        for row in rows:\n            cols = row.find_all('td')\n            if len(cols) >= 8:  # 确保是数据行\n                item = {\n                    '序号': cols[0].text.strip(),\n                    '股票代码': cols[1].find('a').text.strip() if cols[1].find('a') else cols[1].text.strip(),\n                    '股票简称': cols[2].find('a').text.strip() if cols[2].find('a') else cols[2].text.strip(),\n                    '最新价': cols[3].text.strip(),\n                    '成交额': cols[4].text.strip(),\n                    '成交量': cols[5].text.strip(),\n                    '涨跌幅': cols[6].text.strip(),\n                    '换手率': cols[7].text.strip(),\n                }\n                data.append(item)\n\n        temp_df = pd.DataFrame(data)\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"最新价\",\n        \"成交额\",\n        \"成交量\",\n        \"涨跌幅\",\n        \"换手率\",\n    ]\n    big_df[\"股票代码\"] = big_df[\"股票代码\"].astype(str).str.zfill(6)\n    big_df[\"涨跌幅\"] = big_df[\"涨跌幅\"].astype(str).str.strip(\"%\")\n    big_df[\"换手率\"] = big_df[\"换手率\"].astype(str).str.strip(\"%\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"换手率\"] = pd.to_numeric(big_df[\"换手率\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_rank_ljqs_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-技术选股-量价齐升\n    http://data.10jqka.com.cn/rank/ljqs/\n    :return: 量价齐升\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = \"http://data.10jqka.com.cn/rank/ljqs/field/count/order/desc/ajax/1/free/1/page/1/free/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    try:\n        total_page = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text.split(\n            \"/\"\n        )[1]\n    except AttributeError:\n        total_page = 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(total_page) + 1), leave=False):\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n            \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n            \"Cookie\": f\"v={v_code}\",\n        }\n        url = f\"http://data.10jqka.com.cn/rank/ljqs/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/\"\n        r = requests.get(url, headers=headers)\n        soup = BeautifulSoup(r.text, 'html.parser')\n        table = soup.find('table', class_='m-table J-ajax-table')\n        if not table:\n            print(\"未找到表格\")\n            exit()\n\n        rows = table.find('tbody').find_all('tr')\n        data = []\n\n        for row in rows:\n            cols = row.find_all('td')\n            if len(cols) >= 8:  # 确保是数据行\n                item = {\n                    '序号': cols[0].text.strip(),\n                    '股票代码': cols[1].find('a').text.strip() if cols[1].find('a') else cols[1].text.strip(),\n                    '股票简称': cols[2].find('a').text.strip() if cols[2].find('a') else cols[2].text.strip(),\n                    '最新价': cols[3].text.strip(),\n                    '量价齐升天数': cols[4].text.strip(),\n                    '阶段涨幅': cols[5].text.strip(),\n                    '累计换手率': cols[6].text.strip(),\n                    '所属行业': cols[7].find('a').text.strip() if cols[7].find('a') else cols[7].text.strip()\n                }\n                data.append(item)\n\n        temp_df = pd.DataFrame(data)\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"最新价\",\n        \"量价齐升天数\",\n        \"阶段涨幅\",\n        \"累计换手率\",\n        \"所属行业\",\n    ]\n    big_df[\"股票代码\"] = big_df[\"股票代码\"].astype(str).str.zfill(6)\n    big_df[\"阶段涨幅\"] = big_df[\"阶段涨幅\"].astype(str).str.strip(\"%\")\n    big_df[\"累计换手率\"] = big_df[\"累计换手率\"].astype(str).str.strip(\"%\")\n    big_df[\"阶段涨幅\"] = pd.to_numeric(big_df[\"阶段涨幅\"], errors=\"coerce\")\n    big_df[\"累计换手率\"] = pd.to_numeric(big_df[\"累计换手率\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"量价齐升天数\"] = pd.to_numeric(big_df[\"量价齐升天数\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_rank_ljqd_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-技术选股-量价齐跌\n    http://data.10jqka.com.cn/rank/ljqd/\n    :return: 量价齐跌\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = \"http://data.10jqka.com.cn/rank/ljqd/field/count/order/desc/ajax/1/free/1/page/1/free/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    try:\n        total_page = soup.find(name=\"span\", attrs={\"class\": \"page_info\"}).text.split(\n            \"/\"\n        )[1]\n    except AttributeError:\n        total_page = 1\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(total_page) + 1), leave=False):\n        v_code = js_code.call(\"v\")\n        headers = {\n            \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n            \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n            \"Cookie\": f\"v={v_code}\",\n        }\n        url = f\"http://data.10jqka.com.cn/rank/ljqd/field/count/order/desc/ajax/1/free/1/page/{page}/free/1/\"\n        r = requests.get(url, headers=headers)\n        soup = BeautifulSoup(r.text, 'html.parser')\n        table = soup.find('table', class_='m-table J-ajax-table')\n        if not table:\n            print(\"未找到表格\")\n            exit()\n\n        rows = table.find('tbody').find_all('tr')\n        data = []\n\n        for row in rows:\n            cols = row.find_all('td')\n            if len(cols) >= 8:  # 确保是数据行\n                item = {\n                    '序号': cols[0].text.strip(),\n                    '股票代码': cols[1].find('a').text.strip() if cols[1].find('a') else cols[1].text.strip(),\n                    '股票简称': cols[2].find('a').text.strip() if cols[2].find('a') else cols[2].text.strip(),\n                    '最新价': cols[3].text.strip(),\n                    '量价齐跌天数': cols[4].text.strip(),\n                    '阶段涨幅': cols[5].text.strip(),\n                    '累计换手率': cols[6].text.strip(),\n                    '所属行业': cols[7].find('a').text.strip() if cols[7].find('a') else cols[7].text.strip()\n                }\n                data.append(item)\n\n        temp_df = pd.DataFrame(data)\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"最新价\",\n        \"量价齐跌天数\",\n        \"阶段涨幅\",\n        \"累计换手率\",\n        \"所属行业\",\n    ]\n    big_df[\"股票代码\"] = big_df[\"股票代码\"].astype(str).str.zfill(6)\n    big_df[\"阶段涨幅\"] = big_df[\"阶段涨幅\"].astype(str).str.strip(\"%\")\n    big_df[\"累计换手率\"] = big_df[\"累计换手率\"].astype(str).str.strip(\"%\")\n    big_df[\"阶段涨幅\"] = pd.to_numeric(big_df[\"阶段涨幅\"], errors=\"coerce\")\n    big_df[\"累计换手率\"] = pd.to_numeric(big_df[\"累计换手率\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"量价齐跌天数\"] = pd.to_numeric(big_df[\"量价齐跌天数\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_rank_xzjp_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-技术选股-险资举牌\n    https://data.10jqka.com.cn/financial/xzjp/\n    :return: 险资举牌\n    :rtype: pandas.DataFrame\n    \"\"\"\n    js_code = py_mini_racer.MiniRacer()\n    js_content = _get_file_content_ths(\"ths.js\")\n    js_code.eval(js_content)\n    big_df = pd.DataFrame()\n    v_code = js_code.call(\"v\")\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 \"\n        \"(KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36\",\n        \"Cookie\": f\"v={v_code}\",\n    }\n    url = \"http://data.10jqka.com.cn/ajax/xzjp/field/DECLAREDATE/order/desc/ajax/1/free/1/\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, 'html.parser')\n    table = soup.find('table', class_='m-table J-ajax-table')\n    if not table:\n        print(\"未找到表格\")\n        exit()\n\n    rows = table.find('tbody').find_all('tr')\n    data = []\n\n    for row in rows:\n        cols = row.find_all('td')\n        if len(cols) >= 8:  # 确保是数据行\n            item = {\n                '序号': cols[0].text.strip(),\n                '举牌公告日': cols[1].find('a').text.strip() if cols[1].find('a') else cols[1].text.strip(),\n                '股票代码': cols[2].find('a').text.strip() if cols[2].find('a') else cols[2].text.strip(),\n                '股票简称': cols[3].text.strip(),\n                '现价': cols[4].text.strip(),\n                '涨跌幅': cols[5].text.strip(),\n                '举牌方': cols[6].text.strip(),\n                '增持数量': cols[7].find('a').text.strip() if cols[7].find('a') else cols[7].text.strip(),\n                '交易均价': cols[8].find('a').text.strip() if cols[8].find('a') else cols[8].text.strip(),\n                '增持数量占总股本比例': cols[9].find('a').text.strip() if cols[9].find('a') else cols[9].text.strip(),\n                '变动后持股总数': cols[10].find('a').text.strip() if cols[10].find('a') else cols[10].text.strip(),\n                '变动后持股比例': cols[11].find('a').text.strip() if cols[11].find('a') else cols[11].text.strip(),\n                '历史数据': cols[12].find('a').text.strip() if cols[12].find('a') else cols[12].text.strip(),\n            }\n            data.append(item)\n\n    temp_df = pd.DataFrame(data)\n    big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"序号\",\n        \"举牌公告日\",\n        \"股票代码\",\n        \"股票简称\",\n        \"现价\",\n        \"涨跌幅\",\n        \"举牌方\",\n        \"增持数量\",\n        \"交易均价\",\n        \"增持数量占总股本比例\",\n        \"变动后持股总数\",\n        \"变动后持股比例\",\n        \"历史数据\",\n    ]\n    big_df[\"涨跌幅\"] = big_df[\"涨跌幅\"].astype(str).str.zfill(6)\n    big_df[\"增持数量占总股本比例\"] = (\n        big_df[\"增持数量占总股本比例\"].astype(str).str.strip(\"%\")\n    )\n    big_df[\"变动后持股比例\"] = big_df[\"变动后持股比例\"].astype(str).str.strip(\"%\")\n    big_df[\"涨跌幅\"] = pd.to_numeric(big_df[\"涨跌幅\"], errors=\"coerce\")\n    big_df[\"增持数量占总股本比例\"] = pd.to_numeric(\n        big_df[\"增持数量占总股本比例\"], errors=\"coerce\"\n    )\n    big_df[\"变动后持股比例\"] = pd.to_numeric(big_df[\"变动后持股比例\"], errors=\"coerce\")\n    big_df[\"举牌公告日\"] = pd.to_datetime(big_df[\"举牌公告日\"], errors=\"coerce\").dt.date\n    big_df[\"股票代码\"] = big_df[\"股票代码\"].astype(str).str.zfill(6)\n    big_df[\"现价\"] = pd.to_numeric(big_df[\"现价\"], errors=\"coerce\")\n    big_df[\"交易均价\"] = pd.to_numeric(big_df[\"交易均价\"], errors=\"coerce\")\n    del big_df[\"历史数据\"]\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_rank_cxg_ths_df = stock_rank_cxg_ths(symbol=\"创月新高\")\n    print(stock_rank_cxg_ths_df)\n\n    stock_rank_cxg_ths_df = stock_rank_cxg_ths(symbol=\"半年新高\")\n    print(stock_rank_cxg_ths_df)\n\n    stock_rank_cxg_ths_df = stock_rank_cxg_ths(symbol=\"一年新高\")\n    print(stock_rank_cxg_ths_df)\n\n    stock_rank_cxg_ths_df = stock_rank_cxg_ths(symbol=\"历史新高\")\n    print(stock_rank_cxg_ths_df)\n\n    stock_rank_cxd_ths_df = stock_rank_cxd_ths(symbol=\"创月新低\")\n    print(stock_rank_cxd_ths_df)\n\n    stock_rank_cxd_ths_df = stock_rank_cxd_ths(symbol=\"半年新低\")\n    print(stock_rank_cxd_ths_df)\n\n    stock_rank_cxd_ths_df = stock_rank_cxd_ths(symbol=\"一年新低\")\n    print(stock_rank_cxd_ths_df)\n\n    stock_rank_cxd_ths_df = stock_rank_cxd_ths(symbol=\"历史新低\")\n    print(stock_rank_cxd_ths_df)\n\n    stock_rank_lxsz_ths_df = stock_rank_lxsz_ths()\n    print(stock_rank_lxsz_ths_df)\n\n    stock_rank_lxxd_ths_df = stock_rank_lxxd_ths()\n    print(stock_rank_lxxd_ths_df)\n\n    stock_rank_cxfl_ths_df = stock_rank_cxfl_ths()\n    print(stock_rank_cxfl_ths_df)\n\n    stock_rank_cxsl_ths_df = stock_rank_cxsl_ths()\n    print(stock_rank_cxsl_ths_df)\n\n    stock_rank_xstp_ths_df = stock_rank_xstp_ths(symbol=\"5日均线\")\n    print(stock_rank_xstp_ths_df)\n\n    stock_rank_xxtp_ths_df = stock_rank_xxtp_ths(symbol=\"5日均线\")\n    print(stock_rank_xxtp_ths_df)\n\n    stock_rank_ljqs_ths_df = stock_rank_ljqs_ths()\n    print(stock_rank_ljqs_ths_df)\n\n    stock_rank_ljqd_ths_df = stock_rank_ljqd_ths()\n    print(stock_rank_ljqd_ths_df)\n\n    stock_rank_xzjp_ths_df = stock_rank_xzjp_ths()\n    print(stock_rank_xzjp_ths_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_tfp_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/29 15:00\nDesc: 东方财富网-数据中心-特色数据-停复牌信息\nhttps://data.eastmoney.com/tfpxx/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_tfp_em(date: str = \"20240426\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-停复牌信息\n    https://data.eastmoney.com/tfpxx/\n    :param date: 查询参数 \"20240426\"\n    :type date: str\n    :return: 停复牌信息表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"SUSPEND_START_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_CUSTOM_SUSPEND_DATA_INTERFACE\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"\"\"(MARKET=\"全部\")(DATETIME='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    for page in range(1, total_page + 1):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df.columns = [\n        \"序号\",\n        \"代码\",\n        \"名称\",\n        \"停牌时间\",\n        \"停牌截止时间\",\n        \"停牌期限\",\n        \"停牌原因\",\n        \"所属市场\",\n        \"停牌开始日期\",\n        \"预计复牌时间\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"停牌时间\",\n            \"停牌截止时间\",\n            \"停牌期限\",\n            \"停牌原因\",\n            \"所属市场\",\n            \"预计复牌时间\",\n        ]\n    ]\n    big_df[\"停牌时间\"] = pd.to_datetime(big_df[\"停牌时间\"], errors=\"coerce\").dt.date\n    big_df[\"停牌截止时间\"] = pd.to_datetime(\n        big_df[\"停牌截止时间\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"预计复牌时间\"] = pd.to_datetime(\n        big_df[\"预计复牌时间\"], errors=\"coerce\"\n    ).dt.date\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_tfp_em_df = stock_tfp_em(date=\"20240426\")\n    print(stock_tfp_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_three_report_em.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/5/8 20:00\nDesc: 东方财富-股票-财务分析\n\"\"\"\n\nfrom functools import lru_cache\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\n@lru_cache()\ndef _stock_balance_sheet_by_report_ctype_em(symbol: str = \"SH600519\") -> str:\n    \"\"\"\n    东方财富-股票-财务分析-资产负债表-按报告期-公司类型判断\n    https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh601878#zcfzb-0\n    :param symbol: 股票代码; 带市场标识\n    :type symbol: str\n    :return: 东方财富-股票-财务分析-资产负债表-按报告期-公司类型判断\n    :rtype: str\n    \"\"\"\n    url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index\"\n    params = {\"type\": \"web\", \"code\": symbol.lower()}\n    r = requests.get(url, params=params)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    company_type = soup.find(attrs={\"id\": \"hidctype\"})[\"value\"]\n    return company_type\n\n\ndef stock_balance_sheet_by_report_em(symbol: str = \"SH600519\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-股票-财务分析-资产负债表-按报告期\n    https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n    :param symbol: 股票代码; 带市场标识\n    :type symbol: str\n    :return: 资产负债表-按报告期\n    :rtype: pandas.DataFrame\n    \"\"\"\n    company_type = _stock_balance_sheet_by_report_ctype_em(symbol=symbol)\n    url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/zcfzbDateAjaxNew\"\n    params = {\n        \"companyType\": company_type,\n        \"reportDateType\": \"0\",\n        \"code\": symbol,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"REPORT_DATE\"] = pd.to_datetime(temp_df[\"REPORT_DATE\"]).dt.date\n    temp_df[\"REPORT_DATE\"] = temp_df[\"REPORT_DATE\"].astype(str)\n    need_date = temp_df[\"REPORT_DATE\"].tolist()\n    sep_list = [\",\".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for item in tqdm(sep_list, leave=False):\n        url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/zcfzbAjaxNew\"\n        params = {\n            \"companyType\": company_type,\n            \"reportDateType\": \"0\",\n            \"reportType\": \"1\",\n            \"dates\": item,\n            \"code\": symbol,\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        if \"data\" not in data_json.keys():\n            break\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        for col in temp_df.columns:\n            if temp_df[col].isnull().all():  # 检查列是否包含 None 或 NaN\n                temp_df[col] = pd.to_numeric(temp_df[col], errors=\"coerce\")\n        if big_df.empty:\n            big_df = temp_df\n        else:\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    return big_df\n\n\ndef stock_balance_sheet_by_yearly_em(symbol: str = \"SH600036\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-股票-财务分析-资产负债表-按年度\n    https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n    :param symbol: 股票代码; 带市场标识\n    :type symbol: str\n    :return: 资产负债表-按年度\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/zcfzbDateAjaxNew\"\n    company_type = _stock_balance_sheet_by_report_ctype_em(symbol)\n    params = {\n        \"companyType\": company_type,\n        \"reportDateType\": \"1\",\n        \"code\": symbol,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    try:\n        temp_df = pd.DataFrame(data_json[\"data\"])\n    except:  # noqa: E722\n        company_type = \"3\"\n        params.update({\"companyType\": company_type})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"REPORT_DATE\"] = pd.to_datetime(\n        temp_df[\"REPORT_DATE\"], errors=\"coerce\"\n    ).dt.date\n    temp_df[\"REPORT_DATE\"] = temp_df[\"REPORT_DATE\"].astype(str)\n    need_date = temp_df[\"REPORT_DATE\"].tolist()\n    sep_list = [\",\".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for item in tqdm(sep_list, leave=False):\n        url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/zcfzbAjaxNew\"\n        params = {\n            \"companyType\": company_type,\n            \"reportDateType\": \"1\",\n            \"reportType\": \"1\",\n            \"dates\": item,\n            \"code\": symbol,\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        if \"data\" not in data_json.keys():\n            break\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        for col in temp_df.columns:\n            if temp_df[col].isnull().all():  # 检查列是否包含 None 或 NaN\n                temp_df[col] = pd.to_numeric(temp_df[col], errors=\"coerce\")\n        if big_df.empty:\n            big_df = temp_df\n        else:\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    return big_df\n\n\ndef stock_profit_sheet_by_report_em(symbol: str = \"SH600519\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-股票-财务分析-利润表-报告期\n    https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n    :param symbol: 股票代码; 带市场标识\n    :type symbol: str\n    :return: 利润表-报告期\n    :rtype: pandas.DataFrame\n    \"\"\"\n    company_type = _stock_balance_sheet_by_report_ctype_em(symbol=symbol)\n    url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/lrbDateAjaxNew\"\n    params = {\n        \"companyType\": company_type,\n        \"reportDateType\": \"0\",\n        \"code\": symbol,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"REPORT_DATE\"] = pd.to_datetime(temp_df[\"REPORT_DATE\"]).dt.date\n    temp_df[\"REPORT_DATE\"] = temp_df[\"REPORT_DATE\"].astype(str)\n    need_date = temp_df[\"REPORT_DATE\"].tolist()\n    sep_list = [\",\".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for item in tqdm(sep_list, leave=False):\n        url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/lrbAjaxNew\"\n        params = {\n            \"companyType\": company_type,\n            \"reportDateType\": \"0\",\n            \"reportType\": \"1\",\n            \"code\": symbol,\n            \"dates\": item,\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        if \"data\" not in data_json.keys():\n            break\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        for col in temp_df.columns:\n            if temp_df[col].isnull().all():  # 检查列是否包含 None 或 NaN\n                temp_df[col] = pd.to_numeric(temp_df[col], errors=\"coerce\")\n        if big_df.empty:\n            big_df = temp_df\n        else:\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    return big_df\n\n\ndef stock_profit_sheet_by_yearly_em(symbol: str = \"SH600519\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-股票-财务分析-利润表-按年度\n    https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n    :param symbol: 股票代码; 带市场标识\n    :type symbol: str\n    :return: 利润表-按年度\n    :rtype: pandas.DataFrame\n    \"\"\"\n    company_type = _stock_balance_sheet_by_report_ctype_em(symbol=symbol)\n    url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/lrbDateAjaxNew\"\n    params = {\n        \"companyType\": company_type,\n        \"reportDateType\": \"1\",\n        \"code\": symbol,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"REPORT_DATE\"] = pd.to_datetime(temp_df[\"REPORT_DATE\"]).dt.date\n    temp_df[\"REPORT_DATE\"] = temp_df[\"REPORT_DATE\"].astype(str)\n    need_date = temp_df[\"REPORT_DATE\"].tolist()\n    sep_list = [\",\".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for item in tqdm(sep_list, leave=False):\n        url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/lrbAjaxNew\"\n        params = {\n            \"companyType\": company_type,\n            \"reportDateType\": \"1\",\n            \"reportType\": \"1\",\n            \"dates\": item,\n            \"code\": symbol,\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        if \"data\" not in data_json.keys():\n            break\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        for col in temp_df.columns:\n            if temp_df[col].isnull().all():  # 检查列是否包含 None 或 NaN\n                temp_df[col] = pd.to_numeric(temp_df[col], errors=\"coerce\")\n        if big_df.empty:\n            big_df = temp_df\n        else:\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    return big_df\n\n\ndef stock_profit_sheet_by_quarterly_em(\n    symbol: str = \"SH600519\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-股票-财务分析-利润表-按单季度\n    https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n    :param symbol: 股票代码; 带市场标识\n    :type symbol: str\n    :return: 利润表-按单季度\n    :rtype: pandas.DataFrame\n    \"\"\"\n    company_type = _stock_balance_sheet_by_report_ctype_em(symbol=symbol)\n    url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/lrbDateAjaxNew\"\n    params = {\n        \"companyType\": company_type,\n        \"reportDateType\": \"2\",\n        \"code\": symbol,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"REPORT_DATE\"] = pd.to_datetime(temp_df[\"REPORT_DATE\"]).dt.date\n    temp_df[\"REPORT_DATE\"] = temp_df[\"REPORT_DATE\"].astype(str)\n    need_date = temp_df[\"REPORT_DATE\"].tolist()\n    sep_list = [\",\".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for item in tqdm(sep_list, leave=False):\n        url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/lrbAjaxNew\"\n        params = {\n            \"companyType\": company_type,\n            \"reportDateType\": \"0\",\n            \"reportType\": \"2\",\n            \"dates\": item,\n            \"code\": symbol,\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        if \"data\" not in data_json.keys():\n            break\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        for col in temp_df.columns:\n            if temp_df[col].isnull().all():  # 检查列是否包含 None 或 NaN\n                temp_df[col] = pd.to_numeric(temp_df[col], errors=\"coerce\")\n        if big_df.empty:\n            big_df = temp_df\n        else:\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    return big_df\n\n\ndef stock_cash_flow_sheet_by_report_em(\n    symbol: str = \"SH600519\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-股票-财务分析-现金流量表-按报告期\n    https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n    :param symbol: 股票代码; 带市场标识\n    :type symbol: str\n    :return: 现金流量表-按报告期\n    :rtype: pandas.DataFrame\n    \"\"\"\n    company_type = _stock_balance_sheet_by_report_ctype_em(symbol=symbol)\n    url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/xjllbDateAjaxNew\"\n    params = {\n        \"companyType\": company_type,\n        \"reportDateType\": \"0\",\n        \"code\": symbol,\n    }\n    r = requests.get(url, params=params, timeout=10)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"REPORT_DATE\"] = pd.to_datetime(temp_df[\"REPORT_DATE\"]).dt.date\n    temp_df[\"REPORT_DATE\"] = temp_df[\"REPORT_DATE\"].astype(str)\n    need_date = temp_df[\"REPORT_DATE\"].tolist()\n    sep_list = [\",\".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for item in tqdm(sep_list, leave=False):\n        url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/xjllbAjaxNew\"\n        params = {\n            \"companyType\": company_type,\n            \"reportDateType\": \"0\",\n            \"reportType\": \"1\",\n            \"dates\": item,\n            \"code\": symbol,\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        if \"data\" not in data_json.keys():\n            break\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        for col in temp_df.columns:\n            if temp_df[col].isnull().all():  # 检查列是否包含 None 或 NaN\n                temp_df[col] = pd.to_numeric(temp_df[col], errors=\"coerce\")\n        if big_df.empty:\n            big_df = temp_df\n        else:\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    return big_df\n\n\ndef stock_cash_flow_sheet_by_yearly_em(\n    symbol: str = \"SH600519\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-股票-财务分析-现金流量表-按年度\n    https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n    :param symbol: 股票代码; 带市场标识\n    :type symbol: str\n    :return: 现金流量表-按年度\n    :rtype: pandas.DataFrame\n    \"\"\"\n    company_type = _stock_balance_sheet_by_report_ctype_em(symbol=symbol)\n    url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/xjllbDateAjaxNew\"\n    params = {\n        \"companyType\": company_type,\n        \"reportDateType\": \"1\",\n        \"code\": symbol,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"REPORT_DATE\"] = pd.to_datetime(temp_df[\"REPORT_DATE\"]).dt.date\n    temp_df[\"REPORT_DATE\"] = temp_df[\"REPORT_DATE\"].astype(str)\n    need_date = temp_df[\"REPORT_DATE\"].tolist()\n    sep_list = [\",\".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for item in tqdm(sep_list, leave=False):\n        url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/xjllbAjaxNew\"\n        params = {\n            \"companyType\": company_type,\n            \"reportDateType\": \"1\",\n            \"reportType\": \"1\",\n            \"dates\": item,\n            \"code\": symbol,\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        if \"data\" not in data_json.keys():\n            break\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        for col in temp_df.columns:\n            if temp_df[col].isnull().all():  # 检查列是否包含 None 或 NaN\n                temp_df[col] = pd.to_numeric(temp_df[col], errors=\"coerce\")\n        if big_df.empty:\n            big_df = temp_df\n        else:\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    return big_df\n\n\ndef stock_cash_flow_sheet_by_quarterly_em(\n    symbol: str = \"SH600519\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-股票-财务分析-现金流量表-按单季度\n    https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n    :param symbol: 股票代码; 带市场标识\n    :type symbol: str\n    :return: 现金流量表-按单季度\n    :rtype: pandas.DataFrame\n    \"\"\"\n    company_type = _stock_balance_sheet_by_report_ctype_em(symbol=symbol)\n    url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/xjllbDateAjaxNew\"\n    params = {\n        \"companyType\": company_type,\n        \"reportDateType\": \"2\",\n        \"code\": symbol,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"REPORT_DATE\"] = pd.to_datetime(temp_df[\"REPORT_DATE\"]).dt.date\n    temp_df[\"REPORT_DATE\"] = temp_df[\"REPORT_DATE\"].astype(str)\n    need_date = temp_df[\"REPORT_DATE\"].tolist()\n    sep_list = [\",\".join(need_date[i : i + 5]) for i in range(0, len(need_date), 5)]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for item in tqdm(sep_list, leave=False):\n        url = \"https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/xjllbAjaxNew\"\n        params = {\n            \"companyType\": company_type,\n            \"reportDateType\": \"0\",\n            \"reportType\": \"2\",\n            \"dates\": item,\n            \"code\": symbol,\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        if \"data\" not in data_json.keys():\n            break\n        temp_df = pd.DataFrame(data_json[\"data\"])\n        for col in temp_df.columns:\n            if temp_df[col].isnull().all():  # 检查列是否包含 None 或 NaN\n                temp_df[col] = pd.to_numeric(temp_df[col], errors=\"coerce\")\n        if big_df.empty:\n            big_df = temp_df\n        else:\n            big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    return big_df\n\n\ndef __get_report_date_list_delisted_em(symbol: str = \"SZ000013\") -> list:\n    \"\"\"\n    东方财富-股票-财务分析-资产负债表-已退市股票-所有报告期\n    https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=SZ000013\n    :param symbol: 已退市股票代码; 带市场标识\n    :type symbol: str\n    :return: 所有报告期\n    :rtype: list\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/get\"\n    params = {\n        \"type\": \"RPT_F10_FINANCE_GINCOME\",\n        \"sty\": \"SECUCODE,SECURITY_CODE,REPORT_DATE,REPORT_TYPE,REPORT_DATE_NAME\",\n        \"filter\": f'(SECUCODE=\"{symbol[2:]}.{symbol[:2]}\")',\n        \"p\": \"1\",\n        \"ps\": \"200\",\n        \"sr\": \"-1\",\n        \"st\": \"REPORT_DATE\",\n        \"source\": \"HSF10\",\n        \"client\": \"PC\",\n        \"v\": \"07306678536291241\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    report_date_list = [item[0] for item in temp_df[\"REPORT_DATE\"].str.split(\" \")]\n    report_date_list = [\"'\" + item + \"'\" for item in report_date_list]\n    return report_date_list\n\n\ndef stock_balance_sheet_by_report_delisted_em(symbol: str = \"SZ000013\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-股票-财务分析-资产负债表-已退市股票-按报告期\n    https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=SZ000013#/cwfx/zcfzb\n    :param symbol: 已退市股票代码; 带市场标识\n    :type symbol: str\n    :return: 资产负债表-按报告期\n    :rtype: pandas.DataFrame\n    \"\"\"\n    report_date_list = __get_report_date_list_delisted_em(symbol)\n    url = \"https://datacenter.eastmoney.com/securities/api/data/get\"\n    params = {\n        \"type\": \"RPT_F10_FINANCE_GBALANCE\",\n        \"sty\": \"F10_FINANCE_GBALANCE\",\n        \"filter\": f\"\"\"(SECUCODE=\"{symbol[2:]}.{symbol[:2]}\")(REPORT_DATE in ({\",\".join(report_date_list)}))\"\"\",\n        \"p\": \"1\",\n        \"ps\": \"200\",\n        \"sr\": \"-1\",\n        \"st\": \"REPORT_DATE\",\n        \"source\": \"HSF10\",\n        \"client\": \"PC\",\n        \"v\": \"05767841728614413\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df[\"REPORT_DATE\"] = pd.to_datetime(temp_df[\"REPORT_DATE\"]).dt.date\n    temp_df.sort_values(\n        by=[\"REPORT_DATE\"], ascending=False, inplace=True, ignore_index=True\n    )\n    return temp_df\n\n\ndef stock_profit_sheet_by_report_delisted_em(symbol: str = \"SZ000013\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-股票-财务分析-利润表-已退市股票-按报告期\n    https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=SZ000013#/cwfx/lrb\n    :param symbol: 已退市股票代码; 带市场标识\n    :type symbol: str\n    :return: 利润表-按报告期\n    :rtype: pandas.DataFrame\n    \"\"\"\n    report_date_list = __get_report_date_list_delisted_em(symbol)\n    url = \"https://datacenter.eastmoney.com/securities/api/data/get\"\n    params = {\n        \"type\": \"RPT_F10_FINANCE_GINCOME\",\n        \"sty\": \"APP_F10_GINCOME\",\n        \"filter\": f\"\"\"(SECUCODE=\"{symbol[2:]}.{symbol[:2]}\")(REPORT_DATE in ({\",\".join(report_date_list)}))\"\"\",\n        \"p\": \"1\",\n        \"ps\": \"200\",\n        \"sr\": \"-1\",\n        \"st\": \"REPORT_DATE\",\n        \"source\": \"HSF10\",\n        \"client\": \"PC\",\n        \"v\": \"05767841728614413\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df[\"REPORT_DATE\"] = pd.to_datetime(temp_df[\"REPORT_DATE\"]).dt.date\n    temp_df.sort_values(\n        by=[\"REPORT_DATE\"], ascending=False, inplace=True, ignore_index=True\n    )\n    return temp_df\n\n\ndef stock_cash_flow_sheet_by_report_delisted_em(\n    symbol: str = \"SZ000013\",\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-股票-财务分析-现金流量表-已退市股票-按报告期\n    https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=SZ000013#/cwfx/xjllb\n    :param symbol: 已退市股票代码; 带市场标识\n    :type symbol: str\n    :return: 现金流量表-按报告期\n    :rtype: pandas.DataFrame\n    \"\"\"\n    report_date_list = __get_report_date_list_delisted_em(symbol)\n    url = \"https://datacenter.eastmoney.com/securities/api/data/get\"\n    params = {\n        \"type\": \"RPT_F10_FINANCE_GCASHFLOW\",\n        \"sty\": \"APP_F10_GCASHFLOW\",\n        \"filter\": f\"\"\"(SECUCODE=\"{symbol[2:]}.{symbol[:2]}\")(REPORT_DATE in ({\",\".join(report_date_list)}))\"\"\",\n        \"p\": \"1\",\n        \"ps\": \"200\",\n        \"sr\": \"-1\",\n        \"st\": \"REPORT_DATE\",\n        \"source\": \"HSF10\",\n        \"client\": \"PC\",\n        \"v\": \"05767841728614413\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df[\"REPORT_DATE\"] = pd.to_datetime(temp_df[\"REPORT_DATE\"]).dt.date\n    temp_df.sort_values(\n        by=[\"REPORT_DATE\"], ascending=False, inplace=True, ignore_index=True\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_balance_sheet_by_report_em_df = stock_balance_sheet_by_report_em(\n        symbol=\"SH600519\"\n    )\n    print(stock_balance_sheet_by_report_em_df)\n\n    stock_balance_sheet_by_yearly_em_df = stock_balance_sheet_by_yearly_em(\n        symbol=\"SH600519\"\n    )\n    print(stock_balance_sheet_by_yearly_em_df)\n\n    stock_profit_sheet_by_report_em_df = stock_profit_sheet_by_report_em(\n        symbol=\"SH600519\"\n    )\n    print(stock_profit_sheet_by_report_em_df)\n\n    stock_profit_sheet_by_yearly_em_df = stock_profit_sheet_by_yearly_em(\n        symbol=\"SH600519\"\n    )\n    print(stock_profit_sheet_by_yearly_em_df)\n\n    stock_profit_sheet_by_quarterly_em_df = stock_profit_sheet_by_quarterly_em(\n        symbol=\"SH600519\"\n    )\n    print(stock_profit_sheet_by_quarterly_em_df)\n\n    stock_cash_flow_sheet_by_report_em_df = stock_cash_flow_sheet_by_report_em(\n        symbol=\"SH600519\"\n    )\n    print(stock_cash_flow_sheet_by_report_em_df)\n\n    stock_cash_flow_sheet_by_yearly_em_df = stock_cash_flow_sheet_by_yearly_em(\n        symbol=\"SH601398\"\n    )\n    print(stock_cash_flow_sheet_by_yearly_em_df)\n\n    stock_cash_flow_sheet_by_quarterly_em_df = stock_cash_flow_sheet_by_quarterly_em(\n        symbol=\"SH601398\"\n    )\n    print(stock_cash_flow_sheet_by_quarterly_em_df)\n\n    stock_balance_sheet_by_report_delisted_em_df = (\n        stock_balance_sheet_by_report_delisted_em(symbol=\"SZ000013\")\n    )\n    print(stock_balance_sheet_by_report_delisted_em_df)\n\n    stock_profit_sheet_by_report_delisted_em_df = (\n        stock_profit_sheet_by_report_delisted_em(symbol=\"SZ000013\")\n    )\n    print(stock_profit_sheet_by_report_delisted_em_df)\n\n    stock_cash_flow_sheet_by_report_delisted_em_df = (\n        stock_cash_flow_sheet_by_report_delisted_em(symbol=\"SZ000013\")\n    )\n    print(stock_cash_flow_sheet_by_report_delisted_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_ttm_lyr.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/10/30 15:00\nDesc: 全部A股-等权重市盈率、中位数市盈率\nhttps://www.legulegu.com/stockdata/a-ttm-lyr\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.stock_feature.stock_a_indicator import get_token_lg, get_cookie_csrf\n\n\ndef stock_a_ttm_lyr() -> pd.DataFrame:\n    \"\"\"\n    全部 A 股-等权重市盈率、中位数市盈率\n    :return: 全部A股-等权重市盈率、中位数市盈率\n    :rtype: pandas.DataFrame\n    \"\"\"\n\n    url = \"https://legulegu.com/api/stock-data/market-ttm-lyr\"\n    params = {\n        \"marketId\": \"5\",\n        \"token\": get_token_lg(),\n    }\n    # 获取 cookie 和 headers\n    csrf_data = get_cookie_csrf(url=\"https://www.legulegu.com/stockdata/a-ttm-lyr\")\n    # 使用返回的 headers（已经是副本）\n    request_headers = csrf_data[\"headers\"].copy()\n    request_headers.update(\n        {\n            \"host\": \"www.legulegu.com\",\n            \"referer\": \"https://www.legulegu.com/stockdata/a-ttm-lyr\",\n        }\n    )\n    # 使用独立的 session\n    session = requests.Session()\n    r = session.get(\n        url,\n        params=params,\n        cookies=csrf_data[\"cookies\"],\n        headers=request_headers,\n    )\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    # 关闭 session\n    session.close()\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_a_ttm_lyr_df = stock_a_ttm_lyr()\n    print(stock_a_ttm_lyr_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_us_valuation_baidu.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/12/24 18:26\nDesc: 百度股市通-美股-财务报表-估值数据\nhttps://gushitong.baidu.com/stock/us-NVDA\n\"\"\"\n\nimport http.client\nimport json\nimport urllib\n\nimport pandas as pd\n\n\ndef stock_us_valuation_baidu(\n    symbol: str = \"NVDA\", indicator: str = \"总市值\", period: str = \"近一年\"\n) -> pd.DataFrame:\n    \"\"\"\n    百度股市通-美股-财务报表-估值数据\n    https://gushitong.baidu.com/stock/us-NVDA\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: choice of {\"总市值\", \"市盈率(TTM)\", \"市盈率(静)\", \"市净率\", \"市现率\"}\n    :type indicator: str\n    :param period: choice of {\"近一年\", \"近三年\", \"全部\"}\n    :type period: str\n    :return: 估值数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    params = {\n        \"openapi\": \"1\",\n        \"dspName\": \"iphone\",\n        \"tn\": \"tangram\",\n        \"client\": \"app\",\n        \"query\": indicator,\n        \"code\": symbol,\n        \"word\": \"\",\n        \"resource_id\": \"51171\",\n        \"market\": \"us\",\n        \"tag\": indicator,\n        \"chart_select\": period,\n        \"industry_select\": \"\",\n        \"skip_industry\": \"1\",\n        \"finClientType\": \"pc\",\n    }\n    conn = http.client.HTTPSConnection(\"gushitong.baidu.com\")\n    conn.request(method=\"GET\", url=f\"/opendata?{urllib.parse.urlencode(params)}\")\n    r = conn.getresponse()\n    data_json = json.loads(r.read())\n    temp_df = pd.DataFrame(\n        data_json[\"Result\"][0][\"DisplayData\"][\"resultData\"][\"tplData\"][\"result\"][\n            \"chartInfo\"\n        ][0][\"body\"]\n    )\n    temp_df.columns = [\"date\", \"value\"]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"]).dt.date\n    temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"])\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_us_valuation_baidu_df = stock_us_valuation_baidu(\n        symbol=\"NVDA\", indicator=\"总市值\", period=\"近一年\"\n    )\n    print(stock_us_valuation_baidu_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_value_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/11/26 18:00\nDesc: 东方财富网-数据中心-估值分析-每日互动-每日互动-估值分析\nhttps://data.eastmoney.com/gzfx/detail/300766.html\n\"\"\"\n\nimport pandas as pd\n\nfrom akshare.request import make_request_with_retry_json\n\n\ndef stock_value_em(symbol: str = \"300766\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-估值分析-每日互动-每日互动-估值分析\n    https://data.eastmoney.com/gzfx/detail/300766.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 估值分析\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"TRADE_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"5000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_VALUEANALYSIS_DET\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f'(SECURITY_CODE=\"{symbol}\")',\n    }\n    data_json = make_request_with_retry_json(url, params=params)\n    temp_json = data_json[\"result\"][\"data\"]\n    temp_df = pd.DataFrame(temp_json)\n    temp_df.rename(\n        columns={\n            \"TRADE_DATE\": \"数据日期\",\n            \"CLOSE_PRICE\": \"当日收盘价\",\n            \"CHANGE_RATE\": \"当日涨跌幅\",\n            \"TOTAL_MARKET_CAP\": \"总市值\",\n            \"NOTLIMITED_MARKETCAP_A\": \"流通市值\",\n            \"TOTAL_SHARES\": \"总股本\",\n            \"FREE_SHARES_A\": \"流通股本\",\n            \"PE_TTM\": \"PE(TTM)\",\n            \"PE_LAR\": \"PE(静)\",\n            \"PB_MRQ\": \"市净率\",\n            \"PEG_CAR\": \"PEG值\",\n            \"PCF_OCF_TTM\": \"市现率\",\n            \"PS_TTM\": \"市销率\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"数据日期\",\n            \"当日收盘价\",\n            \"当日涨跌幅\",\n            \"总市值\",\n            \"流通市值\",\n            \"总股本\",\n            \"流通股本\",\n            \"PE(TTM)\",\n            \"PE(静)\",\n            \"市净率\",\n            \"PEG值\",\n            \"市现率\",\n            \"市销率\",\n        ]\n    ]\n    temp_df[\"数据日期\"] = pd.to_datetime(temp_df[\"数据日期\"], errors=\"coerce\").dt.date\n    for item in temp_df.columns[1:]:\n        temp_df[item] = pd.to_numeric(temp_df[item], errors=\"coerce\")\n    temp_df.sort_values(by=\"数据日期\", ignore_index=True, inplace=True)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_value_em_df = stock_value_em(symbol=\"300766\")\n    print(stock_value_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_yjbb_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/20 18:00\nDesc: 东方财富-数据中心-年报季报\n东方财富-数据中心-年报季报-业绩快报-业绩报表\nhttps://data.eastmoney.com/bbsj/202003/yjbb.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_yjbb_em(date: str = \"20200331\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-年报季报-业绩快报-业绩报表\n    https://data.eastmoney.com/bbsj/202003/yjbb.html\n    :param date: \"20200331\", \"20200630\", \"20200930\", \"20201231\"; 从 20100331 开始\n    :type date: str\n    :return: 业绩报表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.simplefilter(action=\"ignore\", category=FutureWarning)  # 忽略所有\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"UPDATE_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_LICO_FN_CPD\",\n        \"columns\": \"ALL\",\n        \"filter\": f\"(REPORTDATE='{'-'.join([date[:4], date[4:6], date[6:]])}')\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    big_list = []\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_list.append(temp_df)\n    big_df = pd.concat(big_list, ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = range(1, len(big_df) + 1)\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"最新公告日期\",\n        \"_\",\n        \"每股收益\",\n        \"_\",\n        \"营业总收入-营业总收入\",\n        \"净利润-净利润\",\n        \"净资产收益率\",\n        \"营业总收入-同比增长\",\n        \"净利润-同比增长\",\n        \"每股净资产\",\n        \"每股经营现金流量\",\n        \"销售毛利率\",\n        \"营业总收入-季度环比增长\",\n        \"净利润-季度环比增长\",\n        \"_\",\n        \"_\",\n        \"所处行业\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"每股收益\",\n            \"营业总收入-营业总收入\",\n            \"营业总收入-同比增长\",\n            \"营业总收入-季度环比增长\",\n            \"净利润-净利润\",\n            \"净利润-同比增长\",\n            \"净利润-季度环比增长\",\n            \"每股净资产\",\n            \"净资产收益率\",\n            \"每股经营现金流量\",\n            \"销售毛利率\",\n            \"所处行业\",\n            \"最新公告日期\",\n        ]\n    ]\n    big_df[\"每股收益\"] = pd.to_numeric(big_df[\"每股收益\"], errors=\"coerce\")\n    big_df[\"营业总收入-营业总收入\"] = pd.to_numeric(\n        big_df[\"营业总收入-营业总收入\"], errors=\"coerce\"\n    )\n    big_df[\"营业总收入-同比增长\"] = pd.to_numeric(\n        big_df[\"营业总收入-同比增长\"], errors=\"coerce\"\n    )\n    big_df[\"营业总收入-季度环比增长\"] = pd.to_numeric(\n        big_df[\"营业总收入-季度环比增长\"], errors=\"coerce\"\n    )\n    big_df[\"净利润-净利润\"] = pd.to_numeric(big_df[\"净利润-净利润\"], errors=\"coerce\")\n    big_df[\"净利润-同比增长\"] = pd.to_numeric(\n        big_df[\"净利润-同比增长\"], errors=\"coerce\"\n    )\n    big_df[\"净利润-季度环比增长\"] = pd.to_numeric(\n        big_df[\"净利润-季度环比增长\"], errors=\"coerce\"\n    )\n    big_df[\"每股净资产\"] = pd.to_numeric(big_df[\"每股净资产\"], errors=\"coerce\")\n    big_df[\"净资产收益率\"] = pd.to_numeric(big_df[\"净资产收益率\"], errors=\"coerce\")\n    big_df[\"每股经营现金流量\"] = pd.to_numeric(\n        big_df[\"每股经营现金流量\"], errors=\"coerce\"\n    )\n    big_df[\"销售毛利率\"] = pd.to_numeric(big_df[\"销售毛利率\"], errors=\"coerce\")\n    big_df[\"最新公告日期\"] = pd.to_datetime(\n        big_df[\"最新公告日期\"], errors=\"coerce\"\n    ).dt.date\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_yjbb_em_df = stock_yjbb_em(date=\"20220331\")\n    print(stock_yjbb_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_yjyg_cninfo.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2023/6/8 16:34\nDesc: 巨潮资讯-首页-数据-预约披露\nhttp://www.cninfo.com.cn/new/commonUrl?url=data/yypl\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_report_disclosure(\n    market: str = \"沪深京\", period: str = \"2021年报\"\n) -> pd.DataFrame:\n    \"\"\"\n    巨潮资讯-首页-数据-预约披露\n    http://www.cninfo.com.cn/new/commonUrl?url=data/yypl\n    :param market: choice of {\"沪深京\": \"szsh\", \"深市\": \"sz\", \"深主板\": \"szmb\", \"中小板\": \"szsme\",\n    \"创业板\": \"szcn\", \"沪市\": \"sh\", \"沪主板\": \"shmb\", \"科创板\": \"shkcp\"}\n    :type market: str\n    :param period: 最近四期的财报\n    :type period: str\n    :return: 指定 market 和 period 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    market_map = {\n        \"沪深京\": \"szsh\",\n        \"深市\": \"sz\",\n        \"深主板\": \"szmb\",\n        \"创业板\": \"szcn\",\n        \"沪市\": \"sh\",\n        \"沪主板\": \"shmb\",\n        \"科创板\": \"shkcp\",\n        \"北交所\": \"bj\",\n    }\n    year = period[:4]\n    period_map = {\n        f\"{year}一季\": f\"{year}-03-31\",\n        f\"{year}半年报\": f\"{year}-06-30\",\n        f\"{year}三季\": f\"{year}-09-30\",\n        f\"{year}年报\": f\"{year}-12-31\",\n    }\n    url = \"http://www.cninfo.com.cn/new/information/getPrbookInfo\"\n    params = {\n        \"sectionTime\": period_map[period],\n        \"firstTime\": \"\",\n        \"lastTime\": \"\",\n        \"market\": market_map[market],\n        \"stockCode\": \"\",\n        \"orderClos\": \"\",\n        \"isDesc\": \"\",\n        \"pagesize\": \"10000\",\n        \"pagenum\": \"1\",\n    }\n    r = requests.post(url, params=params)\n    text_json = r.json()\n    temp_df = pd.DataFrame(text_json[\"prbookinfos\"])\n    temp_df.columns = [\n        \"股票代码\",\n        \"股票简称\",\n        \"首次预约\",\n        \"实际披露\",\n        \"初次变更\",\n        \"二次变更\",\n        \"三次变更\",\n        \"报告期\",\n        \"-\",\n        \"组织码\",\n    ]\n    temp_df = temp_df[\n        [\n            \"股票代码\",\n            \"股票简称\",\n            \"首次预约\",\n            \"初次变更\",\n            \"二次变更\",\n            \"三次变更\",\n            \"实际披露\",\n        ]\n    ]\n    temp_df[\"首次预约\"] = pd.to_datetime(temp_df[\"首次预约\"], errors=\"coerce\").dt.date\n    temp_df[\"初次变更\"] = pd.to_datetime(temp_df[\"初次变更\"], errors=\"coerce\").dt.date\n    temp_df[\"二次变更\"] = pd.to_datetime(temp_df[\"二次变更\"], errors=\"coerce\").dt.date\n    temp_df[\"三次变更\"] = pd.to_datetime(temp_df[\"三次变更\"], errors=\"coerce\").dt.date\n    temp_df[\"实际披露\"] = pd.to_datetime(temp_df[\"实际披露\"], errors=\"coerce\").dt.date\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_report_disclosure_df = stock_report_disclosure(\n        market=\"沪深京\", period=\"2022年报\"\n    )\n    print(stock_report_disclosure_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_yjyg_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/4 18:10\nDesc: 东方财富-数据中心-年报季报\n东方财富-数据中心-年报季报-业绩预告\nhttps://data.eastmoney.com/bbsj/202003/yjyg.html\n东方财富-数据中心-年报季报-预约披露时间\nhttps://data.eastmoney.com/bbsj/202003/yysj.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom tqdm import tqdm\n\n\ndef stock_yjkb_em(date: str = \"20211231\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-年报季报-业绩快报\n    https://data.eastmoney.com/bbsj/202003/yjkb.html\n    :param date: 财报发布日期; choice of {\"20200331\", \"20200630\", \"20200930\", \"20201231\", ...}; 从 20100331 开始\n    :type date: str\n    :return: 业绩快报\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"UPDATE_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_FCI_PERFORMANCEE\",\n        \"columns\": \"ALL\",\n        \"filter\": f\"\"\"(SECURITY_TYPE_CODE in (\"058001001\",\"058001008\"))(TRADE_MARKET_CODE!=\"069001017\")\n        (REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    big_df = pd.DataFrame()\n    total_page = data_json[\"result\"][\"pages\"]\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = range(1, len(big_df) + 1)\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"市场板块\",\n        \"_\",\n        \"证券类型\",\n        \"_\",\n        \"公告日期\",\n        \"_\",\n        \"每股收益\",\n        \"营业收入-营业收入\",\n        \"营业收入-去年同期\",\n        \"净利润-净利润\",\n        \"净利润-去年同期\",\n        \"每股净资产\",\n        \"净资产收益率\",\n        \"营业收入-同比增长\",\n        \"净利润-同比增长\",\n        \"营业收入-季度环比增长\",\n        \"净利润-季度环比增长\",\n        \"所处行业\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"每股收益\",\n            \"营业收入-营业收入\",\n            \"营业收入-去年同期\",\n            \"营业收入-同比增长\",\n            \"营业收入-季度环比增长\",\n            \"净利润-净利润\",\n            \"净利润-去年同期\",\n            \"净利润-同比增长\",\n            \"净利润-季度环比增长\",\n            \"每股净资产\",\n            \"净资产收益率\",\n            \"所处行业\",\n            \"公告日期\",\n        ]\n    ]\n    big_df[\"每股收益\"] = pd.to_numeric(big_df[\"每股收益\"], errors=\"coerce\")\n    big_df[\"营业收入-营业收入\"] = pd.to_numeric(\n        big_df[\"营业收入-营业收入\"], errors=\"coerce\"\n    )\n    big_df[\"营业收入-去年同期\"] = pd.to_numeric(\n        big_df[\"营业收入-去年同期\"], errors=\"coerce\"\n    )\n    big_df[\"营业收入-同比增长\"] = pd.to_numeric(\n        big_df[\"营业收入-同比增长\"], errors=\"coerce\"\n    )\n    big_df[\"营业收入-季度环比增长\"] = pd.to_numeric(\n        big_df[\"营业收入-季度环比增长\"], errors=\"coerce\"\n    )\n    big_df[\"净利润-净利润\"] = pd.to_numeric(big_df[\"净利润-净利润\"], errors=\"coerce\")\n    big_df[\"净利润-去年同期\"] = pd.to_numeric(\n        big_df[\"净利润-去年同期\"], errors=\"coerce\"\n    )\n    big_df[\"净利润-同比增长\"] = pd.to_numeric(\n        big_df[\"净利润-同比增长\"], errors=\"coerce\"\n    )\n    big_df[\"净利润-季度环比增长\"] = pd.to_numeric(\n        big_df[\"净利润-季度环比增长\"], errors=\"coerce\"\n    )\n    big_df[\"每股净资产\"] = pd.to_numeric(big_df[\"每股净资产\"], errors=\"coerce\")\n    big_df[\"净资产收益率\"] = pd.to_numeric(big_df[\"净资产收益率\"], errors=\"coerce\")\n    big_df[\"净资产收益率\"] = pd.to_numeric(big_df[\"净资产收益率\"], errors=\"coerce\")\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"]).dt.date\n    return big_df\n\n\ndef stock_yjyg_em(date: str = \"20200331\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-年报季报-业绩预告\n    https://data.eastmoney.com/bbsj/202003/yjyg.html\n    :param date: 财报发布日期; choice of {\"20200331\", \"20200630\", \"20200930\", \"20201231\", ...}; 从 20081231 开始\n    :type date: str\n    :return: 业绩预告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"NOTICE_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_PUBLIC_OP_NEWPREDICT\",\n        \"columns\": \"ALL\",\n        \"filter\": f\" (REPORT_DATE='{'-'.join([date[:4], date[4:6], date[6:]])}')\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    big_df = pd.DataFrame()\n    total_page = data_json[\"result\"][\"pages\"]\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = range(1, len(big_df) + 1)\n    big_df.columns = [\n        \"序号\",\n        \"_\",\n        \"股票代码\",\n        \"股票简称\",\n        \"_\",\n        \"公告日期\",\n        \"报告日期\",\n        \"_\",\n        \"预测指标\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"业绩变动\",\n        \"业绩变动原因\",\n        \"预告类型\",\n        \"上年同期值\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"业绩变动幅度\",\n        \"预测数值\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"预测指标\",\n            \"业绩变动\",\n            \"预测数值\",\n            \"业绩变动幅度\",\n            \"业绩变动原因\",\n            \"预告类型\",\n            \"上年同期值\",\n            \"公告日期\",\n        ]\n    ]\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    big_df[\"业绩变动幅度\"] = pd.to_numeric(big_df[\"业绩变动幅度\"], errors=\"coerce\")\n    big_df[\"预测数值\"] = pd.to_numeric(big_df[\"预测数值\"], errors=\"coerce\")\n    big_df[\"上年同期值\"] = pd.to_numeric(big_df[\"上年同期值\"], errors=\"coerce\")\n    return big_df\n\n\ndef stock_yysj_em(symbol: str = \"沪深A股\", date: str = \"20200331\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-数据中心-年报季报-预约披露时间\n    https://data.eastmoney.com/bbsj/202003/yysj.html\n    :param symbol: choice of {'沪深A股', '沪市A股', '科创板', '深市A股', '创业板', '京市A股', 'ST板'}\n    :type symbol: str\n    :param date: \"20190331\", \"20190630\", \"20190930\", \"20191231\"; 从 20081231 开始\n    :type date: str\n    :return: 指定时间的上市公司预约披露时间数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"FIRST_APPOINT_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"1,1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_PUBLIC_BS_APPOIN\",\n        \"columns\": \"ALL\",\n        \"filter\": f\"\"\"(SECURITY_TYPE_CODE in (\"058001001\",\"058001008\"))(TRADE_MARKET_CODE!=\"069001017\")\n        (REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\",\n    }\n    if symbol == \"沪市A股\":\n        params.update(\n            {\n                \"filter\": f\"\"\"(SECURITY_TYPE_CODE in (\"058001001\",\"058001008\"))\n                (TRADE_MARKET_CODE in (\"069001001001\",\"069001001003\",\"069001001006\"))\n                (REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\"\n            }\n        )\n    elif symbol == \"科创板\":\n        params.update(\n            {\n                \"filter\": f\"\"\"(SECURITY_TYPE_CODE in (\"058001001\",\"058001008\"))(TRADE_MARKET_CODE=\"069001001006\")\n                (REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\"\n            }\n        )\n    elif symbol == \"深市A股\":\n        params.update(\n            {\n                \"filter\": f\"\"\"(SECURITY_TYPE_CODE=\"058001001\")(TRADE_MARKET_CODE in\n                (\"069001002001\",\"069001002002\",\"069001002003\",\"069001002005\"))\n                (REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\"\n            }\n        )\n    elif symbol == \"创业板\":\n        params.update(\n            {\n                \"filter\": f\"\"\"(SECURITY_TYPE_CODE=\"058001001\")(TRADE_MARKET_CODE=\"069001002002\")\n                (REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\"\n            }\n        )\n    elif symbol == \"京市A股\":\n        params.update(\n            {\n                \"filter\": f\"\"\"(TRADE_MARKET_CODE=\"069001017\")\n                (REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\"\n            }\n        )\n    elif symbol == \"ST板\":\n        params.update(\n            {\n                \"filter\": f\"\"\"(TRADE_MARKET_CODE in(\"069001001003\",\"069001002005\"))\n                (REPORT_DATE='{\"-\".join([date[:4], date[4:6], date[6:]])}')\"\"\"\n            }\n        )\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = range(1, len(big_df) + 1)\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"_\",\n        \"_\",\n        \"首次预约时间\",\n        \"一次变更日期\",\n        \"二次变更日期\",\n        \"三次变更日期\",\n        \"实际披露时间\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"首次预约时间\",\n            \"一次变更日期\",\n            \"二次变更日期\",\n            \"三次变更日期\",\n            \"实际披露时间\",\n        ]\n    ]\n    big_df[\"首次预约时间\"] = pd.to_datetime(\n        big_df[\"首次预约时间\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"一次变更日期\"] = pd.to_datetime(\n        big_df[\"一次变更日期\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"二次变更日期\"] = pd.to_datetime(\n        big_df[\"二次变更日期\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"三次变更日期\"] = pd.to_datetime(\n        big_df[\"三次变更日期\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"实际披露时间\"] = pd.to_datetime(\n        big_df[\"实际披露时间\"], errors=\"coerce\"\n    ).dt.date\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_yjkb_em_df = stock_yjkb_em(date=\"20200331\")\n    print(stock_yjkb_em_df)\n\n    stock_yjyg_em_df = stock_yjyg_em(date=\"20250331\")\n    print(stock_yjyg_em_df)\n\n    stock_yysj_em_df = stock_yysj_em(symbol=\"沪深A股\", date=\"20211231\")\n    print(stock_yysj_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_yzxdr_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/4/27 19:18\nDesc: 东方财富网-数据中心-特色数据-一致行动人\nhttps://data.eastmoney.com/yzxdr/\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom akshare.utils.tqdm import get_tqdm\n\nfrom akshare.utils import demjson\n\n\ndef stock_yzxdr_em(date: str = \"20240930\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-一致行动人\n    https://data.eastmoney.com/yzxdr/\n    :param date: 每年的季度末时间点\n    :type date: str\n    :return: 一致行动人\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.simplefilter(action=\"ignore\", category=FutureWarning)  # 忽略所有\n    date = \"-\".join([date[:4], date[4:6], date[6:]])\n    url = \"https://datacenter.eastmoney.com/api/data/get\"\n    params = {\n        \"type\": \"RPTA_WEB_YZXDRINDEX\",\n        \"sty\": \"ALL\",\n        \"source\": \"WEB\",\n        \"p\": \"1\",\n        \"ps\": \"500\",\n        \"st\": \"noticedate\",\n        \"sr\": \"-1\",\n        \"var\": \"mwUyirVm\",\n        \"filter\": f\"(enddate='{date}')\",\n        \"rt\": \"53575609\",\n    }\n    r = requests.get(url, params=params)\n    data_text = r.text\n    data_json = demjson.decode(data_text[data_text.find(\"{\") : -1])\n    total_pages = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_pages + 1), leave=False):\n        params.update(\n            {\n                \"p\": str(page),\n                \"filter\": f\"(enddate='{date}')\",\n            }\n        )\n        r = requests.get(url, params=params)\n        data_text = r.text\n        data_json = demjson.decode(data_text[data_text.find(\"{\") : -1])\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = range(1, len(big_df) + 1)\n    big_df.columns = [\n        \"序号\",\n        \"一致行动人\",\n        \"股票代码\",\n        \"股东排名\",\n        \"公告日期\",\n        \"股票简称\",\n        \"持股数量\",\n        \"持股比例\",\n        \"持股数量变动\",\n        \"_\",\n        \"行业\",\n        \"_\",\n        \"_\",\n        \"数据日期\",\n        \"股票市场\",\n    ]\n    big_df[\"数据日期\"] = pd.to_datetime(big_df[\"数据日期\"], errors=\"coerce\")\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\")\n\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"一致行动人\",\n            \"股东排名\",\n            \"持股数量\",\n            \"持股比例\",\n            \"持股数量变动\",\n            \"行业\",\n            \"公告日期\",\n        ]\n    ]\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    big_df[\"持股数量\"] = pd.to_numeric(big_df[\"持股数量\"], errors=\"coerce\")\n    big_df[\"持股比例\"] = pd.to_numeric(big_df[\"持股比例\"], errors=\"coerce\")\n    big_df[\"持股数量变动\"] = pd.to_numeric(big_df[\"持股数量变动\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_yzxdr_em_df = stock_yzxdr_em(date=\"20240930\")\n    print(stock_yzxdr_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_zdhtmx_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/2/11 20:32\nDesc: 东方财富网-数据中心-重大合同-重大合同明细\nhttps://data.eastmoney.com/zdht/mx.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_zdhtmx_em(\n    start_date: str = \"20200819\", end_date: str = \"20230819\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-重大合同-重大合同明细\n    https://data.eastmoney.com/zdht/mx.html\n    :param start_date: 开始日期, eg 20200819\n    :type start_date: str\n    :param end_date: 结束日期, eg 20230819\n    :type end_date: str\n    :return: 股东大会\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(action=\"ignore\", category=FutureWarning)\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"DIM_RDATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"columns\": \"ALL\",\n        \"token\": \"894050c76af8597a853f5b408b759f5d\",\n        \"reportName\": \"RPTA_WEB_ZDHT_LIST\",\n        \"filter\": f\"\"\"(DIM_RDATE>='{\"-\".join([start_date[:4], start_date[4:6], start_date[6:]])}')\n        (DIM_RDATE<='{\"-\".join([end_date[:4], end_date[4:6], end_date[6:]])}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], axis=0, ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df[\"index\"] + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"DIM_SCODE\": \"-\",\n            \"CONTENTS\": \"-\",\n            \"CONTRACTNAME\": \"合同名称\",\n            \"CONTRACTTYPE\": \"-\",\n            \"COUNTERPARTY\": \"其他签署方\",\n            \"COUNTERPARTYREL\": \"-\",\n            \"ISABOLISHED\": \"-\",\n            \"DIM_RDATE\": \"公告日期\",\n            \"REMARK\": \"-\",\n            \"SIGNATORY\": \"签署主体\",\n            \"SIGNATORYREL\": \"与上市公司关系\",\n            \"SIGNDATE\": \"签署日期\",\n            \"SIGNEFFECT\": \"-\",\n            \"UPDATEDATE\": \"-\",\n            \"YEAR\": \"-\",\n            \"AMOUNTS\": \"合同金额\",\n            \"SECURITYCODE\": \"股票代码\",\n            \"SECURITYSHORTNAME\": \"股票简称\",\n            \"CONTRACTTYPENAME\": \"合同类型\",\n            \"SIGNATORYRELNAME\": \"签署主体-与上市公司关系\",\n            \"COUNTERPARTYRELNAME\": \"其他签署方-与上市公司关系\",\n            \"SNDYYSR\": \"上年度营业收入\",\n            \"OPERATEREVE\": \"最新财务报表的营业收入\",\n            \"RCHANGE1DC\": \"-\",\n            \"RCHANGE20DC\": \"-\",\n            \"ZSNDYYSRBL\": \"占上年度营业收入比例\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"签署主体\",\n            \"签署主体-与上市公司关系\",\n            \"其他签署方\",\n            \"其他签署方-与上市公司关系\",\n            \"合同类型\",\n            \"合同名称\",\n            \"合同金额\",\n            \"上年度营业收入\",\n            \"占上年度营业收入比例\",\n            \"最新财务报表的营业收入\",\n            \"签署日期\",\n            \"公告日期\",\n        ]\n    ]\n    big_df[\"签署日期\"] = pd.to_datetime(big_df[\"签署日期\"], errors=\"coerce\").dt.date\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    big_df[\"合同金额\"] = pd.to_numeric(big_df[\"合同金额\"], errors=\"coerce\")\n    big_df[\"上年度营业收入\"] = pd.to_numeric(big_df[\"上年度营业收入\"], errors=\"coerce\")\n    big_df[\"占上年度营业收入比例\"] = pd.to_numeric(\n        big_df[\"占上年度营业收入比例\"], errors=\"coerce\"\n    )\n    big_df[\"最新财务报表的营业收入\"] = pd.to_numeric(\n        big_df[\"最新财务报表的营业收入\"], errors=\"coerce\"\n    )\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_zdhtmx_em_df = stock_zdhtmx_em(start_date=\"20220819\", end_date=\"20230819\")\n    print(stock_zdhtmx_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_zf_pg.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/4 18:20\nDesc: 增发和配股\n东方财富网-数据中心-新股数据-增发-全部增发\nhttps://data.eastmoney.com/other/gkzf.html\n东方财富网-数据中心-新股数据-配股\nhttps://data.eastmoney.com/xg/pg/\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_qbzf_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-新股数据-增发-全部增发\n    https://data.eastmoney.com/other/gkzf.html\n    :return: 全部增发\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(action=\"ignore\", category=FutureWarning)\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"ISSUE_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_SEO_DETAIL\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"f2~01~SECURITY_CODE~NEW_PRICE\",\n        \"quoteType\": \"0\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.rename(\n        columns={\n            \"SECURITY_NAME_ABBR\": \"股票简称\",\n            \"SECURITY_CODE\": \"股票代码\",\n            \"CORRECODE\": \"增发代码\",\n            \"SEO_TYPE\": \"发行方式\",\n            \"ISSUE_NUM\": \"发行总数\",\n            \"ONLINE_ISSUE_NUM\": \"网上发行\",\n            \"ISSUE_PRICE\": \"发行价格\",\n            \"NEW_PRICE\": \"最新价\",\n            \"ISSUE_DATE\": \"发行日期\",\n            \"ISSUE_LISTING_DATE\": \"增发上市日期\",\n            \"LOCKIN_PERIOD\": \"锁定期\",\n        },\n        inplace=True,\n    )\n    big_df = big_df[\n        [\n            \"股票代码\",\n            \"股票简称\",\n            \"增发代码\",\n            \"发行方式\",\n            \"发行总数\",\n            \"网上发行\",\n            \"发行价格\",\n            \"最新价\",\n            \"发行日期\",\n            \"增发上市日期\",\n            \"锁定期\",\n        ]\n    ]\n    big_df[\"发行总数\"] = pd.to_numeric(big_df[\"发行总数\"], errors=\"coerce\")\n    big_df[\"发行价格\"] = pd.to_numeric(big_df[\"发行价格\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"发行方式\"] = big_df[\"发行方式\"].map({\"2\": \"公开增发\", \"1\": \"定向增发\"})\n    big_df[\"发行日期\"] = pd.to_datetime(big_df[\"发行日期\"], errors=\"coerce\").dt.date\n    big_df[\"增发上市日期\"] = pd.to_datetime(\n        big_df[\"增发上市日期\"], errors=\"coerce\"\n    ).dt.date\n    return big_df\n\n\ndef stock_pg_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-新股数据-配股\n    https://data.eastmoney.com/xg/pg/\n    :return: 配股\n    :rtype: pandas.DataFrame\n    \"\"\"\n    import warnings\n\n    warnings.filterwarnings(action=\"ignore\", category=FutureWarning)\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"EQUITY_RECORD_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"50000\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_IPO_ALLOTMENT\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"f2~01~SECURITY_CODE~NEW_PRICE\",\n        \"quoteType\": \"0\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.columns = [\n        \"_\",\n        \"_\",\n        \"股票代码\",\n        \"-\",\n        \"股票简称\",\n        \"配售代码\",\n        \"_\",\n        \"配股比例\",\n        \"配股价\",\n        \"配股前总股本\",\n        \"配股数量\",\n        \"配股后总股本\",\n        \"股权登记日\",\n        \"缴款起始日期\",\n        \"缴款截止日期\",\n        \"上市日\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"最新价\",\n    ]\n    big_df = big_df[\n        [\n            \"股票代码\",\n            \"股票简称\",\n            \"配售代码\",\n            \"配股数量\",\n            \"配股比例\",\n            \"配股价\",\n            \"最新价\",\n            \"配股前总股本\",\n            \"配股后总股本\",\n            \"股权登记日\",\n            \"缴款起始日期\",\n            \"缴款截止日期\",\n            \"上市日\",\n        ]\n    ]\n    big_df[\"配股比例\"] = \"10配\" + big_df[\"配股比例\"].astype(str)\n    big_df[\"配股数量\"] = pd.to_numeric(big_df[\"配股数量\"], errors=\"coerce\")\n    big_df[\"配股价\"] = pd.to_numeric(big_df[\"配股价\"], errors=\"coerce\")\n    big_df[\"最新价\"] = pd.to_numeric(big_df[\"最新价\"], errors=\"coerce\")\n    big_df[\"配股前总股本\"] = pd.to_numeric(big_df[\"配股前总股本\"], errors=\"coerce\")\n    big_df[\"配股后总股本\"] = pd.to_numeric(big_df[\"配股后总股本\"], errors=\"coerce\")\n    big_df[\"股权登记日\"] = pd.to_datetime(big_df[\"股权登记日\"], errors=\"coerce\").dt.date\n    big_df[\"缴款起始日期\"] = pd.to_datetime(\n        big_df[\"缴款起始日期\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"缴款截止日期\"] = pd.to_datetime(\n        big_df[\"缴款截止日期\"], errors=\"coerce\"\n    ).dt.date\n    big_df[\"上市日\"] = pd.to_datetime(big_df[\"上市日\"], errors=\"coerce\").dt.date\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_qbzf_em_df = stock_qbzf_em()\n    print(stock_qbzf_em_df)\n\n    stock_pg_em_df = stock_pg_em()\n    print(stock_pg_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_zh_valuation_baidu.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/5/29 23:00\nDesc: 百度股市通-A股-财务报表-估值数据\nhttps://gushitong.baidu.com/stock/ab-002044\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_zh_valuation_baidu(\n    symbol: str = \"002044\", indicator: str = \"总市值\", period: str = \"近一年\"\n) -> pd.DataFrame:\n    \"\"\"\n    百度股市通-A股-财务报表-估值数据\n    https://gushitong.baidu.com/stock/ab-002044\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: choice of {\"总市值\", \"市盈率(TTM)\", \"市盈率(静)\", \"市净率\", \"市现率\"}\n    :type indicator: str\n    :param period: choice of {\"近一年\", \"近三年\", \"近五年\", \"近十年\", \"全部\"}\n    :type period: str\n    :return: 估值数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://gushitong.baidu.com/opendata\"\n    params = {\n        \"openapi\": \"1\",\n        \"dspName\": \"iphone\",\n        \"tn\": \"tangram\",\n        \"client\": \"app\",\n        \"query\": indicator,\n        \"code\": symbol,\n        \"word\": \"\",\n        \"resource_id\": \"51171\",\n        \"market\": \"ab\",\n        \"tag\": indicator,\n        \"chart_select\": period,\n        \"industry_select\": \"\",\n        \"skip_industry\": \"1\",\n        \"finClientType\": \"pc\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(\n        data_json[\"Result\"][0][\"DisplayData\"][\"resultData\"][\"tplData\"][\"result\"][\n            \"chartInfo\"\n        ][0][\"body\"]\n    )\n    temp_df.columns = [\"date\", \"value\"]\n    temp_df[\"date\"] = pd.to_datetime(temp_df[\"date\"], errors=\"coerce\").dt.date\n    temp_df[\"value\"] = pd.to_numeric(temp_df[\"value\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_valuation_baidu_df = stock_zh_valuation_baidu(\n        symbol=\"002044\", indicator=\"总市值\", period=\"近一年\"\n    )\n    print(stock_zh_valuation_baidu_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_zh_vote_baidu.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/10/10 17:26\nDesc: 百度股市通- A 股或指数-股评-投票\nhttps://gushitong.baidu.com/index/ab-000001\n\"\"\"\n\nimport requests\nimport pandas as pd\n\n\ndef stock_zh_vote_baidu(\n    symbol: str = \"000001\", indicator: str = \"指数\"\n) -> pd.DataFrame:\n    \"\"\"\n    百度股市通- A 股或指数-股评-投票\n    https://gushitong.baidu.com/index/ab-000001\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: choice of {\"指数\", \"股票\"}\n    :type indicator: str\n    :return: 投票数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    indicator_map = {\"股票\": \"stock\", \"指数\": \"index\"}\n    url = \"https://finance.pae.baidu.com/vapi/v1/stockvoterecords\"\n    params = {\n        \"code\": symbol,\n        \"market\": \"ab\",\n        \"finance_type\": indicator_map[indicator],\n        \"select_type\": \"week\",\n        \"from_smart_app\": \"0\",\n        \"method\": \"query\",\n        \"finClientType\": \"pc\",\n    }\n    temp_list = []\n    for item_period in [\"day\", \"week\", \"month\", \"year\"]:\n        params.update({\"select_type\": item_period})\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_list.append(\n            [\n                item\n                for item in data_json[\"Result\"][\"voteRecords\"][\"voteRes\"]\n                if item[\"type\"] == item_period\n            ][0]\n        )\n    temp_df = pd.DataFrame(temp_list)\n    temp_df.columns = [\"周期\", \"-\", \"看涨\", \"看跌\", \"看涨比例\", \"看跌比例\"]\n    temp_df = temp_df[[\"周期\", \"看涨\", \"看跌\", \"看涨比例\", \"看跌比例\"]]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_vote_baidu_df = stock_zh_vote_baidu(symbol=\"000001\", indicator=\"指数\")\n    print(stock_zh_vote_baidu_df)\n"
  },
  {
    "path": "akshare/stock_feature/stock_ztb_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/11/22 21:30\nDesc: 首页-行情中心-涨停板行情-涨停股池\nhttps://quote.eastmoney.com/ztb/detail#type=ztgc\n\n涨停板行情专题为您展示了 6 个股票池，分别为：\n1. 涨停股池：包含当日当前涨停的所有A股股票(不含未中断连续一字涨停板的新股)；\n2. 昨日涨停股池：包含上一交易日收盘时涨停的所有A股股票(不含未中断连续一字涨停板的新股)；\n3. 强势股池：包含创下60日新高或近期多次涨停的A股股票；\n4. 次新股池：包含上市一年以内且中断了连续一字涨停板的A股股票；\n5. 炸板股池：包含当日触及过涨停板且当前未封板的A股股票；\n6. 跌停股池：包含当日当前跌停的所有A股股票。\n注：涨停板行情专题统计不包含ST股票及科创板股票。\n\"\"\"\n\nfrom datetime import datetime, timedelta\n\nimport pandas as pd\nimport requests\n\n\ndef stock_zt_pool_em(date: str = \"20241008\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-涨停板行情-涨停股池\n    https://quote.eastmoney.com/ztb/detail#type=ztgc\n    :param date: 交易日\n    :type date: str\n    :return: 涨停股池\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2ex.eastmoney.com/getTopicZTPool\"\n    params = {\n        \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n        \"dpt\": \"wz.ztzt\",\n        \"Pageindex\": \"0\",\n        \"pagesize\": \"10000\",\n        \"sort\": \"fbt:asc\",\n        \"date\": date,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    if data_json[\"data\"] is None:\n        return pd.DataFrame()\n    if len(data_json[\"data\"][\"pool\"]) == 0:\n        return pd.DataFrame()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"pool\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = range(1, len(temp_df) + 1)\n    temp_df.columns = [\n        \"序号\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"成交额\",\n        \"流通市值\",\n        \"总市值\",\n        \"换手率\",\n        \"连板数\",\n        \"首次封板时间\",\n        \"最后封板时间\",\n        \"封板资金\",\n        \"炸板次数\",\n        \"所属行业\",\n        \"涨停统计\",\n    ]\n    temp_df[\"涨停统计\"] = (\n        temp_df[\"涨停统计\"].apply(lambda x: dict(x)[\"days\"]).astype(str)\n        + \"/\"\n        + temp_df[\"涨停统计\"].apply(lambda x: dict(x)[\"ct\"]).astype(str)\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"涨跌幅\",\n            \"最新价\",\n            \"成交额\",\n            \"流通市值\",\n            \"总市值\",\n            \"换手率\",\n            \"封板资金\",\n            \"首次封板时间\",\n            \"最后封板时间\",\n            \"炸板次数\",\n            \"涨停统计\",\n            \"连板数\",\n            \"所属行业\",\n        ]\n    ]\n    temp_df[\"首次封板时间\"] = temp_df[\"首次封板时间\"].astype(str).str.zfill(6)\n    temp_df[\"最后封板时间\"] = temp_df[\"最后封板时间\"].astype(str).str.zfill(6)\n    temp_df[\"最新价\"] = temp_df[\"最新价\"] / 1000\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"流通市值\"] = pd.to_numeric(temp_df[\"流通市值\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"封板资金\"] = pd.to_numeric(temp_df[\"封板资金\"], errors=\"coerce\")\n    temp_df[\"炸板次数\"] = pd.to_numeric(temp_df[\"炸板次数\"], errors=\"coerce\")\n    temp_df[\"连板数\"] = pd.to_numeric(temp_df[\"连板数\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_zt_pool_previous_em(date: str = \"20240415\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-涨停板行情-昨日涨停股池\n    https://quote.eastmoney.com/ztb/detail#type=zrzt\n    :param date: 交易日\n    :type date: str\n    :return: 昨日涨停股池\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2ex.eastmoney.com/getYesterdayZTPool\"\n    params = {\n        \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n        \"dpt\": \"wz.ztzt\",\n        \"Pageindex\": \"0\",\n        \"pagesize\": \"5000\",\n        \"sort\": \"zs:desc\",\n        \"date\": date,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    if data_json[\"data\"] is None:\n        return pd.DataFrame()\n    if len(data_json[\"data\"][\"pool\"]) == 0:\n        return pd.DataFrame()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"pool\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = range(1, len(temp_df) + 1)\n    temp_df.columns = [\n        \"序号\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最新价\",\n        \"涨停价\",\n        \"涨跌幅\",\n        \"成交额\",\n        \"流通市值\",\n        \"总市值\",\n        \"换手率\",\n        \"振幅\",\n        \"涨速\",\n        \"昨日封板时间\",\n        \"昨日连板数\",\n        \"所属行业\",\n        \"涨停统计\",\n    ]\n    temp_df[\"涨停统计\"] = (\n        temp_df[\"涨停统计\"].apply(lambda x: dict(x)[\"days\"]).astype(str)\n        + \"/\"\n        + temp_df[\"涨停统计\"].apply(lambda x: dict(x)[\"ct\"]).astype(str)\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"涨跌幅\",\n            \"最新价\",\n            \"涨停价\",\n            \"成交额\",\n            \"流通市值\",\n            \"总市值\",\n            \"换手率\",\n            \"涨速\",\n            \"振幅\",\n            \"昨日封板时间\",\n            \"昨日连板数\",\n            \"涨停统计\",\n            \"所属行业\",\n        ]\n    ]\n    temp_df[\"最新价\"] = temp_df[\"最新价\"] / 1000\n    temp_df[\"涨停价\"] = temp_df[\"涨停价\"] / 1000\n    temp_df[\"昨日封板时间\"] = temp_df[\"昨日封板时间\"].astype(str).str.zfill(6)\n    return temp_df\n\n\ndef stock_zt_pool_strong_em(date: str = \"20241231\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-涨停板行情-强势股池\n    https://quote.eastmoney.com/ztb/detail#type=qsgc\n    :param date: 交易日\n    :type date: str\n    :return: 强势股池\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2ex.eastmoney.com/getTopicQSPool\"\n    params = {\n        \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n        \"dpt\": \"wz.ztzt\",\n        \"Pageindex\": \"0\",\n        \"pagesize\": \"5000\",\n        \"sort\": \"zdp:desc\",\n        \"date\": date,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    if data_json[\"data\"] is None:\n        return pd.DataFrame()\n    if len(data_json[\"data\"][\"pool\"]) == 0:\n        return pd.DataFrame()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"pool\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = range(1, len(temp_df) + 1)\n    temp_df.columns = [\n        \"序号\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最新价\",\n        \"涨停价\",\n        \"_\",\n        \"涨跌幅\",\n        \"成交额\",\n        \"流通市值\",\n        \"总市值\",\n        \"换手率\",\n        \"是否新高\",\n        \"入选理由\",\n        \"量比\",\n        \"涨速\",\n        \"涨停统计\",\n        \"所属行业\",\n    ]\n    temp_df[\"涨停统计\"] = (\n        temp_df[\"涨停统计\"].apply(lambda x: dict(x)[\"days\"]).astype(str)\n        + \"/\"\n        + temp_df[\"涨停统计\"].apply(lambda x: dict(x)[\"ct\"]).astype(str)\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"涨跌幅\",\n            \"最新价\",\n            \"涨停价\",\n            \"成交额\",\n            \"流通市值\",\n            \"总市值\",\n            \"换手率\",\n            \"涨速\",\n            \"是否新高\",\n            \"量比\",\n            \"涨停统计\",\n            \"入选理由\",\n            \"所属行业\",\n        ]\n    ]\n    temp_df[\"最新价\"] = temp_df[\"最新价\"] / 1000\n    temp_df[\"涨停价\"] = temp_df[\"涨停价\"] / 1000\n    explained_map = {1: \"60日新高\", 2: \"近期多次涨停\", 3: \"60日新高且近期多次涨停\"}\n    temp_df[\"入选理由\"] = temp_df[\"入选理由\"].apply(lambda x: explained_map[x])\n    temp_df[\"是否新高\"] = temp_df[\"是否新高\"].apply(lambda x: \"是\" if x == 1 else \"否\")\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"涨停价\"] = pd.to_numeric(temp_df[\"涨停价\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"流通市值\"] = pd.to_numeric(temp_df[\"流通市值\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"涨速\"] = pd.to_numeric(temp_df[\"涨速\"], errors=\"coerce\")\n    temp_df[\"量比\"] = pd.to_numeric(temp_df[\"量比\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_zt_pool_sub_new_em(date: str = \"20241231\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-涨停板行情-次新股池\n    https://quote.eastmoney.com/ztb/detail#type=cxgc\n    :param date: 交易日\n    :type date: str\n    :return: 次新股池\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://push2ex.eastmoney.com/getTopicCXPooll\"\n    params = {\n        \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n        \"dpt\": \"wz.ztzt\",\n        \"Pageindex\": \"0\",\n        \"pagesize\": \"5000\",\n        \"sort\": \"ods:asc\",\n        \"date\": date,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    if len(data_json[\"data\"][\"pool\"]) == 0:\n        return pd.DataFrame()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"pool\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = range(1, len(temp_df) + 1)\n    temp_df.columns = [\n        \"序号\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最新价\",\n        \"涨停价\",\n        \"_\",\n        \"涨跌幅\",\n        \"成交额\",\n        \"流通市值\",\n        \"总市值\",\n        \"转手率\",\n        \"开板几日\",\n        \"开板日期\",\n        \"上市日期\",\n        \"_\",\n        \"是否新高\",\n        \"涨停统计\",\n        \"所属行业\",\n    ]\n    temp_df[\"涨停统计\"] = (\n        temp_df[\"涨停统计\"].apply(lambda x: dict(x)[\"days\"]).astype(str)\n        + \"/\"\n        + temp_df[\"涨停统计\"].apply(lambda x: dict(x)[\"ct\"]).astype(str)\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"涨跌幅\",\n            \"最新价\",\n            \"涨停价\",\n            \"成交额\",\n            \"流通市值\",\n            \"总市值\",\n            \"转手率\",\n            \"开板几日\",\n            \"开板日期\",\n            \"上市日期\",\n            \"是否新高\",\n            \"涨停统计\",\n            \"所属行业\",\n        ]\n    ]\n    temp_df[\"最新价\"] = temp_df[\"最新价\"] / 1000\n    temp_df[\"涨停价\"] = temp_df[\"涨停价\"] / 1000\n    temp_df.loc[temp_df[\"涨停价\"] > 100000, \"涨停价\"] = pd.NA\n    temp_df[\"开板日期\"] = pd.to_datetime(temp_df[\"开板日期\"], format=\"%Y%m%d\").dt.date\n    temp_df[\"上市日期\"] = pd.to_datetime(temp_df[\"上市日期\"], format=\"%Y%m%d\").dt.date\n    temp_df.loc[temp_df[\"上市日期\"] == 0, \"上市日期\"] = pd.NaT\n    temp_df[\"是否新高\"] = temp_df[\"是否新高\"].apply(lambda x: \"是\" if x == 1 else \"否\")\n    return temp_df\n\n\ndef stock_zt_pool_zbgc_em(date: str = \"20241011\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-涨停板行情-炸板股池\n    https://quote.eastmoney.com/ztb/detail#type=zbgc\n    :param date: 交易日\n    :type date: str\n    :return: 炸板股池\n    :rtype: pandas.DataFrame\n    \"\"\"\n    thirty_days_ago = datetime.now() - timedelta(days=30)\n    thirty_days_ago_str = thirty_days_ago.strftime(\"%Y%m%d\")\n    if int(date) < int(thirty_days_ago_str):\n        raise ValueError(\"炸板股池只能获取最近 30 个交易日的数据\")\n\n    url = \"https://push2ex.eastmoney.com/getTopicZBPool\"\n    params = {\n        \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n        \"dpt\": \"wz.ztzt\",\n        \"Pageindex\": \"0\",\n        \"pagesize\": \"5000\",\n        \"sort\": \"fbt:asc\",\n        \"date\": date,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    if data_json[\"data\"] is None:\n        return pd.DataFrame()\n    if len(data_json[\"data\"][\"pool\"]) == 0:\n        return pd.DataFrame()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"pool\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = range(1, len(temp_df) + 1)\n    temp_df.columns = [\n        \"序号\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最新价\",\n        \"涨停价\",\n        \"涨跌幅\",\n        \"成交额\",\n        \"流通市值\",\n        \"总市值\",\n        \"换手率\",\n        \"首次封板时间\",\n        \"炸板次数\",\n        \"振幅\",\n        \"涨速\",\n        \"涨停统计\",\n        \"所属行业\",\n    ]\n    temp_df[\"涨停统计\"] = (\n        temp_df[\"涨停统计\"].apply(lambda x: dict(x)[\"days\"]).astype(str)\n        + \"/\"\n        + temp_df[\"涨停统计\"].apply(lambda x: dict(x)[\"ct\"]).astype(str)\n    )\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"涨跌幅\",\n            \"最新价\",\n            \"涨停价\",\n            \"成交额\",\n            \"流通市值\",\n            \"总市值\",\n            \"换手率\",\n            \"涨速\",\n            \"首次封板时间\",\n            \"炸板次数\",\n            \"涨停统计\",\n            \"振幅\",\n            \"所属行业\",\n        ]\n    ]\n    temp_df[\"最新价\"] = temp_df[\"最新价\"] / 1000\n    temp_df[\"涨停价\"] = temp_df[\"涨停价\"] / 1000\n    temp_df[\"首次封板时间\"] = temp_df[\"首次封板时间\"].astype(str).str.zfill(6)\n    return temp_df\n\n\ndef stock_zt_pool_dtgc_em(date: str = \"20241011\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-行情中心-涨停板行情-跌停股池\n    https://quote.eastmoney.com/ztb/detail#type=dtgc\n    :param date: 交易日\n    :type date: str\n    :return: 跌停股池\n    :rtype: pandas.DataFrame\n    \"\"\"\n    thirty_days_ago = datetime.now() - timedelta(days=30)\n    thirty_days_ago_str = thirty_days_ago.strftime(\"%Y%m%d\")\n    if int(date) < int(thirty_days_ago_str):\n        raise ValueError(\"跌停股池只能获取最近 30 个交易日的数据\")\n\n    url = \"https://push2ex.eastmoney.com/getTopicDTPool\"\n    params = {\n        \"ut\": \"7eea3edcaed734bea9cbfc24409ed989\",\n        \"dpt\": \"wz.ztzt\",\n        \"Pageindex\": \"0\",\n        \"pagesize\": \"10000\",\n        \"sort\": \"fund:asc\",\n        \"date\": date,\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    if len(data_json[\"data\"][\"pool\"]) == 0:\n        return pd.DataFrame()\n    temp_df = pd.DataFrame(data_json[\"data\"][\"pool\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = range(1, len(temp_df) + 1)\n    temp_df.columns = [\n        \"序号\",\n        \"代码\",\n        \"_\",\n        \"名称\",\n        \"最新价\",\n        \"涨跌幅\",\n        \"成交额\",\n        \"流通市值\",\n        \"总市值\",\n        \"动态市盈率\",\n        \"换手率\",\n        \"封单资金\",\n        \"最后封板时间\",\n        \"板上成交额\",\n        \"连续跌停\",\n        \"开板次数\",\n        \"所属行业\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"涨跌幅\",\n            \"最新价\",\n            \"成交额\",\n            \"流通市值\",\n            \"总市值\",\n            \"动态市盈率\",\n            \"换手率\",\n            \"封单资金\",\n            \"最后封板时间\",\n            \"板上成交额\",\n            \"连续跌停\",\n            \"开板次数\",\n            \"所属行业\",\n        ]\n    ]\n    temp_df[\"最新价\"] = temp_df[\"最新价\"] / 1000\n    temp_df[\"最后封板时间\"] = temp_df[\"最后封板时间\"].astype(str).str.zfill(6)\n    temp_df[\"涨跌幅\"] = pd.to_numeric(temp_df[\"涨跌幅\"], errors=\"coerce\")\n    temp_df[\"最新价\"] = pd.to_numeric(temp_df[\"最新价\"], errors=\"coerce\")\n    temp_df[\"成交额\"] = pd.to_numeric(temp_df[\"成交额\"], errors=\"coerce\")\n    temp_df[\"流通市值\"] = pd.to_numeric(temp_df[\"流通市值\"], errors=\"coerce\")\n    temp_df[\"总市值\"] = pd.to_numeric(temp_df[\"总市值\"], errors=\"coerce\")\n    temp_df[\"动态市盈率\"] = pd.to_numeric(temp_df[\"动态市盈率\"], errors=\"coerce\")\n    temp_df[\"换手率\"] = pd.to_numeric(temp_df[\"换手率\"], errors=\"coerce\")\n    temp_df[\"封单资金\"] = pd.to_numeric(temp_df[\"封单资金\"], errors=\"coerce\")\n    temp_df[\"板上成交额\"] = pd.to_numeric(temp_df[\"板上成交额\"], errors=\"coerce\")\n    temp_df[\"连续跌停\"] = pd.to_numeric(temp_df[\"连续跌停\"], errors=\"coerce\")\n    temp_df[\"开板次数\"] = pd.to_numeric(temp_df[\"开板次数\"], errors=\"coerce\")\n    temp_df[\"开板次数\"] = pd.to_numeric(temp_df[\"开板次数\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_zt_pool_em_df = stock_zt_pool_em(date=\"20241008\")\n    print(stock_zt_pool_em_df)\n\n    stock_zt_pool_previous_em_df = stock_zt_pool_previous_em(date=\"20240415\")\n    print(stock_zt_pool_previous_em_df)\n\n    stock_zt_pool_strong_em_df = stock_zt_pool_strong_em(date=\"20241231\")\n    print(stock_zt_pool_strong_em_df)\n\n    stock_zt_pool_sub_new_em_df = stock_zt_pool_sub_new_em(date=\"20241231\")\n    print(stock_zt_pool_sub_new_em_df)\n\n    stock_zt_pool_zbgc_em_df = stock_zt_pool_zbgc_em(date=\"20241011\")\n    print(stock_zt_pool_zbgc_em_df)\n\n    stock_zt_pool_dtgc_em_df = stock_zt_pool_dtgc_em(date=\"20241011\")\n    print(stock_zt_pool_dtgc_em_df)\n"
  },
  {
    "path": "akshare/stock_feature/ths.js",
    "content": "var TOKEN_SERVER_TIME = 1572845499.629;\nfunction v_cookie (r, n, t, e, a) {\n    var u = n[0],\n        c = n[1],\n        v = a[0],\n        s = t[0],\n        f = t[1],\n        l = r[0],\n        d = hr(a[1], e[0], t[2]),\n        p = t[3],\n        h = e[1],\n        g = yr(a[2], a[3], e[2]),\n        m = yr(a[4], r[1], t[4]),\n        w = r[2],\n        I = a[5],\n        _ = a[6],\n        y = a[7],\n        E = hr(n[2], r[3], r[4]),\n        A = t[5],\n        C = e[3],\n        b = e[4],\n        B = t[6],\n        R = a[8],\n        T = a[9],\n        S = n[3],\n        k = t[7],\n        x = t[8],\n        O = a[10],\n        L = n[4],\n        M = n[5],\n        N = a[11],\n        P = e[5],\n        j = hr(n[6], e[6], t[9], r[5]),\n        D = t[10],\n        W = e[7],\n        $ = r[6],\n        F = yr(r[7], t[11], e[8], n[7]),\n        X = r[8],\n        H = t[12],\n        K = r[9],\n        U = n[8],\n        V = e[9],\n        Y = r[10],\n        J = e[10],\n        q = r[11],\n        Q = a[12],\n        Z = n[9],\n        G = t[13],\n        z = t[14],\n        rr = t[15],\n        nr = n[10],\n        tr = a[13],\n        er = a[14],\n        ar = e[11],\n        or = r[12],\n        ir = yr(t[16], r[13], r[14], r[15]),\n        ur = t[17],\n        cr = t[18];\n    function vr () {\n        var r = arguments[n[11]];\n        return r.split(n[12]).reverse().join(e[12])\n    }\n    var sr = [new e[13](hr(a[15], n[13], a[16])), new e[13](a[17])];\n    function fr () {\n        var n = arguments[a[18]];\n        if (!n) return a[19];\n        for (var o = t[19], i = e[14], u = e[15]; u < n.length; u++)\n        {\n            var c = n.charCodeAt(u),\n                v = c ^ i;\n            i = c,\n                o += r[16].fromCharCode(v)\n        }\n        return o\n    }\n    var lr = '',\n        dr; !\n            function (o) {\n                var i = e[18],\n                    c = e[19];\n                o[e[20]] = a[21];\n                function v (t, a, o, i, u) {\n                    var c, v, s;\n                    c = v = s = r;\n                    var f, l, d;\n                    f = l = d = n;\n                    var p, h, g;\n                    p = h = g = e;\n                    var m = t + g[21] + a;\n                    i && (m += l[15] + i),\n                        u && (m += h[22] + u),\n                        o && (m += v[17] + o),\n                        l[14][g[23]] = m\n                }\n                o[e[24]] = l;\n                function s (t, e, a) {\n                    var o = n[16];\n                    this.setCookie(t, r[18], i + o + c, e, a)\n                }\n                o[t[22]] = f;\n                function f (o) {\n                    var i = vr(e[25], a[22]),\n                        c = a[23][n[17]],\n                        v = u + i + o + t[23],\n                        s = '';\n                    if (s == -r[19])\n                    {\n                        if (v = o + t[23], c.substr(a[24], v.length) != v) return;\n                        s = a[24]\n                    }\n                    var f = s + v[r[20]],\n                        l = '';\n                    return l == -e[26] && (l = c[t[24]])\n\n                }\n                o[e[27]] = v;\n                function l () {\n                    var r, t, a;\n                    r = t = a = e;\n                    var i, u, c;\n                    i = u = c = n;\n                    var v = u[18];\n                    this.setCookie(v, a[28]),\n                        this.getCookie(v) || (o[i[19]] = u[20]),\n                        this.delCookie(v)\n                }\n                o[n[21]] = s\n            }(dr || (dr = {}));\n    var pr;\n    function hr () {\n        var r = arguments[a[25]];\n        if (!r) return a[19];\n        for (var e = a[19], o = t[25], i = n[22], u = t[18]; u < r.length; u++)\n        {\n            var c = r.charCodeAt(u);\n            i = (i + t[26]) % o.length,\n                c ^= o.charCodeAt(i),\n                e += String.fromCharCode(c)\n        }\n        return e\n    } !\n        function (o) {\n            var i, u, d;\n            i = u = d = a;\n            var p, h, g;\n            p = h = g = t;\n            var m, w, I;\n            m = w = I = r;\n            var _, y, E;\n            _ = y = E = n;\n            var b, B, R;\n            b = B = R = e;\n            var T = B[29],\n                S = y[23],\n                k = m[22],\n                x = w[0],\n                O = E[24],\n                L = (C, Ar, R[30]),\n                M = b[31],\n                N = T + S,\n                P = p[28],\n                j,\n                W = m[23][y[25]],\n                $,\n                F;\n            function X (r) {\n                return function () {\n                    F.appendChild(j),\n                        j.addBehavior(u[26]),\n                        j.load(N);\n                    var n = r();\n                    return F.removeChild(j),\n                        n\n                }\n            }\n            function H () {\n                var r = A;\n                r = D;\n                try\n                {\n                    return !!(N in B[32] && b[32][N])\n                } catch (n)\n                {\n                    return void B[15]\n                }\n            }\n            function K (r) {\n                return P ? G(r) : j ? Y(r) : void _[26]\n            }\n            function U () {\n                if (P = H(), P) j = _[27][N];\n                else if (W[k + c][I[24]]) try\n                {\n                    $ = new ActiveXObject(vr(I[25], y[28], w[26])),\n                        $.open(),\n                        $.write(y[29]),\n                        $.close(),\n                        F = $.w[B[33]][I[27]][_[30]],\n                        j = F.createElement(I[28])\n                } catch (r)\n                {\n                    j = W.createElement(N),\n                        F = W[vr(I[29], d[27])] || W.getElementsByTagName(b[17])[I[27]] || W[m[30]]\n                }\n            }\n            o[w[31]] = U;\n            function V (r, n) {\n                var t = J;\n                if (void 0 === n) return Z(r);\n                if (t = sr, P) z(r, n);\n                else\n                {\n                    if (!j) return void B[15];\n                    Q(r, n)\n                }\n            }\n            o[v + x] = V;\n            function Y (r) {\n                X(function () {\n                    return r = J(r),\n                        j.getAttribute(r)\n                })()\n            }\n            function J (r) {\n                var n = z;\n                n = v;\n                var t = vr(Ir, w[32]),\n                    e = new y[31](t + O + s + L, b[31]);\n                return r.replace(new B[13](d[28]), b[34]).replace(e, p[29])\n            }\n            function q (r) {\n                try\n                {\n                    j.removeItem(r)\n                } catch (n) { }\n            }\n            o[M + f + l] = K;\n            function Q (r, n) {\n                var t = G;\n                t = cr,\n                    X(function () {\n                        var t = M;\n                        r = J(r),\n                            t = K;\n                        try\n                        {\n                            j.setAttribute(r, n),\n                                j.save(N)\n                        } catch (e) { }\n                    })()\n            }\n            function Z (r) {\n                var n, t, e;\n                if (n = t = e = g, P) q(r);\n                else\n                {\n                    if (!j) return void t[18];\n                    rr(r)\n                }\n            }\n            function G (r) {\n                try\n                {\n                    return j.getItem(r)\n                } catch (n)\n                {\n                    return y[20]\n                }\n            }\n            o[fr(w[33], p[30], R[35])] = Z;\n            function z (r, n) {\n                try\n                {\n                    j.setItem(r, n)\n                } catch (t) { }\n            }\n            function rr (r) {\n                X(function () {\n                    r = J(r),\n                        j.removeAttribute(r),\n                        j.save(N)\n                })()\n            }\n        }(pr || (pr = {}));\n    var gr = function () {\n        var o, i, u;\n        o = i = u = e;\n        var c, v, s;\n        c = v = s = a;\n        var f, l, g;\n        f = l = g = n;\n        var m, w, I;\n        m = w = I = t;\n        var _, E, A;\n        _ = E = A = r;\n        var C = yr(Cr, U, _[34]),\n            b = vr(A[35], m[31]),\n            R = hr(g[32], c[29], i[36]),\n            T = hr(l[33], g[34], i[37], tr);\n        function S (r) {\n            this[m[32]] = r;\n            for (var n = o[15], t = r[i[38]]; t > n; n++) this[n] = i[15]\n        }\n        return S[d + p + C][b + h] = function () {\n            for (var r = this[vr(h, E[36], E[37])], n = [], t = -I[26], e = o[15], a = r[A[20]]; a > e; e++) for (var u = this[e], f = r[e], d = t += f; n[d] = u & parseInt(v[30], l[35]), --f != s[24];)--d,\n                u >>= parseInt(i[39], c[31]);\n            return n\n        },\n            S[vr(w[33], v[32])][_[38]] = function (r) {\n                var n = dr,\n                    t = this[vr(y, l[36], A[39])],\n                    e = f[26];\n                n = B;\n                for (var a = v[24], o = t[l[37]]; o > a; a++)\n                {\n                    var i = t[a],\n                        u = l[26];\n                    do u = (u << parseInt(R + T, g[35])) + r[e++];\n                    while (--i > w[18]);\n                    this[a] = u >>> w[18]\n                }\n            },\n            S\n    }(),\n        mr; !\n            function (o) {\n                var i, u, c;\n                i = u = c = n;\n                var v, s, f;\n                v = s = f = e;\n                var l, d, p;\n                l = d = p = a;\n                var h, w, I;\n                h = w = I = r;\n                var _, y, E;\n                _ = y = E = t;\n                var A = y[34],\n                    C = (nr, U, h[40]),\n                    b = p[25];\n                function B (r) {\n                    for (var n = y[35], t = f[15], e = r[vr(c[38], I[41], H)], a = []; e > t;)\n                    {\n                        var o = k[r.charAt(t++)] << parseInt(g + A, d[31]) | k[r.charAt(t++)] << parseInt(n + m, h[42]) | k[r.charAt(t++)] << parseInt(I[43], i[35]) | k[r.charAt(t++)];\n                        a.push(o >> parseInt(_[36], h[42]), o >> l[31] & parseInt(u[39], i[40]), o & parseInt(d[30], c[35]))\n                    }\n                    return a\n                }\n                function T (r) {\n                    for (var n = (O, R, p[24]), t = I[27], e = r[E[24]]; e > t; t++) n = (n << E[37]) - n + r[t];\n                    return n & parseInt(E[38], p[33])\n                }\n                for (var S = s[40], k = {},\n                    x = s[15]; x < parseInt(I[44], l[34]); x++) k[S.charAt(x)] = x;\n                function L (r) {\n                    var n = B(r),\n                        t = n[u[26]];\n                    if (t != b) return error = yr(V, u[41], s[41], v[42]),\n                        void 0;\n                    var e = n[s[26]],\n                        a = [];\n                    return P(n, +_[39], a, +_[18], e),\n                        T(a) == e ? a : void 0\n                }\n                function M (r) {\n                    var n = T(r),\n                        t = [b, n];\n                    return P(r, +l[24], t, +p[25], n),\n                        N(t)\n                }\n                function N (r) {\n                    var n, t, e;\n                    n = t = e = f;\n                    var a, o, u;\n                    a = o = u = y;\n                    var c, v, s;\n                    c = v = s = h;\n                    var d, p, g;\n                    d = p = g = l;\n                    var m, w, I;\n                    m = w = I = i;\n                    for (var _ = m[42], E = d[24], A = r[c[20]], b = []; A > E;)\n                    {\n                        var B = r[E++] << parseInt(fr(Z, d[35]), o[39]) | r[E++] << g[31] | r[E++];\n                        b.push(S.charAt(B >> parseInt(m[43], t[43])), S.charAt(B >> parseInt(p[36], o[40]) & parseInt(I[44], I[45])), S.charAt(B >> n[44] & parseInt(_ + C, n[42])), S.charAt(B & parseInt(fr(d[37], c[45], or), a[41])))\n                    }\n                    return b.join(o[19])\n                }\n                function P (r, n, t, e, a) {\n                    var o, i, u;\n                    o = i = u = w;\n                    var c, v, s;\n                    c = v = s = E;\n                    for (var f = r[v[24]]; f > n;) t[e++] = r[n++] ^ a & parseInt(u[46], s[42]),\n                        a = ~(a * parseInt(v[43], v[40]))\n                }\n                o[E[44]] = N,\n                    o[_[45]] = B,\n                    o[v[45]] = M,\n                    o[y[46]] = L\n            }(mr || (mr = {}));\n    var wr; !\n        function (o) {\n            var i = a[38],\n                u = r[47],\n                c = t[47],\n                v = vr(n[46], a[39], a[40]),\n                s = e[46],\n                f = e[47],\n                l = a[41],\n                d = a[42];\n            function p (o) {\n                var i = a[43],\n                    u = vr(n[47], e[48], n[48]),\n                    c = {},\n                    v = function (o, c) {\n                        var s, f, l, d;\n                        for (c = c.replace(n[49], n[12]), c = c.substring(e[26], c[e[38]] - e[26]), s = c.split(e[49]), l = a[24]; l < s[yr(v, sr, t[48])]; l++) if (f = s[l].split(n[50]), f && !(f[a[44]] < t[39]))\n                        {\n                            for (d = n[35]; d < f[r[20]]; d++) f[n[11]] = f[n[11]] + r[48] + f[d];\n                            f[n[26]] = new a[45](r[49]).test(f[n[26]]) ? f[e[15]].substring(r[19], f[e[15]][a[44]] - n[11]) : f[n[26]],\n                                f[n[11]] = new r[50](i + u + w).test(f[n[11]]) ? f[e[26]].substring(t[26], f[r[19]][n[37]] - t[26]) : f[a[18]],\n                                o[f[r[27]]] = f[n[11]]\n                        }\n                        return o\n                    };\n                return new a[45](I + _).test(o) && (c = v(c, o)),\n                    c\n            }\n            function h (n) {\n                for (var t = [], e = a[24]; e < n[r[20]]; e++) t.push(n.charCodeAt(e));\n                return t\n            }\n            function g (o) {\n                var u = a[46];\n                if (typeof o === vr(O, a[47], or) && o[a[48]]) try\n                {\n                    var c = parseInt(o[a[48]]);\n                    switch (c)\n                    {\n                        case parseInt(i + u, t[42]): break;\n                        case parseInt(yr(t[49], r[51], e[50]), e[43]): top[t[50]][n[51]] = o[e[51]];\n                            break;\n                        case parseInt(yr(a[25], j, e[52]), n[52]): top[n[53]][t[51]] = o[t[52]]\n                    }\n                } catch (v) { }\n            }\n            function m (r, n, t) {\n\n            }\n            function L () {\n                var e, a, o;\n                e = a = o = r;\n                var i, u, c;\n                i = u = c = n;\n                var v, s, f;\n                v = s = f = t;\n                var l = f[53],\n                    d = c[54],\n                    p = new e[52];\n                return typeof TOKEN_SERVER_TIME == y + l + d ? s[18] : (time = parseInt(TOKEN_SERVER_TIME), time)\n            }\n            function M () {\n                var o = new t[54];\n                try\n                {\n                    return time = n[2].now(),\n                        time / parseInt(fr(a[50], a[51], r[53]), t[40]) >>> e[15]\n                } catch (i)\n                {\n                    return time = o.getTime(),\n                        time / parseInt(e[53], a[25]) >>> r[27]\n                }\n            }\n            function N (r) {\n                for (var a = t[18], o = r[t[24]] - n[11]; o >= e[15]; o--) a = a << e[26] | +r[o];\n                return a\n            }\n            function P (a) {\n                var o = new r[50](n[55]);\n                if (K(a)) return a;\n                var i = o.test(a) ? -e[54] : -t[39],\n                    u = a.split(r[54]);\n                return u.slice(i).join(fr(n[56], t[55], E))\n            }\n            function j (t) {\n                for (var o = n[26], i = e[15], u = t[vr(r[55], a[52], D)]; u > i; i++) o = (o << r[56]) - o + t.charCodeAt(i),\n                    o >>>= n[26];\n                return o\n            }\n            function W (n, o) {\n                var i = new a[45](t[56], yr(r[57], $, t[57], r[58])),\n                    u = new a[45](t[58]);\n                if (n)\n                {\n                    var c = n.match(i);\n                    if (c)\n                    {\n                        var v = c[e[26]];\n                        return o && u.test(v) && (v = v.split(t[59]).pop().split(r[48])[e[15]]),\n                            v\n                    }\n                }\n            }\n            function $ (o) {\n                var i = n[57],\n                    u = vr(e[55], e[56]),\n                    f = e[4];\n                if (!(o > t[60]))\n                {\n                    o = o || a[24];\n                    var l = parseInt(E + c + A, r[42]),\n                        d = n[14].createElement(e[57]);\n                    d[r[59]] = n[58] + parseInt((new a[53]).getTime() / l) + r[60],\n                        d[r[61]] = function () {\n                            var n = a[46];\n                            cr = r[19],\n                                setTimeout(function () {\n                                    $(++o)\n                                },\n                                    o * parseInt(C + n, a[33]))\n                        },\n                        d[t[61]] = d[hr(a[54], a[55], t[62])] = function () {\n                            var a = n[59];\n                            this[i + v + u + b] && this[e[58]] !== n[60] && this[s + B + a + f] !== e[59] && this[t[63]] !== n[61] || (cr = e[15], d[hr(N, r[62], n[62], e[25])] = d[t[64]] = r[63])\n                        },\n                        e[60][e[61]].appendChild(d)\n                }\n            }\n            function F () {\n                var r = a[56];\n                return Math.random() * parseInt(R + T + f + r, t[42]) >>> n[26]\n            }\n            function X (r) {\n                var e = new n[31](fr(t[65], t[66], a[57]), yr(c, n[63], t[57]));\n                if (r)\n                {\n                    var o = r.match(e);\n                    return o\n                }\n            }\n            o[S + k] = p,\n                o[r[64]] = $,\n                o[t[67]] = g,\n                o[t[68]] = h,\n                o[t[69]] = j,\n                o[t[70]] = F,\n                o[r[65]] = K,\n                o[x + l] = P,\n                o[t[71]] = W,\n                o[t[72]] = X,\n                o[hr(r[66], t[73], r[67], C)] = N,\n                o[t[74]] = M,\n                o[d + O] = L;\n            function K (n) {\n                return new r[50](t[75]).test(n)\n            }\n            o[r[68]] = m\n        }(wr || (wr = {}));\n    var Ir; !\n        function (o) {\n            var i = t[76],\n                u = t[77],\n                c = n[65],\n                v = t[78],\n                s = a[24],\n                f = n[26],\n                l = t[18],\n                d = t[18],\n                p = e[15],\n                h = a[24],\n                g = r[69],\n                m = '';\n            wr.eventBind(e[60], n[67], E),\n                wr.eventBind(r[71], t[79], E),\n                wr.eventBind(t[20], hr(e[64], A, a[59]), b),\n                wr.eventBind(e[60], r[72], y);\n            function w () {\n                return f\n            }\n            function I (r) {\n                f++\n            }\n            function _ () {\n                return {\n                    x: p,\n                    y: h,\n                    trusted: g\n                }\n            }\n            function y (r) {\n                d++\n            }\n            function E (r) {\n                s++\n            }\n            function C () {\n                return l\n            }\n            function b (r) {\n                var o, i, u;\n                o = i = u = n;\n                var c, s, f;\n                c = s = f = t;\n                var d, m, w;\n                d = m = w = e;\n                var I, _, y;\n                I = _ = y = a;\n                var E = I[60],\n                    A = d[65];\n                l++ ,\n                    g = void 0 == r[E + A + v] || r[yr(f[80], s[81], i[68])],\n                    p = r[s[82]],\n                    h = r[c[83]]\n            }\n            function B () {\n                return d\n            }\n            function R () {\n                return s\n            }\n            o[r[73]] = R,\n                o[a[61]] = w,\n                o[fr(a[62], n[69])] = C,\n                o[n[70]] = B,\n                o[r[74]] = _\n        }(Ir || (Ir = {}));\n    var _r; !\n        function (u) {\n            var v = fr(n[71], t[84]),\n                s = r[75],\n                f = yr(dr, n[72], e[66], $),\n                l = r[76],\n                d = e[67],\n                p = r[77],\n                h = hr(dr, r[78], a[63], n[73]),\n                g = r[79],\n                m = n[74];\n            BROWSER_LIST = {\n\n            };\n            function w () {\n                var t, e, a;\n                t = e = a = r;\n                var o, i, u;\n                o = i = u = n;\n                return wr.booleanToDecimal(c)\n            }\n            function I (t) {\n                for (var o = n[26]; o < y[e[38]]; o++)\n                {\n                    var i = y[o][r[94]];\n                    if (t.test(i)) return !a[24]\n                }\n                return !a[18]\n            }\n            function E (t) {\n\n            }\n            function A () {\n                return a[73]\n            }\n\n            function B () {\n                return n[20]\n            }\n\n            function T () {\n                return I(new t[93](r[96]))\n            }\n            function S () {\n                return I(new a[45](t[98], r[97]))\n            }\n            function k () {\n                for (var r in BROWSER_LIST) if (BROWSER_LIST.hasOwnProperty(r))\n                {\n                    var n = BROWSER_LIST[r];\n                    if (n()) return + r.substr(a[18])\n                }\n                return e[15]\n            }\n            function x () {\n                var n, a, o;\n                n = a = o = r;\n                var i, u, c;\n                i = u = c = t;\n                var v, s, f;\n                v = s = f = e;\n                var l = s[75],\n                    d = s[76];\n                return I(new u[93](o[98], v[71])) || E(l + F + d + X)\n            }\n            function O () {\n\n            }\n            function L () {\n                var r, n, t;\n                r = n = t = a;\n                var o, i, u;\n                o = i = u = e;\n                var c = l;\n                return c = p\n            }\n            function M () {\n                var r, n, a;\n                r = n = a = t;\n                var o, i, u;\n                o = i = u = e;\n                var c;\n                try\n                {\n                    c = i[60].createElement(a[99]).getContext(i[78])\n                } catch (v) { }\n                return !!c\n            }\n\n\n            function J () {\n                var t, e, o;\n                t = e = o = n;\n                var i, u, c;\n                i = u = c = a;\n                var v, s, f;\n                return v = s = f = r,\n                    -parseInt(s[100], c[31]) === (new e[2]).getTimezoneOffset()\n            }\n\n            function Q () {\n                try\n                {\n                } catch (e)\n                {\n                    return r[101]\n                }\n            }\n            function Z () {\n                var n, a, o;\n                n = a = o = e;\n                var i, u, c;\n                i = u = c = r;\n                var v, s, f;\n                return v = s = f = t,\n                    plugin_num = s[18],\n                    plugin_num\n            }\n            var z = [R, x, S, T, L, Q, b, V, O, J, M, q, Y, B, tr, A];\n\n            var nr = [new e[13](n[85]), new n[31](e[82]), new r[50](e[83]), new r[50](t[102]), new n[31](e[84]), new a[45](a[78]), new a[45](e[85]), new e[13](t[103]), new a[45](r[103]), new t[93](r[104]), new a[45](r[105])];\n            function tr () {\n                return e[86]\n            }\n            u[e[87]] = rr,\n                u[a[79]] = k,\n                u[yr(c, e[88], r[106])] = Z,\n                u[K + U + m] = w\n        }(_r || (_r = {}));\n    function yr () {\n        var o = arguments[a[25]];\n        if (!o) return t[19];\n        for (var i = a[19], u = e[14], c = r[27]; c < o.length; c++)\n        {\n            var v = o.charCodeAt(c),\n                s = v ^ u;\n            u = u * c % a[80] + e[89],\n                i += n[86].fromCharCode(s)\n        }\n        return i\n    }\n    var Er; !\n        function (o) {\n            var i = a[81],\n                u = t[35],\n                c = r[107],\n                v = vr(S, a[56]),\n                f = r[27],\n                l = r[19],\n                d = a[25],\n                p = n[87],\n                h = parseInt(e[90], r[108]),\n                g = a[82],\n                m = parseInt(vr(s, t[104]), t[39]),\n                w = r[109],\n                I = t[40],\n                _ = parseInt(i + V, n[45]),\n                y = parseInt(u + c, n[52]),\n                E = parseInt(t[105], r[42]),\n                A = e[91],\n                C = parseInt(Y + v, r[42]),\n                b = parseInt(e[92], e[93]),\n                B = t[106],\n                R = parseInt(vr(e[94], e[95]), t[41]),\n                T = parseInt(a[83], e[93]),\n                k;\n            function x () {\n                var r = M();\n                return r\n            }\n            function O () {\n                var r = t[26],\n                    a = n[35],\n                    o = e[54],\n                    i = n[88];\n                k = new gr([i, i, i, i, r, r, r, o, a, a, a, a, a, a, a, i, a, r]),\n                    k[l] = wr.serverTimeNow(),\n                    L(),\n                    k[B] = cr,\n                    k[T] = ur,\n                    k[R] = e[15],\n                    k[C] = _r.getBrowserFeature(),\n                    k[g] = _r.getBrowserIndex(),\n                    k[m] = _r.getPluginNum()\n            }\n            function L () {\n                var a = dr.getCookie(tr) || pr.get(ar);\n                if (a && a[r[20]] == parseInt(e[96], n[52]))\n                {\n                    var o = mr.decode(a);\n                    if (o && (k.decodeBuffer(o), k[f] != t[18])) return\n                }\n                k[f] = wr.random()\n            }\n            o[a[84]] = O;\n            function M () {\n                k[R]++ ,\n                    k[l] = wr.serverTimeNow(),\n                    k[d] = wr.timeNow(),\n                    k[B] = cr,\n                    k[w] = Ir.getMouseMove(),\n                    k[I] = Ir.getMouseClick(),\n                    k[_] = Ir.getMouseWhell(),\n                    k[y] = Ir.getKeyDown(),\n                    k[E] = Ir.getClickPos().x,\n                    k[A] = Ir.getClickPos().y;\n                var r = k.toBuffer();\n                return mr.encode(r)\n            }\n            o[yr(r[3], n[89], e[97])] = x\n        }(Er || (Er = {}));\n    var Ar; !\n        function (o) {\n            var i = n[90],\n                u = a[85],\n                v = r[110],\n                s = a[86],\n                f = t[107],\n                p,\n                h,\n                m,\n                w,\n                I,\n                _;\n            function E (r) {\n                return N(r) && dr[a[87]]\n            }\n            function A (o) {\n                var i = wr.getOriginFromUrl(o);\n                return i ? !new n[31](yr(r[42], c, t[110]) + w).test(i[r[108]]) || !new e[13](I).test(i[a[18]]) : t[111]\n            }\n            function C (e) {\n                var o = (_r, g, Er.update());\n                return e + (new r[50](vr(a[88], a[89])).test(e) ? n[91] : vr(P, a[90], t[112])) + er + t[23] + r[111](o)\n            }\n            function b (o, i, u) {\n                if (r[112] in i) return i.apply(o, u);\n                switch (u[n[37]])\n                {\n                    case n[26]:\n                        return i();\n                    case a[18]:\n                        return i(u[n[26]]);\n                    case r[108]:\n                        return i(u[e[15]], u[r[19]]);\n                    default:\n                        return i(u[n[26]], u[r[108]], u[t[17]])\n                }\n            }\n            function B () {\n                var r = Er.update();\n                return r\n            }\n            function k (r, e, o) {\n                if (!r) return n[20];\n                var i = r[e];\n                if (!i) return t[111];\n                var u = o(i);\n                return d || (u[a[97]] = i + t[19]),\n                    u[n[97]] = i,\n                    r[e] = u,\n                    a[21]\n            }\n            function M (o) {\n                var i, u, c;\n                i = u = c = n;\n                var v, s, l;\n                v = s = l = r;\n                var d, p, h;\n                d = p = h = e;\n                var g, m, w;\n                g = m = w = a;\n                var I, _, y;\n                I = _ = y = t;\n                var R = hr(I[121], w[106], d[109]),\n                    T;\n                k(o, _[122],\n                    function (r) {\n                        var n = w[107];\n                        return function () {\n                            var t, e, a;\n                            t = e = a = _;\n                            var o, i, u;\n                            o = i = u = l;\n                            var c, v, s;\n                            c = v = s = w;\n                            var f = s[108];\n                            try\n                            {\n                                A(arguments[s[18]]) && !E(arguments[o[19]]) ? arguments[a[26]] = C(arguments[s[18]]) : T = B(),\n                                    r.apply(this, arguments),\n                                    A(arguments[i[19]]) || this.setRequestHeader(ar, T)\n                            } catch (d)\n                            {\n                                return n + f\n                            }\n                        }\n                    }),\n                    k(o, g[109],\n                        function (r) {\n                            var n = b;\n                            n = M;\n                            var t = vr(_[123], u[107]);\n                            return function () {\n                                var n = fr(f, c[108], I[124]),\n                                    e = s[122];\n                                try\n                                {\n                                    if (parseInt(this.status) === parseInt(h[110], v[123]))\n                                    {\n                                        for (var a = r.apply(this, arguments), o = new p[13](i[109], n + R), u, l, d = {}; u = o.exec(a);) d[u[m[18]].toLowerCase()] = u[v[108]];\n                                        wr.analysisRst(wr.parse(d[ir.toLowerCase()]))\n                                    }\n                                } catch (g)\n                                {\n                                    return e + t\n                                }\n                                return r.apply(this, arguments)\n                            }\n                        })\n            }\n            function N (r) {\n                var n = wr.getHostFromUrl(r, e[28]);\n                return n ? _.test(n) : e[28]\n            }\n            function j () {\n                var cookie_v;\n                cookie_v = B()\n                return cookie_v\n            }\n            o[n[111]] = j\n        }(Ar || (Ar = {}));\n    var Cr;\n    var cookie = (function (a) {\n        function _ () {\n            var cookie_v;\n            Er.Init();\n            cookie_v = Ar.Init();\n            return cookie_v\n        }\n        return function y () {\n            try\n            {\n                return _()\n            } catch (r)\n            {\n                return r\n            }\n        }\n    })()\n    return cookie()\n}\nfunction v () {\n    var v;\n    v = v_cookie(\n        [\"t\", 34, '\"$', 36, \"\\f\u0003b\", 55, \"ure\", \"lJ#K\", \"Flash\", \"getBro\", \"1\", \"analys\", \"CHAMELEON_CALLBACK\", 30, \"\\u256f\\u0930\\u097b\\u09ff\\u09a4\\u0934\\u099d\\u09c1\\u099d\\u09d9\\u09a7\\u09c3\\u0995\\u09f0\\u09d3\\u0a62\\u0a6f\\u09bc\\u09ad\\u0934\", \"F,sp-\", String, \"; expires=\", \"\", 1, \"length\", \"; \", '', '', \"addBehavior\", \";^l\", \">*]+\", 0, \"div\", \"&\u0019~!\", \"\", \"Init\", \"('&%$#\\\"![\", \">NJ\", \"\\u254e\\u096d\\u095f\", \"W$R\", \"sdelif_esab\", \"Or)E\", \"decodeBuffer\", 84, \"f\", \"htgnel\", 8, \"110\", \"40\", \"\\u2504\\u2562\", \"255\", \"o\", \":\", '^\".*\"$', RegExp, 40, Date, \"e9\", \".\", 19, 5, \"t8JOi\", \"}\u001fB\", \"src\", \".js\", \"onerror\", \"\u001e*q:\", null, \"getServerTime\", \"isIPAddr\", \"8-\", \"ZX9Y]V8aWs3VQZ7Y\", \"eventBind\", !0, \"wheel\", '', \"keydown\", \"getMouseMove\", \"getClickPos\", \"vent\", \"me\", \"MSG\", 41, \"th\", \"safari\", \"ActiveXObject\", \"maxHeight\", \"head\", \"Google Inc.\", \"vendor\", \"sgAppName\", \"opr\", 94, \"tu\u0014gw`\u0005pj\", \"chrome\", \"2345Explorer\", \"ome\", \"TheWorld\", \"name\", \"\\u2553\\u253c\\u2572\\u251d\\u2569\\u253d\\u254f\\u252e\\u254d\\u2526\", \"Native Client\", \"i\", \"Shockwave\", \"systemLanguage\", \"740\", !1, \"plugins\", \"^ARM\", \"^iPod\", \"^BlackBerry\", \"\\u2550\\u0978\\u094e\\u09c1\\u09bc\\u0928\\u0989\\u09d8\\u099a\\u09f3\\u09b7\\u09dc\", \"0\", 2, 7, \"c\", encodeURIComponent, \"apply\", \"headers\", \"8S:+\", \"\\u2560\\u2509\\u2567\\u2503\\u256c\\u251b\", \"\\u255e\\u2530\\u2543\\u2526\\u2554\\u2520\\u2562\\u2507\\u2561\\u250e\\u257c\\u2519\", \"a\", 14, \":dB2\", \"href\", \"click\", \"err\", 16, \"hostname\", \"`60w\", \"\\f\u0003b\u0002\u000e\u0007f\", \"\u001c&X \"],\n        [\";\", \"Element\", Date, \"par\", \"i\", \"DOMMous\", 21, \"xmT\", \"wserFe\", \"h\", !0, 1, \"\", Boolean, '', \"; domain=\", \"n 1970 00:\", \"cookie\", \"checkcookie\", \"allow\", !1, \"delCookie\", 2333, \"torage\", \")*+,/\\\\\\\\:;\", '', 0, '', \"eliflmth\", '', \"ducument\", RegExp, \"W\u001e\", \"qsU\", 61, 2, \"sdelif_esab\", \"length\", \"I\u001c\", \"ff\", 16, 45, \"3\", \"10010\", \"77\", 8, \"6e%d\", \"DT{e\", \"\u001e$\", / /g, \":\", \"href\", 10, \"location\", \"ned\", \"\\\\.com\\\\.cn$|\\\\.com\\\\.hk$\", 63, \"rea\", \"https://s.thsi.cn/js/chameleon/time.1\", \"tat\", \"loaded\", \"interactive\", \"WY:ZYS\", \"E?`a\", \"addEventListener\", \"eScroll\", \"onmousewheel\", \"mousemove\", \"\\u255e\\u096e\\u096e\\u09e3\\u09a5\\u092e\\u099a\\u09d4\\u0990\", \"\\u2550\\u2535\\u2541\\u250c\\u2563\\u2516\\u2565\\u2500\\u2543\\u252f\\u2546\\u2525\\u254e\", \"getKeyDown\", \"H69<J\", \"v~g\u001c-\", \"\u0017\u0016\", \"ature\", \"callPhantom\", \"ActiveXObject\", \"Uint8Array\", \"WeakMap\", \"JX%<\u001c\", \"chrome\", \"@L:!\", \"20\", \"language\", \"localStorage\", \"^Win32\", String, 3, 4, \"=\u001aXAE\", \"hea\", \"&\", \"/\", \"\\\\R$\", '^R\"VP', \"s\", \"include\", \"_raw\", \"x.\", \"isRst\", \"SCRIPT\", \"ta\", \"base\", \"$?\", \"^_self$\", \"#\", \"unload\", \"ro\", \"\\u2550\", \"^(.*?):[ \\\\t]*([^\\\\r\\\\n]*)\\\\r?$\", \"g\", \"Init\", \"t6?x}\", \"\\u2574\\u0955\\u097b\\u09dc\\u0995\\u0911\\u09ab\\u09fe\\u09ba\\u09e2\\u098e\\u09fe\\u09f9\\u09f9\\u09f3\\u0a55\", \"=d' \"],\n        [\"<=>?@[\\\\]^\", \"e\", \"HE9\", \"tot\", \"\\u2503\", \"0\", \"dyS\", \"se\", \"getRoot\", \"NR\", \"nd\", 60, \"ng\", \"s\", \"get\", \"mit\", 13, 3, 0, \"\", '', \"\\u255f\\u253a\\u255b\\u253f\", \"getCookie\", \"=\", \"length\", \"V587\", 1, String, !0, \"___\", \"\\u2553\\u2536\\u255a\", \"uBot\", \"base_fileds\", 32, \"2\", \"1\", \"20\", 5, \"255\", 2, 8, 16, 10, \"203\", \"base64Encode\", \"base64Decode\", \"decode\", \"760\", \"\\u255b\\u0978\\u0954\\u09f6\\u09a4\\u0935\", 70, \"location\", \"href\", \"redirect_url\", \"efi\", Date, \"\\u2519\", \"^\\\\s*(?:https?:)?\\\\/{2,}([^\\\\/\\\\?\\\\#\\\\\\\\]+)\", \"\\u255e\", \"[@:]\", \"@\", 7, \"onload\", 'WY$PYS/FLV\"P[_7[_R', \"readyState\", \"onreadystatechange\", '\"\u001f^w', \"\\u2569\\u2535\\u2546\\u256c\\u2544\\u257b\\u2541\\u2569\\u2501\\u2575\\u2501\\u2571\\u2502\\u253d\\u2507\\u252e\\u2507\\u2538\\u2564\\u254b\\u2530\\u2502\\u252e\\u2553\\u257b\\u2520\\u257e\\u2522\\u250d\\u2551\\u256e\\u2532\\u2511\\u254d\\u2511\\u254c\\u2567\\u254e\", \"analysisRst\", \"strToBytes\", \"strhash\", \"random\", \"getHostFromUrl\", \"getOriginFromUrl\", 83, \"timeNow\", \"^(\\\\d+\\\\.)+\\\\d+$\", \"d\", \"v\", \"ted\", \"touchmove\", 85, \"F(K9i\", \"clientX\", \"clientY\", \"\\u257a\\u2515\\u256f\\u253c\", \"postMessage\", '', \"ActiveXObject\", \"Apple Computer, Inc.\", \"Q\", \"chr\", \"\\u2558\\u2535\\u2550\", \"BIDUBrowser\", RegExp, \"QQBrowser\", \"ro\", \"aef\", \"msDoNotTrack\", \"PDF|Acrobat\", \"canvas\", \"yE\", \"\\u255b\\u253a\\u2554\\u2533\\u2546\\u2527\\u2540\\u2525\\u2556\", \"^Android\", \"^Linux [ix]\\\\d+\", \"011\", \"13\", 15, \"sub\", \"addEventListener\", \"jsonp_ignore\", \"\\u2569\", !1, 'L\u0019\"', \"Sj\", \"T{_,\", \"q*\", \"i\", \"tagName\", \"et\", \"{'K\", \"Pp<\", \"#x'\", \"open\", \"rS\", \"\u001fKN3\", \"#\", \"protocol\", \"\\\\.\", \"DEDAOL_NOELEMAHC\"],\n        [83, \"ffer\", \"\\u2505\", \"20\", \"e\", \"ngsE\", Error, \"est\", \"\\u2552\\u095b\\u0956\\u09f0\\u09a3\\u0935\\u09c0\\u09e2\", \"1\", \"sr\", \"hexin-v\", \"\", RegExp, 9527, 0, \"**l>\u0017\", \"head\", \"Thu, 01 Ja\", \"00:00 GMT\", \"allow\", \"=\", \"; path=\", \"cookie\", \"Init\", 33, 1, \"setCookie\", !0, \"localS\", \"`{|}~]\", \"g\", '', \"frames\", \"___$&\", 56, \"\t\u0007\", \"\\b\u0007\", \"length\", \"10\", \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\", \"\\u2552\\u096f\\u0948\\u09fe\\u09a2\", 16, 2, 6, \"encode\", \"rea\", \"729\", \"*.\", \",\", \"\\u2506\\u092c\\u090b\\u09a0\\u09e1\\u096d\\u09df\\u0981\\u09c4\\u098c\", \"redirect_url\", \"\\u2506\\u092d\\u090a\\u09a3\", \"1111101000\", 3, 47, \"tat\", \"script\", \"readyState\", \"complete\", '', \"body\", \"onwheel\", \"mousewheel\", 37, \"rus\", \"\\u2554\\u0975\", \"chr\", \"ActiveXObject\", \"WeakMap\", \"aT1Kg\", \"i\", 24, \"\\u2554\\u253c\\u254e\\u2521\\u254c\\u2529\", \"\\u2547\\u0971\\u094f\\u09f6\\u09b9\\u0933\\u099d\", \"Shockwav\", \"hockwave\", \"$cdc_asdjflasutopfhvcZLmcfl_\", \"webgl2\", \"2>n|\", \"plugins\", \"platform\", \"^Win64\", \"^Linux armv|Android\", \"^iPhone\", \"^MacIntel\", !1, \"getPlatform\", \"6Y,\", 2333, \"100\", 12, \"14\", 10, 36, \"01\", \"60\", \"\\u2542\\u096d\\u095e\\u09f0\\u09a4\\u0938\", \"\u001bj\", 17, \"Request\", \"prototype\", \"`z\u001a}lc\u0006\", \"error\", \"s\", \"r\", \"target\", \"\\u255e\", \"A\", \"U\", \"193\", \"host\", \"$\"],\n        [\"se\", \"g@\u001ag?\", Array, \"*Y\", Number, \"^{.\", \"*}$\", \"und\", \"429\", \"496\", \"imeNow\", \"etti\", \"rg\", \"v\", \"hexin-v\", Error, \"L_%\\\\\u0016T8\", \".baidu.\", 1, \"\", Function, !0, \" \", '', 0, 2, \"#default#userData\", \"ydob\", \"^d\", 89, \"11111111\", 8, \"epytotorp\", 10, 16, \"\\u2506\\u2536\\u2506\\u2536\\u2506\", \"14\", 13, \"10\", \"Syd\", 44, \"Domain\", \"serverT\", '^\"', \"length\", RegExp, \"00\", \"tcejbo\", \"status_code\", \"n\", 66, \"\\u2506\\u2531\\u2504\\u2534\", \"htgnel\", Date, \"L%\", 67, \"5\", \"?)'\", '', \"[[?VS\", \"isT\", \"getMouseWhell\", \"}}\", \"TR\", \"ActiveXObject\", \"WE\", \"python\", \"Maxthon\", 97, \"chrome\", \"Ryp\", \"UBrowser\", 54, !1, \"ontouchstart\", \"\\u254d\\u0975\\u0917\\u09f2\\u09be\", \"iso-8859-1\", \"defaultCharset\", \"^iPad\", \"getBrowserIndex\", 256, \"1\", 5, \"17\", \"Init\", \"XMLHttp\", \"tar\", \"allow\", \"@\u001a*\u0016\", \"?\\\\\", \"?\", \"\\u2571\\u2503\\u256a\\u2546\\u2566\\u2556\\u2567\\u2547\\u2501\\u2564\\u2506\\u2526\\u2514\\u2524\\u2511\\u2521\\u2501\\u2531\\u2501\\u253b\\u250b\\u253b\\u2501\\u2531\\u2501\\u2521\\u2566\\u252b\\u257f\", \"den\", \"tia\", 94, \"ls\", \"\\u2554\\u2526\\u2543\", \"_str\", 37, \"append\", \"Child\", \"\\u255f\", \"\\u2569\\u0975\\u094e\\u09e5\\u09a0\\u092e\\u09d1\\u09ed\\u09ce\", \"srcElement\", \"parentNode\", \"\\u2543\\u2522\\u2545\\u250b\\u256a\\u2507\\u2562\", \"}*\", \"err\", \"or\", \"getAllResponseHeaders\", \"\\\\.?\", \"\\\\.\"]\n    );\n    return v\n}\n"
  },
  {
    "path": "akshare/stock_fundamental/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2020/5/14 15:34\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_basic_info_xq.py",
    "content": "# !/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/5/16 19:00\nDesc: 雪球-个股-公司概况-公司简介\nhttps://xueqiu.com/snowman/S/SH601127/detail#/GSJJ\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.cons import headers\n\n\ndef stock_individual_basic_info_xq(\n    symbol: str = \"SH601127\", token: str = None, timeout: float = None\n) -> pd.DataFrame:\n    \"\"\"\n    雪球-个股-公司概况-公司简介\n    https://xueqiu.com/snowman/S/SH601127/detail#/GSJJ\n    :param symbol: 证券代码\n    :type symbol: str\n    :param token: 雪球财经的 token\n    :type token: str\n    :param timeout: 设置超时时间\n    :type timeout: float\n    :return: 公司简介\n    :rtype: pandas.DataFrame\n    \"\"\"\n    from akshare.stock.cons import xq_a_token\n\n    xq_a_token = token or xq_a_token\n    url = \"https://stock.xueqiu.com/v5/stock/f10/cn/company.json\"\n    params = {\n        \"symbol\": symbol,\n    }\n    headers.update({\"cookie\": f\"xq_a_token={xq_a_token};\"})\n    r = requests.get(url, params=params, headers=headers, timeout=timeout)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\"item\", \"value\"]\n    return temp_df\n\n\ndef stock_individual_basic_info_us_xq(\n    symbol: str = \"NVDA\", token: str = None, timeout: float = None\n) -> pd.DataFrame:\n    \"\"\"\n    雪球-个股-公司概况-公司简介\n    https://xueqiu.com/snowman/S/NVDA/detail#/GSJJ\n    :param symbol: 证券代码\n    :type symbol: str\n    :param token: 雪球财经的 token\n    :type token: str\n    :param timeout: 设置超时时间\n    :type timeout: float\n    :return: 公司简介\n    :rtype: pandas.DataFrame\n    \"\"\"\n    from akshare.stock.cons import xq_a_token\n\n    xq_a_token = token or xq_a_token\n    url = \"https://stock.xueqiu.com/v5/stock/f10/us/company.json\"\n    params = {\n        \"symbol\": symbol,\n    }\n    headers.update({\"cookie\": f\"xq_a_token={xq_a_token};\"})\n    r = requests.get(url, params=params, headers=headers, timeout=timeout)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\"item\", \"value\"]\n    return temp_df\n\n\ndef stock_individual_basic_info_hk_xq(\n    symbol: str = \"02097\", token: str = None, timeout: float = None\n) -> pd.DataFrame:\n    \"\"\"\n    雪球-个股-公司概况-公司简介\n    https://xueqiu.com/S/00700\n    :param symbol: 证券代码\n    :type symbol: str\n    :param token: 雪球财经的 token\n    :type token: str\n    :param timeout: 设置超时时间\n    :type timeout: float\n    :return: 公司简介\n    :rtype: pandas.DataFrame\n    \"\"\"\n    from akshare.stock.cons import xq_a_token\n\n    xq_a_token = token or xq_a_token\n    url = \"https://stock.xueqiu.com/v5/stock/f10/hk/company.json\"\n    params = {\n        \"symbol\": symbol,\n    }\n    headers.update({\"cookie\": f\"xq_a_token={xq_a_token};\"})\n    r = requests.get(url, params=params, headers=headers, timeout=timeout)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df.columns = [\"item\", \"value\"]\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_individual_basic_info_xq_df = stock_individual_basic_info_xq(\n        symbol=\"SH601127\"\n    )\n    print(stock_individual_basic_info_xq_df)\n\n    stock_us_individual_basic_info_us_xq_df = stock_individual_basic_info_us_xq(\n        symbol=\"NVDA\"\n    )\n    print(stock_us_individual_basic_info_us_xq_df)\n\n    stock_individual_basic_info_hk_xq_df = stock_individual_basic_info_hk_xq(\n        symbol=\"02097\"\n    )\n    print(stock_individual_basic_info_hk_xq_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_finance_hk_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/4 17:00\nDesc: 港股-基本面数据\nhttps://emweb.securities.eastmoney.com/PC_HKF10/FinancialAnalysis/index?type=web&code=00700\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_financial_hk_report_em(\n    stock: str = \"00700\", symbol: str = \"资产负债表\", indicator: str = \"年度\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-港股-财务报表-三大报表\n    https://emweb.securities.eastmoney.com/PC_HKF10/FinancialAnalysis/index?type=web&code=00700\n    :param stock: 股票代码\n    :type stock: str\n    :param symbol: choice of {\"资产负债表\", \"利润表\", \"现金流量表\"}\n    :type symbol: str\n    :param indicator: choice of {\"年度\", \"报告期\"}\n    :type indicator: str\n    :return: 东方财富-港股-财务报表-三大报表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_CUSTOM_HKSK_APPFN_CASHFLOW_SUMMARY\",\n        \"columns\": \"SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,START_DATE,REPORT_DATE,FISCAL_YEAR,\"\n        \"CURRENCY,ACCOUNT_STANDARD,REPORT_TYPE\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECUCODE=\"{stock}.HK\")',\n        \"source\": \"F10\",\n        \"client\": \"PC\",\n        \"v\": \"02092616586970355\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"][0][\"REPORT_LIST\"])\n    if indicator == \"年度\":\n        temp_df = temp_df[temp_df[\"REPORT_TYPE\"] == \"年报\"]\n    else:\n        temp_df = temp_df\n    year_list = [item.split(\" \")[0] for item in temp_df[\"REPORT_DATE\"]]\n    if symbol == \"资产负债表\":\n        params = {\n            \"reportName\": \"RPT_HKF10_FN_BALANCE_PC\",\n            \"columns\": \"SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,ORG_CODE,REPORT_DATE,DATE_TYPE_CODE,\"\n            \"FISCAL_YEAR,STD_ITEM_CODE,STD_ITEM_NAME,AMOUNT,STD_REPORT_DATE\",\n            \"quoteColumns\": \"\",\n            \"filter\": f\"\"\"(SECUCODE=\"{stock}.HK\")(REPORT_DATE in ({\"'\" + \"','\".join(year_list) + \"'\"}))\"\"\",\n            \"pageNumber\": \"1\",\n            \"pageSize\": \"\",\n            \"sortTypes\": \"-1,1\",\n            \"sortColumns\": \"REPORT_DATE,STD_ITEM_CODE\",\n            \"source\": \"F10\",\n            \"client\": \"PC\",\n            \"v\": \"01975982096513973\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        return temp_df\n    elif symbol == \"利润表\":\n        params = {\n            \"reportName\": \"RPT_HKF10_FN_INCOME_PC\",\n            \"columns\": \"SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,ORG_CODE,REPORT_DATE,DATE_TYPE_CODE,\"\n            \"FISCAL_YEAR,START_DATE,STD_ITEM_CODE,STD_ITEM_NAME,AMOUNT\",\n            \"quoteColumns\": \"\",\n            \"filter\": f\"\"\"(SECUCODE=\"{stock}.HK\")(REPORT_DATE in ({\"'\" + \"','\".join(year_list) + \"'\"}))\"\"\",\n            \"pageNumber\": \"1\",\n            \"pageSize\": \"\",\n            \"sortTypes\": \"-1,1\",\n            \"sortColumns\": \"REPORT_DATE,STD_ITEM_CODE\",\n            \"source\": \"F10\",\n            \"client\": \"PC\",\n            \"v\": \"01975982096513973\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        return temp_df\n    elif symbol == \"现金流量表\":\n        params = {\n            \"reportName\": \"RPT_HKF10_FN_CASHFLOW_PC\",\n            \"columns\": \"SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,ORG_CODE,REPORT_DATE,DATE_TYPE_CODE,\"\n            \"FISCAL_YEAR,START_DATE,STD_ITEM_CODE,STD_ITEM_NAME,AMOUNT\",\n            \"quoteColumns\": \"\",\n            \"filter\": f\"\"\"(SECUCODE=\"{stock}.HK\")(REPORT_DATE in ({\"'\" + \"','\".join(year_list) + \"'\"}))\"\"\",\n            \"pageNumber\": \"1\",\n            \"pageSize\": \"\",\n            \"sortTypes\": \"-1,1\",\n            \"sortColumns\": \"REPORT_DATE,STD_ITEM_CODE\",\n            \"source\": \"F10\",\n            \"client\": \"PC\",\n            \"v\": \"01975982096513973\",\n        }\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        return temp_df\n    else:\n        return pd.DataFrame()\n\n\ndef stock_financial_hk_analysis_indicator_em(\n    symbol: str = \"00853\", indicator: str = \"年度\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-港股-财务分析-主要指标\n    https://emweb.securities.eastmoney.com/PC_HKF10/NewFinancialAnalysis/index?type=web&code=00700\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: choice of {\"年度\", \"报告期\"}\n    :type indicator: str\n    :return: 东方财富-港股-财务分析-主要指标\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_HKF10_FN_MAININDICATOR\",\n        \"columns\": \"HKF10_FN_MAININDICATOR\",\n        \"quoteColumns\": \"\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"9\",\n        \"sortTypes\": \"-1\",\n        \"sortColumns\": \"STD_REPORT_DATE\",\n        \"source\": \"F10\",\n        \"client\": \"PC\",\n        \"v\": \"01975982096513973\",\n    }\n    if indicator == \"年度\":\n        params.update({\"filter\": f\"\"\"(SECUCODE=\"{symbol}.HK\")(DATE_TYPE_CODE=\"001\")\"\"\"})\n    else:\n        params.update({\"filter\": f\"\"\"(SECUCODE=\"{symbol}.HK\")\"\"\"})\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_financial_hk_analysis_indicator_em_df = (\n        stock_financial_hk_analysis_indicator_em(symbol=\"00700\", indicator=\"年度\")\n    )\n    print(stock_financial_hk_analysis_indicator_em_df)\n\n    stock_financial_hk_analysis_indicator_em_df = (\n        stock_financial_hk_analysis_indicator_em(symbol=\"00700\", indicator=\"报告期\")\n    )\n    print(stock_financial_hk_analysis_indicator_em_df)\n\n    stock_financial_hk_report_em_df = stock_financial_hk_report_em(\n        stock=\"01742\", symbol=\"资产负债表\", indicator=\"年度\"\n    )\n    print(stock_financial_hk_report_em_df)\n\n    stock_financial_hk_report_em_df = stock_financial_hk_report_em(\n        stock=\"01742\", symbol=\"资产负债表\", indicator=\"报告期\"\n    )\n    print(stock_financial_hk_report_em_df)\n\n    stock_financial_hk_report_em_df = stock_financial_hk_report_em(\n        stock=\"00700\", symbol=\"利润表\", indicator=\"年度\"\n    )\n    print(stock_financial_hk_report_em_df)\n\n    stock_financial_hk_report_em_df = stock_financial_hk_report_em(\n        stock=\"00700\", symbol=\"利润表\", indicator=\"报告期\"\n    )\n    print(stock_financial_hk_report_em_df)\n\n    stock_financial_hk_report_em_df = stock_financial_hk_report_em(\n        stock=\"00700\", symbol=\"现金流量表\", indicator=\"年度\"\n    )\n    print(stock_financial_hk_report_em_df)\n\n    stock_financial_hk_report_em_df = stock_financial_hk_report_em(\n        stock=\"00700\", symbol=\"现金流量表\", indicator=\"报告期\"\n    )\n    print(stock_financial_hk_report_em_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_finance_sina.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/10/2 9:00\nDesc: 股票基本面数据\n新浪财经-财务报表-财务摘要\nhttps://vip.stock.finance.sina.com.cn/corp/go.php/vFD_FinanceSummary/stockid/600004.phtml\n新浪财经-财务分析-财务指标\nhttps://money.finance.sina.com.cn/corp/go.php/vFD_FinancialGuideLine/stockid/600004/displaytype/4.phtml\n新浪财经-发行与分配\nhttps://money.finance.sina.com.cn/corp/go.php/vISSUE_ShareBonus/stockid/600004.phtml\n\"\"\"\n\nfrom datetime import datetime\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_financial_report_sina(\n    stock: str = \"sh600600\", symbol: str = \"资产负债表\"\n) -> pd.DataFrame:\n    \"\"\"\n    新浪财经-财务报表-三大报表\n    https://vip.stock.finance.sina.com.cn/corp/go.php/vFD_FinanceSummary/stockid/600600/displaytype/4.phtml?source=fzb&qq-pf-to=pcqq.group\n    :param stock: 股票代码\n    :type stock: str\n    :param symbol: choice of {\"资产负债表\", \"利润表\", \"现金流量表\"}\n    :type symbol: str\n    :return: 新浪财经-财务报表-三大报表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\"资产负债表\": \"fzb\", \"利润表\": \"lrb\", \"现金流量表\": \"llb\"}\n    url = \"https://quotes.sina.cn/cn/api/openapi.php/CompanyFinanceService.getFinanceReport2022\"\n    params = {\n        \"paperCode\": f\"{stock}\",\n        \"source\": symbol_map[symbol],\n        \"type\": \"0\",\n        \"page\": \"1\",\n        \"num\": \"1000\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    df_columns = [\n        item[\"date_value\"] for item in data_json[\"result\"][\"data\"][\"report_date\"]\n    ]\n    big_df = pd.DataFrame()\n    temp_df = pd.DataFrame()\n    for date_str in df_columns:\n        temp_df = pd.DataFrame(\n            data_json[\"result\"][\"data\"][\"report_list\"][date_str][\"data\"]\n        )\n        temp_df = temp_df[[\"item_title\", \"item_value\"]]\n        temp_df[\"item_value\"] = pd.to_numeric(temp_df[\"item_value\"], errors=\"coerce\")\n        temp_tail_df = pd.DataFrame.from_dict(\n            data={\n                \"数据源\": data_json[\"result\"][\"data\"][\"report_list\"][date_str][\n                    \"data_source\"\n                ],\n                \"是否审计\": data_json[\"result\"][\"data\"][\"report_list\"][date_str][\n                    \"is_audit\"\n                ],\n                \"公告日期\": data_json[\"result\"][\"data\"][\"report_list\"][date_str][\n                    \"publish_date\"\n                ],\n                \"币种\": data_json[\"result\"][\"data\"][\"report_list\"][date_str][\n                    \"rCurrency\"\n                ],\n                \"类型\": data_json[\"result\"][\"data\"][\"report_list\"][date_str][\"rType\"],\n                \"更新日期\": datetime.fromtimestamp(\n                    data_json[\"result\"][\"data\"][\"report_list\"][date_str][\"update_time\"]\n                ).isoformat(),\n            },\n            orient=\"index\",\n        )\n        temp_tail_df.reset_index(inplace=True)\n        temp_tail_df.columns = [\"item_title\", \"item_value\"]\n        temp_df = pd.concat(objs=[temp_df, temp_tail_df], ignore_index=True)\n        temp_df.columns = [\"项目\", date_str]\n        big_df = pd.concat(objs=[big_df, temp_df[date_str]], axis=1, ignore_index=True)\n\n    big_df = big_df.T\n    big_df.columns = temp_df[\"项目\"]\n    big_df = pd.concat(objs=[pd.DataFrame({\"报告日\": df_columns}), big_df], axis=1)\n    # 此处有 '国内票证结算' 和 '内部应收款'字段重复\n    big_df = big_df.loc[:, ~big_df.columns.duplicated(keep=\"first\")]\n    return big_df\n\n\ndef stock_financial_abstract(symbol: str = \"600004\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-财务报表-关键指标\n    https://vip.stock.finance.sina.com.cn/corp/go.php/vFD_FinanceSummary/stockid/600004.phtml\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 新浪财经-财务报表-关键指标\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://quotes.sina.cn/cn/api/openapi.php/CompanyFinanceService.getFinanceReport2022\"\n    params = {\n        \"paperCode\": f\"sh{symbol}\",\n        \"source\": \"gjzb\",\n        \"type\": \"0\",\n        \"page\": \"1\",\n        \"num\": \"1000\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    key_list = list(data_json[\"result\"][\"data\"][\"report_list\"].keys())\n    temp_df = pd.DataFrame(\n        data_json[\"result\"][\"data\"][\"report_list\"][key_list[0]][\"data\"]\n    )\n    big_df = temp_df[\"item_title\"]\n    for item in key_list:\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"][\"report_list\"][item][\"data\"])\n        big_df = pd.concat(\n            objs=[big_df, temp_df[\"item_value\"]], axis=1, ignore_index=True\n        )\n    big_df.index = big_df.iloc[:, 0]\n    big_df = big_df.iloc[:, 1:]\n\n    big_one_df = big_df.loc[\"常用指标\":\"每股指标\"]\n    big_one_df = big_one_df.iloc[1:-1, :]\n    big_one_df.reset_index(inplace=True)\n    big_one_df.insert(0, \"选项\", \"常用指标\")\n\n    big_two_df = big_df.loc[\"每股指标\":\"盈利能力\"]\n    big_two_df = big_two_df.iloc[1:-1, :]\n    big_two_df.reset_index(inplace=True)\n    big_two_df.insert(0, \"选项\", \"每股指标\")\n\n    big_three_df = big_df.loc[\"盈利能力\":\"成长能力\"]\n    big_three_df = big_three_df.iloc[1:-1, :]\n    big_three_df.reset_index(inplace=True)\n    big_three_df.insert(0, \"选项\", \"盈利能力\")\n\n    big_four_df = big_df.loc[\"成长能力\":\"收益质量\"]\n    big_four_df = big_four_df.iloc[1:-1, :]\n    big_four_df.reset_index(inplace=True)\n    big_four_df.insert(0, \"选项\", \"成长能力\")\n\n    big_five_df = big_df.loc[\"收益质量\":\"财务风险\"]\n    big_five_df = big_five_df.iloc[1:-1, :]\n    big_five_df.reset_index(inplace=True)\n    big_five_df.insert(0, \"选项\", \"收益质量\")\n\n    big_six_df = big_df.loc[\"财务风险\":\"营运能力\"]\n    big_six_df = big_six_df.iloc[1:-1, :]\n    big_six_df.reset_index(inplace=True)\n    big_six_df.insert(0, \"选项\", \"财务风险\")\n\n    big_seven_df = big_df.loc[\"营运能力\":]\n    big_seven_df = big_seven_df.iloc[1:-1, :]\n    big_seven_df.reset_index(inplace=True)\n    big_seven_df.insert(0, \"选项\", \"营运能力\")\n\n    big_df = pd.concat(\n        objs=[\n            big_one_df,\n            big_two_df,\n            big_three_df,\n            big_four_df,\n            big_five_df,\n            big_six_df,\n            big_seven_df,\n        ],\n        ignore_index=True,\n    )\n    key_list.insert(0, \"选项\")\n    key_list.insert(1, \"指标\")\n    big_df.columns = key_list\n    for item in big_df.columns[2:]:\n        big_df[item] = pd.to_numeric(big_df[item], errors=\"coerce\")\n    return big_df\n\n\ndef stock_financial_analysis_indicator_em(\n    symbol: str = \"301389.SZ\", indicator: str = \"按报告期\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-A股-财务分析-主要指标\n    https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=SZ301389&color=b#/cwfx\n    :param symbol: 股票代码（带市场标识）\n    :type symbol: str\n    :param indicator: choice of {\"按报告期\", \"按单季度\"}\n    :type indicator: str\n    :return: 东方财富-A股-财务分析-主要指标\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if indicator == \"按报告期\":\n        url = \"https://datacenter.eastmoney.com/securities/api/data/get\"\n        params = {\n            \"type\": \"RPT_F10_FINANCE_MAINFINADATA\",\n            \"sty\": \"APP_F10_MAINFINADATA\",\n            \"quoteColumns\": \"\",\n            \"filter\": f\"\"\"(SECUCODE=\"{symbol}\")\"\"\",\n            \"p\": \"1\",\n            \"ps\": \"200\",\n            \"sr\": \"-1\",\n            \"st\": \"REPORT_DATE\",\n            \"source\": \"HSF10\",\n            \"client\": \"PC\",\n        }\n    else:\n        url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n        params = {\n            \"reportName\": \"RPT_F10_QTR_MAINFINADATA\",\n            \"columns\": \"ALL\",\n            \"quoteColumns\": \"\",\n            \"filter\": f\"\"\"(SECUCODE=\"{symbol}\")\"\"\",\n            \"pageNumber\": \"1\",\n            \"pageSize\": \"200\",\n            \"sortTypes\": \"-1\",\n            \"sortColumns\": \"REPORT_DATE\",\n            \"source\": \"HSF10\",\n            \"client\": \"PC\",\n        }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    return temp_df\n\n\ndef stock_financial_analysis_indicator(\n    symbol: str = \"600004\", start_year: str = \"1900\"\n) -> pd.DataFrame:\n    \"\"\"\n    新浪财经-财务分析-财务指标\n    https://money.finance.sina.com.cn/corp/go.php/vFD_FinancialGuideLine/stockid/600004/ctrl/2019/displaytype/4.phtml\n    :param symbol: 股票代码\n    :type symbol: str\n    :param start_year: 开始年份\n    :type start_year: str\n    :return: 新浪财经-财务分析-财务指标\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = (\n        f\"https://money.finance.sina.com.cn/corp/go.php/vFD_FinancialGuideLine/\"\n        f\"stockid/{symbol}/ctrl/2020/displaytype/4.phtml\"\n    )\n    r = requests.get(url)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    year_context = soup.find(attrs={\"id\": \"con02-1\"}).find(\"table\").find_all(\"a\")\n    year_list = [item.text for item in year_context]\n    if start_year in year_list:\n        year_list = year_list[: year_list.index(start_year) + 1]\n    else:\n        return pd.DataFrame()\n    out_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for year_item in tqdm(year_list, leave=False):\n        url = (\n            f\"https://money.finance.sina.com.cn/corp/go.php/vFD_FinancialGuideLine/\"\n            f\"stockid/{symbol}/ctrl/{year_item}/displaytype/4.phtml\"\n        )\n        r = requests.get(url)\n        temp_df = pd.read_html(StringIO(r.text))[12].iloc[:, :-1]\n        temp_df.columns = temp_df.iloc[0, :]\n        temp_df = temp_df.iloc[1:, :]\n        big_df = pd.DataFrame()\n        indicator_list = [\n            \"每股指标\",\n            \"盈利能力\",\n            \"成长能力\",\n            \"营运能力\",\n            \"偿债及资本结构\",\n            \"现金流量\",\n            \"其他指标\",\n        ]\n        for i in range(len(indicator_list)):\n            if i == 6:\n                inner_df = temp_df[\n                    temp_df.loc[\n                        temp_df.iloc[:, 0].str.find(indicator_list[i]) == 0, :\n                    ].index[0] :\n                ].T\n            else:\n                inner_df = temp_df[\n                    temp_df.loc[\n                        temp_df.iloc[:, 0].str.find(indicator_list[i]) == 0, :\n                    ].index[0] : temp_df.loc[\n                        temp_df.iloc[:, 0].str.find(indicator_list[i + 1]) == 0, :\n                    ].index[0]\n                    - 1\n                ].T\n            inner_df = inner_df.reset_index(drop=True)\n            big_df = pd.concat(objs=[big_df, inner_df], axis=1)\n        big_df.columns = big_df.iloc[0, :].tolist()\n        big_df = big_df.iloc[1:, :]\n        big_df.index = temp_df.columns.tolist()[1:]\n        out_df = pd.concat(objs=[out_df, big_df])\n\n    out_df.dropna(inplace=True)\n    out_df.reset_index(inplace=True)\n    out_df.rename(columns={\"index\": \"日期\"}, inplace=True)\n    out_df.sort_values(by=[\"日期\"], ignore_index=True, inplace=True)\n    out_df[\"日期\"] = pd.to_datetime(out_df[\"日期\"], errors=\"coerce\").dt.date\n    for item in out_df.columns[1:]:\n        out_df[item] = pd.to_numeric(out_df[item], errors=\"coerce\")\n    return out_df\n\n\ndef stock_history_dividend() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-发行与分配-历史分红\n    https://vip.stock.finance.sina.com.cn/q/go.php/vInvestConsult/kind/lsfh/index.phtml\n    :return: 所有股票的历史分红数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://vip.stock.finance.sina.com.cn/q/go.php/vInvestConsult/kind/lsfh/index.phtml\"\n    params = {\"p\": \"1\", \"num\": \"50000\"}\n    r = requests.get(url, params=params)\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df[\"代码\"] = temp_df[\"代码\"].astype(str).str.zfill(6)\n    temp_df.columns = [\n        \"代码\",\n        \"名称\",\n        \"上市日期\",\n        \"累计股息\",\n        \"年均股息\",\n        \"分红次数\",\n        \"融资总额\",\n        \"融资次数\",\n        \"详细\",\n    ]\n    temp_df[\"上市日期\"] = pd.to_datetime(temp_df[\"上市日期\"], errors=\"coerce\").dt.date\n    temp_df[\"累计股息\"] = pd.to_numeric(temp_df[\"累计股息\"], errors=\"coerce\")\n    temp_df[\"年均股息\"] = pd.to_numeric(temp_df[\"年均股息\"], errors=\"coerce\")\n    temp_df[\"分红次数\"] = pd.to_numeric(temp_df[\"分红次数\"], errors=\"coerce\")\n    temp_df[\"融资总额\"] = pd.to_numeric(temp_df[\"融资总额\"], errors=\"coerce\")\n    temp_df[\"融资次数\"] = pd.to_numeric(temp_df[\"融资次数\"], errors=\"coerce\")\n    del temp_df[\"详细\"]\n    return temp_df\n\n\ndef stock_history_dividend_detail(\n    symbol: str = \"000002\", indicator: str = \"分红\", date: str = \"\"\n) -> pd.DataFrame:\n    \"\"\"\n    新浪财经-发行与分配-分红配股详情\n    https://vip.stock.finance.sina.com.cn/corp/go.php/vISSUE_ShareBonus/stockid/300670.phtml\n    :param indicator: choice of {\"分红\", \"配股\"}\n    :type indicator: str\n    :param symbol: 股票代码\n    :type symbol: str\n    :param date: 分红配股的具体日期, e.g., \"1994-12-24\"\n    :type date: str\n    :return: 指定 indicator, stock, date 的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if indicator == \"分红\":\n        url = f\"https://vip.stock.finance.sina.com.cn/corp/go.php/vISSUE_ShareBonus/stockid/{symbol}.phtml\"\n        r = requests.get(url)\n        temp_df = pd.read_html(StringIO(r.text))[12]\n        temp_df.columns = [item[2] for item in temp_df.columns.tolist()]\n        temp_df.columns = [\n            \"公告日期\",\n            \"送股\",\n            \"转增\",\n            \"派息\",\n            \"进度\",\n            \"除权除息日\",\n            \"股权登记日\",\n            \"红股上市日\",\n            \"查看详细\",\n        ]\n        del temp_df[\"查看详细\"]\n        if temp_df.iloc[0, 0] == \"暂时没有数据！\":\n            return pd.DataFrame()\n        temp_df[\"公告日期\"] = pd.to_datetime(\n            temp_df[\"公告日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"送股\"] = pd.to_numeric(temp_df[\"送股\"], errors=\"coerce\")\n        temp_df[\"转增\"] = pd.to_numeric(temp_df[\"转增\"], errors=\"coerce\")\n        temp_df[\"派息\"] = pd.to_numeric(temp_df[\"派息\"], errors=\"coerce\")\n        temp_df[\"除权除息日\"] = pd.to_datetime(\n            temp_df[\"除权除息日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n        ).dt.date\n        temp_df[\"股权登记日\"] = pd.to_datetime(\n            temp_df[\"股权登记日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n        ).dt.date\n        temp_df[\"红股上市日\"] = pd.to_datetime(\n            temp_df[\"红股上市日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n        ).dt.date\n        if date:\n            url = \"https://vip.stock.finance.sina.com.cn/corp/view/vISSUE_ShareBonusDetail.php\"\n            params = {\n                \"stockid\": symbol,\n                \"type\": \"1\",\n                \"end_date\": date,\n            }\n            r = requests.get(url, params=params)\n            temp_df = pd.read_html(StringIO(r.text))[12]\n            temp_df.columns = [\"item\", \"value\"]\n            return temp_df\n        else:\n            return temp_df\n    else:\n        url = f\"https://vip.stock.finance.sina.com.cn/corp/go.php/vISSUE_ShareBonus/stockid/{symbol}.phtml\"\n        r = requests.get(url)\n        temp_df = pd.read_html(StringIO(r.text))[13]\n        temp_df.columns = [item[1] for item in temp_df.columns.tolist()]\n        temp_df.columns = [\n            \"公告日期\",\n            \"配股方案\",\n            \"配股价格\",\n            \"基准股本\",\n            \"除权日\",\n            \"股权登记日\",\n            \"缴款起始日\",\n            \"缴款终止日\",\n            \"配股上市日\",\n            \"募集资金合计\",\n            \"查看详细\",\n        ]\n        del temp_df[\"查看详细\"]\n        if temp_df.iloc[0, 0] == \"暂时没有数据！\":\n            return pd.DataFrame()\n        temp_df[\"公告日期\"] = pd.to_datetime(\n            temp_df[\"公告日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df[\"配股方案\"] = pd.to_numeric(temp_df[\"配股方案\"], errors=\"coerce\")\n        temp_df[\"配股价格\"] = pd.to_numeric(temp_df[\"配股价格\"], errors=\"coerce\")\n        temp_df[\"基准股本\"] = pd.to_numeric(temp_df[\"基准股本\"], errors=\"coerce\")\n        temp_df[\"募集资金合计\"] = pd.to_numeric(\n            temp_df[\"募集资金合计\"], errors=\"coerce\"\n        )\n        temp_df[\"除权日\"] = pd.to_datetime(\n            temp_df[\"除权日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n        ).dt.date\n        temp_df[\"股权登记日\"] = pd.to_datetime(\n            temp_df[\"股权登记日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n        ).dt.date\n        temp_df[\"缴款起始日\"] = pd.to_datetime(\n            temp_df[\"缴款起始日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n        ).dt.date\n        temp_df[\"缴款终止日\"] = pd.to_datetime(\n            temp_df[\"缴款终止日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n        ).dt.date\n        temp_df[\"配股上市日\"] = pd.to_datetime(\n            temp_df[\"配股上市日\"], format=\"%Y-%m-%d\", errors=\"coerce\"\n        ).dt.date\n\n        if date:\n            url = \"https://vip.stock.finance.sina.com.cn/corp/view/vISSUE_ShareBonusDetail.php\"\n            params = {\n                \"stockid\": symbol,\n                \"type\": \"1\",\n                \"end_date\": date,\n            }\n            r = requests.get(url, params=params)\n            temp_df = pd.read_html(StringIO(r.text))[12]\n            temp_df.columns = [\"item\", \"value\"]\n            return temp_df\n        else:\n            return temp_df\n\n\ndef stock_ipo_info(stock: str = \"600004\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-发行与分配-新股发行\n    https://vip.stock.finance.sina.com.cn/corp/go.php/vISSUE_NewStock/stockid/600004.phtml\n    :param stock: 股票代码\n    :type stock: str\n    :return: 返回新股发行详情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://vip.stock.finance.sina.com.cn/corp/go.php/vISSUE_NewStock/stockid/{stock}.phtml\"\n    r = requests.get(url)\n    temp_df = pd.read_html(StringIO(r.text))[12]\n    temp_df.columns = [\"item\", \"value\"]\n    return temp_df\n\n\ndef stock_add_stock(symbol: str = \"688166\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-发行与分配-增发\n    https://vip.stock.finance.sina.com.cn/corp/go.php/vISSUE_AddStock/stockid/600004.phtml\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 返回增发详情\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://vip.stock.finance.sina.com.cn/corp/go.php/vISSUE_AddStock/stockid/{symbol}.phtml\"\n    r = requests.get(url)\n    temp_df = pd.read_html(StringIO(r.text))[12]\n    if temp_df.at[0, 0] == \"对不起，暂时没有相关增发记录\":\n        raise f\"股票 {symbol} 无增发记录\"\n    big_df = pd.DataFrame()\n    for i in range(int(len(temp_df.at[0, 1]) / 10)):\n        temp_df = pd.read_html(StringIO(r.text))[13 + i].iloc[:, 1]\n        big_df[temp_df.name.split(\" \")[1].split(\"：\")[1][:10]] = temp_df\n    big_df = big_df.T\n    big_df.reset_index(inplace=True)\n    big_df.columns = [\n        \"公告日期\",\n        \"发行方式\",\n        \"发行价格\",\n        \"实际公司募集资金总额\",\n        \"发行费用总额\",\n        \"实际发行数量\",\n    ]\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_restricted_release_queue_sina(symbol: str = \"600000\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-发行分配-限售解禁\n    https://vip.stock.finance.sina.com.cn/q/go.php/vInvestConsult/kind/xsjj/index.phtml?symbol=sh600000\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 返回限售解禁数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://vip.stock.finance.sina.com.cn/q/go.php/vInvestConsult/kind/xsjj/index.phtml?symbol={symbol}\"\n    r = requests.get(url)\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df.columns = [\n        \"代码\",\n        \"名称\",\n        \"解禁日期\",\n        \"解禁数量\",\n        \"解禁股流通市值\",\n        \"上市批次\",\n        \"公告日期\",\n    ]\n    temp_df[\"解禁日期\"] = pd.to_datetime(temp_df[\"解禁日期\"], errors=\"coerce\").dt.date\n    temp_df[\"公告日期\"] = pd.to_datetime(temp_df[\"公告日期\"], errors=\"coerce\").dt.date\n    temp_df[\"解禁数量\"] = pd.to_numeric(temp_df[\"解禁数量\"], errors=\"coerce\")\n    temp_df[\"解禁股流通市值\"] = pd.to_numeric(\n        temp_df[\"解禁股流通市值\"], errors=\"coerce\"\n    )\n    temp_df[\"上市批次\"] = pd.to_numeric(temp_df[\"上市批次\"], errors=\"coerce\")\n    temp_df[\"上市批次\"] = pd.to_numeric(temp_df[\"上市批次\"], errors=\"coerce\")\n    return temp_df\n\n\ndef stock_circulate_stock_holder(symbol: str = \"600000\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-股东股本-流通股东\n    P.S. 特定股票特定时间只有前 5 个; e.g., 000002\n    https://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CirculateStockHolder/stockid/600000.phtml\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 新浪财经-股东股本-流通股东\n    :rtype: pandas.DataFrame\n    \"\"\"\n    pd.set_option(\"future.no_silent_downcasting\", True)\n    url = f\"https://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CirculateStockHolder/stockid/{symbol}.phtml\"\n    r = requests.get(url)\n    temp_df = pd.read_html(StringIO(r.text))[13].iloc[:, :5]\n    temp_df.columns = [*range(5)]\n    big_df = pd.DataFrame()\n    need_range = temp_df[\n        temp_df.iloc[:, 0].str.find(\"截止日期\") == 0\n    ].index.tolist() + [len(temp_df)]\n    tqdm = get_tqdm()\n    for i in tqdm(range(len(need_range) - 1), leave=False):\n        truncated_df = temp_df.iloc[need_range[i] : need_range[i + 1], :]\n        truncated_df = truncated_df.dropna(how=\"all\")\n        temp_truncated = truncated_df.iloc[2:, :]\n        temp_truncated.reset_index(inplace=True, drop=True)\n        concat_df = pd.concat(\n            objs=[temp_truncated, truncated_df.iloc[0, :], truncated_df.iloc[1, :]],\n            axis=1,\n        )\n        concat_df.columns = concat_df.iloc[0, :]\n        concat_df = concat_df.iloc[1:, :]\n        try:\n            # try for pandas >= 2.1.0\n            concat_df[\"截止日期\"] = concat_df[\"截止日期\"].ffill()\n            concat_df[\"公告日期\"] = concat_df[\"公告日期\"].ffill()\n        except:  # noqa: E722\n            try:\n                # try for pandas < 2.1.0\n                concat_df[\"截止日期\"] = concat_df[\"截止日期\"].fillna(method=\"ffill\")\n                concat_df[\"公告日期\"] = concat_df[\"公告日期\"].fillna(method=\"ffill\")\n            except Exception as e:\n                print(\"Error:\", e)\n\n        big_df = pd.concat(objs=[big_df, concat_df], axis=0, ignore_index=True)\n\n    big_df = big_df[\n        [\n            \"截止日期\",\n            \"公告日期\",\n            \"编号\",\n            \"股东名称\",\n            \"持股数量(股)\",\n            \"占流通股比例(%)\",\n            \"股本性质\",\n        ]\n    ]\n    big_df.columns = [\n        \"截止日期\",\n        \"公告日期\",\n        \"编号\",\n        \"股东名称\",\n        \"持股数量\",\n        \"占流通股比例\",\n        \"股本性质\",\n    ]\n\n    big_df[\"截止日期\"] = pd.to_datetime(big_df[\"截止日期\"], errors=\"coerce\").dt.date\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    big_df[\"编号\"] = pd.to_numeric(big_df[\"编号\"], errors=\"coerce\")\n    big_df[\"持股数量\"] = pd.to_numeric(big_df[\"持股数量\"], errors=\"coerce\")\n    big_df[\"占流通股比例\"] = pd.to_numeric(big_df[\"占流通股比例\"], errors=\"coerce\")\n    big_df.reset_index(inplace=True, drop=True)\n    return big_df\n\n\ndef stock_fund_stock_holder(symbol: str = \"600004\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-股本股东-基金持股\n    https://vip.stock.finance.sina.com.cn/corp/go.php/vCI_FundStockHolder/stockid/600004.phtml\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 新浪财经-股本股东-基金持股\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://vip.stock.finance.sina.com.cn/corp/go.php/vCI_FundStockHolder/stockid/{symbol}.phtml\"\n    r = requests.get(url)\n    temp_df = pd.read_html(StringIO(r.text))[13].iloc[:, :6]\n    temp_df.columns = [*range(6)]\n    big_df = pd.DataFrame()\n    need_range = temp_df[\n        temp_df.iloc[:, 0].str.find(\"截止日期\") == 0\n    ].index.tolist() + [len(temp_df)]\n    tqdm = get_tqdm()\n    for i in tqdm(range(len(need_range) - 1), leave=False):\n        # pass\n        truncated_df = temp_df.iloc[need_range[i] : need_range[i + 1], :]\n        truncated_df = truncated_df.dropna(how=\"all\")\n        temp_truncated = truncated_df.iloc[2:, :]\n        temp_truncated.reset_index(inplace=True, drop=True)\n        concat_df = pd.concat(objs=[temp_truncated, truncated_df.iloc[0, 1:]], axis=1)\n        concat_df.columns = truncated_df.iloc[1, :].tolist() + [\"截止日期\"]\n        try:\n            # try for pandas >= 2.1.0\n            concat_df[\"截止日期\"] = concat_df[\"截止日期\"].ffill()\n            concat_df[\"截止日期\"] = concat_df[\"截止日期\"].ffill()\n        except:  # noqa: E722\n            try:\n                # try for pandas < 2.1.0\n                concat_df[\"截止日期\"] = concat_df[\"截止日期\"].fillna(method=\"ffill\")\n                concat_df[\"截止日期\"] = concat_df[\"截止日期\"].fillna(method=\"bfill\")\n            except Exception as e:\n                print(\"Error:\", e)\n\n        big_df = pd.concat(objs=[big_df, concat_df], axis=0, ignore_index=True)\n    big_df.dropna(inplace=True)\n    big_df.reset_index(inplace=True, drop=True)\n    big_df.columns = [\n        \"基金名称\",\n        \"基金代码\",\n        \"持仓数量\",\n        \"占流通股比例\",\n        \"持股市值\",\n        \"占净值比例\",\n        \"截止日期\",\n    ]\n    big_df[\"持仓数量\"] = pd.to_numeric(big_df[\"持仓数量\"], errors=\"coerce\")\n    big_df[\"占流通股比例\"] = pd.to_numeric(big_df[\"占流通股比例\"], errors=\"coerce\")\n    big_df[\"持股市值\"] = pd.to_numeric(big_df[\"持股市值\"], errors=\"coerce\")\n    big_df[\"占净值比例\"] = pd.to_numeric(big_df[\"占净值比例\"], errors=\"coerce\")\n    big_df[\"截止日期\"] = pd.to_datetime(big_df[\"截止日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_main_stock_holder(stock: str = \"600004\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-股本股东-主要股东\n    P.S. 特定股票特定时间只有前 5 个; e.g., 000002\n    https://vip.stock.finance.sina.com.cn/corp/go.php/vCI_StockHolder/stockid/600004.phtml\n    :param stock: 股票代码\n    :type stock: str\n    :return: 新浪财经-股本股东-主要股东\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://vip.stock.finance.sina.com.cn/corp/go.php/vCI_StockHolder/stockid/{stock}.phtml\"\n    r = requests.get(url)\n    temp_df = pd.read_html(StringIO(r.text))[13].iloc[:, :5]\n    temp_df.columns = [*range(5)]\n    big_df = pd.DataFrame()\n    need_range = temp_df[\n        temp_df.iloc[:, 0].str.find(\"截至日期\") == 0\n    ].index.tolist() + [len(temp_df)]\n    for i in range(len(need_range) - 1):\n        truncated_df = temp_df.iloc[need_range[i] : need_range[i + 1], :]\n        truncated_df = truncated_df.dropna(how=\"all\")\n        temp_truncated = truncated_df.iloc[5:, :]\n        temp_truncated.reset_index(inplace=True, drop=True)\n        concat_df = pd.concat(\n            objs=[\n                temp_truncated,\n                truncated_df.iloc[0, :],\n                truncated_df.iloc[1, :],\n                truncated_df.iloc[2, :],\n                truncated_df.iloc[3, :],\n                truncated_df.iloc[4, :],\n            ],\n            axis=1,\n        )\n        concat_df.columns = concat_df.iloc[0, :]\n        concat_df = concat_df.iloc[1:, :].copy()\n        try:\n            # try for pandas >= 2.1.0\n            concat_df[\"截至日期\"] = concat_df[\"截至日期\"].ffill()\n            concat_df[\"公告日期\"] = concat_df[\"公告日期\"].ffill()\n            concat_df[\"股东总数\"] = concat_df[\"股东总数\"].ffill()\n            concat_df[\"平均持股数\"] = concat_df[\"平均持股数\"].ffill()\n        except:  # noqa: E722\n            try:\n                # try for pandas < 2.1.0\n                concat_df[\"截至日期\"] = concat_df[\"截至日期\"].fillna(method=\"ffill\")\n                concat_df[\"公告日期\"] = concat_df[\"公告日期\"].fillna(method=\"ffill\")\n                concat_df[\"股东总数\"] = concat_df[\"股东总数\"].fillna(method=\"ffill\")\n                concat_df[\"平均持股数\"] = concat_df[\"平均持股数\"].fillna(method=\"ffill\")\n            except Exception as e:\n                print(\"Error:\", e)\n\n        concat_df[\"股东总数\"] = concat_df[\"股东总数\"].str.strip(\"查看变化趋势\")\n        concat_df[\"平均持股数\"] = concat_df[\"平均持股数\"].str.strip(\n            \"(按总股本计算) 查看变化趋势\"\n        )\n        big_df = pd.concat(objs=[big_df, concat_df], axis=0, ignore_index=True)\n    big_df.dropna(inplace=True, how=\"all\")\n    big_df.reset_index(inplace=True, drop=True)\n    big_df.rename(\n        columns={\"持股数量(股)\": \"持股数量\", \"持股比例(%)\": \"持股比例\"}, inplace=True\n    )\n    big_df.columns.name = None\n    big_df[\"持股数量\"] = pd.to_numeric(big_df[\"持股数量\"], errors=\"coerce\")\n    big_df[\"持股比例\"] = big_df[\"持股比例\"].str.strip(\"↓\")\n    big_df[\"持股比例\"] = pd.to_numeric(big_df[\"持股比例\"], errors=\"coerce\")\n    big_df[\"截至日期\"] = pd.to_datetime(big_df[\"截至日期\"], errors=\"coerce\").dt.date\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    big_df[\"股东总数\"] = pd.to_numeric(big_df[\"股东总数\"], errors=\"coerce\")\n    big_df[\"平均持股数\"] = pd.to_numeric(big_df[\"平均持股数\"], errors=\"coerce\")\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_financial_report_sina_df = stock_financial_report_sina(\n        stock=\"sh600600\", symbol=\"现金流量表\"\n    )\n    print(stock_financial_report_sina_df)\n\n    stock_financial_report_sina_df = stock_financial_report_sina(\n        stock=\"sh600600\", symbol=\"资产负债表\"\n    )\n    print(stock_financial_report_sina_df)\n\n    stock_financial_report_sina_df = stock_financial_report_sina(\n        stock=\"sh600600\", symbol=\"利润表\"\n    )\n    print(stock_financial_report_sina_df)\n\n    stock_financial_abstract_df = stock_financial_abstract(symbol=\"600600\")\n    print(stock_financial_abstract_df)\n\n    stock_financial_analysis_indicator_df = stock_financial_analysis_indicator(\n        symbol=\"600519\", start_year=\"2019\"\n    )\n    print(stock_financial_analysis_indicator_df)\n\n    stock_history_dividend_df = stock_history_dividend()\n    print(stock_history_dividend_df)\n\n    stock_history_dividend_detail_df = stock_history_dividend_detail(\n        symbol=\"600012\", indicator=\"分红\", date=\"\"\n    )\n    print(stock_history_dividend_detail_df)\n\n    stock_history_dividend_detail_df = stock_history_dividend_detail(\n        symbol=\"600012\", indicator=\"分红\", date=\"2019-07-08\"\n    )\n    print(stock_history_dividend_detail_df)\n\n    stock_history_dividend_detail_df = stock_history_dividend_detail(\n        symbol=\"000002\", indicator=\"配股\"\n    )\n    print(stock_history_dividend_detail_df)\n\n    stock_history_dividend_detail_df = stock_history_dividend_detail(\n        symbol=\"000002\", indicator=\"配股\", date=\"1999-12-22\"\n    )\n    print(stock_history_dividend_detail_df)\n\n    stock_ipo_info_df = stock_ipo_info(stock=\"600004\")\n    print(stock_ipo_info_df)\n\n    stock_add_stock_df = stock_add_stock(symbol=\"600004\")\n    print(stock_add_stock_df)\n\n    stock_restricted_release_queue_sina_df = stock_restricted_release_queue_sina(\n        symbol=\"600000\"\n    )\n    print(stock_restricted_release_queue_sina_df)\n\n    stock_circulate_stock_holder_df = stock_circulate_stock_holder(symbol=\"600000\")\n    print(stock_circulate_stock_holder_df)\n\n    stock_fund_stock_holder_df = stock_fund_stock_holder(symbol=\"601318\")\n    print(stock_fund_stock_holder_df)\n\n    stock_main_stock_holder_df = stock_main_stock_holder(stock=\"600000\")\n    print(stock_main_stock_holder_df)\n\n    stock_financial_analysis_indicator_em_df = stock_financial_analysis_indicator_em(\n        symbol=\"301389.SZ\", indicator=\"按报告期\"\n    )\n    print(stock_financial_analysis_indicator_em_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_finance_ths.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/12/18 16:00\nDesc: 同花顺-财务指标-主要指标\nhttps://basic.10jqka.com.cn/new/000063/finance.html\n\"\"\"\n\nimport json\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\nfrom akshare.utils.cons import headers\n\n\ndef stock_financial_abstract_ths(\n    symbol: str = \"000063\", indicator: str = \"按报告期\"\n) -> pd.DataFrame:\n    \"\"\"\n    同花顺-财务指标-主要指标\n    https://basic.10jqka.com.cn/new/000063/finance.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: 指标; choice of {\"按报告期\", \"按年度\", \"按单季度\"}\n    :type indicator: str\n    :return: 同花顺-财务指标-主要指标\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://basic.10jqka.com.cn/new/{symbol}/finance.html\"\n    r = requests.get(url, headers=headers)\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    data_text = soup.find(name=\"p\", attrs={\"id\": \"main\"}).string\n    data_json = json.loads(data_text)\n    df_index = [\n        item[0] if isinstance(item, list) else item for item in data_json[\"title\"]\n    ]\n    if indicator == \"按报告期\":\n        temp_df = pd.DataFrame(\n            data_json[\"report\"][1:], columns=data_json[\"report\"][0], index=df_index[1:]\n        )\n    elif indicator == \"按单季度\":\n        temp_df = pd.DataFrame(\n            data_json[\"simple\"][1:], columns=data_json[\"simple\"][0], index=df_index[1:]\n        )\n    else:\n        temp_df = pd.DataFrame(\n            data_json[\"year\"][1:], columns=data_json[\"year\"][0], index=df_index[1:]\n        )\n    temp_df = temp_df.T\n    temp_df.reset_index(inplace=True)\n    temp_df.rename(columns={\"index\": \"报告期\"}, inplace=True)\n    temp_df.sort_values(by=\"报告期\", ignore_index=True, inplace=True)\n    return temp_df\n\n\ndef stock_financial_debt_ths(\n    symbol: str = \"000063\", indicator: str = \"按报告期\"\n) -> pd.DataFrame:\n    \"\"\"\n    同花顺-财务指标-资产负债表\n    https://basic.10jqka.com.cn/new/000063/finance.html\n    https://basic.10jqka.com.cn/api/stock/finance/000063_debt.json\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: 指标; choice of {\"按报告期\", \"按年度\"}\n    :type indicator: str\n    :return: 同花顺-财务指标-资产负债表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://basic.10jqka.com.cn/api/stock/finance/{symbol}_debt.json\"\n    r = requests.get(url, headers=headers)\n    data_json = json.loads(json.loads(r.text)[\"flashData\"])\n    df_index = [\n        item[0] if isinstance(item, list) else item for item in data_json[\"title\"]\n    ]\n    if indicator == \"按报告期\":\n        temp_df = pd.DataFrame(\n            data_json[\"report\"][1:], columns=data_json[\"report\"][0], index=df_index[1:]\n        )\n    else:\n        temp_df = pd.DataFrame(\n            data_json[\"year\"][1:], columns=data_json[\"year\"][0], index=df_index[1:]\n        )\n    temp_df = temp_df.T\n    temp_df.reset_index(inplace=True)\n    temp_df.rename(columns={\"index\": \"报告期\"}, inplace=True)\n    return temp_df\n\n\ndef stock_financial_benefit_ths(\n    symbol: str = \"000063\", indicator: str = \"按报告期\"\n) -> pd.DataFrame:\n    \"\"\"\n    同花顺-财务指标-利润表\n    https://basic.10jqka.com.cn/new/000063/finance.html\n    https://basic.10jqka.com.cn/api/stock/finance/000063_benefit.json\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: 指标; choice of {\"按报告期\",\"按单季度\", \"按年度\"}\n    :type indicator: str\n    :return: 同花顺-财务指标-利润表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://basic.10jqka.com.cn/api/stock/finance/{symbol}_benefit.json\"\n    r = requests.get(url, headers=headers)\n    data_json = json.loads(json.loads(r.text)[\"flashData\"])\n    df_index = [\n        item[0] if isinstance(item, list) else item for item in data_json[\"title\"]\n    ]\n    if indicator == \"按报告期\":\n        temp_df = pd.DataFrame(\n            data_json[\"report\"][1:], columns=data_json[\"report\"][0], index=df_index[1:]\n        )\n    elif indicator == \"按单季度\":\n        temp_df = pd.DataFrame(\n            data_json[\"simple\"][1:], columns=data_json[\"simple\"][0], index=df_index[1:]\n        )\n    else:\n        temp_df = pd.DataFrame(\n            data_json[\"year\"][1:], columns=data_json[\"year\"][0], index=df_index[1:]\n        )\n    temp_df = temp_df.T\n    temp_df.reset_index(inplace=True)\n    temp_df.rename(columns={\"index\": \"报告期\"}, inplace=True)\n    return temp_df\n\n\ndef stock_financial_cash_ths(\n    symbol: str = \"000063\", indicator: str = \"按报告期\"\n) -> pd.DataFrame:\n    \"\"\"\n    同花顺-财务指标-现金流量表\n    https://basic.10jqka.com.cn/new/000063/finance.html\n    https://basic.10jqka.com.cn/api/stock/finance/000063_cash.json\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: 指标; choice of {\"按报告期\",\"按单季度\", \"按年度\"}\n    :type indicator: str\n    :return: 同花顺-财务指标-现金流量表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://basic.10jqka.com.cn/api/stock/finance/{symbol}_cash.json\"\n    r = requests.get(url, headers=headers)\n    data_json = json.loads(json.loads(r.text)[\"flashData\"])\n    df_index = [\n        item[0] if isinstance(item, list) else item for item in data_json[\"title\"]\n    ]\n    if indicator == \"按报告期\":\n        temp_df = pd.DataFrame(\n            data_json[\"report\"][1:], columns=data_json[\"report\"][0], index=df_index[1:]\n        )\n    elif indicator == \"按单季度\":\n        temp_df = pd.DataFrame(\n            data_json[\"simple\"][1:], columns=data_json[\"simple\"][0], index=df_index[1:]\n        )\n    else:\n        temp_df = pd.DataFrame(\n            data_json[\"year\"][1:], columns=data_json[\"year\"][0], index=df_index[1:]\n        )\n    temp_df = temp_df.T\n    temp_df.reset_index(inplace=True)\n    temp_df.rename(columns={\"index\": \"报告期\"}, inplace=True)\n    return temp_df\n\n\ndef __get_market_code(stock_code: str = \"000063\") -> int:\n    \"\"\"\n    同花顺-财务指标-主要指标-股票所属市场判断\n    :param stock_code: 股票代码\n    :type stock_code: str\n    :return: 同花顺-财务指标-主要指标\n    :rtype: pandas.DataFrame\n    \"\"\"\n    # 确保股票代码是字符串并去掉空格\n    stock_code = str(stock_code).strip()\n    # 检查代码长度\n    if len(stock_code) < 6:\n        raise \"请输入正确的股票代码\"\n    # 深交所股票: 000, 001, 002, 003, 300开头 (market代码33)\n    if stock_code.startswith((\"000\", \"001\", \"002\", \"003\", \"300\")):\n        return 33\n    # 上交所股票: 600, 601, 603, 605, 688开头 (market代码17)\n    if stock_code.startswith((\"600\", \"601\", \"603\", \"605\", \"688\")):\n        return 17\n    # 北交所股票: 920开头 (market代码151)\n    if stock_code.startswith(\"920\"):\n        return 151\n    # 其他情况无法识别\n    return 0\n\n\ndef stock_financial_abstract_new_ths(\n    symbol: str = \"000063\", indicator: str = \"按报告期\"\n) -> pd.DataFrame:\n    \"\"\"\n    同花顺-财务指标-重要指标\n    https://basic.10jqka.com.cn/new/000063/finance.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: 指标; choice of {\"按报告期\", \"一季度\", \"二季度\", \"三季度\", \"四季度\", \"按年度\"}\n    :type indicator: str\n    :return: 同花顺-财务指标-主要指标\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://basic.10jqka.com.cn/basicapi/finance/index/v1/app_data/\"\n    if indicator == \"按报告期\":\n        period = \"0\"\n    elif indicator == \"一季度\":\n        period = \"1\"\n    elif indicator == \"二季度\":\n        period = \"2\"\n    elif indicator == \"三季度\":\n        period = \"3\"\n    elif indicator == \"四季度\":\n        period = \"4\"\n    else:\n        period = \"4\"\n    params = {\n        \"code\": symbol,\n        \"id\": \"client_stock_importance\",\n        \"market\": __get_market_code(symbol),\n        \"type\": \"stock\",\n        \"page\": \"1\",\n        \"size\": \"50\",\n        \"period\": period,\n    }\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    # 提取财务数据\n    financial_data = data_json[\"data\"][\"data\"]\n    # 创建空列表用于存储处理后的数据\n    records = []\n    # 收集所有可能的指标字段\n    all_metric_fields = set()\n    # 首先遍历一次，找出所有的字段名\n    for report in financial_data:\n        for metric_name, metric_values in report[\"index_list\"].items():\n            if isinstance(metric_values, dict):\n                all_metric_fields.update(metric_values.keys())\n    # 遍历每个报告期的数据\n    for report in financial_data:\n        report_date = report[\"date\"]\n        report_name = report[\"report_name\"]\n        report_period = report[\"report\"]\n        quarter_name = report[\"quarter_name\"]\n        # 遍历该报告期的所有财务指标\n        for metric_name, metric_values in report[\"index_list\"].items():\n            # 基本信息\n            record = {\n                \"report_date\": report_date,\n                \"report_name\": report_name,\n                \"report_period\": report_period,\n                \"quarter_name\": quarter_name,\n                \"metric_name\": metric_name,\n            }\n            # 动态添加所有指标字段\n            if isinstance(metric_values, dict):\n                for field, value in metric_values.items():\n                    record[field] = value\n            else:\n                # 如果不是字典，将其作为'value'字段\n                record[\"value\"] = metric_values\n            records.append(record)\n    # 创建DataFrame\n    df = pd.DataFrame(records)\n    # 自动识别并转换数值列\n    numeric_columns = []\n    for col in df.columns:\n        if col not in [\n            \"report_date\",\n            \"report_name\",\n            \"report_period\",\n            \"quarter_name\",\n            \"metric_name\",\n        ]:\n            # 尝试将列转换为数值类型\n            if df[col].dtype == \"object\":\n                # 替换空字符串为NaN\n                df[col] = df[col].replace(to_replace=\"\", value=pd.NA)\n                # 尝试转换为数值\n                numeric_series = pd.to_numeric(df[col], errors=\"coerce\")\n                # 如果大部分能转换为数值，则保留转换结果\n                if numeric_series.notna().sum() > len(numeric_series) * 0.5:\n                    df[col] = numeric_series\n                    numeric_columns.append(col)\n    return df\n\n\ndef stock_financial_debt_new_ths(\n    symbol: str = \"000063\", indicator: str = \"按报告期\"\n) -> pd.DataFrame:\n    \"\"\"\n    同花顺-财务指标-资产负债表\n    https://basic.10jqka.com.cn/astockpc/astockmain/index.html#/financen?code=000063\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: 指标; choice of {\"按报告期\", \"按年度\"}\n    :type indicator: str\n    :return: 同花顺-财务指标-资产负债表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://basic.10jqka.com.cn/basicapi/finance/index/v1/app_data/\"\n    if indicator == \"按报告期\":\n        period = \"0\"\n    else:\n        period = \"4\"\n    params = {\n        \"code\": symbol,\n        \"id\": \"client_stock_debt\",\n        \"market\": __get_market_code(symbol),\n        \"type\": \"stock\",\n        \"page\": \"1\",\n        \"size\": \"50\",\n        \"period\": period,\n    }\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    # 提取财务数据\n    financial_data = data_json[\"data\"][\"data\"]\n    # 创建空列表用于存储处理后的数据\n    records = []\n    # 收集所有可能的指标字段\n    all_metric_fields = set()\n    # 首先遍历一次，找出所有的字段名\n    for report in financial_data:\n        for metric_name, metric_values in report[\"index_list\"].items():\n            if isinstance(metric_values, dict):\n                all_metric_fields.update(metric_values.keys())\n    # 遍历每个报告期的数据\n    for report in financial_data:\n        report_date = report[\"date\"]\n        report_name = report[\"report_name\"]\n        report_period = report[\"report\"]\n        quarter_name = report[\"quarter_name\"]\n        # 遍历该报告期的所有财务指标\n        for metric_name, metric_values in report[\"index_list\"].items():\n            # 基本信息\n            record = {\n                \"report_date\": report_date,\n                \"report_name\": report_name,\n                \"report_period\": report_period,\n                \"quarter_name\": quarter_name,\n                \"metric_name\": metric_name,\n            }\n            # 动态添加所有指标字段\n            if isinstance(metric_values, dict):\n                for field, value in metric_values.items():\n                    record[field] = value\n            else:\n                # 如果不是字典，将其作为'value'字段\n                record[\"value\"] = metric_values\n            records.append(record)\n    # 创建DataFrame\n    df = pd.DataFrame(records)\n    # 自动识别并转换数值列\n    numeric_columns = []\n    for col in df.columns:\n        if col not in [\n            \"report_date\",\n            \"report_name\",\n            \"report_period\",\n            \"quarter_name\",\n            \"metric_name\",\n        ]:\n            # 尝试将列转换为数值类型\n            if df[col].dtype == \"object\":\n                # 替换空字符串为NaN\n                df[col] = df[col].replace(to_replace=\"\", value=pd.NA)\n                # 尝试转换为数值\n                numeric_series = pd.to_numeric(df[col], errors=\"coerce\")\n                # 如果大部分能转换为数值，则保留转换结果\n                if numeric_series.notna().sum() > len(numeric_series) * 0.5:\n                    df[col] = numeric_series\n                    numeric_columns.append(col)\n    return df\n\n\ndef stock_financial_benefit_new_ths(\n    symbol: str = \"000063\", indicator: str = \"按报告期\"\n) -> pd.DataFrame:\n    \"\"\"\n    同花顺-财务指标-利润表\n    https://basic.10jqka.com.cn/astockpc/astockmain/index.html#/financen?code=000063\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: 指标; choice of {\"按报告期\", \"一季度\", \"二季度\", \"三季度\", \"四季度\", \"按年度\"}\n    :type indicator: str\n    :return: 同花顺-财务指标-利润表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://basic.10jqka.com.cn/basicapi/finance/index/v1/app_data/\"\n    if indicator == \"按报告期\":\n        period = \"0\"\n    elif indicator == \"一季度\":\n        period = \"1\"\n    elif indicator == \"二季度\":\n        period = \"2\"\n    elif indicator == \"三季度\":\n        period = \"3\"\n    elif indicator == \"四季度\":\n        period = \"4\"\n    else:\n        period = \"4\"\n    params = {\n        \"code\": symbol,\n        \"id\": \"client_stock_benefit\",\n        \"market\": __get_market_code(symbol),\n        \"type\": \"stock\",\n        \"page\": \"1\",\n        \"size\": \"50\",\n        \"period\": period,\n    }\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    # 提取财务数据\n    financial_data = data_json[\"data\"][\"data\"]\n    # 创建空列表用于存储处理后的数据\n    records = []\n    # 收集所有可能的指标字段\n    all_metric_fields = set()\n    # 首先遍历一次，找出所有的字段名\n    for report in financial_data:\n        for metric_name, metric_values in report[\"index_list\"].items():\n            if isinstance(metric_values, dict):\n                all_metric_fields.update(metric_values.keys())\n    # 遍历每个报告期的数据\n    for report in financial_data:\n        report_date = report[\"date\"]\n        report_name = report[\"report_name\"]\n        report_period = report[\"report\"]\n        quarter_name = report[\"quarter_name\"]\n        # 遍历该报告期的所有财务指标\n        for metric_name, metric_values in report[\"index_list\"].items():\n            # 基本信息\n            record = {\n                \"report_date\": report_date,\n                \"report_name\": report_name,\n                \"report_period\": report_period,\n                \"quarter_name\": quarter_name,\n                \"metric_name\": metric_name,\n            }\n            # 动态添加所有指标字段\n            if isinstance(metric_values, dict):\n                for field, value in metric_values.items():\n                    record[field] = value\n            else:\n                # 如果不是字典，将其作为'value'字段\n                record[\"value\"] = metric_values\n            records.append(record)\n    # 创建DataFrame\n    df = pd.DataFrame(records)\n    # 自动识别并转换数值列\n    numeric_columns = []\n    for col in df.columns:\n        if col not in [\n            \"report_date\",\n            \"report_name\",\n            \"report_period\",\n            \"quarter_name\",\n            \"metric_name\",\n        ]:\n            # 尝试将列转换为数值类型\n            if df[col].dtype == \"object\":\n                # 替换空字符串为NaN\n                df[col] = df[col].replace(to_replace=\"\", value=pd.NA)\n                # 尝试转换为数值\n                numeric_series = pd.to_numeric(df[col], errors=\"coerce\")\n                # 如果大部分能转换为数值，则保留转换结果\n                if numeric_series.notna().sum() > len(numeric_series) * 0.5:\n                    df[col] = numeric_series\n                    numeric_columns.append(col)\n    return df\n\n\ndef stock_financial_cash_new_ths(\n    symbol: str = \"000063\", indicator: str = \"按报告期\"\n) -> pd.DataFrame:\n    \"\"\"\n    同花顺-财务指标-现金流量表\n    https://basic.10jqka.com.cn/astockpc/astockmain/index.html#/financen?code=000063\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: 指标; choice of {\"按报告期\", \"一季度\", \"二季度\", \"三季度\", \"四季度\", \"按年度\"}\n    :type indicator: str\n    :return: 同花顺-财务指标-现金流量表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://basic.10jqka.com.cn/basicapi/finance/index/v1/app_data/\"\n    if indicator == \"按报告期\":\n        period = \"0\"\n    elif indicator == \"一季度\":\n        period = \"1\"\n    elif indicator == \"二季度\":\n        period = \"2\"\n    elif indicator == \"三季度\":\n        period = \"3\"\n    elif indicator == \"四季度\":\n        period = \"4\"\n    else:\n        period = \"4\"\n    params = {\n        \"code\": symbol,\n        \"id\": \"client_stock_cash\",\n        \"market\": __get_market_code(symbol),\n        \"type\": \"stock\",\n        \"page\": \"1\",\n        \"size\": \"50\",\n        \"period\": period,\n    }\n    r = requests.get(url, headers=headers, params=params)\n    data_json = r.json()\n    # 提取财务数据\n    financial_data = data_json[\"data\"][\"data\"]\n    # 创建空列表用于存储处理后的数据\n    records = []\n    # 收集所有可能的指标字段\n    all_metric_fields = set()\n    # 首先遍历一次，找出所有的字段名\n    for report in financial_data:\n        for metric_name, metric_values in report[\"index_list\"].items():\n            if isinstance(metric_values, dict):\n                all_metric_fields.update(metric_values.keys())\n    # 遍历每个报告期的数据\n    for report in financial_data:\n        report_date = report[\"date\"]\n        report_name = report[\"report_name\"]\n        report_period = report[\"report\"]\n        quarter_name = report[\"quarter_name\"]\n        # 遍历该报告期的所有财务指标\n        for metric_name, metric_values in report[\"index_list\"].items():\n            # 基本信息\n            record = {\n                \"report_date\": report_date,\n                \"report_name\": report_name,\n                \"report_period\": report_period,\n                \"quarter_name\": quarter_name,\n                \"metric_name\": metric_name,\n            }\n            # 动态添加所有指标字段\n            if isinstance(metric_values, dict):\n                for field, value in metric_values.items():\n                    record[field] = value\n            else:\n                # 如果不是字典，将其作为'value'字段\n                record[\"value\"] = metric_values\n            records.append(record)\n    # 创建DataFrame\n    df = pd.DataFrame(records)\n    # 自动识别并转换数值列\n    numeric_columns = []\n    for col in df.columns:\n        if col not in [\n            \"report_date\",\n            \"report_name\",\n            \"report_period\",\n            \"quarter_name\",\n            \"metric_name\",\n        ]:\n            # 尝试将列转换为数值类型\n            if df[col].dtype == \"object\":\n                # 替换空字符串为NaN\n                df[col] = df[col].replace(to_replace=\"\", value=pd.NA)\n                # 尝试转换为数值\n                numeric_series = pd.to_numeric(df[col], errors=\"coerce\")\n                # 如果大部分能转换为数值，则保留转换结果\n                if numeric_series.notna().sum() > len(numeric_series) * 0.5:\n                    df[col] = numeric_series\n                    numeric_columns.append(col)\n    return df\n\n\ndef stock_management_change_ths(symbol: str = \"688981\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-公司大事-高管持股变动\n    https://basic.10jqka.com.cn/new/688981/event.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 同花顺-公司大事-高管持股变动\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://basic.10jqka.com.cn/new/{symbol}/event.html\"\n    r = requests.get(url, headers=headers)\n    r.encoding = \"gb2312\"\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    soup_find = soup.find(name=\"table\", attrs={\"class\": \"data_table_1 m_table m_hl\"})\n    if soup_find is not None:\n        content_list = [item.text.strip() for item in soup_find]\n        column_names = content_list[1].split(\"\\n\")\n        row = (\n            content_list[3]\n            .replace(\" \", \"\")\n            .replace(\"\\t\", \"\")\n            .replace(\"\\n\\n\", \"\")\n            .replace(\"   \", \"\\n\")\n            .replace(\"\\n\\n\", \"\\n\")\n            .split(\"\\n\")\n        )\n        row = [item for item in row if item != \"\"]\n        new_rows = []\n        step = len(column_names)\n        for i in range(0, len(row), step):\n            new_rows.append(row[i : i + step])\n        temp_df = pd.DataFrame(new_rows, columns=column_names)\n        temp_df.sort_values(by=\"变动日期\", ignore_index=True, inplace=True)\n        temp_df[\"变动日期\"] = pd.to_datetime(\n            temp_df[\"变动日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df.rename(\n            columns={\n                \"变动数量（股）\": \"变动数量\",\n                \"交易均价（元）\": \"交易均价\",\n                \"剩余股数（股）\": \"剩余股数\",\n            },\n            inplace=True,\n        )\n        return temp_df\n    return pd.DataFrame()\n\n\ndef stock_shareholder_change_ths(symbol: str = \"688981\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-公司大事-股东持股变动\n    https://basic.10jqka.com.cn/new/688981/event.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 同花顺-公司大事-股东持股变动\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://basic.10jqka.com.cn/new/{symbol}/event.html\"\n    r = requests.get(url, headers=headers)\n    r.encoding = \"gb2312\"\n    soup = BeautifulSoup(r.text, features=\"lxml\")\n    soup_find = soup.find(name=\"table\", attrs={\"class\": \"m_table data_table_1 m_hl\"})\n    if soup_find is not None:\n        content_list = [item.text.strip() for item in soup_find]\n        column_names = content_list[1].split(\"\\n\")\n        row = (\n            content_list[3]\n            .replace(\"\\t\", \"\")\n            .replace(\"\\n\\n\", \"\")\n            .replace(\"   \", \"\\n\")\n            .replace(\" \", \"\")\n            .replace(\"\\n\\n\", \"\\n\")\n            .split(\"\\n\")\n        )\n        row = [item for item in row if item != \"\"]\n        new_rows = []\n        step = len(column_names)\n        for i in range(0, len(row), step):\n            new_rows.append(row[i : i + step])\n        temp_df = pd.DataFrame(new_rows, columns=column_names)\n        temp_df.sort_values(by=\"公告日期\", ignore_index=True, inplace=True)\n        temp_df[\"公告日期\"] = pd.to_datetime(\n            temp_df[\"公告日期\"], errors=\"coerce\"\n        ).dt.date\n        temp_df.rename(\n            columns={\n                \"变动数量(股)\": \"变动数量\",\n                \"交易均价(元)\": \"交易均价\",\n                \"剩余股份总数(股)\": \"剩余股份总数\",\n            },\n            inplace=True,\n        )\n        return temp_df\n    return pd.DataFrame()\n\n\nif __name__ == \"__main__\":\n    stock_financial_abstract_new_ths_df = stock_financial_abstract_new_ths(\n        symbol=\"000063\", indicator=\"按报告期\"\n    )\n    print(stock_financial_abstract_new_ths_df)\n\n    stock_financial_abstract_new_ths_df = stock_financial_abstract_new_ths(\n        symbol=\"000063\", indicator=\"按年度\"\n    )\n    print(stock_financial_abstract_new_ths_df)\n\n    stock_financial_abstract_new_ths_df = stock_financial_abstract_new_ths(\n        symbol=\"000063\", indicator=\"一季度\"\n    )\n    print(stock_financial_abstract_new_ths_df)\n\n    stock_financial_debt_new_ths_df = stock_financial_debt_new_ths(\n        symbol=\"002004\", indicator=\"按报告期\"\n    )\n    print(stock_financial_debt_new_ths_df)\n\n    stock_financial_debt_new_ths_df = stock_financial_debt_new_ths(\n        symbol=\"000063\", indicator=\"按年度\"\n    )\n    print(stock_financial_debt_new_ths_df)\n\n    stock_financial_benefit_new_ths_df = stock_financial_benefit_new_ths(\n        symbol=\"000063\", indicator=\"按报告期\"\n    )\n    print(stock_financial_benefit_new_ths_df)\n\n    stock_financial_benefit_new_ths_df = stock_financial_benefit_new_ths(\n        symbol=\"000063\", indicator=\"按年度\"\n    )\n    print(stock_financial_benefit_new_ths_df)\n\n    stock_financial_benefit_new_ths_df = stock_financial_benefit_new_ths(\n        symbol=\"000063\", indicator=\"一季度\"\n    )\n    print(stock_financial_benefit_new_ths_df)\n\n    stock_financial_cash_new_ths_df = stock_financial_cash_new_ths(\n        symbol=\"000063\", indicator=\"按报告期\"\n    )\n    print(stock_financial_cash_new_ths_df)\n\n    stock_financial_cash_new_ths_df = stock_financial_cash_new_ths(\n        symbol=\"000063\", indicator=\"按年度\"\n    )\n    print(stock_financial_cash_new_ths_df)\n\n    stock_financial_cash_new_ths_df = stock_financial_cash_new_ths(\n        symbol=\"000063\", indicator=\"一季度\"\n    )\n    print(stock_financial_cash_new_ths_df)\n\n    stock_management_change_ths_df = stock_management_change_ths(symbol=\"688981\")\n    print(stock_management_change_ths_df)\n\n    stock_shareholder_change_ths_df = stock_shareholder_change_ths(symbol=\"688981\")\n    print(stock_shareholder_change_ths_df)\n\n    stock_financial_abstract_ths_df = stock_financial_abstract_ths(symbol=\"000063\", indicator=\"按报告期\")\n    print(stock_financial_abstract_ths_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_finance_us_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/27 14:00\nDesc: 美股-基本面数据\nhttps://emweb.eastmoney.com/PC_USF10/pages/index.html?code=TSLA&type=web&color=w#/cwfx\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.cons import headers\n\n\ndef __stock_financial_us_report_query_market_em(symbol: str = \"TSLA\") -> str:\n    \"\"\"\n    东方财富-美股-财务分析-三大报表-查询市场\n    https://emweb.eastmoney.com/PC_USF10/pages/index.html?code=TSLA&type=web&color=w#/cwfx\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 查询市场\n    :rtype: str\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_USF10_INFO_ORGPROFILE\",\n        \"columns\": \"SECUCODE,SECURITY_CODE,ORG_CODE,SECURITY_INNER_CODE,ORG_NAME,ORG_EN_ABBR,BELONG_INDUSTRY,\"\n        \"FOUND_DATE,CHAIRMAN,REG_PLACE,ADDRESS,EMP_NUM,ORG_TEL,ORG_FAX,ORG_EMAIL,ORG_WEB,ORG_PROFILE\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECURITY_CODE=\"{symbol}\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"200\",\n        \"sortTypes\": \"\",\n        \"sortColumns\": \"\",\n        \"source\": \"SECURITIES\",\n        \"client\": \"PC\",\n        \"v\": \"04406064331266868\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    stock_code = data_json[\"result\"][\"data\"][0][\"SECUCODE\"]\n    return stock_code\n\n\ndef __stock_financial_us_report_em(\n    stock: str = \"TSLA\", symbol: str = \"综合损益表\", indicator: str = \"年报\"\n) -> str:\n    \"\"\"\n    东方财富-美股-财务分析-三大报表\n    https://emweb.eastmoney.com/PC_USF10/pages/index.html?code=TSLA&type=web&color=w#/cwfx\n    :param stock: 股票代码\n    :type stock: str\n    :param symbol: choice of {\"资产负债表\", \"综合损益表\", \"现金流量表\"}\n    :type symbol: str\n    :param indicator: choice of {\"年报\", \"单季报\", \"累计季报\"}\n    :type indicator: str\n    :return: 东方财富-美股-财务分析-三大报表\n    :rtype: str\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    stock = __stock_financial_us_report_query_market_em(stock)\n    if symbol == \"资产负债表\":\n        report_name = \"RPT_USF10_FN_BALANCE\"\n    elif symbol == \"综合损益表\":\n        report_name = \"RPT_USF10_FN_INCOME\"\n    elif symbol == \"现金流量表\":\n        report_name = \"RPT_USSK_FN_CASHFLOW\"\n    else:\n        raise ValueError(\"请输入正确的 symbol 参数\")\n    params = {\n        \"reportName\": report_name,\n        \"columns\": \"SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,REPORT,REPORT_DATE,FISCAL_YEAR,CURRENCY,\"\n        \"ACCOUNT_STANDARD,REPORT_TYPE,DATE_TYPE_CODE\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECUCODE=\"{stock}\")',\n        \"pageNumber\": \"\",\n        \"pageSize\": \"\",\n        \"sortTypes\": \"-1\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"source\": \"SECURITIES\",\n        \"client\": \"PC\",\n        \"v\": \"09583551779242467\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_tuple = tuple(set(temp_df[\"REPORT\"].tolist()))\n    if indicator == \"年报\":\n        tuple_data = tuple(item.strip() for item in temp_tuple if \"FY\" in item)\n    elif indicator == \"单季报\":\n        tuple_data = tuple(\n            item.strip()\n            for item in temp_tuple\n            if any(q in item for q in [\"Q1\", \"Q2\", \"Q3\", \"Q4\"])\n        )\n    elif indicator == \"累计季报\":\n        tuple_data = tuple(\n            item.strip() for item in temp_tuple if \"Q6\" in item or \"Q9\" in item\n        )\n    else:\n        raise ValueError(\"请输入正确的 indicator 参数\")\n    sorted_tuple = tuple(\n        sorted(tuple_data, key=lambda x: x.split(\"/\")[0], reverse=True)\n    )\n    double_quotes_str = str(sorted_tuple).replace(\"'\", '\"')\n    double_quotes_str = double_quotes_str.replace(\" \", \"\")\n    return double_quotes_str\n\n\ndef stock_financial_us_report_em(\n    stock: str = \"TSLA\", symbol: str = \"资产负债表\", indicator: str = \"年报\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-美股-财务分析-三大报表\n    https://emweb.eastmoney.com/PC_USF10/pages/index.html?code=TSLA&type=web&color=w#/cwfx\n    :param stock: 股票代码\n    :type stock: str\n    :param symbol: choice of {\"资产负债表\", \"综合损益表\", \"现金流量表\"}\n    :type symbol: str\n    :param indicator: choice of {\"年报\", \"单季报\", \"累计季报\"}\n    :type indicator: str\n    :return: 东方财富-美股-财务分析-三大报表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    date_str = __stock_financial_us_report_em(\n        stock=stock, symbol=symbol, indicator=indicator\n    )\n    stock = __stock_financial_us_report_query_market_em(stock)\n    if symbol == \"资产负债表\":\n        report_name = \"RPT_USF10_FN_BALANCE\"\n    elif symbol == \"综合损益表\":\n        report_name = \"RPT_USF10_FN_INCOME\"\n    elif symbol == \"现金流量表\":\n        report_name = \"RPT_USSK_FN_CASHFLOW\"\n    else:\n        raise ValueError(\"请输入正确的 symbol 参数\")\n    params = {\n        \"reportName\": report_name,\n        \"columns\": \"SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,REPORT_DATE,REPORT_TYPE,REPORT,\"\n        \"STD_ITEM_CODE,AMOUNT,ITEM_NAME\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECUCODE=\"{stock}\")(REPORT in ' + date_str + \")\",\n        \"pageNumber\": \"\",\n        \"pageSize\": \"\",\n        \"sortTypes\": \"1,-1\",\n        \"sortColumns\": \"STD_ITEM_CODE,REPORT_DATE\",\n        \"source\": \"SECURITIES\",\n        \"client\": \"PC\",\n        \"v\": \"09583551779242467\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    return temp_df\n\n\ndef stock_financial_us_analysis_indicator_em(\n    symbol: str = \"TSLA\", indicator: str = \"年报\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富-美股-财务分析-主要指标\n    https://emweb.eastmoney.com/PC_USF10/pages/index.html?code=TSLA&type=web&color=w#/cwfx\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: choice of {\"年报\", \"单季报\", \"累计季报\"}\n    :type indicator: str\n    :return: 东方财富-美股-财务分析-主要指标\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    symbol = __stock_financial_us_report_query_market_em(symbol)\n    params = {\n        \"reportName\": \"RPT_USF10_FN_GMAININDICATOR\",\n        \"columns\": \"USF10_FN_GMAININDICATOR\",\n        \"quoteColumns\": \"\",\n        \"pageNumber\": \"\",\n        \"pageSize\": \"\",\n        \"sortTypes\": \"-1\",\n        \"sortColumns\": \"REPORT_DATE\",\n        \"source\": \"SECURITIES\",\n        \"client\": \"PC\",\n    }\n    if \"_\" in symbol:\n        params[\"reportName\"] = \"RPT_USF10_FN_IMAININDICATOR\"\n        params[\"columns\"] = (\n            \"ORG_CODE,SECURITY_CODE,SECUCODE,SECURITY_NAME_ABBR,SECURITY_INNER_CODE,\"\n            \"STD_REPORT_DATE,REPORT_DATE,DATE_TYPE,DATE_TYPE_CODE,REPORT_TYPE,REPORT_DATA_TYPE,\"\n            \"FISCAL_YEAR,START_DATE,NOTICE_DATE,ACCOUNT_STANDARD,ACCOUNT_STANDARD_NAME,CURRENCY,\"\n            \"CURRENCY_NAME,ORGTYPE,TOTAL_INCOME,TOTAL_INCOME_YOY,PREMIUM_INCOME,PREMIUM_INCOME_YOY,\"\n            \"PARENT_HOLDER_NETPROFIT,PARENT_HOLDER_NETPROFIT_YOY,BASIC_EPS_CS,BASIC_EPS_CS_YOY,\"\n            \"DILUTED_EPS_CS,PAYOUT_RATIO,CAPITIAL_RATIO,ROE,ROE_YOY,ROA,ROA_YOY,DEBT_RATIO,\"\n            \"DEBT_RATIO_YOY,EQUITY_RATIO\"\n        )\n    if indicator == \"年报\":\n        params.update({\"filter\": f\"\"\"(SECUCODE=\"{symbol}\")(DATE_TYPE_CODE=\"001\")\"\"\"})\n    elif indicator == \"单季报\":\n        params.update(\n            {\n                \"filter\": f\"\"\"(SECUCODE=\"{symbol}\")(DATE_TYPE_CODE in (\"003\",\"006\",\"007\",\"008\"))\"\"\"\n            }\n        )\n    elif indicator == \"累计季报\":\n        params.update(\n            {\"filter\": f\"\"\"(SECUCODE=\"{symbol}\")(DATE_TYPE_CODE in (\"002\",\"004\"))\"\"\"}\n        )\n    else:\n        raise ValueError(\"请输入正确的 indicator 参数\")\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_financial_us_analysis_indicator_em_df = (\n        stock_financial_us_analysis_indicator_em(symbol=\"BABA\", indicator=\"年报\")\n    )\n    print(stock_financial_us_analysis_indicator_em_df)\n\n    stock_financial_us_analysis_indicator_em_df = (\n        stock_financial_us_analysis_indicator_em(symbol=\"BRK_A\", indicator=\"单季报\")\n    )\n    print(stock_financial_us_analysis_indicator_em_df)\n\n    stock_financial_us_analysis_indicator_em_df = (\n        stock_financial_us_analysis_indicator_em(symbol=\"TSLA\", indicator=\"累计季报\")\n    )\n    print(stock_financial_us_analysis_indicator_em_df)\n\n    stock_financial_us_report_em_df = stock_financial_us_report_em(\n        stock=\"BRK\", symbol=\"资产负债表\", indicator=\"年报\"\n    )\n    print(stock_financial_us_report_em_df)\n\n    stock_financial_us_report_em_df = stock_financial_us_report_em(\n        stock=\"TSLA\", symbol=\"资产负债表\", indicator=\"单季报\"\n    )\n    print(stock_financial_us_report_em_df)\n\n    stock_financial_us_report_em_df = stock_financial_us_report_em(\n        stock=\"TSLA\", symbol=\"资产负债表\", indicator=\"累计季报\"\n    )\n    print(stock_financial_us_report_em_df)\n\n    stock_financial_us_report_em_df = stock_financial_us_report_em(\n        stock=\"TSLA\", symbol=\"综合损益表\", indicator=\"年报\"\n    )\n    print(stock_financial_us_report_em_df)\n\n    stock_financial_us_report_em_df = stock_financial_us_report_em(\n        stock=\"TSLA\", symbol=\"综合损益表\", indicator=\"单季报\"\n    )\n    print(stock_financial_us_report_em_df)\n\n    stock_financial_us_report_em_df = stock_financial_us_report_em(\n        stock=\"TSLA\", symbol=\"综合损益表\", indicator=\"累计季报\"\n    )\n    print(stock_financial_us_report_em_df)\n\n    stock_financial_us_report_em_df = stock_financial_us_report_em(\n        stock=\"TSLA\", symbol=\"现金流量表\", indicator=\"年报\"\n    )\n    print(stock_financial_us_report_em_df)\n\n    stock_financial_us_report_em_df = stock_financial_us_report_em(\n        stock=\"TSLA\", symbol=\"现金流量表\", indicator=\"单季报\"\n    )\n    print(stock_financial_us_report_em_df)\n\n    stock_financial_us_report_em_df = stock_financial_us_report_em(\n        stock=\"TSLA\", symbol=\"现金流量表\", indicator=\"累计季报\"\n    )\n    print(stock_financial_us_report_em_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_gbjg_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/4/3 18:00\nDesc: 东方财富-A股数据-股本结构\nhttps://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=SH603392&color=b#/gbjg/gbjg\n\"\"\"\n\nimport requests\nimport pandas as pd\n\n\ndef stock_zh_a_gbjg_em(symbol: str = \"603392.SH\") -> pd.DataFrame:\n    \"\"\"\n    东方财富-A股数据-股本结构\n    https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html#/gbjg\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 股本结构\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter.eastmoney.com/securities/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_F10_EH_EQUITY\",\n        \"columns\": \"SECUCODE,SECURITY_CODE,END_DATE,TOTAL_SHARES,LIMITED_SHARES,LIMITED_OTHARS,\"\n        \"LIMITED_DOMESTIC_NATURAL,LIMITED_STATE_LEGAL,LIMITED_OVERSEAS_NOSTATE,LIMITED_OVERSEAS_NATURAL,\"\n        \"UNLIMITED_SHARES,LISTED_A_SHARES,B_FREE_SHARE,H_FREE_SHARE,FREE_SHARES,LIMITED_A_SHARES,\"\n        \"NON_FREE_SHARES,LIMITED_B_SHARES,OTHER_FREE_SHARES,LIMITED_STATE_SHARES,\"\n        \"LIMITED_DOMESTIC_NOSTATE,LOCK_SHARES,LIMITED_FOREIGN_SHARES,LIMITED_H_SHARES,\"\n        \"SPONSOR_SHARES,STATE_SPONSOR_SHARES,SPONSOR_SOCIAL_SHARES,RAISE_SHARES,\"\n        \"RAISE_STATE_SHARES,RAISE_DOMESTIC_SHARES,RAISE_OVERSEAS_SHARES,CHANGE_REASON\",\n        \"quoteColumns\": \"\",\n        \"filter\": f'(SECUCODE=\"{symbol}\")',\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"20\",\n        \"sortTypes\": \"-1\",\n        \"sortColumns\": \"END_DATE\",\n        \"source\": \"HSF10\",\n        \"client\": \"PC\",\n        \"v\": \"047483522105257925\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.rename(\n        columns={\n            \"END_DATE\": \"变更日期\",\n            \"TOTAL_SHARES\": \"总股本\",\n            \"LISTED_A_SHARES\": \"已上市流通A股\",\n            \"FREE_SHARES\": \"已流通股份\",\n            \"CHANGE_REASON\": \"变动原因\",\n            \"LIMITED_A_SHARES\": \"流通受限股份\",\n            \"LIMITED_OTHARS\": \"其他内资持股(受限)\",\n            \"LIMITED_DOMESTIC_NOSTATE\": \"境内法人持股(受限)\",\n            \"LIMITED_DOMESTIC_NATURAL\": \"境内自然人持股(受限)\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"变更日期\",\n            \"总股本\",\n            \"流通受限股份\",\n            \"其他内资持股(受限)\",\n            \"境内法人持股(受限)\",\n            \"境内自然人持股(受限)\",\n            \"已流通股份\",\n            \"已上市流通A股\",\n            \"变动原因\",\n        ]\n    ]\n    temp_df[\"变更日期\"] = pd.to_datetime(temp_df[\"变更日期\"], errors=\"coerce\").dt.date\n    temp_df[\"总股本\"] = pd.to_numeric(temp_df[\"总股本\"], errors=\"coerce\")\n    temp_df[\"流通受限股份\"] = pd.to_numeric(temp_df[\"流通受限股份\"], errors=\"coerce\")\n    temp_df[\"其他内资持股(受限)\"] = pd.to_numeric(\n        temp_df[\"其他内资持股(受限)\"], errors=\"coerce\"\n    )\n    temp_df[\"境内法人持股(受限)\"] = pd.to_numeric(\n        temp_df[\"境内法人持股(受限)\"], errors=\"coerce\"\n    )\n    temp_df[\"境内自然人持股(受限)\"] = pd.to_numeric(\n        temp_df[\"境内自然人持股(受限)\"], errors=\"coerce\"\n    )\n    temp_df[\"已流通股份\"] = pd.to_numeric(temp_df[\"已流通股份\"], errors=\"coerce\")\n    temp_df[\"已上市流通A股\"] = pd.to_numeric(temp_df[\"已上市流通A股\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_zh_a_gbjg_em_df = stock_zh_a_gbjg_em(symbol=\"603392.SH\")\n    print(stock_zh_a_gbjg_em_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_hold.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/2/21 11:00\nDesc: 新浪财经-股票-机构持股\nhttps://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jgcg/index.phtml\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils import demjson\n\n\ndef stock_institute_hold(symbol: str = \"20051\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-股票-机构持股一览表\n    https://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jgcg/index.phtml\n    :param symbol: 从 2005 年开始, {\"一季报\":1, \"中报\":2 \"三季报\":3 \"年报\":4}, e.g., \"20191\", 其中的 1 表示一季报; \"20193\", 其中的 3 表示三季报;\n    :type symbol: str\n    :return: 机构持股一览表\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jgcg/index.phtml\"\n    params = {\n        \"p\": \"1\",\n        \"num\": \"10000\",\n        \"reportdate\": symbol[:-1],\n        \"quarter\": symbol[-1],\n    }\n    r = requests.get(url, params=params)\n    temp_df = pd.read_html(StringIO(r.text))[0]\n    temp_df[\"证券代码\"] = temp_df[\"证券代码\"].astype(str).str.zfill(6)\n    del temp_df[\"明细\"]\n    temp_df.columns = [\n        \"证券代码\",\n        \"证券简称\",\n        \"机构数\",\n        \"机构数变化\",\n        \"持股比例\",\n        \"持股比例增幅\",\n        \"占流通股比例\",\n        \"占流通股比例增幅\",\n    ]\n    temp_df[\"机构数\"] = pd.to_numeric(temp_df[\"机构数\"], errors=\"coerce\")\n    temp_df[\"机构数变化\"] = pd.to_numeric(temp_df[\"机构数变化\"], errors=\"coerce\")\n    temp_df[\"持股比例\"] = pd.to_numeric(temp_df[\"持股比例\"], errors=\"coerce\")\n    temp_df[\"持股比例增幅\"] = pd.to_numeric(temp_df[\"持股比例增幅\"], errors=\"coerce\")\n    temp_df[\"占流通股比例\"] = pd.to_numeric(temp_df[\"占流通股比例\"], errors=\"coerce\")\n    temp_df[\"占流通股比例增幅\"] = pd.to_numeric(\n        temp_df[\"占流通股比例增幅\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_institute_hold_detail(\n    stock: str = \"600433\", quarter: str = \"20201\"\n) -> pd.DataFrame:\n    \"\"\"\n    新浪财经-股票-机构持股详情\n    https://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jgcg/index.phtml\n    :param stock: 股票代码\n    :type stock: str\n    :param quarter: 从 2005 年开始, {\"一季报\":1, \"中报\":2 \"三季报\":3 \"年报\":4}, e.g., \"20191\", 其中的 1 表示一季报; \"20193\", 其中的 3 表示三季报;\n    :type quarter: str\n    :return: 指定股票和财报时间的机构持股数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://vip.stock.finance.sina.com.cn/q/api/jsonp.php/var%20details=/ComStockHoldService.getJGCGDetail\"\n    params = {\n        \"symbol\": stock,\n        \"quarter\": quarter,\n    }\n    r = requests.get(url, params=params)\n    text_data = r.text\n    json_data = demjson.decode(text_data[text_data.find(\"{\") : -2])\n    big_df = pd.DataFrame()\n    for item in json_data[\"data\"].keys():\n        inner_temp_df = pd.DataFrame(json_data[\"data\"][item]).T.iloc[:-1, :]\n        inner_temp_df.reset_index(inplace=True)\n        big_df = pd.concat(objs=[big_df, inner_temp_df], ignore_index=True)\n    if not big_df.empty:\n        big_df[\"index\"] = big_df[\"index\"].str.split(\"_\", expand=True)[0]\n        big_df.rename(columns={\"index\": \"institute\"}, inplace=True)\n        big_df = big_df.iloc[:, :12]\n        big_df.columns = [\n            \"持股机构类型\",\n            \"持股机构代码\",\n            \"持股机构简称\",\n            \"持股机构全称\",\n            \"持股数\",\n            \"最新持股数\",\n            \"持股比例\",\n            \"最新持股比例\",\n            \"占流通股比例\",\n            \"最新占流通股比例\",\n            \"持股比例增幅\",\n            \"占流通股比例增幅\",\n        ]\n        big_df[\"持股机构类型\"] = big_df[\"持股机构类型\"].str.replace(\"fund\", \"基金\")\n        big_df[\"持股机构类型\"] = big_df[\"持股机构类型\"].str.replace(\n            \"socialSecurity\", \"全国社保\"\n        )\n        big_df[\"持股机构类型\"] = big_df[\"持股机构类型\"].str.replace(\"qfii\", \"QFII\")\n        big_df[\"持股机构类型\"] = big_df[\"持股机构类型\"].str.replace(\"insurance\", \"保险\")\n\n        big_df[\"持股数\"] = pd.to_numeric(big_df[\"持股数\"], errors=\"coerce\")\n        big_df[\"最新持股数\"] = pd.to_numeric(big_df[\"最新持股数\"], errors=\"coerce\")\n        big_df[\"持股比例\"] = pd.to_numeric(big_df[\"持股比例\"], errors=\"coerce\")\n        big_df[\"最新持股比例\"] = pd.to_numeric(big_df[\"最新持股比例\"], errors=\"coerce\")\n        big_df[\"占流通股比例\"] = pd.to_numeric(big_df[\"占流通股比例\"], errors=\"coerce\")\n        big_df[\"最新占流通股比例\"] = pd.to_numeric(\n            big_df[\"最新占流通股比例\"], errors=\"coerce\"\n        )\n        big_df[\"持股比例增幅\"] = pd.to_numeric(big_df[\"持股比例增幅\"], errors=\"coerce\")\n        big_df[\"占流通股比例增幅\"] = pd.to_numeric(\n            big_df[\"占流通股比例增幅\"], errors=\"coerce\"\n        )\n        return big_df\n    else:\n        return pd.DataFrame()\n\n\nif __name__ == \"__main__\":\n    stock_institute_hold_df = stock_institute_hold(symbol=\"20201\")\n    print(stock_institute_hold_df)\n\n    stock_institute_hold_detail_df = stock_institute_hold_detail(\n        stock=\"300003\", quarter=\"20201\"\n    )\n    print(stock_institute_hold_detail_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_ipo_declare.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/12/24 16:20\nDesc: 东方财富网-数据中心-新股申购-首发申报信息-首发申报企业信息\nhttps://data.eastmoney.com/xg/xg/sbqy.html\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.cons import headers\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_ipo_declare_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-新股数据-首发申报企业信息\n    https://data.eastmoney.com/xg/xg/sbqy.html\n    :return: 首发申报企业信息\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"END_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_IPO_DECORGNEWEST\",\n        \"columns\": \"DECLARE_ORG,STATE,REG_ADDRESS,RECOMMEND_ORG,LAW_FIRM,ACCOUNT_FIRM,IS_SUBMIT,\"\n        \"PREDICT_LISTING_MARKET,END_DATE,INFO_CODE,SECURITY_CODE,ORG_CODE,IS_REGISTER,\"\n        \"STATE_CODE,DERIVE_SECURITY_CODE,ORG_CODE_OLD,IS_STATE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"DECLARE_ORG\": \"企业名称\",\n            \"STATE\": \"最新状态\",\n            \"REG_ADDRESS\": \"注册地\",\n            \"RECOMMEND_ORG\": \"保荐机构\",\n            \"LAW_FIRM\": \"律师事务所\",\n            \"ACCOUNT_FIRM\": \"会计师事务所\",\n            \"PREDICT_LISTING_MARKET\": \"拟上市地点\",\n            \"END_DATE\": \"更新日期\",\n            \"INFO_CODE\": \"招股说明书\",\n        },\n        inplace=True,\n    )\n\n    # 招股说明书链接处理（类似原有代码）\n    if \"招股说明书\" in big_df.columns:\n        big_df[\"招股说明书\"] = [\n            f\"https://pdf.dfcfw.com/pdf/H2_{item}_1.pdf\" if pd.notna(item) else \"\"\n            for item in big_df[\"招股说明书\"]\n        ]\n\n    big_df = big_df[\n        [\n            \"序号\",\n            \"企业名称\",\n            \"最新状态\",\n            \"注册地\",\n            \"保荐机构\",\n            \"律师事务所\",\n            \"会计师事务所\",\n            \"拟上市地点\",\n            \"更新日期\",\n            # 可根据需要添加其他列，如 \"IS_REGISTER\" 等\n            \"招股说明书\",\n        ]\n    ]\n\n    # 日期处理\n    big_df[\"更新日期\"] = pd.to_datetime(\n        big_df[\"更新日期\"], errors=\"coerce\", utc=True\n    ).dt.date\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_ipo_declare_em_df = stock_ipo_declare_em()\n    print(stock_ipo_declare_em_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_ipo_review.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/12/25 16:46\nDesc: 东方财富网-数据中心-新股申购-过会企业信息\nhttps://data.eastmoney.com/xg/gh/default.html\n\"\"\"\n\nimport json\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.cons import headers\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_ipo_review_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-新股申购-新股上会信息\n    https://data.eastmoney.com/xg/gh/default.html\n    :return: 新股上会信息\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"REVIEW_DATE,ORG_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_IPO_REVIEW\",\n        \"columns\": \"ALL\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n\n    def parse_jsonp(text: str):\n        \"\"\"安全解析 JSONP 响应\"\"\"\n        start = text.find(\"{\")\n        end = text.rfind(\"}\")\n        if start == -1 or end == -1 or end <= start:\n            raise ValueError(f\"无法找到 JSON 对象: {text[:200]}...\")\n        json_str = text[start : end + 1]\n        return json.loads(json_str)\n\n    # 首次请求获取总页数\n    r = requests.get(url, params=params, headers=headers)\n    r.raise_for_status()\n    data_json = parse_jsonp(r.text)\n\n    if \"result\" not in data_json or \"pages\" not in data_json[\"result\"]:\n        raise ValueError(\"响应格式异常，未找到 result.pages\")\n\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params[\"pageNumber\"] = str(page)\n        r = requests.get(url, params=params, headers=headers)\n        r.raise_for_status()\n        try:\n            data_json = parse_jsonp(r.text)\n            temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n            big_df = pd.concat([big_df, temp_df], ignore_index=True)\n        except Exception as e:\n            print(f\"第 {page} 页解析失败: {e}\")\n            continue\n\n    big_df.reset_index(drop=True, inplace=True)\n    big_df.insert(0, \"序号\", big_df.index + 1)\n\n    big_df.rename(\n        columns={\n            \"ORG_NAME\": \"企业名称\",\n            \"SECURITY_NAME_ABBR\": \"股票简称\",\n            \"SECURITY_CODE\": \"股票代码\",\n            \"TRADE_MARKET\": \"上市板块\",\n            \"REVIEW_DATE\": \"上会日期\",\n            \"REVIEW_STATE\": \"审核状态\",\n            \"REVIEW_MEMBER\": \"发审委委员\",\n            \"LEAD_UNDERWRITER\": \"主承销商\",\n            \"ISSUE_NUM\": \"发行数量(股)\",\n            \"FINANCE_AMT_UPPER\": \"拟融资额(元)\",\n            \"NOTICE_DATE\": \"公告日期\",\n            \"LISTING_DATE\": \"上市日期\",\n        },\n        inplace=True,\n    )\n\n    big_df = big_df[\n        [\n            \"序号\",\n            \"企业名称\",\n            \"股票简称\",\n            \"股票代码\",\n            \"上市板块\",\n            \"上会日期\",\n            \"审核状态\",\n            \"发审委委员\",\n            \"主承销商\",\n            \"发行数量(股)\",\n            \"拟融资额(元)\",\n            \"公告日期\",\n            \"上市日期\",\n        ]\n    ]\n\n    # 日期处理\n    date_cols = [\"上会日期\", \"公告日期\", \"上市日期\"]\n    for col in date_cols:\n        if col in big_df.columns:\n            big_df[col] = pd.to_datetime(big_df[col], errors=\"coerce\").dt.date\n\n    # 数值格式化（可选）\n    if \"发行数量(股)\" in big_df.columns:\n        big_df[\"发行数量(股)\"] = pd.to_numeric(big_df[\"发行数量(股)\"], errors=\"coerce\")\n    if \"拟融资额(元)\" in big_df.columns:\n        big_df[\"拟融资额(元)\"] = pd.to_numeric(big_df[\"拟融资额(元)\"], errors=\"coerce\")\n\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_ipo_review_em_df = stock_ipo_review_em()\n    print(stock_ipo_review_em_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_ipo_ths.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/03/04\nDesc: 同花顺-数据中心-新股申购与中签\nhttps://data.10jqka.com.cn/ipo/xgsgyzq/\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef stock_ipo_ths(symbol: str = \"全部A股\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-新股申购与中签\n    https://data.10jqka.com.cn/ipo/xgsgyzq/\n    :param symbol: choice of {\"全部A股\", \"沪市主板\", \"深市主板\", \"创业板\", \"科创板\", \"京市主板\"}\n    :type symbol: str\n    :return: 新股申购与中签数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"全部A股\": \"all\",\n        \"沪市主板\": \"hszb\",\n        \"深市主板\": \"sszb\",\n        \"创业板\": \"cyb\",\n        \"科创板\": \"kcbsg\",\n        \"京市主板\": \"bjzb\",\n    }\n    if symbol not in symbol_map:\n        raise ValueError(\n            f\"Invalid symbol: {symbol}. \"\n            f\"Please choose from {list(symbol_map.keys())}\"\n        )\n\n    url = f\"https://data.10jqka.com.cn/ipo/xgsgyzq/{symbol_map[symbol]}/\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n                      \"Chrome/89.0.4389.90 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    r.raise_for_status()\n    soup = BeautifulSoup(r.text, \"lxml\")\n\n    # 查找表格\n    table = soup.find(\"table\", id=\"maintable\")\n    if not table:\n        table = soup.find(\"table\", class_=\"m_table\")\n    if not table:\n        raise ValueError(\"未找到数据表格，请检查网页结构是否发生变化\")\n\n    # 获取表头\n    thead = table.find(\"thead\")\n    if thead:\n        headers_list = [th.get_text(strip=True) for th in thead.find_all(\"th\")]\n    else:\n        headers_list = []\n\n    # 获取表格数据\n    tbody = table.find(\"tbody\")\n    if not tbody:\n        tbody = table  # 有些表格没有tbody标签\n\n    data = []\n    for row in tbody.find_all(\"tr\"):\n        cells = [td.get_text(strip=True) for td in row.find_all(\"td\")]\n        if cells:\n            data.append(cells)\n\n    # 创建DataFrame\n    if headers_list and data:\n        temp_df = pd.DataFrame(data, columns=headers_list)\n    elif data:\n        temp_df = pd.DataFrame(data)\n    else:\n        temp_df = pd.DataFrame()\n\n    return temp_df\n\n\ndef stock_ipo_hk_ths() -> pd.DataFrame:\n    \"\"\"\n    同花顺-数据中心-新股申购与中签-港股\n    https://data.10jqka.com.cn/ipo/xgsgyzq/\n    :return: 港股新股申购与中签数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://data.10jqka.com.cn/ipo/xgsgyzq/hkstock/\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n                      \"Chrome/89.0.4389.90 Safari/537.36\",\n    }\n    r = requests.get(url, headers=headers)\n    r.raise_for_status()\n    soup = BeautifulSoup(r.text, \"lxml\")\n\n    # 查找表格\n    table = soup.find(\"table\", id=\"maintable\")\n    if not table:\n        table = soup.find(\"table\", class_=\"m_table\")\n    if not table:\n        raise ValueError(\"未找到数据表格，请检查网页结构是否发生变化\")\n\n    # 获取表头\n    thead = table.find(\"thead\")\n    if thead:\n        headers_list = [th.get_text(strip=True) for th in thead.find_all(\"th\")]\n    else:\n        headers_list = []\n\n    # 获取表格数据\n    tbody = table.find(\"tbody\")\n    if not tbody:\n        tbody = table  # 有些表格没有tbody标签\n\n    data = []\n    for row in tbody.find_all(\"tr\"):\n        cells = [td.get_text(strip=True) for td in row.find_all(\"td\")]\n        if cells:\n            data.append(cells)\n\n    # 创建DataFrame\n    if headers_list and data:\n        temp_df = pd.DataFrame(data, columns=headers_list)\n    elif data:\n        temp_df = pd.DataFrame(data)\n    else:\n        temp_df = pd.DataFrame()\n\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_ipo_ths_df = stock_ipo_ths(symbol=\"全部A股\")\n    print(stock_ipo_ths_df)\n\n    stock_ipo_hk_ths_df = stock_ipo_hk_ths()\n    print(stock_ipo_hk_ths_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_ipo_tutor.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/12/24 16:37\nDesc: 东方财富网-数据中心-新股申购-辅导备案信息\nhttps://data.eastmoney.com/xg/ipo/fd.html\n\"\"\"\n\nimport json\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.cons import headers\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_ipo_tutor_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-新股数据-IPO辅导信息\n    https://data.eastmoney.com/xg/ipo/fd.html\n    :return: IPO辅导信息\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"RECORD_DATE,TUTOR_OBJECT\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_IPO_TUTRECORD\",\n        \"columns\": \"TUTOR_OBJECT,ORG_CODE,TUTOR_ORG_CODE,TUTOR_ORG,TUTOR_PROCESS_STATE,REPORT_TYPE,\"\n        \"DISPATCH_ORG,REPORT_TITLE,RECORD_DATE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n\n    def parse_jsonp(text: str):\n        \"\"\"安全解析 JSONP 响应\"\"\"\n        # 找到第一个 { 和最后一个 } 之间的内容\n        start = text.find(\"{\")\n        end = text.rfind(\"}\")\n        if start == -1 or end == -1 or end <= start:\n            raise ValueError(f\"无法找到 JSON 对象: {text[:100]}...\")\n        json_str = text[start : end + 1]\n        return json.loads(json_str)\n\n    # 首次请求获取总页数\n    r = requests.get(url, params=params, headers=headers)\n    r.raise_for_status()  # 如果请求失败，抛出异常\n    data_json = parse_jsonp(r.text)\n\n    if \"result\" not in data_json or \"pages\" not in data_json[\"result\"]:\n        raise ValueError(\"响应格式异常，未找到 result.pages\")\n\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params[\"pageNumber\"] = str(page)\n        r = requests.get(url, params=params, headers=headers)\n        r.raise_for_status()\n        try:\n            data_json = parse_jsonp(r.text)\n            temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n            big_df = pd.concat([big_df, temp_df], ignore_index=True)\n        except Exception as e:\n            print(f\"第 {page} 页解析失败: {e}\")\n            continue\n\n    big_df.reset_index(drop=True, inplace=True)\n    big_df.insert(0, \"序号\", big_df.index + 1)\n\n    big_df.rename(\n        columns={\n            \"TUTOR_OBJECT\": \"企业名称\",\n            \"TUTOR_ORG\": \"辅导机构\",\n            \"TUTOR_PROCESS_STATE\": \"辅导状态\",\n            \"REPORT_TYPE\": \"报告类型\",\n            \"DISPATCH_ORG\": \"派出机构\",\n            \"REPORT_TITLE\": \"报告标题\",\n            \"RECORD_DATE\": \"备案日期\",\n        },\n        inplace=True,\n    )\n\n    big_df = big_df[\n        [\n            \"序号\",\n            \"企业名称\",\n            \"辅导机构\",\n            \"辅导状态\",\n            \"报告类型\",\n            \"派出机构\",\n            \"报告标题\",\n            \"备案日期\",\n        ]\n    ]\n\n    big_df[\"备案日期\"] = pd.to_datetime(big_df[\"备案日期\"], errors=\"coerce\").dt.date\n\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_ipo_tutor_em_df = stock_ipo_tutor_em()\n    print(stock_ipo_tutor_em_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_kcb_detail_sse.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2022/4/7 17:36\nDesc: http://kcb.sse.com.cn/renewal/xmxq/index.shtml?auditId=926&anchor_type=0\n\"\"\"\n\nimport requests\nimport pandas as pd\n\n# TODO\n\n\ndef stock_kcb_detail_renewal():\n    url = \"http://query.sse.com.cn/commonSoaQuery.do\"\n    params = {\n        \"isPagination\": \"true\",\n        \"sqlId\": \"SH_XM_LB\",\n        \"stockAuditNum\": \"926\",  # 每次更新该字段就可以\n        \"_\": \"1649324745607\",\n    }\n    headers = {\n        \"Host\": \"query.sse.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"http://kcb.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"])\n    # 处理下 temp_df 里面的字段就可以了\n    print(temp_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_kcb_sse.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2022/4/7 17:36\nDesc: http://kcb.sse.com.cn/renewal/#\n\"\"\"\n\nimport requests\nimport pandas as pd\n\n# TODO\n\n\ndef stock_kcb_renewal():\n    url = \"http://query.sse.com.cn/statusAction.do\"\n    params = {\n        \"isPagination\": \"true\",\n        \"sqlId\": \"SH_XM_LB\",\n        \"pageHelp.pageSize\": \"20\",\n        \"offerType\": \"\",\n        \"commitiResult\": \"\",\n        \"registeResult\": \"\",\n        \"province\": \"\",\n        \"csrcCode\": \"\",\n        \"currStatus\": \"\",\n        \"order\": \"updateDate|desc,stockAuditNum|desc\",\n        \"keyword\": \"\",\n        \"auditApplyDateBegin\": \"\",\n        \"auditApplyDateEnd\": \"\",\n        \"pageHelp.pageNo\": \"1\",\n        \"pageHelp.beginPage\": \"1\",\n        \"pageHelp.endPage\": \"1\",\n        \"_\": \"1649322742207\",\n    }\n    headers = {\n        \"Host\": \"query.sse.com.cn\",\n        \"Pragma\": \"no-cache\",\n        \"Referer\": \"http://kcb.sse.com.cn/\",\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36\",\n    }\n\n    for page in range(1, 37):\n        print(page)\n        params.update(\n            {\n                \"pageHelp.pageNo\": page,\n                \"pageHelp.beginPage\": page,\n                \"pageHelp.endPage\": page,\n            }\n        )\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"])\n        # 处理下 temp_df 里面的字段就可以了\n        print(temp_df)\n        break\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_notice.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/6/13 13:00\nDesc: 东方财富网-数据中心-公告大全-沪深 A 股公告\nhttps://data.eastmoney.com/notices/hsa/5.html\n\"\"\"\n\nimport math\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_notice_report(symbol: str = \"全部\", date: str = \"20220511\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-公告大全-沪深京 A 股公告\n    https://data.eastmoney.com/notices/hsa/5.html\n    :param symbol: 报告类型; choice of {\"全部\", \"重大事项\", \"财务报告\", \"融资公告\", \"风险提示\", \"资产重组\", \"信息变更\", \"持股变动\"}\n    :type symbol: str\n    :param date: 制定日期\n    :type date: str\n    :return: 沪深京 A 股公告\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://np-anotice-stock.eastmoney.com/api/security/ann\"\n    report_map = {\n        \"全部\": \"0\",\n        \"财务报告\": \"1\",\n        \"融资公告\": \"2\",\n        \"风险提示\": \"3\",\n        \"信息变更\": \"4\",\n        \"重大事项\": \"5\",\n        \"资产重组\": \"6\",\n        \"持股变动\": \"7\",\n    }\n    params = {\n        \"sr\": \"-1\",\n        \"page_size\": \"100\",\n        \"page_index\": \"1\",\n        \"ann_type\": \"A\",\n        \"client_source\": \"web\",\n        \"f_node\": report_map[symbol],\n        \"s_node\": \"0\",\n        \"begin_time\": \"-\".join([date[:4], date[4:6], date[6:]]),\n        \"end_time\": \"-\".join([date[:4], date[4:6], date[6:]]),\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = math.ceil(data_json[\"data\"][\"total_hits\"] / 100)\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, int(total_page) + 1), leave=False):\n        params.update(\n            {\n                \"page_index\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"data\"][\"list\"])\n\n        temp_code_list = []\n        for item in data_json[\"data\"][\"list\"]:\n            if len(item[\"codes\"]) == 1:\n                temp_code_list.append(item[\"codes\"][0])\n            else:\n                for code in item[\"codes\"]:\n                    if code[\"ann_type\"].startswith(\"A\"):\n                        temp_code_list.append(code)\n                        break\n        temp_codes_df = pd.DataFrame(temp_code_list)\n\n        try:\n            temp_columns_df = pd.DataFrame(\n                [item[\"columns\"][0] for item in data_json[\"data\"][\"list\"]]\n            )\n        except:  # noqa: E722\n            continue\n        del temp_df[\"codes\"]\n        del temp_df[\"columns\"]\n        temp_df = pd.concat(objs=[temp_df, temp_columns_df, temp_codes_df], axis=1)\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.rename(\n        columns={\n            \"art_code\": \"编码\",\n            \"display_time\": \"-\",\n            \"eiTime\": \"-\",\n            \"notice_date\": \"公告日期\",\n            \"title\": \"公告标题\",\n            \"column_code\": \"-\",\n            \"column_name\": \"公告类型\",\n            \"ann_type\": \"-\",\n            \"inner_code\": \"-\",\n            \"market_code\": \"-\",\n            \"short_name\": \"名称\",\n            \"stock_code\": \"代码\",\n        },\n        inplace=True,\n    )\n    url = \"https://data.eastmoney.com/notices/detail/\"\n    big_df[\"网址\"] = url + big_df[\"代码\"] + \"/\" + big_df[\"编码\"] + \".html\"\n    big_df = big_df[\n        [\n            \"代码\",\n            \"名称\",\n            \"公告标题\",\n            \"公告类型\",\n            \"公告日期\",\n            \"网址\",\n        ]\n    ]\n    big_df[\"公告日期\"] = pd.to_datetime(big_df[\"公告日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_notice_report_df = stock_notice_report(symbol=\"财务报告\", date=\"20240612\")\n    print(stock_notice_report_df)\n\n    item_list = [\n        \"全部\",\n        \"财务报告\",\n        \"融资公告\",\n        \"风险提示\",\n        \"信息变更\",\n        \"重大事项\",\n        \"资产重组\",\n        \"持股变动\",\n    ]\n    for temp_item in item_list:\n        stock_notice_report_df = stock_notice_report(symbol=temp_item, date=\"20220511\")\n        print(stock_notice_report_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_profit_forecast_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/1/6 15:00\nDesc: 东方财富网-数据中心-研究报告-盈利预测\nhttps://data.eastmoney.com/report/profitforecast.jshtml\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_profit_forecast_em(symbol: str = \"\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-研究报告-盈利预测\n    https://data.eastmoney.com/report/profitforecast.jshtml\n    :param symbol: \"\", 默认为获取全部数据; symbol=\"船舶制造\", 则获取具体行业板块的数据;\n    行业板块可以通过 ak.stock_board_industry_name_em() 接口获取\n    :type symbol: str\n    :return: 盈利预测\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"reportName\": \"RPT_WEB_RESPREDICT\",\n        \"columns\": \"WEB_RESPREDICT\",\n        \"pageNumber\": \"1\",\n        \"pageSize\": \"500\",\n        \"sortTypes\": \"-1\",\n        \"sortColumns\": \"RATING_ORG_NUM\",\n        \"p\": \"1\",\n        \"pageNo\": \"1\",\n        \"pageNum\": \"1\",\n    }\n    if symbol:\n        params.update({\"filter\": f'(INDUSTRY_BOARD=\"{symbol}\")'})\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    page_num = int(data_json[\"result\"][\"pages\"])\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n                \"p\": page,\n                \"pageNo\": page,\n                \"pageNum\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    year1 = str(big_df[\"YEAR1\"].mode().values[0])\n    year2 = str(big_df[\"YEAR2\"].mode().values[0])\n    year3 = str(big_df[\"YEAR3\"].mode().values[0])\n    year4 = str(big_df[\"YEAR4\"].mode().values[0])\n    big_df.columns = [\n        \"序号\",\n        \"-\",\n        \"代码\",\n        \"名称\",\n        \"研报数\",\n        \"机构投资评级(近六个月)-买入\",\n        \"机构投资评级(近六个月)-增持\",\n        \"机构投资评级(近六个月)-中性\",\n        \"机构投资评级(近六个月)-减持\",\n        \"机构投资评级(近六个月)-卖出\",\n        \"-\",\n        \"_\",\n        f\"{year1}预测每股收益\",\n        \"-\",\n        \"_\",\n        f\"{year2}预测每股收益\",\n        \"-\",\n        \"_\",\n        f\"{year3}预测每股收益\",\n        \"-\",\n        \"_\",\n        f\"{year4}预测每股收益\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n        \"_\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"代码\",\n            \"名称\",\n            \"研报数\",\n            \"机构投资评级(近六个月)-买入\",\n            \"机构投资评级(近六个月)-增持\",\n            \"机构投资评级(近六个月)-中性\",\n            \"机构投资评级(近六个月)-减持\",\n            \"机构投资评级(近六个月)-卖出\",\n            f\"{year1}预测每股收益\",\n            f\"{year2}预测每股收益\",\n            f\"{year3}预测每股收益\",\n            f\"{year4}预测每股收益\",\n        ]\n    ]\n    big_df[\"机构投资评级(近六个月)-买入\"] = big_df[\n        \"机构投资评级(近六个月)-买入\"\n    ].fillna(0)\n    big_df[\"机构投资评级(近六个月)-增持\"] = big_df[\n        \"机构投资评级(近六个月)-增持\"\n    ].fillna(0)\n    big_df[\"研报数\"] = pd.to_numeric(big_df[\"研报数\"], errors=\"coerce\")\n    big_df[\"机构投资评级(近六个月)-买入\"] = pd.to_numeric(\n        big_df[\"机构投资评级(近六个月)-买入\"], errors=\"coerce\"\n    )\n    big_df[\"机构投资评级(近六个月)-增持\"] = pd.to_numeric(\n        big_df[\"机构投资评级(近六个月)-增持\"], errors=\"coerce\"\n    )\n    big_df[\"机构投资评级(近六个月)-中性\"] = pd.to_numeric(\n        big_df[\"机构投资评级(近六个月)-中性\"], errors=\"coerce\"\n    )\n    big_df[\"机构投资评级(近六个月)-减持\"] = pd.to_numeric(\n        big_df[\"机构投资评级(近六个月)-减持\"], errors=\"coerce\"\n    )\n    big_df[\"机构投资评级(近六个月)-卖出\"] = pd.to_numeric(\n        big_df[\"机构投资评级(近六个月)-卖出\"], errors=\"coerce\"\n    )\n    big_df[\"机构投资评级(近六个月)-中性\"] = big_df[\n        \"机构投资评级(近六个月)-中性\"\n    ].fillna(0)\n    big_df[\"机构投资评级(近六个月)-减持\"] = big_df[\n        \"机构投资评级(近六个月)-减持\"\n    ].fillna(0)\n    big_df[\"机构投资评级(近六个月)-卖出\"] = big_df[\n        \"机构投资评级(近六个月)-卖出\"\n    ].fillna(0)\n    big_df[f\"{year1}预测每股收益\"] = pd.to_numeric(\n        big_df[f\"{year1}预测每股收益\"], errors=\"coerce\"\n    )\n    big_df[f\"{year2}预测每股收益\"] = pd.to_numeric(\n        big_df[f\"{year2}预测每股收益\"], errors=\"coerce\"\n    )\n    big_df[f\"{year3}预测每股收益\"] = pd.to_numeric(\n        big_df[f\"{year3}预测每股收益\"], errors=\"coerce\"\n    )\n    big_df[f\"{year4}预测每股收益\"] = pd.to_numeric(\n        big_df[f\"{year4}预测每股收益\"], errors=\"coerce\"\n    )\n    big_df.sort_values([\"研报数\"], ascending=False, inplace=True, ignore_index=True)\n    big_df[\"序号\"] = range(1, len(big_df) + 1)\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_profit_forecast_em_df = stock_profit_forecast_em(symbol=\"航运港口\")\n    print(stock_profit_forecast_em_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/1/7 15:00\nDesc: 东方财富网-数据中心-研究报告-盈利预测\nhttps://data.eastmoney.com/report/profitforecast.jshtml\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\n\ndef stock_hk_profit_forecast_et(\n    symbol: str = \"09999\", indicator: str = \"盈利预测概览\"\n) -> pd.DataFrame:\n    \"\"\"\n    经济通-公司资料-盈利预测\n    https://www.etnet.com.hk/www/sc/stocks/realtime/quote_profit.php?code=9999\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: \"盈利预测概览\"; choice of {\"评级总览\", \"去年度业绩表现\", \"综合盈利预测\", \"盈利预测概览\"}\n    :type indicator: str\n    :return: 盈利预测\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://www.etnet.com.hk/www/sc/stocks/realtime/quote_profit.php\"\n    params = {\n        \"code\": str(int(symbol)),\n    }\n    r = requests.get(url, params=params)\n    if indicator == \"评级总览\":\n        temp_df = pd.read_html(StringIO(r.text))[0]\n        inner_list = [item for item in temp_df.iloc[0, 0].split(\" \") if item != \"\"]\n        inner_list.remove(\"平均评级\")\n        temp_df = pd.DataFrame(inner_list).T\n        temp_df.columns = [\"方向\", \"评级数量\", \"平均评级\"]\n        return temp_df\n    elif indicator == \"去年度业绩表现\":\n        temp_df = pd.read_html(StringIO(r.text))[2]\n        temp_df_upper = temp_df.iloc[:, :2].copy()\n        temp_df_upper.reset_index(inplace=True, drop=True)\n        temp_df_upper.columns = [\"item\", \"value\"]\n        temp_df_down = temp_df.iloc[:, 3:].copy()\n        temp_df_down.reset_index(inplace=True, drop=True)\n        temp_df_down.columns = [\"item\", \"value\"]\n        temp_df = pd.concat(objs=[temp_df_upper, temp_df_down], ignore_index=True)\n        return temp_df\n    elif indicator == \"综合盈利预测\":\n        temp_df = pd.read_html(StringIO(r.text), header=0)[3]\n        temp_df.rename(\n            columns={\n                \"纯利/(亏损)  (百万元人民币)\": \"纯利/亏损\",\n                \"纯利/(亏损)  (百万港元)\": \"纯利/亏损\",\n                \"每股盈利/  (亏损)(分)\": \"每股盈利/每股亏损\",\n                \"每股盈利/  (亏损)(港仙)\": \"每股盈利/每股亏损\",\n                \"每股派息  (分)\": \"每股派息\",\n                \"每股派息  (港仙)\": \"每股派息\",\n                \"每股资产净值  (人民币元)\": \"每股资产净值\",\n                \"每股资产净值  (港元)\": \"每股资产净值\",\n                \"最高  (百万元人民币)\": \"最高\",\n                \"最高  (百万港元)\": \"最高\",\n                \"最低  (百万元人民币)\": \"最低\",\n                \"最低  (百万港元)\": \"最低\",\n            },\n            inplace=True,\n        )\n        temp_df[\"纯利/亏损\"] = pd.to_numeric(temp_df[\"纯利/亏损\"], errors=\"coerce\")\n        temp_df[\"每股盈利/每股亏损\"] = pd.to_numeric(\n            temp_df[\"每股盈利/每股亏损\"], errors=\"coerce\"\n        )\n        temp_df[\"每股派息\"] = pd.to_numeric(temp_df[\"每股派息\"], errors=\"coerce\")\n        temp_df[\"每股资产净值\"] = pd.to_numeric(\n            temp_df[\"每股资产净值\"], errors=\"coerce\"\n        )\n        temp_df[\"最高\"] = pd.to_numeric(temp_df[\"最高\"], errors=\"coerce\")\n        temp_df[\"最低\"] = pd.to_numeric(temp_df[\"最低\"], errors=\"coerce\")\n        return temp_df\n    elif indicator == \"盈利预测概览\":\n        temp_df = pd.read_html(StringIO(r.text), header=0)[4]\n        del temp_df[\"目标价* (港元).1\"]\n        temp_df.rename(\n            columns={\n                \"纯利/(亏损)  (百万元人民币)\": \"纯利/亏损\",\n                \"纯利/(亏损)  (百万港元)\": \"纯利/亏损\",\n                \"每股盈利*/ (亏损)  (港仙)\": \"每股盈利\",\n                \"每股盈利*/ (亏损)  (分)\": \"每股盈利\",\n                \"每股派息*  (分)\": \"每股派息\",\n                \"每股派息*  (港仙)\": \"每股派息\",\n                \"目标价* (港元)\": \"目标价\",\n            },\n            inplace=True,\n        )\n        temp_df.dropna(inplace=True)\n        temp_df[\"纯利/亏损\"] = pd.to_numeric(temp_df[\"纯利/亏损\"], errors=\"coerce\")\n        temp_df[\"每股盈利\"] = pd.to_numeric(temp_df[\"每股盈利\"], errors=\"coerce\")\n        temp_df[\"每股派息\"] = pd.to_numeric(temp_df[\"每股派息\"], errors=\"coerce\")\n        temp_df[\"目标价\"] = pd.to_numeric(temp_df[\"目标价\"], errors=\"coerce\")\n        temp_df[\"更新日期\"] = pd.to_datetime(\n            temp_df[\"更新日期\"], errors=\"coerce\", dayfirst=True\n        ).dt.date\n        temp_df[\"财政年度\"] = temp_df[\"财政年度\"].astype(int).astype(str)\n        return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_hk_profit_forecast_et_df = stock_hk_profit_forecast_et(\n        symbol=\"09999\", indicator=\"评级总览\"\n    )\n    print(stock_hk_profit_forecast_et_df)\n\n    stock_hk_profit_forecast_et_df = stock_hk_profit_forecast_et(\n        symbol=\"09999\", indicator=\"去年度业绩表现\"\n    )\n    print(stock_hk_profit_forecast_et_df)\n\n    stock_hk_profit_forecast_et_df = stock_hk_profit_forecast_et(\n        symbol=\"09999\", indicator=\"综合盈利预测\"\n    )\n    print(stock_hk_profit_forecast_et_df)\n\n    stock_hk_profit_forecast_et_df = stock_hk_profit_forecast_et(\n        symbol=\"09999\", indicator=\"盈利预测概览\"\n    )\n    print(stock_hk_profit_forecast_et_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_profit_forecast_ths.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2025/3/1 15:00\nDesc: 同花顺-盈利预测\nhttps://basic.10jqka.com.cn/new/600519/worth.html\n\"\"\"\n\nfrom io import StringIO\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.cons import headers\n\n\ndef stock_profit_forecast_ths(\n    symbol: str = \"600519\", indicator: str = \"预测年报每股收益\"\n) -> pd.DataFrame:\n    \"\"\"\n    同花顺-盈利预测\n    https://basic.10jqka.com.cn/new/600519/worth.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :param indicator: choice of {\"预测年报每股收益\", \"预测年报净利润\", \"业绩预测详表-机构\", \"业绩预测详表-详细指标预测\"}\n    :type indicator: str\n    :return: 盈利预测\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://basic.10jqka.com.cn/new/{symbol}/worth.html\"\n    r = requests.get(url, headers=headers)\n    r.encoding = \"gbk\"\n    if \"本年度暂无机构做出业绩预测\" in r.text:\n        # 处理 `本年度暂无机构做出业绩预测` 的情况\n        if indicator == \"预测年报每股收益\":\n            return pd.DataFrame()\n        elif indicator == \"预测年报净利润\":\n            return pd.DataFrame()\n        elif indicator == \"业绩预测详表-机构\":\n            temp_df = pd.read_html(StringIO(r.text))[0]\n            columns_list = []\n            for item in temp_df.columns:\n                columns_list.append(item[1])\n            columns_list[2] = \"预测年报每股收益\" + columns_list[2]\n            columns_list[3] = \"预测年报每股收益\" + columns_list[3]\n            columns_list[4] = \"预测年报每股收益\" + columns_list[4]\n            columns_list[5] = \"预测年报净利润\" + columns_list[5]\n            columns_list[6] = \"预测年报净利润\" + columns_list[6]\n            columns_list[7] = \"预测年报净利润\" + columns_list[7]\n            temp_df.columns = columns_list\n            temp_df[\"报告日期\"] = pd.to_datetime(\n                temp_df[\"报告日期\"], errors=\"coerce\"\n            ).dt.date\n            return temp_df\n        elif indicator == \"业绩预测详表-详细指标预测\":\n            temp_df = pd.read_html(StringIO(r.text))[1]\n            temp_df.columns = [\n                item.replace(\"（\", \"-\").replace(\"）\", \"\") for item in temp_df.columns\n            ]\n            return temp_df\n        else:\n            return pd.DataFrame()\n    else:\n        if indicator == \"预测年报每股收益\":\n            temp_df = pd.read_html(StringIO(r.text))[0]\n            temp_df[\"年度\"] = temp_df[\"年度\"].astype(str)\n            return temp_df\n        elif indicator == \"预测年报净利润\":\n            temp_df = pd.read_html(StringIO(r.text))[1]\n            temp_df[\"年度\"] = temp_df[\"年度\"].astype(str)\n            return temp_df\n        elif indicator == \"业绩预测详表-机构\":\n            temp_df = pd.read_html(StringIO(r.text))[2]\n            columns_list = []\n            for item in temp_df.columns:\n                columns_list.append(item[1])\n            columns_list[2] = \"预测年报每股收益\" + columns_list[2]\n            columns_list[3] = \"预测年报每股收益\" + columns_list[3]\n            columns_list[4] = \"预测年报每股收益\" + columns_list[4]\n            columns_list[5] = \"预测年报净利润\" + columns_list[5]\n            columns_list[6] = \"预测年报净利润\" + columns_list[6]\n            columns_list[7] = \"预测年报净利润\" + columns_list[7]\n            temp_df.columns = columns_list\n            temp_df[\"报告日期\"] = pd.to_datetime(temp_df[\"报告日期\"]).dt.date\n            return temp_df\n        elif indicator == \"业绩预测详表-详细指标预测\":\n            temp_df = pd.read_html(StringIO(r.text))[3]\n            temp_df.columns = [\n                item.replace(\"（\", \"-\").replace(\"）\", \"\") for item in temp_df.columns\n            ]\n            return temp_df\n        else:\n            return pd.DataFrame()\n\n\nif __name__ == \"__main__\":\n    stock_profit_forecast_ths_df = stock_profit_forecast_ths(\n        symbol=\"600519\", indicator=\"预测年报每股收益\"\n    )\n    print(stock_profit_forecast_ths_df)\n\n    stock_profit_forecast_ths_df = stock_profit_forecast_ths(\n        symbol=\"600519\", indicator=\"预测年报净利润\"\n    )\n    print(stock_profit_forecast_ths_df)\n\n    stock_profit_forecast_ths_df = stock_profit_forecast_ths(\n        symbol=\"600519\", indicator=\"业绩预测详表-机构\"\n    )\n    print(stock_profit_forecast_ths_df)\n\n    stock_profit_forecast_ths_df = stock_profit_forecast_ths(\n        symbol=\"600519\", indicator=\"业绩预测详表-详细指标预测\"\n    )\n    print(stock_profit_forecast_ths_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_recommend.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2022/1/7 13:40\nDesc: 新浪财经-机构推荐池\nhttp://stock.finance.sina.com.cn/stock/go.php/vIR_RatingNewest/index.phtml\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef stock_institute_recommend(symbol: str = \"投资评级选股\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-机构推荐池-最新投资评级\n    http://stock.finance.sina.com.cn/stock/go.php/vIR_RatingNewest/index.phtml\n    :param symbol: choice of {'最新投资评级', '上调评级股票', '下调评级股票', '股票综合评级', '首次评级股票', '目标涨幅排名', '机构关注度', '行业关注度', '投资评级选股'}\n    :type symbol: str\n    :return: 最新投资评级数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"http://stock.finance.sina.com.cn/stock/go.php/vIR_RatingNewest/index.phtml\"\n    params = {\n        \"num\": \"40\",\n        \"p\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    soup = BeautifulSoup(r.text, \"lxml\")\n    indicator_map = {\n        item.find(\"a\").text: item.find(\"a\")[\"href\"]\n        for item in soup.find(attrs={\"id\": \"leftMenu\"}).find_all(\"dd\")[1].find_all(\"li\")\n    }\n    url = indicator_map[symbol]\n    params = {\n        \"num\": \"10000\",\n        \"p\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    if symbol == \"股票综合评级\":\n        temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :9]\n        temp_df[\"股票代码\"] = temp_df[\"股票代码\"].astype(str).str.zfill(6)\n        temp_df = temp_df.rename(columns={\"综合评级↓\": \"综合评级\"})\n        return temp_df\n    if symbol == \"首次评级股票\":\n        temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :8]\n        temp_df[\"股票代码\"] = temp_df[\"股票代码\"].astype(str).str.zfill(6)\n        temp_df = temp_df.rename(columns={\"评级日期↓\": \"评级日期\"})\n        return temp_df\n    if symbol == \"目标涨幅排名\":\n        temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :7]\n        temp_df[\"股票代码\"] = temp_df[\"股票代码\"].astype(str).str.zfill(6)\n        temp_df = temp_df.rename(columns={\"平均目标涨幅↓\": \"平均目标涨幅\"})\n        return temp_df\n    if symbol == \"机构关注度\":\n        temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :11]\n        temp_df[\"股票代码\"] = temp_df[\"股票代码\"].astype(str).str.zfill(6)\n        temp_df = temp_df.rename(columns={\"关注度↓\": \"关注度\"})\n        return temp_df\n    if symbol == \"行业关注度\":\n        temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :11]\n        temp_df = temp_df.rename(columns={\"关注度↓\": \"关注度\"})\n        return temp_df\n    if symbol == \"投资评级选股\":\n        temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :9]\n        temp_df[\"股票代码\"] = temp_df[\"股票代码\"].astype(str).str.zfill(6)\n        del temp_df[\"评级明细\"]\n        temp_df = temp_df.rename(columns={\"评级日期↓\": \"评级日期\"})\n        return temp_df\n    temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :8]\n    temp_df[\"股票代码\"] = temp_df[\"股票代码\"].astype(str).str.zfill(6)\n    temp_df = temp_df.rename(columns={\"评级日期↓\": \"评级日期\"})\n    return temp_df\n\n\ndef stock_institute_recommend_detail(symbol: str = \"000001\") -> pd.DataFrame:\n    \"\"\"\n    新浪财经-机构推荐池-股票评级记录\n    http://stock.finance.sina.com.cn/stock/go.php/vIR_StockSearch/key/sz000001.phtml\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 具体股票的股票评级记录\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"http://stock.finance.sina.com.cn/stock/go.php/vIR_StockSearch/key/{symbol}.phtml\"\n    params = {\n        \"num\": \"5000\",\n        \"p\": \"1\",\n    }\n    r = requests.get(url, params=params)\n    temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :8]\n    temp_df[\"股票代码\"] = temp_df[\"股票代码\"].astype(str).str.zfill(6)\n    temp_df = temp_df.rename(columns={\"评级日期↓\": \"评级日期\"})\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    for item in [\n        \"最新投资评级\",\n        \"上调评级股票\",\n        \"下调评级股票\",\n        \"股票综合评级\",\n        \"首次评级股票\",\n        \"目标涨幅排名\",\n        \"机构关注度\",\n        \"行业关注度\",\n        \"投资评级选股\",\n    ]:\n        stock_institute_recommend_df = stock_institute_recommend(symbol=item)\n        print(stock_institute_recommend_df)\n\n    stock_institute_recommend_detail_df = stock_institute_recommend_detail(\n        symbol=\"002709\"\n    )\n    print(stock_institute_recommend_detail_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_register_em.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/12/25 16:20\nDesc: 东方财富网-数据中心-新股数据-注册制审核\nhttps://data.eastmoney.com/kcb/?type=nsb\n\"\"\"\n\nimport pandas as pd\nimport requests\n\nfrom akshare.utils.cons import headers\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef stock_register_all_em() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-新股数据-IPO审核信息-全部\n    https://data.eastmoney.com/xg/ipo/\n    :return: 科创板注册制审核结果\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"UPDATE_DATE,ORG_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_IPO_INFOALLNEW\",\n        \"columns\": \"SECURITY_CODE,STATE,REG_ADDRESS,INFO_CODE,CSRC_INDUSTRY,ACCEPT_DATE,DECLARE_ORG,\"\n        \"PREDICT_LISTING_MARKET,LAW_FIRM,ACCOUNT_FIRM,ORG_CODE,UPDATE_DATE,RECOMMEND_ORG,IS_REGISTRATION\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"DECLARE_ORG\": \"企业名称\",\n            \"STATE\": \"最新状态\",\n            \"REG_ADDRESS\": \"注册地\",\n            \"CSRC_INDUSTRY\": \"行业\",\n            \"RECOMMEND_ORG\": \"保荐机构\",\n            \"LAW_FIRM\": \"律师事务所\",\n            \"ACCOUNT_FIRM\": \"会计师事务所\",\n            \"UPDATE_DATE\": \"更新日期\",\n            \"ACCEPT_DATE\": \"受理日期\",\n            \"PREDICT_LISTING_MARKET\": \"拟上市地点\",\n            \"INFO_CODE\": \"招股说明书\",\n        },\n        inplace=True,\n    )\n    big_df[\"招股说明书\"] = [\n        f\"https://pdf.dfcfw.com/pdf/H2_{item}_1.pdf\" for item in big_df[\"招股说明书\"]\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"企业名称\",\n            \"最新状态\",\n            \"注册地\",\n            \"行业\",\n            \"保荐机构\",\n            \"律师事务所\",\n            \"会计师事务所\",\n            \"更新日期\",\n            \"受理日期\",\n            \"拟上市地点\",\n            \"招股说明书\",\n        ]\n    ]\n    big_df[\"更新日期\"] = pd.to_datetime(big_df[\"更新日期\"], errors=\"coerce\").dt.date\n    big_df[\"受理日期\"] = pd.to_datetime(big_df[\"受理日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_register_kcb() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-新股数据-IPO审核信息-科创板\n    https://data.eastmoney.com/xg/ipo/\n    :return: 科创板注册制审核结果\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"UPDATE_DATE,ORG_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_IPO_INFOALLNEW\",\n        \"columns\": \"SECURITY_CODE,STATE,REG_ADDRESS,INFO_CODE,CSRC_INDUSTRY,ACCEPT_DATE,DECLARE_ORG,\"\n        \"PREDICT_LISTING_MARKET,LAW_FIRM,ACCOUNT_FIRM,ORG_CODE,UPDATE_DATE,RECOMMEND_ORG,IS_REGISTRATION\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": '(PREDICT_LISTING_MARKET=\"科创板\")',\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"DECLARE_ORG\": \"企业名称\",\n            \"STATE\": \"最新状态\",\n            \"REG_ADDRESS\": \"注册地\",\n            \"CSRC_INDUSTRY\": \"行业\",\n            \"RECOMMEND_ORG\": \"保荐机构\",\n            \"LAW_FIRM\": \"律师事务所\",\n            \"ACCOUNT_FIRM\": \"会计师事务所\",\n            \"UPDATE_DATE\": \"更新日期\",\n            \"ACCEPT_DATE\": \"受理日期\",\n            \"PREDICT_LISTING_MARKET\": \"拟上市地点\",\n            \"INFO_CODE\": \"招股说明书\",\n        },\n        inplace=True,\n    )\n    big_df[\"招股说明书\"] = [\n        f\"https://pdf.dfcfw.com/pdf/H2_{item}_1.pdf\" for item in big_df[\"招股说明书\"]\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"企业名称\",\n            \"最新状态\",\n            \"注册地\",\n            \"行业\",\n            \"保荐机构\",\n            \"律师事务所\",\n            \"会计师事务所\",\n            \"更新日期\",\n            \"受理日期\",\n            \"拟上市地点\",\n            \"招股说明书\",\n        ]\n    ]\n    big_df[\"更新日期\"] = pd.to_datetime(big_df[\"更新日期\"], errors=\"coerce\").dt.date\n    big_df[\"受理日期\"] = pd.to_datetime(big_df[\"受理日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_register_cyb() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-新股数据-IPO审核信息-创业板\n    https://data.eastmoney.com/xg/ipo/\n    :return: 创业板注册制审核结果\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"UPDATE_DATE,ORG_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_IPO_INFOALLNEW\",\n        \"columns\": \"SECURITY_CODE,STATE,REG_ADDRESS,INFO_CODE,CSRC_INDUSTRY,ACCEPT_DATE,DECLARE_ORG,\"\n        \"PREDICT_LISTING_MARKET,LAW_FIRM,ACCOUNT_FIRM,ORG_CODE,UPDATE_DATE,RECOMMEND_ORG,IS_REGISTRATION\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": '(PREDICT_LISTING_MARKET=\"创业板\")',\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"DECLARE_ORG\": \"企业名称\",\n            \"STATE\": \"最新状态\",\n            \"REG_ADDRESS\": \"注册地\",\n            \"CSRC_INDUSTRY\": \"行业\",\n            \"RECOMMEND_ORG\": \"保荐机构\",\n            \"LAW_FIRM\": \"律师事务所\",\n            \"ACCOUNT_FIRM\": \"会计师事务所\",\n            \"UPDATE_DATE\": \"更新日期\",\n            \"ACCEPT_DATE\": \"受理日期\",\n            \"PREDICT_LISTING_MARKET\": \"拟上市地点\",\n            \"INFO_CODE\": \"招股说明书\",\n        },\n        inplace=True,\n    )\n    big_df[\"招股说明书\"] = [\n        f\"https://pdf.dfcfw.com/pdf/H2_{item}_1.pdf\" for item in big_df[\"招股说明书\"]\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"企业名称\",\n            \"最新状态\",\n            \"注册地\",\n            \"行业\",\n            \"保荐机构\",\n            \"律师事务所\",\n            \"会计师事务所\",\n            \"更新日期\",\n            \"受理日期\",\n            \"拟上市地点\",\n            \"招股说明书\",\n        ]\n    ]\n    big_df[\"更新日期\"] = pd.to_datetime(big_df[\"更新日期\"], errors=\"coerce\").dt.date\n    big_df[\"受理日期\"] = pd.to_datetime(big_df[\"受理日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_register_bj() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-新股数据-IPO审核信息-北交所\n    https://data.eastmoney.com/xg/ipo/\n    :return: 北交所\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"UPDATE_DATE,ORG_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_IPO_INFOALLNEW\",\n        \"columns\": \"SECURITY_CODE,STATE,REG_ADDRESS,INFO_CODE,CSRC_INDUSTRY,ACCEPT_DATE,DECLARE_ORG,\"\n        \"PREDICT_LISTING_MARKET,LAW_FIRM,ACCOUNT_FIRM,ORG_CODE,UPDATE_DATE,RECOMMEND_ORG,IS_REGISTRATION\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": '(PREDICT_LISTING_MARKET=\"北交所\")',\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"DECLARE_ORG\": \"企业名称\",\n            \"STATE\": \"最新状态\",\n            \"REG_ADDRESS\": \"注册地\",\n            \"CSRC_INDUSTRY\": \"行业\",\n            \"RECOMMEND_ORG\": \"保荐机构\",\n            \"LAW_FIRM\": \"律师事务所\",\n            \"ACCOUNT_FIRM\": \"会计师事务所\",\n            \"UPDATE_DATE\": \"更新日期\",\n            \"ACCEPT_DATE\": \"受理日期\",\n            \"PREDICT_LISTING_MARKET\": \"拟上市地点\",\n            \"INFO_CODE\": \"招股说明书\",\n        },\n        inplace=True,\n    )\n    big_df[\"招股说明书\"] = [\n        f\"https://pdf.dfcfw.com/pdf/H2_{item}_1.pdf\" for item in big_df[\"招股说明书\"]\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"企业名称\",\n            \"最新状态\",\n            \"注册地\",\n            \"行业\",\n            \"保荐机构\",\n            \"律师事务所\",\n            \"会计师事务所\",\n            \"更新日期\",\n            \"受理日期\",\n            \"拟上市地点\",\n            \"招股说明书\",\n        ]\n    ]\n    big_df[\"更新日期\"] = pd.to_datetime(big_df[\"更新日期\"], errors=\"coerce\").dt.date\n    big_df[\"受理日期\"] = pd.to_datetime(big_df[\"受理日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_register_sh() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-新股数据-IPO审核信息-上海主板\n    https://data.eastmoney.com/xg/ipo/\n    :return: 上海主板\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"UPDATE_DATE,ORG_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_IPO_INFOALLNEW\",\n        \"columns\": \"SECURITY_CODE,STATE,REG_ADDRESS,INFO_CODE,CSRC_INDUSTRY,ACCEPT_DATE,DECLARE_ORG,\"\n        \"PREDICT_LISTING_MARKET,LAW_FIRM,ACCOUNT_FIRM,ORG_CODE,UPDATE_DATE,RECOMMEND_ORG,IS_REGISTRATION\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": '(PREDICT_LISTING_MARKET=\"沪主板\")',\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"DECLARE_ORG\": \"企业名称\",\n            \"STATE\": \"最新状态\",\n            \"REG_ADDRESS\": \"注册地\",\n            \"CSRC_INDUSTRY\": \"行业\",\n            \"RECOMMEND_ORG\": \"保荐机构\",\n            \"LAW_FIRM\": \"律师事务所\",\n            \"ACCOUNT_FIRM\": \"会计师事务所\",\n            \"UPDATE_DATE\": \"更新日期\",\n            \"ACCEPT_DATE\": \"受理日期\",\n            \"PREDICT_LISTING_MARKET\": \"拟上市地点\",\n            \"INFO_CODE\": \"招股说明书\",\n        },\n        inplace=True,\n    )\n    big_df[\"招股说明书\"] = [\n        f\"https://pdf.dfcfw.com/pdf/H2_{item}_1.pdf\" for item in big_df[\"招股说明书\"]\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"企业名称\",\n            \"最新状态\",\n            \"注册地\",\n            \"行业\",\n            \"保荐机构\",\n            \"律师事务所\",\n            \"会计师事务所\",\n            \"更新日期\",\n            \"受理日期\",\n            \"拟上市地点\",\n            \"招股说明书\",\n        ]\n    ]\n    big_df[\"更新日期\"] = pd.to_datetime(big_df[\"更新日期\"], errors=\"coerce\").dt.date\n    big_df[\"受理日期\"] = pd.to_datetime(big_df[\"受理日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_register_sz() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-新股数据-IPO审核信息-深圳主板\n    https://data.eastmoney.com/xg/ipo/\n    :return: 深圳主板\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"UPDATE_DATE,ORG_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_IPO_INFOALLNEW\",\n        \"columns\": \"SECURITY_CODE,STATE,REG_ADDRESS,INFO_CODE,CSRC_INDUSTRY,ACCEPT_DATE,DECLARE_ORG,\"\n        \"PREDICT_LISTING_MARKET,LAW_FIRM,ACCOUNT_FIRM,ORG_CODE,UPDATE_DATE,RECOMMEND_ORG,IS_REGISTRATION\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": '(PREDICT_LISTING_MARKET=\"深主板\")',\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df.index + 1\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"DECLARE_ORG\": \"企业名称\",\n            \"STATE\": \"最新状态\",\n            \"REG_ADDRESS\": \"注册地\",\n            \"CSRC_INDUSTRY\": \"行业\",\n            \"RECOMMEND_ORG\": \"保荐机构\",\n            \"LAW_FIRM\": \"律师事务所\",\n            \"ACCOUNT_FIRM\": \"会计师事务所\",\n            \"UPDATE_DATE\": \"更新日期\",\n            \"ACCEPT_DATE\": \"受理日期\",\n            \"PREDICT_LISTING_MARKET\": \"拟上市地点\",\n            \"INFO_CODE\": \"招股说明书\",\n        },\n        inplace=True,\n    )\n    big_df[\"招股说明书\"] = [\n        f\"https://pdf.dfcfw.com/pdf/H2_{item}_1.pdf\" for item in big_df[\"招股说明书\"]\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"企业名称\",\n            \"最新状态\",\n            \"注册地\",\n            \"行业\",\n            \"保荐机构\",\n            \"律师事务所\",\n            \"会计师事务所\",\n            \"更新日期\",\n            \"受理日期\",\n            \"拟上市地点\",\n            \"招股说明书\",\n        ]\n    ]\n    big_df[\"更新日期\"] = pd.to_datetime(big_df[\"更新日期\"], errors=\"coerce\").dt.date\n    big_df[\"受理日期\"] = pd.to_datetime(big_df[\"受理日期\"], errors=\"coerce\").dt.date\n    return big_df\n\n\ndef stock_register_db() -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-新股数据-IPO审核信息-达标企业\n    https://data.eastmoney.com/xg/cyb/\n    :return: 达标企业\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"NOTICE_DATE,SECURITY_CODE\",\n        \"sortTypes\": \"-1,-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_KCB_IPO\",\n        \"columns\": \"KCB_LB\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": '(ORG_TYPE_CODE=\"03\")',\n    }\n    r = requests.get(url, params=params, headers=headers)\n    data_json = r.json()\n    page_num = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    tqdm = get_tqdm()\n    for page in tqdm(range(1, page_num + 1), leave=False):\n        params.update({\"pageNumber\": page})\n        r = requests.get(url, params=params, headers=headers)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = range(1, len(big_df) + 1)\n    big_df.rename(\n        columns={\n            \"index\": \"序号\",\n            \"ORG_NAME\": \"企业名称\",\n        },\n        inplace=True,\n    )\n\n    big_df = big_df[\n        [\n            \"序号\",\n            \"企业名称\",\n        ]\n    ]\n\n    return big_df\n\n\nif __name__ == \"__main__\":\n    stock_register_all_em_df = stock_register_all_em()\n    print(stock_register_all_em_df)\n\n    stock_register_kcb_df = stock_register_kcb()\n    print(stock_register_kcb_df)\n\n    stock_register_cyb_df = stock_register_cyb()\n    print(stock_register_cyb_df)\n\n    stock_register_bj_df = stock_register_bj()\n    print(stock_register_bj_df)\n\n    stock_register_db_df = stock_register_db()\n    print(stock_register_db_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_restricted_em.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/4/7 19:30\nDesc: 限售股解禁\nhttps://data.eastmoney.com/dxf/detail.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom tqdm import tqdm\n\n\ndef stock_restricted_release_summary_em(\n    symbol: str = \"全部股票\", start_date: str = \"20221101\", end_date: str = \"20221209\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-特色数据-限售股解禁\n    https://data.eastmoney.com/dxf/marketStatistics.html?type=day&startdate=2022-11-08&enddate=2022-12-19\n    :param symbol: 标的市场; choice of {\"全部股票\", \"沪市A股\", \"科创板\", \"深市A股\", \"创业板\", \"京市A股\"}\n    :type symbol: str\n    :param start_date: 开始时间\n    :type start_date: str\n    :param end_date: 结束时间\n    :type end_date: str\n    :return: 限售股解禁\n    :rtype: pandas.DataFrame\n    \"\"\"\n    symbol_map = {\n        \"全部股票\": \"000300\",\n        \"沪市A股\": \"000001\",\n        \"科创板\": \"000688\",\n        \"深市A股\": \"399001\",\n        \"创业板\": \"399001\",\n        \"京市A股\": \"999999\",\n    }\n    start_date_str = \"-\".join([start_date[:4], start_date[4:6], start_date[6:]])\n    end_date_str = \"-\".join([end_date[:4], end_date[4:6], end_date[6:]])\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"FREE_DATE\",\n        \"sortTypes\": \"1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"columns\": \"ALL\",\n        \"quoteColumns\": \"f2~03~INDEX_CODE,f3~03~INDEX_CODE,f124~03~INDEX_CODE\",\n        \"quoteType\": \"0\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"\"\"(INDEX_CODE=\"{symbol_map[symbol]}\")(FREE_DATE>=\n        '{start_date_str}')(FREE_DATE<='{end_date_str}')\"\"\",\n        \"reportName\": \"RPT_LIFTDAY_STA\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df[\"index\"] + 1\n    temp_df.columns = [\n        \"序号\",\n        \"解禁时间\",\n        \"当日解禁股票家数\",\n        \"实际解禁数量\",\n        \"实际解禁市值\",\n        \"沪深300指数\",\n        \"沪深300指数涨跌幅\",\n        \"解禁数量\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"解禁时间\",\n            \"当日解禁股票家数\",\n            \"解禁数量\",\n            \"实际解禁数量\",\n            \"实际解禁市值\",\n            \"沪深300指数\",\n            \"沪深300指数涨跌幅\",\n        ]\n    ]\n    temp_df[\"解禁时间\"] = pd.to_datetime(temp_df[\"解禁时间\"], errors=\"coerce\").dt.date\n    temp_df[\"当日解禁股票家数\"] = pd.to_numeric(\n        temp_df[\"当日解禁股票家数\"], errors=\"coerce\"\n    )\n    temp_df[\"解禁数量\"] = pd.to_numeric(temp_df[\"解禁数量\"], errors=\"coerce\") * 10000\n    temp_df[\"实际解禁数量\"] = (\n        pd.to_numeric(temp_df[\"实际解禁数量\"], errors=\"coerce\") * 10000\n    )\n    temp_df[\"实际解禁市值\"] = (\n        pd.to_numeric(temp_df[\"实际解禁市值\"], errors=\"coerce\") * 10000\n    )\n    temp_df[\"沪深300指数\"] = pd.to_numeric(temp_df[\"沪深300指数\"], errors=\"coerce\")\n    temp_df[\"沪深300指数涨跌幅\"] = pd.to_numeric(\n        temp_df[\"沪深300指数涨跌幅\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_restricted_release_detail_em(\n    start_date: str = \"20221202\", end_date: str = \"20241202\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-限售股解禁-解禁详情一览\n    https://data.eastmoney.com/dxf/detail.html\n    :param start_date: 开始时间\n    :type start_date: str\n    :param end_date: 结束时间\n    :type end_date: str\n    :return: 解禁详情一览\n    :rtype: pandas.DataFrame\n    \"\"\"\n    start_date_str = \"-\".join([start_date[:4], start_date[4:6], start_date[6:]])\n    end_date_str = \"-\".join([end_date[:4], end_date[4:6], end_date[6:]])\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"FREE_DATE,CURRENT_FREE_SHARES\",\n        \"sortTypes\": \"1,1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_LIFT_STAGE\",\n        \"columns\": \"SECURITY_CODE,SECURITY_NAME_ABBR,FREE_DATE,CURRENT_FREE_SHARES,ABLE_FREE_SHARES,\"\n        \"LIFT_MARKET_CAP,FREE_RATIO,NEW,B20_ADJCHRATE,A20_ADJCHRATE,FREE_SHARES_TYPE,TOTAL_RATIO,\"\n        \"NON_FREE_SHARES,BATCH_HOLDER_NUM\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n        \"filter\": f\"\"\"(FREE_DATE>='{start_date_str}')(FREE_DATE<='{end_date_str}')\"\"\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    total_page = data_json[\"result\"][\"pages\"]\n    big_df = pd.DataFrame()\n    for page in tqdm(range(1, total_page + 1), leave=False):\n        params.update(\n            {\n                \"pageNumber\": page,\n            }\n        )\n        r = requests.get(url, params=params)\n        data_json = r.json()\n        temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n        big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)\n\n    big_df.reset_index(inplace=True)\n    big_df[\"index\"] = big_df[\"index\"] + 1\n    big_df.columns = [\n        \"序号\",\n        \"股票代码\",\n        \"股票简称\",\n        \"解禁时间\",\n        \"实际解禁数量\",\n        \"解禁数量\",\n        \"实际解禁市值\",\n        \"占解禁前流通市值比例\",\n        \"解禁前一交易日收盘价\",\n        \"解禁前20日涨跌幅\",\n        \"解禁后20日涨跌幅\",\n        \"限售股类型\",\n        \"-\",\n        \"-\",\n        \"-\",\n    ]\n    big_df = big_df[\n        [\n            \"序号\",\n            \"股票代码\",\n            \"股票简称\",\n            \"解禁时间\",\n            \"限售股类型\",\n            \"解禁数量\",\n            \"实际解禁数量\",\n            \"实际解禁市值\",\n            \"占解禁前流通市值比例\",\n            \"解禁前一交易日收盘价\",\n            \"解禁前20日涨跌幅\",\n            \"解禁后20日涨跌幅\",\n        ]\n    ]\n    big_df[\"解禁时间\"] = pd.to_datetime(big_df[\"解禁时间\"], errors=\"coerce\").dt.date\n\n    big_df[\"解禁数量\"] = pd.to_numeric(big_df[\"解禁数量\"], errors=\"coerce\") * 10000\n    big_df[\"实际解禁数量\"] = (\n        pd.to_numeric(big_df[\"实际解禁数量\"], errors=\"coerce\") * 10000\n    )\n    big_df[\"实际解禁市值\"] = (\n        pd.to_numeric(big_df[\"实际解禁市值\"], errors=\"coerce\") * 10000\n    )\n    big_df[\"占解禁前流通市值比例\"] = pd.to_numeric(\n        big_df[\"占解禁前流通市值比例\"], errors=\"coerce\"\n    )\n    big_df[\"解禁前一交易日收盘价\"] = pd.to_numeric(\n        big_df[\"解禁前一交易日收盘价\"], errors=\"coerce\"\n    )\n    big_df[\"解禁前20日涨跌幅\"] = pd.to_numeric(\n        big_df[\"解禁前20日涨跌幅\"], errors=\"coerce\"\n    )\n    big_df[\"解禁后20日涨跌幅\"] = pd.to_numeric(\n        big_df[\"解禁后20日涨跌幅\"], errors=\"coerce\"\n    )\n    return big_df\n\n\ndef stock_restricted_release_queue_em(symbol: str = \"600000\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-个股限售解禁-解禁批次\n    https://data.eastmoney.com/dxf/q/600000.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 个股限售解禁\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    params = {\n        \"sortColumns\": \"FREE_DATE\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_LIFT_STAGE\",\n        \"filter\": f'(SECURITY_CODE=\"{symbol}\")',\n        \"columns\": \"SECURITY_CODE,SECURITY_NAME_ABBR,FREE_DATE,CURRENT_FREE_SHARES,ABLE_FREE_SHARES,\"\n        \"LIFT_MARKET_CAP,FREE_RATIO,NEW,B20_ADJCHRATE,A20_ADJCHRATE,FREE_SHARES_TYPE,TOTAL_RATIO,\"\n        \"NON_FREE_SHARES,BATCH_HOLDER_NUM\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    if not data_json[\"result\"]:\n        return pd.DataFrame()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df[\"index\"] + 1\n    temp_df.columns = [\n        \"序号\",\n        \"-\",\n        \"-\",\n        \"解禁时间\",\n        \"实际解禁数量\",\n        \"解禁数量\",\n        \"实际解禁数量市值\",\n        \"占流通市值比例\",\n        \"解禁前一交易日收盘价\",\n        \"解禁前20日涨跌幅\",\n        \"解禁后20日涨跌幅\",\n        \"限售股类型\",\n        \"占总市值比例\",\n        \"未解禁数量\",\n        \"解禁股东数\",\n    ]\n    temp_df = temp_df[\n        [\n            \"序号\",\n            \"解禁时间\",\n            \"解禁股东数\",\n            \"解禁数量\",\n            \"实际解禁数量\",\n            \"未解禁数量\",\n            \"实际解禁数量市值\",\n            \"占总市值比例\",\n            \"占流通市值比例\",\n            \"解禁前一交易日收盘价\",\n            \"限售股类型\",\n            \"解禁前20日涨跌幅\",\n            \"解禁后20日涨跌幅\",\n        ]\n    ]\n    temp_df[\"解禁时间\"] = pd.to_datetime(temp_df[\"解禁时间\"], errors=\"coerce\").dt.date\n    temp_df[\"解禁股东数\"] = pd.to_numeric(temp_df[\"解禁股东数\"], errors=\"coerce\")\n    temp_df[\"解禁数量\"] = pd.to_numeric(temp_df[\"解禁数量\"], errors=\"coerce\") * 10000\n    temp_df[\"实际解禁数量\"] = (\n        pd.to_numeric(temp_df[\"实际解禁数量\"], errors=\"coerce\") * 10000\n    )\n    temp_df[\"未解禁数量\"] = (\n        pd.to_numeric(temp_df[\"未解禁数量\"], errors=\"coerce\") * 10000\n    )\n    temp_df[\"实际解禁数量市值\"] = (\n        pd.to_numeric(temp_df[\"实际解禁数量市值\"], errors=\"coerce\") * 10000\n    )\n    temp_df[\"占总市值比例\"] = pd.to_numeric(temp_df[\"占总市值比例\"], errors=\"coerce\")\n    temp_df[\"占流通市值比例\"] = pd.to_numeric(\n        temp_df[\"占流通市值比例\"], errors=\"coerce\"\n    )\n    temp_df[\"解禁前一交易日收盘价\"] = pd.to_numeric(\n        temp_df[\"解禁前一交易日收盘价\"], errors=\"coerce\"\n    )\n    temp_df[\"解禁前20日涨跌幅\"] = pd.to_numeric(\n        temp_df[\"解禁前20日涨跌幅\"], errors=\"coerce\"\n    )\n    temp_df[\"解禁后20日涨跌幅\"] = pd.to_numeric(\n        temp_df[\"解禁后20日涨跌幅\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\ndef stock_restricted_release_stockholder_em(\n    symbol: str = \"600000\", date: str = \"20200904\"\n) -> pd.DataFrame:\n    \"\"\"\n    东方财富网-数据中心-个股限售解禁-解禁股东\n    https://data.eastmoney.com/dxf/q/600000.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :param date: 日期; 通过 ak.stock_restricted_release_queue_em(symbol=\"600000\") 获取\n    :type date: str\n    :return: 个股限售解禁\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://datacenter-web.eastmoney.com/api/data/v1/get\"\n    date_str = \"-\".join([date[:4], date[4:6], date[6:]])\n    params = {\n        \"sortColumns\": \"ADD_LISTING_SHARES\",\n        \"sortTypes\": \"-1\",\n        \"pageSize\": \"500\",\n        \"pageNumber\": \"1\",\n        \"reportName\": \"RPT_LIFT_GD\",\n        \"filter\": f\"\"\"(SECURITY_CODE=\"{symbol}\")(FREE_DATE='{date_str}')\"\"\",\n        \"columns\": \"LIMITED_HOLDER_NAME,ADD_LISTING_SHARES,ACTUAL_LISTED_SHARES,ADD_LISTING_CAP,LOCK_MONTH,\"\n        \"RESIDUAL_LIMITED_SHARES,FREE_SHARES_TYPE,PLAN_FEATURE\",\n        \"source\": \"WEB\",\n        \"client\": \"WEB\",\n    }\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"result\"][\"data\"])\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df[\"index\"] + 1\n    temp_df.columns = [\n        \"序号\",\n        \"股东名称\",\n        \"解禁数量\",\n        \"实际解禁数量\",\n        \"解禁市值\",\n        \"锁定期\",\n        \"剩余未解禁数量\",\n        \"限售股类型\",\n        \"进度\",\n    ]\n    temp_df[\"解禁数量\"] = pd.to_numeric(temp_df[\"解禁数量\"], errors=\"coerce\")\n    temp_df[\"实际解禁数量\"] = pd.to_numeric(temp_df[\"实际解禁数量\"], errors=\"coerce\")\n    temp_df[\"解禁市值\"] = pd.to_numeric(temp_df[\"解禁市值\"], errors=\"coerce\")\n    temp_df[\"锁定期\"] = pd.to_numeric(temp_df[\"锁定期\"], errors=\"coerce\")\n    temp_df[\"剩余未解禁数量\"] = pd.to_numeric(\n        temp_df[\"剩余未解禁数量\"], errors=\"coerce\"\n    )\n    temp_df[\"剩余未解禁数量\"] = pd.to_numeric(\n        temp_df[\"剩余未解禁数量\"], errors=\"coerce\"\n    )\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_restricted_release_summary_em_df = stock_restricted_release_summary_em(\n        symbol=\"全部股票\", start_date=\"20221108\", end_date=\"20221209\"\n    )\n    print(stock_restricted_release_summary_em_df)\n\n    stock_restricted_release_detail_em_df = stock_restricted_release_detail_em(\n        start_date=\"20221202\", end_date=\"20221204\"\n    )\n    print(stock_restricted_release_detail_em_df)\n\n    stock_restricted_release_queue_em_df = stock_restricted_release_queue_em(\n        symbol=\"600000\"\n    )\n    print(stock_restricted_release_queue_em_df)\n\n    stock_restricted_release_stockholder_em_df = (\n        stock_restricted_release_stockholder_em(symbol=\"600000\", date=\"20200904\")\n    )\n    print(stock_restricted_release_stockholder_em_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_zygc.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2025/5/6 14:30\nDesc: 主营构成\nhttps://emweb.securities.eastmoney.com/PC_HSF10/BusinessAnalysis/Index?type=web&code=SH688041#\n\"\"\"\n\nimport pandas as pd\nimport requests\n\n\ndef stock_zygc_em(symbol: str = \"SH688041\") -> pd.DataFrame:\n    \"\"\"\n    东方财富网-个股-主营构成\n    https://emweb.securities.eastmoney.com/PC_HSF10/BusinessAnalysis/Index?type=web&code=SH688041#\n    :param symbol: 带市场标识的股票代码\n    :type symbol: str\n    :return: 主营构成\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://emweb.securities.eastmoney.com/PC_HSF10/BusinessAnalysis/PageAjax\"\n    params = {\"code\": symbol}\n    r = requests.get(url, params=params)\n    data_json = r.json()\n    temp_df = pd.DataFrame(data_json[\"zygcfx\"])\n    temp_df.rename(\n        columns={\n            \"SECUCODE\": \"-\",\n            \"SECURITY_CODE\": \"股票代码\",\n            \"REPORT_DATE\": \"报告日期\",\n            \"MAINOP_TYPE\": \"分类类型\",\n            \"ITEM_NAME\": \"主营构成\",\n            \"MAIN_BUSINESS_INCOME\": \"主营收入\",\n            \"MBI_RATIO\": \"收入比例\",\n            \"MAIN_BUSINESS_COST\": \"主营成本\",\n            \"MBC_RATIO\": \"成本比例\",\n            \"MAIN_BUSINESS_RPOFIT\": \"主营利润\",\n            \"MBR_RATIO\": \"利润比例\",\n            \"GROSS_RPOFIT_RATIO\": \"毛利率\",\n            \"RANK\": \"-\",\n        },\n        inplace=True,\n    )\n    temp_df = temp_df[\n        [\n            \"股票代码\",\n            \"报告日期\",\n            \"分类类型\",\n            \"主营构成\",\n            \"主营收入\",\n            \"收入比例\",\n            \"主营成本\",\n            \"成本比例\",\n            \"主营利润\",\n            \"利润比例\",\n            \"毛利率\",\n        ]\n    ]\n    temp_df[\"报告日期\"] = pd.to_datetime(temp_df[\"报告日期\"], errors=\"coerce\").dt.date\n    temp_df[\"分类类型\"] = temp_df[\"分类类型\"].map(\n        {\"1\": \"按行业分类\", \"2\": \"按产品分类\", \"3\": \"按地区分类\"}\n    )\n    temp_df[\"主营收入\"] = pd.to_numeric(temp_df[\"主营收入\"], errors=\"coerce\")\n    temp_df[\"收入比例\"] = pd.to_numeric(temp_df[\"收入比例\"], errors=\"coerce\")\n    temp_df[\"主营成本\"] = pd.to_numeric(temp_df[\"主营成本\"], errors=\"coerce\")\n    temp_df[\"成本比例\"] = pd.to_numeric(temp_df[\"成本比例\"], errors=\"coerce\")\n    temp_df[\"主营利润\"] = pd.to_numeric(temp_df[\"主营利润\"], errors=\"coerce\")\n    temp_df[\"利润比例\"] = pd.to_numeric(temp_df[\"利润比例\"], errors=\"coerce\")\n    temp_df[\"毛利率\"] = pd.to_numeric(temp_df[\"毛利率\"], errors=\"coerce\")\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_zygc_em_df = stock_zygc_em(symbol=\"SH688041\")\n    print(stock_zygc_em_df)\n"
  },
  {
    "path": "akshare/stock_fundamental/stock_zyjs_ths.py",
    "content": "# -*- coding:utf-8 -*-\n# !/usr/bin/env python\n\"\"\"\nDate: 2024/3/29 10:30\nDesc: 同花顺-主营介绍\nhttps://basic.10jqka.com.cn/new/000066/operate.html\n\"\"\"\n\nimport pandas as pd\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef stock_zyjs_ths(symbol: str = \"000066\") -> pd.DataFrame:\n    \"\"\"\n    同花顺-主营介绍\n    https://basic.10jqka.com.cn/new/000066/operate.html\n    :param symbol: 股票代码\n    :type symbol: str\n    :return: 主营介绍\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = f\"https://basic.10jqka.com.cn/new/{symbol}/operate.html\"\n    headers = {\n        \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n        \"Chrome/109.0.0.0 Safari/537.36\"\n    }\n    r = requests.get(url, headers=headers)\n    r.encoding = \"gb2312\"\n    soup = BeautifulSoup(r.text, \"lxml\")\n    content_list = [\n        item.text.strip()\n        for item in soup.find(\"ul\", attrs={\"class\": \"main_intro_list\"}).find_all(\"li\")\n    ]\n    columns_list = []\n    value_list = []\n    for item in content_list:\n        columns_list.append(item.split(\"：\")[0])\n        value_list.append(\n            item.split(\"：\", maxsplit=1)[1]\n            .replace(\"\\t\", \"\")\n            .replace(\"\\n\", \"\")\n            .replace(\" \", \"\")\n            .strip()\n        )\n\n    temp_df = pd.DataFrame(value_list, index=columns_list).T\n    temp_df.insert(0, \"股票代码\", symbol)\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    stock_zyjs_ths_df = stock_zyjs_ths(symbol=\"000066\")\n    print(stock_zyjs_ths_df)\n"
  },
  {
    "path": "akshare/tool/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/9/30 13:58\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/tool/trade_date_hist.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/3/25 16:30\nDesc: 新浪财经-交易日历\nhttps://finance.sina.com.cn/realstock/company/klc_td_sh.txt\n此处可以用来更新 calendar.json 文件，注意末尾没有 \",\" 号\n\"\"\"\n\nimport datetime\n\nimport pandas as pd\nimport requests\nimport py_mini_racer\n\nfrom akshare.stock.cons import hk_js_decode\n\n\ndef tool_trade_date_hist_sina() -> pd.DataFrame:\n    \"\"\"\n    新浪财经-交易日历-历史数据\n    https://finance.sina.com.cn/realstock/company/klc_td_sh.txt\n    :return: 交易日历\n    :rtype: pandas.DataFrame\n    \"\"\"\n    url = \"https://finance.sina.com.cn/realstock/company/klc_td_sh.txt\"\n    r = requests.get(url)\n    js_code = py_mini_racer.MiniRacer()\n    js_code.eval(hk_js_decode)\n    dict_list = js_code.call(\"d\", r.text.split(\"=\")[1].split(\";\")[0].replace('\"', \"\"))\n    temp_df = pd.DataFrame(dict_list)\n    temp_df.columns = [\"trade_date\"]\n    temp_df[\"trade_date\"] = pd.to_datetime(temp_df[\"trade_date\"]).dt.date\n    temp_list = temp_df[\"trade_date\"].to_list()\n    # 该日期是交易日，但是在新浪返回的交易日历缺失该日期，这里补充上\n    temp_list.append(datetime.date(year=1992, month=5, day=4))\n    temp_list.sort()\n    temp_df = pd.DataFrame(temp_list, columns=[\"trade_date\"])\n    return temp_df\n\n\nif __name__ == \"__main__\":\n    tool_trade_date_hist_df = tool_trade_date_hist_sina()\n    print(tool_trade_date_hist_df)\n"
  },
  {
    "path": "akshare/utils/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2020/2/13 21:21\nDesc:\n\"\"\"\n"
  },
  {
    "path": "akshare/utils/cons.py",
    "content": "# !/usr/bin/env python\n\"\"\"\nDate: 2024/4/7 15:30\nDesc: 通用变量\n\"\"\"\n\nheaders = {\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \"\n    \"Chrome/114.0.0.0 Safari/537.36\"\n}\n"
  },
  {
    "path": "akshare/utils/context.py",
    "content": "class AkshareConfig:\n    _instance = None\n\n    def __new__(cls):\n        if cls._instance is None:\n            cls._instance = super().__new__(cls)\n            cls._instance.proxies = None\n        return cls._instance\n\n    @classmethod\n    def set_proxies(cls, proxies):\n        cls().proxies = proxies\n\n    @classmethod\n    def get_proxies(cls):\n        return cls().proxies\n\n\nconfig = AkshareConfig()\n\n\n# 导出 set_proxies 函数\ndef set_proxies(proxies):\n    config.set_proxies(proxies)\n\n\ndef get_proxies():\n    return config.get_proxies()\n\n\nclass ProxyContext:\n    def __init__(self, proxies):\n        self.proxies = proxies\n        self.old_proxies = None\n\n    def __enter__(self):\n        self.old_proxies = config.get_proxies()\n        config.set_proxies(self.proxies)\n        return self\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        config.set_proxies(self.old_proxies)\n        return False  # 不处理异常\n"
  },
  {
    "path": "akshare/utils/demjson.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\n__author__ = \"Deron Meranda <http://deron.meranda.us/>\"\n__homepage__ = \"http://deron.meranda.us/python/demjson/\"\n\n__date__ = \"2015-12-22\"\n__version__ = \"2.2.4\"\n__version_info__ = (2, 2, 4)  # Will be converted into a namedtuple below\n\n__credits__ = \"Short of demjson\"\n\n# Set demjson version\ntry:\n    from collections import namedtuple as _namedtuple\n    import codecs\n\n    __version_info__ = _namedtuple(\"version_info\", [\"major\", \"minor\", \"micro\"])(\n        *__version_info__\n    )\nexcept ImportError:\n    raise ImportError(\"demjson %s requires a Python 2.6 or later\" % __version__)\n\nversion, version_info = __version__, __version_info__\n\n# Determine Python version\n_py_major, _py_minor = None, None\n\n\ndef _get_pyver():\n    global _py_major, _py_minor\n    import sys\n\n    vi = sys.version_info\n    try:\n        _py_major, _py_minor = vi.major, vi.minor\n    except AttributeError:\n        _py_major, _py_minor = vi[0], vi[1]\n\n\n_get_pyver()\n\n# ----------------------------------------------------------------------\n# Useful global constants\n\ncontent_type = \"application/json\"\nfile_ext = \"json\"\n\n\nclass _dummy_context_manager(object):\n    \"\"\"A context manager that does nothing on entry or exit.\"\"\"\n\n    def __enter__(self):\n        pass\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        return False\n\n\n_dummy_context_manager = _dummy_context_manager()\n\n# ----------------------------------------------------------------------\n# Decimal and float types.\n#\n# If a JSON number can not be stored in a Python float without loosing\n# precision and the Python has the decimal type, then we will try to\n# use decimal instead of float.  To make this determination we need to\n# know the limits of the float type, but Python doesn't have an easy\n# way to tell what the largest floating-point number it supports.  So,\n# we detemine the precision and scale of the float type by testing it.\n\ntry:\n    # decimal module was introduced in Python 2.4\n    import decimal\nexcept ImportError:\n    decimal = None\n\n\ndef determine_float_limits(number_type=float):\n    \"\"\"Determines the precision and range of the given float type.\n\n    The passed in 'number_type' argument should refer to the type of\n    floating-point number.  It should either be the built-in 'float',\n    or decimal context or constructor; i.e., one of:\n\n        # 1. FLOAT TYPE\n        determine_float_limits( float )\n\n        # 2. DEFAULT DECIMAL CONTEXT\n        determine_float_limits( decimal.Decimal )\n\n        # 3. CUSTOM DECIMAL CONTEXT\n        ctx = decimal.Context( prec=75 )\n        determine_float_limits( ctx )\n\n    Returns a named tuple with components:\n\n         ( significant_digits,\n           max_exponent,\n           min_exponent )\n\n    Where:\n        * significant_digits -- maximum number of *decimal* digits\n             that can be represented without any loss of precision.\n             This is conservative, so if there are 16 1/2 digits, it\n             will return 16, not 17.\n\n        * max_exponent -- The maximum exponent (power of 10) that can\n             be represented before an overflow (or rounding to\n             infinity) occurs.\n\n        * min_exponent -- The minimum exponent (negative power of 10)\n             that can be represented before either an underflow\n             (rounding to zero) or a subnormal result (loss of\n             precision) occurs.  Note this is conservative, as\n             subnormal numbers are excluded.\n\n    \"\"\"\n    if decimal:\n        numeric_exceptions = (ValueError, decimal.Overflow, decimal.Underflow)\n    else:\n        numeric_exceptions = (ValueError,)\n\n    if decimal and number_type is decimal.Decimal:\n        number_type = decimal.DefaultContext\n\n    if decimal and isinstance(number_type, decimal.Context):\n        # Passed a decimal Context, extract the bound creator function.\n        create_num = number_type.create_decimal\n        decimal_ctx = decimal.localcontext(number_type)\n        is_zero_or_subnormal = lambda n: n.is_zero() or n.is_subnormal()  # noqa: E731\n    elif number_type is float:\n        create_num = number_type\n        decimal_ctx = _dummy_context_manager\n        is_zero_or_subnormal = lambda n: n == 0  # noqa: E731\n    else:\n        raise TypeError(\"Expected a float type, e.g., float or decimal context\")\n\n    with decimal_ctx:\n        zero = create_num(\"0.0\")\n\n        # Find signifianct digits by comparing floats of increasing\n        # number of digits, differing in the last digit only, until\n        # they numerically compare as being equal.\n        sigdigits = None\n        n = 0\n        while True:\n            n = n + 1\n            pfx = \"0.\" + \"1\" * n\n            a = create_num(pfx + \"0\")\n            for sfx in \"123456789\":  # Check all possible last digits to\n                # avoid any partial-decimal.\n                b = create_num(pfx + sfx)\n                if (a + zero) == (b + zero):\n                    sigdigits = n\n                    break\n            if sigdigits:\n                break\n\n        # Find exponent limits.  First find order of magnitude and\n        # then use a binary search to find the exact exponent.\n        base = \"1.\" + \"1\" * (sigdigits - 1)\n        base0 = \"1.\" + \"1\" * (sigdigits - 2)\n        minexp, maxexp = None, None\n\n        for expsign in (\"+\", \"-\"):\n            minv = 0\n            maxv = 10\n            # First find order of magnitude of exponent limit\n            while True:\n                try:\n                    s = base + \"e\" + expsign + str(maxv)\n                    s0 = base0 + \"e\" + expsign + str(maxv)\n                    f = create_num(s) + zero\n                    f0 = create_num(s0) + zero\n                except numeric_exceptions:\n                    f = None\n                if (\n                    not f\n                    or not str(f)[0].isdigit()\n                    or is_zero_or_subnormal(f)\n                    or f == f0\n                ):\n                    break\n                else:\n                    minv = maxv\n                    maxv = maxv * 10\n\n            # Now do a binary search to find exact limit\n            while True:\n                if minv + 1 == maxv:\n                    if expsign == \"+\":\n                        maxexp = minv\n                    else:\n                        minexp = minv\n                    break\n                elif maxv < minv:\n                    if expsign == \"+\":\n                        maxexp = None\n                    else:\n                        minexp = None\n                    break\n                m = (minv + maxv) // 2\n                try:\n                    s = base + \"e\" + expsign + str(m)\n                    s0 = base0 + \"e\" + expsign + str(m)\n                    f = create_num(s) + zero\n                    f0 = create_num(s0) + zero\n                except numeric_exceptions:\n                    f = None\n                else:\n                    if not f or not str(f)[0].isdigit():\n                        f = None\n                    elif is_zero_or_subnormal(f) or f == f0:\n                        f = None\n                if not f:\n                    # infinite\n                    maxv = m\n                else:\n                    minv = m\n\n    return _namedtuple(\n        \"float_limits\", [\"significant_digits\", \"max_exponent\", \"min_exponent\"]\n    )(sigdigits, maxexp, -minexp)\n\n\nfloat_sigdigits, float_maxexp, float_minexp = determine_float_limits(float)\n\n\n# For backwards compatibility with older demjson versions:\ndef determine_float_precision():\n    v = determine_float_limits(float)\n    return (v.significant_digits, v.max_exponent)\n\n\n# ----------------------------------------------------------------------\n# The undefined value.\n#\n# ECMAScript has an undefined value (similar to yet distinct from null).\n# Neither Python or strict JSON have support undefined, but to allow\n# JavaScript behavior we must simulate it.\n\n\nclass _undefined_class(object):\n    \"\"\"Represents the ECMAScript 'undefined' value.\"\"\"\n\n    __slots__ = []\n\n    def __repr__(self):\n        return self.__module__ + \".undefined\"\n\n    def __str__(self):\n        return \"undefined\"\n\n    def __bool__(self):\n        return False\n\n\nundefined = _undefined_class()\nsyntax_error = _undefined_class()  # same as undefined, but has separate identity\ndel _undefined_class\n\n\n# ----------------------------------------------------------------------\n# Non-Numbers: NaN, Infinity, -Infinity\n#\n# ECMAScript has official support for non-number floats, although\n# strict JSON does not.  Python doesn't either.  So to support the\n# full JavaScript behavior we must try to add them into Python, which\n# is unfortunately a bit of black magic.  If our python implementation\n# happens to be built on top of IEEE 754 we can probably trick python\n# into using real floats.  Otherwise we must simulate it with classes.\n\n\ndef _nonnumber_float_constants():\n    \"\"\"Try to return the Nan, Infinity, and -Infinity float values.\n\n    This is necessarily complex because there is no standard\n    platform-independent way to do this in Python as the language\n    (opposed to some implementation of it) doesn't discuss\n    non-numbers.  We try various strategies from the best to the\n    worst.\n\n    If this Python interpreter uses the IEEE 754 floating point\n    standard then the returned values will probably be real instances\n    of the 'float' type.  Otherwise a custom class object is returned\n    which will attempt to simulate the correct behavior as much as\n    possible.\n\n    \"\"\"\n    try:\n        # First, try (mostly portable) float constructor.  Works under\n        # Linux x86 (gcc) and some Unices.\n        nan = float(\"nan\")\n        inf = float(\"inf\")\n        neginf = float(\"-inf\")\n    except ValueError:\n        try:\n            # Try the AIX (PowerPC) float constructors\n            nan = float(\"NaNQ\")\n            inf = float(\"INF\")\n            neginf = float(\"-INF\")\n        except ValueError:\n            try:\n                # Next, try binary unpacking.  Should work under\n                # platforms using IEEE 754 floating point.\n                import struct\n                import sys\n\n                xnan = \"7ff8000000000000\".decode(\"hex\")  # Quiet NaN\n                xinf = \"7ff0000000000000\".decode(\"hex\")\n                xcheck = \"bdc145651592979d\".decode(\"hex\")  # -3.14159e-11\n                # Could use float.__getformat__, but it is a new python feature,\n                # so we use sys.byteorder.\n                if sys.byteorder == \"big\":\n                    nan = struct.unpack(\"d\", xnan)[0]\n                    inf = struct.unpack(\"d\", xinf)[0]\n                    check = struct.unpack(\"d\", xcheck)[0]\n                else:\n                    nan = struct.unpack(\"d\", xnan[::-1])[0]\n                    inf = struct.unpack(\"d\", xinf[::-1])[0]\n                    check = struct.unpack(\"d\", xcheck[::-1])[0]\n                neginf = -inf\n                if check != -3.14159e-11:\n                    raise ValueError(\"Unpacking raw IEEE 754 floats does not work\")\n            except (ValueError, TypeError):\n                # Punt, make some fake classes to simulate.  These are\n                # not perfect though.  For instance nan * 1.0 == nan,\n                # as expected, but 1.0 * nan == 0.0, which is wrong.\n                class nan(float):\n                    \"\"\"An approximation of the NaN (not a number) floating point number.\"\"\"\n\n                    def __repr__(self):\n                        return \"nan\"\n\n                    def __str__(self):\n                        return \"nan\"\n\n                    def __add__(self, x):\n                        return self\n\n                    def __radd__(self, x):\n                        return self\n\n                    def __sub__(self, x):\n                        return self\n\n                    def __rsub__(self, x):\n                        return self\n\n                    def __mul__(self, x):\n                        return self\n\n                    def __rmul__(self, x):\n                        return self\n\n                    def __div__(self, x):\n                        return self\n\n                    def __rdiv__(self, x):\n                        return self\n\n                    def __divmod__(self, x):\n                        return (self, self)\n\n                    def __rdivmod__(self, x):\n                        return (self, self)\n\n                    def __mod__(self, x):\n                        return self\n\n                    def __rmod__(self, x):\n                        return self\n\n                    def __pow__(self, exp):\n                        return self\n\n                    def __rpow__(self, exp):\n                        return self\n\n                    def __neg__(self):\n                        return self\n\n                    def __pos__(self):\n                        return self\n\n                    def __abs__(self):\n                        return self\n\n                    def __lt__(self, x):\n                        return False\n\n                    def __le__(self, x):\n                        return False\n\n                    def __eq__(self, x):\n                        return False\n\n                    def __neq__(self, x):\n                        return True\n\n                    def __ge__(self, x):\n                        return False\n\n                    def __gt__(self, x):\n                        return False\n\n                    def __complex__(self, *a):\n                        raise NotImplementedError(\n                            \"NaN can not be converted to a complex\"\n                        )\n\n                if decimal:\n                    nan = decimal.Decimal(\"NaN\")\n                else:\n                    nan = nan()\n\n                class inf(float):\n                    \"\"\"An approximation of the +Infinity floating point number.\"\"\"\n\n                    def __repr__(self):\n                        return \"inf\"\n\n                    def __str__(self):\n                        return \"inf\"\n\n                    def __add__(self, x):\n                        return self\n\n                    def __radd__(self, x):\n                        return self\n\n                    def __sub__(self, x):\n                        return self\n\n                    def __rsub__(self, x):\n                        return self\n\n                    def __mul__(self, x):\n                        if x is neginf or x < 0:\n                            return neginf\n                        elif x == 0:\n                            return nan\n                        else:\n                            return self\n\n                    def __rmul__(self, x):\n                        return self.__mul__(x)\n\n                    def __div__(self, x):\n                        if x == 0:\n                            raise ZeroDivisionError(\"float division\")\n                        elif x < 0:\n                            return neginf\n                        else:\n                            return self\n\n                    def __rdiv__(self, x):\n                        if x is inf or x is neginf or x is nan:\n                            return nan\n                        return 0.0\n\n                    def __divmod__(self, x):\n                        if x == 0:\n                            raise ZeroDivisionError(\"float divmod()\")\n                        elif x < 0:\n                            return (nan, nan)\n                        else:\n                            return (self, self)\n\n                    def __rdivmod__(self, x):\n                        if x is inf or x is neginf or x is nan:\n                            return (nan, nan)\n                        return (0.0, x)\n\n                    def __mod__(self, x):\n                        if x == 0:\n                            raise ZeroDivisionError(\"float modulo\")\n                        else:\n                            return nan\n\n                    def __rmod__(self, x):\n                        if x is inf or x is neginf or x is nan:\n                            return nan\n                        return x\n\n                    def __pow__(self, exp):\n                        if exp == 0:\n                            return 1.0\n                        else:\n                            return self\n\n                    def __rpow__(self, x):\n                        if -1 < x < 1:\n                            return 0.0\n                        elif x == 1.0:\n                            return 1.0\n                        elif x is nan or x is neginf or x < 0:\n                            return nan\n                        else:\n                            return self\n\n                    def __neg__(self):\n                        return neginf\n\n                    def __pos__(self):\n                        return self\n\n                    def __abs__(self):\n                        return self\n\n                    def __lt__(self, x):\n                        return False\n\n                    def __le__(self, x):\n                        if x is self:\n                            return True\n                        else:\n                            return False\n\n                    def __eq__(self, x):\n                        if x is self:\n                            return True\n                        else:\n                            return False\n\n                    def __neq__(self, x):\n                        if x is self:\n                            return False\n                        else:\n                            return True\n\n                    def __ge__(self, x):\n                        return True\n\n                    def __gt__(self, x):\n                        return True\n\n                    def __complex__(self, *a):\n                        raise NotImplementedError(\n                            \"Infinity can not be converted to a complex\"\n                        )\n\n                if decimal:\n                    inf = decimal.Decimal(\"Infinity\")\n                else:\n                    inf = inf()\n\n                class neginf(float):\n                    \"\"\"An approximation of the -Infinity floating point number.\"\"\"\n\n                    def __repr__(self):\n                        return \"-inf\"\n\n                    def __str__(self):\n                        return \"-inf\"\n\n                    def __add__(self, x):\n                        return self\n\n                    def __radd__(self, x):\n                        return self\n\n                    def __sub__(self, x):\n                        return self\n\n                    def __rsub__(self, x):\n                        return self\n\n                    def __mul__(self, x):\n                        if x is self or x < 0:\n                            return inf\n                        elif x == 0:\n                            return nan\n                        else:\n                            return self\n\n                    def __rmul__(self, x):\n                        return self.__mul__(self)\n\n                    def __div__(self, x):\n                        if x == 0:\n                            raise ZeroDivisionError(\"float division\")\n                        elif x < 0:\n                            return inf\n                        else:\n                            return self\n\n                    def __rdiv__(self, x):\n                        if x is inf or x is neginf or x is nan:\n                            return nan\n                        return -0.0\n\n                    def __divmod__(self, x):\n                        if x == 0:\n                            raise ZeroDivisionError(\"float divmod()\")\n                        elif x < 0:\n                            return (nan, nan)\n                        else:\n                            return (self, self)\n\n                    def __rdivmod__(self, x):\n                        if x is inf or x is neginf or x is nan:\n                            return (nan, nan)\n                        return (-0.0, x)\n\n                    def __mod__(self, x):\n                        if x == 0:\n                            raise ZeroDivisionError(\"float modulo\")\n                        else:\n                            return nan\n\n                    def __rmod__(self, x):\n                        if x is inf or x is neginf or x is nan:\n                            return nan\n                        return x\n\n                    def __pow__(self, exp):\n                        if exp == 0:\n                            return 1.0\n                        else:\n                            return self\n\n                    def __rpow__(self, x):\n                        if x is nan or x is inf or x is inf:\n                            return nan\n                        return 0.0\n\n                    def __neg__(self):\n                        return inf\n\n                    def __pos__(self):\n                        return self\n\n                    def __abs__(self):\n                        return inf\n\n                    def __lt__(self, x):\n                        return True\n\n                    def __le__(self, x):\n                        return True\n\n                    def __eq__(self, x):\n                        if x is self:\n                            return True\n                        else:\n                            return False\n\n                    def __neq__(self, x):\n                        if x is self:\n                            return False\n                        else:\n                            return True\n\n                    def __ge__(self, x):\n                        if x is self:\n                            return True\n                        else:\n                            return False\n\n                    def __gt__(self, x):\n                        return False\n\n                    def __complex__(self, *a):\n                        raise NotImplementedError(\n                            \"-Infinity can not be converted to a complex\"\n                        )\n\n                if decimal:\n                    neginf = decimal.Decimal(\"-Infinity\")\n                else:\n                    neginf = neginf(0)\n    return nan, inf, neginf\n\n\nnan, inf, neginf = _nonnumber_float_constants()\ndel _nonnumber_float_constants\n\n\n# ----------------------------------------------------------------------\n# Integers\n\n\nclass json_int((1).__class__):  # Have to specify base this way to satisfy 2to3\n    \"\"\"A subclass of the Python int/long that remembers its format (hex,octal,etc).\n\n    Initialize it the same as an int, but also accepts an additional keyword\n    argument 'number_format' which should be one of the NUMBER_FORMAT_* values.\n\n        n = json_int( x[, base, number_format=NUMBER_FORMAT_DECIMAL] )\n\n    \"\"\"\n\n    def __new__(cls, *args, **kwargs):\n        if \"number_format\" in kwargs:\n            number_format = kwargs[\"number_format\"]\n            del kwargs[\"number_format\"]\n            if number_format not in (\n                NUMBER_FORMAT_DECIMAL,\n                NUMBER_FORMAT_HEX,\n                NUMBER_FORMAT_OCTAL,\n                NUMBER_FORMAT_LEGACYOCTAL,\n                NUMBER_FORMAT_BINARY,\n            ):\n                raise TypeError(\"json_int(): Invalid value for number_format argument\")\n        else:\n            number_format = NUMBER_FORMAT_DECIMAL\n        obj = super(json_int, cls).__new__(cls, *args, **kwargs)\n        obj._jsonfmt = number_format\n        return obj\n\n    @property\n    def number_format(self):\n        \"\"\"The original radix format of the number\"\"\"\n        return self._jsonfmt\n\n    def json_format(self):\n        \"\"\"Returns the integer value formatted as a JSON literal\"\"\"\n        fmt = self._jsonfmt\n        if fmt == NUMBER_FORMAT_HEX:\n            return format(self, \"#x\")\n        elif fmt == NUMBER_FORMAT_OCTAL:\n            return format(self, \"#o\")\n        elif fmt == NUMBER_FORMAT_BINARY:\n            return format(self, \"#b\")\n        elif fmt == NUMBER_FORMAT_LEGACYOCTAL:\n            if self == 0:\n                return \"0\"  # For some reason Python's int doesn't do '00'\n            elif self < 0:\n                return \"-0%o\" % (-self)\n            else:\n                return \"0%o\" % self\n        else:\n            return str(self)\n\n\n# ----------------------------------------------------------------------\n# String processing helpers\n\n\ndef skipstringsafe(s, start=0, end=None):\n    i = start\n    # if end is None:\n    #    end = len(s)\n    unsafe = helpers.unsafe_string_chars\n    while i < end and s[i] not in unsafe:\n        # c = s[i]\n        # if c in unsafe_string_chars:\n        #    break\n        i += 1\n    return i\n\n\ndef skipstringsafe_slow(s, start=0, end=None):\n    i = start\n    if end is None:\n        end = len(s)\n    while i < end:\n        c = s[i]\n        if c == '\"' or c == \"'\" or c == \"\\\\\" or ord(c) <= 0x1F:\n            break\n        i += 1\n    return i\n\n\ndef extend_list_with_sep(orig_seq, extension_seq, sepchar=\"\"):\n    if not sepchar:\n        orig_seq.extend(extension_seq)\n    else:\n        for i, x in enumerate(extension_seq):\n            if i > 0:\n                orig_seq.append(sepchar)\n            orig_seq.append(x)\n\n\ndef extend_and_flatten_list_with_sep(orig_seq, extension_seq, separator=\"\"):\n    for i, part in enumerate(extension_seq):\n        if i > 0 and separator:\n            orig_seq.append(separator)\n        orig_seq.extend(part)\n\n\n# ----------------------------------------------------------------------\n# Unicode UTF-32\n# ----------------------------------------------------------------------\n\n\ndef _make_raw_bytes(byte_list):\n    \"\"\"Takes a list of byte values (numbers) and returns a bytes (Python 3) or string (Python 2)\"\"\"\n    if _py_major >= 3:\n        b = bytes(byte_list)\n    else:\n        b = \"\".join(chr(n) for n in byte_list)\n    return b\n\n\nclass utf32(codecs.CodecInfo):\n    \"\"\"Unicode UTF-32 and UCS4 encoding/decoding support.\n\n    This is for older Pythons whch did not have UTF-32 codecs.\n\n    JSON requires that all JSON implementations must support the\n    UTF-32 encoding (as well as UTF-8 and UTF-16).  But earlier\n    versions of Python did not provide a UTF-32 codec, so we must\n    implement UTF-32 ourselves in case we need it.\n\n    See http://en.wikipedia.org/wiki/UTF-32\n\n    \"\"\"\n\n    BOM_UTF32_BE = _make_raw_bytes([0, 0, 0xFE, 0xFF])  # '\\x00\\x00\\xfe\\xff'\n    BOM_UTF32_LE = _make_raw_bytes([0xFF, 0xFE, 0, 0])  # '\\xff\\xfe\\x00\\x00'\n\n    @staticmethod\n    def lookup(name):\n        \"\"\"A standard Python codec lookup function for UCS4/UTF32.\n\n        If if recognizes an encoding name it returns a CodecInfo\n        structure which contains the various encode and decoder\n        functions to use.\n\n        \"\"\"\n        ci = None\n        name = name.upper()\n        if name in (\n            \"UCS4BE\",\n            \"UCS-4BE\",\n            \"UCS-4-BE\",\n            \"UTF32BE\",\n            \"UTF-32BE\",\n            \"UTF-32-BE\",\n        ):\n            ci = codecs.CodecInfo(\n                utf32.utf32be_encode, utf32.utf32be_decode, name=\"utf-32be\"\n            )\n        elif name in (\n            \"UCS4LE\",\n            \"UCS-4LE\",\n            \"UCS-4-LE\",\n            \"UTF32LE\",\n            \"UTF-32LE\",\n            \"UTF-32-LE\",\n        ):\n            ci = codecs.CodecInfo(\n                utf32.utf32le_encode, utf32.utf32le_decode, name=\"utf-32le\"\n            )\n        elif name in (\"UCS4\", \"UCS-4\", \"UTF32\", \"UTF-32\"):\n            ci = codecs.CodecInfo(utf32.encode, utf32.decode, name=\"utf-32\")\n        return ci\n\n    @staticmethod\n    def encode(obj, errors=\"strict\", endianness=None, include_bom=True):\n        \"\"\"Encodes a Unicode string into a UTF-32 encoded byte string.\n\n        Returns a tuple: (bytearray, num_chars)\n\n        The errors argument should be one of 'strict', 'ignore', or 'replace'.\n\n        The endianness should be one of:\n            * 'B', '>', or 'big'     -- Big endian\n            * 'L', '<', or 'little'  -- Little endien\n            * None                   -- Default, from sys.byteorder\n\n        If include_bom is true a Byte-Order Mark will be written to\n        the beginning of the string, otherwise it will be omitted.\n\n        \"\"\"\n        import sys\n        import struct\n\n        # Make a container that can store bytes\n        if _py_major >= 3:\n            f = bytearray()\n            write = f.extend\n\n            def tobytes():\n                return bytes(f)\n        else:\n            try:\n                import io as sio\n            except ImportError:\n                import io as sio\n            f = sio.StringIO()\n            write = f.write\n            tobytes = f.getvalue\n\n        if not endianness:\n            endianness = sys.byteorder\n\n        if endianness.upper()[0] in (\"B>\"):\n            big_endian = True\n        elif endianness.upper()[0] in (\"L<\"):\n            big_endian = False\n        else:\n            raise ValueError(\n                \"Invalid endianness %r: expected 'big', 'little', or None\" % endianness\n            )\n\n        pack = struct.pack\n        packspec = \">L\" if big_endian else \"<L\"\n\n        num_chars = 0\n\n        if include_bom:\n            if big_endian:\n                write(utf32.BOM_UTF32_BE)\n            else:\n                write(utf32.BOM_UTF32_LE)\n            num_chars += 1\n\n        for pos, c in enumerate(obj):\n            n = ord(c)\n            if 0xD800 <= n <= 0xDFFF:  # surrogate codepoints are prohibited by UTF-32\n                if errors == \"ignore\":\n                    pass\n                elif errors == \"replace\":\n                    n = 0xFFFD\n                else:\n                    raise UnicodeEncodeError(\n                        \"utf32\",\n                        obj,\n                        pos,\n                        pos + 1,\n                        \"surrogate code points from U+D800 to U+DFFF are not allowed\",\n                    )\n            write(pack(packspec, n))\n            num_chars += 1\n\n        return (tobytes(), num_chars)\n\n    @staticmethod\n    def utf32le_encode(obj, errors=\"strict\", include_bom=False):\n        \"\"\"Encodes a Unicode string into a UTF-32LE (little endian) encoded byte string.\"\"\"\n        return utf32.encode(obj, errors=errors, endianness=\"L\", include_bom=include_bom)\n\n    @staticmethod\n    def utf32be_encode(obj, errors=\"strict\", include_bom=False):\n        \"\"\"Encodes a Unicode string into a UTF-32BE (big endian) encoded byte string.\"\"\"\n        return utf32.encode(obj, errors=errors, endianness=\"B\", include_bom=include_bom)\n\n    @staticmethod\n    def decode(obj, errors=\"strict\", endianness=None):\n        \"\"\"Decodes a UTF-32 byte string into a Unicode string.\n\n        Returns tuple (bytearray, num_bytes)\n\n        The errors argument shold be one of 'strict', 'ignore',\n        'replace', 'backslashreplace', or 'xmlcharrefreplace'.\n\n        The endianness should either be None (for auto-guessing), or a\n        word that starts with 'B' (big) or 'L' (little).\n\n        Will detect a Byte-Order Mark. If a BOM is found and endianness\n        is also set, then the two must match.\n\n        If neither a BOM is found nor endianness is set, then big\n        endian order is assumed.\n\n        \"\"\"\n        import struct\n        import sys\n\n        maxunicode = sys.maxunicode\n        unpack = struct.unpack\n\n        # Detect BOM\n        if obj.startswith(utf32.BOM_UTF32_BE):\n            bom_endianness = \"B\"\n            start = len(utf32.BOM_UTF32_BE)\n        elif obj.startswith(utf32.BOM_UTF32_LE):\n            bom_endianness = \"L\"\n            start = len(utf32.BOM_UTF32_LE)\n        else:\n            bom_endianness = None\n            start = 0\n\n        num_bytes = start\n\n        if endianness is None:\n            if bom_endianness is None:\n                endianness = sys.byteorder.upper()[0]  # Assume platform default\n            else:\n                endianness = bom_endianness\n        else:\n            endianness = endianness[0].upper()\n            if bom_endianness and endianness != bom_endianness:\n                raise UnicodeDecodeError(\n                    \"utf32\", obj, 0, start, \"BOM does not match expected byte order\"\n                )\n\n        # Check for truncated last character\n        if ((len(obj) - start) % 4) != 0:\n            raise UnicodeDecodeError(\n                \"utf32\", obj, start, len(obj), \"Data length not a multiple of 4 bytes\"\n            )\n\n        # Start decoding characters\n        chars = []\n        packspec = \">L\" if endianness == \"B\" else \"<L\"\n        i = 0\n        for i in range(start, len(obj), 4):\n            seq = obj[i : i + 4]\n            n = unpack(packspec, seq)[0]\n            num_bytes += 4\n\n            if n > maxunicode or (0xD800 <= n <= 0xDFFF):\n                if errors == \"strict\":\n                    raise UnicodeDecodeError(\n                        \"utf32\", obj, i, i + 4, \"Invalid code point U+%04X\" % n\n                    )\n                elif errors == \"replace\":\n                    chars.append(chr(0xFFFD))\n                elif errors == \"backslashreplace\":\n                    if n > 0xFFFF:\n                        esc = \"\\\\u%04x\" % (n,)\n                    else:\n                        esc = \"\\\\U%08x\" % (n,)\n                    for esc_c in esc:\n                        chars.append(esc_c)\n                elif errors == \"xmlcharrefreplace\":\n                    esc = \"&#%d;\" % (n,)\n                    for esc_c in esc:\n                        chars.append(esc_c)\n                else:  # ignore\n                    pass\n            else:\n                chars.append(helpers.safe_unichr(n))\n        return (\"\".join(chars), num_bytes)\n\n    @staticmethod\n    def utf32le_decode(obj, errors=\"strict\"):\n        \"\"\"Decodes a UTF-32LE (little endian) byte string into a Unicode string.\"\"\"\n        return utf32.decode(obj, errors=errors, endianness=\"L\")\n\n    @staticmethod\n    def utf32be_decode(obj, errors=\"strict\"):\n        \"\"\"Decodes a UTF-32BE (big endian) byte string into a Unicode string.\"\"\"\n        return utf32.decode(obj, errors=errors, endianness=\"B\")\n\n\n# ----------------------------------------------------------------------\n# Helper functions\n# ----------------------------------------------------------------------\n\n\ndef _make_unsafe_string_chars():\n    import unicodedata\n\n    unsafe = []\n    for c in [chr(i) for i in range(0x100)]:\n        if c == '\"' or c == \"\\\\\" or unicodedata.category(c) in [\"Cc\", \"Cf\", \"Zl\", \"Zp\"]:\n            unsafe.append(c)\n    return \"\".join(unsafe)\n\n\nclass helpers(object):\n    \"\"\"A set of utility functions.\"\"\"\n\n    hexdigits = \"0123456789ABCDEFabcdef\"\n    octaldigits = \"01234567\"\n    unsafe_string_chars = _make_unsafe_string_chars()\n\n    import sys\n\n    maxunicode = sys.maxunicode\n\n    always_use_custom_codecs = False  # If True use demjson's codecs\n    # before system codecs. This\n    # is mainly here for testing.\n\n    javascript_reserved_words = frozenset(\n        [\n            # Keywords (plus \"let\")  (ECMAScript 6 section 11.6.2.1)\n            \"break\",\n            \"case\",\n            \"catch\",\n            \"class\",\n            \"const\",\n            \"continue\",\n            \"debugger\",\n            \"default\",\n            \"delete\",\n            \"do\",\n            \"else\",\n            \"export\",\n            \"extends\",\n            \"finally\",\n            \"for\",\n            \"function\",\n            \"if\",\n            \"import\",\n            \"in\",\n            \"instanceof\",\n            \"let\",\n            \"new\",\n            \"return\",\n            \"super\",\n            \"switch\",\n            \"this\",\n            \"throw\",\n            \"try\",\n            \"typeof\",\n            \"var\",\n            \"void\",\n            \"while\",\n            \"with\",\n            \"yield\",\n            # Future reserved words (ECMAScript 6 section 11.6.2.2)\n            \"enum\",\n            \"implements\",\n            \"interface\",\n            \"package\",\n            \"private\",\n            \"protected\",\n            \"public\",\n            \"static\",\n            # null/boolean literals\n            \"null\",\n            \"true\",\n            \"false\",\n        ]\n    )\n\n    @staticmethod\n    def make_raw_bytes(byte_list):\n        \"\"\"Constructs a byte array (bytes in Python 3, str in Python 2) from a list of byte values (0-255).\"\"\"\n        return _make_raw_bytes(byte_list)\n\n    @staticmethod\n    def is_hex_digit(c):\n        \"\"\"Determines if the given character is a valid hexadecimal digit (0-9, a-f, A-F).\"\"\"\n        return c in helpers.hexdigits\n\n    @staticmethod\n    def is_octal_digit(c):\n        \"\"\"Determines if the given character is a valid octal digit (0-7).\"\"\"\n        return c in helpers.octaldigits\n\n    @staticmethod\n    def is_binary_digit(c):\n        \"\"\"Determines if the given character is a valid binary digit (0 or 1).\"\"\"\n        return c == \"0\" or c == \"1\"\n\n    @staticmethod\n    def char_is_json_ws(c):\n        \"\"\"Determines if the given character is a JSON white-space character\"\"\"\n        return c in \" \\t\\n\\r\"\n\n    @staticmethod\n    def safe_unichr(codepoint):\n        \"\"\"Just like Python's unichr() but works in narrow-Unicode Pythons.\"\"\"\n        if codepoint >= 0x10000 and codepoint > helpers.maxunicode:\n            # Narrow-Unicode python, construct a UTF-16 surrogate pair.\n            w1, w2 = helpers.make_surrogate_pair(codepoint)\n            if w2 is None:\n                c = chr(w1)\n            else:\n                c = chr(w1) + chr(w2)\n        else:\n            c = chr(codepoint)\n        return c\n\n    @staticmethod\n    def char_is_unicode_ws(c):\n        \"\"\"Determines if the given character is a Unicode space character\"\"\"\n        if not isinstance(c, str):\n            c = str(c)\n        if c in \" \\t\\n\\r\\f\\v\":\n            return True\n        import unicodedata\n\n        return unicodedata.category(c) == \"Zs\"\n\n    @staticmethod\n    def char_is_json_eol(c):\n        \"\"\"Determines if the given character is a JSON line separator\"\"\"\n        return c in \"\\n\\r\"\n\n    @staticmethod\n    def char_is_unicode_eol(c):\n        \"\"\"Determines if the given character is a Unicode line or\n        paragraph separator. These correspond to CR and LF as well as\n        Unicode characters in the Zl or Zp categories.\n\n        \"\"\"\n        return c in \"\\r\\n\\u2028\\u2029\"\n\n    @staticmethod\n    def char_is_identifier_leader(c):\n        \"\"\"Determines if the character may be the first character of a\n        JavaScript identifier.\n        \"\"\"\n        return c.isalpha() or c in \"_$\"\n\n    @staticmethod\n    def char_is_identifier_tail(c):\n        \"\"\"Determines if the character may be part of a JavaScript\n        identifier.\n        \"\"\"\n        return c.isalnum() or c in \"_$\\u200c\\u200d\"\n\n    @staticmethod\n    def extend_and_flatten_list_with_sep(orig_seq, extension_seq, separator=\"\"):\n        for i, part in enumerate(extension_seq):\n            if i > 0 and separator:\n                orig_seq.append(separator)\n            orig_seq.extend(part)\n\n    @staticmethod\n    def strip_format_control_chars(txt):\n        \"\"\"Filters out all Unicode format control characters from the string.\n\n        ECMAScript permits any Unicode \"format control characters\" to\n        appear at any place in the source code.  They are to be\n        ignored as if they are not there before any other lexical\n        tokenization occurs.  Note that JSON does not allow them,\n        except within string literals.\n\n        * Ref. ECMAScript section 7.1.\n        * http://en.wikipedia.org/wiki/Unicode_control_characters\n\n        There are dozens of Format Control Characters, for example:\n            U+00AD   SOFT HYPHEN\n            U+200B   ZERO WIDTH SPACE\n            U+2060   WORD JOINER\n\n        \"\"\"\n        import unicodedata\n\n        txt2 = [c for c in txt if unicodedata.category(str(c)) != \"Cf\"]\n\n        # 2to3 NOTE: The following is needed to work around a broken\n        # Python3 conversion in which filter() will be transformed\n        # into a list rather than a string.\n        if not isinstance(txt2, str):\n            txt2 = \"\".join(txt2)\n        return txt2\n\n    @staticmethod\n    def lookup_codec(encoding):\n        \"\"\"Wrapper around codecs.lookup().\n\n        Returns None if codec not found, rather than raising a LookupError.\n        \"\"\"\n        import codecs\n\n        if isinstance(encoding, codecs.CodecInfo):\n            return encoding\n        encoding = encoding.lower()\n        import codecs\n\n        if helpers.always_use_custom_codecs:\n            # Try custom utf32 first, then standard python codecs\n            cdk = utf32.lookup(encoding)\n            if not cdk:\n                try:\n                    cdk = codecs.lookup(encoding)\n                except LookupError:\n                    cdk = None\n        else:\n            # Try standard python codecs first, then custom utf32\n            try:\n                cdk = codecs.lookup(encoding)\n            except LookupError:\n                cdk = utf32.lookup(encoding)\n        return cdk\n\n    @staticmethod\n    def auto_detect_encoding(s):\n        \"\"\"Takes a string (or byte array) and tries to determine the Unicode encoding it is in.\n\n        Returns the encoding name, as a string.\n\n        \"\"\"\n        if not s or len(s) == 0:\n            return \"utf-8\"\n\n        # Get the byte values of up to the first 4 bytes\n        ords = []\n        for i in range(0, min(len(s), 4)):\n            x = s[i]\n            if isinstance(x, str):\n                x = ord(x)\n            ords.append(x)\n\n        # Look for BOM marker\n        import codecs\n\n        bom2, bom3, bom4 = None, None, None\n        if len(s) >= 2:\n            bom2 = s[:2]\n        if len(s) >= 3:\n            bom3 = s[:3]\n        if len(s) >= 4:\n            bom4 = s[:4]\n\n        # Assign values of first four bytes to: a, b, c, d; and last byte to: z\n        a, b, c, d, z = None, None, None, None, None\n        if len(s) >= 1:\n            a = ords[0]\n        if len(s) >= 2:\n            b = ords[1]\n        if len(s) >= 3:\n            c = ords[2]\n        if len(s) >= 4:\n            d = ords[3]\n\n        z = s[-1]\n        if isinstance(z, str):\n            z = ord(z)\n\n        if bom4 and (\n            (hasattr(codecs, \"BOM_UTF32_LE\") and bom4 == codecs.BOM_UTF32_LE)\n            or (bom4 == utf32.BOM_UTF32_LE)\n        ):\n            encoding = \"utf-32le\"\n            s = s[4:]\n        elif bom4 and (\n            (hasattr(codecs, \"BOM_UTF32_BE\") and bom4 == codecs.BOM_UTF32_BE)\n            or (bom4 == utf32.BOM_UTF32_BE)\n        ):\n            encoding = \"utf-32be\"\n            s = s[4:]\n        elif bom2 and bom2 == codecs.BOM_UTF16_LE:\n            encoding = \"utf-16le\"\n            s = s[2:]\n        elif bom2 and bom2 == codecs.BOM_UTF16_BE:\n            encoding = \"utf-16be\"\n            s = s[2:]\n        elif bom3 and bom3 == codecs.BOM_UTF8:\n            encoding = \"utf-8\"\n            s = s[3:]\n\n        # No BOM, so autodetect encoding used by looking at first four\n        # bytes according to RFC 4627 section 3.  The first and last bytes\n        # in a JSON document will be ASCII.  The second byte will be ASCII\n        # unless the first byte was a quotation mark.\n\n        elif (\n            len(s) >= 4 and a == 0 and b == 0 and c == 0 and d != 0\n        ):  # UTF-32BE  (0 0 0 x)\n            encoding = \"utf-32be\"\n        elif (\n            len(s) >= 4 and a != 0 and b == 0 and c == 0 and d == 0 and z == 0\n        ):  # UTF-32LE  (x 0 0 0 [... 0])\n            encoding = \"utf-32le\"\n        elif len(s) >= 2 and a == 0 and b != 0:  # UTF-16BE  (0 x)\n            encoding = \"utf-16be\"\n        elif len(s) >= 2 and a != 0 and b == 0 and z == 0:  # UTF-16LE  (x 0 [... 0])\n            encoding = \"utf-16le\"\n        elif ord(\"\\t\") <= a <= 127:\n            # First byte appears to be ASCII, so guess UTF-8.\n            encoding = \"utf8\"\n        else:\n            raise ValueError(\"Can not determine the Unicode encoding for byte stream\")\n\n        return encoding\n\n    @staticmethod\n    def unicode_decode(txt, encoding=None):\n        \"\"\"Takes a string (or byte array) and tries to convert it to a Unicode string.\n\n        Returns a named tuple:  (string, codec, bom)\n\n        The 'encoding' argument, if supplied, should either the name of\n        a character encoding, or an instance of codecs.CodecInfo.  If\n        the encoding argument is None or \"auto\" then the encoding is\n        automatically determined, if possible.\n\n        Any BOM (Byte Order Mark) that is found at the beginning of the\n        input will be stripped off and placed in the 'bom' portion of\n        the returned value.\n\n        \"\"\"\n        if isinstance(txt, str):\n            res = _namedtuple(\"DecodedString\", [\"string\", \"codec\", \"bom\"])(\n                txt, None, None\n            )\n        else:\n            if encoding is None or encoding == \"auto\":\n                encoding = helpers.auto_detect_encoding(txt)\n\n            cdk = helpers.lookup_codec(encoding)\n            if not cdk:\n                raise LookupError(\"Can not find codec for encoding %r\" % encoding)\n\n            try:\n                # Determine if codec takes arguments; try a decode of nothing\n                cdk.decode(helpers.make_raw_bytes([]), errors=\"strict\")\n            except TypeError:\n                cdk_kw = {}  # This coded doesn't like the errors argument\n            else:\n                cdk_kw = {\"errors\": \"strict\"}\n\n            unitxt, numbytes = cdk.decode(txt, **cdk_kw)  # DO THE DECODE HERE!\n\n            # Remove BOM if present\n            if len(unitxt) > 0 and unitxt[0] == \"\\ufeff\":\n                bom = cdk.encode(unitxt[0])[0]\n                unitxt = unitxt[1:]\n            elif len(unitxt) > 0 and unitxt[0] == \"\\ufffe\":  # Reversed BOM\n                raise UnicodeDecodeError(\n                    cdk.name, txt, 0, 0, \"Wrong byte order, found reversed BOM U+FFFE\"\n                )\n            else:\n                bom = None\n\n            res = _namedtuple(\"DecodedString\", [\"string\", \"codec\", \"bom\"])(\n                unitxt, cdk, bom\n            )\n        return res\n\n    @staticmethod\n    def surrogate_pair_as_unicode(c1, c2):\n        \"\"\"Takes a pair of unicode surrogates and returns the equivalent unicode character.\n\n        The input pair must be a surrogate pair, with c1 in the range\n        U+D800 to U+DBFF and c2 in the range U+DC00 to U+DFFF.\n\n        \"\"\"\n        n1, n2 = ord(c1), ord(c2)\n        if n1 < 0xD800 or n1 > 0xDBFF or n2 < 0xDC00 or n2 > 0xDFFF:\n            raise JSONDecodeError(\"illegal Unicode surrogate pair\", (c1, c2))\n        a = n1 - 0xD800\n        b = n2 - 0xDC00\n        v = (a << 10) | b\n        v += 0x10000\n        return helpers.safe_unichr(v)\n\n    @staticmethod\n    def unicode_as_surrogate_pair(c):\n        \"\"\"Takes a single unicode character and returns a sequence of surrogate pairs.\n\n        The output of this function is a tuple consisting of one or two unicode\n        characters, such that if the input character is outside the BMP range\n        then the output is a two-character surrogate pair representing that character.\n\n        If the input character is inside the BMP then the output tuple will have\n        just a single character...the same one.\n\n        \"\"\"\n        n = ord(c)\n        w1, w2 = helpers.make_surrogate_pair(n)\n        if w2 is None:\n            return (chr(w1),)\n        else:\n            return (chr(w1), chr(w2))\n\n    @staticmethod\n    def make_surrogate_pair(codepoint):\n        \"\"\"Given a Unicode codepoint (int) returns a 2-tuple of surrogate codepoints.\"\"\"\n        if codepoint < 0x10000:\n            return (codepoint, None)  # in BMP, surrogate pair not required\n        v = codepoint - 0x10000\n        vh = (v >> 10) & 0x3FF  # highest 10 bits\n        vl = v & 0x3FF  # lowest 10 bits\n        w1 = 0xD800 | vh\n        w2 = 0xDC00 | vl\n        return (w1, w2)\n\n    @staticmethod\n    def isnumbertype(obj):\n        \"\"\"Is the object of a Python number type (excluding complex)?\"\"\"\n        return (\n            isinstance(obj, (int, float))\n            and not isinstance(obj, bool)\n            or obj is nan\n            or obj is inf\n            or obj is neginf\n            or (decimal and isinstance(obj, decimal.Decimal))\n        )\n\n    @staticmethod\n    def is_negzero(n):\n        \"\"\"Is the number value a negative zero?\"\"\"\n        if isinstance(n, float):\n            return n == 0.0 and repr(n).startswith(\"-\")\n        elif decimal and isinstance(n, decimal.Decimal):\n            return n.is_zero() and n.is_signed()\n        else:\n            return False\n\n    @staticmethod\n    def is_nan(n):\n        \"\"\"Is the number a NaN (not-a-number)?\"\"\"\n        if isinstance(n, float):\n            return n is nan or n.hex() == \"nan\" or n != n\n        elif decimal and isinstance(n, decimal.Decimal):\n            return n.is_nan()\n        else:\n            return False\n\n    @staticmethod\n    def is_infinite(n):\n        \"\"\"Is the number infinite?\"\"\"\n        if isinstance(n, float):\n            return n is inf or n is neginf or n.hex() in (\"inf\", \"-inf\")\n        elif decimal and isinstance(n, decimal.Decimal):\n            return n.is_infinite()\n        else:\n            return False\n\n    @staticmethod\n    def isstringtype(obj):\n        \"\"\"Is the object of a Python string type?\"\"\"\n        if isinstance(obj, str):\n            return True\n        # Must also check for some other pseudo-string types\n        import collections\n\n        return isinstance(obj, (str,)) or isinstance(obj, collections.UserString)\n        ## or isinstance(obj, UserString.MutableString)\n\n    @staticmethod\n    def decode_hex(hexstring):\n        \"\"\"Decodes a hexadecimal string into it's integer value.\"\"\"\n        # We don't use the builtin 'hex' codec in python since it can\n        # not handle odd numbers of digits, nor raise the same type\n        # of exceptions we want to.\n        n = 0\n        for c in hexstring:\n            if \"0\" <= c <= \"9\":\n                d = ord(c) - ord(\"0\")\n            elif \"a\" <= c <= \"f\":\n                d = ord(c) - ord(\"a\") + 10\n            elif \"A\" <= c <= \"F\":\n                d = ord(c) - ord(\"A\") + 10\n            else:\n                raise ValueError(\"Not a hexadecimal number\", hexstring)\n            # Could use ((n << 4 ) | d), but python 2.3 issues a FutureWarning.\n            n = (n * 16) + d\n        return n\n\n    @staticmethod\n    def decode_octal(octalstring):\n        \"\"\"Decodes an octal string into it's integer value.\"\"\"\n        n = 0\n        for c in octalstring:\n            if \"0\" <= c <= \"7\":\n                d = ord(c) - ord(\"0\")\n            else:\n                raise ValueError(\"Not an octal number\", octalstring)\n            # Could use ((n << 3 ) | d), but python 2.3 issues a FutureWarning.\n            n = (n * 8) + d\n        return n\n\n    @staticmethod\n    def decode_binary(binarystring):\n        \"\"\"Decodes a binary string into it's integer value.\"\"\"\n        n = 0\n        for c in binarystring:\n            if c == \"0\":\n                d = 0\n            elif c == \"1\":\n                d = 1\n            else:\n                raise ValueError(\"Not an binary number\", binarystring)\n            # Could use ((n << 3 ) | d), but python 2.3 issues a FutureWarning.\n            n = (n * 2) + d\n        return n\n\n    @staticmethod\n    def format_timedelta_iso(td):\n        \"\"\"Encodes a datetime.timedelta into ISO-8601 Time Period format.\"\"\"\n        d = td.days\n        s = td.seconds\n        ms = td.microseconds\n        m, s = divmod(s, 60)\n        h, m = divmod(m, 60)\n        a = [\"P\"]\n        if d:\n            a.append(\"%dD\" % d)\n        if h or m or s or ms:\n            a.append(\"T\")\n        if h:\n            a.append(\"%dH\" % h)\n        if m:\n            a.append(\"%dM\" % m)\n        if s or ms:\n            if ms:\n                a.append(\"%d.%06d\" % (s, ms))\n            else:\n                a.append(\"%d\" % s)\n        if len(a) == 1:\n            a.append(\"T0S\")\n        return \"\".join(a)\n\n\n# ----------------------------------------------------------------------\n# File position indicator\n# ----------------------------------------------------------------------\n\n\nclass position_marker(object):\n    \"\"\"A position marks a specific place in a text document.\n    It consists of the following attributes:\n\n        * line - The line number, starting at 1\n        * column - The column on the line, starting at 0\n        * char_position - The number of characters from the start of\n                          the document, starting at 0\n        * text_after - (optional) a short excerpt of the text of\n                       document starting at the current position\n\n    Lines are separated by any Unicode line separator character. As an\n    exception a CR+LF character pair is treated as being a single line\n    separator demarcation.\n\n    Columns are simply a measure of the number of characters after the\n    start of a new line, starting at 0.  Visual effects caused by\n    Unicode characters such as combining characters, bidirectional\n    text, zero-width characters and so on do not affect the\n    computation of the column regardless of visual appearance.\n\n    The char_position is a count of the number of characters since the\n    beginning of the document, starting at 0. As used within the\n    buffered_stream class, if the document starts with a Unicode Byte\n    Order Mark (BOM), the BOM prefix is NOT INCLUDED in the count.\n\n    \"\"\"\n\n    def __init__(self, offset=0, line=1, column=0, text_after=None):\n        self.__char_position = offset\n        self.__line = line\n        self.__column = column\n        self.__text_after = text_after\n        self.__at_end = False\n        self.__last_was_cr = False\n\n    @property\n    def line(self):\n        \"\"\"The current line within the document, starts at 1.\"\"\"\n        return self.__line\n\n    @property\n    def column(self):\n        \"\"\"The current character column from the beginning of the\n        document, starts at 0.\n        \"\"\"\n        return self.__column\n\n    @property\n    def char_position(self):\n        \"\"\"The current character offset from the beginning of the\n        document, starts at 0.\n        \"\"\"\n        return self.__char_position\n\n    @property\n    def at_start(self):\n        \"\"\"Returns True if the position is at the start of the document.\"\"\"\n        return self.char_position == 0\n\n    @property\n    def at_end(self):\n        \"\"\"Returns True if the position is at the end of the document.\n\n        This property must be set by the user.\n        \"\"\"\n        return self.__at_end\n\n    @at_end.setter\n    def at_end(self, b):\n        \"\"\"Sets the at_end property to True or False.\"\"\"\n        self.__at_end = bool(b)\n\n    @property\n    def text_after(self):\n        \"\"\"Returns a textual excerpt starting at the current position.\n\n        This property must be set by the user.\n        \"\"\"\n        return self.__at_end\n\n    @text_after.setter\n    def text_after(self, value):\n        \"\"\"Sets the text_after property to a given string.\"\"\"\n        self.__text_after = value\n\n    def __repr__(self):\n        s = \"%s(offset=%r,line=%r,column=%r\" % (\n            self.__class__.__name__,\n            self.__char_position,\n            self.__line,\n            self.__column,\n        )\n        if self.text_after:\n            s += \",text_after=%r\" % (self.text_after,)\n        s += \")\"\n        return s\n\n    def describe(self, show_text=True):\n        \"\"\"Returns a human-readable description of the position, in English.\"\"\"\n        s = \"line %d, column %d, offset %d\" % (\n            self.__line,\n            self.__column,\n            self.__char_position,\n        )\n        if self.at_start:\n            s += \" (AT-START)\"\n        elif self.at_end:\n            s += \" (AT-END)\"\n        if show_text and self.text_after:\n            s += \", text %r\" % (self.text_after)\n        return s\n\n    def __str__(self):\n        \"\"\"Same as the describe() function.\"\"\"\n        return self.describe(show_text=True)\n\n    def copy(self):\n        \"\"\"Create a copy of the position object.\"\"\"\n        p = self.__class__()\n        p.__char_position = self.__char_position\n        p.__line = self.__line\n        p.__column = self.__column\n        p.text_after = self.__text_after\n        p.at_end = self.at_end\n        p.__last_was_cr = self.__last_was_cr\n        return p\n\n    def rewind(self):\n        \"\"\"Set the position to the start of the document.\"\"\"\n        if not self.at_start:\n            self.text_after = None\n            self.at_end = False\n        self.__char_position = 0\n        self.__line = 1\n        self.__column = 0\n        self.__last_was_cr = False\n\n    def advance(self, s):\n        \"\"\"Advance the position from its current place according to\n        the given string of characters.\n\n        \"\"\"\n        if s:\n            self.text_after = None\n        for c in s:\n            self.__char_position += 1\n            if c == \"\\n\" and self.__last_was_cr:\n                self.__last_was_cr = False\n            elif helpers.char_is_unicode_eol(c):\n                self.__line += 1\n                self.__column = 0\n                self.__last_was_cr = c == \"\\r\"\n            else:\n                self.__column += 1\n                self.__last_was_cr = False\n\n\n# ----------------------------------------------------------------------\n# Buffered Stream Reader\n# ----------------------------------------------------------------------\n\n\nclass buffered_stream(object):\n    \"\"\"A helper class for the JSON parser.\n\n    It allows for reading an input document, while handling some\n    low-level Unicode issues as well as tracking the current position\n    in terms of line and column position.\n\n    \"\"\"\n\n    def __init__(self, txt=\"\", encoding=None):\n        self.reset()\n        self.set_text(txt, encoding)\n\n    def reset(self):\n        \"\"\"Clears the state to nothing.\"\"\"\n        self.__pos = position_marker()\n        self.__saved_pos = []  # Stack of saved positions\n        self.__bom = helpers.make_raw_bytes(\n            []\n        )  # contains copy of byte-order mark, if any\n        self.__codec = None  # The CodecInfo\n        self.__encoding = None  # The name of the codec's encoding\n        self.__input_is_bytes = False\n        self.__rawbuf = None\n        self.__raw_bytes = None\n        self.__cmax = 0\n        self.num_ws_skipped = 0\n\n    def save_position(self):\n        self.__saved_pos.append(self.__pos.copy())\n        return True\n\n    def clear_saved_position(self):\n        if self.__saved_pos:\n            self.__saved_pos.pop()\n            return True\n        else:\n            return False\n\n    def restore_position(self):\n        try:\n            old_pos = self.__saved_pos.pop()  # Can raise IndexError\n        except IndexError:\n            raise IndexError(\"Attempt to restore buffer position that was never saved\")\n        else:\n            self.__pos = old_pos\n            return True\n\n    def _find_codec(self, encoding):\n        if encoding is None:\n            self.__codec = None\n            self.__encoding = None\n        elif isinstance(encoding, codecs.CodecInfo):\n            self.__codec = encoding\n            self.__encoding = self.__codec.name\n        else:\n            self.__encoding = encoding\n            self.__codec = helpers.lookup_codec(encoding)\n            if not self.__codec:\n                raise JSONDecodeError(\n                    \"no codec available for character encoding\", encoding\n                )\n        return self.__codec\n\n    def set_text(self, txt, encoding=None):\n        \"\"\"Changes the input text document and rewinds the position to\n        the start of the new document.\n\n        \"\"\"\n        import sys\n\n        self.rewind()\n        self.__codec = None\n        self.__bom = None\n        self.__rawbuf = \"\"\n        self.__cmax = 0  # max number of chars in input\n        try:\n            decoded = helpers.unicode_decode(txt, encoding)\n        except JSONError:\n            raise\n        except Exception as err:\n            # Re-raise as a JSONDecodeError\n            e2 = sys.exc_info()\n            newerr = JSONDecodeError(\"a Unicode decoding error occurred\")\n            # Simulate Python 3's: \"raise X from Y\" exception chaining\n            newerr.__cause__ = err\n            newerr.__traceback__ = e2[2]\n            raise newerr\n        else:\n            self.__codec = decoded.codec\n            self.__bom = decoded.bom\n            self.__rawbuf = decoded.string\n            self.__cmax = len(self.__rawbuf)\n\n    def __repr__(self):\n        return \"<%s at %r text %r>\" % (\n            self.__class__.__name__,\n            self.__pos,\n            self.text_context,\n        )\n\n    def rewind(self):\n        \"\"\"Resets the position back to the start of the input text.\"\"\"\n        self.__pos.rewind()\n\n    @property\n    def codec(self):\n        \"\"\"The codec object used to perform Unicode decoding, or None.\"\"\"\n        return self.__codec\n\n    @property\n    def bom(self):\n        \"\"\"The Unicode Byte-Order Mark (BOM), if any, that was present\n        at the start of the input text.  The returned BOM is a string\n        of the raw bytes, and is not Unicode-decoded.\n\n        \"\"\"\n        return self.__bom\n\n    @property\n    def cpos(self):\n        \"\"\"The current character offset from the start of the document.\"\"\"\n        return self.__pos.char_position\n\n    @property\n    def position(self):\n        \"\"\"The current position (as a position_marker object).\n        Returns a copy.\n\n        \"\"\"\n        p = self.__pos.copy()\n        p.text_after = self.text_context\n        p.at_end = self.at_end\n        return p\n\n    @property\n    def at_start(self):\n        \"\"\"Returns True if the position is currently at the start of\n        the document, or False otherwise.\n\n        \"\"\"\n        return self.__pos.at_start\n\n    @property\n    def at_end(self):\n        \"\"\"Returns True if the position is currently at the end of the\n        document, of False otherwise.\n\n        \"\"\"\n        c = self.peek()\n        return not c\n\n    def at_ws(self, allow_unicode_whitespace=True):\n        \"\"\"Returns True if the current position contains a white-space\n        character.\n\n        \"\"\"\n        c = self.peek()\n        if not c:\n            return False\n        elif allow_unicode_whitespace:\n            return helpers.char_is_unicode_ws(c)\n        else:\n            return helpers.char_is_json_ws(c)\n\n    def at_eol(self, allow_unicode_eol=True):\n        \"\"\"Returns True if the current position contains an\n        end-of-line control character.\n\n        \"\"\"\n        c = self.peek()\n        if not c:\n            return True  # End of file is treated as end of line\n        elif allow_unicode_eol:\n            return helpers.char_is_unicode_eol(c)\n        else:\n            return helpers.char_is_json_eol(c)\n\n    def peek(self, offset=0):\n        \"\"\"Returns the character at the current position, or at a\n        given offset away from the current position.  If the position\n        is beyond the limits of the document size, then an empty\n        string '' is returned.\n\n        \"\"\"\n        i = self.cpos + offset\n        if i < 0 or i >= self.__cmax:\n            return \"\"\n        return self.__rawbuf[i]\n\n    def peekstr(self, span=1, offset=0):\n        \"\"\"Returns one or more characters starting at the current\n        position, or at a given offset away from the current position,\n        and continuing for the given span length.  If the offset and\n        span go outside the limit of the current document size, then\n        the returned string may be shorter than the requested span\n        length.\n\n        \"\"\"\n        i = self.cpos + offset\n        j = i + span\n        if i < 0 or i >= self.__cmax:\n            return \"\"\n        return self.__rawbuf[i:j]\n\n    @property\n    def text_context(self, context_size=20):\n        \"\"\"A short human-readable textual excerpt of the document at\n        the current position, in English.\n\n        \"\"\"\n        context_size = max(context_size, 4)\n        s = self.peekstr(context_size + 1)\n        if not s:\n            return \"\"\n        if len(s) > context_size:\n            s = s[: context_size - 3] + \"...\"\n        return s\n\n    def startswith(self, s):\n        \"\"\"Determines if the text at the current position starts with\n        the given string.\n\n        See also method: pop_if_startswith()\n\n        \"\"\"\n        s2 = self.peekstr(len(s))\n        return s == s2\n\n    def skip(self, span=1):\n        \"\"\"Advances the current position by one (or the given number)\n        of characters.  Will not advance beyond the end of the\n        document.  Returns the number of characters skipped.\n\n        \"\"\"\n\n        i = self.cpos\n        self.__pos.advance(self.peekstr(span))\n        return self.cpos - i\n\n    def skipuntil(self, testfn):\n        \"\"\"Advances the current position until a given predicate test\n        function succeeds, or the end of the document is reached.\n\n        Returns the actual number of characters skipped.\n\n        The provided test function should take a single unicode\n        character and return a boolean value, such as:\n\n            lambda c : c == '.'   # Skip to next period\n\n        See also methods: skipwhile() and popuntil()\n\n        \"\"\"\n        i = self.cpos\n        while True:\n            c = self.peek()\n            if not c or testfn(c):\n                break\n            else:\n                self.__pos.advance(c)\n        return self.cpos - i\n\n    def skipwhile(self, testfn):\n        \"\"\"Advances the current position until a given predicate test\n        function fails, or the end of the document is reached.\n\n        Returns the actual number of characters skipped.\n\n        The provided test function should take a single unicode\n        character and return a boolean value, such as:\n\n            lambda c : c.isdigit()   # Skip all digits\n\n        See also methods: skipuntil() and popwhile()\n\n        \"\"\"\n        return self.skipuntil(lambda c: not testfn(c))\n\n    def skip_to_next_line(self, allow_unicode_eol=True):\n        \"\"\"Advances the current position to the start of the next\n        line.  Will not advance beyond the end of the file.  Note that\n        the two-character sequence CR+LF is recognized as being just a\n        single end-of-line marker.\n\n        \"\"\"\n        ln = self.__pos.line\n        while True:\n            c = self.pop()\n            if not c or self.__pos.line > ln:\n                if c == \"\\r\" and self.peek() == \"\\n\":\n                    self.skip()\n                break\n\n    def skipws(self, allow_unicode_whitespace=True):\n        \"\"\"Advances the current position past all whitespace, or until\n        the end of the document is reached.\n\n        \"\"\"\n        if allow_unicode_whitespace:\n            n = self.skipwhile(helpers.char_is_unicode_ws)\n        else:\n            n = self.skipwhile(helpers.char_is_json_ws)\n        self.num_ws_skipped += n\n        return n\n\n    def pop(self):\n        \"\"\"Returns the character at the current position and advances\n        the position to the next character.  At the end of the\n        document this function returns an empty string.\n\n        \"\"\"\n        c = self.peek()\n        if c:\n            self.__pos.advance(c)\n        return c\n\n    def popstr(self, span=1, offset=0):\n        \"\"\"Returns a string of one or more characters starting at the\n        current position, and advances the position to the following\n        character after the span.  Will not go beyond the end of the\n        document, so the returned string may be shorter than the\n        requested span.\n\n        \"\"\"\n        s = self.peekstr(span)\n        if s:\n            self.__pos.advance(s)\n        return s\n\n    def popif(self, testfn):\n        \"\"\"Just like the pop() function, but only returns the\n        character if the given predicate test function succeeds.\n        \"\"\"\n        c = self.peek()\n        if c and testfn(c):\n            self.__pos.advance(c)\n            return c\n        return \"\"\n\n    def pop_while_in(self, chars):\n        \"\"\"Pops a sequence of characters at the current position\n        as long as each of them is in the given set of characters.\n\n        \"\"\"\n        if not isinstance(chars, (set, frozenset)):\n            cset = set(chars)\n        c = self.peek()\n        if c and c in cset:\n            s = self.popwhile(lambda c: c and c in cset)\n            return s\n        return None\n\n    def pop_identifier(self, match=None):\n        \"\"\"Pops the sequence of characters at the current position\n        that match the syntax for a JavaScript identifier.\n\n        \"\"\"\n        c = self.peek()\n        if c and helpers.char_is_identifier_leader(c):\n            s = self.popwhile(helpers.char_is_identifier_tail)\n            return s\n        return None\n\n    def pop_if_startswith(self, s):\n        \"\"\"Pops the sequence of characters if they match the given string.\n\n        See also method: startswith()\n\n        \"\"\"\n        s2 = self.peekstr(len(s))\n        if s2 != s:\n            return None\n        self.__pos.advance(s2)\n        return s2\n\n    def popwhile(self, testfn, maxchars=None):\n        \"\"\"Pops all the characters starting at the current position as\n        long as each character passes the given predicate function\n        test.  If maxchars a numeric value instead of None then then\n        no more than that number of characters will be popped\n        regardless of the predicate test.\n\n        See also methods: skipwhile() and popuntil()\n\n        \"\"\"\n        s = []\n        i = 0\n        while maxchars is None or i < maxchars:\n            c = self.popif(testfn)\n            if not c:\n                break\n            s.append(c)\n            i += 1\n        return \"\".join(s)\n\n    def popuntil(self, testfn, maxchars=None):\n        \"\"\"Just like popwhile() method except the predicate function\n        should return True to stop the sequence rather than False.\n\n        See also methods: skipuntil() and popwhile()\n\n        \"\"\"\n        return self.popwhile(lambda c: not testfn(c), maxchars=maxchars)\n\n    def __getitem__(self, index):\n        \"\"\"Returns the character at the given index relative to the current position.\n\n        If the index goes beyond the end of the input, or prior to the\n        start when negative, then '' is returned.\n\n        If the index provided is a slice object, then that range of\n        characters is returned as a string. Note that a stride value other\n        than 1 is not supported in the slice.  To use a slice, do:\n\n            s = my_stream[ 1:4 ]\n\n        \"\"\"\n        if isinstance(index, slice):\n            return self.peekstr(index.stop - index.start, index.start)\n        else:\n            return self.peek(index)\n\n\n# ----------------------------------------------------------------------\n# Exception classes.\n# ----------------------------------------------------------------------\n\n\nclass JSONException(Exception):\n    \"\"\"Base class for all JSON-related exceptions.\"\"\"\n\n    pass\n\n\nclass JSONSkipHook(JSONException):\n    \"\"\"An exception to be raised by user-defined code within hook\n    callbacks to indicate the callback does not want to handle the\n    situation.\n\n    \"\"\"\n\n    pass\n\n\nclass JSONStopProcessing(JSONException):\n    \"\"\"Can be raised by anyplace, including inside a hook function, to\n    cause the entire encode or decode process to immediately stop\n    with an error.\n\n    \"\"\"\n\n    pass\n\n\nclass JSONAbort(JSONException):\n    pass\n\n\nclass JSONError(JSONException):\n    \"\"\"Base class for all JSON-related errors.\n\n    In addition to standard Python exceptions, these exceptions may\n    also have additional properties:\n\n        * severity - One of: 'fatal', 'error', 'warning', 'info'\n        * position - An indication of the position in the input where the error occured.\n        * outer_position - A secondary position (optional) that gives\n          the location of the outer data item in which the error\n          occured, such as the beginning of a string or an array.\n        * context_description - A string that identifies the context\n          in which the error occured.  Default is \"Context\".\n    \"\"\"\n\n    severities = frozenset([\"fatal\", \"error\", \"warning\", \"info\"])\n\n    def __init__(self, message, *args, **kwargs):\n        self.severity = \"error\"\n        self._position = None\n        self.outer_position = None\n        self.context_description = None\n        for kw, val in list(kwargs.items()):\n            if kw == \"severity\":\n                if val not in self.severities:\n                    raise TypeError(\n                        \"%s given invalid severity %r\" % (self.__class__.__name__, val)\n                    )\n                self.severity = val\n            elif kw == \"position\":\n                self.position = val\n            elif kw == \"outer_position\":\n                self.outer_position = val\n            elif kw == \"context_description\" or kw == \"context\":\n                self.context_description = val\n            else:\n                raise TypeError(\n                    \"%s does not accept %r keyword argument\"\n                    % (self.__class__.__name__, kw)\n                )\n        super(JSONError, self).__init__(message, *args)\n        self.message = message\n\n    @property\n    def position(self):\n        return self._position\n\n    @position.setter\n    def position(self, pos):\n        if pos == 0:\n            self._position = 0  # position_marker() # start of input\n        else:\n            self._position = pos\n\n    def __repr__(self):\n        s = \"%s(%r\" % (self.__class__.__name__, self.message)\n        for a in self.args[1:]:\n            s += \", %r\" % (a,)\n        if self.position:\n            s += \", position=%r\" % (self.position,)\n        if self.outer_position:\n            s += \", outer_position=%r\" % (self.outer_position,)\n        s += \", severity=%r)\" % (self.severity,)\n        return s\n\n    def pretty_description(self, show_positions=True, filename=None):\n        if filename:\n            pfx = filename.rstrip().rstrip(\":\") + \":\"\n        else:\n            pfx = \"\"\n        # Print file position as numeric abbreviation\n        err = pfx\n        if self.position == 0:\n            err += \"0:0:\"\n        elif self.position:\n            err += \"%d:%d:\" % (self.position.line, self.position.column)\n        else:\n            err += \"    \"\n        # Print severity and main error message\n        err += \" %s: %s\" % (self.severity.capitalize(), self.message)\n        if len(self.args) > 1:\n            err += \": \"\n            for anum, a in enumerate(self.args[1:]):\n                if anum > 1:\n                    err += \", \"\n                astr = repr(a)\n                if len(astr) > 30:\n                    astr = astr[:30] + \"...\"\n                err += astr\n        # Print out exception chain\n        e2 = self\n        while e2:\n            if hasattr(e2, \"__cause__\") and isinstance(e2.__cause__, Exception):\n                e2 = e2.__cause__\n                e2desc = str(e2).strip()\n                if not e2desc:\n                    e2desc = repr(e2).strip()\n                err += \"\\n   |  Cause: %s\" % e2desc.strip().replace(\n                    \"\\n\", \"\\n   |         \"\n                )\n            else:\n                e2 = None\n        # Show file position\n        if show_positions and self.position is not None:\n            if self.position == 0:\n                err += \"\\n   |  At start of input\"\n            else:\n                err += \"\\n   |  At %s\" % (self.position.describe(show_text=False),)\n                if self.position.text_after:\n                    err += \"\\n   |    near text: %r\" % (self.position.text_after,)\n        # Show context\n        if show_positions and self.outer_position:\n            if self.context_description:\n                cdesc = self.context_description.capitalize()\n            else:\n                cdesc = \"Context\"\n            err += \"\\n   |  %s started at %s\" % (\n                cdesc,\n                self.outer_position.describe(show_text=False),\n            )\n            if self.outer_position.text_after:\n                err += \"\\n   |    with text: %r\" % (self.outer_position.text_after,)\n        return err\n\n\nclass JSONDecodeError(JSONError):\n    \"\"\"An exception class raised when a JSON decoding error (syntax error) occurs.\"\"\"\n\n    pass\n\n\nclass JSONDecodeHookError(JSONDecodeError):\n    \"\"\"An exception that occured within a decoder hook.\n\n    The original exception is available in the 'hook_exception' attribute.\n    \"\"\"\n\n    def __init__(self, hook_name, exc_info, encoded_obj, *args, **kwargs):\n        self.hook_name = hook_name\n        if not exc_info:\n            exc_info = (None, None, None)\n        exc_type, self.hook_exception, self.hook_traceback = exc_info\n        self.object_type = type(encoded_obj)\n        msg = \"Hook %s raised %r while decoding type <%s>\" % (\n            hook_name,\n            self.hook_exception.__class__.__name__,\n            self.object_type.__name__,\n        )\n        if len(args) >= 1:\n            msg += \": \" + args[0]\n            args = args[1:]\n        super(JSONDecodeHookError, self).__init__(msg, *args, **kwargs)\n\n\nclass JSONEncodeError(JSONError):\n    \"\"\"An exception class raised when a python object can not be encoded as a JSON string.\"\"\"\n\n    pass\n\n\nclass JSONEncodeHookError(JSONEncodeError):\n    \"\"\"An exception that occured within an encoder hook.\n\n    The original exception is available in the 'hook_exception' attribute.\n    \"\"\"\n\n    def __init__(self, hook_name, exc_info, encoded_obj, *args, **kwargs):\n        self.hook_name = hook_name\n        if not exc_info:\n            exc_info = (None, None, None)\n        exc_type, self.hook_exception, self.hook_traceback = exc_info\n        self.object_type = type(encoded_obj)\n        msg = \"Hook %s raised %r while encoding type <%s>\" % (\n            self.hook_name,\n            self.hook_exception.__class__.__name__,\n            self.object_type.__name__,\n        )\n        if len(args) >= 1:\n            msg += \": \" + args[0]\n            args = args[1:]\n        super(JSONEncodeHookError, self).__init__(msg, *args, **kwargs)\n\n\n# ----------------------------------------------------------------------\n# Encoder state object\n# ----------------------------------------------------------------------\n\n\nclass encode_state(object):\n    \"\"\"An internal transient object used during JSON encoding to\n    record the current construction state.\n\n    \"\"\"\n\n    def __init__(self, jsopts=None, parent=None):\n        self.chunks = []\n        if not parent:\n            self.parent = None\n            self.nest_level = 0\n            self.options = jsopts\n            self.escape_unicode_test = False  # or a function f(unichar)=>True/False\n        else:\n            self.parent = parent\n            self.nest_level = parent.nest_level + 1\n            self.escape_unicode_test = parent.escape_unicode_test\n            self.options = parent.options\n\n    def make_substate(self):\n        return encode_state(parent=self)\n\n    def join_substate(self, other_state):\n        self.chunks.extend(other_state.chunks)\n        other_state.chunks = []\n\n    def append(self, s):\n        \"\"\"Adds a string to the end of the current JSON document\"\"\"\n        self.chunks.append(s)\n\n    def combine(self):\n        \"\"\"Returns the accumulated string and resets the state to empty\"\"\"\n        s = \"\".join(self.chunks)\n        self.chunks = []\n        return s\n\n    def __eq__(self, other_state):\n        return (\n            self.nest_level == other_state.nest_level\n            and self.chunks == other_state.chunks\n        )\n\n    def __lt__(self, other_state):\n        if self.nest_level != other_state.nest_level:\n            return self.nest_level < other_state.nest_level\n        return self.chunks < other_state.chunks\n\n\n# ----------------------------------------------------------------------\n# Decoder statistics\n# ----------------------------------------------------------------------\n\n\nclass decode_statistics(object):\n    \"\"\"An object that records various statistics about a decoded JSON document.\"\"\"\n\n    int8_max = 0x7F\n    int8_min = -0x7F - 1\n    int16_max = 0x7FFF\n    int16_min = -0x7FFF - 1\n    int32_max = 0x7FFFFFFF\n    int32_min = -0x7FFFFFFF - 1\n    int64_max = 0x7FFFFFFFFFFFFFFF\n    int64_min = -0x7FFFFFFFFFFFFFFF - 1\n\n    double_int_max = 2**53 - 1\n    double_int_min = -(2**53 - 1)\n\n    def __init__(self):\n        # Nesting\n        self.max_depth = 0\n        self.max_items_in_array = 0\n        self.max_items_in_object = 0\n        # Integer stats\n        self.num_ints = 0\n        self.num_ints_8bit = 0\n        self.num_ints_16bit = 0\n        self.num_ints_32bit = 0\n        self.num_ints_53bit = 0  # ints which will overflow IEEE doubles\n        self.num_ints_64bit = 0\n        self.num_ints_long = 0\n        self.num_negative_zero_ints = 0\n        # Floating-point stats\n        self.num_negative_zero_floats = 0\n        self.num_floats = 0\n        self.num_floats_decimal = 0  # overflowed 'float'\n        # String stats\n        self.num_strings = 0\n        self.max_string_length = 0\n        self.total_string_length = 0\n        self.min_codepoint = None\n        self.max_codepoint = None\n        # Other data type stats\n        self.num_arrays = 0\n        self.num_objects = 0\n        self.num_bools = 0\n        self.num_nulls = 0\n        self.num_undefineds = 0\n        self.num_nans = 0\n        self.num_infinities = 0\n        self.num_comments = 0\n        self.num_identifiers = 0  # JavaScript identifiers\n        self.num_excess_whitespace = 0\n\n    @property\n    def num_infinites(self):\n        \"\"\"Misspelled 'num_infinities' for backwards compatibility\"\"\"\n        return self.num_infinities\n\n    def pretty_description(self, prefix=\"\"):\n        import unicodedata\n\n        lines = [\n            \"Number of integers:\",\n            \"    8-bit:     %5d   (%d to %d)\"\n            % (self.num_ints_8bit, self.int8_min, self.int8_max),\n            \"   16-bit:     %5d   (%d to %d)\"\n            % (self.num_ints_16bit, self.int16_min, self.int16_max),\n            \"   32-bit:     %5d   (%d to %d)\"\n            % (self.num_ints_32bit, self.int32_min, self.int32_max),\n            \" > 53-bit:     %5d   (%d to %d - overflows JavaScript)\"\n            % (self.num_ints_53bit, self.double_int_min, self.double_int_max),\n            \"   64-bit:     %5d   (%d to %d)\"\n            % (self.num_ints_64bit, self.int64_min, self.int64_max),\n            ' > 64 bit:     %5d   (not portable, may require a \"Big Num\" package)'\n            % self.num_ints_long,\n            \"   total ints: %5d\" % self.num_ints,\n            \"   Num -0:     %5d   (negative-zero integers are not portable)\"\n            % self.num_negative_zero_ints,\n            \"Number of floats:\",\n            \"   doubles:    %5d\" % self.num_floats,\n            \" > doubles:    %5d   (will overflow IEEE doubles)\"\n            % self.num_floats_decimal,\n            \"   total flts: %5d\" % (self.num_floats + self.num_floats_decimal),\n            \"   Num -0.0:   %5d   (negative-zero floats are usually portable)\"\n            % self.num_negative_zero_floats,\n            \"Number of:\",\n            \"   nulls:      %5d\" % self.num_nulls,\n            \"   booleans:   %5d\" % self.num_bools,\n            \"   arrays:     %5d\" % self.num_arrays,\n            \"   objects:    %5d\" % self.num_objects,\n            \"Strings:\",\n            \"   number:         %5d strings\" % self.num_strings,\n            \"   max length:     %5d characters\" % self.max_string_length,\n            \"   total chars:    %5d across all strings\" % self.total_string_length,\n        ]\n\n        if self.min_codepoint is not None:\n            cp = \"U+%04X\" % self.min_codepoint\n            try:\n                charname = unicodedata.name(chr(self.min_codepoint))\n            except ValueError:\n                charname = \"? UNKNOWN CHARACTER\"\n            lines.append(\"   min codepoint: %6s  (%s)\" % (cp, charname))\n        else:\n            lines.append(\"   min codepoint: %6s\" % (\"n/a\",))\n\n        if self.max_codepoint is not None:\n            cp = \"U+%04X\" % self.max_codepoint\n            try:\n                charname = unicodedata.name(chr(self.max_codepoint))\n            except ValueError:\n                charname = \"? UNKNOWN CHARACTER\"\n            lines.append(\"   max codepoint: %6s  (%s)\" % (cp, charname))\n        else:\n            lines.append(\"   max codepoint: %6s\" % (\"n/a\",))\n\n        lines.extend(\n            [\n                \"Other JavaScript items:\",\n                \"   NaN:         %5d\" % self.num_nans,\n                \"   Infinite:    %5d\" % self.num_infinities,\n                \"   undefined:   %5d\" % self.num_undefineds,\n                \"   Comments:    %5d\" % self.num_comments,\n                \"   Identifiers: %5d\" % self.num_identifiers,\n                \"Max items in any array: %5d\" % self.max_items_in_array,\n                \"Max keys in any object: %5d\" % self.max_items_in_object,\n                \"Max nesting depth:      %5d\" % self.max_depth,\n            ]\n        )\n        if self.total_chars == 0:\n            lines.append(\"Unnecessary whitespace:     0 of 0 characters\")\n        else:\n            lines.append(\n                \"Unnecessary whitespace: %5d of %d characters (%.2f%%)\"\n                % (\n                    self.num_excess_whitespace,\n                    self.total_chars,\n                    self.num_excess_whitespace * 100.0 / self.total_chars,\n                )\n            )\n        if prefix:\n            return \"\\n\".join([prefix + s for s in lines]) + \"\\n\"\n        else:\n            return \"\\n\".join(lines) + \"\\n\"\n\n\n# ----------------------------------------------------------------------\n# Decoder state object\n# ----------------------------------------------------------------------\n\n\nclass decode_state(object):\n    \"\"\"An internal transient object used during JSON decoding to\n    record the current parsing state and error messages.\n\n    \"\"\"\n\n    def __init__(self, options=None):\n        self.reset()\n        self.options = options\n\n    def reset(self):\n        \"\"\"Clears all errors, statistics, and input text.\"\"\"\n        self.buf = None\n        self.errors = []\n        self.obj = None\n        self.cur_depth = 0  # how deep in nested structures are we?\n        self.stats = decode_statistics()\n        self._have_warned_nonbmp = False\n        self._have_warned_long_string = False\n        self._have_warned_max_depth = False\n\n    @property\n    def should_stop(self):\n        if self.has_fatal:\n            return True\n        return False\n\n    @property\n    def has_errors(self):\n        \"\"\"Have any errors been seen already?\"\"\"\n        return (\n            len([err for err in self.errors if err.severity in (\"fatal\", \"error\")]) > 0\n        )\n\n    @property\n    def has_fatal(self):\n        \"\"\"Have any errors been seen already?\"\"\"\n        return len([err for err in self.errors if err.severity in (\"fatal\",)]) > 0\n\n    def set_input(self, txt, encoding=None):\n        \"\"\"Initialize the state by setting the input document text.\"\"\"\n        import sys\n\n        self.reset()\n        try:\n            self.buf = buffered_stream(txt, encoding=encoding)\n        except JSONError as err:\n            err.position = 0  # set position to start of file\n            err.severity = \"fatal\"\n            self.push_exception(err)\n        except Exception as err:\n            # Re-raise as JSONDecodeError\n            e2 = sys.exc_info()  # noqa: F841\n            newerr = JSONDecodeError(  # noqa: F841\n                \"Error while reading input\", position=0, severity=\"fatal\"\n            )  # noqa: F841\n            self.push_exception(err)\n            self.buf = None\n        else:\n            if self.buf.bom:\n                self.push_cond(\n                    self.options.bom,\n                    \"JSON document was prefixed by a BOM (Byte Order Mark)\",\n                    self.buf.bom,\n                )\n        if not self.buf:\n            self.push_fatal(\"Aborting, can not read JSON document.\", position=0)\n\n    def push_exception(self, exc):\n        \"\"\"Add an already-built exception to the error list.\"\"\"\n        self.errors.append(exc)\n\n    def push_fatal(self, message, *args, **kwargs):\n        \"\"\"Create a fatal error.\"\"\"\n        kwargs[\"severity\"] = \"fatal\"\n        self.__push_err(message, *args, **kwargs)\n\n    def push_error(self, message, *args, **kwargs):\n        \"\"\"Create an error.\"\"\"\n        kwargs[\"severity\"] = \"error\"\n        self.__push_err(message, *args, **kwargs)\n\n    def push_warning(self, message, *args, **kwargs):\n        \"\"\"Create a warning.\"\"\"\n        kwargs[\"severity\"] = \"warning\"\n        self.__push_err(message, *args, **kwargs)\n\n    def push_info(self, message, *args, **kwargs):\n        \"\"\"Create a informational message.\"\"\"\n        kwargs[\"severity\"] = \"info\"\n        self.__push_err(message, *args, **kwargs)\n\n    def push_cond(self, behavior_value, message, *args, **kwargs):\n        \"\"\"Creates an conditional error or warning message.\n\n        The behavior value (from json_options) controls whether\n        a message will be pushed and whether it is an error\n        or warning message.\n\n        \"\"\"\n        if behavior_value == ALLOW:\n            return\n        elif behavior_value == WARN:\n            kwargs[\"severity\"] = \"warning\"\n        else:\n            kwargs[\"severity\"] = \"error\"\n        self.__push_err(message, *args, **kwargs)\n\n    def __push_err(self, message, *args, **kwargs):\n        \"\"\"Stores an error in the error list.\"\"\"\n        position = None\n        outer_position = None\n        severity = \"error\"\n        context_description = None\n        for kw, val in list(kwargs.items()):\n            if kw == \"position\":\n                position = val\n            elif kw == \"outer_position\":\n                outer_position = val\n            elif kw == \"severity\":\n                severity = val\n            elif kw == \"context_description\" or kw == \"context\":\n                context_description = val\n            else:\n                raise TypeError(\"Unknown keyword argument\", kw)\n        if position is None and self.buf:\n            position = self.buf.position  # Current position\n        err = JSONDecodeError(\n            message,\n            position=position,\n            outer_position=outer_position,\n            context_description=context_description,\n            severity=severity,\n            *args,\n        )\n        self.push_exception(err)\n\n    def update_depth_stats(self, **kwargs):\n        st = self.stats\n        st.max_depth = max(st.max_depth, self.cur_depth)\n        if (\n            not self._have_warned_max_depth\n            and self.cur_depth > self.options.warn_max_depth\n        ):\n            self._have_warned_max_depth = True\n            self.push_cond(\n                self.options.non_portable,\n                \"Arrays or objects nested deeper than %d levels may not be portable\"\n                % self.options.warn_max_depth,\n            )\n\n    def update_string_stats(self, s, **kwargs):\n        st = self.stats\n        st.num_strings += 1\n        st.max_string_length = max(st.max_string_length, len(s))\n        st.total_string_length += len(s)\n        if (\n            self.options.warn_string_length\n            and len(s) > self.options.warn_string_length\n            and not self._have_warned_long_string\n        ):\n            self._have_warned_long_string = True\n            self.push_cond(\n                self.options.non_portable,\n                \"Strings longer than %d may not be portable\"\n                % self.options.warn_string_length,\n                **kwargs,\n            )\n        if len(s) > 0:\n            mincp = ord(min(s))\n            maxcp = ord(max(s))\n            if st.min_codepoint is None:\n                st.min_codepoint = mincp\n                st.max_codepoint = maxcp\n            else:\n                st.min_codepoint = min(st.min_codepoint, mincp)\n                st.max_codepoint = max(st.max_codepoint, maxcp)\n            if maxcp > 0xFFFF and not self._have_warned_nonbmp:\n                self._have_warned_nonbmp = True\n                self.push_cond(\n                    self.options.non_portable,\n                    \"Strings containing non-BMP characters (U+%04X) may not be portable\"\n                    % maxcp,\n                    **kwargs,\n                )\n\n    def update_negzero_int_stats(self, **kwargs):\n        st = self.stats\n        st.num_negative_zero_ints += 1\n        if st.num_negative_zero_ints == 1:  # Only warn once\n            self.push_cond(\n                self.options.non_portable,\n                \"Negative zero (-0) integers are usually not portable\",\n                **kwargs,\n            )\n\n    def update_negzero_float_stats(self, **kwargs):\n        st = self.stats\n        st.num_negative_zero_floats += 1\n        if st.num_negative_zero_floats == 1:  # Only warn once\n            self.push_cond(\n                self.options.non_portable,\n                \"Negative zero (-0.0) numbers may not be portable\",\n                **kwargs,\n            )\n\n    def update_float_stats(self, float_value, **kwargs):\n        st = self.stats\n        if \"sign\" in kwargs:\n            del kwargs[\"sign\"]\n\n        if helpers.is_negzero(float_value):\n            self.update_negzero_float_stats(**kwargs)\n\n        if helpers.is_infinite(float_value):\n            st.num_infinities += 1\n\n        if isinstance(float_value, decimal.Decimal):\n            st.num_floats_decimal += 1\n            if st.num_floats_decimal == 1:  # Only warn once\n                self.push_cond(\n                    self.options.non_portable,\n                    'Floats larger or more precise than an IEEE \"double\" may not be portable',\n                    **kwargs,\n                )\n        elif isinstance(float_value, float):\n            st.num_floats += 1\n\n    def update_integer_stats(self, int_value, **kwargs):\n        sign = kwargs.get(\"sign\", 1)\n        if \"sign\" in kwargs:\n            del kwargs[\"sign\"]\n\n        if int_value == 0 and sign < 0:\n            self.update_negzero_int_stats(**kwargs)\n\n        if sign < 0:\n            int_value = -int_value\n\n        st = self.stats\n        st.num_ints += 1\n        if st.int8_min <= int_value <= st.int8_max:\n            st.num_ints_8bit += 1\n        elif st.int16_min <= int_value <= st.int16_max:\n            st.num_ints_16bit += 1\n        elif st.int32_min <= int_value <= st.int32_max:\n            st.num_ints_32bit += 1\n        elif st.int64_min <= int_value <= st.int64_max:\n            st.num_ints_64bit += 1\n        else:\n            st.num_ints_long += 1\n\n        if int_value < st.double_int_min or st.double_int_max < int_value:\n            st.num_ints_53bit += 1\n            if st.num_ints_53bit == 1:  # Only warn once\n                self.push_cond(\n                    self.options.non_portable,\n                    \"Integers larger than 53-bits are not portable\",\n                    **kwargs,\n                )\n\n\n# ----------------------------------------------------------------------\n# JSON strictness options\n# ----------------------------------------------------------------------\n\nSTRICTNESS_STRICT = \"strict\"\nSTRICTNESS_WARN = \"warn\"\nSTRICTNESS_TOLERANT = \"tolerant\"\n\nALLOW = \"allow\"\nWARN = \"warn\"\nFORBID = \"forbid\"\n\n# For float_type option\nNUMBER_AUTO = \"auto\"\nNUMBER_FLOAT = \"float\"\nNUMBER_DECIMAL = \"decimal\"\n\n# For json_int class\nNUMBER_FORMAT_DECIMAL = \"decimal\"\nNUMBER_FORMAT_HEX = \"hex\"\nNUMBER_FORMAT_LEGACYOCTAL = \"legacyoctal\"\nNUMBER_FORMAT_OCTAL = \"octal\"\nNUMBER_FORMAT_BINARY = \"binary\"\n\n\nclass _behaviors_metaclass(type):\n    \"\"\"Meta class used to establish a set of \"behavior\" options.\n\n    Classes that use this meta class must defined a class-level\n    variable called '_behaviors' that is a list of tuples, each of\n    which describes one behavior and is like: (behavior_name,\n    documentation).  Also define a second class-level variable called\n    '_behavior_values' which is a list of the permitted values for\n    each behavior, each being strings.\n\n    For each behavior (e.g., pretty), and for each value (e.g.,\n    yes) the following methods/properties will be created:\n\n      * pretty - value of 'pretty' behavior (read-write)\n      * ispretty_yes - returns True if 'pretty' is 'yes'\n\n    For each value (e.g., pink) the following methods/properties\n    will be created:\n\n      * all_behaviors - set of all behaviors (read-only)\n      * pink_behaviors - set of behaviors with value of 'pink' (read-only)\n      * set_all('pink')\n      * set_all_pink()    - set all behaviors to value of 'pink'\n\n    \"\"\"\n\n    def __new__(cls, clsname, bases, attrs):\n        values = attrs.get(\"_behavior_values\")\n        attrs[\"values\"] = property(\n            lambda self: set(self._behavior_values),\n            doc=\"Set of possible behavior values\",\n        )\n        behaviors = attrs.get(\"_behaviors\")\n\n        def get_behavior(self, name):\n            \"\"\"Returns the value for a given behavior\"\"\"\n            try:\n                return getattr(self, \"_behavior_\" + name)\n            except AttributeError:\n                raise ValueError(\"Unknown behavior\", name)\n\n        attrs[\"get_behavior\"] = get_behavior\n\n        def set_behavior(self, name, value):\n            \"\"\"Changes the value for a given behavior\"\"\"\n            if value not in self._behavior_values:\n                raise ValueError(\"Unknown value for behavior\", value)\n            varname = \"_behavior_\" + name\n            if hasattr(self, varname):\n                setattr(self, varname, value)\n            else:\n                raise ValueError(\"Unknown behavior\", name)\n\n        attrs[\"set_behavior\"] = set_behavior\n\n        def describe_behavior(self, name):\n            \"\"\"Returns documentation about a given behavior.\"\"\"\n            for n, doc in self._behaviors:\n                if n == name:\n                    return doc\n            else:\n                raise AttributeError(\"No such behavior\", name)\n\n        attrs[\"describe_behavior\"] = describe_behavior\n\n        for name, doc in behaviors:\n            attrs[\"_behavior_\" + name] = True\n            for v in values:\n                vs = v + \"_\" + name  # noqa: F841\n\n                def getx(self, name=name, forval=v):\n                    return self.get_behavior(name) == forval\n\n                attrs[\"is_\" + v + \"_\" + name] = property(\n                    getx, doc=v.capitalize() + \" \" + doc\n                )\n                # method value_name()\n                fnset = lambda self, _name=name, _value=v: self.set_behavior(  # noqa: E731\n                    _name, _value\n                )  # noqa: E731\n                fnset.__name__ = v + \"_\" + name\n                fnset.__doc__ = \"Set behavior \" + name + \" to \" + v + \".\"\n                attrs[fnset.__name__] = fnset\n\n            def get_value_for_behavior(self, name=name):\n                return self.get_behavior(name)\n\n            def set_value_for_behavior(self, value, name=name):\n                self.set_behavior(name, value)\n\n            attrs[name] = property(\n                get_value_for_behavior, set_value_for_behavior, doc=doc\n            )\n\n        @property\n        def all_behaviors(self):\n            \"\"\"Returns the names of all known behaviors.\"\"\"\n            return set([t[0] for t in self._behaviors])\n\n        attrs[\"all_behaviors\"] = all_behaviors\n\n        def set_all(self, value):\n            \"\"\"Changes all behaviors to have the given value.\"\"\"\n            if value not in self._behavior_values:\n                raise ValueError(\"Unknown behavior\", value)\n            for name in self.all_behaviors:\n                setattr(self, \"_behavior_\" + name, value)\n\n        attrs[\"set_all\"] = set_all\n\n        def is_all(self, value):\n            \"\"\"Determines if all the behaviors have the given value.\"\"\"\n            if value not in self._behavior_values:\n                raise ValueError(\"Unknown behavior\", value)\n            for name in self.all_behaviors:\n                if getattr(self, \"_behavior_\" + name) != value:\n                    return False\n            return True\n\n        attrs[\"is_all\"] = is_all\n\n        for v in values:\n            # property value_behaviors\n            def getbehaviorsfor(self, value=v):\n                return set(\n                    [\n                        name\n                        for name in self.all_behaviors\n                        if getattr(self, name) == value\n                    ]\n                )\n\n            attrs[v + \"_behaviors\"] = property(\n                getbehaviorsfor,\n                doc=\"Return the set of behaviors with the value \" + v + \".\",\n            )\n            # method set_all_value()\n            setfn = lambda self, _value=v: set_all(self, _value)  # noqa: E731\n            setfn.__name__ = \"set_all_\" + v\n            setfn.__doc__ = \"Set all behaviors to value \" + v + \".\"\n            attrs[setfn.__name__] = setfn\n            # property is_all_value\n            attrs[\"is_all_\" + v] = property(\n                lambda self, v=v: is_all(self, v),\n                doc=\"Determines if all the behaviors have the value \" + v + \".\",\n            )\n\n        def behaviors_eq(self, other):\n            \"\"\"Determines if two options objects are equivalent.\"\"\"\n            if self.all_behaviors != other.all_behaviors:\n                return False\n            return self.allowed_behaviors == other.allowed_behaviors\n\n        attrs[\"__eq__\"] = behaviors_eq\n\n        return super(_behaviors_metaclass, cls).__new__(cls, clsname, bases, attrs)\n\n\nSORT_NONE = \"none\"\nSORT_PRESERVE = \"preserve\"\nSORT_ALPHA = \"alpha\"\nSORT_ALPHA_CI = \"alpha_ci\"\nSORT_SMART = \"smart\"\n\nsorting_methods = {\n    SORT_NONE: \"Do not sort, resulting order may be random\",\n    SORT_PRESERVE: \"Preserve original order when reformatting\",\n    SORT_ALPHA: \"Sort strictly alphabetically\",\n    SORT_ALPHA_CI: \"Sort alphabetically case-insensitive\",\n    SORT_SMART: \"Sort alphabetically and numerically (DEFAULT)\",\n}\nsorting_method_aliases = {\"ci\": SORT_ALPHA_CI}\n\n\ndef smart_sort_transform(key):\n    numfmt = \"%012d\"\n    digits = \"0123456789\"\n    zero = ord(\"0\")\n    if not key:\n        key = \"\"\n    elif isinstance(key, int):\n        key = numfmt % key\n    elif isinstance(key, str):\n        keylen = len(key)\n        words = []\n        i = 0\n        while i < keylen:\n            if key[i] in digits:\n                num = 0\n                while i < keylen and key[i] in digits:\n                    num *= 10\n                    num += ord(key[i]) - zero\n                    i += 1\n                words.append(numfmt % num)\n            else:\n                words.append(key[i].upper())\n                i += 1\n        key = \"\".join(words)\n    else:\n        key = str(key)\n    return key\n\n\n# Find Enum type (introduced in Python 3.4)\ntry:\n    from enum import Enum as _enum\nexcept ImportError:\n    _enum = None\n# Find OrderedDict type\ntry:\n    from collections import OrderedDict as _OrderedDict\nexcept ImportError:\n    _OrderedDict = None\n\n\nclass json_options(object, metaclass=_behaviors_metaclass):\n    \"\"\"Options to determine how strict the decoder or encoder should be.\"\"\"\n\n    _behavior_values = (ALLOW, WARN, FORBID)\n    _behaviors = (\n        (\n            \"all_numeric_signs\",\n            \"Numbers may be prefixed by any '+' and '-', e.g., +4, -+-+77\",\n        ),\n        (\n            \"any_type_at_start\",\n            \"A JSON document may start with any type, not just arrays or objects\",\n        ),\n        (\"comments\", \"JavaScript comments, both /*...*/ and //... styles\"),\n        (\n            \"control_char_in_string\",\n            \"Strings may contain raw control characters without \\\\u-escaping\",\n        ),\n        (\"hex_numbers\", \"Hexadecimal numbers, e.g., 0x1f\"),\n        (\"binary_numbers\", \"Binary numbers, e.g., 0b1001\"),\n        (\n            \"octal_numbers\",\n            \"New-style octal numbers, e.g., 0o731  (see leading-zeros for legacy octals)\",\n        ),\n        (\n            \"initial_decimal_point\",\n            \"Floating-point numbers may start with a decimal point (no units digit)\",\n        ),\n        (\n            \"extended_unicode_escapes\",\n            \"Extended Unicode escape sequence \\\\u{..} for non-BMP characters\",\n        ),\n        (\n            \"js_string_escapes\",\n            \"All JavaScript character \\\\-escape sequences may be in strings\",\n        ),\n        (\n            \"leading_zeros\",\n            \"Numbers may have extra leading zeros (see --leading-zero-radix option)\",\n        ),\n        (\"non_numbers\", \"Non-numbers may be used, such as NaN or Infinity\"),\n        (\n            \"nonescape_characters\",\n            \"Unknown character \\\\-escape sequences stand for that character (\\\\Q -> 'Q')\",\n        ),\n        (\n            \"identifier_keys\",\n            \"JavaScript identifiers are converted to strings when used as object keys\",\n        ),\n        (\n            \"nonstring_keys\",\n            \"Value types other than strings (or identifiers) may be used as object keys\",\n        ),\n        (\n            \"omitted_array_elements\",\n            \"Arrays may have omitted/elided elements, e.g., [1,,3] == [1,undefined,3]\",\n        ),\n        (\n            \"single_quoted_strings\",\n            \"Strings may be delimited with both double (\\\") and single (') quotation marks\",\n        ),\n        (\"trailing_comma\", \"A final comma may end the list of array or object members\"),\n        (\n            \"trailing_decimal_point\",\n            \"Floating-point number may end with a decimal point and no following fractional digits\",\n        ),\n        (\"undefined_values\", \"The JavaScript 'undefined' value may be used\"),\n        (\n            \"format_control_chars\",\n            'Unicode \"format control characters\" may appear in the input',\n        ),\n        (\n            \"unicode_whitespace\",\n            \"Treat any Unicode whitespace character as valid whitespace\",\n        ),\n        # Never legal\n        (\"leading_zeros\", \"Numbers may have leading zeros\"),\n        # Normally warnings\n        (\"duplicate_keys\", \"Objects may have repeated keys\"),\n        (\n            \"zero_byte\",\n            \"Strings may contain U+0000, which may not be safe for C-based programs\",\n        ),\n        (\"bom\", \"A JSON document may start with a Unicode BOM (Byte Order Mark)\"),\n        (\n            \"non_portable\",\n            \"Anything technically valid but likely to cause data portablibity issues\",\n        ),\n    )  # end behavior list\n\n    def reset_to_defaults(self):\n        # Plain attrs (other than above behaviors) are simply copied\n        # by value, either during initialization (via keyword\n        # arguments) or via the copy() method.\n        self._plain_attrs = [\n            \"leading_zero_radix\",\n            \"encode_namedtuple_as_object\",\n            \"encode_enum_as\",\n            \"encode_compactly\",\n            \"escape_unicode\",\n            \"always_escape_chars\",\n            \"warn_string_length\",\n            \"warn_max_depth\",\n            \"int_as_float\",\n            \"decimal_context\",\n            \"float_type\",\n            \"keep_format\",\n            \"date_format\",\n            \"datetime_format\",\n            \"time_format\",\n            \"timedelta_format\",\n            \"sort_keys\",\n            \"indent_amount\",\n            \"indent_tab_width\",\n            \"indent_limit\",\n            \"max_items_per_line\",\n            \"py2str_encoding\",\n        ]\n\n        self.strictness = STRICTNESS_WARN\n        self._leading_zero_radix = 8  # via property: leading_zero_radix\n        self._sort_keys = SORT_SMART  # via property: sort_keys\n\n        self.int_as_float = False\n        self.float_type = NUMBER_AUTO\n        self.decimal_context = decimal.DefaultContext if decimal else None\n        self.keep_format = False  # keep track of when numbers are hex, octal, etc.\n\n        self.encode_namedtuple_as_object = True\n        self._encode_enum_as = \"name\"  # via property\n        self.encode_compactly = True\n        self.escape_unicode = False\n        self.always_escape_chars = (\n            None  # None, or a set of Unicode characters to always escape\n        )\n\n        self.warn_string_length = 0xFFFD  # with 16-bit length prefix\n        self.warn_max_depth = 64\n\n        self.date_format = \"iso\"  # or strftime format\n        self.datetime_format = \"iso\"  # or strftime format\n        self.time_format = \"iso\"  # or strftime format\n        self.timedelta_format = \"iso\"  # or 'hms'\n\n        self.sort_keys = SORT_ALPHA\n        self.indent_amount = 2\n        self.indent_tab_width = 0  # 0, or number of equivalent spaces\n        self.indent_limit = None\n        self.max_items_per_line = 1  # When encoding how many items per array/object\n        # before breaking into multiple lines\n        # For interpreting Python 2 'str' types:\n        if _py_major == 2:\n            self.py2str_encoding = \"ascii\"\n        else:\n            self.py2str_encoding = None\n\n    def __init__(self, **kwargs):\n        \"\"\"Set JSON encoding and decoding options.\n\n        If 'strict' is set to True, then only strictly-conforming JSON\n        output will be produced.  Note that this means that some types\n        of values may not be convertable and will result in a\n        JSONEncodeError exception.\n\n        If 'compactly' is set to True, then the resulting string will\n        have all extraneous white space removed; if False then the\n        string will be \"pretty printed\" with whitespace and indentation\n        added to make it more readable.\n\n        If 'escape_unicode' is set to True, then all non-ASCII characters\n        will be represented as a unicode escape sequence; if False then\n        the actual real unicode character will be inserted if possible.\n\n        The 'escape_unicode' can also be a function, which when called\n        with a single argument of a unicode character will return True\n        if the character should be escaped or False if it should not.\n\n        \"\"\"\n        self.reset_to_defaults()\n\n        if \"strict\" in kwargs:\n            # Do this keyword first, so other keywords may override specific behaviors\n            self.strictness = kwargs[\"strict\"]\n\n        for kw, val in list(kwargs.items()):\n            if kw == \"compactly\":  # alias for 'encode_compactly'\n                self.encode_compactly = val\n            elif kw == \"strict\":\n                pass  # Already handled\n            elif kw == \"warnings\":\n                if val:\n                    self.suppress_warnings()\n            elif kw == \"html_safe\" or kw == \"xml_safe\":\n                if bool(val):\n                    if self.always_escape_chars is None:\n                        self.always_escape_chars = set(\"<>/&\")\n                    else:\n                        self.always_escape_chars.update(set(\"<>/&\"))\n            elif kw == \"always_escape\":\n                if val:\n                    if self.always_escape_chars is None:\n                        self.always_escape_chars = set(val)\n                    else:\n                        self.always_escape_chars.update(set(val))\n            elif kw == \"int_as_float\":\n                self.int_as_float = bool(val)\n            elif kw == \"keep_format\":\n                self.keep_format = bool(val)\n            elif kw == \"float_type\":\n                if val in (NUMBER_AUTO, NUMBER_FLOAT, NUMBER_DECIMAL):\n                    self.float_type = val\n                else:\n                    raise ValueError(\n                        \"Unknown option %r for argument %r to initialize %s\"\n                        % (val, kw, self.__class__.__name__)\n                    )\n            elif kw == \"decimal\" or kw == \"decimal_context\":\n                if decimal:\n                    if not val or val == \"default\":\n                        self.decimal_context = decimal.DefaultContext\n                    elif val == \"basic\":\n                        self.decimal_context = decimal.BasicContext\n                    elif val == \"extended\":\n                        self.decimal_context = decimal.ExtendedContext\n                    elif isinstance(val, decimal.Context):\n                        self.decimal_context = val\n                    elif isinstance(val, int) or val[0].isdigit:\n                        prec = int(val)\n                        self.decimal_context = decimal.Context(prec=prec)\n                    else:\n                        raise ValueError(\n                            \"Option for %r should be a decimal.Context, a number of significant digits, or one of 'default','basic', or 'extended'.\"\n                            % (kw,)\n                        )\n            elif kw in (\"allow\", \"warn\", \"forbid\", \"prevent\", \"deny\"):\n                action = {\n                    \"allow\": ALLOW,\n                    \"warn\": WARN,\n                    \"forbid\": FORBID,\n                    \"prevent\": FORBID,\n                    \"deny\": FORBID,\n                }[kw]\n                if isinstance(val, str):\n                    val = [b.replace(\"-\", \"_\") for b in val.replace(\",\", \" \").split()]\n                for behavior in val:\n                    self.set_behavior(behavior, action)\n            elif (\n                kw.startswith(\"allow_\")\n                or kw.startswith(\"forbid_\")\n                or kw.startswith(\"prevent_\")\n                or kw.startswith(\"deny_\")\n                or kw.startswith(\"warn_\")\n            ):\n                action, behavior = kw.split(\"_\", 1)\n                if action == \"allow\":\n                    if val:\n                        self.set_behavior(behavior, ALLOW)\n                    else:\n                        self.set_behavior(behavior, FORBID)\n                elif action in (\"forbid\", \"prevent\", \"deny\"):\n                    if val:\n                        self.set_behavior(behavior, FORBID)\n                    else:\n                        self.set_behavior(behavior, ALLOW)\n                elif action == \"warn\":\n                    if val:\n                        self.set_behavior(behavior, WARN)\n                    else:\n                        self.set_behavior(behavior, ALLOW)\n            elif kw in self._plain_attrs:\n                setattr(self, kw, val)\n            else:\n                raise ValueError(\n                    \"Unknown keyword argument %r to initialize %s\"\n                    % (kw, self.__class__.__name__)\n                )\n\n    def copy(self):\n        other = self.__class__()\n        other.copy_from(self)\n        return other\n\n    def copy_from(self, other):\n        if self is other:\n            return  # Myself!\n\n        self.strictness = other.strictness  # sets behaviors in bulk\n\n        for name in self.all_behaviors:\n            self.set_behavior(name, other.get_behavior(name))\n\n        for name in self._plain_attrs:\n            val = getattr(other, name)\n            if isinstance(val, set):\n                val = val.copy()\n            elif decimal and isinstance(val, decimal.Decimal):\n                val = val.copy()\n\n            setattr(self, name, val)\n\n    def spaces_to_next_indent_level(self, min_spaces=1, subtract=0):\n        n = self.indent_amount - subtract\n        if n < 0:\n            n = 0\n        n = max(min_spaces, n)\n        return \" \" * n\n\n    def indentation_for_level(self, level=0):\n        \"\"\"Returns a whitespace string used for indenting.\"\"\"\n        if self.indent_limit is not None and level > self.indent_limit:\n            n = self.indent_limit\n        else:\n            n = level\n        n *= self.indent_amount\n        if self.indent_tab_width:\n            tw, sw = divmod(n, self.indent_tab_width)\n            return \"\\t\" * tw + \" \" * sw\n        else:\n            return \" \" * n\n\n    def set_indent(self, num_spaces, tab_width=0, limit=None):\n        \"\"\"Changes the indentation properties when outputting JSON in non-compact mode.\n\n        'num_spaces' is the number of spaces to insert for each level\n        of indentation, which defaults to 2.\n\n        'tab_width', if not 0, is the number of spaces which is equivalent\n        to one tab character.  Tabs will be output where possible rather\n        than runs of spaces.\n\n        'limit', if not None, is the maximum indentation level after\n        which no further indentation will be output.\n\n        \"\"\"\n        n = int(num_spaces)\n        if n < 0:\n            raise ValueError(\"indentation amount can not be negative\", n)\n        self.indent_amount = n\n        self.indent_tab_width = tab_width\n        self.indent_limit = limit\n\n    @property\n    def sort_keys(self):\n        \"\"\"The method used to sort dictionary keys when encoding JSON\"\"\"\n        return self._sort_keys\n\n    @sort_keys.setter\n    def sort_keys(self, method):\n        if not method:\n            self._sort_keys = SORT_NONE\n        elif callable(method):\n            self._sort_keys = method\n        elif method in sorting_methods:\n            self._sort_keys = method\n        elif method in sorting_method_aliases:  # alias\n            self._sort_keys = sorting_method_aliases[method]\n        elif method is True:\n            self._sort_keys = SORT_ALPHA\n        else:\n            raise ValueError(\"Not a valid sorting method: %r\" % method)\n\n    @property\n    def encode_enum_as(self):\n        \"\"\"The strategy for encoding Python Enum values.\"\"\"\n        return self._encode_enum_as\n\n    @encode_enum_as.setter\n    def encode_enum_as(self, val):\n        if val not in (\"name\", \"qname\", \"value\"):\n            raise ValueError(\"encode_enum_as must be one of 'name','qname', or 'value'\")\n        self._encode_enum_as = val\n\n    @property\n    def zero_float(self):\n        \"\"\"The numeric value 0.0, either a float or a decimal.\"\"\"\n        if decimal and self.float_type == NUMBER_DECIMAL:\n            return self.decimal_context.create_decimal(\"0.0\")\n        else:\n            return 0.0\n\n    @property\n    def negzero_float(self):\n        \"\"\"The numeric value -0.0, either a float or a decimal.\"\"\"\n        if decimal and self.float_type == NUMBER_DECIMAL:\n            return self.decimal_context.create_decimal(\"-0.0\")\n        else:\n            return -0.0\n\n    @property\n    def nan(self):\n        \"\"\"The numeric value NaN, either a float or a decimal.\"\"\"\n        if decimal and self.float_type == NUMBER_DECIMAL:\n            return self.decimal_context.create_decimal(\"NaN\")\n        else:\n            return nan\n\n    @property\n    def inf(self):\n        \"\"\"The numeric value Infinity, either a float or a decimal.\"\"\"\n        if decimal and self.float_type == NUMBER_DECIMAL:\n            return self.decimal_context.create_decimal(\"Infinity\")\n        else:\n            return inf\n\n    @property\n    def neginf(self):\n        \"\"\"The numeric value -Infinity, either a float or a decimal.\"\"\"\n        if decimal and self.float_type == NUMBER_DECIMAL:\n            return self.decimal_context.create_decimal(\"-Infinity\")\n        else:\n            return neginf\n\n    def make_int(self, s, sign=None, number_format=NUMBER_FORMAT_DECIMAL):\n        \"\"\"Makes an integer value according to the current options.\n\n        First argument should be a string representation of the number,\n        or an integer.\n\n        Returns a number value, which could be an int, float, or decimal.\n\n        \"\"\"\n        if isinstance(sign, int):\n            if sign < 0:\n                sign = \"-\"\n            else:\n                sign = \"+\"\n        if isinstance(s, str):\n            if s.startswith(\"-\") or s.startswith(\"+\"):\n                sign = s[0]\n                s = s[1:]\n\n        if self.int_as_float:\n            # Making a float/decimal\n            if isinstance(s, int):\n                if self.float_type == NUMBER_DECIMAL:\n                    n = self.decimal_context.create_decimal(s)\n                    if sign == \"-\":\n                        n = n.copy_negate()\n                elif s == 0 and sign == \"-\":\n                    n = self.negzero_float\n                elif -999999999999999 <= s <= 999999999999999:\n                    n = float(s)\n                    if sign == \"-\":\n                        n *= -1\n                else:\n                    n = float(s)\n                    if (n == inf or int(n) != s) and self.float_type != NUMBER_FLOAT:\n                        n = self.decimal_context.create_decimal(s)\n                        if sign == \"-\":\n                            n = n.copy_negate()\n                    elif sign == \"-\":\n                        n *= -1\n            else:  # not already an int\n                n = self.make_float(s, sign)\n                n2 = self.make_float(s[:-1] + (\"9\" if s[-1] <= \"5\" else \"0\"), sign)\n                if (n == inf or n == n2) and self.float_type != NUMBER_FLOAT:\n                    n = self.make_decimal(s, sign)\n        elif isinstance(s, int):\n            # already an integer\n            n = s\n            if sign == \"-\":\n                if n == 0:\n                    n = self.negzero_float\n                else:\n                    n *= -1\n        else:\n            # Making an actual integer\n            try:\n                n = int(s)\n            except ValueError:\n                n = self.nan\n            else:\n                if sign == \"-\":\n                    if n == 0:\n                        n = self.negzero_float\n                    else:\n                        n *= -1\n        if isinstance(n, int) and self.keep_format:\n            n = json_int(n, number_format=number_format)\n        return n\n\n    def make_decimal(self, s, sign=\"+\"):\n        \"\"\"Converts a string into a decimal or float value.\"\"\"\n        if not decimal or self.float_type == NUMBER_FLOAT:\n            return self.make_float(s, sign)\n\n        if s.startswith(\"-\") or s.startswith(\"+\"):\n            sign = s[0]\n            s = s[1:]\n        elif isinstance(sign, int):\n            if sign < 0:\n                sign = \"-\"\n            else:\n                sign = \"+\"\n\n        try:\n            f = self.decimal_context.create_decimal(s)\n        except decimal.InvalidOperation:\n            f = self.decimal_context.create_decimal(\"NaN\")\n        except decimal.Overflow:\n            if sign == \"-\":\n                f = self.decimal_context.create_decimal(\"-Infinity\")\n            else:\n                f = self.decimal_context.create_decimal(\"Infinity\")\n        else:\n            if sign == \"-\":\n                f = f.copy_negate()\n        return f\n\n    def make_float(self, s, sign=\"+\"):\n        \"\"\"Converts a string into a float or decimal value.\"\"\"\n        if decimal and self.float_type == NUMBER_DECIMAL:\n            return self.make_decimal(s, sign)\n\n        if s.startswith(\"-\") or s.startswith(\"+\"):\n            sign = s[0]\n            s = s[1:]\n        elif isinstance(sign, int):\n            if sign < 0:\n                sign = \"-\"\n            else:\n                sign = \"+\"\n\n        try:\n            f = float(s)\n        except ValueError:\n            f = nan\n        else:\n            if sign == \"-\":\n                f *= -1\n        return f\n\n    @property\n    def leading_zero_radix(self):\n        \"\"\"The radix to be used for numbers with leading zeros.  8 or 10\"\"\"\n        return self._leading_zero_radix\n\n    @leading_zero_radix.setter\n    def leading_zero_radix(self, radix):\n        if isinstance(radix, str):\n            try:\n                radix = int(radix)\n            except ValueError:\n                radix = radix.lower()\n                if radix == \"octal\" or radix == \"oct\" or radix == \"8\":\n                    radix = 8\n                elif radix == \"decimal\" or radix == \"dec\":\n                    radix = 10\n        if radix not in (8, 10):\n            raise ValueError(\"Radix must either be 8 (octal) or 10 (decimal)\")\n        self._leading_zero_radix = radix\n\n    @property\n    def leading_zero_radix_as_word(self):\n        return {8: \"octal\", 10: \"decimal\"}[self._leading_zero_radix]\n\n    def suppress_warnings(self):\n        for name in self.warn_behaviors:\n            self.set_behavior(name, \"allow\")\n\n    @property\n    def allow_or_warn_behaviors(self):\n        \"\"\"Returns the set of all behaviors that are not forbidden (i.e., are allowed or warned).\"\"\"\n        return self.allow_behaviors.union(self.warn_behaviors)\n\n    @property\n    def strictness(self):\n        return self._strictness\n\n    @strictness.setter\n    def strictness(self, strict):\n        \"\"\"Changes whether the options should be re-configured for strict JSON conformance.\"\"\"\n        if strict == STRICTNESS_WARN:\n            self._strictness = STRICTNESS_WARN\n            self.set_all_warn()\n        elif strict == STRICTNESS_STRICT or strict is True:\n            self._strictness = STRICTNESS_STRICT\n            self.keep_format = False\n            self.set_all_forbid()\n            self.warn_duplicate_keys()\n            self.warn_zero_byte()\n            self.warn_bom()\n            self.warn_non_portable()\n        elif strict == STRICTNESS_TOLERANT or strict is False:\n            self._strictness = STRICTNESS_TOLERANT\n            self.set_all_allow()\n            self.warn_duplicate_keys()\n            self.warn_zero_byte()\n            self.warn_leading_zeros()\n            self.leading_zero_radix = 8\n            self.warn_bom()\n            self.allow_non_portable()\n        else:\n            raise ValueError(\"Unknown strictness options %r\" % strict)\n        self.allow_any_type_at_start()\n\n\n# ----------------------------------------------------------------------\n# The main JSON encoder/decoder class.\n# ----------------------------------------------------------------------\n\n\nclass JSON(object):\n    \"\"\"An encoder/decoder for JSON data streams.\n\n    Usually you will call the encode() or decode() methods.  The other\n    methods are for lower-level processing.\n\n    Whether the JSON parser runs in strict mode (which enforces exact\n    compliance with the JSON spec) or the more forgiving non-string mode\n    can be affected by setting the 'strict' argument in the object's\n    initialization; or by assigning True or False to the 'strict'\n    property of the object.\n\n    You can also adjust a finer-grained control over strictness by\n    allowing or forbidding specific behaviors.  You can get a list of\n    all the available behaviors by accessing the 'behaviors' property.\n    Likewise the 'allowed_behaviors' and 'forbidden_behaviors' list which\n    behaviors will be allowed and which will not.  Call the allow()\n    or forbid() methods to adjust these.\n\n    \"\"\"\n\n    _string_quotes = \"\\\"'\"\n\n    _escapes_json = {  # character escapes in JSON\n        '\"': '\"',\n        \"/\": \"/\",\n        \"\\\\\": \"\\\\\",\n        \"b\": \"\\b\",\n        \"f\": \"\\f\",\n        \"n\": \"\\n\",\n        \"r\": \"\\r\",\n        \"t\": \"\\t\",\n    }\n\n    _escapes_js = {  # character escapes in Javascript\n        '\"': '\"',\n        \"'\": \"'\",\n        \"\\\\\": \"\\\\\",\n        \"b\": \"\\b\",\n        \"f\": \"\\f\",\n        \"n\": \"\\n\",\n        \"r\": \"\\r\",\n        \"t\": \"\\t\",\n        \"v\": \"\\v\",\n        \"0\": \"\\x00\",\n    }\n\n    # Following is a reverse mapping of escape characters, used when we\n    # output JSON.  Only those escapes which are always safe (e.g., in JSON)\n    # are here.  It won't hurt if we leave questionable ones out.\n    _rev_escapes = {\n        \"\\n\": \"\\\\n\",\n        \"\\t\": \"\\\\t\",\n        \"\\b\": \"\\\\b\",\n        \"\\r\": \"\\\\r\",\n        \"\\f\": \"\\\\f\",\n        '\"': '\\\\\"',\n        \"\\\\\": \"\\\\\\\\\",\n    }\n    _optional_rev_escapes = {\"/\": \"\\\\/\"}  # only escaped if forced to do so\n\n    json_syntax_characters = '{}[]\"\\\\,:0123456789.-+abcdefghijklmnopqrstuvwxyz \\t\\n\\r'\n\n    all_hook_names = (\n        \"decode_number\",\n        \"decode_float\",\n        \"decode_object\",\n        \"decode_array\",\n        \"decode_string\",\n        \"encode_value\",\n        \"encode_dict\",\n        \"encode_dict_key\",\n        \"encode_sequence\",\n        \"encode_bytes\",\n        \"encode_default\",\n    )\n\n    def __init__(self, **kwargs):\n        \"\"\"Creates a JSON encoder/decoder object.\n\n        You may pass encoding and decoding options either by passing\n        an argument named 'json_options' with an instance of a\n        json_options class; or with individual keyword/values that will\n        be used to initialize a new json_options object.\n\n        You can also set hooks by using keyword arguments using the\n        hook name; e.g., encode_dict=my_hook_func.\n\n        \"\"\"\n        import unicodedata\n\n        kwargs = kwargs.copy()\n        # Initialize hooks\n        for hookname in self.all_hook_names:\n            if hookname in kwargs:\n                self.set_hook(hookname, kwargs[hookname])\n                del kwargs[hookname]\n            else:\n                self.set_hook(hookname, None)\n\n        # Set options\n        if \"json_options\" in kwargs:\n            self._options = kwargs[\"json_options\"]\n        else:\n            self._options = json_options(**kwargs)\n\n        # The following is a boolean map of the first 256 characters\n        # which will quickly tell us which of those characters never\n        # need to be escaped.\n\n        self._asciiencodable = [\n            32 <= c < 128\n            and chr(c) not in self._rev_escapes\n            and unicodedata.category(chr(c)) not in [\"Cc\", \"Cf\", \"Zl\", \"Zp\"]\n            for c in range(0, 256)\n        ]\n\n    @property\n    def options(self):\n        \"\"\"The optional behaviors used, e.g., the JSON conformance\n        strictness.  Returns an instance of json_options.\n\n        \"\"\"\n        return self._options\n\n    def clear_hook(self, hookname):\n        \"\"\"Unsets a hook callback, as previously set with set_hook().\"\"\"\n        self.set_hook(hookname, None)\n\n    def clear_all_hooks(self):\n        \"\"\"Unsets all hook callbacks, as previously set with set_hook().\"\"\"\n        for hookname in self.all_hook_names:\n            self.clear_hook(hookname)\n\n    def set_hook(self, hookname, function):\n        \"\"\"Sets a user-defined callback function used during encoding or decoding.\n\n        The 'hookname' argument must be a string containing the name of\n        one of the available hooks, listed below.\n\n        The 'function' argument must either be None, which disables the hook,\n        or a callable function.  Hooks do not stack, if you set a hook it will\n        undo any previously set hook.\n\n        Netsted values.  When decoding JSON that has nested objects or\n        arrays, the decoding hooks will be called once for every\n        corresponding value, even if nested.  Generally the decoding\n        hooks will be called from the inner-most value outward, and\n        then left to right.\n\n        Skipping. Any hook function may raise a JSONSkipHook exception\n        if it does not wish to handle the particular invocation.  This\n        will have the effect of skipping the hook for that particular\n        value, as if the hook was net set.\n\n        AVAILABLE HOOKS:\n\n        * decode_string\n            Called for every JSON string literal with the\n            Python-equivalent string value as an argument. Expects to\n            get a Python object in return.\n\n        * decode_float:\n            Called for every JSON number that looks like a float (has\n            a \".\").  The string representation of the number is passed\n            as an argument.  Expects to get a Python object in return.\n\n        * decode_number:\n            Called for every JSON number. The string representation of\n            the number is passed as an argument.  Expects to get a\n            Python object in return.  NOTE: If the number looks like a\n            float and the 'decode_float' hook is set, then this hook\n            will not be called.\n\n        * decode_array:\n            Called for every JSON array. A Python list is passed as\n            the argument, and expects to get a Python object back.\n            NOTE: this hook will get called for every array, even\n            for nested arrays.\n\n        * decode_object:\n            Called for every JSON object.  A Python dictionary is passed\n            as the argument, and expects to get a Python object back.\n            NOTE: this hook will get called for every object, even\n            for nested objects.\n\n        * encode_value:\n            Called for every Python object which is to be encoded into JSON.\n\n        * encode_dict:\n            Called for every Python dictionary or anything that looks\n            like a dictionary.\n\n        * encode_dict_key:\n            Called for every dictionary key.\n\n        * encode_sequence:\n            Called for every Python sequence-like object that is not a\n            dictionary or string. This includes lists and tuples.\n\n        * encode_bytes:\n            Called for every Python bytes or bytearray type; or for\n            any memoryview with a byte ('B') item type.  (Python 3 only)\n\n        * encode_default:\n            Called for any Python type which can not otherwise be converted\n            into JSON, even after applying any other encoding hooks.\n\n        \"\"\"\n        if hookname in self.all_hook_names:\n            att = hookname + \"_hook\"\n            if function is not None and not callable(function):\n                raise ValueError(\n                    \"Hook %r must be None or a callable function\" % hookname\n                )\n            setattr(self, att, function)\n        else:\n            raise ValueError(\"Unknown hook name %r\" % hookname)\n\n    def has_hook(self, hook_name):\n        if not hook_name or hook_name not in self.all_hook_names:\n            return False\n        hook = getattr(self, hook_name + \"_hook\")\n        return callable(hook)\n\n    def call_hook(self, hook_name, input_object, position=None, *args, **kwargs):\n        \"\"\"Wrapper function to invoke a user-supplied hook function.\n\n        This will capture any exceptions raised by the hook and do something\n        appropriate with it.\n\n        \"\"\"\n        import sys\n\n        if hook_name not in self.all_hook_names:\n            raise AttributeError(\"No such hook %r\" % hook_name)\n        hook = getattr(self, hook_name + \"_hook\")\n        if not callable(hook):\n            raise TypeError(\"Hook is not callable: %r\" % (hook,))\n        try:\n            rval = hook(input_object, *args, **kwargs)\n        except JSONSkipHook:\n            raise  # Do nothing\n        except Exception as err:\n            exc_info = sys.exc_info()\n            if hook_name.startswith(\"encode_\"):\n                ex_class = JSONEncodeHookError\n            else:\n                ex_class = JSONDecodeHookError\n\n            if isinstance(err, JSONStopProcessing):\n                severity = \"fatal\"\n            else:\n                severity = \"error\"\n\n            newerr = ex_class(\n                hook_name,\n                exc_info,\n                input_object,\n                *args,\n                position=position,\n                severity=severity,\n            )\n\n            # Simulate Python 3's: \"raise X from Y\" exception chaining\n            newerr.__cause__ = err\n            newerr.__traceback__ = exc_info[2]\n            raise newerr\n        return rval\n\n    def isws(self, c):\n        \"\"\"Determines if the given character is considered as white space.\n\n        Note that Javscript is much more permissive on what it considers\n        to be whitespace than does JSON.\n\n        Ref. ECMAScript section 7.2\n\n        \"\"\"\n        if not self.options.unicode_whitespace:\n            return c in \" \\t\\n\\r\"\n        else:\n            if not isinstance(c, str):\n                c = str(c)\n            if c in \" \\t\\n\\r\\f\\v\":\n                return True\n            import unicodedata\n\n            return unicodedata.category(c) == \"Zs\"\n\n    def islineterm(self, c):\n        \"\"\"Determines if the given character is considered a line terminator.\n\n        Ref. ECMAScript section 7.3\n\n        \"\"\"\n        if c == \"\\r\" or c == \"\\n\":\n            return True\n        if c == \"\\u2028\" or c == \"\\u2029\":  # unicodedata.category(c) in  ['Zl', 'Zp']\n            return True\n        return False\n\n    def recover_parser(self, state):\n        \"\"\"Try to recover after a syntax error by locating the next \"known\" position.\"\"\"\n        buf = state.buf\n        buf.skipuntil(lambda c: c in \",:[]{}\\\"';\" or helpers.char_is_unicode_eol(c))\n        stopchar = buf.peek()\n        self.skipws(state)\n        if buf.at_end:\n            state.push_info(\n                \"Could not recover parsing after previous error\", position=buf.position\n            )\n        else:\n            state.push_info(\n                \"Recovering parsing after character %r\" % stopchar,\n                position=buf.position,\n            )\n        return stopchar\n\n    def decode_null(self, state):\n        \"\"\"\n        Intermediate-level decoder for ECMAScript 'null' keyword.\n        Takes a string and a starting index, and returns a Python\n        None object and the index of the next unparsed character.\n        \"\"\"\n        buf = state.buf\n        start_position = buf.position\n        kw = buf.pop_identifier()\n        if not kw or kw != \"null\":\n            state.push_error(\"Expected a 'null' keyword'\", kw, position=start_position)\n        else:\n            state.stats.num_nulls += 1\n        return None\n\n    def encode_undefined(self, state):\n        \"\"\"Produces the ECMAScript 'undefined' keyword.\"\"\"\n        state.append(\"undefined\")\n\n    def encode_null(self, state):\n        \"\"\"Produces the JSON 'null' keyword.\"\"\"\n        state.append(\"null\")\n\n    def decode_boolean(self, state):\n        \"\"\"Intermediate-level decode for JSON boolean literals.\n\n        Takes a string and a starting index, and returns a Python bool\n        (True or False) and the index of the next unparsed character.\n\n        \"\"\"\n        buf = state.buf\n        start_position = buf.position\n        kw = buf.pop_identifier()\n        if not kw or kw not in (\"true\", \"false\"):\n            state.push_error(\n                \"Expected a 'true' or 'false' keyword'\", kw, position=start_position\n            )\n        else:\n            state.stats.num_bools += 1\n        return kw == \"true\"\n\n    def encode_boolean(self, bval, state):\n        \"\"\"Encodes the Python boolean into a JSON Boolean literal.\"\"\"\n        state.append(\"true\" if bool(bval) else \"false\")\n\n    def decode_number(self, state):\n        \"\"\"Intermediate-level decoder for JSON numeric literals.\n\n        Takes a string and a starting index, and returns a Python\n        suitable numeric type and the index of the next unparsed character.\n\n        The returned numeric type can be either of a Python int,\n        long, or float.  In addition some special non-numbers may\n        also be returned such as nan, inf, and neginf (technically\n        which are Python floats, but have no numeric value.)\n\n        Ref. ECMAScript section 8.5.\n\n        \"\"\"\n        buf = state.buf\n        self.skipws(state)\n        start_position = buf.position\n\n        # Use external number parser hook if available\n        if self.has_hook(\"decode_number\") or self.has_hook(\"decode_float\"):\n            c = buf.peek()\n            if c and c in \"-+0123456789.\":  # First chars for a number-like value\n                buf.save_position()\n                nbr = buf.pop_while_in(\"-+0123456789abcdefABCDEFNaNInfinity.\")\n                if \".\" in nbr and self.has_hook(\"decode_float\"):\n                    hook_name = \"decode_float\"\n                elif self.has_hook(\"decode_number\"):\n                    hook_name = \"decode_number\"\n                else:\n                    hook_name = None\n\n                if hook_name:\n                    try:\n                        val = self.call_hook(hook_name, nbr, position=start_position)\n                    except JSONSkipHook:\n                        pass\n                    except JSONError as err:\n                        state.push_exception(err)\n                        val = undefined\n                    else:\n                        buf.clear_saved_position()\n                        return val\n                # Hook didn't handle it, restore old position\n                buf.restore_position()\n\n        # Detect initial sign character(s)\n        sign = +1\n        sign_count = 0\n        sign_saw_plus = False\n        sign_saw_ws = False\n        c = buf.peek()\n        while c and c in \"+-\":\n            if c == \"-\":\n                sign = sign * -1\n            elif c == \"+\":\n                sign_saw_plus = True\n            sign_count += 1\n            buf.skip()\n            if self.skipws_nocomments(state) > 0:\n                sign_saw_ws = True\n            c = buf.peek()\n\n        if sign_count > 1 or sign_saw_plus:\n            state.push_cond(\n                self.options.all_numeric_signs,\n                'Numbers may only have a single \"-\" as a sign prefix',\n                position=start_position,\n            )\n        if sign_saw_ws:\n            state.push_error(\n                \"Spaces may not appear between a +/- number sign and the digits\",\n                position=start_position,\n            )\n\n        # Check for ECMAScript symbolic non-numbers\n        if not c:\n            state.push_error(\n                \"Missing numeric value after sign\", position=start_position\n            )\n            self.recover_parser(state)\n            self.stats.num_undefineds += 1\n            return undefined\n        elif c.isalpha() or c in \"_$\":\n            kw = buf.popwhile(lambda c: c.isalnum() or c in \"_$\")\n            if kw == \"NaN\":\n                state.push_cond(\n                    self.options.non_numbers,\n                    \"NaN literals are not allowed in strict JSON\",\n                    position=start_position,\n                )\n                state.stats.num_nans += 1\n                return self.options.nan\n            elif kw == \"Infinity\":\n                state.push_cond(\n                    self.options.non_numbers,\n                    \"Infinity literals are not allowed in strict JSON\",\n                    position=start_position,\n                )\n                state.stats.num_infinities += 1\n                if sign < 0:\n                    return self.options.neginf\n                else:\n                    return self.options.inf\n            else:\n                state.push_error(\n                    \"Unknown numeric value keyword\", kw, position=start_position\n                )\n                return undefined\n\n        # Check for radix-prefixed numbers\n        elif c == \"0\" and (buf.peek(1) in [\"x\", \"X\"]):\n            # ----- HEX NUMBERS 0x123\n            prefix = buf.popstr(2)\n            digits = buf.popwhile(helpers.is_hex_digit)\n            state.push_cond(\n                self.options.hex_numbers,\n                \"Hexadecimal literals are not allowed in strict JSON\",\n                prefix + digits,\n                position=start_position,\n            )\n            if len(digits) == 0:\n                state.push_error(\n                    \"Hexadecimal number is invalid\", position=start_position\n                )\n                self.recover_parser(state)\n                return undefined\n            ival = helpers.decode_hex(digits)\n            state.update_integer_stats(ival, sign=sign, position=start_position)\n            n = state.options.make_int(ival, sign, number_format=NUMBER_FORMAT_HEX)\n            return n\n        elif c == \"0\" and (buf.peek(1) in [\"o\", \"O\"]):\n            # ----- NEW-STYLE OCTAL NUMBERS  0o123\n            prefix = buf.popstr(2)\n            digits = buf.popwhile(helpers.is_octal_digit)\n            state.push_cond(\n                self.options.octal_numbers,\n                \"Octal literals are not allowed in strict JSON\",\n                prefix + digits,\n                position=start_position,\n            )\n            if len(digits) == 0:\n                state.push_error(\"Octal number is invalid\", position=start_position)\n                self.recover_parser(state)\n                return undefined\n            ival = helpers.decode_octal(digits)\n            state.update_integer_stats(ival, sign=sign, position=start_position)\n            n = state.options.make_int(ival, sign, number_format=NUMBER_FORMAT_OCTAL)\n            return n\n        elif c == \"0\" and (buf.peek(1) in [\"b\", \"B\"]):\n            # ----- NEW-STYLE BINARY NUMBERS  0b1101\n            prefix = buf.popstr(2)\n            digits = buf.popwhile(helpers.is_binary_digit)\n            state.push_cond(\n                self.options.binary_numbers,\n                \"Binary literals are not allowed in strict JSON\",\n                prefix + digits,\n                position=start_position,\n            )\n            if len(digits) == 0:\n                state.push_error(\"Binary number is invalid\", position=start_position)\n                self.recover_parser(state)\n                return undefined\n            ival = helpers.decode_binary(digits)\n            state.update_integer_stats(ival, sign=sign, position=start_position)\n            n = state.options.make_int(ival, sign, number_format=NUMBER_FORMAT_BINARY)\n            return n\n        else:\n            # ----- DECIMAL OR LEGACY-OCTAL NUMBER.   123, 0123\n            # General syntax is:  \\d+[\\.\\d+][e[+-]?\\d+]\n            number = buf.popwhile(lambda c: c in \"0123456789.+-eE\")\n            imax = len(number)\n            if imax == 0:\n                state.push_error(\"Missing numeric value\", position=start_position)\n            has_leading_zero = False\n            units_digits = []  # digits making up whole number portion\n            fraction_digits = []  # digits making up fractional portion\n            exponent_digits = []  # digits making up exponent portion (excluding sign)\n            esign = \"+\"  # sign of exponent\n            sigdigits = 0  # number of significant digits (approximate)\n            saw_decimal_point = False\n            saw_exponent = False\n\n            # Break number into parts in a first pass...use a mini state machine\n            in_part = \"units\"\n            for i, c in enumerate(number):\n                if c == \".\":\n                    if in_part != \"units\":\n                        state.push_error(\"Bad number\", number, position=start_position)\n                        self.recover_parser(state)\n                        return undefined\n                    in_part = \"fraction\"\n                    saw_decimal_point = True\n                elif c in \"eE\":\n                    if in_part == \"exponent\":\n                        state.push_error(\"Bad number\", number, position=start_position)\n                        self.recover_parser(state)\n                        return undefined\n                    in_part = \"exponent\"\n                    saw_exponent = True\n                elif c in \"+-\":\n                    if in_part != \"exponent\" or exponent_digits:\n                        state.push_error(\"Bad number\", number, position=start_position)\n                        self.recover_parser(state)\n                        return undefined\n                    esign = c\n                else:  # digit\n                    if in_part == \"units\":\n                        units_digits.append(c)\n                    elif in_part == \"fraction\":\n                        fraction_digits.append(c)\n                    elif in_part == \"exponent\":\n                        exponent_digits.append(c)\n            units_s = \"\".join(units_digits)\n            fraction_s = \"\".join(fraction_digits)\n            exponent_s = \"\".join(exponent_digits)\n\n            # Basic syntax rules checking\n            is_integer = not (saw_decimal_point or saw_exponent)\n\n            if not units_s and not fraction_s:\n                state.push_error(\"Bad number\", number, position=start_position)\n                self.recover_parser(state)\n                return undefined\n\n            if saw_decimal_point and not fraction_s:\n                state.push_cond(\n                    self.options.trailing_decimal_point,\n                    \"Bad number, decimal point must be followed by at least one digit\",\n                    number,\n                    position=start_position,\n                )\n                fraction_s = \"0\"\n\n            if saw_exponent and not exponent_s:\n                state.push_error(\n                    \"Bad number, exponent is missing\", number, position=start_position\n                )\n                self.recover_parser(state)\n                return undefined\n\n            if not units_s:\n                state.push_cond(\n                    self.options.initial_decimal_point,\n                    \"Bad number, decimal point must be preceded by at least one digit\",\n                    number,\n                    position=start_position,\n                )\n                units = \"0\"  # noqa: F841\n            elif len(units_s) > 1 and units_s[0] == \"0\":\n                has_leading_zero = True\n                if self.options.is_forbid_leading_zeros:\n                    state.push_cond(  # noqa: F841\n                        self.options.leading_zeros,\n                        \"Numbers may not have extra leading zeros\",\n                        number,\n                        position=start_position,\n                    )\n                elif self.options.is_warn_leading_zeros:\n                    state.push_cond(  # noqa: F841\n                        self.options.leading_zeros,\n                        \"Numbers may not have leading zeros; interpreting as %s\"\n                        % self.options.leading_zero_radix_as_word,\n                        number,\n                        position=start_position,\n                    )\n\n            # Estimate number of significant digits\n            sigdigits = len((units_s + fraction_s).replace(\"0\", \" \").strip())\n\n            # Handle legacy octal integers.\n            if has_leading_zero and is_integer and self.options.leading_zero_radix == 8:\n                # ----- LEGACY-OCTAL  0123\n                try:\n                    ival = helpers.decode_octal(units_s)\n                except ValueError:\n                    state.push_error(\n                        \"Bad number, not a valid octal value\",\n                        number,\n                        position=start_position,\n                    )\n                    self.recover_parser(state)\n                    return self.options.nan  # undefined\n                state.update_integer_stats(ival, sign=sign, position=start_position)\n                n = state.options.make_int(\n                    ival, sign, number_format=NUMBER_FORMAT_LEGACYOCTAL\n                )\n                return n\n\n            # Determine the exponential part\n            if exponent_s:\n                try:\n                    exponent = int(exponent_s)\n                except ValueError:\n                    state.push_error(\n                        \"Bad number, bad exponent\", number, position=start_position\n                    )\n                    self.recover_parser(state)\n                    return undefined\n                if esign == \"-\":\n                    exponent = -exponent\n            else:\n                exponent = 0\n\n            # Try to make an int/long first.\n            if not saw_decimal_point and exponent >= 0:\n                # ----- A DECIMAL INTEGER\n                ival = int(units_s)\n                if exponent != 0:\n                    ival *= 10**exponent\n                state.update_integer_stats(ival, sign=sign, position=start_position)\n                n = state.options.make_int(ival, sign)\n            else:\n                # ----- A FLOATING-POINT NUMBER\n                try:\n                    if (\n                        exponent < float_minexp\n                        or exponent > float_maxexp\n                        or sigdigits > float_sigdigits\n                    ):\n                        n = state.options.make_decimal(number, sign)\n                    else:\n                        n = state.options.make_float(number, sign)\n                except ValueError as err:\n                    state.push_error(\n                        \"Bad number, %s\" % err.message, number, position=start_position\n                    )\n                    n = undefined\n                else:\n                    state.update_float_stats(n, sign=sign, position=start_position)\n            return n\n\n    def encode_number(self, n, state):\n        \"\"\"Encodes a Python numeric type into a JSON numeric literal.\n\n        The special non-numeric values of float('nan'), float('inf')\n        and float('-inf') are translated into appropriate JSON\n        literals.\n\n        Note that Python complex types are not handled, as there is no\n        ECMAScript equivalent type.\n\n        \"\"\"\n        if isinstance(n, complex):\n            if n.imag:\n                raise JSONEncodeError(\n                    \"Can not encode a complex number that has a non-zero imaginary part\",\n                    n,\n                )\n            n = n.real\n\n        if isinstance(n, json_int):\n            state.append(n.json_format())\n            return\n\n        if isinstance(n, int):\n            state.append(str(n))\n            return\n\n        if decimal and isinstance(n, decimal.Decimal):\n            if n.is_nan():  # Could be 'NaN' or 'sNaN'\n                state.append(\"NaN\")\n            elif n.is_infinite():\n                if n.is_signed():\n                    state.append(\"-Infinity\")\n                else:\n                    state.append(\"Infinity\")\n            else:\n                s = str(n).lower()\n                if \"e\" not in s and \".\" not in s:\n                    s = s + \".0\"\n                state.append(s)\n            return\n\n        global nan, inf, neginf  # noqa\n        if n is nan:\n            state.append(\"NaN\")\n        elif n is inf:\n            state.append(\"Infinity\")\n        elif n is neginf:\n            state.append(\"-Infinity\")\n        elif isinstance(n, float):\n            # Check for non-numbers.\n            # In python nan == inf == -inf, so must use repr() to distinguish\n            reprn = repr(n).lower()\n            if (\"inf\" in reprn and \"-\" in reprn) or n == neginf:\n                state.append(\"-Infinity\")\n            elif \"inf\" in reprn or n is inf:\n                state.append(\"Infinity\")\n            elif \"nan\" in reprn or n is nan:\n                state.append(\"NaN\")\n            else:\n                # A normal float.\n                state.append(repr(n))\n        else:\n            raise TypeError(\n                \"encode_number expected an integral, float, or decimal number type\",\n                type(n),\n            )\n\n    def decode_string(self, state):\n        \"\"\"Intermediate-level decoder for JSON string literals.\n\n        Takes a string and a starting index, and returns a Python\n        string (or unicode string) and the index of the next unparsed\n        character.\n\n        \"\"\"\n        buf = state.buf\n        self.skipws(state)\n        quote = buf.peek()\n        if quote == '\"':\n            pass\n        elif quote == \"'\":\n            state.push_cond(\n                self.options.single_quoted_strings,\n                \"String literals must use double quotation marks in strict JSON\",\n            )\n        else:\n            state.push_error(\"String literal must be properly quoted\")\n            return undefined\n\n        string_position = buf.position\n        buf.skip()\n\n        if self.options.is_forbid_js_string_escapes:\n            escapes = self._escapes_json\n        else:\n            escapes = self._escapes_js\n        ccallowed = not self.options.is_forbid_control_char_in_string\n        chunks = []\n        _append = chunks.append\n\n        # Used to track the last seen high-surrogate character\n        high_surrogate = None\n        highsur_position = None\n\n        # Used to track if errors occured so we don't keep reporting multiples\n        had_lineterm_error = False\n\n        # Start looping character by character until the final quotation mark\n        saw_final_quote = False\n        should_stop = False\n        while not saw_final_quote and not should_stop:\n            if buf.at_end:\n                state.push_error(\n                    \"String literal is not terminated\",\n                    outer_position=string_position,\n                    context=\"String\",\n                )\n                break\n            c = buf.peek()\n\n            # Make sure a high surrogate is immediately followed by a low surrogate\n            if high_surrogate:\n                if 0xDC00 <= ord(c) <= 0xDFFF:\n                    low_surrogate = buf.pop()\n                    try:\n                        uc = helpers.surrogate_pair_as_unicode(\n                            high_surrogate, low_surrogate\n                        )\n                    except ValueError:\n                        state.push_error(\n                            \"Illegal Unicode surrogate pair\",\n                            (high_surrogate, low_surrogate),\n                            position=highsur_position,\n                            outer_position=string_position,\n                            context=\"String\",\n                        )\n                        should_stop = state.should_stop\n                        uc = \"\\ufffd\"  # replacement char\n                    _append(uc)\n                    high_surrogate = None\n                    highsur_position = None\n                    continue  # ==== NEXT CHAR\n                elif buf.peekstr(2) != \"\\\\u\":\n                    state.push_error(\n                        \"High unicode surrogate must be followed by a low surrogate\",\n                        position=highsur_position,\n                        outer_position=string_position,\n                        context=\"String\",\n                    )\n                    should_stop = state.should_stop\n                    _append(\"\\ufffd\")  # replacement char\n                    high_surrogate = None\n                    highsur_position = None\n\n            if c == quote:\n                buf.skip()  # skip over closing quote\n                saw_final_quote = True\n                break\n            elif c == \"\\\\\":\n                # Escaped character\n                escape_position = buf.position\n                buf.skip()  # skip over backslash\n                c = buf.peek()\n                if not c:\n                    state.push_error(\n                        \"Escape in string literal is incomplete\",\n                        position=escape_position,\n                        outer_position=string_position,\n                        context=\"String\",\n                    )\n                    should_stop = state.should_stop\n                    break\n                elif helpers.is_octal_digit(c):\n                    # Handle octal escape codes first so special \\0 doesn't kick in yet.\n                    # Follow Annex B.1.2 of ECMAScript standard.\n                    if \"0\" <= c <= \"3\":\n                        maxdigits = 3\n                    else:\n                        maxdigits = 2\n                    digits = buf.popwhile(helpers.is_octal_digit, maxchars=maxdigits)\n                    n = helpers.decode_octal(digits)\n                    if n == 0:\n                        state.push_cond(\n                            self.options.zero_byte,\n                            \"Zero-byte character (U+0000) in string may not be universally safe\",\n                            \"\\\\\" + digits,\n                            position=escape_position,\n                            outer_position=string_position,\n                            context=\"String\",\n                        )\n                    else:  # n != 0\n                        state.push_cond(\n                            self.options.octal_numbers,\n                            'JSON does not allow octal character escapes other than \"\\\\0\"',\n                            \"\\\\\" + digits,\n                            position=escape_position,\n                            outer_position=string_position,\n                            context=\"String\",\n                        )\n                    should_stop = state.should_stop\n                    if n < 128:\n                        _append(chr(n))\n                    else:\n                        _append(helpers.safe_unichr(n))\n                elif c in escapes:\n                    buf.skip()\n                    _append(escapes[c])\n                elif c == \"u\" or c == \"x\":\n                    buf.skip()\n                    esc_opener = \"\\\\\" + c\n                    esc_closer = \"\"\n                    if c == \"u\":\n                        if buf.peek() == \"{\":\n                            buf.skip()\n                            esc_opener += \"{\"\n                            esc_closer = \"}\"\n                            maxdigits = None\n                            state.push_cond(\n                                self.options.extended_unicode_escapes,\n                                \"JSON strings do not allow \\\\u{...} escapes\",\n                                position=escape_position,\n                                outer_position=string_position,\n                                context=\"String\",\n                            )\n                        else:\n                            maxdigits = 4\n                    else:  # c== 'x'\n                        state.push_cond(\n                            self.options.js_string_escapes,\n                            \"JSON strings may not use the \\\\x hex-escape\",\n                            position=escape_position,\n                            outer_position=string_position,\n                            context=\"String\",\n                        )\n                        should_stop = state.should_stop\n                        maxdigits = 2\n\n                    digits = buf.popwhile(helpers.is_hex_digit, maxchars=maxdigits)\n\n                    if esc_closer:\n                        if buf.peek() != esc_closer:\n                            state.push_error(\n                                \"Unicode escape sequence is missing closing '%s'\"\n                                % esc_closer,\n                                esc_opener + digits,\n                                position=escape_position,\n                                outer_position=string_position,\n                                context=\"String\",\n                            )\n                            should_stop = state.should_stop\n                        else:\n                            buf.skip()\n\n                    esc_sequence = esc_opener + digits + esc_closer\n\n                    if not digits:\n                        state.push_error(\n                            \"numeric character escape sequence is truncated\",\n                            esc_sequence,\n                            position=escape_position,\n                            outer_position=string_position,\n                            context=\"String\",\n                        )\n                        should_stop = state.should_stop\n                        codepoint = 0xFFFD  # replacement char\n                    else:\n                        if maxdigits and len(digits) != maxdigits:\n                            state.push_error(\n                                \"escape sequence has too few hexadecimal digits\",\n                                esc_sequence,\n                                position=escape_position,\n                                outer_position=string_position,\n                                context=\"String\",\n                            )\n                        codepoint = helpers.decode_hex(digits)\n\n                    if codepoint > 0x10FFFF:\n                        state.push_error(\n                            \"Unicode codepoint is beyond U+10FFFF\",\n                            esc_opener + digits + esc_closer,\n                            position=escape_position,\n                            outer_position=string_position,\n                            context=\"String\",\n                        )\n                        codepoint = 0xFFFD  # replacement char\n\n                    if high_surrogate:\n                        # Decode surrogate pair and clear high surrogate\n                        low_surrogate = chr(codepoint)\n                        try:\n                            uc = helpers.surrogate_pair_as_unicode(\n                                high_surrogate, low_surrogate\n                            )\n                        except ValueError:\n                            state.push_error(\n                                \"Illegal Unicode surrogate pair\",\n                                (high_surrogate, low_surrogate),\n                                position=highsur_position,\n                                outer_position=string_position,\n                                context=\"String\",\n                            )\n                            should_stop = state.should_stop\n                            uc = \"\\ufffd\"  # replacement char\n                        _append(uc)\n                        high_surrogate = None\n                        highsur_position = None\n                    elif codepoint < 128:\n                        # ASCII chars always go in as a str\n                        if codepoint == 0:\n                            state.push_cond(\n                                self.options.zero_byte,\n                                \"Zero-byte character (U+0000) in string may not be universally safe\",\n                                position=escape_position,\n                                outer_position=string_position,\n                                context=\"String\",\n                            )\n                            should_stop = state.should_stop\n                        _append(chr(codepoint))\n                    elif 0xD800 <= codepoint <= 0xDBFF:  # high surrogate\n                        high_surrogate = chr(\n                            codepoint\n                        )  # remember until we get to the low surrogate\n                        highsur_position = escape_position.copy()\n                    elif 0xDC00 <= codepoint <= 0xDFFF:  # low surrogate\n                        state.push_error(\n                            \"Low unicode surrogate must be proceeded by a high surrogate\",\n                            position=escape_position,\n                            outer_position=string_position,\n                            context=\"String\",\n                        )\n                        should_stop = state.should_stop\n                        _append(\"\\ufffd\")  # replacement char\n                    else:\n                        # Other chars go in as a unicode char\n                        _append(helpers.safe_unichr(codepoint))\n                else:\n                    # Unknown escape sequence\n                    state.push_cond(\n                        self.options.nonescape_characters,\n                        \"String escape code is not allowed in strict JSON\",\n                        \"\\\\\" + c,\n                        position=escape_position,\n                        outer_position=string_position,\n                        context=\"String\",\n                    )\n                    should_stop = state.should_stop\n                    _append(c)\n                    buf.skip()\n            elif ord(c) <= 0x1F:  # A control character\n                if ord(c) == 0:\n                    state.push_cond(\n                        self.options.zero_byte,\n                        \"Zero-byte character (U+0000) in string may not be universally safe\",\n                        position=buf.position,\n                        outer_position=string_position,\n                        context=\"String\",\n                    )\n                    should_stop = state.should_stop\n                if self.islineterm(c):\n                    if not had_lineterm_error:\n                        state.push_error(\n                            \"Line terminator characters must be escaped inside string literals\",\n                            \"U+%04X\" % ord(c),\n                            position=buf.position,\n                            outer_position=string_position,\n                            context=\"String\",\n                        )\n                        should_stop = state.should_stop\n                        had_lineterm_error = True\n                    _append(c)\n                    buf.skip()\n                elif ccallowed:\n                    _append(c)\n                    buf.skip()\n                else:\n                    state.push_error(\n                        \"Control characters must be escaped inside JSON string literals\",\n                        \"U+%04X\" % ord(c),\n                        position=buf.position,\n                        outer_position=string_position,\n                        context=\"String\",\n                    )\n                    should_stop = state.should_stop\n                    buf.skip()\n            elif 0xD800 <= ord(c) <= 0xDBFF:  # a raw high surrogate\n                high_surrogate = buf.pop()  # remember until we get to the low surrogate\n                highsur_position = buf.position.copy()\n            else:  # A normal character; not an escape sequence or end-quote.\n                # Find a whole sequence of \"safe\" characters so we can append them\n                # all at once rather than one a time, for speed.\n                chunk = buf.popwhile(\n                    lambda c: c not in helpers.unsafe_string_chars and c != quote\n                )\n                if not chunk:\n                    _append(c)\n                    buf.skip()\n                else:\n                    _append(chunk)\n\n        # Check proper string termination\n        if high_surrogate:\n            state.push_error(\n                \"High unicode surrogate must be followed by a low surrogate\",\n                position=highsur_position,\n                outer_position=string_position,\n                context=\"String\",\n            )\n            _append(\"\\ufffd\")  # replacement char\n            high_surrogate = None\n            highsur_position = None\n\n        if not saw_final_quote:\n            state.push_error(\n                \"String literal is not terminated with a quotation mark\",\n                position=buf.position,\n                outer_position=string_position,\n                context=\"String\",\n            )\n\n        if state.should_stop:\n            return undefined\n\n        # Compose the python string and update stats\n        s = \"\".join(chunks)\n        state.update_string_stats(s, position=string_position)\n\n        # Call string hook\n        if self.has_hook(\"decode_string\"):\n            try:\n                s = self.call_hook(\"decode_string\", s, position=string_position)\n            except JSONSkipHook:\n                pass\n            except JSONError as err:\n                state.push_exception(err)\n                s = undefined\n        return s\n\n    def encode_string(self, s, state):\n        \"\"\"Encodes a Python string into a JSON string literal.\"\"\"\n        # Must handle instances of UserString specially in order to be\n        # able to use ord() on it's simulated \"characters\".  Also\n        # convert Python2 'str' types to unicode strings first.\n        import unicodedata\n        import sys\n        import collections\n\n        py2strenc = self.options.py2str_encoding\n        if isinstance(s, collections.UserString):\n\n            def tochar(c):\n                c2 = c.data\n                if py2strenc and not isinstance(c2, str):\n                    return c2.decode(py2strenc)\n                else:\n                    return c2\n        elif py2strenc and not isinstance(s, str):\n            s = s.decode(py2strenc)\n            tochar = None\n        else:\n            # Could use \"lambda c:c\", but that is too slow.  So we set to None\n            # and use an explicit if test inside the loop.\n            tochar = None\n\n        chunks = []\n        chunks.append('\"')\n        revesc = self._rev_escapes\n        optrevesc = self._optional_rev_escapes\n        asciiencodable = self._asciiencodable\n        always_escape = state.options.always_escape_chars\n        encunicode = state.escape_unicode_test\n        i = 0\n        imax = len(s)\n        while i < imax:\n            if tochar:\n                c = tochar(s[i])\n            else:\n                c = s[i]\n            cord = ord(c)\n            if (\n                cord < 256\n                and asciiencodable[cord]\n                and isinstance(encunicode, bool)\n                and not (always_escape and c in always_escape)\n            ):\n                # Contiguous runs of plain old printable ASCII can be copied\n                # directly to the JSON output without worry (unless the user\n                # has supplied a custom is-encodable function).\n                j = i\n                i += 1\n                while i < imax:\n                    if tochar:\n                        c = tochar(s[i])\n                    else:\n                        c = s[i]\n                    cord = ord(c)\n                    if (\n                        cord < 256\n                        and asciiencodable[cord]\n                        and not (always_escape and c in always_escape)\n                    ):\n                        i += 1\n                    else:\n                        break\n                chunks.append(str(s[j:i]))\n            elif c in revesc:\n                # Has a shortcut escape sequence, like \"\\n\"\n                chunks.append(revesc[c])\n                i += 1\n            elif cord <= 0x1F:\n                # Always unicode escape ASCII-control characters\n                chunks.append(r\"\\u%04x\" % cord)\n                i += 1\n            elif 0xD800 <= cord <= 0xDFFF:\n                # A raw surrogate character!\n                # This should ONLY happen in \"narrow\" Python builds\n                # where (sys.maxunicode == 65535) as Python itself\n                # uses UTF-16.  But for \"wide\" Python builds, a raw\n                # surrogate should never happen.\n                handled_raw_surrogates = False\n                if (\n                    sys.maxunicode == 0xFFFF\n                    and 0xD800 <= cord <= 0xDBFF\n                    and (i + 1) < imax\n                ):\n                    # In a NARROW Python, output surrogate pair as-is\n                    hsurrogate = cord\n                    i += 1\n                    if tochar:\n                        c = tochar(s[i])\n                    else:\n                        c = s[i]\n                    cord = ord(c)\n                    i += 1\n                    if 0xDC00 <= cord <= 0xDFFF:\n                        lsurrogate = cord\n                        chunks.append(r\"\\u%04x\\u%04x\" % (hsurrogate, lsurrogate))\n                        handled_raw_surrogates = True\n                if not handled_raw_surrogates:\n                    cname = \"U+%04X\" % cord\n                    raise JSONEncodeError(\n                        \"can not include or escape a Unicode surrogate character\", cname\n                    )\n            elif cord <= 0xFFFF:\n                # Other BMP Unicode character\n                if always_escape and c in always_escape:\n                    doesc = True\n                elif unicodedata.category(c) in [\"Cc\", \"Cf\", \"Zl\", \"Zp\"]:\n                    doesc = True\n                elif callable(encunicode):\n                    doesc = encunicode(c)\n                else:\n                    doesc = encunicode\n\n                if doesc:\n                    if c in optrevesc:\n                        chunks.append(optrevesc[c])\n                    else:\n                        chunks.append(r\"\\u%04x\" % cord)\n                else:\n                    chunks.append(c)\n                i += 1\n            else:  # ord(c) >= 0x10000\n                # Non-BMP Unicode\n                if always_escape and c in always_escape:\n                    doesc = True\n                elif unicodedata.category(c) in [\"Cc\", \"Cf\", \"Zl\", \"Zp\"]:\n                    doesc = True\n                elif callable(encunicode):\n                    doesc = encunicode(c)\n                else:\n                    doesc = encunicode\n\n                if doesc:\n                    for surrogate in helpers.unicode_as_surrogate_pair(c):\n                        chunks.append(r\"\\u%04x\" % ord(surrogate))\n                else:\n                    chunks.append(c)\n                i += 1\n\n        chunks.append('\"')\n        state.append(\"\".join(chunks))\n\n    def decode_identifier(self, state, identifier_as_string=False):\n        \"\"\"Decodes an identifier/keyword.\"\"\"\n        buf = state.buf\n        self.skipws(state)\n        start_position = buf.position\n        obj = None\n\n        kw = buf.pop_identifier()\n\n        if not kw:\n            state.push_error(\"Expected an identifier\", position=start_position)\n        elif kw == \"null\":\n            obj = None\n            state.stats.num_nulls += 1\n        elif kw == \"true\":\n            obj = True\n            state.stats.num_bools += 1\n        elif kw == \"false\":\n            obj = False\n            state.stats.num_bools += 1\n        elif kw == \"undefined\":\n            state.push_cond(\n                self.options.undefined_values,\n                \"Strict JSON does not allow the 'undefined' keyword\",\n                kw,\n                position=start_position,\n            )\n            obj = undefined\n            state.stats.num_undefineds += 1\n        elif kw == \"NaN\" or kw == \"Infinity\":\n            state.push_cond(\n                self.options.non_numbers,\n                \"%s literals are not allowed in strict JSON\" % kw,\n                kw,\n                position=start_position,\n            )\n            if self.has_hook(\"decode_float\"):\n                try:\n                    val = self.call_hook(\"decode_float\", kw, position=start_position)\n                except JSONSkipHook:\n                    pass\n                except JSONError as err:\n                    state.push_exception(err)\n                    return undefined\n                else:\n                    return val\n            elif self.has_hook(\"decode_number\"):\n                try:\n                    val = self.call_hook(\"decode_number\", kw, position=start_position)\n                except JSONSkipHook:\n                    pass\n                except JSONError as err:\n                    state.push_exception(err)\n                    return undefined\n                else:\n                    return val\n            if kw == \"NaN\":\n                state.stats.num_nans += 1\n                obj = state.options.nan\n            else:\n                state.stats.num_infinities += 1\n                obj = state.options.inf\n        else:\n            # Convert unknown identifiers into strings\n            if identifier_as_string:\n                if kw in helpers.javascript_reserved_words:\n                    state.push_warning(\n                        \"Identifier is a JavaScript reserved word\",\n                        kw,\n                        position=start_position,\n                    )\n                state.push_cond(\n                    self.options.identifier_keys,\n                    \"JSON does not allow identifiers to be used as strings\",\n                    kw,\n                    position=start_position,\n                )\n                state.stats.num_identifiers += 1\n                obj = self.decode_javascript_identifier(kw)\n            else:\n                state.push_error(\"Unknown identifier\", kw, position=start_position)\n                obj = undefined\n                state.stats.num_identifiers += 1\n        return obj\n\n    def skip_comment(self, state):\n        \"\"\"Skips an ECMAScript comment, either // or /* style.\n\n        The contents of the comment are returned as a string, as well\n        as the index of the character immediately after the comment.\n\n        \"\"\"\n        buf = state.buf\n        uniws = self.options.unicode_whitespace\n        s = buf.peekstr(2)\n        if s != \"//\" and s != \"/*\":\n            return None\n        state.push_cond(\n            self.options.comments, \"Comments are not allowed in strict JSON\"\n        )\n        start_position = buf.position\n        buf.skip(2)\n        multiline = s == \"/*\"\n        saw_close = False\n        while not buf.at_end:\n            if multiline:\n                if buf.peekstr(2) == \"*/\":\n                    buf.skip(2)\n                    saw_close = True\n                    break\n                elif buf.peekstr(2) == \"/*\":\n                    state.push_error(\n                        \"Multiline /* */ comments may not nest\",\n                        outer_position=start_position,\n                        context=\"Comment\",\n                    )\n            else:\n                if buf.at_eol(uniws):\n                    buf.skip_to_next_line(uniws)\n                    saw_close = True\n                    break\n            buf.pop()\n\n        if not saw_close and multiline:\n            state.push_error(\n                \"Comment was never terminated\",\n                outer_position=start_position,\n                context=\"Comment\",\n            )\n        state.stats.num_comments += 1\n\n    def skipws_nocomments(self, state):\n        \"\"\"Skips whitespace (will not allow comments).\"\"\"\n        return state.buf.skipws(not self.options.is_forbid_unicode_whitespace)\n\n    def skipws(self, state):\n        \"\"\"Skips all whitespace, including comments and unicode whitespace\n\n        Takes a string and a starting index, and returns the index of the\n        next non-whitespace character.\n\n        If the 'skip_comments' behavior is True and not running in\n        strict JSON mode, then comments will be skipped over just like\n        whitespace.\n\n        \"\"\"\n        buf = state.buf\n        uniws = not self.options.unicode_whitespace\n        while not buf.at_end:\n            c = buf.peekstr(2)\n            if c == \"/*\" or c == \"//\":\n                cmt = self.skip_comment(state)  # noqa: F841\n            elif buf.at_ws(uniws):\n                buf.skipws(uniws)\n            else:\n                break\n\n    def decode_composite(self, state):\n        \"\"\"Intermediate-level JSON decoder for composite literal types (array and object).\"\"\"\n        if state.should_stop:\n            return None\n        buf = state.buf\n        self.skipws(state)\n        opener = buf.peek()\n        if opener not in \"{[\":\n            state.push_error('Composite data must start with \"[\" or \"{\"')\n            return None\n        start_position = buf.position\n        buf.skip()\n        if opener == \"[\":\n            isdict = False\n            closer = \"]\"\n            obj = []\n        else:\n            isdict = True\n            closer = \"}\"\n            if state.options.sort_keys == SORT_PRESERVE and _OrderedDict:\n                obj = _OrderedDict()\n            else:\n                obj = {}\n        num_items = 0\n        self.skipws(state)\n\n        c = buf.peek()\n        if c == closer:\n            # empty composite\n            buf.skip()\n            done = True\n        else:\n            saw_value = False  # set to false at beginning and after commas\n            done = False\n            while not done and not buf.at_end and not state.should_stop:\n                self.skipws(state)\n                c = buf.peek()\n                if c == \"\":\n                    break  # will report error futher down because done==False\n                elif c == \",\":\n                    if not saw_value:\n                        # no preceding value, an elided (omitted) element\n                        if isdict:\n                            state.push_error(\n                                \"Can not omit elements of an object (dictionary)\",\n                                outer_position=start_position,\n                                context=\"Object\",\n                            )\n                        else:\n                            state.push_cond(\n                                self.options.omitted_array_elements,\n                                \"Can not omit elements of an array (list)\",\n                                outer_position=start_position,\n                                context=\"Array\",\n                            )\n                            obj.append(undefined)\n                            if state.stats:\n                                state.stats.num_undefineds += 1\n                    buf.skip()  # skip over comma\n                    saw_value = False\n                    continue\n                elif c == closer:\n                    if not saw_value:\n                        if isdict:\n                            state.push_cond(\n                                self.options.trailing_comma,\n                                \"Strict JSON does not allow a final comma in an object (dictionary) literal\",\n                                outer_position=start_position,\n                                context=\"Object\",\n                            )\n                        else:\n                            state.push_cond(\n                                self.options.trailing_comma,\n                                \"Strict JSON does not allow a final comma in an array (list) literal\",\n                                outer_position=start_position,\n                                context=\"Array\",\n                            )\n                    buf.skip()  # skip over closer\n                    done = True\n                    break\n                elif c in \"]}\":\n                    if isdict:\n                        cdesc = \"Object\"\n                    else:\n                        cdesc = \"Array\"\n                    state.push_error(\n                        \"Expected a '%c' but saw '%c'\" % (closer, c),\n                        outer_position=start_position,\n                        context=cdesc,\n                    )\n                    done = True\n                    break\n\n                if state.should_stop:\n                    break\n\n                # Decode the item/value\n                value_position = buf.position\n\n                if isdict:\n                    val = self.decodeobj(state, identifier_as_string=True)\n                else:\n                    val = self.decodeobj(state, identifier_as_string=False)\n\n                if val is syntax_error:\n                    recover_c = self.recover_parser(state)\n                    if recover_c not in \":\":\n                        continue\n\n                if state.should_stop:\n                    break\n\n                if saw_value:\n                    # Two values without a separating comma\n                    if isdict:\n                        cdesc = \"Object\"\n                    else:\n                        cdesc = \"Array\"\n                    state.push_error(\n                        \"Values must be separated by a comma\",\n                        position=value_position,\n                        outer_position=start_position,\n                        context=cdesc,\n                    )\n\n                saw_value = True\n                self.skipws(state)\n\n                if state.should_stop:\n                    break\n\n                if isdict:\n                    skip_item = False\n                    key = val  # Ref 11.1.5\n                    key_position = value_position\n                    if not helpers.isstringtype(key):\n                        if helpers.isnumbertype(key):\n                            state.push_cond(\n                                self.options.nonstring_keys,\n                                \"JSON only permits string literals as object properties (keys)\",\n                                position=key_position,\n                                outer_position=start_position,\n                                context=\"Object\",\n                            )\n                        else:\n                            state.push_error(\n                                \"Object properties (keys) must be string literals, numbers, or identifiers\",\n                                position=key_position,\n                                outer_position=start_position,\n                                context=\"Object\",\n                            )\n                            skip_item = True\n                    c = buf.peek()\n                    if c != \":\":\n                        state.push_error(\n                            'Missing value for object property, expected \":\"',\n                            position=value_position,\n                            outer_position=start_position,\n                            context=\"Object\",\n                        )\n                    buf.skip()  # skip over colon\n                    self.skipws(state)\n\n                    rval = self.decodeobj(state)\n                    self.skipws(state)\n                    if not skip_item:\n                        if key in obj:\n                            state.push_cond(\n                                self.options.duplicate_keys,\n                                \"Object contains duplicate key\",\n                                key,\n                                position=key_position,\n                                outer_position=start_position,\n                                context=\"Object\",\n                            )\n                        if key == \"\":\n                            state.push_cond(\n                                self.options.non_portable,\n                                'Using an empty string \"\" as an object key may not be portable',\n                                position=key_position,\n                                outer_position=start_position,\n                                context=\"Object\",\n                            )\n                        obj[key] = rval\n                        num_items += 1\n                else:  # islist\n                    obj.append(val)\n                    num_items += 1\n            # end while\n\n        if state.stats:\n            if isdict:\n                state.stats.max_items_in_object = max(\n                    state.stats.max_items_in_object, num_items\n                )\n            else:\n                state.stats.max_items_in_array = max(\n                    state.stats.max_items_in_array, num_items\n                )\n\n        if state.should_stop:\n            return obj\n\n        # Make sure composite value is properly terminated\n        if not done:\n            if isdict:\n                state.push_error(\n                    \"Object literal (dictionary) is not terminated\",\n                    outer_position=start_position,\n                    context=\"Object\",\n                )\n            else:\n                state.push_error(\n                    \"Array literal (list) is not terminated\",\n                    outer_position=start_position,\n                    context=\"Array\",\n                )\n\n        # Update stats and run hooks\n        if isdict:\n            state.stats.num_objects += 1\n            if self.has_hook(\"decode_object\"):\n                try:\n                    obj = self.call_hook(\"decode_object\", obj, position=start_position)\n                except JSONSkipHook:\n                    pass\n                except JSONError as err:\n                    state.push_exception(err)\n                    obj = undefined\n        else:\n            state.stats.num_arrays += 1\n            if self.has_hook(\"decode_array\"):\n                try:\n                    obj = self.call_hook(\"decode_array\", obj, position=start_position)\n                except JSONSkipHook:\n                    pass\n                except JSONError as err:\n                    state.push_exception(err)\n                    obj = undefined\n        return obj\n\n    def decode_javascript_identifier(self, name):\n        \"\"\"Convert a JavaScript identifier into a Python string object.\n\n        This method can be overriden by a subclass to redefine how JavaScript\n        identifiers are turned into Python objects.  By default this just\n        converts them into strings.\n\n        \"\"\"\n        return name\n\n    def decodeobj(self, state, identifier_as_string=False, at_document_start=False):\n        \"\"\"Intermediate-level JSON decoder.\n\n        Takes a string and a starting index, and returns a two-tuple consting\n        of a Python object and the index of the next unparsed character.\n\n        If there is no value at all (empty string, etc), then None is\n        returned instead of a tuple.\n\n        \"\"\"\n        buf = state.buf\n        obj = None\n        self.skipws(state)\n        if buf.at_end:\n            state.push_error(\"Unexpected end of input\")\n\n        c = buf.peek()\n        if c in \"{[\":\n            state.cur_depth += 1\n            try:\n                state.update_depth_stats()\n                obj = self.decode_composite(state)\n            finally:\n                state.cur_depth -= 1\n        else:\n            if at_document_start:\n                state.push_cond(\n                    self.options.any_type_at_start,\n                    \"JSON document must start with an object or array type only\",\n                )\n            if c in self._string_quotes:\n                obj = self.decode_string(state)\n            elif c.isdigit() or c in \".+-\":\n                obj = self.decode_number(state)\n            elif c.isalpha() or c in \"_$\":\n                obj = self.decode_identifier(\n                    state, identifier_as_string=identifier_as_string\n                )\n            else:\n                state.push_error(\"Can not decode value starting with character %r\" % c)\n                buf.skip()\n                self.recover_parser(state)\n                obj = syntax_error\n        return obj\n\n    def decode(self, txt, encoding=None, return_errors=False, return_stats=False):\n        \"\"\"Decodes a JSON-encoded string into a Python object.\n\n        The 'return_errors' parameter controls what happens if the\n        input JSON has errors in it.\n\n            * False: the first error will be raised as a Python\n              exception. If there are no errors then the corresponding\n              Python object will be returned.\n\n            * True: the return value is always a 2-tuple: (object, error_list)\n\n        \"\"\"\n        import sys\n\n        state = decode_state(options=self.options)\n\n        # Prepare the input\n        state.set_input(txt, encoding=encoding)\n\n        # Do the decoding\n        if not state.has_errors:\n            self.__sanity_check_start(state)\n\n        if not state.has_errors:\n            try:\n                self._do_decode(state)  # DECODE!\n            except JSONException as err:\n                state.push_exception(err)\n            except (\n                Exception\n            ) as err:  # Mainly here to catch maximum recursion depth exceeded\n                e2 = sys.exc_info()\n                raise\n                newerr = JSONDecodeError(\n                    \"An unexpected failure occured\",\n                    severity=\"fatal\",\n                    position=state.buf.position,\n                )\n                newerr.__cause__ = err\n                newerr.__traceback__ = e2[2]\n                state.push_exception(newerr)\n\n        if return_stats and state.buf:\n            state.stats.num_excess_whitespace = state.buf.num_ws_skipped\n            state.stats.total_chars = state.buf.position.char_position\n\n        # Handle the errors\n        result_type = _namedtuple(\"json_results\", [\"object\", \"errors\", \"stats\"])\n\n        if return_errors:\n            if return_stats:\n                return result_type(state.obj, state.errors, state.stats)\n            else:\n                return result_type(state.obj, state.errors, None)\n        else:\n            # Don't cause warnings to raise an error\n            errors = [err for err in state.errors if err.severity in (\"fatal\", \"error\")]\n            if errors:\n                raise errors[0]\n            if return_stats:\n                return result_type(state.obj, None, state.stats)\n            else:\n                return state.obj\n\n    def __sanity_check_start(self, state):\n        \"\"\"Check that the document seems sane by looking at the first couple characters.\n\n        Check that the decoding seems sane.  Per RFC 4627 section 3:\n            \"Since the first two characters of a JSON text will\n             always be ASCII characters [RFC0020], ...\"\n        [WAS removed from RFC 7158, but still valid via the grammar.]\n\n        This check is probably not necessary, but it allows us to\n        raise a suitably descriptive error rather than an obscure\n        syntax error later on.\n\n        Note that the RFC requirements of two ASCII characters seems\n        to be an incorrect statement as a JSON string literal may have\n        as it's first character any unicode character.  Thus the first\n        two characters will always be ASCII, unless the first\n        character is a quotation mark.  And in non-strict mode we can\n        also have a few other characters too.\n\n        \"\"\"\n        is_sane = True\n        unitxt = state.buf.peekstr(2)\n        if len(unitxt) >= 2:\n            first, second = unitxt[:2]\n            if first in self._string_quotes:\n                pass  # second can be anything inside string literal\n            else:\n                if (\n                    (ord(first) < 0x20 or ord(first) > 0x7F)\n                    or (ord(second) < 0x20 or ord(second) > 0x7F)\n                ) and (not self.isws(first) and not self.isws(second)):\n                    # Found non-printable ascii, must check unicode\n                    # categories to see if the character is legal.\n                    # Only whitespace, line and paragraph separators,\n                    # and format control chars are legal here.\n                    import unicodedata\n\n                    catfirst = unicodedata.category(str(first))\n                    catsecond = unicodedata.category(str(second))\n                    if catfirst not in (\"Zs\", \"Zl\", \"Zp\", \"Cf\") or catsecond not in (\n                        \"Zs\",\n                        \"Zl\",\n                        \"Zp\",\n                        \"Cf\",\n                    ):\n                        state.push_fatal(\n                            \"The input is gibberish, is the Unicode encoding correct?\"\n                        )\n        return is_sane\n\n    def _do_decode(self, state):\n        \"\"\"This is the internal function that does the JSON decoding.\n\n        Called by the decode() method, after it has performed any Unicode decoding, etc.\n        \"\"\"\n        buf = state.buf\n        self.skipws(state)\n\n        if buf.at_end:\n            state.push_error(\"No value to decode\")\n        else:\n            if state.options.decimal_context:\n                dec_ctx = decimal.localcontext(state.options.decimal_context)\n            else:\n                dec_ctx = _dummy_context_manager\n\n            with dec_ctx:\n                state.obj = self.decodeobj(state, at_document_start=True)\n\n            if not state.should_stop:\n                # Make sure there's nothing at the end\n                self.skipws(state)\n                if not buf.at_end:\n                    state.push_error(\"Unexpected text after end of JSON value\")\n\n    def _classify_for_encoding(self, obj):\n        import datetime\n\n        c = \"other\"\n        if obj is None:\n            c = \"null\"\n        elif obj is undefined:\n            c = \"undefined\"\n        elif isinstance(obj, bool):\n            c = \"bool\"\n        elif isinstance(obj, (int, float, complex)) or (\n            decimal and isinstance(obj, decimal.Decimal)\n        ):\n            c = \"number\"\n        elif isinstance(obj, str) or helpers.isstringtype(obj):\n            c = \"string\"\n        else:\n            if isinstance(obj, dict):\n                c = \"dict\"\n            elif (\n                isinstance(obj, tuple)\n                and hasattr(obj, \"_asdict\")\n                and callable(obj._asdict)\n            ):\n                # Have a named tuple\n                enc_nt = self.options.encode_namedtuple_as_object\n                if enc_nt and (enc_nt is True or (callable(enc_nt) and enc_nt(obj))):\n                    c = \"namedtuple\"\n                else:\n                    c = \"sequence\"\n            elif isinstance(obj, (list, tuple, set, frozenset)):\n                c = \"sequence\"\n            elif hasattr(obj, \"iterkeys\") or (\n                hasattr(obj, \"__getitem__\") and hasattr(obj, \"keys\")\n            ):\n                c = \"dict\"\n            elif isinstance(obj, datetime.datetime):\n                # Check datetime before date because it is a subclass!\n                c = \"datetime\"\n            elif isinstance(obj, datetime.date):\n                c = \"date\"\n            elif isinstance(obj, datetime.time):\n                c = \"time\"\n            elif isinstance(obj, datetime.timedelta):\n                c = \"timedelta\"\n            elif _py_major >= 3 and isinstance(obj, (bytes, bytearray)):\n                c = \"bytes\"\n            elif _py_major >= 3 and isinstance(obj, memoryview):\n                c = \"memoryview\"\n            elif _enum is not None and isinstance(obj, _enum):\n                c = \"enum\"\n            else:\n                c = \"other\"\n        return c\n\n    def encode(self, obj, encoding=None):\n        \"\"\"Encodes the Python object into a JSON string representation.\n\n        This method will first attempt to encode an object by seeing\n        if it has a json_equivalent() method.  If so than it will\n        call that method and then recursively attempt to encode\n        the object resulting from that call.\n\n        Next it will attempt to determine if the object is a native\n        type or acts like a squence or dictionary.  If so it will\n        encode that object directly.\n\n        Finally, if no other strategy for encoding the object of that\n        type exists, it will call the encode_default() method.  That\n        method currently raises an error, but it could be overridden\n        by subclasses to provide a hook for extending the types which\n        can be encoded.\n\n        \"\"\"\n        import sys\n        import codecs\n\n        # Make a fresh encoding state\n        state = encode_state(self.options)\n\n        # Find the codec to use. CodecInfo will be in 'cdk' and name in 'encoding'.\n        #\n        # Also set the state's 'escape_unicode_test' property which is used to\n        # determine what characters to \\u-escape.\n        if encoding is None:\n            cdk = None\n        elif isinstance(encoding, codecs.CodecInfo):\n            cdk = encoding\n            encoding = cdk.name\n        else:\n            cdk = helpers.lookup_codec(encoding)\n            if not cdk:\n                raise JSONEncodeError(\n                    \"no codec available for character encoding\", encoding\n                )\n\n        if self.options.escape_unicode and callable(self.options.escape_unicode):  # noqa: E712\n            # User-supplied repertoire test function\n            state.escape_unicode_test = self.options.escape_unicode\n        else:\n            if (\n                self.options.escape_unicode is True\n                or not cdk\n                or cdk.name.lower() == \"ascii\"\n            ):\n                # ASCII, ISO8859-1, or and Unknown codec -- \\u escape anything not ASCII\n                state.escape_unicode_test = lambda c: ord(c) >= 0x80\n            elif cdk.name == \"iso8859-1\":\n                state.escape_unicode_test = lambda c: ord(c) >= 0x100\n            elif cdk and cdk.name.lower().startswith(\"utf\"):\n                # All UTF-x encodings can do the whole Unicode repertoire, so\n                # do nothing special.\n                state.escape_unicode_test = False\n            else:\n                # An unusual codec.  We need to test every character\n                # to see if it is in the codec's repertoire to determine\n                # if we should \\u escape that character.\n                enc_func = cdk.encode\n\n                def escape_unicode_hardway(c):\n                    try:\n                        enc_func(c)\n                    except UnicodeEncodeError:\n                        return True\n                    else:\n                        return False\n\n                state.escape_unicode_test = escape_unicode_hardway\n\n        # Make sure the encoding is not degenerate: it can encode the minimal\n        # number of characters needed by the JSON syntax rules.\n        if encoding is not None:\n            try:\n                output, nchars = cdk.encode(JSON.json_syntax_characters)\n            except UnicodeError:\n                raise JSONEncodeError(\n                    \"Output encoding %s is not sufficient to encode JSON\" % cdk.name\n                )\n\n        # Do the JSON encoding!\n        self._do_encode(obj, state)\n        if not self.options.encode_compactly:\n            state.append(\"\\n\")\n        unitxt = state.combine()\n\n        # Do the final Unicode encoding\n        if encoding is None:\n            output = unitxt\n        else:\n            try:\n                output, nchars = cdk.encode(unitxt)\n            except UnicodeEncodeError as err:\n                # Re-raise as a JSONDecodeError\n                e2 = sys.exc_info()\n                newerr = JSONEncodeError(\"a Unicode encoding error occurred\")\n                # Simulate Python 3's: \"raise X from Y\" exception chaining\n                newerr.__cause__ = err\n                newerr.__traceback__ = e2[2]\n                raise newerr\n        return output\n\n    def _do_encode(self, obj, state):\n        \"\"\"Internal encode function.\"\"\"\n        obj_classification = self._classify_for_encoding(obj)\n\n        if self.has_hook(\"encode_value\"):\n            orig_obj = obj\n            try:\n                obj = self.call_hook(\"encode_value\", obj)\n            except JSONSkipHook:\n                pass\n\n            if obj is not orig_obj:\n                prev_cls = obj_classification\n                obj_classification = self._classify_for_encoding(obj)\n                if obj_classification != prev_cls:\n                    # Got a different type of object, re-encode again\n                    self._do_encode(obj, state)\n                    return\n\n        if hasattr(obj, \"json_equivalent\"):\n            success = self.encode_equivalent(obj, state)\n            if success:\n                return\n\n        if obj_classification == \"null\":\n            self.encode_null(state)\n        elif obj_classification == \"undefined\":\n            if not self.options.is_forbid_undefined_values:\n                self.encode_undefined(state)\n            else:\n                raise JSONEncodeError('strict JSON does not permit \"undefined\" values')\n        elif obj_classification == \"bool\":\n            self.encode_boolean(obj, state)\n        elif obj_classification == \"number\":\n            try:\n                self.encode_number(obj, state)\n            except JSONEncodeError as err1:\n                # Bad number, probably a complex with non-zero imaginary part.\n                # Let the default encoders take a shot at encoding.\n                try:\n                    self.try_encode_default(obj, state)\n                except Exception:\n                    # Default handlers couldn't deal with it, re-raise original exception.\n                    raise err1\n        elif obj_classification == \"string\":\n            self.encode_string(obj, state)\n        elif obj_classification == \"enum\":  # Python 3.4 enum.Enum\n            self.encode_enum(obj, state)\n        elif obj_classification == \"datetime\":  # Python datetime.datetime\n            self.encode_datetime(obj, state)\n        elif obj_classification == \"date\":  # Python datetime.date\n            self.encode_date(obj, state)\n        elif obj_classification == \"time\":  # Python datetime.time\n            self.encode_time(obj, state)\n        elif obj_classification == \"timedelta\":  # Python datetime.time\n            self.encode_timedelta(obj, state)\n        else:\n            # Anything left is probably composite, or an unconvertable type.\n            self.encode_composite(obj, state)\n\n    def encode_enum(self, val, state):\n        \"\"\"Encode a Python Enum value into JSON.\"\"\"\n        eas = self.options.encode_enum_as\n        if eas == \"qname\":\n            self.encode_string(str(val), state)\n        elif eas == \"value\":\n            self._do_encode(val.value, state)\n        else:  # eas == 'name'\n            self.encode_string(val.name, state)\n\n    def encode_date(self, dt, state):\n        fmt = self.options.date_format\n        if not fmt or fmt == \"iso\":\n            fmt = \"%Y-%m-%d\"\n        self.encode_string(dt.strftime(fmt), state)\n\n    def encode_datetime(self, dt, state):\n        fmt = self.options.datetime_format\n        is_iso = not fmt or fmt == \"iso\"\n        if is_iso:\n            if dt.microsecond == 0:\n                fmt = \"%Y-%m-%dT%H:%M:%S%z\"\n            else:\n                fmt = \"%Y-%m-%dT%H:%M:%S.%f%z\"\n        s = dt.strftime(fmt)\n        if is_iso and s.endswith(\"-00:00\") or s.endswith(\"+00:00\"):\n            s = s[:-6] + \"Z\"  # Change UTC to use 'Z' notation\n        self.encode_string(s, state)\n\n    def encode_time(self, dt, state):\n        fmt = self.options.datetime_format\n        is_iso = not fmt or fmt == \"iso\"\n        if is_iso:\n            if dt.microsecond == 0:\n                fmt = \"T%H:%M:%S%z\"\n            else:\n                fmt = \"T%H:%M:%S.%f%z\"\n        s = dt.strftime(fmt)\n        if is_iso and s.endswith(\"-00:00\") or s.endswith(\"+00:00\"):\n            s = s[:-6] + \"Z\"  # Change UTC to use 'Z' notation\n        self.encode_string(s, state)\n\n    def encode_timedelta(self, td, state):\n        fmt = self.options.timedelta_format\n        if not fmt or fmt == \"iso\":\n            s = helpers.format_timedelta_iso(td)\n        elif fmt == \"hms\":\n            s = str(td)\n        else:\n            raise ValueError(\"Unknown timedelta_format %r\" % fmt)\n        self.encode_string(s, state)\n\n    def encode_composite(self, obj, state, obj_classification=None):\n        \"\"\"Encodes just composite objects: dictionaries, lists, or sequences.\n\n        Basically handles any python type for which iter() can create\n        an iterator object.\n\n        This method is not intended to be called directly.  Use the\n        encode() method instead.\n\n        \"\"\"\n        if not obj_classification:\n            obj_classification = self._classify_for_encoding(obj)\n\n        # Convert namedtuples to dictionaries\n        if obj_classification == \"namedtuple\":\n            obj = obj._asdict()\n            obj_classification = \"dict\"\n\n        # Convert 'unsigned byte' memory views into plain bytes\n        if obj_classification == \"memoryview\" and obj.format == \"B\":\n            obj = obj.tobytes()\n            obj_classification = \"bytes\"\n\n        # Run hooks\n        hook_name = None\n        if obj_classification == \"dict\":\n            hook_name = \"encode_dict\"\n        elif obj_classification == \"sequence\":\n            hook_name = \"encode_sequence\"\n        elif obj_classification == \"bytes\":\n            hook_name = \"encode_bytes\"\n\n        if self.has_hook(hook_name):\n            try:\n                new_obj = self.call_hook(hook_name, obj)\n            except JSONSkipHook:\n                pass\n            else:\n                if new_obj is not obj:\n                    obj = new_obj\n                    prev_cls = obj_classification\n                    obj_classification = self._classify_for_encoding(obj)\n                    if obj_classification != prev_cls:\n                        # Transformed to a different kind of object, call\n                        # back to the general encode() method.\n                        self._do_encode(obj, state)\n                        return\n                    # Else, fall through\n\n        # At his point we have decided to do with an object or an array\n        isdict = obj_classification == \"dict\"\n\n        # Get iterator\n        it = None\n        if isdict and hasattr(obj, \"iterkeys\"):\n            try:\n                it = iter(obj.keys())\n            except AttributeError:\n                pass\n        else:\n            try:\n                it = iter(obj)\n            except TypeError:\n                pass\n\n        # Convert each member to JSON\n        if it is not None:\n            # Try to get length, but don't fail if we can't\n            try:\n                numitems = len(obj)\n            except TypeError:\n                numitems = 0\n\n            # Output the opening bracket or brace\n            compactly = self.options.encode_compactly\n            if not compactly:\n                indent0 = self.options.indentation_for_level(state.nest_level)\n                indent = self.options.indentation_for_level(state.nest_level + 1)\n\n            spaces_after_opener = \"\"\n            if isdict:\n                opener = \"{\"\n                closer = \"}\"\n                if compactly:\n                    dictcolon = \":\"\n                else:\n                    dictcolon = \" : \"\n            else:\n                opener = \"[\"\n                closer = \"]\"\n            if not compactly:\n                # opener = opener + ' '\n                spaces_after_opener = self.options.spaces_to_next_indent_level(\n                    subtract=len(opener)\n                )\n\n            state.append(opener)\n            state.append(spaces_after_opener)\n\n            # Now iterate through all the items and collect their representations\n            parts = []  # Collects each of the members\n            part_keys = []  # For dictionary key sorting, tuples (key,index)\n\n            try:  # while not StopIteration\n                part_idx = 0\n                while True:\n                    obj2 = next(it)\n                    part_idx += 1  # Note, will start counting at 1\n                    if obj2 is obj:\n                        raise JSONEncodeError(\n                            \"trying to encode an infinite sequence\", obj\n                        )\n                    if isdict:\n                        obj3 = obj[obj2]\n                        # Dictionary key is in obj2 and value in obj3.\n\n                        # Let any hooks transform the key.\n                        if self.has_hook(\"encode_value\"):\n                            try:\n                                newobj = self.call_hook(\"encode_value\", obj2)\n                            except JSONSkipHook:\n                                pass\n                            else:\n                                obj2 = newobj\n                        if self.has_hook(\"encode_dict_key\"):\n                            try:\n                                newkey = self.call_hook(\"encode_dict_key\", obj2)\n                            except JSONSkipHook:\n                                pass\n                            else:\n                                obj2 = newkey\n\n                        # Check JSON restrictions on key types\n                        if not helpers.isstringtype(obj2):\n                            if helpers.isnumbertype(obj2):\n                                if not self.options.is_allow_nonstring_keys:\n                                    raise JSONEncodeError(\n                                        \"object properties (dictionary keys) must be strings in strict JSON\",\n                                        obj2,\n                                    )\n                            else:\n                                raise JSONEncodeError(\n                                    \"object properties (dictionary keys) can only be strings or numbers in ECMAScript\",\n                                    obj2,\n                                )\n                        part_keys.append((obj2, part_idx - 1))\n\n                    # Encode this item in the sequence and put into item_chunks\n                    substate = state.make_substate()\n                    self._do_encode(obj2, substate)\n                    if isdict:\n                        substate.append(dictcolon)\n                        substate2 = substate.make_substate()\n                        self._do_encode(obj3, substate2)\n                        substate.join_substate(substate2)\n                    parts.append(substate)\n                # Next item iteration\n            except StopIteration:\n                pass\n\n            # Sort dictionary keys\n            if isdict:\n                srt = self.options.sort_keys\n                if srt == SORT_PRESERVE:\n                    if _OrderedDict and isinstance(obj, _OrderedDict):\n                        srt = SORT_NONE  # Will keep order\n                    else:\n                        srt = SORT_SMART\n\n                if not srt or srt in (SORT_NONE, SORT_PRESERVE):\n                    srt = None\n                elif callable(srt):\n                    part_keys.sort(key=(lambda t: (srt(t[0]), t[0])))\n                elif srt == SORT_SMART:\n                    part_keys.sort(key=(lambda t: (smart_sort_transform(t[0]), t[0])))\n                elif srt == SORT_ALPHA_CI:\n                    part_keys.sort(key=(lambda t: (str(t[0]).upper(), t[0])))\n                elif srt or srt == SORT_ALPHA:\n                    part_keys.sort(key=(lambda t: str(t[0])))\n                # Now make parts match the new sort order\n                if srt is not None:\n                    parts = [parts[pk[1]] for pk in part_keys]\n\n            if compactly:\n                sep = \",\"\n            elif len(parts) <= self.options.max_items_per_line:\n                sep = \", \"\n            else:\n                # state.append(spaces_after_opener)\n                state.append(\"\\n\" + indent)\n                sep = \",\\n\" + indent\n\n            for pnum, substate in enumerate(parts):\n                if pnum > 0:\n                    state.append(sep)\n                state.join_substate(substate)\n\n            if not compactly:\n                if numitems > self.options.max_items_per_line:\n                    state.append(\"\\n\" + indent0)\n                else:\n                    state.append(\" \")\n            state.append(closer)  # final '}' or ']'\n        else:  # Can't create an iterator for the object\n            self.try_encode_default(obj, state)\n\n    def encode_equivalent(self, obj, state):\n        \"\"\"This method is used to encode user-defined class objects.\n\n        The object being encoded should have a json_equivalent()\n        method defined which returns another equivalent object which\n        is easily JSON-encoded.  If the object in question has no\n        json_equivalent() method available then None is returned\n        instead of a string so that the encoding will attempt the next\n        strategy.\n\n        If a caller wishes to disable the calling of json_equivalent()\n        methods, then subclass this class and override this method\n        to just return None.\n\n        \"\"\"\n        if hasattr(obj, \"json_equivalent\") and callable(\n            getattr(obj, \"json_equivalent\")\n        ):\n            obj2 = obj.json_equivalent()\n            if obj2 is obj:\n                # Try to prevent careless infinite recursion\n                raise JSONEncodeError(\n                    \"object has a json_equivalent() method that returns itself\", obj\n                )\n            self._do_encode(obj2, state)\n            return True\n        else:\n            return False\n\n    def try_encode_default(self, obj, state):\n        orig_obj = obj\n        if self.has_hook(\"encode_default\"):\n            try:\n                obj = self.call_hook(\"encode_default\", obj)\n            except JSONSkipHook:\n                pass\n            else:\n                if obj is not orig_obj:\n                    # Hook made a transformation, re-encode it\n                    return self._do_encode(obj, state)\n\n        # End of the road.\n        raise JSONEncodeError(\"can not encode object into a JSON representation\", obj)\n\n\n# ------------------------------\n\n\ndef encode(obj, encoding=None, **kwargs):\n    r\"\"\"Encodes a Python object into a JSON-encoded string.\n\n    * 'strict'    (Boolean, default False)\n\n        If 'strict' is set to True, then only strictly-conforming JSON\n        output will be produced.  Note that this means that some types\n        of values may not be convertable and will result in a\n        JSONEncodeError exception.\n\n    * 'compactly'    (Boolean, default True)\n\n        If 'compactly' is set to True, then the resulting string will\n        have all extraneous white space removed; if False then the\n        string will be \"pretty printed\" with whitespace and\n        indentation added to make it more readable.\n\n    * 'encode_namedtuple_as_object'  (Boolean or callable, default True)\n\n        If True, then objects of type namedtuple, or subclasses of\n        'tuple' that have an _asdict() method, will be encoded as an\n        object rather than an array.\n        If can also be a predicate function that takes a namedtuple\n        object as an argument and returns True or False.\n\n    * 'indent_amount'   (Integer, default 2)\n\n        The number of spaces to output for each indentation level.\n        If 'compactly' is True then indentation is ignored.\n\n    * 'indent_limit'    (Integer or None, default None)\n\n        If not None, then this is the maximum limit of indentation\n        levels, after which further indentation spaces are not\n        inserted.  If None, then there is no limit.\n\n    CONCERNING CHARACTER ENCODING:\n\n    The 'encoding' argument should be one of:\n\n        * None - The return will be a Unicode string.\n        * encoding_name - A string which is the name of a known\n              encoding, such as 'UTF-8' or 'ascii'.\n        * codec - A CodecInfo object, such as as found by codecs.lookup().\n              This allows you to use a custom codec as well as those\n              built into Python.\n\n    If an encoding is given (either by name or by codec), then the\n    returned value will be a byte array (Python 3), or a 'str' string\n    (Python 2); which represents the raw set of bytes.  Otherwise,\n    if encoding is None, then the returned value will be a Unicode\n    string.\n\n    The 'escape_unicode' argument is used to determine which characters\n    in string literals must be \\u escaped.  Should be one of:\n\n        * True  -- All non-ASCII characters are always \\u escaped.\n        * False -- Try to insert actual Unicode characters if possible.\n        * function -- A user-supplied function that accepts a single\n             unicode character and returns True or False; where True\n             means to \\u escape that character.\n\n    Regardless of escape_unicode, certain characters will always be\n    \\u escaped. Additionaly any characters not in the output encoding\n    repertoire for the encoding codec will be \\u escaped as well.\n\n    \"\"\"\n    # Do the JSON encoding\n    j = JSON(**kwargs)\n    output = j.encode(obj, encoding)\n    return output\n\n\ndef decode(txt, encoding=None, **kwargs):\n    \"\"\"Decodes a JSON-encoded string into a Python object.\n\n    == Optional arguments ==\n\n    * 'encoding'  (string, default None)\n\n       This argument provides a hint regarding the character encoding\n       that the input text is assumed to be in (if it is not already a\n       unicode string type).\n\n       If set to None then autodetection of the encoding is attempted\n       (see discussion above). Otherwise this argument should be the\n       name of a registered codec (see the standard 'codecs' module).\n\n    * 'strict'    (Boolean, default False)\n\n        If 'strict' is set to True, then those strings that are not\n        entirely strictly conforming to JSON will result in a\n        JSONDecodeError exception.\n\n    * 'return_errors'    (Boolean, default False)\n\n        Controls the return value from this function. If False, then\n        only the Python equivalent object is returned on success, or\n        an error will be raised as an exception.\n\n        If True then a 2-tuple is returned: (object, error_list). The\n        error_list will be an empty list [] if the decoding was\n        successful, otherwise it will be a list of all the errors\n        encountered.  Note that it is possible for an object to be\n        returned even if errors were encountered.\n\n    * 'return_stats'    (Boolean, default False)\n\n        Controls whether statistics about the decoded JSON document\n        are returns (and instance of decode_statistics).\n\n        If True, then the stats object will be added to the end of the\n        tuple returned.  If return_errors is also set then a 3-tuple\n        is returned, otherwise a 2-tuple is returned.\n\n    * 'write_errors'    (Boolean OR File-like object, default False)\n\n        Controls what to do with errors.\n\n        - If False, then the first decoding error is raised as an exception.\n        - If True, then errors will be printed out to sys.stderr.\n        - If a File-like object, then errors will be printed to that file.\n\n        The write_errors and return_errors arguments can be set\n        independently.\n\n    * 'filename_for_errors'   (string or None)\n\n        Provides a filename to be used when writting error messages.\n\n    * 'allow_xxx', 'warn_xxx', and 'forbid_xxx'    (Booleans)\n\n        These arguments allow for fine-adjustments to be made to the\n        'strict' argument, by allowing or forbidding specific\n        syntaxes.\n\n        There are many of these arguments, named by replacing the\n        \"xxx\" with any number of possible behavior names (See the JSON\n        class for more details).\n\n        Each of these will allow (or forbid) the specific behavior,\n        after the evaluation of the 'strict' argument.  For example,\n        if strict=True then by also passing 'allow_comments=True' then\n        comments will be allowed.  If strict=False then\n        forbid_comments=True will allow everything except comments.\n\n    Unicode decoding:\n    -----------------\n    The input string can be either a python string or a python unicode\n    string (or a byte array in Python 3).  If it is already a unicode\n    string, then it is assumed that no character set decoding is\n    required.\n\n    However, if you pass in a non-Unicode text string (a Python 2\n    'str' type or a Python 3 'bytes' or 'bytearray') then an attempt\n    will be made to auto-detect and decode the character encoding.\n    This will be successful if the input was encoded in any of UTF-8,\n    UTF-16 (BE or LE), or UTF-32 (BE or LE), and of course plain ASCII\n    works too.\n\n    Note though that if you know the character encoding, then you\n    should convert to a unicode string yourself, or pass it the name\n    of the 'encoding' to avoid the guessing made by the auto\n    detection, as with\n\n        python_object = demjson.decode( input_bytes, encoding='utf8' )\n\n    Callback hooks:\n    ---------------\n    You may supply callback hooks by using the hook name as the\n    named argument, such as:\n        decode_float=decimal.Decimal\n\n    See the hooks documentation on the JSON.set_hook() method.\n\n    \"\"\"\n    import sys\n\n    # Initialize the JSON object\n    return_errors = False\n    return_stats = False\n    write_errors = False\n    filename_for_errors = None\n    write_stats = False\n\n    kwargs = kwargs.copy()\n\n    todel = []\n    for kw, val in list(kwargs.items()):\n        if kw == \"return_errors\":\n            return_errors = bool(val)\n            todel.append(kw)\n        elif kw == \"return_stats\":\n            return_stats = bool(val)\n            todel.append(kw)\n        elif kw == \"write_errors\":\n            write_errors = val\n            todel.append(kw)\n        elif kw == \"filename_for_errors\":\n            filename_for_errors = val\n            todel.append(kw)\n        elif kw == \"write_stats\":\n            write_stats = val\n            todel.append(kw)\n    # next keyword argument\n    for kw in todel:\n        del kwargs[kw]\n\n    j = JSON(**kwargs)\n\n    # Now do the actual JSON decoding\n    result = j.decode(\n        txt,\n        encoding=encoding,\n        return_errors=(return_errors or write_errors),\n        return_stats=(return_stats or write_stats),\n    )\n\n    if write_errors:\n        import sys\n\n        if write_errors is True:\n            write_errors = sys.stderr\n        for err in result.errors:\n            write_errors.write(\n                err.pretty_description(filename=filename_for_errors) + \"\\n\"\n            )\n\n    if write_stats:\n        import sys\n\n        if write_stats is True:\n            write_stats = sys.stderr\n        if result.stats:\n            write_stats.write(\"%s----- Begin JSON statistics\\n\" % filename_for_errors)\n            write_stats.write(result.stats.pretty_description(prefix=\"   | \"))\n            write_stats.write(\"%s----- End of JSON statistics\\n\" % filename_for_errors)\n    return result\n\n\ndef encode_to_file(filename, obj, encoding=\"utf-8\", overwrite=False, **kwargs):\n    \"\"\"Encodes a Python object into JSON and writes into the given file.\n\n    If no encoding is given, then UTF-8 will be used.\n\n    See the encode() function for a description of other possible options.\n\n    If the file already exists and the 'overwrite' option is not set\n    to True, then the existing file will not be overwritten.  (Note,\n    there is a subtle race condition in the check so there are\n    possible conditions in which a file may be overwritten)\n\n    \"\"\"\n    import os\n    import errno\n\n    if not encoding:\n        encoding = \"utf-8\"\n\n    if not isinstance(filename, str) or not filename:\n        raise TypeError(\"Expected a file name\")\n\n    if not overwrite and os.path.exists(filename):\n        raise IOError(errno.EEXIST, \"File exists: %r\" % filename)\n\n    jsondata = encode(obj, encoding=encoding, **kwargs)\n\n    try:\n        fp = open(filename, \"wb\")\n    except Exception:\n        raise\n    else:\n        try:\n            fp.write(jsondata)\n        finally:\n            fp.close()\n\n\ndef decode_file(filename, encoding=None, **kwargs):\n    \"\"\"Decodes JSON found in the given file.\n\n    See the decode() function for a description of other possible options.\n\n    \"\"\"\n    if isinstance(filename, str):\n        try:\n            fp = open(filename, \"rb\")\n        except Exception:\n            raise\n        else:\n            try:\n                jsondata = fp.read()\n            finally:\n                fp.close()\n    else:\n        raise TypeError(\"Expected a file name\")\n    return decode(jsondata, encoding=encoding, **kwargs)\n\n\n# ======================================================================\n\n\nclass jsonlint(object):\n    \"\"\"This class contains most of the logic for the \"jsonlint\" command.\n\n    You generally create an instance of this class, to defined the\n    program's environment, and then call the main() method.  A simple\n    wrapper to turn this into a script might be:\n\n        import sys, demjson\n        if __name__ == '__main__':\n            lint = demjson.jsonlint( sys.argv[0] )\n            return lint.main( sys.argv[1:] )\n\n    \"\"\"\n\n    _jsonlint_usage = r\"\"\"Usage: %(program_name)s [<options> ...] [--] inputfile.json ...\n\nWith no input filename, or \"-\", it will read from standard input.\n\nThe return status will be 0 if the file is conforming JSON (per the\nRFC 7159 specification), or non-zero otherwise.\n\nGENERAL OPTIONS:\n\n -v | --verbose    Show details of lint checking\n -q | --quiet      Don't show any output (except for reformatting)\n\nSTRICTNESS OPTIONS (WARNINGS AND ERRORS):\n\n -W | --tolerant   Be tolerant, but warn about non-conformance (default)\n -s | --strict     Be strict in what is considered conforming JSON\n -S | --nonstrict  Be tolerant in what is considered conforming JSON\n\n --allow=...      -\\\n --warn=...         |-- These options let you pick specific behaviors.\n --forbid=...     -/      Use --help-behaviors for more\n\nSTATISTICS OPTIONS:\n\n --stats       Show statistics about JSON document\n\nREFORMATTING OPTIONS:\n\n -f | --format     Reformat the JSON text (if conforming) to stdout\n -F | --format-compactly\n        Reformat the JSON simlar to -f, but do so compactly by\n        removing all unnecessary whitespace\n\n -o filename | --output filename\n        The filename to which reformatted JSON is to be written.\n        Without this option the standard output is used.\n\n --[no-]keep-format   Try to preserve numeric radix, e.g., hex, octal, etc.\n --html-safe          Escape characters that are not safe to embed in HTML/XML.\n\n --sort <kind>     How to sort object/dictionary keys, <kind> is one of:\n%(sort_options_help)s\n\n --indent tabs | <nnn>   Number of spaces to use per indentation level,\n                         or use tab characters if \"tabs\" given.\n\nUNICODE OPTIONS:\n\n -e codec | --encoding=codec     Set both input and output encodings\n --input-encoding=codec          Set the input encoding\n --output-encoding=codec         Set the output encoding\n\n    These options set the character encoding codec (e.g., \"ascii\",\n    \"utf-8\", \"utf-16\").  The -e will set both the input and output\n    encodings to the same thing.  The output encoding is used when\n    reformatting with the -f or -F options.\n\n    Unless set, the input encoding is guessed and the output\n    encoding will be \"utf-8\".\n\nOTHER OPTIONS:\n\n --recursion-limit=nnn     Set the Python recursion limit to number\n --leading-zero-radix=8|10 The radix to use for numbers with leading\n                           zeros. 8=octal, 10=decimal.\n\nREFORMATTING / PRETTY-PRINTING:\n\n    When reformatting JSON with -f or -F, output is only produced if\n    the input passed validation.  By default the reformatted JSON will\n    be written to standard output, unless the -o option was given.\n\n    The default output codec is UTF-8, unless an encoding option is\n    provided.  Any Unicode characters will be output as literal\n    characters if the encoding permits, otherwise they will be\n    \\u-escaped.  You can use \"--output-encoding ascii\" to force all\n    Unicode characters to be escaped.\n\nMORE INFORMATION:\n\n    Use '%(program_name)s --version [-v]' to see versioning information.\n    Use '%(program_name)s --copyright' to see author and copyright details.\n    Use '%(program_name)s [-W|-s|-S] --help-behaviors' for help on specific checks.\n\n    %(program_name)s is distributed as part of the \"demjson\" Python module.\n    See %(homepage)s\n\"\"\"\n    SUCCESS_FAIL = \"E\"\n    SUCCESS_WARNING = \"W\"\n    SUCCESS_OK = \"OK\"\n\n    def __init__(self, program_name=\"jsonlint\", stdin=None, stdout=None, stderr=None):\n        \"\"\"Create an instance of a \"jsonlint\" program.\n\n        You can optionally pass options to define the program's environment:\n\n          * program_name  - the name of the program, usually sys.argv[0]\n          * stdin   - the file object to use for input, default sys.stdin\n          * stdout  - the file object to use for output, default sys.stdout\n          * stderr  - the file object to use for error output, default sys.stderr\n\n        After creating an instance, you typically call the main() method.\n\n        \"\"\"\n        import os\n        import sys\n\n        self.program_path = program_name\n        self.program_name = os.path.basename(program_name)\n        if stdin:\n            self.stdin = stdin\n        else:\n            self.stdin = sys.stdin\n\n        if stdout:\n            self.stdout = stdout\n        else:\n            self.stdout = sys.stdout\n\n        if stderr:\n            self.stderr = stderr\n        else:\n            self.stderr = sys.stderr\n\n    @property\n    def usage(self):\n        \"\"\"A multi-line string containing the program usage instructions.\"\"\"\n        sorthelp = \"\\n\".join(\n            [\n                \"          %12s - %s\" % (sm, sd)\n                for sm, sd in sorted(sorting_methods.items())\n                if sm != SORT_NONE\n            ]\n        )\n        return self._jsonlint_usage % {\n            \"program_name\": self.program_name,\n            \"homepage\": __homepage__,\n            \"sort_options_help\": sorthelp,\n        }\n\n    def _lintcheck_data(\n        self,\n        jsondata,\n        verbose_fp=None,\n        reformat=False,\n        show_stats=False,\n        input_encoding=None,\n        output_encoding=None,\n        escape_unicode=True,\n        pfx=\"\",\n        jsonopts=None,\n    ):\n        global decode, encode  # noqa\n        success = self.SUCCESS_FAIL\n        reformatted = None\n        if show_stats:\n            stats_fp = verbose_fp\n        else:\n            stats_fp = None\n        try:\n            results = decode(\n                jsondata,\n                encoding=input_encoding,\n                return_errors=True,\n                return_stats=True,\n                write_errors=verbose_fp,\n                write_stats=stats_fp,\n                filename_for_errors=pfx,\n                json_options=jsonopts,\n            )\n        except JSONError as err:\n            success = self.SUCCESS_FAIL\n            if verbose_fp:\n                verbose_fp.write(\"%s%s\\n\" % (pfx, err.pretty_description()))\n        except Exception as err:\n            success = self.SUCCESS_FAIL\n            if verbose_fp:\n                verbose_fp.write(\"%s%s\\n\" % (pfx, str(err)))\n        else:\n            errors = [\n                err for err in results.errors if err.severity in (\"fatal\", \"error\")\n            ]\n            warnings = [err for err in results.errors if err.severity in (\"warning\",)]\n            if errors:\n                success = self.SUCCESS_FAIL\n            elif warnings:\n                success = self.SUCCESS_WARNING\n            else:\n                success = self.SUCCESS_OK\n\n            if reformat:\n                encopts = jsonopts.copy()\n                encopts.strictness = STRICTNESS_TOLERANT\n                if reformat == \"compactly\":\n                    encopts.encode_compactly = True\n                else:\n                    encopts.encode_compactly = False\n\n                reformatted = encode(\n                    results.object, encoding=output_encoding, json_options=encopts\n                )\n\n        return (success, reformatted)\n\n    def _lintcheck(\n        self,\n        filename,\n        output_filename,\n        verbose=False,\n        reformat=False,\n        show_stats=False,\n        input_encoding=None,\n        output_encoding=None,\n        escape_unicode=True,\n        jsonopts=None,\n    ):\n        import sys\n\n        verbose_fp = None\n\n        if not filename or filename == \"-\":\n            pfx = \"<stdin>: \"\n            jsondata = self.stdin.read()\n            if verbose:\n                verbose_fp = self.stderr\n        else:\n            pfx = \"%s: \" % filename\n            try:\n                fp = open(filename, \"rb\")\n                jsondata = fp.read()\n                fp.close()\n            except IOError as err:\n                self.stderr.write(\"%s: %s\\n\" % (pfx, str(err)))\n                return self.SUCCESS_FAIL\n            if verbose:\n                verbose_fp = self.stdout\n\n        success, reformatted = self._lintcheck_data(\n            jsondata,\n            verbose_fp=verbose_fp,\n            reformat=reformat,\n            show_stats=show_stats,\n            input_encoding=input_encoding,\n            output_encoding=output_encoding,\n            pfx=pfx,\n            jsonopts=jsonopts,\n        )\n\n        if success != self.SUCCESS_FAIL and reformat:\n            if output_filename:\n                try:\n                    fp = open(output_filename, \"wb\")\n                    fp.write(reformatted)\n                except IOError as err:\n                    self.stderr.write(\"%s: %s\\n\" % (pfx, str(err)))\n                    success = False\n            else:\n                if hasattr(\n                    sys.stdout, \"buffer\"\n                ):  # To write binary data rather than strings\n                    self.stdout.buffer.write(reformatted)\n                else:\n                    self.stdout.write(reformatted)\n        elif success == self.SUCCESS_OK and verbose_fp:\n            verbose_fp.write(\"%sok\\n\" % pfx)\n        elif success == self.SUCCESS_WARNING and verbose_fp:\n            verbose_fp.write(\"%sok, with warnings\\n\" % pfx)\n        elif verbose_fp:\n            verbose_fp.write(\"%shas errors\\n\" % pfx)\n\n        return success\n\n    def main(self, argv):\n        \"\"\"The main routine for program \"jsonlint\".\n\n        Should be called with sys.argv[1:] as its sole argument.\n\n        Note sys.argv[0] which normally contains the program name\n        should not be passed to main(); instead this class itself\n        is initialized with sys.argv[0].\n\n        Use \"--help\" for usage syntax, or consult the 'usage' member.\n\n        \"\"\"\n        import sys\n        import getopt\n        import unicodedata\n\n        recursion_limit = None\n        success = True\n        verbose = \"auto\"  # one of 'auto', True, or False\n        reformat = False\n        show_stats = False\n        output_filename = None\n        input_encoding = None\n        output_encoding = \"utf-8\"\n\n        kwoptions = {  # Will be used to initialize json_options\n            \"sort_keys\": SORT_SMART,\n            \"strict\": STRICTNESS_WARN,\n            \"keep_format\": True,\n            \"decimal_context\": 100,\n        }\n\n        try:\n            opts, args = getopt.getopt(\n                argv,\n                \"vqfFe:o:sSW\",\n                [\n                    \"verbose\",\n                    \"quiet\",\n                    \"format\",\n                    \"format-compactly\",\n                    \"stats\",\n                    \"output\",\n                    \"strict\",\n                    \"nonstrict\",\n                    \"warn\",\n                    \"html-safe\",\n                    \"xml-safe\",\n                    \"encoding=\",\n                    \"input-encoding=\",\n                    \"output-encoding=\",\n                    \"sort=\",\n                    \"recursion-limit=\",\n                    \"leading-zero-radix=\",\n                    \"keep-format\",\n                    \"no-keep-format\",\n                    \"indent=\",\n                    \"indent-amount=\",\n                    \"indent-limit=\",\n                    \"indent-tab-width=\",\n                    \"max-items-per-line=\",\n                    \"allow=\",\n                    \"warn=\",\n                    \"forbid=\",\n                    \"deny=\",\n                    \"help\",\n                    \"help-behaviors\",\n                    \"version\",\n                    \"copyright\",\n                ],\n            )\n        except getopt.GetoptError as err:\n            self.stderr.write(\n                'Error: %s.  Use \"%s --help\" for usage information.\\n'\n                % (err.msg, self.program_name)\n            )\n            return 1\n\n        # Set verbose before looking at any other options\n        for opt, val in opts:\n            if opt in (\"-v\", \"--verbose\"):\n                verbose = True\n\n        # Process all options\n        for opt, val in opts:\n            if opt in (\"-h\", \"--help\"):\n                self.stdout.write(self.usage)\n                return 0\n            elif opt == \"--help-behaviors\":\n                self.stdout.write(\n                    \"\"\"\nBEHAVIOR OPTIONS:\n\nThese set of options let you control which checks are to be performed.\nThey may be turned on or off by listing them as arguments to one of\nthe options --allow, --warn, or --forbid ; for example:\n\n    %(program_name)s --allow comments,hex-numbers --forbid duplicate-keys\n\n\"\"\"\n                    % {\"program_name\": self.program_name}\n                )\n                self.stdout.write(\n                    \"The default shown is for %s mode\\n\\n\" % kwoptions[\"strict\"]\n                )\n                self.stdout.write(\n                    \"%-7s %-25s %s\\n\" % (\"Default\", \"Behavior_name\", \"Description\")\n                )\n                self.stdout.write(\"-\" * 7 + \" \" + \"-\" * 25 + \" \" + \"-\" * 50 + \"\\n\")\n                j = json_options(**kwoptions)\n                for behavior in sorted(j.all_behaviors):\n                    v = j.get_behavior(behavior)\n                    desc = j.describe_behavior(behavior)\n                    self.stdout.write(\n                        \"%-7s %-25s %s\\n\"\n                        % (v.lower(), behavior.replace(\"_\", \"-\"), desc)\n                    )\n                return 0\n            elif opt == \"--version\":\n                self.stdout.write(\n                    \"%s (%s) version %s (%s)\\n\"\n                    % (self.program_name, __name__, __version__, __date__)\n                )\n                if verbose is True:\n                    self.stdout.write(\"demjson from %r\\n\" % (__file__,))\n                if verbose is True:\n                    self.stdout.write(\n                        \"Python version: %s\\n\" % (sys.version.replace(\"\\n\", \" \"),)\n                    )\n                    self.stdout.write(\"This python implementation supports:\\n\")\n                    self.stdout.write(\"  * Max unicode: U+%X\\n\" % (sys.maxunicode,))\n                    self.stdout.write(\n                        \"  * Unicode version: %s\\n\" % (unicodedata.unidata_version,)\n                    )\n                    self.stdout.write(\n                        \"  * Floating-point significant digits: %d\\n\"\n                        % (float_sigdigits,)\n                    )\n                    self.stdout.write(\n                        \"  * Floating-point max 10^exponent: %d\\n\" % (float_maxexp,)\n                    )\n                    if str(0.0) == str(-0.0):\n                        szero = \"No\"\n                    else:\n                        szero = \"Yes\"\n                    self.stdout.write(\n                        \"  * Floating-point has signed-zeros: %s\\n\" % (szero,)\n                    )\n                    if decimal:\n                        has_dec = \"Yes\"\n                    else:\n                        has_dec = \"No\"\n                    self.stdout.write(\n                        \"  * Decimal (bigfloat) support: %s\\n\" % (has_dec,)\n                    )\n                return 0\n            elif opt == \"--copyright\":\n                self.stdout.write(\n                    '%s is distributed as part of the \"demjson\" python package.\\n'\n                    % (self.program_name,)\n                )\n                self.stdout.write(\"See %s\\n\\n\\n\" % (__homepage__,))\n                self.stdout.write(__credits__)\n                return 0\n            elif opt in (\"-v\", \"--verbose\"):\n                verbose = True\n            elif opt in (\"-q\", \"--quiet\"):\n                verbose = False\n            elif opt in (\"-s\", \"--strict\"):\n                kwoptions[\"strict\"] = STRICTNESS_STRICT\n                kwoptions[\"keep_format\"] = False\n            elif opt in (\"-S\", \"--nonstrict\"):\n                kwoptions[\"strict\"] = STRICTNESS_TOLERANT\n            elif opt in (\"-W\", \"--tolerant\"):\n                kwoptions[\"strict\"] = STRICTNESS_WARN\n            elif opt in (\"-f\", \"--format\"):\n                reformat = True\n                kwoptions[\"encode_compactly\"] = False\n            elif opt in (\"-F\", \"--format-compactly\"):\n                kwoptions[\"encode_compactly\"] = True\n                reformat = \"compactly\"\n            elif opt in (\"--stats\",):\n                show_stats = True\n            elif opt in (\"-o\", \"--output\"):\n                output_filename = val\n            elif opt in (\"-e\", \"--encoding\"):\n                input_encoding = val\n                output_encoding = val\n                escape_unicode = False  # noqa\n            elif opt in (\"--output-encoding\"):\n                output_encoding = val\n                escape_unicode = False  # noqa\n            elif opt in (\"--input-encoding\"):\n                input_encoding = val\n            elif opt in (\"--html-safe\", \"--xml-safe\"):\n                kwoptions[\"html_safe\"] = True\n            elif opt in (\"--allow\", \"--warn\", \"--forbid\"):\n                action = opt[2:]\n                if action in kwoptions:\n                    kwoptions[action] += \",\" + val\n                else:\n                    kwoptions[action] = val\n            elif opt in (\"--keep-format\",):\n                kwoptions[\"keep_format\"] = True\n            elif opt in (\"--no-keep-format\",):\n                kwoptions[\"keep_format\"] = False\n            elif opt == \"--leading-zero-radix\":\n                kwoptions[\"leading_zero_radix\"] = val\n            elif opt in (\"--indent\", \"--indent-amount\"):\n                if val in (\"tab\", \"tabs\"):\n                    kwoptions[\"indent_amount\"] = 8\n                    kwoptions[\"indent_tab_width\"] = 8\n                else:\n                    try:\n                        kwoptions[\"indent_amount\"] = int(val)\n                    except ValueError:\n                        self.stderr.write(\"Indentation amount must be a number\\n\")\n                        return 1\n            elif opt == \"indent-tab-width\":\n                try:\n                    kwoptions[\"indent_tab_width\"] = int(val)\n                except ValueError:\n                    self.stderr.write(\"Indentation tab width must be a number\\n\")\n                    return 1\n            elif opt == \"--max-items-per-line\":\n                try:\n                    kwoptions[\"max_items_per_line\"] = int(val)\n                except ValueError:\n                    self.stderr.write(\"Max items per line must be a number\\n\")\n                    return 1\n            elif opt == \"--sort\":\n                val = val.lower()\n                if val == \"alpha\":\n                    kwoptions[\"sort_keys\"] = SORT_ALPHA\n                elif val == \"alpha_ci\":\n                    kwoptions[\"sort_keys\"] = SORT_ALPHA_CI\n                elif val == \"preserve\":\n                    kwoptions[\"sort_keys\"] = SORT_PRESERVE\n                else:\n                    kwoptions[\"sort_keys\"] = SORT_SMART\n            elif opt == \"--recursion-limit\":\n                try:\n                    recursion_limit = int(val)\n                except ValueError:\n                    self.stderr.write(\"Recursion limit must be a number: %r\\n\" % val)\n                    return 1\n                else:\n                    max_limit = 100000\n                    old_limit = sys.getrecursionlimit()\n                    if recursion_limit > max_limit:\n                        self.stderr.write(\n                            \"Recursion limit must be a number between %d and %d\\n\"\n                            % (old_limit, max_limit)\n                        )\n                        return 1\n                    elif recursion_limit > old_limit:\n                        sys.setrecursionlimit(recursion_limit)\n            else:\n                self.stderr.write(\"Unknown option %r\\n\" % opt)\n                return 1\n\n        # Make the JSON options\n        kwoptions[\"decimal_context\"] = 100\n        jsonopts = json_options(**kwoptions)\n\n        # Now decode each file...\n        if not args:\n            args = [None]\n\n        for fn in args:\n            try:\n                rc = self._lintcheck(\n                    fn,\n                    output_filename=output_filename,\n                    verbose=verbose,\n                    reformat=reformat,\n                    show_stats=show_stats,\n                    input_encoding=input_encoding,\n                    output_encoding=output_encoding,\n                    jsonopts=jsonopts,\n                )\n                if rc != self.SUCCESS_OK:\n                    # Warnings or errors should result in failure.  If\n                    # checking multiple files, do not change a\n                    # previous error back to ok.\n                    success = False\n            except KeyboardInterrupt:\n                sys.stderr.write(\"\\njsonlint interrupted!\\n\")\n                sys.exit(1)\n\n        if not success:\n            return 1\n        return 0\n\n\n# end file\n"
  },
  {
    "path": "akshare/utils/func.py",
    "content": "# !/usr/bin/env python\n\"\"\"\nDate: 2025/3/10 18:00\nDesc: 通用帮助函数\n\"\"\"\n\nimport math\nimport random\nimport time\nfrom typing import List, Dict\n\nimport pandas as pd\n\nfrom akshare.utils.request import request_with_retry\nfrom akshare.utils.tqdm import get_tqdm\n\n\ndef fetch_paginated_data(url: str, base_params: Dict, timeout: int = 15):\n    \"\"\"\n    东方财富-分页获取数据并合并结果\n    https://quote.eastmoney.com/f1.html?newcode=0.000001\n    :param url: 股票代码\n    :type url: str\n    :param base_params: 基础请求参数\n    :type base_params: dict\n    :param timeout: 请求超时时间\n    :type timeout: str\n    :return: 合并后的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    # 复制参数以避免修改原始参数\n    params = base_params.copy()\n    # 获取第一页数据，用于确定分页信息\n    r = request_with_retry(url, params=params, timeout=timeout)\n    data_json = r.json()\n    # 计算分页信息\n    per_page_num = len(data_json[\"data\"][\"diff\"])\n    total_page = math.ceil(data_json[\"data\"][\"total\"] / per_page_num)\n    # 存储所有页面数据\n    temp_list = []\n    # 添加第一页数据\n    temp_list.append(pd.DataFrame(data_json[\"data\"][\"diff\"]))\n    # 获取进度条\n    tqdm = get_tqdm()\n    # 获取剩余页面数据\n    for page in tqdm(range(2, total_page + 1), leave=False):\n        params.update({\"pn\": page})\n        # 添加随机延迟，避免请求过于频繁\n        time.sleep(random.uniform(0.5, 1.5))\n        r = request_with_retry(url, params=params, timeout=timeout)\n        data_json = r.json()\n        inner_temp_df = pd.DataFrame(data_json[\"data\"][\"diff\"])\n        temp_list.append(inner_temp_df)\n    # 合并所有数据\n    temp_df = pd.concat(temp_list, ignore_index=True)\n    temp_df[\"f3\"] = pd.to_numeric(temp_df[\"f3\"], errors=\"coerce\")\n    temp_df.sort_values(by=[\"f3\"], ascending=False, inplace=True, ignore_index=True)\n    temp_df.reset_index(inplace=True)\n    temp_df[\"index\"] = temp_df[\"index\"].astype(int) + 1\n    return temp_df\n\n\ndef set_df_columns(df: pd.DataFrame, cols: List[str]) -> pd.DataFrame:\n    \"\"\"\n    设置 pandas.DataFrame 为空的情况\n    :param df: 需要设置命名的数据框\n    :type df: pandas.DataFrame\n    :param cols: 字段的列表\n    :type cols: list\n    :return: 重新设置后的数据\n    :rtype: pandas.DataFrame\n    \"\"\"\n    if df.shape == (0, 0):\n        return pd.DataFrame(data=[], columns=cols)\n    else:\n        df.columns = cols\n        return df\n"
  },
  {
    "path": "akshare/utils/multi_decrypt.py",
    "content": "\"\"\"\n利用多进行执行 js 代码方案\n\n1. 未能解决 gevent 调用问题\n2. 导致 js 代码执行缓慢\n3. 该方案废弃，这里仅作参考\n\n同时发现 gevent 里面无法调用异步的接口\n\"\"\"\n\nimport concurrent.futures\n\n\n# 定义在模块级别的函数\ndef js_executor_function(js_code_str, method, args):\n    \"\"\"在新进程中执行 JavaScript 代码的函数\"\"\"\n    from py_mini_racer import MiniRacer\n\n    js_code = MiniRacer()\n    js_code.eval(js_code_str)\n\n    if method == \"call\":\n        fn_name = args[0]\n        fn_args = args[1:]\n        return js_code.call(fn_name, *fn_args)\n    elif method == \"eval\":\n        return js_code.eval(args[0])\n    else:\n        raise ValueError(f\"不支持的方法: {method}\")\n\n\ndef execute_js_in_executor(js_code_str, method, *args, timeout=30):\n    \"\"\"\n    使用 ProcessPoolExecutor 在独立进程中执行 JavaScript\n\n    参数:\n        js_code_str: JavaScript 代码字符串\n        method: 'call' 或 'eval'\n        args: 如果 method 是 'call'，第一个参数是函数名，后续是函数参数\n              如果 method 是 'eval'，只需提供一个参数：要评估的代码\n        timeout: 超时时间（秒）\n\n    返回:\n        执行结果\n    \"\"\"\n    with concurrent.futures.ProcessPoolExecutor(max_workers=1) as executor:\n        future = executor.submit(js_executor_function, js_code_str, method, args)\n        try:\n            return future.result(timeout=timeout)\n        except concurrent.futures.TimeoutError:\n            # 清理资源并抛出超时异常\n            executor.shutdown(wait=False)\n            raise TimeoutError(\"JavaScript 执行超时\")\n"
  },
  {
    "path": "akshare/utils/request.py",
    "content": "# !/usr/bin/env python\n\"\"\"\nDate: 2025/12/31\nDesc: HTTP 请求工具函数\n\"\"\"\n\nimport random\nimport time\nfrom typing import Dict, Tuple\n\nimport requests\nfrom requests.adapters import HTTPAdapter\n\n\ndef request_with_retry(\n    url: str,\n    params: Dict = None,\n    timeout: int = 15,\n    max_retries: int = 3,\n    base_delay: float = 1.0,\n    random_delay_range: Tuple[float, float] = (0.5, 1.5),\n) -> requests.Response:\n    \"\"\"\n    带重试机制的 HTTP GET 请求\n    :param url: 请求 URL\n    :type url: str\n    :param params: 请求参数\n    :type params: dict\n    :param timeout: 超时时间（秒）\n    :type timeout: int\n    :param max_retries: 最大重试次数\n    :type max_retries: int\n    :param base_delay: 基础延迟时间（秒），用于指数退避\n    :type base_delay: float\n    :param random_delay_range: 随机延迟范围（秒）\n    :type random_delay_range: tuple\n    :return: Response 对象\n    :rtype: requests.Response\n    :raises: 最后一次请求的异常\n    \"\"\"\n    last_exception = None\n\n    for attempt in range(max_retries):\n        try:\n            # 每次请求创建新的 Session，避免复用连接\n            with requests.Session() as session:\n                # 禁用连接池复用\n                adapter = HTTPAdapter(pool_connections=1, pool_maxsize=1)\n                session.mount(\"http://\", adapter)\n                session.mount(\"https://\", adapter)\n\n                response = session.get(url, params=params, timeout=timeout)\n                response.raise_for_status()\n                return response\n\n        except (requests.RequestException, ValueError) as e:\n            last_exception = e\n\n            if attempt < max_retries - 1:\n                # 指数退避 + 随机抖动\n                delay = base_delay * (2**attempt) + random.uniform(*random_delay_range)\n                time.sleep(delay)\n\n    raise last_exception\n"
  },
  {
    "path": "akshare/utils/token_process.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2020/2/13 21:22\nDesc: 存储和读取 Token 文件\n\"\"\"\n\nimport os\n\nimport pandas as pd\n\nfrom akshare.pro import cons\n\n\ndef set_token(token):\n    df = pd.DataFrame([token], columns=[\"token\"])\n    user_home = os.path.expanduser(\"~\")\n    fp = os.path.join(user_home, cons.TOKEN_F_P)\n    df.to_csv(fp, index=False)\n\n\ndef get_token():\n    user_home = os.path.expanduser(\"~\")\n    fp = os.path.join(user_home, cons.TOKEN_F_P)\n    if os.path.exists(fp):\n        df = pd.read_csv(fp)\n        return str(df.iloc[0][\"token\"])\n    else:\n        print(cons.TOKEN_ERR_MSG)\n        return\n\n\nif __name__ == \"__main__\":\n    pass\n"
  },
  {
    "path": "akshare/utils/tqdm.py",
    "content": "def get_tqdm(enable: bool = True):\n    \"\"\"\n    返回适用于当前环境的 tqdm 对象。\n\n    Args:\n        enable (bool): 是否启用进度条。默认为 True。\n\n    Returns:\n        tqdm 对象。\n    \"\"\"\n    if not enable:\n        # 如果进度条被禁用，返回一个不显示进度条的 tqdm 对象\n        return lambda iterable, *args, **kwargs: iterable\n\n    try:\n        # 尝试检查是否在 jupyter notebook 环境中，有利于退出进度条\n        # noinspection PyUnresolvedReferences\n        shell = get_ipython().__class__.__name__\n        if shell == \"ZMQInteractiveShell\":\n            from tqdm.notebook import tqdm\n        else:\n            from tqdm import tqdm\n    except (NameError, ImportError):\n        # 如果不在 Jupyter 环境中，就使用标准 tqdm\n        from tqdm import tqdm\n\n    return tqdm\n"
  },
  {
    "path": "docs/README.rst",
    "content": ":orphan:\n\n=========================================\nAKShare documentation quick start guide\n=========================================\n\nThis file provides a quick guide on how to compile the AKShare documentation.\n\n\nSetup the environment\n---------------------\n\nTo compile the documentation you need Sphinx Python library. To install it\nand all its dependencies run the following command from this dir\n\n::\n\n    pip install -r requirements.txt\n\n\nCompile the documentation\n-------------------------\n\nTo compile the documentation (to classic HTML output) run the following command\nfrom this dir::\n\n    make html\n\nDocumentation will be generated (in HTML format) inside the ``build/html`` dir.\n\n\nView the documentation\n----------------------\n\nTo view the documentation run the following command::\n\n    make htmlview\n\nThis command will fire up your default browser and open the main page of your\n(previously generated) HTML documentation.\n\n\nStart over\n----------\n\nTo cleanup all generated documentation files and start from scratch run::\n\n    make clean\n\nKeep in mind that this command won't touch any documentation source files.\n\n\nRecreating documentation on the fly\n-----------------------------------\n\nThere is a way to recreate the doc automatically when you make changes, you\nneed to install watchdog (``pip install watchdog``) and then use::\n\n    make watch\n"
  },
  {
    "path": "docs/akdocker/akdocker.md",
    "content": "# [AKShare](https://github.com/akfamily/akshare) Docker 部署\n\n目前 [AKShare](https://github.com/akfamily/akshare) 数据接口是基于 Python 开发的，鉴于部分小伙伴难以在短时间部署\n[AKShare](https://github.com/akfamily/akshare) 的 Python 使用环境，特此提供基于 Docker 容器技术的使用教程。\n\n## 安装 Docker\n\n### 官方安装指导\n\n1. Windows 11: [安装教程](https://hub.docker.com/editions/community/docker-ce-desktop-windows)\n2. Mac: [安装教程](https://docs.docker.com/docker-for-mac/install)\n3. Ubuntu: [安装教程](https://docs.docker.com/engine/install/ubuntu)\n4. CentOS: [安装教程](https://docs.docker.com/engine/install/centos)\n\n### 第三方安装指导\n\n1. [Docker 安装教程](https://www.runoob.com/docker/docker-tutorial.html)\n2. 建议 Windows 7 和 8 的用户升级到 Windows 10/11 系统进行安装\n3. [Windows 镜像下载地址](https://msdn.itellyou.cn/)\n\n### 配置国内镜像\n\n1. [Docker 国内镜像加速教程](https://www.runoob.com/docker/docker-mirror-acceleration.html)\n2. 请在国内使用的用户务必进行该项配置, 从而加速获取镜像的速度.\n\n## AKDocker 镜像使用\n\n### 拉取 AKDocker 镜像\n\n此镜像会在每次 AKShare 更新版本时自动更新\n\n```\ndocker pull registry.cn-shanghai.aliyuncs.com/akfamily/aktools:jupyter\n```\n\n### 运行 AKDocker 容器\n\n```\ndocker run -it registry.cn-shanghai.aliyuncs.com/akfamily/aktools:jupyter\n```\n\n### 测试 AKDocker 容器\n\n```python\nimport akshare as ak\n\nprint(ak.__version__)\n```\n\n## 使用案例\n\n### 背景说明\n\n本案例是基于 AKDocker 容器中已经安装的 JupyterLab 来演示的. 主要是利用 JupyterLab 的 Python 交互式的开发环境, 使用户可以在 Web 输入 AKShare\n的 Python 示例代码, 仅需要修改一些简单的参数, 就可以获取需要的数据. 为了能把 JupyterLab 中下载的数据从容器映射到本地, 请在\n容器的 ```/home``` 目录下编辑 ```.ipynb``` 文件, 如果需要下载相关的文件也请保存到该目录.\n\n### 命令行\n\n```\ndocker run -it -p 8888:8888 --name akdocker -v /c/home:/home registry.cn-shanghai.aliyuncs.com/akfamily/aktools:jupyter jupyter-lab --allow-root --no-browser --ip=0.0.0.0\n```\n\n### 注意事项\n\n1. 其中 Windows 系统的路径如: ```C:\\home``` 需要改写为: ```/c/home``` 的形式;\n2. 在 Terminal 中运行上述指令后，会在 Terminal 中显示如下信息: ![](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/akdocker/akdocker_terminal.png)\n3. 打开本地游览器输入地址: ```http://127.0.0.1:8888/lab?token=bbe7c8633c098b67df913dce522b82e00828b311a6fc954d```;\n4. 在本地游览器中的 JupyterLab 界面进入 ```home``` 文件夹, 该目录内容会与本地的 ```C:\\home``` 保持同步, 可以在此编辑 notebook 文件和导入数据到该文件夹从而在本地的 ```C:\\home``` 文件夹下获取数据;\n5. 如果在 JupyterLab 中的 AKShare 版本不是最新版，有以下两种方法：\n   1. 在 JupyterLab 中运行 `!pip install akshare --upgrade` 命令来升级 AKShare 到最新版\n   2. 在容器中进行升级 AKShare 并保存为新的镜像文件后使用，参考：https://aktools.akfamily.xyz/aktools/ 中【升级镜像】部分\n"
  },
  {
    "path": "docs/anaconda.md",
    "content": "# [AKShare](https://github.com/akfamily/akshare) 环境配置\n\n## Anaconda 安装说明\n\nAnaconda 是集成上千个常用库的 Python 发行版本, 通过安装 Anaconda 能简化环境管理工作, 非常推荐使用.\n作者建议根据您计算机的操作系统选择相应版本的安装包, 国内用户可以点击链接访问 [清华大学开源软件镜像站](https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/) 来加速下载最新的 64 位安装包.\n国外用户可以访问 [Anaconda 官网](https://www.anaconda.com/products/individual) 下载最新的 64 位安装包.\n\n## Anaconda 安装演示\n\n**以 64 位 Windows 版本 Anaconda3-2019.07 为例**\n\n下图中红框为 64 位 Windows 选择的版本:\n\n![](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/anaconda/anaconda_download.png)\n\n下载完成后双击如下图标进行安装:\n\n![](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/anaconda/anaconda_icon.png)\n\n点击 Next:\n\n![](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/anaconda/anaconda_install_1.png)\n\n点击 I Agree:\n\n![](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/anaconda/anaconda_install_2.png)\n\n点击 Just me --> Next:\n\n![](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/anaconda/anaconda_install_3.png)\n\n修改 Destination Folder 为如图所示:\n\n![](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/anaconda/anaconda_install_4.png)\n\n勾选下图红框选项(以便于把安装的环境加入系统路径) --> Install:\n\n![](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/anaconda/anaconda_install_5.png)\n\n安装好后, 找到 Anaconda Prompt 窗口:\n\n![](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/anaconda/virtual_env/anaconda_prompt.png)\n\n输入 python, 如果如下图所示, 即已经在系统目录中安装好 anaconda3 的环境.\n\n![](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/anaconda/virtual_env/anaconda_prompt_1.png)\n\n创建虚拟环境命令, 此处指定 Python 版本为 3.9, AKShare 支持 Python 3.9 以上的版本:\n\n```\nconda create -n ak_test python=3.9\n```\n\n输入上述命令后出现确认, 输入 y\n\n```\nProceed 输入 y\n```\n\n显示出最后一个红框内容则创建虚拟环境成功.\n\n![](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/anaconda/virtual_env/anaconda_prompt_2.png)\n\n在虚拟环境中安装 [AKShare](https://github.com/akfamily/akshare). 输入如下内容, 会在全新的环境中自动安装所需要的依赖包\n\n激活已经创建好的 ak_test 虚拟环境\n\n```\nconda activate ak_test\n```\n\n在 ak_test 虚拟环境中安装并更新 [AKShare](https://github.com/akfamily/akshare)\n\n```\npip install akshare --upgrade\n```\n\n![](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/anaconda/virtual_env/anaconda_prompt_3.png)\n\n在安装完毕后, 输入 `python` 进入虚拟环境中的 Python\n\n```\npython\n```\n\n在 ak_test 虚拟环境的 Python 环境里面输入:\n\n```python\nimport akshare as ak\n\nprint(ak.__doc__)\n```\n\n显示出如下图则虚拟环境和 [AKShare](https://github.com/akfamily/akshare) 安装成功:\n\n![](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/anaconda/virtual_env/anaconda_prompt_4.png)\n\n还可以在 ak_test 虚拟环境的 Python 环境中输入如下代码可以显示 [AKShare](https://github.com/akfamily/akshare) 的版本信息\n\n```python\nimport akshare as ak\n\nprint(ak.__version__)\n```\n"
  },
  {
    "path": "docs/answer.md",
    "content": "# [AKShare](https://github.com/akfamily/akshare) 答疑专栏\n\n## 专栏介绍\n\n本专栏的主要目的是为了解决在使用 [AKShare](https://github.com/akfamily/akshare) 中遇到的各种问题，主题包括但不限于：环境配置、AKShare 安装和升级、数据接口请求、代理配置等等。\n\n## 常见问题\n\n1. 安装 AKShare 的速度慢，下载时间久\n\n    1. 请使用国内的源来安装 AKShare\n        1. 基于 Python 的代码如下：\n```pip install akshare -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com  --upgrade ```\n        2. 基于 Anaconda 的代码如下：\n```pip install akshare -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com  --user  --upgrade```\n    2. 使用代理安装，由于相关限制，在这里对代理的安装和使用不做介绍，请自行搜索配置。\n\n2. 运行任意接口发现报错，错误类似：`AttributeError: module 'akshare' has no attribute 'xxx'`\n\n    1. 检查 Python 的版本需要在 Python 3.9 以上，推荐使用 Python 3.13.x 及以上版本\n    2. 检查是否安装了最新版本的 AKShare，如果不是最新版本，请先升级至最新版\n    3. 检查在文档中是否具有该 `xxx` 接口，特定情况下有可能会改变接口的命名或者移除某些接口\n    4. 检查所运行的 Python 文件名命名问题，不能用如下命名：`akshare.py` 与本地安装包冲突\n\n3. 不能获取指定的日期期间的数据，比如从 20200401 至 20200415 的数据\n\n    1. 由于目标网页的大部分的接口一次性返回所有数据，所以在 AKShare 的部分接口函数中没有设置类似 `start_date` 和 `end_date` 的参数\n    2. 如果要获取指定日期间的数据，请在调用接口后自行处理\n\n4. 接口报错出现类似错误提示： `ReadTimeout: HTTPConnectionPool(host=\"www.xxx.com\")`\n\n    1. 重新运行接口函数\n    2. 更换 IP 地址，可以使用代理访问\n    3. 降低数据访问的频率\n\n5. 接口报错出现类似错误提示：`cannot import name 'StringIO' from 'pandas.compat'`\n\n    1. 建议安装 pandas 版本大于 **0.25.2**，建议 pandas 版本大于 **1.0**\n    2. 升级命令如下: `pip install pandas --upgrade`\n\n6. 出现数据返回错位，如日期数据和价格数据返回错位的情况\n\n    1. 多运行几次，查看是否是网络不稳定造成的问题\n    2. 切换 IP 后重试\n    3. 可以在 [GitHub Issues](https://github.com/akfamily/akshare/issues) 中反馈\n\n7. 全球疫情历史数据接口获取不到数据\n\n    1. 由于 GitHub 服务器在国外，访问此数据接口最好使用代理访问\n    2. 如没有代理的情况下，多重复请求几次\n\n8. 返回值字段错位\n\n    1. 升级 pandas 到最新版本\n\n9. Linux 系统显示 `execjs._exceptions.RuntimeUnavailableError: Could not find an available JavaScript runtime.`\n\n    1. 需要安装 `nodejs`\n    2. 参考[文章](https://blog.csdn.net/qq_36853469/article/details/106401389)\n\n10. 将数据在 IDE 全显示，避免折叠显示不全的情况\n\n    1. 全局设置 `pandas`，使用方法:\n```python\nimport pandas as pd\nimport akshare as ak\n# 列名与数据对其显示\npd.set_option('display.unicode.ambiguous_as_wide', True)\npd.set_option('display.unicode.east_asian_width', True)\n# 显示所有列\npd.set_option('display.max_columns', None)\n# 显示所有行\npd.set_option('display.max_rows', None)\n\nstock_zh_index_daily_df = ak.stock_zh_index_daily(symbol=\"sz399552\")\nprint(stock_zh_index_daily_df)\n```\n\n11. 出现 `AttributeError: 'MiniRacer' object has no attribute 'ext'` 报错\n\n    1. 安装 64 位版本的 Python\n\n12. 无法下载疫情的海外数据\n\n    1. 访问 [IPAddress](https://www.ipaddress.com/)\n    2. 查询 ```raw.githubusercontent.com``` 的真实 IP 地址\n    3. 找到系统 host\n        1. Windows 10 在目录 ```C:\\Windows\\System32\\drivers\\etc```\n        2. Ubuntu 18.04 在目录 ```/etc/hosts```\n    4. 修改 host\n        1. 添加如下内容: ```199.232.28.133 raw.githubusercontent.com```\n        2. 此处 ```199.232.28.133``` 为查找到的真实 IP\n\n13. 使用代理的时候报错 `check_hostname requires server_hostname`\n\n    1. 降低 urllib3 的版本到 1.25.8：`pip install urllib3==1.25.8`\n"
  },
  {
    "path": "docs/articles.md",
    "content": "# [AKShare](https://github.com/akfamily/akshare) 相关文章\n\n本专栏主要展示利用 [AKShare](https://github.com/akfamily/akshare) 进行数据获取、分析和案例展示相关的文章，\n供大家参考和更好的使用 [AKShare](https://github.com/akfamily/akshare) ！\n\n## AKShare 的评价\n\n1. [少八卦，多学习！国内量化开源的顶流项目](https://mp.weixin.qq.com/s?__biz=MzAxNTc0Mjg0Mg==&mid=2653325383&idx=1&sn=de3ea07b5f8d28d63edffa410bf58790&chksm=802d4a52b75ac34478d2e3209adf0a44ba5d353559eb04f47ca8896ba6a40d44dda21dc89503&mpshare=1&scene=23&srcid=0210t8JATFZcRr7QU0VdRjJx&sharer_sharetime=1646818936986&sharer_shareid=a4c6299b7a875e1e5ddbc56b4c71e4dd#rd)\n\n## 公众号文章\n\n1. [用 Python 快速获取基金的股票持仓增减情况 | 更新版](https://mp.weixin.qq.com/s?__biz=MzU1MTM4OTk0MQ==&mid=2247487084&idx=1&sn=b307075af1702d8c1dbda7d9e219a9b5&chksm=fb9351f6cce4d8e0a647c902b25eca89804f8c3169eecd1216f0c5c7d90e64bee900cc7ed2c1&mpshare=1&scene=23&srcid=0309GDbmEHx70KjI19ionXfv&sharer_sharetime=1646819026253&sharer_shareid=a4c6299b7a875e1e5ddbc56b4c71e4dd#rd)\n2. [AkShare之ETF历史行情](https://mp.weixin.qq.com/s?__biz=MzkyMDIxMzU1Nw==&mid=2247484881&idx=1&sn=5c721cd1e65e64ba084684a8a6970063&chksm=c197048bf6e08d9d5d69568dc00262d6fc44df354eca5cfb02966136f158e15423d5f766b2f0&mpshare=1&scene=23&srcid=0311iSQrYF4NjKbkUaRmu8H3&sharer_sharetime=1647008212548&sharer_shareid=a4c6299b7a875e1e5ddbc56b4c71e4dd#rd)\n3. [零基础量化交易学习（3）Pandas](https://mp.weixin.qq.com/s?__biz=MzkzMjIzMzE0MA==&mid=2247483696&idx=1&sn=88082c9cdef709930736f933c4464d49&chksm=c25fabebf52822fd2744477754fdf107594c7ad67458594927d6396be88dd1ccb6736c3cf3dc&mpshare=1&scene=23&srcid=0311JEHUF088jvBKila4T2dZ&sharer_sharetime=1647008240525&sharer_shareid=a4c6299b7a875e1e5ddbc56b4c71e4dd#rd)\n4. [时间序列的平稳性检验方法汇总](https://mp.weixin.qq.com/s?__biz=MzUzODYwMDAzNA==&mid=2247557469&idx=1&sn=4bcaddbc7004079c2687696360414448&chksm=fad69650cda11f46ce8929a3a3db613ea968fe934a53b6384bb56839213de82c4541f8432736&mpshare=1&scene=23&srcid=0311InxSRDsJOivi58BoOqTg&sharer_sharetime=1647008260414&sharer_shareid=a4c6299b7a875e1e5ddbc56b4c71e4dd#rd)\n5. [用Python搞了个基金查询机器人，还可以拓展！](https://mp.weixin.qq.com/s?__biz=MzUyOTAwMzI4NA==&mid=2247525637&idx=1&sn=a0842b1c2d6f3d531947be6087a4d46e&chksm=fa65837ecd120a68b1c83c702081e507e1fdfc6f566018414237150a70ac3d8bddc60926f822&mpshare=1&scene=23&srcid=03115P2wMtTWbeYwHdng9W7R&sharer_sharetime=1647008305826&sharer_shareid=a4c6299b7a875e1e5ddbc56b4c71e4dd#rd)\n\n## 博客文章\n\n1. [akshare做mfi策略](https://blog.csdn.net/qq_26742269/article/details/123024482)\n2. [akshare写etf动量滚动策略](https://blog.csdn.net/qq_26742269/article/details/123490942)\n3. [akshare改写公募基金轮动策略](https://blog.csdn.net/qq_26742269/article/details/123488096)\n4. [价值投资/指标选股（akshare）](https://blog.csdn.net/qq_26742269/article/details/123377668)\n5. [akshare sma策略](https://blog.csdn.net/qq_26742269/article/details/122916796)\n6. [akshare 布林通道策略](https://blog.csdn.net/qq_26742269/article/details/122916783)\n7. [akshare 配对策略](https://blog.csdn.net/qq_26742269/article/details/122916800)\n8. [获取财经数据神器akshare 基本使用总结](https://blog.csdn.net/fyfugoyfa/article/details/113131184)\n9. [股债收益模型 量化实战篇（一）](https://bbs.csdn.net/topics/605332332)\n10. [配对交易（一）：期货品种相关性研究](https://blog.csdn.net/anddyyhuang/article/details/124307032)\n11. [用AkShare库获取A股股票数据—获取实时A股数据](https://blog.csdn.net/malishizu222/article/details/124181141?spm=1001.2014.3001.5502)\n12. [用AkShare获取沪深京A股所有股票历史数据](https://blog.csdn.net/malishizu222/article/details/124203415?spm=1001.2014.3001.5502)\n13. [用AkShare获取沪深京A股分钟级K线数据](https://blog.csdn.net/malishizu222/article/details/124223018?spm=1001.2014.3001.5502)\n14. [用AkShare获取实盘沪深可转债数据](https://blog.csdn.net/malishizu222/article/details/124272719?spm=1001.2014.3001.5502)\n15. [用AkShare获取沪深可转债分时数据](https://blog.csdn.net/malishizu222/article/details/124280083?spm=1001.2014.3001.5502)\n16. [akshare股市新闻情绪判断](https://www.cnblogs.com/xingnie/p/16123269.html)\n17. [akshare量化股票市场情绪指标ARBR](https://www.cnblogs.com/xingnie/p/16123257.html)\n18. [Akshare 获取日线策略并发送邮件](https://www.cnblogs.com/xingnie/p/16099214.html)\n"
  },
  {
    "path": "docs/changelog.md",
    "content": "# [AKShare](https://github.com/akfamily/akshare) 版本更新\n\n## 接口更名一览表\n\n| AKShare 版本 | 旧接口名称                                       | 新接口名称                                       | 修改日期     |\n|------------|---------------------------------------------|---------------------------------------------|----------|\n| 1.17.81    | get_czce_rank_table                         | get_rank_table_czce                         | 20251103 |\n| 1.17.81    | futures_czce_warehouse_receipt              | futures_warehouse_receipt_czce              | 20251103 |\n| 1.17.72    | futures_dce_warehouse_receipt               | futures_warehouse_receipt_dce               | 20251027 |\n| 1.17.68    | option_gfex_vol_daily                       | option_vol_gfex                             | 20251017 |\n| 1.17.68    | option_gfex_daily                           | option_hist_gfex                            | 20251017 |\n| 1.17.68    | option_shfe_daily                           | option_hist_shfe                            | 20251017 |\n| 1.17.68    | option_czce_daily                           | option_hist_czce                            | 20251017 |\n| 1.17.68    | option_dce_daily                            | option_hist_dce                             | 20251017 |\n| 1.17.68    | option_czce_hist                            | option_hist_yearly_czce                     | 20251017 |\n| 1.16.29    | futures_global_em                           | futures_global_spot_em                      | 20250305 |\n| 1.13.88    | index_cflp_volume                           | index_volume_cflp                           | 20240527 |\n| 1.13.88    | index_cflp_price                            | index_price_cflp                            | 20240527 |\n| 1.13.19    | car_gasgoo_sale_rank                        | car_sale_rank_gasgoo                        | 20240403 |\n| 1.13.19    | car_energy_sale_cpca                        | car_market_fuel_cpca                        | 20240403 |\n| 1.13.15    | car_market_cpca                             | car_market_total_cpca                       | 20240331 |\n| 1.12.95    | futures_hog_rank                            | futures_hog_cost                            | 20240318 |\n| 1.12.95    | futures_hog_info                            | futures_hog_core                            | 20240318 |\n| 1.12.93    | get_bond_bank                               | bond_debt_nafmii                            | 20240316 |\n| 1.12.91    | stock_telegraph_cls                         | stock_info_global_cls                       | 20240313 |\n| 1.12.11    | stock_zh_index_spot                         | stock_zh_index_spot_sina                    | 20240104 |\n| 1.11.64    | futures_sgx_daily                           | futures_settlement_price_sgx                | 20231108 |\n| 1.11.61    | fund_manager                                | fund_manager_em                             | 20231105 |\n| 1.11.41    | weibo_index                                 | index_weibo_sina                            | 20231020 |\n| 1.11.39    | option_300etf_min_qvix                      | index_option_300etf_min_qvix                | 20231019 |\n| 1.11.39    | option_300etf_qvix                          | index_option_300etf_qvix                    | 20231019 |\n| 1.11.39    | option_50etf_min_qvix                       | index_option_50etf_min_qvix                 | 20231019 |\n| 1.11.39    | option_50etf_qvix                           | index_option_50etf_qvix                     | 20231019 |\n| 1.10.50    | car_cpca_energy_sale                        | car_energy_sale_cpca                        | 20230710 |\n| 1.10.36    | stock_em_sy_hy_list                         | stock_sy_hy_em                              | 20230624 |\n| 1.10.36    | stock_em_sy_list                            | stock_sy_em                                 | 20230624 |\n| 1.10.36    | stock_em_sy_jz_list                         | stock_sy_jz_em                              | 20230624 |\n| 1.10.36    | stock_em_sy_yq_list                         | stock_sy_yq_em                              | 20230624 |\n| 1.10.36    | stock_em_sy_profile                         | stock_sy_profile_em                         | 20230624 |\n| 1.10.8     | futures_nh_volatility_index                 | futures_volatility_index_nh                 | 20230606 |\n| 1.9.37     | stock_hk_eniu_indicator                     | stock_hk_indicator_eniu                     | 20230404 |\n| 1.9.27     | fund_em_hk_rank                             | fund_hk_rank_em                             | 20230330 |\n| 1.9.27     | fund_em_lcx_rank                            | fund_lcx_rank_em                            | 20230330 |\n| 1.9.27     | fund_em_money_rank                          | fund_money_rank_em                          | 20230330 |\n| 1.9.27     | fund_em_exchange_rank                       | fund_exchange_rank_em                       | 20230330 |\n| 1.9.7      | stock_profit_forecast                       | stock_profit_forecast_em                    | 20230330 |\n| 1.8.38     | macro_cons_silver_amount                    | macro_cons_silver                           | 20221227 |\n| 1.8.38     | macro_cons_silver_change                    | macro_cons_silver                           | 20221227 |\n| 1.8.38     | macro_cons_silver_volume                    | macro_cons_silver                           | 20221227 |\n| 1.8.38     | macro_cons_gold_amount                      | macro_cons_gold                             | 20221227 |\n| 1.8.38     | macro_cons_gold_change                      | macro_cons_gold                             | 20221227 |\n| 1.8.38     | macro_cons_gold_volume                      | macro_cons_gold                             | 20221227 |\n| 1.8.23     | stock_restricted_shares                     | stock_restricted_release_queue_sina         | 20221122 |\n| 1.8.3      | stock_em_qbzf                               | stock_qbzf_em                               | 20221122 |\n| 1.8.3      | stock_em_pg                                 | stock_pg_em                                 | 20221122 |\n| 1.7.99     | stock_sina_lhb_jgmx                         | stock_lhb_jgmx_sina                         | 20221119 |\n| 1.7.99     | stock_sina_lhb_jgzz                         | stock_lhb_jgzz_sina                         | 20221119 |\n| 1.7.99     | stock_sina_lhb_yytj                         | stock_lhb_yytj_sina                         | 20221119 |\n| 1.7.99     | stock_sina_lhb_ggtj                         | stock_lhb_ggtj_sina                         | 20221119 |\n| 1.7.99     | stock_sina_lhb_detail_daily                 | stock_lhb_detail_daily_sina                 | 20221119 |\n| 1.7.82     | index_analysis_sw                           | index_analysis_daily_sw                     | 20220921 |\n| 1.7.27     | stock_em_qsjy                               | stock_qsjy_em                               | 20220921 |\n| 1.7.23     | futures_pig_info                            | futures_hog_info                            | 20220916 |\n| 1.7.23     | futures_pig_rank                            | futures_hog_rank                            | 20220916 |\n| 1.6.86     | stock_em_gpzy_distribute_statistics_company | stock_gpzy_distribute_statistics_company_em | 20220811 |\n| 1.6.86     | stock_em_gpzy_distribute_statistics_bank    | stock_gpzy_distribute_statistics_bank_em    | 20220811 |\n| 1.5.94     | bond_conv_adj_logs_jsl                      | bond_cb_adj_logs_jsl                        | 20220524 |\n| 1.5.94     | bond_cov_jsl                                | bond_cb_jsl                                 | 20220524 |\n| 1.5.53     | stock_em_xjll                               | stock_xjll_em                               | 20220501 |\n| 1.5.53     | stock_em_lrb                                | stock_lrb_em                                | 20220501 |\n| 1.5.53     | stock_em_zcfz                               | stock_zcfz_em                               | 20220501 |\n| 1.5.52     | stock_em_ggcg                               | stock_ggcg_em                               | 20220501 |\n| 1.5.48     | futures_nh_price_index                      | futures_price_index_nh                      | 20220428 |\n| 1.5.48     | futures_nh_index_symbol_table               | futures_index_symbol_table_nh               | 20220428 |\n| 1.5.48     | futures_nh_return_index                     | futures_return_index_nh                     | 20220428 |\n| 1.5.46     | stock_em_yzxdr                              | stock_yzxdr_em                              | 20220427 |\n| 1.5.34     | stock_em_gpzy_industry_data                 | stock_gpzy_industry_data_em                 | 20220420 |\n| 1.5.26     | stock_em_comment                            | stock_comment_em                            | 20220415 |\n| 1.5.25     | stock_em_analyst_detail                     | stock_analyst_detail_em                     | 20220415 |\n| 1.5.25     | stock_em_analyst_rank                       | stock_analyst_rank_em                       | 20220415 |\n| 1.5.18     | fund_em_open_fund_rank                      | fund_open_fund_rank_em                      | 20220414 |\n| 1.5.12     | stock_em_gpzy_pledge_ratio_detail           | stock_gpzy_pledge_ratio_detail_em           | 20220410 |\n| 1.5.10     | stock_em_gpzy_pledge_ratio                  | stock_gpzy_pledge_ratio_em                  | 20220410 |\n| 1.5.10     | stock_em_gpzy_profile                       | stock_gpzy_profile_em                       | 20220410 |\n| 1.4.88     | fund_em_new_found                           | fund_new_found_em                           | 20220323 |\n| 1.4.86     | fund_em_aum_hist                            | fund_aum_hist_em                            | 20220322 |\n| 1.4.86     | fund_em_aum_trend                           | fund_aum_trend_em                           | 20220322 |\n| 1.4.86     | fund_em_aum                                 | fund_aum_em                                 | 20220322 |\n\n## 更新说明详情\n\n1.18.50 fix: fix stock_gpzy_individual_pledge_ratio_detail_em interface\n\n\t1. 修复 stock_gpzy_individual_pledge_ratio_detail_em 接口\n\n1.18.49 fix: fix macro_china_urban_unemployment interface\n\n\t1. 修复 macro_china_urban_unemployment 接口\n\n1.18.48 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.18.47 fix: fix stock_margin_underlying_info_szse interface\n\n\t1. 修复 stock_margin_underlying_info_szse 接口\n\n1.18.46 fix: fix stock_a_all_pb interface\n\n\t1. 修复 stock_a_all_pb 接口\n\t2. 修复 stock_buffett_index_lg 接口\n\n1.18.45 fix: fix stock_a_high_low_statistics interface\n\n\t1. 修复 stock_a_high_low_statistics 接口\n\n1.18.44 fix: fix index_option_50etf_qvix interface\n\n\t1. 修复 index_option_50etf_qvix 接口\n\n1.18.43 fix: fix stock_financial_abstract_new_ths interface\n\n\t1. 修复 stock_financial_abstract_new_ths 接口\n\n1.18.42 fix: fix stock_zh_a_minute interface\n\n\t1. 修复 stock_zh_a_minute 接口\n\n1.18.41 fix: fix stock_zh_a_minute interface\n\n\t1. 修复 stock_zh_a_minute 接口\n\n1.18.40 fix: fix stock_hk_daily interface\n\n\t1. 修复 stock_hk_daily 接口\n\n1.18.39 fix: fix stock_hk_daily interface\n\n\t1. 修复 stock_hk_daily 接口\n\n1.18.38 fix: fix stock_hk_index_daily_sina interface\n\n\t1. 修复 stock_hk_index_daily_sina 接口\n\n1.18.37 fix: fix fund_etf_dividend_sina interface\n\n\t1. 修复 fund_etf_dividend_sina 接口\n\n1.18.36 fix: fix stock_zygc_em interface\n\n\t1. 修复 stock_zygc_em 接口\n\n1.18.35 fix: fix stock_ipo_ths interface\n\n\t1. 修复 stock_ipo_ths 接口\n\n1.18.34 fix: fix fund_fh_em interface\n\n\t1. 修复 fund_fh_em 接口\n\n1.18.33 fix: fix futures_spot_price_daily interface\n\n\t1. 修复 futures_spot_price_daily 接口\n\n1.18.32 fix: fix fund_new_found_ths interface\n\n\t1. 修复 fund_new_found_ths 接口\n\n1.18.31 fix: fix stock_hk_dividend_payout_em interface\n\n\t1. 修复 stock_hk_dividend_payout_em 接口\n\n1.18.30 fix: fix futures_inventory_99 interface\n\n\t1. 修复 futures_inventory_99 接口\n\n1.18.29 fix: fix stock_individual_basic_info_xq interface\n\n\t1. 修复 stock_individual_basic_info_xq  接口\n\n1.18.28 fix: fix futures_spot_price_daily interface\n\n\t1. 修复 futures_spot_price_daily 接口\n\n1.18.27 fix: fix futures_comm_js interface\n\n\t1. 修复 futures_comm_js 接口\n\n1.18.26 fix: fix fund_fh_em interface\n\n\t1. 修复 fund_fh_em 接口\n\t2. 修复 stock_gdfx_free_holding_change_em 接口\n\n1.18.25 fix: fix qdii_e_comm_jsl interface\n\n\t1. 修复 qdii_e_comm_jsl 接口\n\t2. 修复 stock_rank_xstp_ths 接口\n\n1.18.24 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.18.23 fix: fix fund_fee_em interface\n\n\t1. 修复 fund_fee_em 接口\n\t2. 修复 fund_etf_category_ths 接口\n\n1.18.22 fix: fix bond_gb_zh_sina interface\n\n\t1. 修复 bond_gb_zh_sina 接口\n\t2. 修复 bond_gb_us_sina 接口\n\n1.18.21 fix: fix get_receipt interface\n\n\t1. 修复 get_receipt 接口\n\n1.18.20 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.18.19 fix: fix GitHub action\n\n\t1. 修复配置文件\n\n1.18.18 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.18.17 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.18.16 fix: fix news_economic_baidu interface\n\n\t1. 修复 news_economic_baidu 接口\n\n1.18.15 fix: fix fund_etf_scale_sse and fund_etf_scale_szse interface\n\n\t1. 修复 fund_etf_scale_sse 接口-基金份额字段数据解析错误，统一使用\"份\"作为单位\n\t2. 修复 fund_etf_scale_szse 接口-基金份额字段数据解析错误，统一使用\"份\"作为单位\n\n1.18.14 add: add fund_etf_scale_sse and fund_etf_scale_szse interface\n\n\t1. 新增 fund_etf_scale_sse 接口-上海证券交易所 ETF 基金份额数据\n\t2. 新增 fund_etf_scale_szse 接口-深圳证券交易所 ETF 基金份额数据\n\n1.18.13 fix: fix futures_spot_price_daily interface\n\n\t1. 修复 futures_spot_price_daily 接口\n\n1.18.12 fix: fix news_economic_baidu interface\n\n\t1. 修复 news_economic_baidu 接口\n\n1.18.11 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\t2. 修复 stock_margin_ratio_pa 接口\n\n1.18.10 fix: fix futures_comm_info interface\n\n\t1. 修复 futures_comm_info 接口\n\t2. 修复 index_detail_hist_cni 接口\n\n1.18.9 fix: fix fx_quote_baidu interface\n\n\t1. 修复 fx_quote_baidu 接口\n\t2. 修复 stock_zh_a_daily 接口\n\n1.18.8 fix: fix stock_zh_valuation_comparison_em interface\n\n\t1. 修复 stock_zh_valuation_comparison_em 接口\n\n1.18.7 fix: fix stock_us_valuation_baidu interface\n\n\t1. 修复 stock_us_valuation_baidu 接口\n\t2. 修复 tool_trade_date_hist_sina 接口\n\n1.18.6 fix: fix fund_fee_em interface\n\n\t1. 修复 fund_fee_em 接口\n\n1.18.5 fix: fix futures_inventory_99 interface\n\n\t1. 修复 futures_inventory_99 接口\n\t2. 修复 stock_comment_detail_scrd_desire_em 接口\n\n1.18.4 fix: fix stock_zh_a_daily interface\n\n\t1. 修复 stock_zh_a_daily 接口\n\n1.18.3 fix: fix stock_ipo_tutor_em interface\n\n\t1. 修复 stock_ipo_tutor_em 接口\n\t2. 修复 stock_ipo_review_em 接口\n\t3. 修复 stock_register_all_em 接口\n\n1.18.2 fix: fix stock_ipo_declare_em interface\n\n\t1. 修复 stock_ipo_declare_em 接口\n\n1.18.1 fix: fix stock_us_valuation_baidu interface\n\n\t1. 修复 stock_us_valuation_baidu 接口\n\n1.17.99 fix: fix stock_news_em interface\n\n\t1. 修复 stock_news_em 接口\n\n1.17.98 fix: fix stock_jgdy_tj_em interface\n\n\t1. 修复 stock_jgdy_tj_em 接口\n\t2. 修复 fund_fee_em 接口\n\n1.17.97 fix: fix stock_financial_debt_new_ths interface\n\n\t1. 修复 stock_financial_abstract_new_ths 接口\n\t2. 修复 stock_financial_debt_new_ths 接口\n\t3. 修复 stock_financial_benefit_new_ths 接口\n\t4. 修复 stock_financial_cash_new_ths 接口\n\n1.17.96 fix: fix stock_info_sh_name_code interface\n\n\t1. 修复 stock_info_sh_name_code 接口\n\t2. 修复 stock_financial_cash_ths 接口\n\t3. 修复 stock_financial_benefit_ths 接口\n\t4. 修复 stock_financial_debt_ths 接口\n\t5. 修复 stock_financial_abstract_ths 接口\n\n1.17.95 fix: fix stock_info_sh_name_code interface\n\n\t1. 修复 stock_info_sh_name_code 接口\n\t2. 修复 news_trade_notify_suspend_baidu 接口\n\t3. 修复 macro_china_shrzgm 接口\n\t4. 修复 fund_fee_em 接口\n\n1.17.94 fix: fix index_detail_cni interface\n\n\t1. 修复 index_detail_cni 接口\n\t2. 修复 stock_individual_spot_xq 接口\n\n1.17.93 fix: fix stock_news_em interface\n\n\t1. 修复 stock_news_em 接口\n\n1.17.92 fix: fix currency_boc_sina interface\n\n\t1. 修复 currency_boc_sina 接口\n\n1.17.91 fix: fix news_economic_baidu interface\n\n\t1. 修复 news_economic_baidu 接口\n\n1.17.90 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.17.89 fix: fix news_trade_notify_dividend_baidu interface\n\n\t1. 修复 news_trade_notify_dividend_baidu 接口\n\n1.17.88 fix: fix stock_zh_a_minute interface\n\n\t1. 修复 stock_zh_a_minute 接口\n\t2. 修复 futures_inventory_99 接口\n\n1.17.87 fix: fix stock_dividend_cninfo interface\n\n\t1. 修复 stock_dividend_cninfo 接口\n\t2. 修复 stock_news_em 接口\n\n1.17.86 fix: fix stock_news_em interface\n\n\t1. 修复 stock_news_em 接口\n\n1.17.85 fix: fix news_trade_notify_dividend_baidu interface\n\n\t1. 修复 news_trade_notify_dividend_baidu 接口\n\n1.17.84 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.17.83 fix: fix stock_cyq_em interface\n\n\t1. 修复 stock_cyq_em 接口\n\n1.17.82 fix: fix stock_notice_report interface\n\n\t1. 修复 stock_notice_report 接口\n\n1.17.81 fix: fix get_receipt interface\n\n\t1. 修复 get_receipt 接口\n\t2. 修复 get_rank_table_czce 接口\n\t3. 修复 futures_warehouse_receipt_czce 接口\n\n1.17.80 fix: fix futures_contract_detail_em interface\n\n\t1. 新增 futures_contract_detail_em 接口\n\t2. 新增 option_contract_info_ctp 接口\n\n1.17.79 fix: fix futures_contract_info_dce interface\n\n\t1. 修复 futures_contract_info_dce 接口\n\t2. 修复 stock_a_ttm_lyr 接口\n\n1.17.78 fix: fix update python 3.14 support\n\n\t1. 支持 Python 3.14 版本\n\n1.17.77 fix: fix get_dce_daily interface\n\n\t1. 修复 get_dce_daily 接口\n\n1.17.76 fix: fix futures_index_ccidx interface\n\n\t1. 修复 futures_index_ccidx 接口\n\n1.17.75 fix: fix stock_a_ttm_lyr interface\n\n\t1. 修复 stock_a_ttm_lyr 接口\n\n1.17.74 fix: fix futures_dce_position_rank interface\n\n\t1. 修复 futures_dce_position_rank 接口\n\n1.17.73 fix: fix get_receipt interface\n\n\t1. 修复 get_receipt 接口\n\n1.17.72 fix: fix futures_warehouse_receipt_dce interface\n\n\t1. 修复 futures_warehouse_receipt_dce 接口\n\t2. 修复 get_dce_daily 接口\n\n1.17.71 fix: fix futures_inventory_99 interface\n\n\t1. 修复 futures_inventory_99 接口\n\n1.17.70 fix: fix macro_stock_finance interface\n\n\t1. 修复 macro_stock_finance 接口\n\n1.17.69 fix: fix fund_etf_hist_sina interface\n\n\t1. 修复 fund_etf_hist_sina 接口\n\n1.17.68 fix: fix option_hist_dce interface\n\n\t1. 修复 option_hist_dce 接口\n\n1.17.67 fix: fix stock_zh_a_hist_tx interface\n\n\t1. 修复 stock_zh_a_hist_tx 接口\n\n1.17.66 fix: fix futures_delivery_czce interface\n\n\t1. 修复 futures_delivery_czce 接口\n\n1.17.65 fix: fix futures_dce_warehouse_receipt interface\n\n\t1. 修复 futures_dce_warehouse_receipt 接口\n\n1.17.64 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.17.63 fix: fix stock_financial_analysis_indicator_em interface\n\n\t1. 修复 stock_financial_analysis_indicator_em 接口\n\n1.17.62 fix: fix futures_dce_warehouse_receipt interface\n\n\t1. 修复 futures_dce_warehouse_receipt 接口\n\n1.17.61 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.17.60 fix: fix stock_intraday_sina interface\n\n\t1. 修复 stock_intraday_sina 接口\n\n1.17.59 fix: fix fx_c_swap_cm interface\n\n\t1. 修复 fx_c_swap_cm 接口\n\n1.17.58 fix: fix fund_etf_fund_daily_em interface\n\n\t1. 修复 fund_etf_fund_daily_em 接口\n\n1.17.57 fix: fix stock_szse_summary interface\n\n\t1. 修复 stock_szse_summary 接口\n\n1.17.56 fix: fix stock_balance_sheet_by_report_delisted_em interface\n\n\t1. 修复 stock_balance_sheet_by_report_delisted_em 接口\n\n1.17.55 fix: fix stock_zh_growth_comparison_em interface\n\n\t1. 修复 stock_zh_growth_comparison_em 接口\n\n1.17.54 fix: fix fund_announcement_dividend_em interface\n\n\t1. 修复 fund_announcement_dividend_em 接口\n\t2. 修复 fund_announcement_report_em 接口\n\t3. 修复 stock_buffett_index_lg 接口\n\t4. 修复 futures_inventory_99 接口\n\n1.17.53 fix: fix reits_hist_min_em interface\n\n\t1. 修复 reits_hist_min_em 接口\n\n1.17.52 fix: fix fund_overview_em interface\n\n\t1. 修复 fund_overview_em 接口\n\n1.17.51 fix: fix fund_manager_em interface\n\n\t1. 修复 fund_manager_em 接口\n\n1.17.50 fix: fix option_current_day_szse interface\n\n\t1. 修复 option_current_day_szse 接口\n\n1.17.49 fix: fix option_czce_daily interface\n\n\t1. 修复 option_czce_daily 接口\n\n1.17.48 fix: fix stock_hk_dividend_payout_em interface\n\n\t1. 修复 stock_hk_dividend_payout_em 接口\n\n1.17.47 fix: fix get_receipt interface\n\n\t1. 修复 get_receipt 接口\n\n1.17.46 fix: fix stock_financial_us_analysis_indicator_em interface\n\n\t1. 修复 stock_financial_us_analysis_indicator_em 接口\n\n1.17.45 fix: fix stock_dxsyl_em interface\n\n\t1. 修复 stock_dxsyl_em 接口\n\n1.17.44 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.17.43 fix: fix fund_rating_all interface\n\n\t1. 修复 fund_rating_all 接口\n\n1.17.42 fix: fix reits_realtime_em interface\n\n\t1. 修复 reits_realtime_em 接口\n\n1.17.41 fix: fix stock_info_global_ths interface\n\n\t1. 修复 stock_info_global_ths 接口\n\n1.17.40 fix: fix stock_gdfx_free_holding_change_em interface\n\n\t1. 修复 stock_gdfx_free_holding_change_em 接口\n\n1.17.39 fix: fix bond_zh_cov_value_analysis interface\n\n\t1. 修复 bond_zh_cov_value_analysis 接口\n\n1.17.38 fix: fix futures_inventory_99 interface\n\n\t1. 修复 futures_inventory_99 接口\n\t2. 修复 stock_individual_spot_xq 接口\n\t3. 修复 stock_financial_us_report_em 接口\n\n1.17.37 fix: fix stock_zh_index_daily_em interface\n\n\t1. 修复 stock_zh_index_daily_em 接口\n\n1.17.36 fix: fix futures_hist_em interface\n\n\t1. 修复 futures_hist_em 接口\n\t2. 修复 futures_contract_info_dce 接口\n\n1.17.35 fix: fix option_dce_daily interface\n\n\t1. 修复 option_dce_daily 接口\n\n1.17.34 fix: fix option_czce_daily interface\n\n\t1.修复 option_czce_daily 接口\n\t2.修复 futures_dce_position_rank 接口\n\n1.17.33 fix: fix stock_comment_em interface\n\n\t1. 修复 stock_comment_em 接口\n\t2. 修复 get_dce_daily 接口\n\n1.17.32 fix: fix macro_china_shrzgm interface\n\n\t1. 修复 macro_china_shrzgm 接口\n\n1.17.31 fix: fix index_neei_cx interface\n\n\t1. 修复 index_neei_cx 接口\n\n1.17.30 fix: fix get_receipt interface\n\n\t1. 修复 get_receipt 接口\n\n1.17.29 fix: fix air_quality_watch_point interface\n\n\t1. 修复 air_quality_watch_point 接口\n\n1.17.28 fix: fix stock_financial_analysis_indicator_em interface\n\n\t1. 修复 stock_financial_analysis_indicator_em 接口\n\n1.17.27 fix: fix index_csindex_all interface\n\n\t1. 修复 index_csindex_all 接口\n\n1.17.26 fix: fix stock_hot_rank_detail_em interface\n\n\t1. 修复 stock_hot_rank_detail_em 接口\n\n1.17.25 fix: fix get_receipt interface\n\n\t1. 修复 get_receipt 接口\n\n1.17.24 fix: fix futures_inventory_99 interface\n\n\t1. 修复 futures_inventory_99 接口\n\n1.17.23 fix: fix get_roll_yield interface\n\n\t1. 修复 get_roll_yield 接口\n\n1.17.22 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.17.21 fix: fix stock_sector_fund_flow_hist interface\n\n\t1. 修复 stock_sector_fund_flow_hist 接口\n\n1.17.20 fix: fix stock_news_em interface\n\n\t1. 修复 stock_news_em 接口\n\n1.17.19 fix: fix futures_spot_price_daily interface\n\n\t1. 修复 futures_spot_price_daily 接口\n\n1.17.18 fix: fix option_dce_daily interface\n\n\t1. 修复 option_dce_daily 接口\n\t2. 修复 get_futures_daily 接口\n\n1.17.17 fix: fix stock_hk_spot interface\n\n\t1. 修复 stock_hk_spot 接口\n\t2. 修复 stock_hk_spot 接口\n\n1.17.16 fix: fix bond_zh_cov interface\n\n\t1. 修复 bond_zh_cov 接口\n\n1.17.15 fix: fix stock_comment_em interface\n\n\t1. 修复 stock_comment_em 接口\n\n1.17.14 fix: fix forex_spot_em interface\n\n\t1. 修复 forex_spot_em 接口\n\n1.17.13 fix: fix futures_shfe_warehouse_receipt interface\n\n\t1. 修复 futures_shfe_warehouse_receipt 接口\n\t2. 修复 get_shfe_rank_table 接口\n\t3. 修复 stock_zh_a_gdhs_detail_em 接口\n\n1.17.12 fix: fix get_receipt interface\n\n\t1. 修复 get_receipt 接口\n\n1.17.11 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.17.10 fix: fix get_shfe_daily interface\n\n\t1. 修复 get_shfe_daily 接口\n\n1.17.9 fix: fix stock_zh_ab_comparison_em interface\n\n\t1. 修复 stock_zh_ab_comparison_em 接口\n\n1.17.8 fix: fix forex_spot_em interface\n\n\t1. 修复 forex_spot_em 接口\n\n1.17.7 fix: fix futures_spot_price_daily interface\n\n\t1. 修复 futures_spot_price_daily 接口\n\n1.17.6 fix: fix stock_tfp_em interface\n\n\t1. 修复 stock_tfp_em 接口\n\n1.17.5 fix: fix stock_us_pink_spot_em interface\n\n\t1. 修复 stock_us_pink_spot_em 接口\n\n1.17.4 fix: fix stock_news_em interface\n\n\t1. 修复 stock_news_em 接口\n\n1.17.3 fix: fix stock_hot_search_baidu interface\n\n\t1. 修复 stock_hot_search_baidu 接口\n\n1.17.2 fix: fix stock_ggcg_em interface\n\n\t1. 修复 stock_ggcg_em 接口\n\t2. 修复 futures_inventory_99 接口\n\t3. 修复 futures_contract_info_shfe 接口\n\n1.17.1 fix: fix stock_gdfx_holding_detail_em interface\n\n\t1. 修复 stock_gdfx_holding_detail_em 接口\n\t2. 修复 stock_individual_spot_xq 接口\n\t3. 修复 bond_zh_cov_value_analysis 接口\n\n1.16.99 fix: fix stock_info_sz_delist interface\n\n\t1. 修复 stock_info_sz_delist 接口\n\n1.16.98 fix: fix fund_open_fund_info_em interface\n\n\t1. 修复 fund_open_fund_info_em 接口\n\n1.16.97 fix: fix fund_open_fund_info_em interface\n\n\t1. 修复 fund_open_fund_info_em 接口\n\n1.16.96 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\t2. 修复 stock_cyq_em 接口\n\n1.16.95 fix: fix option_shfe_daily interface\n\n\t1. 修复 option_shfe_daily 接口\n\n1.16.94 fix: fix futures_fees_info interface\n\n\t1. 修复 futures_fees_info 接口\n\n1.16.93 fix: fix stock_hsgt_individual_em interface\n\n\t1. 修复 stock_hsgt_individual_em 接口\n\n1.16.92 fix: fix bond_cb_jsl interface\n\n\t1. 修复 bond_cb_jsl 接口\n\t2. 修复 stock_individual_basic_info_xq 接口\n\n1.16.91 fix: fix stock_sse_deal_daily interface\n\n\t1. 修复 stock_sse_deal_daily 接口\n\t2. 修复 stock_industry_change_cninfo 接口\n\n1.16.90 fix: fix stock_hk_company_profile_em interface\n\n\t1. 修复 stock_hk_company_profile_em 接口\n\n1.16.89 fix: fix stock_balance_sheet_by_yearly_em interface\n\n\t1. 修复 stock_balance_sheet_by_yearly_em 接口\n\n1.16.88 fix: fix futures_inventory_99 interface\n\n\t1. 修复 futures_inventory_99 接口\n\n1.16.87 fix: fix stock_zygc_em interface\n\n\t1. 修复 stock_zygc_em 接口\n\n1.16.86 fix: fix index_yw interface\n\n\t1. 修复 index_yw 接口\n\t2. 修复 stock_sse_deal_daily 接口\n\t3. 修复 stock_dividend_cninfo 接口\n\n1.16.85 fix: fix stock_dividend_cninfo interface\n\n\t1. 修复 stock_dividend_cninfo 接口\n\n1.16.84 fix: fix stock_fhps_detail_ths interface\n\n\t1. 修复 stock_fhps_detail_ths 接口\n\n1.16.83 fix: fix stock_individual_info_em interface\n\n\t1. 修复 stock_individual_info_em 接口\n\n1.16.82 fix: fix index_global_spot_em interface\n\n\t1. 修复 index_global_spot_em 接口\n\n1.16.81 fix: fix option_shfe_daily interface\n\n\t1. 修复 option_shfe_daily 接口\n\n1.16.80 fix: fix stock_zh_a_disclosure_report_cninfo interface\n\n\t1. 修复 stock_zh_a_disclosure_report_cninfo 接口\n\n1.16.79 fix: fix stock_individual_basic_info_xq interface\n\n\t1. 修复 stock_individual_basic_info_xq 接口\n\n1.16.78 fix: fix stock_zh_a_spot_em interface\n\n\t1. 修复 stock_zh_a_spot_em 接口\n\n1.16.77 add: add stock_lhb_yyb_detail_em interface\n\n\t1. 新增 stock_lhb_yyb_detail_em 接口\n\n1.16.76 fix: fix spot_quotations_sge interface\n\n\t1. 修复 spot_quotations_sge 接口\n\n1.16.75 fix: fix get_qhkc_index interface\n\n\t1. 修复 get_qhkc_index 接口\n\n1.16.74 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.16.73 fix: fix stock_board_industry_hist_em interface\n\n\t1. 修复 stock_board_industry_hist_em 接口\n\n1.16.72 add: add bond_sh_buy_back_em interface\n\n\t1. 新增 bond_sh_buy_back_em 接口\n\t2. 新增 bond_sz_buy_back_em 接口\n\t3. 新增 bond_buy_back_hist_em 接口\n\n1.16.71 add: add stock_zh_a_gbjg_em interface\n\n\t1. 修复 stock_zh_a_gbjg_em 接口\n\n1.16.70 fix: fix stock_zh_ah_spot_em interface\n\n\t1. 修复 stock_zh_ah_spot_em 接口\n\t2. 修复 stock_hsgt_sh_hk_spot_em 接口\n\n1.16.69 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.16.68 fix: fix option_dce_daily interface\n\n\t1. 修复 option_dce_daily 接口\n\t2. 修复 index_zh_a_hist_min_em 接口\n\n1.16.67 fix: fix stock_individual_basic_info_xq interface\n\n\t1. 修复 stock_individual_basic_info_xq 接口\n\n1.16.66 fix: fix macro_cons_silver interface\n\n\t1. 修复 macro_cons_silver 接口\n\n1.16.65 fix: fix stock_dzjy_yybph interface\n\n\t1. 修复 stock_dzjy_yybph 接口\n\n1.16.64 add: add reits_hist_em interface\n\n\t1. 新增 reits_hist_em 接口\n\n1.16.63 fix: fix stock_board_concept_name_ths interface\n\n\t1. 修复 stock_board_concept_name_ths 接口\n\t2. 修复 stock_financial_us_report_em 接口\n\t3. 修复 stock_financial_us_analysis_indicator_em 接口\n\n1.16.62 fix: fix stock_gdfx_free_holding_change_em interface\n\n\t1. 修复 stock_gdfx_free_holding_change_em 接口\n\n1.16.61 fix: fix stock_board_concept_index_ths interface\n\n\t1. 修复 stock_board_concept_index_ths 接口\n\n1.16.60 fix: fix stock_individual_fund_flow_rank interface\n\n\t1. 修复 stock_individual_fund_flow_rank 异步接口\n\t2. 修复 stock_board_concept_name_em 异步接口\n\n1.16.59 fix: fix option_czce_hist interface\n\n\t1. 修复 option_czce_hist 接口\n\n1.16.58 fix: fix stock_zh_a_spot interface\n\n\t1. 修复 stock_zh_a_spot 接口\n\n1.16.57 fix: fix stock_market_pe_lg interface\n\n\t1. 修复 stock_market_pe_lg 接口\n\n1.16.56 fix: fix stock_zh_a_daily interface\n\n\t1. 修复 stock_zh_a_daily 接口\n\n1.16.55 fix: fix stock_zh_a_spot_em interface\n\n\t1. 修复 stock_zh_a_spot_em 接口\n\n1.16.54 fix: fix stock_zh_a_spot_em interface\n\n\t1. 修复 stock_zh_a_spot_em 接口\n\n1.16.53 fix: fix stock_yjbb_em interface\n\n\t1. 修复 stock_yjbb_em 接口\n\t2. 修复 stock_bj_a_spot_em 接口\n\n1.16.52 fix: fix stock_zh_a_spot_em interface\n\n\t1. 修复 stock_zh_a_spot_em 接口\n\n1.16.51 fix: fix stock_individual_basic_info_xq interface\n\n\t1. 修复 stock_individual_basic_info_xq 接口\n\t2. 修复 stock_individual_basic_info_us_xq 接口\n\t3. 修复 stock_individual_basic_info_hk_xq 接口\n\t4. 修复 stock_ebs_lg 接口\n\t5. 修复 stock_zh_a_st_em 接口\n\t6. 修复 stock_zh_a_new_em 接口\n\t7. 修复 stock_zh_a_stop_em 接口\n\t8. 修复 stock_zh_a_new 接口\n\n1.16.50 fix: fix futures_inventory_99 interface\n\n\t1. 修复 futures_inventory_99 接口\n\t2. 修复 stock_individual_spot_xq 接口\n\t3. 修复 stock_fhps_em 接口\n\n1.16.49 fix: fix index_zh_a_hist_min_em interface\n\n\t1. 修复 index_zh_a_hist_min_em 接口\n\n1.16.48 fix: fix stock_individual_basic_info_xq interface\n\n\t1. 修复 stock_individual_basic_info_xq 接口\n\n1.16.47 fix: fix stock_hsgt_stock_statistics_em interface\n\n\t1. 修复 stock_hsgt_stock_statistics_em 接口\n\t2. 新增 stock_individual_basic_info_us_xq 接口\n\t3. 新增 stock_individual_basic_info_hk_xq 接口\n\t4. 新增 stock_zh_a_spot_em 异步接口\n\n1.16.46 fix: fix stock_hk_index_spot_em interface\n\n\t1. 修复 stock_hk_index_spot_em 接口\n\n1.16.45 fix: fix option_risk_analysis_em interface\n\n\t1. 修复 option_risk_analysis_em 接口\n\n1.16.44 fix: fix stock_board_concept_hist_em interface\n\n\t1. 修复 stock_board_concept_hist_em 接口\n\n1.16.43 fix: fix option_value_analysis_em interface\n\n\t1. 修复 option_value_analysis_em 接口\n\t2. 修复 option_premium_analysis_em 接口\n\t3. 修复 index_zh_a_hist 接口\n\t4. 修复 fund_lof_hist_em 接口\n\t5. 修复 fund_lof_spot_em 接口\n\n1.16.42 fix: fix stock_concept_fund_flow_hist interface\n\n\t1. 修复 stock_concept_fund_flow_hist 接口\n\t2. 修复 stock_board_industry_cons_em 接口\n\n1.16.41 fix: fix stock_individual_fund_flow_rank interface\n\n\t1. 修复 stock_individual_fund_flow_rank 接口\n\n1.16.40 add: add stock_individual_basic_info_xq interface\n\n\t1. 新增 stock_individual_basic_info_xq 接口\n\t2. 修复 stock_individual_basic_info_xq 接口\n\t3. 修复 stock_board_industry_hist_em 接口\n\n1.16.39 fix: fix option_current_em interface\n\n\t1. 修复 option_current_em 接口\n\t2. 修复 stock_hk_ggt_components_em 接口\n\n1.16.38 fix: fix fund_etf_hist_em interface\n\n\t1. 修复 fund_etf_hist_em 接口\n\t2. 修复 bond_cov_comparison 接口\n\n1.16.37 fix: fix stock_board_concept_hist_em interface\n\n\t1. 修复 stock_board_concept_hist_em 接口\n\t2. 修复 stock_zh_index_spot_em 接口\n\t3. 修复 stock_zh_a_spot_em 接口\n\n1.16.36 fix: fix stock_intraday_em interface\n\n\t1. 修复 stock_intraday_em 接口\n\n1.16.35 fix: fix futures_global_spot_em interface\n\n\t1. 修复 futures_global_spot_em 接口\n\t2. 修复 stock_hsgt_sh_hk_spot_em 接口\n\n1.16.34 fix: fix stock_individual_fund_flow_rank interface\n\n\t1. 修复 stock_individual_fund_flow_rank 接口\n\n1.16.33 fix: fix fund_open_fund_daily_em interface\n\n\t1. 修复 fund_open_fund_daily_em 接口\n\t2. 修复 stock_zh_a_spot_em 接口\n\t3. 修复 stock_zh_a_hist 接口\n\t4. 修复 stock_zh_a_hist_min_em 接口\n\t5. 修复 stock_zh_a_hist_pre_min_em 接口\n\t6. 修复 stock_bid_ask_em 接口\n\t7. 修复 stock_individual_info_em 接口\n\n1.16.32 fix: fix news_economic_baidu interface\n\n\t1. 修复 news_economic_baidu 接口\n\t2. 修复 news_trade_notify_suspend_baidu 接口\n\t3. 修复 news_trade_notify_dividend_baidu 接口\n\t4. 修复 news_report_time_baidu 接口\n\n1.16.31 add: add index_global_hist_em interface\n\n\t1. 新增 index_global_hist_em 接口\n\t2. 新增 index_global_spot_em 接口\n\t3. 新增 index_global_name_table 接口\n\t4. 新增 index_global_hist_sina 接口\n\n1.16.30 add: add forex_hist_em interface\n\n\t1. 新增 forex_hist_em 接口\n\t2. 新增 forex_hist_em 接口\n\n1.16.29 fix: fix futures_global_hist_em interface\n\n\t1. 修复 futures_global_hist_em 接口\n\t2. 修改 futures_global_spot_em 接口\n\n1.16.28 fix: fix futures_global_hist_em interface\n\n\t1. 修复 futures_global_hist_em 接口\n\n1.16.27 fix: fix futures_global_em interface\n\n\t1. 修复 futures_global_em 接口\n\t2. 修复 futures_foreign_commodity_realtime 接口\n\t3. 修复 futures_foreign_hist 接口\n\t4. 修复 futures_inventory_99 接口\n\t5. 修复 futures_inventory_em 接口\n\t6. 修复 futures_hold_pos_sina 接口\n\n1.16.26 add: add stock_hsgt_sh_hk_spot_em interface\n\n\t1. 新增 stock_hsgt_sh_hk_spot_em 接口\n\t2. 新增 stock_zh_ah_spot_em 接口\n\n1.16.25 fix: fix stock_financial_abstract_ths interface\n\n\t1. 修复 stock_financial_abstract_ths 接口\n\n1.16.24 fix: fix stock_financial_hk_report_em interface\n\n\t1. 修复 stock_financial_hk_report_em 接口\n\t2. 新增 stock_financial_us_report_em 接口\n\t3. 新增 stock_financial_us_analysis_indicator_em 接口\n\n1.16.23 fix: fix stock_board_industry_cons_em interface\n\n\t1. 修复 stock_board_industry_cons_em 接口\n\t2. 修复 stock_board_concept_cons_em 接口\n\n1.16.22 fix: fix fund_money_fund_info_em interface\n\n\t1. 修复 fund_money_fund_info_em 接口\n\t2. 修复 fund_graded_fund_info_em 接口\n\n1.16.21 fix: fix stock_hk_index_daily_em interface\n\n\t1. 修复 stock_hk_index_daily_em 接口\n\t2. 修复 stock_individual_spot_xq 接口\n\n1.16.20 fix: fix stock_lhb_detail_em interface\n\n\t1. 修复 stock_lhb_detail_em 接口\n\t2. 修复 stock_sse_deal_daily 接口\n\n1.16.19 fix: fix stock_profit_forecast_ths interface\n\n\t1. 修复 stock_profit_forecast_ths 接口\n\n1.16.18 fix: fix stock_board_concept_spot_em interface\n\n\t1. 修复 stock_board_concept_spot_em 接口\n\t2. 修复 stock_board_industry_spot_em 接口\n\n1.16.17 fix: fix stock_research_report_em interface\n\n\t1. 修复 stock_research_report_em 接口\n\t2. 修复 stock_board_industry_name_em 接口\n\t3. 新增 stock_board_concept_index_ths 接口\n\n1.16.16 fix: fix stock_board_concept_spot_em interface\n\n\t1. 修复 stock_board_concept_spot_em 接口\n\t2. 修复 futures_inventory_em 接口\n\n1.16.15 fix: fix stock_board_concept_name_em interface\n\n\t1. 修复 stock_board_concept_name_em 接口\n\n1.16.14 fix: fix stock_info_global_cls interface\n\n\t1. 修复 stock_info_global_cls 接口\n\n1.16.13 fix: fix futures_inventory_99 interface\n\n\t1. 修复 futures_inventory_99 接口\n\n1.16.12 fix: fix bond_zh_hs_cov_daily interface\n\n\t1. 修复 bond_zh_hs_cov_daily 接口\n\t2. 修复 reits_realtime_em 接口\n\t3. 修复 stock_staq_net_stop 接口\n\n1.16.11 fix: fix stock_intraday_em interface\n\n\t1. 修复 stock_intraday_em 接口\n\t2. 修复 stock_hk_famous_spot_em 接口\n\t3. 修复 stock_new_a_spot_em 接口\n\t4. 修复 stock_us_famous_spot_em 接口\n\t5. 修复 index_zh_a_hist_min_em 接口\n\n1.16.10 fix: fix option_risk_analysis_em interface\n\n\t1. 修复 option_risk_analysis_em 接口\n\t2. 修复 option_value_analysis_em 接口\n\t3. 修复 option_premium_analysis_em 接口\n\n1.16.9 fix: fix stock_sse_deal_daily interface\n\n\t1. 修复 stock_sse_deal_daily 接口\n\n1.16.8 fix: fix option_czce_daily interface\n\n\t1. 修复 option_czce_daily 接口\n\n1.16.7 fix: fix fund_lof_hist_em interface\n\n\t1. 修复 fund_lof_hist_em 接口\n\t2. 修复 fund_etf_spot_em 接口\n\t3. 修复 stock_us_pink_spot_em 接口\n\t4. 修复 futures_hist_em 接口\n\n1.16.6 fix: fix stock_sgt_reference_exchange_rate_sse interface\n\n\t1. 修复 stock_sgt_reference_exchange_rate_sse 接口\n\n1.16.5 fix: fix stock_sector_fund_flow_rank interface\n\n\t1. 修复 stock_sector_fund_flow_rank 接口\n\n1.16.4 fix: fix stock_hk_ggt_components_em interface\n\n\t1. 修复 stock_hk_ggt_components_em 接口\n\t2. 修复 option_current_em 接口\n\t3. 修复 stock_board_concept_name_em 接口\n\t4. 修复 stock_hk_spot 接口\n\t5. 修复 stock_hk_index_daily_em 接口\n\n1.16.3 fix: fix stock_zh_index_spot_em interface\n\n\t1. 修复 stock_zh_index_spot_em 接口\n\n1.16.2 fix: fix stock_board_industry_hist_em interface\n\n\t1. 修复 stock_board_industry_hist_em 接口\n\n1.16.1 fix: fix stock_main_fund_flow interface\n\n\t1. 修复 stock_main_fund_flow 接口\n\t2. 修复 stock_individual_spot_xq 接口\n\n1.15.99 fix: fix stock_esg_zd_sina interface\n\n\t1. 修复 stock_esg_zd_sina 接口\n\n1.15.98 fix: fix stock_board_concept_name_em interface\n\n\t1. 修复 stock_board_concept_name_em 接口\n\t2. 修复 stock_concept_fund_flow_hist 接口\n\t3. 修复 stock_bj_a_spot_em 接口\n\n1.15.97 fix: fix stock_intraday_em interface\n\n\t1. 修复 stock_intraday_em 接口\n\t2. 修复 stock_sh_a_spot_em 接口\n\t3. 修复 stock_sz_a_spot_em 接口\n\t4. 修复 index_code_id_map_em 接口\n\n1.15.96 fix: fix bond_cov_comparison interface\n\n\t1. 修复 bond_cov_comparison 接口\n\t2. 修复 stock_bid_ask_em 接口\n\t3. 修复 stock_hk_spot_em 接口\n\n1.15.95 fix: fix stock_us_spot_em interface\n\n\t1. 修复 stock_us_spot_em 接口\n\n1.15.94 fix: fix stock_zh_index_spot_em interface\n\n\t1. 修复 stock_zh_index_spot_em 接口\n\t2. 修复 index_zh_a_hist_min_em 接口\n\n1.15.93 fix: fix fund_etf_spot_em interface\n\n\t1. 修复 fund_etf_spot_em 接口\n\n1.15.92 fix: fix stock_main_fund_flow interface\n\n\t1. 修复 stock_main_fund_flow 接口\n\t2. 修复 stock_individual_fund_flow_rank 接口\n\n1.15.91 fix: fix stock_board_concept_cons_em interface\n\n\t1. 修复 stock_board_concept_cons_em 接口\n\t2. 修复 futures_inventory_99 接口\n\n1.15.90 fix: fix stock_financial_analysis_indicator interface\n\n\t1. 修复 stock_financial_analysis_indicator 接口\n\n1.15.89 fix: fix stock_individual_info_em interface\n\n\t1. 修复 stock_individual_info_em 接口\n\t2. 修复 _fund_etf_code_id_map_em 接口\n\n1.15.88 fix: fix stock_zh_a_spot_em interface\n\n\t1. 修复 stock_zh_a_spot_em 接口\n\t2. 修复 code_id_map_em 接口\n\n1.15.87 fix: fix futures_index_ccidx interface\n\n\t1. 修复 futures_index_ccidx 接口\n\n1.15.86 fix: fix stock_zdhtmx_em interface\n\n\t1. 修复 stock_zdhtmx_em 接口\n\n1.15.85 fix: fix stock_gddh_em interface\n\n\t1. 修复 stock_gddh_em 接口\n\t2. 修复 option_dce_daily 接口\n\n1.15.84 fix: fix option_dce_daily interface\n\n\t1. 修复 option_dce_daily 接口\n\n1.15.83 fix: fix stock_szse_sector_summary interface\n\n\t1. 修复 stock_szse_sector_summary 接口\n\n1.15.82 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\t2. 修复 stock_szse_area_summary 接口\n\n1.15.81 fix: fix bank_fjcf_table_detail interface\n\n\t1. 修复 bank_fjcf_table_detail 接口\n\n1.15.80 fix: fix option_gfex_vol_daily interface\n\n\t1. 修复 option_gfex_vol_daily 接口\n\t2. 修复 option_czce_daily 接口\n\n1.15.79 fix: fix stock_new_a_spot_em interface\n\n\t1. 修复 stock_new_a_spot_em 接口\n\n1.15.78 fix: fix stock_yzxdr_em interface\n\n\t1. 修复 stock_yzxdr_em 接口\n\n1.15.77 fix: fix option_czce_daily interface\n\n\t1. 修复 option_czce_daily 接口\n\n1.15.76 fix: fix futures_zh_minute_sina interface\n\n\t1. 修复 futures_zh_minute_sina 接口\n\n1.15.75 feat: add futures_hist_em interface\n\n\t1. 新增 futures_hist_em 接口\n\n1.15.74 fix: fix macro_australia_retail_rate_monthly interface\n\n\t1. 修复 macro_australia_retail_rate_monthly 接口\n\t2. 修复 index_option_50etf_qvix 接口\n\n1.15.73 fix: fix stock_dzjy_hygtj interface\n\n\t1. 修复 stock_dzjy_hygtj 接口\n\n1.15.72 fix: fix stock_us_spot interface\n\n\t1. 修复 stock_us_spot 接口\n\n1.15.71 fix: fix stock_dzjy_sctj interface\n\n\t1. 修复 stock_dzjy_sctj 接口\n\n1.15.70 fix: fix stock_research_report_em interface\n\n\t1. 修复 stock_research_report_em 接口\n\n1.15.69 fix: fix index_zh_a_hist_min_em interface\n\n\t1. 修复 index_zh_a_hist_min_em 接口\n\t2. 修复 futures_gfex_position_rank 接口\n\n1.15.68 fix: fix stock_research_report_em interface\n\n\t1. 修复 stock_research_report_em 接口\n\n1.15.67 fix: fix stock_hold_change_cninfo interface\n\n\t1. 修复 stock_hold_change_cninfo 接口\n\n1.15.66 fix: fix fund_etf_dividend_sina interface\n\n\t1. 修复 fund_etf_dividend_sina 接口\n\n1.15.65 fix: fix option_czce_daily interface\n\n\t1. 修复 option_czce_daily 接口\n\t2. 新增 fund_fee_em 接口\n\n1.15.64 fix: fix stock_zh_index_value_csindex interface\n\n\t1. 修复 stock_zh_index_value_csindex 接口\n\t2. 修复 index_stock_cons_csindex 接口\n\t3. 修复 index_stock_cons_weight_csindex 接口\n\n1.15.63 fix: fix stock_financial_abstract interface\n\n\t1. 修复 stock_financial_abstract 接口\n\t2. 修复 stock_financial_report_sina 接口\n\n1.15.62 fix: fix stock_zt_pool_sub_new_em interface\n\n\t1. 修复 stock_zt_pool_sub_new_em 接口\n\n1.15.61 fix: fix stock_zt_pool_strong_em interface\n\n\t1. 修复 stock_zt_pool_strong_em 接口\n\t2. 新增 index_option_1000index_min_qvix 接口\n\t3. 新增 index_option_1000index_qvix 接口\n\t4. 新增 index_option_100etf_min_qvix 接口\n\t5. 新增 index_option_100etf_qvix 接口\n\t6. 新增 index_option_300index_min_qvix 接口\n\t7. 新增 index_option_300index_qvix 接口\n\t8. 新增 index_option_500etf_min_qvix 接口\n\t9. 新增 index_option_500etf_qvix 接口\n\t10. 新增 index_option_50index_min_qvix 接口\n\t11. 新增 index_option_50index_qvix 接口\n\t12. 新增 index_option_cyb_min_qvix 接口\n\t13. 新增 index_option_cyb_qvix 接口\n\t14. 新增 index_option_kcb_min_qvix 接口\n\t15. 新增 index_option_kcb_qvix 接口\n\n1.15.60 fix: fix stock_hot_keyword_em interface\n\n\t1. 修复 stock_hot_keyword_em 接口\n\n1.15.59 fix: fix stock_sy_hy_em interface\n\n\t1. 修复 stock_sy_hy_em 接口\n\n1.15.58 fix: fix futures_hold_pos_sina interface\n\n\t1. 修复 futures_hold_pos_sina 接口\n\n1.15.57 fix: fix add 2025 trade date\n\n\t1. 新增 2025 年交易日历\n\n1.15.56 fix: fix spot_goods interface\n\n\t1. 修复 spot_goods 接口\n\t2. 修复 futures_news_shmet 接口\n\n1.15.55 fix: fix fund_etf_spot_em interface\n\n\t1. 修复 fund_etf_spot_em 接口\n\n1.15.54 fix: fix stock_sy_profile_em interface\n\n\t1. 修复 stock_sy_profile_em 接口\n\n1.15.53 fix: fix futures_inventory_99 interface\n\n\t1. 修复 futures_inventory_99 接口\n\n1.15.52 fix: fix stock_zh_index_hist_csindex interface\n\n\t1. 修复 stock_zh_index_hist_csindex 接口\n\t2. 移除 funddb 相关接口\n\n1.15.51 fix: fix stock_gpzy_pledge_ratio_em interface\n\n\t1. 修复 stock_gpzy_pledge_ratio_em 接口\n\n1.15.50 fix: fix stock_gpzy_profile_em interface\n\n\t1. 修复 stock_gpzy_profile_em 接口\n\t2. 修复 stock_individual_spot_xq 接口\n\n1.15.49 fix: fix option_dce_daily interface\n\n\t1. 修复 option_dce_daily 接口\n\n1.15.48 fix: fix stock_mda_ym interface\n\n\t1. 修复 stock_mda_ym 接口\n\n1.15.47 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.15.46 fix: fix fund_etf_fund_info_em interface\n\n\t1. 修复 fund_etf_fund_info_em 接口\n\n1.15.45 fix: fix stock_jgdy_detail_em interface\n\n\t1. 修复 stock_jgdy_detail_em 接口\n\t2. 修复 stock_gdfx_free_top_10_em 接口\n\n1.15.44 fix: fix index_detail_hist_adjust_cni interface\n\n\t1. 修复 index_detail_hist_adjust_cni 接口\n\t2. 移除 英为财情 相关接口\n\n1.15.43 fix: fix macro_china_urban_unemployment interface\n\n\t1. 修复 macro_china_urban_unemployment 接口\n\n1.15.42 fix: fix get_roll_yield_bar interface\n\n\t1. 修复 get_roll_yield_bar 接口\n\n1.15.41 fix: fix macro_china_fdi interface\n\n\t1. 修复 macro_china_fdi 接口\n\n1.15.40 fix: fix macro_china_fdi interface\n\n\t1. 修复 macro_china_fdi 接口\n\n1.15.39 fix: fix macro_china_new_house_price interface\n\n\t1. 修复 macro_china_new_house_price 接口\n\n1.15.38 fix: fix futures_contract_info_ine interface\n\n\t1. 修复 futures_contract_info_ine 接口\n\t2. 修复 get_ine_daily 接口\n\n1.15.37 fix: fix stock_individual_spot_xq interface\n\n\t1. 修复 stock_individual_spot_xq 接口\n\n1.15.36 fix: fix futures_global_em interface\n\n\t1. 修复 futures_global_em 接口\n\n1.15.35 fix: fix futures_spot_price_daily interface\n\n\t1. 修复 futures_spot_price_daily 接口\n\t2. 修复 futures_global_em 接口\n\n1.15.34 fix: fix fund_open_fund_rank_em interface\n\n\t1. 修复 fund_open_fund_rank_em 接口\n\t2. 移除 crypto_hist 接口\n\n1.15.33 add: add stock_value_em interface\n\n\t1. 修复 stock_value_em 接口\n\n1.15.32 fix: fix stock_info_global_cls interface\n\n    1. 修复 stock_info_global_cls 接口\n\n1.15.31 fix: fix stock_zt_pool_strong_em interface\n\n    1. 修复 stock_zt_pool_strong_em 接口\n    2. 修复 stock_zt_pool_sub_new_em 接口\n    3. 修复 stock_zt_pool_zbgc_em 接口\n\n1.15.30 fix: fix fund_etf_category_sina interface\n\n    1. 修复 fund_etf_category_sina 接口\n    2. 修复 fund_etf_hist_sina 接口\n    3. 修复 stock_zh_b_daily 接口\n\n1.15.29 fix: fix option_dce_daily interface\n\n    1. 修复 option_dce_daily 接口\n\n1.15.28 fix: fix stock_hk_valuation_baidu interface\n\n    1. 修复 stock_hk_valuation_baidu 接口\n    2. 修复 sw_index_second_info 接口\n\n1.15.27 fix: fix stock_zh_index_spot_em interface\n\n    1. 修复 stock_zh_index_spot_em 接口\n\n1.15.26 fix: fix option_dce_daily interface\n\n    1. 修复 option_dce_daily 接口\n\n1.15.25 fix: fix stock_news_main_cx interface\n\n    1. 修复 stock_news_main_cx 接口\n\n1.15.24 fix: fix get_dce_daily interface\n\n    1. 修复 get_dce_daily 接口\n\n1.15.23 fix: fix stock_sector_fund_flow_summary interface\n\n    1. 修复 stock_sector_fund_flow_summary 接口\n\n1.15.22 fix: fix air_quality_hebei interface\n\n    1. 修复 air_quality_hebei 接口\n\n1.15.21 fix: fix get_futures_daily interface\n\n    1. 修复 get_futures_daily 接口\n\n1.15.20 fix: fix rv_from_stock_zh_a_hist_min_em interface\n\n    1. 修复 rv_from_stock_zh_a_hist_min_em 接口\n\n1.15.19 fix: fix stock_share_hold_change_szse interface\n\n    1. 修复 stock_share_hold_change_szse 接口\n\n1.15.18 fix: fix stock_share_hold_change_sse interface\n\n    1. 修复 stock_share_hold_change_sse 接口\n\n1.15.17 fix: fix news_trade_notify_dividend_baidu interface\n\n    1. 修复 news_trade_notify_dividend_baidu 接口\n\n1.15.16 fix: fix macro_bank_usa_interest_rate interface\n\n    1. 修复 macro_bank_usa_interest_rate 接口\n\n1.15.15 add: add macro_bank_china_interest_rate interface\n\n    1. 新增 macro_bank_china_interest_rate 接口\n\n1.15.14 fix: fix macro_bank_usa_interest_rate interface\n\n    1. 修复 macro_bank_usa_interest_rate 接口\n    2. 修复 macro_bank_euro_interest_rate 接口\n    3. 修复 macro_bank_newzealand_interest_rate 接口\n    4. 修复 macro_bank_switzerland_interest_rate 接口\n    5. 修复 macro_bank_english_interest_rate 接口\n    6. 修复 macro_bank_australia_interest_rate 接口\n    7. 修复 macro_bank_japan_interest_rate 接口\n    8. 修复 macro_bank_russia_interest_rate 接口\n    9. 修复 macro_bank_india_interest_rate 接口\n    10. 修复 macro_bank_brazil_interest_rate 接口\n    11. 修复 index_value_hist_funddb 接口\n\n1.15.13 fix: fix stock_inner_trade_xq interface\n\n    1. 修复 stock_inner_trade_xq 接口\n    2. 新增 stock_management_change_ths 接口\n\n1.15.12 fix: fix stock_shareholder_change_ths interface\n\n    1. 修复 stock_shareholder_change_ths 接口\n\n1.15.11 fix: fix stock_individual_spot_xq interface\n\n    1. 修复 stock_individual_spot_xq 接口\n    2. 新增 stock_shareholder_change_ths 接口\n\n1.15.10 add: add volatility_yz_rv indicator\n\n    1. 新增 volatility_yz_rv 指标\n\n1.15.9 fix: fix index_analysis_weekly_sw interface\n\n    1. 修复 index_analysis_weekly_sw 接口\n\n1.15.8 fix: fix fund_individual_basic_info_xq interface\n\n    1. 修复 fund_individual_basic_info_xq 接口\n\n1.15.7 fix: fix index_hist_sw interface\n\n    1. 修复 index_hist_sw 接口\n\n1.15.6 fix: fix qdii_e_index_jsl interface\n\n    1. 修复 qdii_e_index_jsl 接口\n\n1.15.5 fix: fix stock_individual_spot_xq interface\n\n    1. 修复 stock_individual_spot_xq 接口\n\n1.15.4 fix: fix stock_allotment_cninfo interface\n\n    1. 修复 stock_allotment_cninfo 接口\n\n1.15.3 fix: fix stock_share_change_cninfo interface\n\n    1. 修复 stock_share_change_cninfo 接口\n\n1.15.2 fix: fix stock_index_pe_lg interface\n\n    1. 修复 stock_index_pe_lg 接口\n\n1.15.1 fix: fix stock_a_all_pb interface\n\n    1. 修复 stock_a_all_pb 接口\n\n1.14.99 fix: fix stock_a_ttm_lyr interface\n\n    1. 修复 stock_a_ttm_lyr 接口\n\n1.14.98 fix: fix futures_hold_pos_sina interface\n\n    1. 修复 futures_hold_pos_sina 接口\n\n1.14.97 fix: fix stock_profile_cninfo interface\n\n    1. 修复 stock_profile_cninfo 接口\n    2. 移除南华指数相关接口\n\n1.14.96 fix: fix stock_zt_pool_sub_new_em interface\n\n    1. 修复 stock_zt_pool_sub_new_em 接口\n    2. 修复 stock_individual_spot_xq 接口\n    3. 新增 stock_xgsr_ths 接口\n\n1.14.95 fix: fix stock_zt_pool_sub_new_em interface\n\n    1. 修复 stock_zt_pool_sub_new_em 接口\n\n1.14.94 fix: fix stock_zt_pool_strong_em interface\n\n    1. 修复 stock_zt_pool_strong_em 接口\n\n1.14.93 fix: fix stock_zt_pool_em interface\n\n    1. 修复 stock_zt_pool_em 接口\n\n1.14.92 add: add qdii_a_index_jsl interface\n\n    1. 新增 qdii_a_index_jsl 接口\n    2. 新增 qdii_e_index_jsl 接口\n    3. 新增 qdii_e_comm_jsl 接口\n    4. 修复 stock_individual_spot_xq 接口\n    5. 修复 option_czce_daily 接口\n\n1.14.91 fix: fix stock_history_dividend interface\n\n    1. 修复 stock_history_dividend 接口\n\n1.14.90 fix: fix stock_board_change_em interface\n\n    1. 修复 stock_board_change_em 接口\n\n1.14.89 fix: fix bond_spot_deal interface\n\n    1. 修复 bond_spot_deal 接口\n    2. 修复 fund_open_fund_info_em 接口\n\n1.14.88 fix: fix stock_hot_rank_relate_em interface\n\n    1. 修复 stock_hot_rank_relate_em 接口\n\n1.14.87 fix: fix stock_hot_search_baidu interface\n\n    1. 修复 stock_hot_search_baidu 接口\n\n1.14.86 fix: fix stock_comment_detail_scrd_focus_em interface\n\n    1. 修复 stock_comment_detail_scrd_focus_em 接口\n\n1.14.85 fix: fix stock_profit_forecast_em interface\n\n    1. 修复 stock_profit_forecast_em 接口\n\n1.14.84 fix: fix drewry_wci_index interface\n\n    1. 修复 drewry_wci_index 接口\n\n1.14.83 fix: fix stock_comment_detail_zhpj_lspf_em interface\n\n    1. 修复 stock_comment_detail_zhpj_lspf_em 接口\n\n1.14.82 fix: fix stock_comment_detail_scrd_desire_daily_em interface\n\n    1. 修复 stock_comment_detail_scrd_desire_daily_em 接口\n\n1.14.81 fix: fix stock_hsgt_hist_em interface\n\n    1. 修复 stock_hsgt_hist_em 接口\n\n1.14.80 fix: fix stock_hot_rank_wc interface\n\n    1. 修复 stock_hot_rank_wc 接口\n\n1.14.79 add: add stock_zcfz_bj_em interface\n\n    1. 新增 stock_zcfz_bj_em 接口\n\n1.14.78 fix: fix stock_analyst_rank_em interface\n\n    1. 修复 stock_analyst_rank_em 接口\n    2. 修复 stock_individual_spot_xq 接口\n\n1.14.77 fix: fix stock_zh_b_daily interface\n\n    1. 修复 stock_zh_b_daily 接口\n\n1.14.76 fix: fix stock_sy_em interface\n\n    1. 修复 stock_sy_em 接口\n\n1.14.75 fix: fix stock_sy_hy_em interface\n\n    1. 修复 stock_sy_hy_em 接口\n\n1.14.74 fix: fix stock_gpzy_pledge_ratio_em interface\n\n    1. 修复 stock_gpzy_pledge_ratio_em 接口\n\n1.14.73 fix: fix stock_gpzy_profile_em interface\n\n    1. 修复 stock_gpzy_profile_em 接口\n\n1.14.72 fix: fix fund_etf_hist_min_em interface\n\n    1. 修复 fund_etf_hist_min_em 接口\n    2. 修复 stock_individual_spot_xq 接口\n\n1.14.71 fix: fix stock_mda_ym interface\n\n    1. 修复 stock_mda_ym 接口\n\n1.14.70 fix: fix setup.py\n\n    1. 修复 setup.py\n\n1.14.69 fix: fix stock_zygc_ym interface\n\n    1. 修复 stock_zygc_ym 接口\n\n1.14.68 fix: fix fund_scale_open_sina interface\n\n    1. 修复 fund_scale_open_sina 接口\n    2. 修复 stock_szse_summary 接口\n\n1.14.67 fix: fix futures_foreign_commodity_realtime interface\n\n    1. 修复 futures_foreign_commodity_realtime 接口\n\n1.14.66 fix: fix stock_profit_forecast_ths interface\n\n    1. 修复 stock_profit_forecast_ths 接口\n    2. 修复 stock_rank_forecast_cninfo 接口\n\n1.14.65 fix: fix option_dce_daily interface\n\n    1. 修复 option_dce_daily 接口\n\n1.14.64 fix: fix stock_board_industry_spot_em interface\n\n    1. 修复 stock_board_industry_spot_em 接口\n\n1.14.63 add: add spot_quotations_sge interface\n\n    1. 新增 spot_quotations_sge 接口\n\n1.14.62 fix: fix stock_zt_pool_em interface\n\n    1. 修复 stock_zt_pool_em 接口\n\n1.14.61 fix: fix stock_fund_flow_individual interface\n\n    1. 修复 stock_fund_flow_individual 接口\n\n1.14.60 fix: fix bond_zh_cov_info_ths interface\n\n    1. 修复 bond_zh_cov_info_ths 接口\n\n1.14.59 fix: fix macro_cnbs interface\n\n    1. 修复 macro_cnbs 接口\n\n1.14.58 add: add spot_mixed_feed_soozhu interface\n\n    1. 新增 spot_mixed_feed_soozhu 接口\n\n1.14.57 add: add spot_soybean_price_soozhu interface\n\n    1. 新增 spot_soybean_price_soozhu 接口\n\n1.14.56 add: add spot_corn_price_soozhu interface\n\n    1. 新增 spot_corn_price_soozhu 接口\n\n1.14.55 add: add spot_hog_crossbred_soozhu interface\n\n    1. 新增 spot_hog_crossbred_soozhu 接口\n\n1.14.54 fix: fix stock_individual_info_em interface\n\n    1. 修复 stock_individual_info_em 接口\n    2. 修复 stock_zt_pool_em 接口\n\n1.14.53 add: add spot_hog_three_way_soozhu interface\n\n    1. 新增 spot_hog_three_way_soozhu 接口\n\n1.14.52 fix: fix stock_esg_hz_sina interface\n\n    1. 修复 stock_esg_hz_sina 接口\n\n1.14.51 add: add stock_news_main_cx interface\n\n    1. 新增 stock_news_main_cx 接口\n\n1.14.50 add: add spot_hog_lean_price_soozhu interface\n\n    1. 新增 spot_hog_lean_price_soozhu 接口\n\n1.14.49 fix: fix fortune_rank interface\n\n    1. 修复 fortune_rank 接口\n    2. 修复 car_market_fuel_cpca 接口\n\n1.14.48 add: add spot_hog_year_trend_soozhu interface\n\n    1. 新增 spot_hog_year_trend_soozhu 接口\n\n1.14.47 fix: fix spot_hog_soozhu interface\n\n    1. 修复 spot_hog_soozhu 接口\n\n1.14.46 add: add spot_hog_soozhu interface\n\n    1. 新增 spot_hog_soozhu 接口\n\n1.14.45 fix: fix option_lhb_em interface\n\n    1. 修复 option_lhb_em 接口\n\n1.14.44 fix: fix stock_hk_famous_spot_em interface\n\n    1. 修复 stock_hk_famous_spot_em 接口\n\n1.14.43 fix: fix stock_share_change_cninfo interface\n\n    1. 修复 stock_share_change_cninfo 接口\n\n1.14.42 fix: fix stock_new_gh_cninfo interface\n\n    1. 修复 stock_new_gh_cninfo 接口\n    2. 修复 stock_new_ipo_cninfo 接口\n\n1.14.41 fix: fix fund_report_asset_allocation_cninfo interface\n\n    1. 修复 fund_report_asset_allocation_cninfo 接口\n    2. 修复 stock_cg_equity_mortgage_cninfo 接口\n    3. 修复 stock_hold_control_cninfo 接口\n    4. 修复 stock_hold_num_cninfo 接口\n\n1.14.40 fix: fix fund_open_fund_rank_em interface\n\n    1. 修复 fund_open_fund_rank_em 接口\n    2. 新增 stock_us_famous_spot_em 接口\n\n1.14.39 fix: fix stock_zh_b_daily interface\n\n    1. 修复 stock_zh_b_daily 接口\n    2. 修复 stock_zh_b_minute 接口\n\n1.14.38 fix: fix stock_industry_clf_hist_sw interface\n\n    1. 修复 stock_industry_clf_hist_sw 接口\n\n1.14.37 fix: fix stock_zh_kcb_report_em interface\n\n    1. 修复 stock_zh_kcb_report_em 接口\n    2. 修复 stock_board_industry_index_ths 接口\n\n1.14.36 fix: fix option_czce_daily interface\n\n    1. 修复 option_czce_daily 接口\n    2. 修复 stock_board_industry_name_ths 接口\n\n1.14.35 add: add macro_rmb_deposit interface\n\n    1. 新增 macro_rmb_deposit 接口\n\n1.14.34 fix: fix macro_rmb_loan interface\n\n    1. 新增 macro_rmb_loan 接口\n\n1.14.33 fix: fix stock_concept_cons_futu interface\n\n    1. 修复 stock_concept_cons_futu 接口\n    2. 修复 stock_board_industry_index_ths 接口\n\n1.14.32 add: add stock_concept_cons_futu interface\n\n    1. 新增 stock_concept_cons_futu 接口\n\n1.14.31 fix: fix option_shfe_daily interface\n\n    1. 修复 option_shfe_daily 接口\n    2. 修复 stock_esg_msci_sina 接口\n\n1.14.30 fix: fix stock_us_hist_min_em interface\n\n    1. 修复 stock_us_hist_min_em 接口\n\n1.14.29 fix: fix stock_individual_spot_xq interface\n\n    1. 修复 stock_individual_spot_xq 接口\n\n1.14.28 fix: fix news_trade_notify_dividend_baidu interface\n\n    1. 修复 news_trade_notify_dividend_baidu 接口\n\n1.14.27 fix: fix nlp_ownthink interface\n\n    1. 修复 nlp_ownthink 接口\n\n1.14.26 fix: fix futures_fees_info interface\n\n    1. 修复 futures_fees_info 接口\n\n1.14.25 add: add option_comm_info interface\n\n    1. 新增 option_comm_info 接口\n    2. 新增 option_comm_symbol 接口\n    3. 修复 futures_fees_info 接口\n\n1.14.24 fix: fix macro_china_bond_public interface\n\n    1. 修复 macro_china_bond_public 接口\n    2. 修复 option_daily_stats_sse 接口\n\n1.14.23 fix: fix macro_china_nbs_nation interface\n\n    1. 修复 macro_china_nbs_nation 接口\n\n1.14.22 fix: fix macro_china_nbs_nation interface\n\n    1. 修复 macro_china_nbs_nation 接口\n\n1.14.21 fix: fix stock_info_global_cls interface\n\n    1. 修复 stock_info_global_cls 接口\n\n1.14.20 fix: fix option_risk_indicator_sse interface\n\n    1. 修复 option_risk_indicator_sse 接口\n    2. 新增 option_daily_stats_sse 接口\n    3. 新增 option_daily_stats_szse 接口\n\n1.14.19 fix: fix bond_china_close_return interface\n\n    1. 修复 bond_china_close_return 接口\n\n1.14.18 fix: fix currency_pair_map interface\n\n    1. 修复 currency_pair_map 接口\n\n1.14.17 fix: fix stock_board_industry_summary_ths interface\n\n    1. 修复 stock_board_industry_summary_ths 接口\n    2. 移除 stock_board_concept_name_ths 接口\n    3. 移除 stock_board_concept_graph_ths 接口\n    4. 移除 stock_board_concept_name_ths 接口\n    5. 移除 stock_board_concept_cons_ths 接口\n    5. 移除 stock_board_concept_info_ths 接口\n    5. 移除 stock_board_concept_hist_ths 接口\n    5. 移除 stock_board_cons_ths 接口\n\n1.14.16 fix: fix index_hist_sw interface\n\n    1. 修复 index_hist_sw 接口\n\n1.14.15 fix: fix energy_carbon_domestic interface\n\n    1. 修复 energy_carbon_domestic 接口\n\n1.14.14 fix: fix option_shfe_daily interface\n\n    1. 修复 option_shfe_daily 接口\n\n1.14.13 fix: fix option_minute_em interface\n\n    1. 修复 option_minute_em 接口\n\n1.14.12 fix: fix get_tqdm function\n\n    1. 修复 get_tqdm 函数\n    2. 新增 fund_etf_spot_ths 接口\n\n1.14.11 fix: fix bond_treasure_issue_cninfo interface\n\n    1. 修复 bond_treasure_issue_cninfo 接口\n\n1.14.10 fix: fix bond_cov_issue_cninfo interface\n\n    1. 修复 bond_cov_issue_cninfo 接口\n\n1.14.9 fix: fix bond_zh_hs_spot interface\n\n    1. 修复 bond_zh_hs_spot 接口\n    2. 修复 stock_industry_pe_ratio_cninfo 接口\n\n1.14.8 add: add stock_register_sz interface\n\n    1. 新增 stock_register_sz 接口\n    1. 新增 stock_register_sh 接口\n\n1.14.7 fix: fix index_stock_info interface\n\n    1. 修复 index_stock_info 接口\n    2. 修复 index_stock_cons 接口\n    3. 新增 stock_register_bj 接口\n\n1.14.6 fix: fix stock_register_kcb interface\n\n    1. 修复 stock_register_kcb 接口\n    2. 修复 stock_register_cyb 接口\n\n1.14.5 fix: fix stock_margin_account_info interface\n\n    1. 修复 stock_margin_account_info 接口\n\n1.14.4 add: add stock_margin_account_info interface\n\n    1. 新增 stock_margin_account_info 接口\n    2. 修复 bond_china_close_return 接口\n\n1.14.3 fix: fix stock_industry_clf_hist_sw interface\n\n    1. 修复 stock_industry_clf_hist_sw 接口\n\n1.14.2 fix: fix fund_portfolio_hold_em interface\n\n    1. 修复 fund_portfolio_hold_em 接口\n    2. 修复 stock_notice_report 接口\n\n1.14.1 fix: fix energy_carbon_hb interface\n\n    1. 修复 energy_carbon_hb 接口\n\n1.13.99 fix: fix macro_china_swap_rate interface\n\n    1. 修复 macro_china_swap_rate 接口\n\n1.13.98 fix: fix stock_financial_analysis_indicator interface\n\n    1. 修复 stock_financial_analysis_indicator 接口\n\n1.13.97 fix: fix fund_portfolio_hold_em interface\n\n    1. 修复 fund_portfolio_hold_em 接口\n\n1.13.96 fix: fix stock_dividend_cninfo interface\n\n    1. 修复 stock_dividend_cninfo 接口\n\n1.13.95 fix: fix stock_allotment_cninfo interface\n\n    1. 修复 stock_allotment_cninfo 接口\n    2. 修复 stock_profile_cninfo 接口\n    3. 修复 stock_fhps_detail_em 接口\n\n1.13.94 fix: fix stock_share_change_cninfo interface\n\n    1. 修复 stock_share_change_cninfo 接口\n\n1.13.93 add: add index_neei_cx interface\n\n    1. 新增 index_qli_cx 接口\n    2. 新增 index_ai_cx 接口\n    3. 新增 index_bei_cx 接口\n    4. 新增 index_neei_cx 接口\n\n1.13.92 fix: fix bond_china_close_return interface\n\n    1. 修复 bond_china_close_return 接口\n\n1.13.91 fix: fix stock_buffett_index_lg interface\n\n    1. 修复 stock_buffett_index_lg 接口\n    2. 修复 futures_hold_pos_sina 接口\n\n1.13.90 fix: fix stock_zh_valuation_baidu interface\n\n    1. 修复 stock_zh_valuation_baidu 接口\n\n1.13.89 fix: fix stock_zh_index_daily interface\n\n    1. 修复 stock_zh_index_daily 接口\n    2. 修复 stock_zh_a_hist 接口\n\n1.13.88 fix: fix index_price_cflp interface\n\n    1. 修复 index_price_cflp 接口\n    2. 修复 index_volume_cflp 接口\n\n1.13.87 fix: fix index_detail_cni interface\n\n    1. 修复 index_detail_cni 接口\n    2. 修复 stock_info_sz_name_code 接口\n\n1.13.86 fix: fix futures_foreign_commodity_realtime interface\n\n    1. 修复 futures_foreign_commodity_realtime 接口\n    2. 修复 stock_a_high_low_statistics 接口\n\n1.13.85 fix: fix stock_news_em interface\n\n    1. 修复 stock_news_em 接口\n\n1.13.84 fix: fix index_hist_sw interface\n\n    1. 修复 index_hist_sw 接口\n\n1.13.83 fix: fix stock_balance_sheet_by_report_em interface\n\n    1. 修复 stock_balance_sheet_by_report_em 接口\n    2. 修复 stock_sns_sseinfo 接口\n\n1.13.82 fix: fix futures_dce_position_rank interface\n\n    1. 修复 futures_dce_position_rank 接口\n\n1.13.81 fix: fix futures_dce_position_rank interface\n\n    1. 修复 futures_dce_position_rank 接口\n\n1.13.80 fix: fix stock_irm_cninfo interface\n\n    1. 修复 stock_irm_cninfo 接口\n\n1.13.79 fix: fix stock_industry_category_cninfo interface\n\n    1. 修复 stock_industry_category_cninfo 接口\n    2. 修复 stock_cg_guarantee_cninfo 接口\n    3. 修复 stock_hold_management_detail_em 接口\n\n1.13.78 fix: fix futures_gfex_position_rank interface\n\n    1. 修复 futures_gfex_position_rank 接口\n\n1.13.77 fix: fix stock_news_em interface\n\n    1. 修复 stock_news_em 接口\n    2. 修复 futures_volatility_index_nh 接口\n    3. 修复 get_shfe_daily 接口\n\n1.13.76 fix: fix macro_china_lpr interface\n\n    1. 修复 macro_china_lpr 接口\n\n1.13.75 add: add spot_price_qh interface\n\n    1. 新增 spot_price_qh 接口\n\n1.13.74 add: add macro_info_ws interface\n\n    1. 新增 macro_info_ws 接口\n\n1.13.73 fix: fix futures_shfe_warehouse_receipt interface\n\n    1. 修复 futures_shfe_warehouse_receipt 接口\n\n1.13.72 fix: fix futures_contract_info_shfe interface\n\n    1. 修复 futures_contract_info_shfe 接口\n\n1.13.71 fix: fix stock_fhps_detail_ths interface\n\n    1. 修复 stock_fhps_detail_ths 接口\n\n1.13.70 fix: fix stock_irm_cninfo interface\n\n    1. 修复 stock_irm_cninfo 接口\n    2. 修复 stock_individual_fund_flow 接口\n    3. 修复 migration_area_baidu 接口\n\n1.13.69 fix: fix get_shfe_rank_table interface\n\n    1. 修复 get_shfe_rank_table 接口\n\n1.13.68 fix: fix rate_interbank interface\n\n    1. 修复 rate_interbank 接口\n    2. 修复 bond_info_detail_cm 接口\n    3. 修复 bond_china_close_return 接口\n\n1.13.67 fix: fix bond_info_cm interface\n\n    1. 修复 bond_info_cm 接口\n\n1.13.66 fix: fix stock_lhb_yytj_sina interface\n\n    1. 修复 stock_lhb_yytj_sina 接口\n\n1.13.65 fix: fix stock_financial_report_sina interface\n\n    1. 修复 stock_financial_report_sina 接口\n\n1.13.64 fix: fix stock_lh_yyb_most interface\n\n    1. 修复 stock_lh_yyb_most 接口\n\n1.13.63 fix: fix index_detail_hist_cni interface\n\n    1. 修复 index_detail_hist_cni 接口\n\n1.13.62 fix: fix index_fear_greed_funddb interface\n\n    1. 修复 index_fear_greed_funddb 接口\n\n1.13.61 fix: fix stock_lhb_hyyyb_em interface\n\n    1. 修复 stock_lhb_hyyyb_em 接口\n\n1.13.60 fix: fix stock_zh_a_disclosure_report_cninfo interface\n\n    1. 修复 stock_zh_a_disclosure_report_cninfo 接口\n    2. 修复 stock_zh_a_disclosure_relation_cninfo 接口\n\n1.13.59 fix: fix stock_lhb_jgstatistic_em interface\n\n    1. 修复 stock_lhb_jgstatistic_em 接口\n\n1.13.58 fix: fix stock_lhb_jgmmtj_em interface\n\n    1. 修复 stock_lhb_jgmmtj_em 接口\n\n1.13.57 fix: fix stock_a_below_net_asset_statistics interface\n\n    1. 修复 stock_a_below_net_asset_statistics 接口\n\n1.13.56 fix: fix currency_boc_safe interface\n\n    1. 修复 currency_boc_safe 接口\n\n1.13.55 fix: fix sunrise_monthly interface\n\n    1. 修复 sunrise_monthly 接口\n    2. 修复 amac_person_fund_org_list 接口\n    3. 移除 pypinyin 依赖\n\n1.13.54 fix: fix stock_tfp_em interface\n\n    1. 修复 stock_tfp_em 接口\n\n1.13.53 fix: fix stock_index_pe_lg interface\n\n    1. 修复 stock_index_pe_lg 接口\n\n1.13.52 fix: fix stock_market_pb_lg interface\n\n    1. 修复 stock_market_pb_lg 接口\n\n1.13.51 fix: fix stock_market_activity_legu interface\n\n    1. 修复 stock_market_activity_legu 接口\n\n1.13.50 fix: fix news_cctv interface\n\n    1. 修复 news_cctv 接口\n\n1.13.49 fix: fix stock_ipo_summary_cninfo interface\n\n    1. 修复 stock_ipo_summary_cninfo 接口\n\n1.13.48 fix: fix stock_hk_indicator_eniu interface\n\n    1. 修复 stock_hk_indicator_eniu 接口\n\n1.13.47 fix: fix stock_a_indicator_lg interface\n\n    1. 修复 stock_a_indicator_lg 接口\n\n1.13.46 fix: fix futures_stock_shfe_js interface\n\n    1. 修复 futures_stock_shfe_js 接口\n\n1.13.45 fix: fix futures_stock_shfe_js interface\n\n    1. 修复 futures_stock_shfe_js 接口\n\n1.13.44 fix: fix stock_lhb_stock_statistic_em interface\n\n    1. 修复 stock_lhb_stock_statistic_em 接口\n    2. 修复 spot_hist_sge 接口\n\n1.13.43 fix: fix stock_account_statistics_em interface\n\n    1. 修复 stock_account_statistics_em 接口\n    2. 修复 stock_sy_profile_em 接口\n\n1.13.42 fix: fix index_fear_greed_funddb interface\n\n    1. 修复 index_fear_greed_funddb 接口\n\n1.13.41 fix: fix stock_sy_hy_em interface\n\n    1. 修复 stock_sy_hy_em 接口\n\n1.13.40 fix: fix index_fear_greed_funddb interface\n\n    1. 修复 index_fear_greed_funddb 接口\n\n1.13.39 add: add index_news_sentiment_scope interface\n\n    1. 新增 index_news_sentiment_scope 接口\n    2. 修复 index_yw 接口\n\n1.13.38 fix: fix stock_market_activity_legu interface\n\n    1. 修复 stock_market_activity_legu 接口\n    2. 修复 get_shfe_daily 接口\n    3. 修复 get_czce_daily 接口\n\n1.13.37 fix: fix stock_hk_index_daily_sina interface\n\n    1. 修复 stock_hk_index_daily_sina 接口\n    2. 新增 stock_info_broker_sina 接口\n\n1.13.36 fix: fix stock_hsgt_hist_em interface\n\n    1. 修复 stock_hsgt_hist_em 接口\n\n1.13.35 fix: fix stock_margin_szse interface\n\n    1. 修复 stock_margin_szse 接口\n\n1.13.34 fix: fix bank_fjcf_table_detail interface\n\n    1. 修复 bank_fjcf_table_detail 接口\n\n1.13.33 fix: fix index_realtime_fund_sw interface\n\n    1. 修复 index_realtime_fund_sw 接口\n    2. 修复 stock_zt_pool_em 接口\n\n1.13.32 fix: fix futures_contract_info_czce interface\n\n    1. 修复 futures_contract_info_czce 接口\n    2. 修复 stock_board_concept_cons_em 接口\n    3. 修复 futures_comm_info 接口\n    4. 修复 stock_us_pink_spot_em 接口\n\n1.13.31 fix: fix stock_individual_spot_xq interface\n\n    1. 修复 stock_individual_spot_xq 接口\n\n1.13.30 fix: fix futures_contract_info_shfe interface\n\n    1. 修复 futures_contract_info_shfe 接口\n\n1.13.29 fix: fix stock_esg_msci_sina interface\n\n    1. 修复 stock_esg_msci_sina 接口\n\n1.13.28 fix: fix stock_restricted_release_queue_em interface\n\n    1. 修复 stock_restricted_release_queue_em 接口\n    2. 修复 stock_esg_msci_sina 接口\n\n1.13.27 add: add stock_esg_msci_sina interface\n\n    1. 新增 stock_esg_msci_sina 接口\n    2. 新增 stock_esg_rft_sina 接口\n    3. 新增 stock_esg_zd_sina 接口\n\n1.13.26 fix: fix option_sse_minute_sina interface\n\n    1. 修复 option_sse_minute_sina 接口\n\n1.13.25 fix: fix futures_zh_daily_sina interface\n\n    1. 修复 futures_zh_daily_sina 接口\n\n1.13.24 fix: fix futures_spot_sys interface\n\n    1. 修复 futures_spot_sys 接口\n\n1.13.23 add: add macro_usa_cme_merchant_goods_holding interface\n\n    1. 新增 macro_usa_cme_merchant_goods_holding 接口\n\n1.13.22 fix: fix amac_manager_cancelled_info interface\n\n    1. 修复 amac_manager_cancelled_info 接口\n    2. 修复 macro_china_pmi_yearly 接口\n    3. 修复 macro_euro_lme_stock 接口\n    4. 修复 macro_usa_phs 接口\n    5. 修复 macro_china_construction_index 接口\n\n1.13.21 fix: fix stock_yjkb_em interface\n\n    1. 修复 stock_yjkb_em 接口\n    2. 修复 stock_pg_em 接口\n    3. 修复 stock_comment_em 接口\n    4. 修复 macro_usa_api_crude_stock 接口\n\n1.13.20 fix: fix stock_zh_a_disclosure_report_cninfo interface\n\n    1. 修复 stock_zh_a_disclosure_report_cninfo 接口\n\n1.13.19 add: add car_market_country_cpca interface\n\n    1. 新增 car_market_country_cpca 接口\n    2. 新增 car_market_segment_cpca 接口\n\n1.13.18 fix: fix macro_china_pmi_yearly interface\n\n    1. 修复 crypto_js_spot 接口\n    2. 修复 macro_cons_gold 接口\n    3. 修复 macro_china_hk_cpi 接口\n    4. 修复 macro_china_pmi_yearly 接口\n    5. 新增 index_realtime_fund_sw 接口\n    6. 新增 index_hist_fund_sw 接口\n    7. 修复 macro_euro_lme_stock 接口\n    8. 修复 macro_usa_cftc_merchant_goods_holding 接口\n    9. 修复 macro_usa_ism_pmi 接口\n\n1.13.17 fix: fix stock_zcfz_em interface\n\n    1. 修复 stock_zcfz_em 接口\n    2. 新增 fund_individual_detail_hold_xq 接口\n    3. 修复 futures_dce_warehouse_receipt 接口\n\n1.13.16 add: add car_market_cate_cpca interface\n\n    1. 新增 car_market_cate_cpca 接口\n    2. 修复 car_market_man_rank_cpca 接口\n\n1.13.15 add: add car_market_man_rank_cpca interface\n\n    1. 新增 car_market_man_rank_cpca 接口\n    2. 修复 car_market_total_cpca 接口\n\n1.13.14 fix: fix futures_fees_info interface\n\n    1. 修复 futures_fees_info 接口\n\n1.13.13 fix: fix car_market_cpca interface\n\n    1. 修复 car_market_cpca 接口\n\n1.13.12 fix: fix stock_zyjs_ths interface\n\n    1. 修复 stock_zyjs_ths 接口\n\n1.13.11 fix: fix option_minute_em interface\n\n    1. 修复 option_minute_em 接口\n    2. 修复 stock_hk_index_daily_em 接口\n\n1.13.10 fix: fix news_trade_notify_dividend_baidu interface\n\n    1. 修复 news_trade_notify_dividend_baidu 接口\n    2. 修复 fund_etf_hist_em 接口\n\n1.13.9 chore: remove pyarrow deps\n\n    1. 移除 pyarrow 依赖\n\n1.13.8 fix: fix fund_etf_hist_em interface\n\n    1. 修复 fund_etf_hist_em 接口\n\n1.13.7 add: add futures_fees_info interface\n\n    1. 新增 futures_fees_info 接口\n\n1.13.6 fix: fix stock_board_concept_name_ths interface\n\n    1. 修复 stock_board_concept_name_ths 接口\n    2. 修复 tool_trade_date_hist_sina 接口\n\n1.13.5 fix: fix stock_main_fund_flow interface\n\n    1. 修复 stock_main_fund_flow 接口\n\n1.13.4 fix: fix stock_individual_spot_xq interface\n\n    1. 修复 stock_individual_spot_xq 接口\n\n1.13.3 fix: fix stock_main_fund_flow interface\n\n    1. 修复 stock_main_fund_flow 接口\n\n1.13.2 add: add stock_main_fund_flow interface\n\n    1. 新增 stock_main_fund_flow 接口\n    2. 修复 stock_intraday_sina 接口\n\n1.13.1 fix: fix futures_spot_stock interface\n\n    1. 修复 futures_spot_stock 接口\n\n1.12.99 fix: fix index_hog_spot_price interface\n\n    1. 修复 index_hog_spot_price 接口\n\n1.12.98 fix: fix bond_zh_cov interface\n\n    1. 修复 bond_zh_cov 接口\n\n1.12.97 fix: fix stock_zh_a_hist_min_em interface\n\n    1. 修复 stock_zh_a_hist_min_em 接口\n    2. 修复 fund_etf_hist_min_em 接口\n    3. 修复 fund_lof_hist_min_em 接口\n\n1.12.96 fix: fix stock_bid_ask_em interface\n\n    1. 修复 stock_bid_ask_em 接口\n    2. 修复 stock_us_spot_em 接口\n\n1.12.95 add: add futures_hog_core interface\n\n    1. 新增 futures_hog_core 接口\n    2. 新增 futures_hog_cost 接口\n    3. 新增 futures_hog_supply 接口\n    4. 移除 futures_hog_info 接口\n    5. 新增 futures_hog_rank 接口\n\n1.12.94 fix: fix stock_hk_index_daily_em interface\n\n    1. 修复 stock_hk_index_daily_em 接口\n    2. 修复 index_us_stock_sina 接口\n\n1.12.93 fix: fix bond_debt_nafmii interface\n\n    1. 修复 bond_debt_nafmii 接口\n\n1.12.92 fix: fix fund_etf_hist_min_em interface\n\n    1. 修复 fund_etf_hist_min_em 接口\n\n1.12.91 add: add stock_info_global_em interface\n\n    1. 新增 stock_info_global_em 接口\n    1. 新增 stock_info_cjzc_em 接口\n    1. 新增 stock_info_global_sina 接口\n    1. 新增 stock_info_global_futu 接口\n    1. 新增 stock_info_global_ths 接口\n    1. 新增 stock_info_global_cls 接口\n    1. 修复 fund_etf_spot_em 接口\n\n1.12.90 fix: fix fund_etf_spot_em interface\n\n    1. 修复 fund_etf_spot_em 接口\n\n1.12.89 fix: fix bond_china_yield interface\n\n    1. 修复 bond_china_yield 接口\n\n1.12.88 fix: fix fund_etf_spot_em interface\n\n    1. 修复 fund_etf_spot_em 接口\n\n1.12.87 fix: fix fortune_rank interface\n\n    1. 修复 fortune_rank 接口\n\n1.12.86 fix: fix fund_etf_spot_em interface\n\n    1. 修复 fund_etf_spot_em 接口\n\n1.12.85 fix: fix stock_sector_fund_flow_summary interface\n\n    1. 修复 stock_sector_fund_flow_summary 接口\n    2. 修复 futures_foreign_commodity_realtime 接口\n\n1.12.84 fix: fix stock_market_fund_flow interface\n\n    1. 修复 stock_market_fund_flow 接口\n\n1.12.83 fix: fix stock_sector_fund_flow_rank interface\n\n    1. 修复 stock_sector_fund_flow_rank 接口\n    2. 修复 stock_individual_spot_xq 接口\n\n1.12.82 fix: fix stock_tfp_em interface\n\n    1. 修复 stock_tfp_em 接口\n    2. 修复 news_trade_notify_suspend_baidu 接口\n\n1.12.81 fix: fix macro_china_bond_public interface\n\n    1. 修复 macro_china_bond_public 接口\n\n1.12.80 fix: fix get_czce_daily interface\n\n    1. 修复 get_czce_daily 接口\n    2. 修复 get_czce_rank_table 接口\n\n1.12.79 fix: fix futures_main_sina interface\n\n    1. 修复 futures_main_sina 接口\n\n1.12.78 fix: fix stock_info_sh_delist interface\n\n    1. 修复 stock_info_sh_delist 接口\n    2. 修复 stock_info_sz_name_code 接口\n    3. 修复 stock_info_sz_change_name 接口\n    4. 修复 stock_info_sz_delist 接口\n\n1.12.77 fix: fix futures_contract_info_shfe interface\n\n    1. 修复 futures_contract_info_shfe 接口\n    2. 修复 fund_open_fund_rank_em 接口\n\n1.12.76 fix: fix bond_zh_hs_spot interface\n\n    1. 修复 bond_zh_hs_spot 接口\n\n1.12.75 add: add futures_contract_info_ine interface\n\n    1. 新增 futures_contract_info_ine 接口\n\n1.12.74 add: add futures_contract_info_czce interface\n\n    1. 新增 futures_contract_info_shfe 接口\n    2. 新增 futures_contract_info_dce 接口\n    3. 新增 futures_contract_info_czce 接口\n    4. 新增 futures_contract_info_gfex 接口\n    5. 新增 futures_contract_info_cffex 接口\n\n1.12.73 fix: fix stock_individual_spot_xq interface\n\n    1. 修复 stock_individual_spot_xq 接口\n    2. 新增 futures_contract_info_dce 接口\n\n1.12.72 fix: fix stock_hot_rank_wc interface\n\n    1. 修复 stock_hot_rank_wc 接口\n    2. 新增 futures_contract_info_shfe 接口\n\n1.12.71 fix: fix stock_zh_ah_spot interface\n\n    1. 修复 stock_zh_ah_spot 接口\n\n1.12.70 fix: fix stock_lhb_detail_daily_sina interface\n\n    1. 修复 stock_lhb_detail_daily_sina 接口\n    2. 修复 stock_lhb_ggtj_sina 接口\n    3. 修复 stock_lhb_yytj_sina 接口\n\n1.12.69 fix: fix futures_hold_pos_sina interface\n\n    1. 修复 futures_hold_pos_sina 接口\n    2. 修复 index_hist_sw 接口\n\n1.12.68 fix: fix option_finance_board interface\n\n    1. 修复 option_finance_board 接口\n    2. 修复 futures_spot_sys 接口\n    3. 新增 futures_stock_shfe_js 接口\n    4. 修复 futures_hold_pos_sina 接口\n\n1.12.67 fix: fix index_hist_sw interface\n\n    1. 修复 index_hist_sw 接口\n\n1.12.66 fix: fix stock_board_industry_hist_em interface\n\n    1. 修复 stock_board_industry_hist_em 接口\n\n1.12.65 fix: fix futures_foreign_commodity_realtime interface\n\n    1. 修复 futures_foreign_commodity_realtime 接口\n\n1.12.64 fix: fix stock_board_industry_index_ths interface\n\n    1. 修复 stock_board_industry_index_ths 接口\n    2. 修复 akqmt 导入\n\n1.12.63 add: add akqmt interface\n\n    1. 新增 akqmt 接口\n\n1.12.62 fix: fix stock_fund_flow_individual interface\n\n    1. 修复 stock_fund_flow_individual 接口\n    2. 修复 stock_institute_hold 接口\n\n1.12.61 fix: fix stock_bid_ask_em interface\n\n    1. 修复 stock_bid_ask_em 接口\n\n1.12.60 fix: fix movie_boxoffice_daily interface\n\n    1. 修复 movie_boxoffice_daily 接口\n    2. 修复 movie_boxoffice_weekly 接口\n    3. 修复 movie_boxoffice_monthly 接口\n    4. 修复 movie_boxoffice_yearly 接口\n    5. 修复 movie_boxoffice_yearly_first_week 接口\n    6. 修复 movie_boxoffice_cinema_daily 接口\n    7. 修复 movie_boxoffice_cinema_weekly 接口\n\n1.12.59 fix: fix movie_boxoffice_realtime interface\n\n    1. 修复 movie_boxoffice_realtime 接口\n    2. 修复 bank_fjcf_table_detail 接口\n\n1.12.58 fix: fix stock_ipo_summary_cninfo interface\n\n    1. 修复 stock_ipo_summary_cninfo 接口\n\n1.12.57 fix: fix bank_fjcf_table_detail interface\n\n    1. 修复 bank_fjcf_table_detail 接口\n\n1.12.56 fix: fix stock_a_indicator_lg interface\n\n    1. 修复 stock_a_indicator_lg 接口\n\n1.12.55 fix: fix stock_us_hist interface\n\n    1. 修复 stock_us_hist 接口\n    2. 修复 stock_mda_ym 接口\n\n1.12.54 fix: fix stock_gpzy_pledge_ratio_detail_em interface\n\n    1. 修复 stock_gpzy_pledge_ratio_detail_em 接口\n    2. 修复 stock_individual_spot_xq 接口\n\n1.12.53 fix: fix stock_rank_xzjp_ths interface\n\n    1. 修复 stock_rank_xzjp_ths 接口\n\n1.12.52 fix: fix stock_rank_cxg_ths interface\n\n    1. 修复 stock_rank_cxg_ths 接口\n\n1.12.51 add: add stock_hsgt_fund_min_em interface\n\n    1. 新增 stock_hsgt_fund_min_em 接口\n\n1.12.50 fix: fix bond_china_close_return interface\n\n    1. 修复 bond_china_close_return 接口\n    2. 修复 stock_dxsyl_em 接口\n\n1.12.49 fix: fix stock_dxsyl_em interface\n\n    1. 修复 stock_dxsyl_em 接口\n    2. 修复 option_minute_em 接口\n\n1.12.48 fix: fix option_minute_em interface\n\n    1. 修复 option_minute_em 接口\n    2. 修复 option_current_em 接口\n\n1.12.47 fix: fix stock_zh_ah_daily interface\n\n    1. 修复 stock_zh_ah_daily 接口\n    2. 修复 get_receipt 接口\n\n1.12.46 fix: fix futures_contract_detail interface\n\n    1. 修复 futures_contract_detail 接口\n\n1.12.45 fix: fix stock_individual_spot_xq interface\n\n    1. 修复 stock_individual_spot_xq 接口\n    2. 新增 data_tips 文档页面\n\n1.12.44 fix: fix stock_zh_ah_daily interface\n\n    1. 修复 stock_zh_ah_daily 接口\n\n1.12.43 fix: fix macro_china_market_margin_sh interface\n\n    1. 修复 macro_china_market_margin_sh 接口\n\n1.12.42 fix: fix stock_news_em interface\n\n    1. 修复 stock_news_em 接口\n    2. 修复 fund_portfolio_hold_em 接口\n\n1.12.41 fix: fix sw_index_third_cons interface\n\n    1. 修复 sw_index_third_cons 接口\n    2. 修复 sunrise_daily 接口\n\n1.12.40 fix: fix futures_to_spot_dce interface\n\n    1. 修复 futures_to_spot_dce 接口\n\n1.12.39 fix: fix futures_gfex_warehouse_receipt interface\n\n    1. 修复 futures_gfex_warehouse_receipt 接口\n    2. 修复 futures_zh_spot 接口\n\n1.12.38 fix: fix futures_to_spot_dce interface\n\n    1. 修复 futures_to_spot_dce 接口\n    2. 修复 futures_to_spot_shfe 接口\n\n1.12.37 fix: fix futures_delivery_shfe interface\n\n    1. 修复 futures_delivery_shfe 接口\n    2. 修复 futures_delivery_match_czce 接口\n    3. 修复 futures_delivery_dce 接口\n\n1.12.36 fix: fix bond_china_close_return interface\n\n    1. 修复 bond_china_close_return 接口\n    2. 新增 futures_gfex_warehouse_receipt 接口\n\n1.12.35 fix: fix article_epu_index interface\n\n    1. 修复 article_epu_index 接口\n\n1.12.34 fix: fix repo_rate_hist interface\n\n    1. 修复 repo_rate_hist 接口\n    2. 修复 repo_rate_query 接口\n    3. 修复 article_ff_crr 接口\n\n1.12.33 fix: fix futures_global_em interface\n\n    1. 修复 futures_global_em 接口\n\n1.12.32 fix: fix energy_oil_hist interface\n\n    1. 修复 energy_oil_hist 接口\n    2. 修复 futures_foreign_hist 接口\n    3. 修复 stock_hot_follow_xq 接口\n\n1.12.31 add: add futures_global_em interface\n\n    1. 新增 futures_global_em 接口\n    2. 修复 futures_settlement_price_sgx 接口\n\n1.12.30 fix: fix futures_settlement_price_sgx interface\n\n    1. 修复 futures_settlement_price_sgx 接口\n\n1.12.29 add: add stock_individual_spot_xq interface\n\n    1. 新增 stock_individual_spot_xq 接口\n\n1.12.28 fix: fix futures_foreign_commodity_realtime interface\n\n    1. 修复 futures_foreign_commodity_realtime 接口\n\n1.12.27 fix: fix stock_hk_fhpx_detail_ths interface\n\n    1. 修复 stock_hk_fhpx_detail_ths 接口\n    2. 修复 air_quality_hist 接口\n\n1.12.26 fix: fix index_stock_info interface\n\n    1. 修复 index_stock_info 接口\n\n1.12.25 fix: fix fund_individual_basic_info_xq interface\n\n    1. 修复 fund_individual_basic_info_xq 接口\n\n1.12.24 fix: fix stock_hk_index_spot_em interface\n\n    1. 修复 stock_hk_index_spot_em 接口\n    2. 修复 stock_hk_index_daily_em 接口\n    3. 修复 index_hist_cni 接口\n\n1.12.23 fix: fix fund_etf_hist_min_em interface\n\n    1. 修复 fund_etf_hist_min_em 接口\n\n1.12.22 fix: fix stock_hsgt_board_rank_em interface\n\n    1. 修复 stock_hsgt_board_rank_em 接口\n\n1.12.21 fix: fix stock_hsgt_hold_stock_em interface\n\n    1. 修复 stock_hsgt_hold_stock_em 接口\n    2. 修复 stock_cyq_em 接口\n    3. 修复 stock_industry_pe_ratio_cninfo 接口\n    4. 移除 stock_average_position_legu 接口\n    5. 修复 stock_hsgt_institution_statistics_em 接口\n    6. 移除 index_weibo_sina 接口\n    7. 移除 index_baidu 接口\n    8. 移除 index_google 接口\n    9. 修复 macro_china_bond_public 接口\n    10. 移除 index_investing_global_from_url 接口\n\n1.12.20 fix: fix futures_inventory_99 interface\n\n    1. 修复 futures_inventory_99 接口\n\n1.12.19 fix: fix stock_hk_profit_forecast_et interface\n\n    1. 修复 stock_hk_profit_forecast_et 接口\n\n1.12.18 fix: fix stock_board_industry_index_ths interface\n\n    1. 修复 stock_board_industry_index_ths 接口\n\n1.12.17 fix: fix option_current_em interface\n\n    1. 修复 option_current_em 接口\n\n1.12.16 fix: fix stock_hot_follow_xq interface\n\n    1. 修复 stock_hot_follow_xq 接口\n    2. 修复 stock_hot_tweet_xq 接口\n    3. 修复 stock_hot_deal_xq 接口\n\n1.12.15 fix: fix stock_hk_profit_forecast_et interface\n\n    1. 修复 stock_hk_profit_forecast_et 接口\n\n1.12.14 add: add stock_hk_profit_forecast_et interface\n\n    1. 新增 stock_hk_profit_forecast_et 接口\n\n1.12.13 fix: fix index_stock_cons_csindex interface\n\n    1. 修复 index_stock_cons_csindex 接口\n\n1.12.12 fix: fix stock_zh_index_daily interface\n\n    1. 修复 stock_zh_index_daily 接口\n\n1.12.11 add: add stock_zh_index_spot_em interface\n\n    1. 新增 stock_zh_index_spot_em 接口\n    2. 重命名 stock_zh_index_spot 为 stock_zh_index_spot_sina\n\n1.12.10 fix: fix stock_add_stock interface\n\n    1. 修复 stock_add_stock 接口\n\n1.12.9 add: add fund_individual_basic_info_xq interface\n\n    1. 新增 fund_individual_basic_info_xq 接口\n    2. 新增 fund_individual_achievement_xq 接口\n    3. 新增 fund_individual_analysis_xq 接口\n    4. 新增 fund_individual_profit_probability_xq 接口\n    5. 新增 fund_individual_detail_info_xq 接口\n    6. 新增 get_receipt 接口\n    7. 新增 reits_realtime_em 接口\n\n1.12.8 fix: fix fund_open_fund_info_em interface\n\n    1. 修复 fund_open_fund_info_em 接口\n\n1.12.7 fix: fix option_gfex_daily interface\n\n    1. 修复 option_gfex_daily 接口\n    2. 更新 calendar.json 文件\n\n1.12.6 fix: fix fund_open_fund_info_em interface\n\n    1. 修复 fund_open_fund_info_em 接口\n\n1.12.5 fix: fix stock_zh_a_gdhs interface\n\n    1. 修复 stock_zh_a_gdhs 接口\n\n1.12.4 fix: fix tool_trade_date_hist_sina interface\n\n    1. 修复 tool_trade_date_hist_sina 接口\n\n1.12.3 fix: fix stock_gdfx_free_holding_teamwork_em interface\n\n    1. 修复 stock_gdfx_free_holding_teamwork_em 接口\n\n1.12.2 fix: fix hurun_rank interface\n\n    1. 修复 hurun_rank 接口\n\n1.12.1 fix: fix futures_comm_info interface\n\n    1. 修复 futures_comm_info 接口\n\n1.11.99 fix: fix stock_zh_index_spot interface\n\n    1. 修复 stock_zh_index_spot 接口\n\n1.11.98 fix: fix stock_zh_a_disclosure_report_cninfo interface\n\n    1. 修复 stock_zh_a_disclosure_report_cninfo 接口\n\n1.11.97 add: add stock_zh_a_disclosure_report_cninfo interface\n\n    1. 新增 stock_zh_a_disclosure_report_cninfo 接口\n    2. 修复 stock_gdfx_free_holding_analyse_em 接口\n    3. 修复 stock_gdfx_holding_analyse_em 接口\n\n1.11.96 fix: fix fund_rating_all interface\n\n    1. 修复 fund_rating_all 接口\n\n1.11.95 fix: fix fund_etf_hist_min_em interface\n\n    1. 修复 fund_etf_hist_min_em 接口\n\n1.11.94 fix: fix index_zh_a_hist_min_em interface\n\n    1. 修复 index_zh_a_hist_min_em 接口\n    2. 修复 index_zh_a_hist 接口\n\n1.11.93 fix: fix stock_zh_a_hist_pre_min_em interface\n\n    1. 修复 stock_zh_a_hist_pre_min_em 接口\n    2. 修复 stock_intraday_sina 接口\n\n1.11.92 fix: fix get_gfex_receipt interface\n\n    1. 修复 get_gfex_receipt 接口\n\n1.11.91 fix: remove stock_us_fundamental interface\n\n    1. 移除 stock_us_fundamental 接口\n\n1.11.90 fix: fix futures_rule interface\n\n    1. 修复 futures_rule 接口\n    2. 修复 stock_zh_a_spot 接口\n\n1.11.89 fix: fix bond_zh_us_rate interface\n\n    1. 修复 bond_zh_us_rate 接口\n\n1.11.88 fix: fix macro_china_swap_rate interface\n\n    1. 修复 macro_china_swap_rate 接口\n\n1.11.87 fix: fix futures_board_index_nh interface\n\n    1. 修复 futures_board_index_nh 接口\n\n1.11.86 fix: fix stock_telegraph_cls interface\n\n    1. 修复 stock_telegraph_cls 接口\n    2. 修复 stock_xgsglb_em 接口\n    3. 修复 stock_market_activity_legu 接口\n\n1.11.85 fix: fix stock_market_activity_legu interface\n\n    1. 修复 stock_market_activity_legu 接口\n\n1.11.84 fix: fix fund_name_em interface\n\n    1. 修复 fund_name_em 接口\n\n1.11.83 fix: fix stock_zt_pool_strong_em interface\n\n    1. 修复 stock_zt_pool_em 接口\n    2. 修复 stock_zt_pool_previous_em 接口\n    3. 修复 stock_zt_pool_strong_em 接口\n    4. 修复 stock_zt_pool_sub_new_em 接口\n    5. 修复 stock_zt_pool_zbgc_em 接口\n    6. 修复 stock_zt_pool_dtgc_em 接口\n\n1.11.82 fix: fix bond_zh_us_rate interface\n\n    1. 修复 bond_zh_us_rate 接口\n\n1.11.81 fix: fix stock_gdfx_free_holding_detail_em interface\n\n    1. 修复 stock_gdfx_free_holding_detail_em 接口\n\n1.11.80 fix: fix stock_cash_flow_sheet_by_report_em interface\n\n    1. 修复 stock_cash_flow_sheet_by_report_em 接口\n    2. 修复 get_receipt 接口\n    3. 修复 stock_zygc_ym 接口\n    4. 修复 bond_china_close_return 接口\n\n1.11.79 fix: fix get_receipt interface\n\n    1. 修复 get_receipt 接口\n\n1.11.78 add: add stock_financial_benefit_ths interface\n\n    1. 新增 stock_financial_benefit_ths 接口\n    2. 新增 stock_financial_cash_ths 接口\n    3. 新增 stock_financial_debt_ths 接口\n\n1.11.77 fix: fix futures_zh_spot interface\n\n    1. 修复 futures_zh_spot 接口\n\n1.11.76 fix: fix option_czce_daily interface\n\n    1. 修复 option_czce_daily 接口\n    2. 移除 stock_hot_tgb 接口\n    3. 修复 futures_board_index_nh 接口\n    4. 修复 stock_hk_hist 接口\n\n1.11.75 fix: fix futures_comex_inventory interface\n\n    1. 修复 futures_comex_inventory 接口\n\n1.11.74 fix: fix stock_comment_em interface\n\n    1. 修复 stock_comment_em 接口\n\n1.11.73 fix: fix futures_comex_inventory interface\n\n    1. 修复 futures_comex_inventory 接口\n\n1.11.72 fix: fix get_rank_sum_daily interface\n\n    1. 修复 get_rank_sum_daily 接口\n\n1.11.71 fix: fix stock_balance_sheet_by_report_em interface\n\n    1. 修复 stock_balance_sheet_by_report_em 接口\n\n1.11.70 fix: fix futures_gfex_position_rank interface\n\n    1. 修复 futures_gfex_position_rank 接口\n\n1.11.69 add: add futures_gfex_position_rank interface\n\n    1. 新增 futures_gfex_position_rank 接口\n\n1.11.68 fix: fix fund_aum_em interface\n\n    1. 修复 fund_aum_em 接口\n\n1.11.67 fix: fix currency_boc_sina interface\n\n    1. 修复 currency_boc_sina 接口\n\n1.11.66 fix: fix fund_scale_structured_sina interface\n\n    1. 修复 fund_scale_structured_sina 接口\n\n1.11.65 fix: fix futures_index_ccidx interface\n\n    1. 修复 futures_index_ccidx 接口\n\n1.11.64 fix: fix futures_settlement_price_sgx interface\n\n    1. 修复 futures_settlement_price_sgx 接口\n\n1.11.63 fix: fix fund_scale_open_sina interface\n\n    1. 修复 fund_scale_open_sina 接口\n\n1.11.62 fix: fix stock_zt_pool_dtgc_em interface\n\n    1. 修复 stock_zt_pool_dtgc_em 接口\n\n1.11.61 fix: fix fund_manager_em interface\n\n    1. 修复 fund_manager_em 接口\n\n1.11.60 fix: fix bond_china_close_return interface\n\n    1. 修复 bond_china_close_return 接口\n\n1.11.59 fix: fix fund_portfolio_change_em interface\n\n    1. 修复 fund_portfolio_change_em 接口\n\n1.11.58 fix: fix bond_china_close_return interface\n\n    1. 修复 bond_china_close_return 接口\n    2. 修复 stock_zh_a_daily 接口\n\n1.11.57 fix: fix stock_zt_pool_em interface\n\n    1. 修复 stock_zt_pool_em 接口\n\n1.11.56 fix: fix stock_balance_sheet_by_report_delisted_em interface\n\n    1. 修复 stock_balance_sheet_by_report_delisted_em 接口\n\n1.11.55 fix: fix fund_portfolio_bond_hold_em interface\n\n    1. 修复 fund_portfolio_bond_hold_em 接口\n\n1.11.54 fix: fix fund_portfolio_hold_em interface\n\n    1. 修复 fund_portfolio_hold_em 接口\n\n1.11.53 add: add stock_zh_a_hist_tx interface\n\n    1. 新增 stock_zh_a_hist_tx 接口\n\n1.11.52 fix: fix fund_scale_change_em interface\n\n    1. 修复 fund_scale_change_em 接口\n\n1.11.51 fix: fix stock_zh_a_daily interface\n\n    1. 修复 stock_zh_a_daily 接口\n\n1.11.50 fix: fix amac_fund_abs support\n\n    1. 修复 amac_fund_abs 接口\n\n1.11.49 add: add aarch64 support\n\n    1. 新增 aarch64 支持\n\n1.11.48 fix: fix installation.md\n\n    1. 修复 installation.md\n\n1.11.47 add: add akracer 0.0.8 support\n\n    1. 修复 akracer 0.0.8 support\n\n1.11.46 add: add akracer support\n\n    1. 新增 akracer 支持 MacOS M 系列处理器使用\n\n1.11.45 add: add stock_balance_sheet_by_report_delisted_em interface\n\n    1. 新增 stock_balance_sheet_by_report_delisted_em 接口\n    2. 新增 stock_profit_sheet_by_report_delisted_em 接口\n    3. 新增 stock_cash_flow_sheet_by_report_delisted_em 接口\n\n1.11.44 add: add stock_cyq_em interface\n\n    1. 新增 stock_cyq_em 接口\n\n1.11.43 fix: fix get_futures_daily interface\n\n    1. 修复 get_futures_daily 接口\n\n1.11.42 fix: fix stock_gpzy_pledge_ratio_em interface\n\n    1. 修复 stock_gpzy_pledge_ratio_em 接口\n\n1.11.41 fix: fix index_weibo_sina interface\n\n    1. 重命名 weibo_index 为 index_weibo_sina 接口\n\n1.11.40 fix: fix index_option_300etf_qvix interface\n\n    1. 新增 index_option_300etf_qvix 接口\n\n1.11.39 fix: fix index_option_50etf_qvix interface\n\n    1. 重命名 option_50etf_qvix 为 index_option_50etf_qvix 接口\n    2. 重命名 option_50etf_min_qvix 为 index_option_50etf_min_qvix 接口\n    3. 重命名 option_300etf_qvix 为 index_option_300etf_qvix 接口\n    4. 重命名 option_300etf_min_qvix 为 index_option_300etf_min_qvix 接口\n\n1.11.38 fix: fix setup.py interface\n\n    1. 新增 python 3.12 支持\n\n1.11.37 fix: fix index_fear_greed_funddb interface\n\n    1. 重命名 stock_fear_greed_funddb 为 index_fear_greed_funddb 接口\n\n1.11.36 add: add stock_fear_greed_funddb interface\n\n    1. 新增 stock_fear_greed_funddb 接口\n\n1.11.35 fix: fix stock_board_concept_hist_ths interface\n\n    1. 修复 stock_board_concept_hist_ths 接口\n\n1.11.34 add: add stock_board_concept_graph_ths interface\n\n    1. 新增 stock_board_concept_graph_ths 接口\n\n1.11.33 add: add stock_intraday_em interface\n\n    1. 新增 stock_intraday_em 接口\n\n1.11.32 add: add stock_margin_ratio_pa interface\n\n    1. 新增 stock_margin_ratio_pa 接口\n\n1.11.31 fix: fix futures_dce_warehouse_receipt interface\n\n    1. 修复 futures_dce_warehouse_receipt 接口\n\n1.11.30 fix: fix stock_zh_a_st_em interface\n\n    1. 修复 stock_zh_a_st_em 接口\n\n1.11.29 fix: fix bond_new_composite_index_cbond interface\n\n    1. 修复 bond_new_composite_index_cbond 接口\n\n1.11.28 fix: fix stock_margin_detail_szse interface\n\n    1. 修复 stock_margin_detail_szse 接口\n\n1.11.27 fix: fix stock_margin_detail_szse interface\n\n    1. 修复 stock_margin_detail_szse 接口\n\n1.11.26 fix: fix macro_china_supply_of_money interface\n\n    1. 修复 macro_china_supply_of_money 接口\n\n1.11.25 fix: fix macro_china_central_bank_balance interface\n\n    1. 修复 macro_china_central_bank_balance 接口\n\n1.11.24 fix: fix macro_china_postal_telecommunicational interface\n\n    1. 修复 macro_china_postal_telecommunicational 接口\n\n1.11.23 fix: fix macro_china_society_traffic_volume interface\n\n    1. 修复 macro_china_society_traffic_volume 接口\n\n1.11.22 fix: fix option_dce_daily interface\n\n    1. 修复 option_dce_daily 接口\n\n1.11.21 fix: fix get_dce_daily interface\n\n    1. 修复 get_dce_daily 接口\n\n1.11.20 fix: fix option_dce_daily interface\n\n    1. 修复 option_dce_daily 接口\n\n1.11.19 fix: fix drewry_wci_index interface\n\n    1. 修复 drewry_wci_index 接口\n\n1.11.18 fix: fix get_rank_sum_daily interface\n\n    1. 修复 get_rank_sum_daily 接口\n\n1.11.17 fix: fix futures_spot_price_daily interface\n\n    1. 修复 futures_spot_price_daily 接口\n\n1.11.16 fix: fix stock_dividend_cninfo interface\n\n    1. 修复 stock_dividend_cninfo 接口\n\n1.11.15 fix: fix stock_dividend_cninfo interface\n\n    1. 修复 stock_dividend_cninfo 接口\n    2. 修复 stock_zh_a_daily 接口\n\n1.11.14 fix: fix migration_area_baidu interface\n\n    1. 修复 migration_area_baidu 接口\n\n1.11.13 fix: fix futures_comm_info interface\n\n    1. 修复 futures_comm_info 接口\n\n1.11.12 fix: fix stock_board_concept_hist_ths interface\n\n    1. 修复 stock_board_concept_hist_ths 接口\n\n1.11.11 fix: fix spot_hist_sge interface\n\n    1. 修复 spot_hist_sge 接口\n\n1.11.10 fix: fix bond_new_composite_index_cbond interface\n\n    1. 修复 bond_new_composite_index_cbond 接口\n    2. 修复 stock_board_industry_summary_ths 接口\n\n1.11.9 fix: fix currency_boc_safe interface\n\n    1. 修复 currency_boc_safe 接口\n\n1.11.8 fix: fix news_economic_baidu interface\n\n    1. 修复 news_economic_baidu 接口\n\n1.11.7 fix: fix get_futures_daily interface\n\n    1. 修复 get_futures_daily 接口\n\n1.11.6 fix: fix futures_main_sina interface\n\n    1. 修复 futures_main_sina 接口\n    2. 修复 get_receipt 接口\n\n1.11.5 fix: fix macro_china_hk_cpi interface\n\n    1. 修复 macro_china_hk_cpi 接口\n\n1.11.4 fix: fix bond_cb_profile_sina interface\n\n    1. 修复 bond_cb_profile_sina 接口\n\n1.11.3 fix: fix stock_a_high_low_statistics interface\n\n    1. 修复 stock_a_high_low_statistics 接口\n\n1.11.2 fix: fix stock_a_below_net_asset_statistics interface\n\n    1. 修复 stock_a_below_net_asset_statistics 接口\n\n1.11.1 add: add index_us_stock_sina interface\n\n    1. 新增 index_us_stock_sina 接口\n\n1.10.99 fix: fix crypto_bitcoin_cme interface\n\n    1. 修复 crypto_bitcoin_cme 接口\n\n1.10.98 fix: fix get_cffex_rank_table interface\n\n    1. 修复 get_cffex_rank_table 接口\n\n1.10.97 fix: fix stock_financial_analysis_indicator interface\n\n    1. 修复 stock_financial_analysis_indicator 接口\n\n1.10.96 fix: fix stock_hk_daily interface\n\n    1. 修复 stock_hk_daily 接口\n\n1.10.95 fix: fix crypto_bitcoin_cme interface\n\n    1. 修复 crypto_bitcoin_cme 接口\n    2. 修复 stock_zh_a_minute 接口\n    3. 修复 crypto_js_spot 接口\n\n1.10.94 add: add macro_china_nbs_nation interface\n\n    1. 修复 macro_china_nbs_nation 接口\n\n1.10.93 add: add stock_ipo_summary_cninfo interface\n\n    1. 新增 stock_ipo_summary_cninfo 接口\n\n1.10.92 fix: fix stock_individual_fund_flow interface\n\n    1. 修复 stock_individual_fund_flow 接口\n\n1.10.91 fix: fix stock_share_hold_change_szse interface\n\n    1. 修复 stock_share_hold_change_szse 接口\n    2. 修复 futures_dce_position_rank 接口\n\n1.10.90 fix: fix futures_comex_inventory interface\n\n    1. 修复 futures_comex_inventory 接口\n\n1.10.89 add: add stock_share_hold_change_bse interface\n\n    1. 新增 stock_share_hold_change_bse 接口\n    2. 新增 stock_share_hold_change_sse 接口\n    3. 新增 stock_share_hold_change_szse 接口\n\n1.10.88 add: add stock_research_report_em interface\n\n    1. 新增 stock_research_report_em 接口\n\n1.10.87 add: add stock_zdhtmx_em interface\n\n    1. 新增 stock_zdhtmx_em 接口\n\n1.10.86 add: add stock_gddh_em interface\n\n    1. 新增 stock_gddh_em 接口\n\n1.10.85 fix: fix stock_hot_rank_wc interface\n\n    1. 修复 stock_hot_rank_wc 接口\n\n1.10.84 fix: fix stock_us_fundamental interface\n\n    1. 修复 stock_us_fundamental 接口\n\n1.10.83 add: add stock_industry_clf_hist_sw interface\n\n    1. 新增 stock_industry_clf_hist_sw 接口\n\n1.10.82 fix: fix currency_boc_sina interface\n\n    1. 修复 currency_boc_sina 接口\n    2. 修复 futures_dce_position_rank 接口\n    3. 修复 get_rank_sum_daily 接口\n\n1.10.81 fix: fix stock_bid_ask_em interface\n\n    1. 修复 stock_bid_ask_em 接口\n    2. 移除 stock_us_zh_spot 接口\n\n1.10.80 fix: fix macro_china_gyzjz interface\n\n    1. 修复 macro_china_gyzjz 接口\n\n1.10.79 add: add stock_hold_management_detail_em interface\n\n    1. 新增 stock_hold_management_detail_em 接口\n    2. 新增 stock_hold_management_person_em 接口\n    3. 新增 stock_gsrl_gsdt_em 接口\n\n1.10.78 fix: fix get_cffex_rank_table interface\n\n    1. 修复 get_cffex_rank_table 接口\n    2. 修复 futures_spot_price 接口\n\n1.10.77 add: add bond_cb_profile_sina interface\n\n    1. 新增 bond_cb_profile_sina 接口\n    2. 新增 bond_cb_summary_sina 接口\n\n1.10.76 fix: fix stock_notice_report interface\n\n    1. 修复 stock_notice_report 接口\n    2. 修复 stock_irm_cninfo 接口\n\n1.10.75 add: add macro_china_urban_unemployment interface\n\n    1. 新增 macro_china_urban_unemployment 接口\n\n1.10.74 add: add stock_sns_sseinfo interface\n\n    1. 新增 stock_sns_sseinfo 接口\n\n1.10.73 add: add stock_irm_cninfo interface\n\n    1. 新增 stock_irm_cninfo 接口\n    2. 新增 stock_irm_ans_cninfo 接口\n\n1.10.72 fix: fix stock_financial_hk_report_em interface\n\n    1. 修复 stock_financial_hk_report_em 接口\n\n1.10.71 fix: fix stock_us_hist interface\n\n    1. 修复 stock_us_hist 接口\n    2. 移除 sw 相关接口\n\n1.10.70 fix: fix stock_zh_a_hist interface\n\n    1. 修复 stock_zh_a_hist 接口\n\n1.10.69 fix: fix currency_latest interface\n\n    1. 修复 currency_latest 接口\n    2. 修复 currency_history 接口\n    3. 修复 currency_time_series 接口\n    4. 修复 currency_currencies 接口\n    5. 修复 currency_convert 接口\n\n1.10.68 fix: fix option_gfex_daily interface\n\n    1. 修复 option_gfex_daily 接口\n\n1.10.67 rem: rem futures_egg_price_yearly interface\n\n    1. 移除 futures_egg_price_yearly 等接口\n\n1.10.66 fix: fix stock_financial_report_sina interface\n\n    1. 修复 stock_financial_report_sina 接口\n\n1.10.65 fix: fix macro_china_lpr interface\n\n    1. 修复 macro_china_lpr 接口\n\n1.10.64 fix: fix stock_zh_b_spot interface\n\n    1. 修复 stock_zh_b_spot 接口\n\n1.10.63 fix: fix stock_esg_hz_sina interface\n\n    1. 修复 stock_esg_hz_sina 接口\n\n1.10.62 fix: fix index_hist_sw interface\n\n    1. 修复 index_hist_sw 接口\n\n1.10.61 fix: fix macro_cnbs interface\n\n    1. 修复 macro_cnbs 接口\n\n1.10.60 add: add macro_usa_cpi_yoy interface\n\n    1. 新增 macro_usa_cpi_yoy 接口\n\n1.10.59 add: add fund_announcement_personnel_em interface\n\n    1. 新增 fund_announcement_personnel_em 接口\n\n1.10.58 fix: fix fund_etf_hist_em interface\n\n    1. 修复 fund_etf_hist_em 接口\n\n1.10.57 fix: fix stock_zh_valuation_baidu interface\n\n    1. 修复 stock_zh_valuation_baidu 接口\n\n1.10.56 fix: fix stock_zh_b_daily interface\n\n    1. 修复 stock_zh_b_daily 接口\n\n1.10.55 fix: fix macro_usa_personal_spending interface\n\n    1. 修复 macro_usa_personal_spending 接口\n    2. 修复 append to concat 方法\n\n1.10.54 fix: fix macro_usa_core_cpi_monthly interface\n\n    1. 修复 macro_usa_core_cpi_monthly 接口\n\n1.10.53 fix: fix index_stock_cons_csindex interface\n\n    1. 修复 index_stock_cons_csindex 接口\n\n1.10.52 fix: fix stock_financial_hk_report_em interface\n\n    1. 修复 stock_financial_hk_report_em 接口\n    2. 修复 stock_financial_hk_analysis_indicator_em 接口\n    3. 修复 index_value_name_funddb 接口\n\n1.10.51 fix: fix fund_money_rank_em interface\n\n    1. 修复 fund_money_rank_em 接口\n\n1.10.50 fix: fix car_energy_sale_cpca interface\n\n    1. 修复 car_energy_sale_cpca 接口\n\n1.10.49 fix: fix stock_hot_rank_em interface\n\n    1. 修复 stock_hot_rank_em 接口\n    2. 移除 club_rank_game 接口\n    3. 移除 player_rank_game 接口\n\n1.10.48 add: add stock_esg_hz_sina interface\n\n    1. 新增 stock_esg_hz_sina 接口\n\n1.10.47 add: add stock_esg_rate_sina interface\n\n    1. 新增 stock_esg_rate_sina 接口\n\n1.10.46 fix: fix index_value_hist_funddb interface\n\n    1. 修复 index_value_hist_funddb 接口\n\n1.10.45 fix: fix stock_zh_a_minute interface\n\n    1. 修复 stock_zh_a_minute 接口\n\n1.10.44 fix: fix get_shfe_rank_table interface\n\n    1. 修复 get_shfe_rank_table 接口\n\n1.10.43 rem: rem index_vix interface\n\n    1. 移除 index_vix 接口\n\n1.10.42 fix: fix fund_rating_all interface\n\n    1. 修复 fund_rating_all 接口\n    2. 修复 fund_rating_sh 接口\n    3. 修复 fund_rating_zs 接口\n    4. 修复 fund_rating_ja 接口\n\n1.10.41 add: add fund_lof_hist_em interface\n\n    1. 新增 fund_lof_hist_em 接口\n    2. 新增 fund_lof_spot_em 接口\n    3. 新增 fund_lof_hist_min_em 接口\n\n1.10.40 fix: fix futures_news_baidu interface\n\n    1. 修复 futures_news_baidu 接口\n\n1.10.39 fix: fix stock_board_concept_hist_min_em interface\n\n    1. 修复 stock_board_concept_hist_min_em 接口\n\n1.10.38 fix: fix stock_board_industry_hist_min_em interface\n\n    1. 修复 stock_board_industry_hist_min_em 接口\n\n1.10.37 rem: rem index_stock_hist interface\n\n    1. 移除 index_stock_hist 接口\n\n1.10.36 fix: fix stock_sy_profile_em interface\n\n    1. 修复 stock_sy_profile_em 接口\n    2. 修复 stock_sy_yq_em 接口\n    3. 修复 stock_sy_jz_em 接口\n    4. 修复 stock_sy_em 接口\n    5. 修复 stock_sy_hy_em 接口\n\n1.10.35 add: add get_gfex_receipt interface\n\n    1. 新增 get_gfex_receipt 接口\n\n1.10.34 fix: fix futures_display_main_sina interface\n\n    1. 修复 futures_display_main_sina 接口\n\n1.10.33 fix: fix index_sugar_msweet interface\n\n    1. 修复 index_sugar_msweet 接口\n    2. 修复 index_eri 接口\n    3. 修复 drewry_wci_index 接口\n\n1.10.32 fix: fix get_cffex_daily interface\n\n    1. 修复 get_cffex_daily 接口\n\n1.10.31 fix: fix zh_subscribe_exchange_symbol interface\n\n    1. 修复 zh_subscribe_exchange_symbol 接口\n\n1.10.30 fix: fix stock_info_sz_name_code interface\n\n    1. 修复 stock_info_sz_name_code 接口\n\n1.10.29 fix: fix stock_zh_index_daily_em interface\n\n    1. 修复 stock_zh_index_daily_em 接口\n\n1.10.28 fix: fix stock_hot_up_em interface\n\n    1. 修复 stock_hot_up_em 接口\n\n1.10.27 fix: fix stock_hot_up_em interface\n\n    1. 修复 stock_hot_up_em 接口\n\n1.10.26 add: add stock_hot_up_em interface\n\n    1. 新增 stock_hot_up_em 接口\n\n1.10.25 fix: fix index_sugar_msweet interface\n\n    1. 修复 index_sugar_msweet 接口\n    2. 修复 index_inner_quote_sugar_msweet 接口\n    3. 修复 index_outer_quote_sugar_msweet 接口\n\n1.10.24 fix: fix stock_zh_a_daily interface\n\n    1. 修复 stock_zh_a_daily 接口\n\n1.10.23 fix: fix index_kq_fz interface\n\n    1. 修复 index_kq_fz 接口\n    2. 修复 index_kq_fashion 接口\n\n1.10.22 fix: fix macro_china_cpi_monthly interface\n\n    1. 修复 macro_china_cpi_monthly 接口\n\n1.10.21 fix: fix fund_report_stock_cninfo interface\n\n    1. 修复 fund_report_stock_cninfo 接口\n    2. 修复 fund_report_industry_allocation_cninfo 接口\n    3. 修复 fund_report_asset_allocation_cninfo 接口\n\n1.10.20 fix: fix stock_new_gh_cninfo interface\n\n    1. 修复 stock_new_gh_cninfo 接口\n    2. 修复 stock_new_ipo_cninfo 接口\n\n1.10.19 fix: fix bond_treasure_issue_cninfo interface\n\n    1. 修复 bond_treasure_issue_cninfo 接口\n    2. 修复 bond_local_government_issue_cninfo 接口\n    3. 修复 bond_corporate_issue_cninfo 接口\n    4. 修复 bond_cov_issue_cninfo 接口\n    5. 修复 bond_cov_stock_issue_cninfo 接口\n\n1.10.18 fix: fix index_yw interface\n\n    1. 修复 index_yw 接口\n    2. 修复 spot_goods 接口\n\n1.10.17 fix: fix stock_allotment_cninfo interface\n\n    1. 修复 stock_allotment_cninfo 接口\n\n1.10.16 fix: fix bond_zh_hs_cov_min interface\n\n    1. 修复 bond_zh_hs_cov_min 接口\n\n1.10.15 fix: fix bond_zh_hs_cov_pre_min interface\n\n    1. 修复 bond_zh_hs_cov_pre_min 接口\n\n1.10.14 fix: fix bond_zh_hs_cov_min interface\n\n    1. 修复 bond_zh_hs_cov_min 接口的时间显示问题\n\n1.10.13 fix: fix stock_share_change_cninfo interface\n\n    1. 修复 stock_share_change_cninfo 接口\n\n1.10.12 fix: fix bond_cb_adj_logs_jsl interface\n\n    1. 修复 bond_cb_adj_logs_jsl 接口\n\n1.10.11 fix: fix stock_zh_a_hist_pre_min_em interface\n\n    1. 修复 stock_zh_a_hist_pre_min_em 接口\n\n1.10.10 fix: fix stock_zh_a_hist interface\n\n    1. 修复 stock_zh_a_hist 接口\n\n1.10.9 fix: fix bond_zh_hs_cov_min interface\n\n    1. 修复 bond_zh_hs_cov_min 接口\n\n1.10.8 fix: fix futures_volatility_index_nh interface\n\n    1. 修复 futures_volatility_index_nh 接口\n\n1.10.7 fix: fix option_finance_board interface\n\n    1. 修复 option_finance_board 接口\n\n1.10.6 fix: fix futures_nh_volatility_index interface\n\n    1. 修复 futures_nh_volatility_index 接口\n\n1.10.5 fix: fix index_level_one_hist_sw interface\n\n    1. 修复 index_level_one_hist_sw 接口\n\n1.10.4 fix: fix futures_return_index_nh interface\n\n    1. 修复 futures_return_index_nh 接口\n    2. 修复 futures_price_index_nh 接口\n\n1.10.3 fix: fix stock_gdfx_holding_analyse_em interface\n\n    1. 修复 stock_gdfx_holding_analyse_em 接口\n\n1.10.2 fix: fix stock_gdfx_holding_detail_em interface\n\n    1. 修复 stock_gdfx_holding_detail_em 接口\n    2. 修复 stock_gdfx_holding_analyse_em 接口\n\n1.10.1 fix: fix stock_hold_control_cninfo interface\n\n    1. 修复 stock_hold_control_cninfo 接口\n\n1.9.99 fix: fix stock_hold_num_cninfo interface\n\n    1. 修复 stock_hold_num_cninfo 接口\n\n1.9.98 fix: fix stock_hold_control_cninfo interface\n\n    1. 修复 stock_hold_control_cninfo 接口\n\n1.9.97 fix: fix stock_industry_category_cninfo interface\n\n    1. 修复 stock_industry_category_cninfo 接口\n\n1.9.96 fix: fix stock_hold_control_cninfo interface\n\n    1. 修复 stock_hold_control_cninfo 接口\n\n1.9.95 fix: fix stock_zh_index_hist_csindex interface\n\n    1. 修复 stock_zh_index_hist_csindex 接口\n\n1.9.94 fix: fix stock_a_indicator_lg interface\n\n    1. 修复 stock_a_indicator_lg 接口\n\n1.9.93 fix: fix index_level_one_hist_sw interface\n\n    1. 修复 index_level_one_hist_sw 接口\n\n1.9.92 fix: fix article_ff_crr interface\n\n    1. 修复 article_ff_crr 接口\n\n1.9.91 add: add stock_financial_abstract_ths interface\n\n    1. 新增 stock_financial_abstract_ths 接口\n\n1.9.90 fix: fix stock_sse_deal_daily interface\n\n    1. 修复 stock_sse_deal_daily 接口\n\n1.9.89 fix: fix index_kq_fz interface\n\n    1. 修复 index_kq_fz 接口\n\n1.9.88 fix: fix setup.py\n\n    1. 移除 setup.py 中的相关依赖\n\n1.9.87 add: add option_minute_em interface\n\n    1. 新增 option_minute_em 接口\n\n1.9.86 fix: fix index_kq_fz interface\n\n    1. 修复 index_kq_fz 接口\n\n1.9.85 fix: fix option_dce_daily interface\n\n    1. 修复 option_dce_daily 接口\n\n1.9.84 fix: fix stock_hk_fhpx_detail_ths interface\n\n    1. 修复 stock_hk_fhpx_detail_ths 接口\n\n1.9.83 add: add stock_concept_fund_flow_hist interface\n\n    1. 新增 stock_concept_fund_flow_hist 接口\n\n1.9.82 fix: fix currency_boc_safe interface\n\n    1. 修复 currency_boc_safe 接口\n\n1.9.81 add: add stock_hk_index_spot_sina interface\n\n    1. 新增 stock_hk_index_spot_sina 接口\n    2. 新增 stock_hk_index_daily_em 接口\n    3. 新增 stock_hk_index_spot_em 接口\n    4. 新增 stock_hk_index_daily_sina 接口\n\n1.9.80 fix: fix futures_spot_price interface\n\n    1. 修复 futures_spot_price 接口\n\n1.9.79 fix: fix stock_sse_deal_daily interface\n\n    1. 修复 stock_sse_deal_daily 接口\n\n1.9.78 fix: fix macro_usa_gdp_monthly interface\n\n    1. 修复 macro_usa_gdp_monthly 接口\n\n1.9.77 fix: fix stock_hot_rank_wc interface\n\n    1. 修复 stock_hot_rank_wc 接口\n\n1.9.76 fix: fix stock_sector_detail interface\n\n    1. 修复 stock_sector_detail 接口\n\n1.9.75 fix: fix stock_board_industry_index_ths interface\n\n    1. 修复 stock_board_industry_index_ths 接口\n\n1.9.74 fix: fix get_shfe_rank_table interface\n\n    1. 修复 get_shfe_rank_table 接口\n\n1.9.73 add: add bond_zh_cov_info_ths interface\n\n    1. 新增 bond_zh_cov_info_ths 接口\n\n1.9.72 fix: fix fund_manager interface\n\n    1. 修复 fund_manager 接口\n\n1.9.71 fix: fix stock_lh_yyb_most interface\n\n    1. 修复 stock_lh_yyb_most 接口\n\n1.9.70 fix: fix stock_szse_sector_summary interface\n\n    1. 修复 stock_szse_sector_summary 接口\n\n1.9.69 fix: fix stock_lh_yyb_capital interface\n\n    1. 修复 stock_lh_yyb_capital 接口\n\n1.9.68 fix: fix stock_lh_yyb_capital interface\n\n    1. 修复 stock_lh_yyb_capital 接口\n\n1.9.67 fix: fix futures_zh_daily_sina interface\n\n    1. 修复 futures_zh_daily_sina 接口\n\n1.9.66 fix: fix match_main_contract interface\n\n    1. 修复 match_main_contract 接口\n\n1.9.65 fix: fix stock_hot_search_baidu interface\n\n    1. 修复 stock_hot_search_baidu 接口\n\n1.9.64 fix: fix stock_a_indicator_lg interface\n\n    1. 修复 stock_a_indicator_lg 接口\n\n1.9.63 fix: fix get_czce_rank_table interface\n\n    1. 修复 get_czce_rank_table 接口\n\n1.9.62 fix: fix bond_zh_us_rate interface\n\n    1. 修复 bond_zh_us_rate 接口\n\n1.9.61 fix: fix stock_lhb_detail_daily_sina interface\n\n    1. 修复 stock_lhb_detail_daily_sina 接口\n\n1.9.60 add: add stock_hk_fhpx_detail_ths interface\n\n    1. 新增 stock_hk_fhpx_detail_ths 接口\n\n1.9.59 fix: fix stock_hot_search_baidu interface\n\n    1. 修复 stock_hot_search_baidu 接口\n\n1.9.58 add: add option_gfex_daily interface\n\n    1. 新增 option_gfex_daily 接口\n    2. 新增 option_gfex_vol_daily 接口\n\n1.9.57 fix: fix stock_lhb_detail_em interface\n\n    1. 修复 stock_lhb_detail_em 接口\n\n1.9.56 fix: fix get_receipt interface\n\n    1. 修复 get_receipt 接口\n\n1.9.55 fix: fix stock_zh_valuation_baidu interface\n\n    1. 修复 stock_zh_valuation_baidu 接口\n\n1.9.54 fix: fix stock_board_concept_cons_ths interface\n\n    1. 修复 stock_board_concept_cons_ths 接口\n\n1.9.53 fix: fix get_ine_daily interface\n\n    1. 修复 get_ine_daily 接口\n\n1.9.52 fix: fix get_shfe_rank_table interface\n\n    1. 修复 get_shfe_rank_table 接口\n\n1.9.51 fix: fix get_shfe_daily interface\n\n    1. 修复 get_shfe_daily 接口\n\n1.9.50 fix: fix stock_a_all_pb interface\n\n    1. 修复 stock_a_all_pb 接口\n    2. 修复 stock_a_ttm_lyr 接口\n\n1.9.49 add: add stock_lhb_yybph_em interface\n\n    1. 新增 stock_lhb_yybph_em 接口\n    2. 新增 stock_lhb_jgstatistic_em 接口\n    3. 新增 stock_lhb_traderstatistic_em 接口\n\n1.9.48 fix: fix index_stock_cons interface\n\n    1. 修复 index_stock_cons 接口\n\n1.9.47 fix: fix option_dce_daily interface\n\n    1. 修复 option_dce_daily 接口\n\n1.9.46 fix: fix stock_a_gxl_lg interface\n\n    1. 修复 stock_a_gxl_lg 接口\n\n1.9.45 add: add stock_fhps_detail_ths interface\n\n    1. 新增 stock_fhps_detail_ths 接口\n\n1.9.44 fix: fix stock_a_high_low_statistics interface\n\n    1. 修复 stock_a_high_low_statistics 接口\n\n1.9.43 fix: fix stock_a_congestion_lg interface\n\n    1. 修复 stock_a_congestion_lg 接口\n\n1.9.42 add: add stock_bid_ask_em interface\n\n    1. 新增 stock_bid_ask_em 接口\n\n1.9.41 fix: fix stock_a_indicator_lg interface\n\n    1. 修复 stock_a_indicator_lg 接口\n\n1.9.40 fix: fix stock_profit_forecast_em interface\n\n    1. 修复 stock_profit_forecast_em 接口\n    2. 修复 stock_index_pb_lg 接口\n    3. 修复 stock_index_pe_lg 接口\n\n1.9.39 fix: fix fund_stock_position_lg interface\n\n    1. 修复 fund_stock_position_lg 接口\n    2. 修复 fund_balance_position_lg 接口\n    3. 修复 fund_linghuo_position_lg 接口\n    4. 修复 stock_ebs_lg 接口\n    5. 修复 stock_buffett_index_lg 接口\n\n1.9.38 fix: fix stock_a_lg_indicator interface\n\n    1. 修复 stock_a_lg_indicator 接口\n\n1.9.37 fix: fix stock_hk_indicator_eniu interface\n\n    1. 修复 stock_hk_indicator_eniu 接口\n\n1.9.36 fix: fix stock_market_pe_lg interface\n\n    1. 修复 stock_market_pe_lg 接口\n    2. 修复 stock_market_pb_lg 接口\n    3. 修复 stock_index_pb_lg 接口\n    4. 修复 stock_index_pe_lg 接口\n\n1.9.35 fix: fix stock_a_lg_indicator interface\n\n    1. 修复 stock_a_lg_indicator 接口\n\n1.9.34 fix: fix stock_zh_a_tick_tx_js interface\n\n    1. 修复 stock_zh_a_tick_tx_js 接口\n\n1.9.33 add: add stock_hk_main_board_spot_em interface\n\n    1. 新增 stock_hk_main_board_spot_em 接口\n\n1.9.32 fix: fix bank_fjcf_table_detail interface\n\n    1. 修复 bank_fjcf_table_detail 接口\n\n1.9.31 fix: fix amac_fund_info interface\n\n    1. 修复 amac_fund_info 接口\n\n1.9.30 fix: fix stock_a_lg_indicator interface\n\n    1. 修复 stock_a_lg_indicator 接口\n\n1.9.29 fix: fix stock_a_lg_indicator interface\n\n    1. 修复 stock_a_lg_indicator 接口\n\n1.9.28 fix: fix stock_financial_report_sina interface\n\n    1. 修复 stock_financial_report_sina 接口\n\n1.9.27 fix: fix fund_exchange_rank_em interface\n\n    1. 修复 fund_exchange_rank_em 接口\n    2. 修复 fund_money_rank_em 接口\n    3. 修复 fund_hk_rank_em 接口\n    4. 修复 fund_lcx_rank_em 接口\n\n1.9.26 fix: fix bond_cb_jsl interface\n\n    1. 修复 bond_cb_jsl 接口\n\n1.9.25 add: add stock_hk_hot_rank_em interface\n\n    1. 新增 stock_hk_hot_rank_em 接口\n    2. 新增 stock_hk_hot_rank_detail_em 接口\n    3. 新增 stock_hk_hot_rank_latest_em 接口\n    4. 新增 stock_hk_hot_rank_detail_realtime_em 接口\n\n1.9.24 fix: fix bond_cb_adj_logs_jsl interface\n\n    1. 修复 bond_cb_adj_logs_jsl 接口\n\n1.9.23 fix: fix bond_cb_redeem_jsl interface\n\n    1. 修复 bond_cb_redeem_jsl 接口\n\n1.9.22 fix: fix fund_hk_fund_hist_em interface\n\n    1. 修复 fund_hk_fund_hist_em 接口\n\n1.9.21 fix: fix fund_financial_fund_info_em interface\n\n    1. 修复 fund_financial_fund_info_em 接口\n\n1.9.20 fix: fix fund_financial_fund_info_em interface\n\n    1. 修复 fund_financial_fund_info_em 接口\n\n1.9.19 fix: fix macro_cnbs interface\n\n    1. 修复 macro_cnbs 接口\n\n1.9.18 fix: fix macro_china_market_margin_sh interface\n\n    1. 修复 macro_china_market_margin_sh 接口\n\n1.9.17 add: add stock_board_industry_spot_em interface\n\n    1. 新增 stock_board_industry_spot_em 接口\n\n1.9.16 fix: fix stock_financial_abstract interface\n\n    1. 修复 stock_financial_abstract 接口\n\n1.9.15 fix: fix stock_hk_daily interface\n\n    1. 修复 stock_hk_daily 接口\n\n1.9.14 fix: fix option_risk_analysis_em interface\n\n    1. 修复 option_risk_analysis_em 接口\n\n1.9.13 fix: fix stock_zh_valuation_baidu interface\n\n    1. 修复 stock_zh_valuation_baidu 接口\n\n1.9.12 fix: fix stock_hot_rank_wc interface\n\n    1. 修复 stock_hot_rank_wc 接口\n\n1.9.11 add: add stock_sector_fund_flow_hist interface\n\n    1. 新增 stock_sector_fund_flow_hist 接口\n    2. 新增 stock_sector_fund_flow_summary 接口\n\n1.9.10 add: add macro_shipping_bcti interface\n\n    1. 新增 macro_shipping_bcti 接口\n\n1.9.9 add: add macro_shipping_bci interface\n\n    1. 新增 macro_shipping_bci 接口\n    2. 新增 macro_shipping_bdi 接口\n    3. 新增 macro_shipping_bpi 接口\n    4. 新增 macro_shipping_bcti 接口\n\n1.9.8 fix: fix stock_hk_valuation_baidu interface\n\n    1. 修复 stock_hk_valuation_baidu 接口\n\n1.9.7 add: add stock_profit_forecast_ths interface\n\n    1. 新增 stock_profit_forecast_ths 接口\n    2. 重命名 stock_profit_forecast 为 stock_profit_forecast_em\n\n1.9.6 fix: fix futures_hog_info interface\n\n    1. 修复 futures_hog_info 接口\n\n1.9.5 fix: fix stock_info_a_code_name interface\n\n    1. 修复 stock_info_a_code_name 接口\n\n1.9.4 fix: fix drewry_wci_index interface\n\n    1. 修复 drewry_wci_index 接口\n\n1.9.3 fix: fix fx_quote_baidu interface\n\n    1. 修复 fx_quote_baidu 接口\n\n1.9.2 fix: fix stock_xgsglb_em interface\n\n    1. 修复 stock_xgsglb_em 接口\n\n1.9.1 fix: fix index_value_name_funddb interface\n\n    1. 修复 index_value_name_funddb 接口\n\n1.8.99 add: add futures_news_shmet interface\n\n    1. 新增 futures_news_shmet 接口\n\n1.8.98 fix: fix stock_info_sz_delist interface\n\n    1. 修复 stock_info_sz_delist 接口\n\n1.8.97 fix: fix futures_egg_price_yearly interface\n\n    1. 修复 futures_egg_price_yearly 接口\n    2. 修复 futures_egg_price_area 接口\n    3. 修复 futures_egg_price 接口\n\n1.8.96 fix: fix option_finance_board interface\n\n    1. 修复 option_finance_board 接口\n\n1.8.95 fix: fix index_zh_a_hist interface\n\n    1. 修复 index_zh_a_hist 接口\n\n1.8.94 fix: fix Dockerfile\n\n    1. 修复 Dockerfile\n\n1.8.93 fix: fix stock_gdfx_holding_detail_em interface\n\n    1. 修复 stock_gdfx_holding_detail_em 接口\n\n1.8.92 fix: fix stock_institute_hold interface\n\n    1. 修复 stock_institute_hold 接口\n\n1.8.91 fix: fix sunrise_monthly interface\n\n    1. 修复 sunrise_monthly 接口\n\n1.8.90 fix: fix bond_info_detail_cm interface\n\n    1. 修复 bond_info_detail_cm 接口\n\n1.8.89 fix: fix sunrise_city_list interface\n\n    1. 修复 sunrise_city_list 接口\n\n1.8.88 fix: fix stock_info_sz_delist interface\n\n    1. 修复 stock_info_sz_delist 接口\n\n1.8.87 fix: fix stock_info_sz_change_name interface\n\n    1. 修复 stock_info_sz_change_name 接口\n\n1.8.86 fix: fix stock_info_sh_delist interface\n\n    1. 修复 stock_info_sh_delist 接口\n\n1.8.85 fix: fix stock_info_sh_name_code interface\n\n    1. 修复 stock_info_sh_name_code 接口\n\n1.8.84 remove: remove stock_zh_a_scr_report interface\n\n    1. 移除 stock_zh_a_scr_report 接口\n\n1.8.83 fix: fix stock_info_sh_name_code interface\n\n    1. 修复 stock_info_sh_name_code 接口\n\n1.8.82 fix: fix stock_fund_stock_holder interface\n\n    1. 修复 stock_fund_stock_holder 接口\n\n1.8.81 fix: fix futures_hog_info interface\n\n    1. 修复 futures_hog_info 接口\n\n1.8.80 fix: fix stock_profit_forecast interface\n\n    1. 修复 stock_profit_forecast 接口\n\n1.8.79 fix: fix stock_hk_valuation_baidu interface\n\n    1. 修复 stock_hk_valuation_baidu 接口\n\n1.8.78 fix: fix stock_profit_forecast interface\n\n    1. 修复 stock_profit_forecast 接口\n\n1.8.77 fix: fix stock_analyst_rank_em interface\n\n    1. 修复 stock_analyst_rank_em 接口\n\n1.8.76 remove: remove js_news and ws interface\n\n    1. 移除 js_news 及 ws 相关接口\n\n1.8.75 add: add stock_cy_a_spot_em interface\n\n    1. 新增 stock_cy_a_spot_em 接口\n\n1.8.74 fix: fix drewry_wci_index interface\n\n    1. 修复 drewry_wci_index 接口\n\n1.8.73 add: add stock_zyjs_ths interface\n\n    1. 新增 stock_zyjs_ths 接口\n\n1.8.72 fix: fix drewry_wci_index interface\n\n    1. 修复 drewry_wci_index 接口\n\n1.8.71 add: add stock_zygc_em interface\n\n    1. 新增 stock_zygc_em 接口\n\n1.8.70 add: add stock_market_pe_lg interface\n\n    1. 新增 stock_market_pe_lg 接口\n    2. 新增 stock_index_pe_lg 接口\n    3. 新增 stock_market_pb_lg 接口\n    4. 新增 stock_index_pb_lg 接口\n\n1.8.69 fix: fix stock_individual_fund_flow_rank interface\n\n    1. 修复 stock_individual_fund_flow_rank 接口\n\n1.8.68 fix: fix stock_individual_fund_flow interface\n\n    1. 修复 stock_individual_fund_flow 接口\n\n1.8.67 fix: fix python warning 3.7.x support\n\n    1. 修复 python warning 3.7.x support\n\n1.8.66 fix: fix python 3.7.x support\n\n    1. 修复 python 3.7.x support\n\n1.8.65 fix: fix get_roll_yield_bar interface\n\n    1. 修复 get_roll_yield_bar 接口\n\n1.8.64 fix: fix stock_ggcg_em interface\n\n    1. 修复 stock_ggcg_em 接口\n\n1.8.63 fix: fix stock_cash_flow_sheet_by_report_em interface\n\n    1. 修复 stock_cash_flow_sheet_by_report_em 接口\n\n1.8.62 fix: fix stock_board_industry_index_ths interface\n\n    1. 修复 stock_board_industry_index_ths 接口\n\n1.8.61 fix: fix futures_comm_info interface\n\n    1. 修复 futures_comm_info 接口\n\n1.8.60 fix: fix hurun_rank interface\n\n    1. 修复 hurun_rank 接口\n\n1.8.59 fix: fix stock_zh_valuation_baidu interface\n\n    1. 修复 stock_zh_valuation_baidu 接口\n\n1.8.58 fix: fix get_calendar interface\n\n    1. 修复 get_calendar 接口\n\n1.8.57 fix: fix stock_szse_summary interface\n\n    1. 修复 stock_szse_summary 接口\n\n1.8.56 fix: fix stock_hk_valuation_baidu interface\n\n    1. 修复 stock_hk_valuation_baidu 接口\n\n1.8.55 fix: fix macro_usa_pmi interface\n\n    1. 修复 macro_usa_pmi 接口\n\n1.8.54 fix: fix get_roll_yield_bar interface\n\n    1. 修复 get_roll_yield_bar 接口\n\n1.8.53 fix: fix stock_hot_rank_wc interface\n\n    1. 修复 stock_hot_rank_wc 接口\n\n1.8.52 fix: fix index_value_hist_funddb interface\n\n    1. 修复 index_value_hist_funddb 接口\n\n1.8.51 fix: fix fortune_rank interface\n\n    1. 修复 fortune_rank 接口\n\n1.8.50 fix: fix stock_us_daily interface\n\n    1. 修复 stock_us_daily 接口\n\n1.8.49 fix: fix futures_comm_info interface\n\n    1. 修复 futures_comm_info 接口\n\n1.8.48 add: add fund_etf_hist_em interface\n\n    1. 新增 fund_etf_hist_em 接口\n    2. 新增 fund_etf_hist_min_em 接口\n    3. 新增 fund_etf_spot_em 接口\n\n1.8.47 add: add option_cffex_sz50_list_sina interface\n\n    1. 新增 option_cffex_sz50_list_sina 接口\n    2. 新增 option_cffex_sz50_spot_sina 接口\n    3. 新增 option_cffex_sz50_daily_sina 接口\n\n1.8.46 fix: fix get_roll_yield_bar interface\n\n    1. 修复 get_roll_yield_bar 接口\n\n1.8.45 fix: fix calendar.json\n\n    1. 新增 calendar.json 2023 日历数据\n\n1.8.44 fix: fix stock_info_bj_name_code interface\n\n    1. 修复 stock_info_bj_name_code 接口\n\n1.8.43 add: add stock_ebs_lg interface\n\n    1. 新增 stock_ebs_lg 接口\n\n1.8.42 add: add get_gfex_daily interface\n\n    1. 新增 get_gfex_daily 接口, 获取广期所的量价数据\n\n1.8.41 add: add futures_index_ccidx interface\n\n    1. 新增 futures_index_ccidx 接口\n\n1.8.40 add: add fund_balance_position_lg interface\n\n    1. 新增 fund_balance_position_lg 接口\n\n1.8.39 add: add stock_board_change_em interface\n\n    1. 新增 stock_board_change_em 接口\n\n1.8.38 fix: fix macro_cons_gold interface\n\n    1. 修复 macro_cons_gold 接口\n\n1.8.37 add: add fund_stock_position_lg interface\n\n    1. 新增 fund_stock_position_lg 接口\n\n1.8.36 add: add stock_a_congestion_lg interface\n\n    1. 新增 stock_a_congestion_lg 接口\n\n1.8.35 add: add stock_hk_gxl_lg interface\n\n    1. 新增 stock_hk_gxl_lg 接口\n\n1.8.34 add: add stock_a_gxl_lg interface\n\n    1. 新增 stock_a_gxl_lg 接口\n\n1.8.33 fix: fix stock_hot_rank_em interface\n\n    1. 修复 stock_hot_rank_em 接口\n\n1.8.32 fix: fix js_news interface\n\n    1. 修复 js_news 接口\n\n1.8.31 fix: fix get_dce_daily interface\n\n    1. 修复 get_dce_daily 接口\n\n1.8.30 fix: fix index_value_name_funddb interface\n\n    1. 修复 index_value_name_funddb 接口\n\n1.8.29 fix: fix baidu_search_index interface\n\n    1. 修复 baidu_search_index 接口\n    2. 修复 baidu_info_index 接口\n    3. 修复 baidu_media_index 接口\n\n1.8.28 fix: fix fund_fh_rank_em interface\n\n    1. 修复 fund_fh_rank_em 接口\n\n1.8.27 fix: fix fund_cf_em interface\n\n    1. 修复 fund_cf_em 接口\n\n1.8.26 fix: fix bond_china_close_return_map interface\n\n    1. 修复 bond_china_close_return_map 接口\n\n1.8.25 fix: fix stock_circulate_stock_holder interface\n\n    1. 修复 stock_circulate_stock_holder 接口\n\n1.8.24 fix: fix stock_ipo_benefit_ths interface\n\n    1. 修复 stock_ipo_benefit_ths 接口\n\n1.8.23 add: add stock_restricted_release_summary_em interface\n\n    1. 新增 stock_restricted_release_summary_em 接口\n    2. 新增 stock_restricted_release_detail_em 接口\n    3. 新增 stock_restricted_release_queue_em 接口\n    4. 新增 stock_restricted_release_stockholder_em 接口\n    5. 修复 stock_restricted_release_queue_sina 接口\n\n1.8.22 fix: fix stock_margin_detail_szse interface\n\n    1. 修复 stock_margin_detail_szse 接口\n\n1.8.21 fix: fix stock_board_concept_hist_em interface\n\n    1. 修复 stock_board_concept_hist_em 接口\n\n1.8.20 fix: fix stock_board_concept_hist_em interface\n\n    1. 修复 stock_board_concept_hist_em 接口\n\n1.8.19 fix: fix stock_balance_sheet_by_yearly_em interface\n\n    1. 修复 stock_balance_sheet_by_yearly_em 接口\n\n1.8.18 add: add stock_hsgt_fund_flow_summary_em interface\n\n    1. 新增 stock_hsgt_fund_flow_summary_em 接口\n\n1.8.17 fix: fix macro_china_fdi interface\n\n    1. 修复 macro_china_fdi 接口\n\n1.8.16 fix: fix macro_china_swap_rate interface\n\n    1. 修复 macro_china_swap_rate 接口\n\n1.8.15 fix: fix stock_price_js interface\n\n    1. 修复 stock_price_js 接口\n\n1.8.14 add: add stock_board_industry_summary_ths interface\n\n    1. 新增 stock_board_industry_summary_ths 接口\n\n1.8.13 fix: fix macro_china_new_house_price interface\n\n    1. 修复 macro_china_new_house_price 接口\n    2. 修复 macro_china_enterprise_boom_index 接口\n    3. 修复 macro_china_national_tax_receipts 接口\n\n1.8.12 fix: fix stock_yjyg_em interface\n\n    1. 修复 stock_yjyg_em 接口\n\n1.8.11 fix: fix macro_china_ppi interface\n\n    1. 修复 macro_china_ppi 接口\n    2. 修复 macro_china_pmi 接口\n\n1.8.10 fix: fix stock_a_all_pb interface\n\n    1. 修复 stock_a_all_pb 接口\n    2. 修复 macro_china_cpi 接口\n\n1.8.9 fix: fix stock_a_ttm_lyr interface\n\n    1. 修复 stock_a_ttm_lyr 接口\n\n1.8.8 fix: fix macro_china_gdp interface\n\n    1. 修复 macro_china_gdp 接口\n\n1.8.7 fix: fix stock_a_below_net_asset_statistics interface\n\n    1. 修复 stock_a_below_net_asset_statistics 接口\n\n1.8.6 fix: fix stock_market_activity_legu interface\n\n    1. 修复 stock_market_activity_legu 接口\n\n1.8.5 fix: fix stock_a_lg_indicator interface\n\n    1. 修复 stock_a_lg_indicator 接口\n\n1.8.4 fix: fix macro_china_hgjck interface\n\n    1. 修复 macro_china_hgjck 接口\n\n1.8.3 fix: fix stock_pg_em interface\n\n    1. 修复 stock_pg_em 接口\n    2. 修复 stock_qbzf_em 接口\n\n1.8.2 fix: fix fund_portfolio_hold_em interface\n\n    1. 修复 fund_portfolio_hold_em 接口\n\n1.8.1 fix: fix stock_dxsyl_em interface\n\n    1. 修复 stock_dxsyl_em 接口\n    2. 修复 macro_china_qyspjg 接口\n\n1.7.99 fix: fix stock_lhb_detail_daily_sina interface\n\n    1. 修复 stock_lhb_detail_daily_sina 接口\n    2. 修复 stock_lhb_ggtj_sina 接口\n    3. 修复 stock_lhb_yytj_sina 接口\n    4. 修复 stock_lhb_jgzz_sina 接口\n    5. 修复 stock_lhb_jgmx_sina 接口\n\n1.7.98 add: add stock_zh_a_gdhs interface\n\n    1. 修复 stock_zh_a_gdhs 接口\n\n1.7.97 add: add index_hog_spot_price interface\n\n    1. 新增 index_hog_spot_price 接口\n\n1.7.96 fix: fix futures_hog_info interface\n\n    1. 修复 futures_hog_info 接口\n\n1.7.95 fix: fix spot_golden_benchmark_sge interface\n\n    1. 修复 spot_golden_benchmark_sge 接口\n\n1.7.94 fix: fix fund_portfolio_hold_em interface\n\n    1. 修复 fund_portfolio_hold_em 接口\n\n1.7.93 fix: fix sw_index_third_cons interface\n\n    1. 修复 sw_index_third_cons 接口\n\n1.7.92 fix: fix fund_portfolio_hold_em interface\n\n    1. 修复 fund_portfolio_hold_em 接口\n\n1.7.91 fix: fix futures_price_index_nh interface\n\n    1. 修复 futures_price_index_nh 接口时区对齐问题\n\n1.7.90 fix: fix stock_yjbb_em interface\n\n    1. 修复 stock_yjbb_em 接口\n\n1.7.89 fix: fix stock_zh_index_daily_tx interface\n\n    1. 修复 stock_zh_index_daily_tx 接口的索引问题\n\n1.7.88 fix: fix stock_news_em interface\n\n    1. 修复 stock_news_em 接口\n\n1.7.87 fix: fix macro_uk interface\n\n    1. 修复 macro_uk 所有接口\n\n1.7.86 fix: fix bond_info_cm interface\n\n    1. 修复 bond_info_cm 接口\n\n1.7.85 fix: fix stock_board_industry_hist_em interface\n\n    1. 修复 stock_board_industry_hist_em 接口\n\n1.7.84 add: add bond_info_cm interface\n\n    1. 新增 bond_info_cm 接口\n    2. 新增 bond_info_detail_cm_df 接口\n\n1.7.83 fix: fix macro_japan interface\n\n    1. 修复 macro_japan 相关接口\n\n1.7.82 fix: fix index_analysis_daily_sw interface\n\n    1. 重命名 index_analysis_sw 为 index_analysis_daily_sw 接口\n    2. 新增 index_analysis_weekly_sw 接口\n    3. 新增 index_analysis_monthly_sw 接口\n    4. 新增 index_analysis_week_month_sw 接口\n\n1.7.81 fix: fix macro_swiss_svme interface\n\n    1. 修复 macro_swiss_svme 接口\n\n1.7.80 fix: fix stock_a_below_net_asset_statistics interface\n\n    1. 修复 stock_a_below_net_asset_statistics 接口\n\n1.7.79 fix: fix macro_germany interface\n\n    1. 修复 macro_germany 所有接口\n\n1.7.78 add: add index_analysis_sw interface\n\n    1. 新增 index_analysis_sw 接口\n\n1.7.77 fix: fix index_value_hist_funddb interface\n\n    1. 修复 index_value_hist_funddb 接口\n\n1.7.76 fix: fix macro_euro_gdp_yoy interface\n\n    1. 修复 macro_euro_gdp_yoy 接口\n\n1.7.75 add: add index_component_sw interface\n\n    1. 新增 index_component_sw 接口\n\n1.7.74 fix: fix futures_news_baidu interface\n\n    1. 修复 futures_news_baidu 接口\n\n1.7.73 fix: fix stock_zh_index_daily_tx interface\n\n    1. 修复 stock_zh_index_daily_tx 接口\n\n1.7.72 add: add index_min_sw interface\n\n    1. 新增 index_min_sw 接口\n\n1.7.71 add: add support for Python 3.11\n\n    1. 增加对 Python 3.11 的支持\n\n1.7.70 fix: fix index_hist_sw interface\n\n    1. 修复 index_hist_sw 接口\n\n1.7.69 add: add index_hist_sw interface\n\n    1. 新增 index_hist_sw 接口\n\n1.7.68 fix: fix hurun_rank interface\n\n    1. 修复 hurun_rank 接口\n\n1.7.67 fix: fix xincaifu_rank interface\n\n    1. 修复 xincaifu_rank 接口\n\n1.7.66 add: add index_realtime_sw interface\n\n    1. 新增 index_realtime_sw 接口\n\n1.7.65 fix: fix futures_rule interface\n\n    1. 修复 futures_rule 接口\n\n1.7.64 add: add option_50etf_min_qvix interface\n\n    1. 新增 option_50etf_min_qvix 接口\n\n1.7.63 add: add option_300etf_min_qvix interface\n\n    1. 新增 option_300etf_min_qvix 接口\n\n1.7.62 add: add option_300etf_qvix interface\n\n    1. 新增 option_300etf_qvix 接口\n\n1.7.61 add: add option_50etf_qvix interface\n\n    1. 新增 option_50etf_qvix 接口\n\n1.7.60 fix: fix stock_zh_a_spot_em interface\n\n    1. 修复 stock_zh_a_spot_em 接口\n\n1.7.59 fix: fix stock_a_high_low_statistics interface\n\n    1. 修复 stock_a_high_low_statistics 接口\n\n1.7.58 fix: fix bond_cb_redeem_jsl interface\n\n    1. 修复 bond_cb_redeem_jsl 接口\n\n1.7.57 fix: fix stock_a_high_low_statistics interface\n\n    1. 修复 stock_a_high_low_statistics 接口\n\n1.7.56 fix: fix stock_buffett_index_lg interface\n\n    1. 修复 stock_buffett_index_lg 接口\n\n1.7.55 add: add fx_quote_baidu interface\n\n    1. 新增 fx_quote_baidu 接口\n\n1.7.54 fix: fix stock_a_lg_indicator interface\n\n    1. 修复 stock_a_lg_indicator 接口\n\n1.7.53 add: add stock_buffett_index_lg interface\n\n    1. 新增 stock_buffett_index_lg 接口\n\n1.7.52 fix: fix stock_sse_summary interface\n\n    1. 修复 stock_sse_summary 接口的字段对齐问题\n\n1.7.51 fix: fix stock_a_lg_indicator interface\n\n    1. 修复 stock_a_lg_indicator 接口\n\n1.7.50 add: add stock_hot_search_baidu interface\n\n    1. 新增 stock_hot_search_baidu 接口，获取百度热搜股票的数据\n\n1.7.49 add: add futures_news_baidu interface\n\n    1. 新增 futures_news_baidu 接口，获取百度股市通中期货相关新闻数据\n\n1.7.48 add: add stock_zh_vote_baidu interface\n\n    1. 新增 stock_zh_vote_baidu 接口\n\n1.7.47 add: add stock_zh_valuation_baidu interface\n\n    1. 新增 stock_zh_valuation_baidu 接口\n\n1.7.46 fix: fix stock_hk_valuation_baidu interface\n\n    1. 修复 stock_hk_valuation_baidu 接口\n\n1.7.45 add: add stock_hk_valuation_baidu interface\n\n    1. 新增 stock_hk_valuation_baidu 接口\n\n1.7.44 add: add stock_allotment_cninfo interface\n\n    1. 新增 stock_allotment_cninfo 接口\n\n1.7.43 fix: fix stock_a_all_pb interface\n\n    1. 修复 stock_a_all_pb 接口\n\n1.7.42 add: add stock_sgt_reference_exchange_rate_szse interface\n\n    1. 新增 stock_sgt_reference_exchange_rate_szse 接口\n\n1.7.41 add: add stock_sgt_reference_exchange_rate_sse interface\n\n    1. 新增 stock_sgt_reference_exchange_rate_sse 接口\n\n1.7.40 add: add stock_sgt_settlement_exchange_rate_sse interface\n\n    1. 新增 stock_sgt_settlement_exchange_rate_sse 接口\n\n1.7.39 add: add stock_sgt_settlement_exchange_rate_szse interface\n\n    1. 新增 stock_sgt_settlement_exchange_rate_szse 接口\n\n1.7.38 add: add sw_index_second_info interface\n\n    1. 新增 sw_index_second_info 接口\n\n1.7.37 add: add sw_index_first_info interface\n\n    1. 新增 sw_index_first_info 接口\n\n1.7.36 fix: fix rename branch master to main\n\n    1. 将项目的 master 分支重命名为 main\n\n1.7.35 fix: fix stock_market_fund_flow interface\n\n    1. 修复 stock_market_fund_flow 接口，规范数据输出格式\n\n1.7.34 fix: fix bond_cb_jsl interface\n\n    1. 修复 bond_cb_jsl 接口，统一字段\n\n1.7.33 fix: fix stock_zh_ah_daily interface\n\n    1. 修复 stock_zh_ah_daily 接口，调整输出的格式\n\n1.7.32 fix: fix stock_a_ttm_lyr interface\n\n    1. 修复 stock_a_ttm_lyr 接口\n\n1.7.31 fix: fix stock_a_lg_indicator interface\n\n    1. 修复 stock_a_lg_indicator 接口，调整输出的格式\n\n1.7.30 fix: fix bond_cb_index_jsl interface\n\n    1. 修复 bond_cb_index_jsl 接口\n\n1.7.29 fix: fix stock_us_daily interface\n\n    1. 修复 stock_us_daily 接口，去除索引\n\n1.7.28 fix: fix stock_info_sh_name_code interface\n\n    1. 修复 stock_info_sh_name_code 接口\n\n1.7.27 fix: fix stock_qsjy_em interface\n\n    1. 修复 stock_qsjy_em 接口\n\n1.7.26 add: add bond_new_composite_index_cbond interface\n\n    1. 新增 bond_new_composite_index_cbond 接口\n\n1.7.25 add: add news_trade_notify_dividend_baidu interface\n\n    1. 新增 news_trade_notify_dividend_baidu 接口\n\n1.7.24 fix: fix amac_manager_classify_info interface\n\n    1. 修复 amac_manager_classify_info 接口，增加输出字段及规范输出字段格式\n\n1.7.23 fix: fix rename futures_pig_info and futures_pig_rank interface\n\n    1. 修复 futures_pig_info 重命名为 futures_hog_info\n    2. 修复 futures_pig_rank 重命名为 futures_hog_info\n\n1.7.22 add: add index_investing_global_area_index_name_url interface\n\n    1. 新增 index_investing_global_area_index_name_url 接口\n\n1.7.21 fix: fix futures_hog_info interface\n\n    1. 修复 futures_hog_info 接口，同意目标网站地址\n\n1.7.20 fix: fix crypto_js_spot interface\n\n    1. 修复 crypto_js_spot 接口\n\n1.7.19 fix: fix index_value_name_funddb interface\n\n    1. 修复 index_value_name_funddb 接口，新增字段及文档说明\n\n1.7.18 fix: fix stock_lhb_jgmmtj_em interface\n\n    1. 修复 stock_lhb_jgmmtj_em 接口\n\n1.7.17 fix: fix bond_cb_jsl interface\n\n    1. 修复 bond_cb_jsl 接口\n\n1.7.16 fix: fix crypto_js_spot interface\n\n    1. 修复 crypto_js_spot 接口\n\n1.7.15 fix: fix news_economic_baidu interface\n\n    1. 修复 news_economic_baidu 接口\n\n1.7.14 fix: fix covid_19_risk_area interface\n\n    1. 修复 covid_19_risk_area 接口\n\n1.7.13 fix: fix stock_balance_sheet_by_yearly_em interface\n\n    1. 修复 stock_balance_sheet_by_yearly_em 接口\n\n1.7.12 fix: fix stock_repurchase_em interface\n\n    1. 修复 stock_repurchase_em 接口\n\n1.7.11 fix: fix bond_cash_summary_sse interface\n\n    1. 修复 bond_cash_summary_sse 接口\n\n1.7.10 fix: fix option_czce_daily interface\n\n    1. 修复 option_czce_daily 接口，增加花生期权和菜籽油期权的支持\n\n1.7.9 add: add index_market_representation_hist_sw interface\n\n    1. 新增 index_market_representation_hist_sw 接口\n\n1.7.8 add: add index_style_index_hist_sw interface\n\n    1. 新增 index_style_index_hist_sw 接口\n\n1.7.7 add: add index_level_one_hist_sw interface\n\n    1. 新增 index_level_one_hist_sw 接口\n\n1.7.6 fix: fix covid_19_risk_area interface\n\n    1. 修复 covid_19_risk_area 接口\n\n1.7.5 fix: fix fund_fh_em interface\n\n    1. 修复 fund_fh_em 接口\n\n1.7.4 fix: fix stock_analyst_rank_em interface\n\n    1. 修复 stock_analyst_rank_em 接口，规范输出格式\n\n1.7.3 fix: fix stock_profit_sheet_by_report_em interface\n\n    1. 修复 stock_profit_sheet_by_report_em 接口\n\n1.7.2 fix: fix futures_egg_price_yearly interface\n\n    1. 修复 futures_egg_price_yearly 接口\n    2. 修复 futures_egg_price 接口\n    3. 修复 futures_egg_price_area 接口\n\n1.7.1 fix: fix fund_etf_fund_info_em interface\n\n    1. 修复 fund_etf_fund_info_em 接口，提高访问速度并规范输出格式\n\n1.6.99 fix: fix macro_china_fx_gold interface\n\n    1. 修复 macro_china_fx_gold 接口\n\n1.6.98 fix: fix macro_china_real_estate interface\n\n    1. 修复 macro_china_real_estate 接口\n\n1.6.97 fix: fix macro_china_real_estate interface\n\n    1. 修复 macro_china_real_estate 接口\n\n1.6.96 fix: fix macro_china_bond_public interface\n\n    1. 修复 macro_china_bond_public 接口\n\n1.6.95 fix: fix energy_oil_detail interface\n\n    1. 修复 energy_oil_detail 接口\n\n1.6.94 fix: fix macro_china_hk_market_info interface\n\n    1. 修复 macro_china_hk_market_info 接口，规范数据输出格式\n\n1.6.93 fix: fix index_vix interface\n\n    1. 修复 index_vix 接口\n\n1.6.92 fix: fix hurun_rank interface\n\n    1. 修复 hurun_rank 接口\n    2. 修复 death_company 接口\n    3. 修复 nicorn_company 接口\n    4. 修复 maxima_company 接口\n\n1.6.91 fix: fix forbes_rank interface\n\n    1. 修复 forbes_rank 接口，取消证书验证\n\n1.6.90 fix: fix macro_china_cpi_yearly interface\n\n    1. 修复 macro_china_cpi_yearly 接口，规范输出格式\n\n1.6.89 fix: fix stock_board_concept_name_ths interface\n\n    1. 修复 stock_board_concept_name_ths 接口，增加字段说明\n\n1.6.88 fix: fix option_cffex_zz1000_spot_sina interface\n\n    1. 修复 option_cffex_zz1000_spot_sina 接口，规范输出数据格式\n\n1.6.87 fix: fix stock_ggcg_em interface\n\n    1. 修复 stock_ggcg_em 接口，增加 symbol 字段\n\n1.6.86 fix: fix stock_gpzy_distribute_statistics_bank_em interface\n\n    1. 修复 stock_gpzy_distribute_statistics_bank_em 接口，更新接口及文档\n    2. 修复 stock_gpzy_distribute_statistics_company_em 接口，更新接口及文档\n\n1.6.85 fix: fix option_finance_board interface\n\n    1. 修复 option_finance_board 接口，新增对中证1000股指期权的支持\n\n1.6.84 fix: fix stock_zt_pool_em interface\n\n    1. 修复 stock_zt_pool_em 接口\n\n1.6.83 fix: fix option_dce_daily interface\n\n    1. 修复 option_dce_daily 接口，新增黄大豆1号，黄大豆2号，豆油等期权等支持\n\n1.6.82 fix: fix option_cffex_hs300_spot_sina interface\n\n    1. 修复 option_cffex_hs300_spot_sina 接口，对字段做异常处理\n\n1.6.81 fix: fix currency_hist interface\n\n    1. 修复 currency_hist 接口，同时修改该函数的参数及输出字段\n\n1.6.80 fix: fix index_investing_global interface\n\n    1. 修复 index_investing_global 接口，同时修改该函数的参数及输出字段\n\n1.6.79 fix: fix fund_rating_all interface\n\n    1. 修复 fund_rating_all 接口，字段与目标网站对齐\n\n1.6.78 fix: fix stock_telegraph_cls interface\n\n    1. 移除 pycryptodomex 依赖\n    2. 移除冗余代码\n\n1.6.77 fix: fix stock_telegraph_cls interface\n\n    1. 修复 stock_telegraph_cls 接口\n\n1.6.76 add: add pycryptodomex library\n\n    1. 新增 pycryptodomex 依赖库支持\n\n1.6.75 add: add option_cffex_zz1000_spot_sina interface\n\n    1. 新增 option_cffex_zz1000_spot_sina 接口\n    2. 将 stock_technology_ths.py 中所有接口 append 方法移除\n\n1.6.74 add: add option_cffex_zz1000_list_sina interface\n\n    1. 新增 option_cffex_zz1000_list_sina 接口\n    2. 新增 option_cffex_zz1000_spot_sina 接口\n    3. 新增 option_cffex_zz1000_daily_sina 接口\n\n1.6.73 fix: fix macro_china_rmb interface\n\n    1. 修复 macro_china_rmb 接口，规范输出的格式\n\n1.6.72 add: add futures_news_shmet interface\n\n    1. 新增 futures_news_shmet 接口，获取期货资讯数据\n\n1.6.71 fix: fix bond_zh_hs_cov_pre_min interface\n\n    1. 修复 bond_zh_hs_cov_pre_min 接口\n\n1.6.70 add: add bond_zh_hs_cov_pre_min interface\n\n    1. 新增 bond_zh_hs_cov_pre_min 接口，获取可转债的盘前分时数据\n\n1.6.69 add: add fund_info_index_em interface\n\n    1. 新增 fund_info_index_em 接口，获取指数型基金的基本信息\n\n1.6.68 fix: fix stock_zh_a_minute interface\n\n    1. 修复 stock_zh_a_minute 接口\n\n1.6.67 fix: fix stock_zh_a_alerts_cls interface\n\n    1. 修复 stock_zh_a_alerts_cls 接口，增加移除警告信息\n\n1.6.66 fix: fix stock_balance_sheet_by_report_em interface\n\n    1. 修复 stock_balance_sheet_by_report_em 接口，新增公司类型判断\n\n1.6.65 fix: fix bond_cb_redeem_jsl interface\n\n    1. 修复 bond_cb_redeem_jsl 接口，新增字段\n\n1.6.64 fix: fix index_investing_global interface\n\n    1. 修复 index_investing_global 接口的参数及文档说明\n\n1.6.63 fix: fix fund_portfolio_em and futures_roll_yield interface\n\n    1. 修复 fund_portfolio_em 和 futures_roll_yield 文件中的 pandas.DataFrame.append 问题\n\n1.6.62 fix: fix futures_zh_spot interface\n\n    1. 修复 futures_zh_spot 接口\n\n1.6.61 fix: fix futures_shfe_warehouse_receipt interface\n\n    1. 修复 futures_shfe_warehouse_receipt 接口，在 20140519 分开处理\n\n1.6.60 add: add stock_telegraph_cls interface\n\n    1. 新增 stock_telegraph_cls 接口\n\n1.6.59 add: add stock_industry_change_cninfo interface\n\n    1. 新增 stock_industry_change_cninfo 接口\n\n1.6.58 fix: fix stock_gdfx_holding_analyse_em interface\n\n    1. 修复 stock_gdfx_holding_analyse_em 接口\n\n1.6.57 fix: fix stock_info_sh_name_code interface\n\n    1. 修复 stock_info_sh_name_code 接口\n\n1.6.56 fix: fix index_zh_a_hist interface\n\n    1. 修复 index_zh_a_hist 接口\n\n1.6.55 fix: fix stock_gdfx_free_holding_analyse_em interface\n\n    1. 修复 stock_gdfx_free_holding_analyse_em 接口\n\n1.6.54 fix: fix stock_hsgt_hold_stock_em interface\n\n    1. 修复 stock_hsgt_hold_stock_em 接口\n\n1.6.53 fix: fix fx_spot_quote interface\n\n    1. 修复 fx_spot_quote 接口\n\n1.6.52 fix: fix index_zh_a_hist interface\n\n    1. 修复 index_zh_a_hist 接口，增加更多指数支持\n\n1.6.51 fix: fix stock_analyst_detail_em interface\n\n    1. 修复 stock_analyst_detail_em 接口，处理空数据情况\n\n1.6.50 add: add stock_industry_category_cninfo interface\n\n    1. 新增 stock_industry_category_cninfo 接口\n    2. 新增 stock_industry_change_cninfo 接口\n    3. 新增 stock_share_change_cninfo 接口\n    4. 新增 stock_classify_sina 接口\n\n1.6.49 fix: fix stock_zh_a_alerts_cls interface\n\n    1. 修复 stock_zh_a_alerts_cls 接口\n\n1.6.48 fix: fix stock_report_disclosure interface\n\n    1. 修复 stock_report_disclosure 接口，添加北交所的数据\n\n1.6.47 fix: fix stock_zh_a_minute interface\n\n    1. 修复 stock_zh_a_minute 接口\n\n1.6.46 fix: fix fund_open_fund_info_em interface\n\n    1. 修复 fund_open_fund_info_em 接口\n\n1.6.45 fix: fix stock_zh_index_hist_csindex interface\n\n    1. 修复 stock_zh_index_hist_csindex 接口\n\n1.6.44 fix: fix futures_inventory_em interface\n\n    1. 修复 futures_inventory_em 接口\n\n1.6.43 fix: fix futures_inventory_99 interface\n\n    1. 修复 futures_inventory_99 接口\n\n1.6.42 fix: fix stock_balance_sheet_by_yearly_em interface\n\n    1. 修复 stock_balance_sheet_by_report_em 接口\n    2. 修复 stock_balance_sheet_by_yearly_em 接口\n    3. 修复 stock_profit_sheet_by_report_em 接口\n    4. 修复 stock_profit_sheet_by_yearly_em 接口\n    5. 修复 stock_profit_sheet_by_quarterly_em 接口\n    6. 修复 stock_cash_flow_sheet_by_report_em 接口\n    7. 修复 stock_cash_flow_sheet_by_yearly_em 接口\n    8. 修复 stock_cash_flow_sheet_by_quarterly_em 接口\n\n1.6.41 add: add futures_inventory_99 interface\n\n    1. 新增 futures_inventory_99 接口，获取大宗商品库存数据\n\n1.6.40 add: add stock_mda_ym interface\n\n    1. 新增 stock_mda_ym 接口，获取管理层讨论与分析数据\n\n1.6.39 fix: fix futures_symbol_mark interface\n\n    1. 修复 futures_symbol_mark 接口编码问题\n\n1.6.38 add: add stock_zygc_ym interface\n\n    1. 新增 stock_zygc_ym 接口，获取股票的主营构成数据\n\n1.6.37 fix: remove futures_inventory_99 interface\n\n    1. 移除 futures_inventory_99 接口\n\n1.6.36 fix: fix option_finance_board interface\n\n    1. 修复 option_finance_board 接口\n\n1.6.35 fix: fix stock_zh_index_hist_csindex interface\n\n    1. 修复 stock_zh_index_hist_csindex 接口\n\n1.6.34 fix: fix fx_spot_quote interface\n\n    1. 修复 fx_spot_quote 接口，输出字段\n    2. 修复 fx_swap_quote 接口，输出字段\n    3. 修复 fx_pair_quote 接口，输出字段\n\n1.6.33 fix: fix stock_report_fund_hold_detail interface\n\n    1. 修复 stock_report_fund_hold_detail 接口\n\n1.6.32 fix: fix get_czce_daily interface\n\n    1. 修复 get_czce_daily 接口，获取 2010 年数据\n\n1.6.31 fix: fix stock_gdfx_free_holding_detail_em interface\n\n    1. 修复 stock_gdfx_free_holding_detail_em 接口，规范输出字段\n\n1.6.30 fix: fix stock_info_a_code_name interface\n\n    1. 修复 stock_info_a_code_name 接口，增加缓存\n\n1.6.29 fix: fix stock_board_industry_name_em interface\n\n    1. 修复 stock_board_industry_name_em 接口，输出字段容错处理\n\n1.6.28 add: add currency_boc_safe interface\n\n    1. 新增 currency_boc_safe 接口，获取人民币汇率中间价数据\n\n1.6.27 fix: fix currency_boc_sina interface\n\n    1. 修复 currency_boc_sina 接口，输出结果按时间排序\n\n1.6.26 fix: fix bond_cb_index_jsl interface\n\n    1. 修复 bond_cb_index_jsl 接口，对于 script 使用 string 适配 Linux 及 MacOS\n\n1.6.25 fix: fix bond_cb_index_jsl interface\n\n    1. 修复 bond_cb_index_jsl 接口，去除 lxml 解析器\n\n1.6.24 fix: fix bond_cb_index_jsl interface\n\n    1. 修复 bond_cb_index_jsl 接口，使用 ast.eval 替换\n\n1.6.23 fix: fix bond_cb_index_jsl interface\n\n    1. 修复 bond_cb_index_jsl 接口，适配 Linux 及 MacOS\n\n1.6.22 add: add stock_kc_a_spot_em interface\n\n    1. 新增 stock_kc_a_spot_em 接口，获取科创板行情\n\n1.6.21 fix: fix baidu_search_index interface\n\n    1. 修复 baidu_search_index 接口\n    2. 修复 baidu_info_index 接口\n    3. 修复 baidu_media_index 接口\n\n1.6.20 fix: fix stock_board_industry_name_em and code_id_map_em interface\n\n    1. 修复 stock_board_industry_name_em 接口，字段容错处理\n    2. 修复 code_id_map_em 接口，股票超过 5000 只处理\n\n1.6.19 fix: fix stock_comment_detail_zlkp_jgcyd_em interface\n\n    1. 修复 stock_comment_detail_zlkp_jgcyd_em 接口\n\n1.6.18 fix: fix stock_zh_a_spot_em interface\n\n    1. 修复 stock_zh_a_spot_em 接口，增加股票获取的数量，目前已经超过 5000 只\n\n1.6.17 fix: fix stock_new_a_spot_em interface\n\n    1. 修复 stock_new_a_spot_em 接口上市日期字段\n\n1.6.16 fix: fix baidu_search_index interface\n\n    1. 修复 baidu_search_index 接口，对该接口增加 text 字段\n\n1.6.15 fix: fix bond_zh_cov_info interface\n\n    1. 修复 bond_zh_cov_info 接口，修改接口参数及返回数据\n\n1.6.14 fix: fix stock_hsgt_board_rank_em interface\n\n    1. 修复 stock_hsgt_board_rank_em 接口，字段调整\n\n1.6.13 add: add stock_new_a_spot_em interface\n\n    1. 新增 stock_new_a_spot_em 接口，获取新股行情数据\n\n1.6.12 add: add stock_bj_a_spot_em interface\n\n    1. 新增 stock_bj_a_spot_em 接口，获取北交所 A 股行情数据\n\n1.6.11 add: add stock_sz_a_spot_em interface\n\n    1. 新增 stock_sz_a_spot_em 接口，获取深证 A 股行情数据\n\n1.6.10 add: add stock_sh_a_spot_em interface\n\n    1. 新增 stock_sh_a_spot_em 接口，获取上证 A 股行情数据\n\n1.6.9 fix: fix stock_zh_a_spot_em interface\n\n    1. 修复 stock_zh_a_spot_em 接口，新增多个字段\n\n1.6.8 fix: fix futures_zh_spot interface\n\n    1. 修复 futures_zh_spot 接口\n\n1.6.7 add: add futures_zh_realtime interface\n\n    1. 新增 futures_zh_realtime 接口，获取期货的实时行情数据\n    2. 新增 futures_symbol_mark 接口，获取新浪期货的所有品种标识\n\n1.6.6 fix: fix fund_etf_hist_sina interface\n\n    1. 修复 fund_etf_hist_sina 接口，规范输出数据类型\n\n1.6.5 fix: fix stock_board_cons_ths interface\n\n    1. 修复 stock_board_cons_ths 接口，修复获取链接的逻辑\n    2. 给接口 stock_board_concept_name_ths 增加缓存功能\n\n1.6.4 fix: fix stock_info_a_code_name interface\n\n    1. 修复 stock_info_a_code_name 接口，调整文档输出\n\n1.6.3 fix: fix stock_info_a_code_name and stock_info_sh_delist interface\n\n    1. 修复 stock_info_a_code_name 接口，调整字段\n    2. 修复 stock_info_sh_delist 接口，调整字段\n\n1.6.2 fix: fix macro_china_cpi interface\n\n    1. 修复 macro_china_cpi 接口，输出按日期排序\n\n1.6.1 fix: fix stock_info_sh_name_code interface\n\n    1. 修复 stock_info_sh_name_code 接口，字段对齐\n\n1.5.99 fix: fix stock_zh_a_hist_163 interface\n\n    1. 修复 stock_zh_a_hist_163 接口，修改编码格式为 GBK 编码\n\n1.5.98 fix: fix news_cctv interface\n\n    1. 修复 news_cctv 接口，适配 20220523 之后的新页面\n\n1.5.97 fix: fix stock_zh_a_hist interface\n\n    1. 修复 stock_zh_a_hist 接口，除以日期设置的边界问题\n\n1.5.96 fix: fix macro_bank_usa_interest_rate interface\n\n    1. 修复 macro_bank_usa_interest_rate 接口，规范输出数据格式且按时间排序\n\n1.5.95 fix: fix stock_zh_a_hist_163 interface\n\n    1. 修复 stock_zh_a_hist_163 接口，增加编码支持\n\n1.5.94 add: add bond_cb_redeem_jsl interface\n\n    1. 新增 bond_cb_redeem_jsl 接口，获取可转债强赎数据\n\n1.5.93 fix: fix stock_zh_a_hist interface\n\n    1. 修复 stock_zh_a_hist 接口，对非交易日及停牌日期返回 pandas.DataFrame\n\n1.5.92 fix: fix rate_interbank interface\n\n    1. 修复 rate_interbank 接口，修改函数签名及输出格式\n\n1.5.91 add: add bond_cb_index_jsl interface\n\n    1. 新增 bond_cb_index_jsl 接口，获取集思录可转债等权指数数据\n\n1.5.90 fix: fix macro_china_bond_public interface\n\n    1. 修复 macro_china_bond_public 接口\n\n1.5.89 fix: fix stock_info_sh_name_code interface\n\n    1. 修复 stock_info_sh_name_code 接口\n\n1.5.88 fix: fix stock_board_concept_name_ths interface\n\n    1. 修复 stock_board_concept_name_ths 接口，补充遗漏的概念板块\n\n1.5.87 fix: fix stock_tfp_em interface\n\n    1. 修复 stock_tfp_em 接口\n\n1.5.86 fix: fix stock_us_fundamental interface\n\n    1. 修复 stock_us_fundamental 接口的说明\n\n1.5.85 fix: fix stock_zh_a_hist interface\n\n    1. 修复 stock_zh_a_hist 接口，直接返回指定时间段之间的数据\n\n1.5.84 fix: fix stock_three_report_em interface\n\n    1. 修复 stock_balance_sheet_by_report_em 接口\n    2. 修复 stock_balance_sheet_by_yearly_em 接口\n    3. 修复 stock_profit_sheet_by_report_em 接口\n    4. 修复 stock_profit_sheet_by_yearly_em 接口\n    5. 修复 stock_profit_sheet_by_quarterly_em 接口\n    6. 修复 stock_cash_flow_sheet_by_report_em 接口\n    7. 修复 stock_cash_flow_sheet_by_yearly_em 接口\n\n1.5.83 fix: fix energy_oil_hist, energy_oil_detail interface\n\n    1. 修复 energy_oil_hist 接口，按时间排序输出且规范数据输出格式\n    2. 修复 energy_oil_detail 接口，规范数据输出格式\n\n1.5.82 add: add option_risk_indicator_sse interface\n\n    1. 新增 option_risk_indicator_sse 接口，获取上海证券交易所-产品-股票期权-期权风险指标数据\n\n1.5.81 fix: fix macro_china_gdp_yearly interface\n\n    1. 修复 macro_china_gdp_yearly 接口，数据输出格式为 pandas.DataFrame\n\n1.5.80 add: add stock_szse_sector_summary interface\n\n    1. 新增 stock_szse_sector_summary 接口，获取深证证券交易所-总貌-股票行业成交数据\n\n1.5.79 add: add stock_szse_area_summary interface\n\n    1. 新增 stock_szse_area_summary 接口，获取深证证券交易所-总貌-地区交易排序数据\n\n1.5.78 fix: fix stock_szse_summary interface\n\n    1. 修复 stock_szse_summary 接口\n\n1.5.77 fix: fix remove numpy dependency\n\n    1. 移除 numpy 依赖\n\n1.5.76 add: add news_report_time_baidu interface\n\n    1. 新增 news_report_time_baidu 接口，获取财报发行时间\n\n1.5.75 fix: fix stock_financial_analysis_indicator interface\n\n    1. 修复 stock_financial_analysis_indicator 接口的日期字段\n\n1.5.74 add: add news_trade_notify_suspend_baidu interface\n\n    1. 新增 news_trade_notify_suspend_baidu 接口，获取 A 股及港股停复牌数据\n\n1.5.73 fix: fix stock_notice_report interface\n\n    1. 修复 stock_notice_report 接口，添加日期参数\n\n1.5.72 add: add news_economic_baidu interface\n\n    1. 新增 news_economic_baidu 接口，获取全球宏观事件数据\n\n1.5.71 fix: fix import path problem\n\n    1. 修复 covid 接口中的路径问题\n\n1.5.70 fix: fix stock_zh_a_spot interface\n\n    1. 修复 stock_zh_a_spot 中 pandas.DataFrame.append 警告\n\n1.5.69 fix: fix setup.py\n\n    1. 修复 setup.py 文件\n\n1.5.68 fix: fix test function\n\n    1. 修复 test_zipfile_func 函数\n\n1.5.67 add: add test function\n\n    1. 新增测试函数，用于测试数据文件的路径\n\n1.5.66 fix: fix crypto_hist interface\n\n    1. 修复 crypto_hist 接口，将部分数据存放到 data 文件夹读取，以提高访问稳定性及速度\n\n1.5.65 fix: fix stock_repurchase_em interface\n\n    1. 修复 stock_repurchase_em 接口，获取股票回购-股票回购数据\n\n1.5.64 fix: fix stock_cash_flow_sheet_by_yearly_em interface\n\n    1. 修复 stock_cash_flow_sheet_by_yearly_em 接口，获取现金流量表-按年度接口\n\n1.5.63 fix: fix import path problem\n\n    1. 修复 JS 文件及数据文件导入问题，方便在本地调试代码\n\n1.5.62 add: add stock_cash_flow_sheet_by_quarterly_em interface\n\n    1. 新增 stock_cash_flow_sheet_by_quarterly_em 接口，获取现金流量表-按单季度数据\n\n1.5.61 add: add stock_cash_flow_sheet_by_report_em interface\n\n    1. 新增 stock_cash_flow_sheet_by_report_em 接口，获取现金流量表-按报告期数据\n\n1.5.60 fix: fix sw_index_second_spot interface\n\n    1. 修复 sw_index_second_spot 接口，更新接口提交采纳数\n\n1.5.59 add: add stock_profit_sheet_by_yearly_em interface\n\n    1. 新增 stock_profit_sheet_by_yearly_em 接口，获取利润表-按年度数据\n\n1.5.58 add: add stock_profit_sheet_by_quarterly_em interface\n\n    1. 新增 stock_profit_sheet_by_quarterly_em 接口，获取利润表-按单季度数据\n\n1.5.57 add: add stock_profit_sheet_by_report_em interface\n\n    1. 新增 stock_profit_sheet_by_report_em 接口，获取利润表-报告期数据\n\n1.5.56 add: add stock_balance_sheet_by_yearly_em interface\n\n    1. 新增 stock_balance_sheet_by_yearly_em 接口，获取利润表-按年度数据\n\n1.5.55 add: add stock_balance_sheet_by_report_em interface\n\n    1. 新增 stock_balance_sheet_by_report_em 接口，获取资产负债表-按报告期数据\n\n1.5.54 fix: fix stock_lrb_em interface\n\n    1. 修复 stock_lrb_em 接口\n\n1.5.53 fix: fix stock_zcfz_em interface\n\n    1. 修复 stock_zcfz_em 接口，重命名该接口并规范数据输出格式\n    2. 修复 stock_lrb_em 接口，重命名该接口并规范数据输出格式\n    3. 修复 stock_xjll_em 接口，重命名该接口并规范数据输出格式\n\n1.5.52 fix: fix stock_ggcg_em interface\n\n    1. 修复 stock_ggcg_em 接口，重命名该接口、修改为东财的最新接口并规范数据输出\n\n1.5.51 fix: fix stock_zh_a_tick_163 interface\n\n    1. 修复 stock_zh_a_tick_163 接口，读取 Excel 文件\n\n1.5.50 fix: fix covid_19_baidu interface\n\n    1. 修复 covid_19_baidu 接口中的国内分省份详情和城市详情\n\n1.5.49 add: add stock_inner_trade_xq interface\n\n    1. 新增 stock_inner_trade_xq 接口，获取股票的内部交易数据\n\n1.5.48 fix: fix futures_return_index_nh interface\n\n    1. 修复 futures_return_index_nh 接口，重命名接口及规范数据输出格式\n    2. 修复 futures_index_symbol_table_nh 接口，重名接口\n    3. 修复 futures_price_index_nh 接口，重名接口\n\n1.5.47 fix: fix macro_china_lpr interface\n\n    1. 修复 macro_china_lpr 接口，规范数据的输出格式\n\n1.5.46 fix: fix stock_yzxdr_em interface\n\n    1. 修复 stock_yzxdr_em 接口，对接口进行重命名\n\n1.5.45 add: add stock_hot_deal_xq interface\n\n    1. 新增 stock_hot_deal_xq 接口，获取雪球-沪深股市-热度排行榜-分享交易排行榜数据\n\n1.5.44 fix: fix futures_to_spot_czce interface\n\n    1. 修复 futures_to_spot_czce 接口，直接读取 Excel 文件并规范输出的字段类型\n    2. 修复 futures_delivery_czce 接口，直接读取 Excel 文件并规范输出的字段类型\n    3. 修复 futures_delivery_match_czce 接口，直接读取 Excel 文件并规范输出的字段类型\n\n1.5.43 fix: fix stock_zt_pool_em interface\n\n    1. 修复 stock_zt_pool_em 接口，获取所有股票的数据\n\n1.5.42 fix: fix stock_zt_pool_dtgc_em interface\n\n    1. 修复 stock_zt_pool_dtgc_em 接口，获取所有股票的数据\n\n1.5.41 fix: fix stock_margin_underlying_info_szse interface\n\n    1. 修复 stock_margin_underlying_info_szse 接口，利用 pandas.concate 替换 pandas.DataFrame.append 方法\n\n1.5.40 fix: fix js_news interface\n\n    1. 修复 js_news 接口，规范输出数据的格式\n\n1.5.39 add: add stock_comment_detail_scrd_desire_daily_em interface\n\n    1. 新增 stock_comment_detail_scrd_desire_daily_em 接口，获取日度市场参与意愿数据数据\n\n1.5.38 add: add stock_comment_detail_scrd_cost_em interface\n\n    1. 新增 stock_comment_detail_scrd_cost_em 接口，获取市场成本数据\n\n1.5.37 add: add stock_comment_detail_scrd_desire_em interface\n\n    1. 新增 stock_comment_detail_scrd_desire_em 接口，获取市场参与意愿数据\n\n1.5.36 add: add stock_comment_detail_scrd_focus_em interface\n\n    1. 新增 stock_comment_detail_scrd_focus_em 接口，获取用户关注指数数据\n\n1.5.35 add: add stock_comment_detail_zhpj_lspf_em interface\n\n    1. 新增 stock_comment_detail_zhpj_lspf_em 接口，获取综合评价-历史评分数据\n\n1.5.34 fix: fix stock_gpzy_industry_data_em interface\n\n    1. 修复 stock_gpzy_industry_data_em 接口，并重命名为 stock_gpzy_industry_data_em\n\n1.5.33 fix: fix fund_fh_em interface\n\n    1. 修复 fund_fh_em, fund_cf_em 和 fund_fh_rank_em 接口\n\n1.5.32 add: add stock_comment_detail_zlkp_jgcyd_em interface\n\n    1. 新增 stock_comment_detail_zlkp_jgcyd_em 接口\n\n1.5.31 fix: fix stock_individual_info_em interface\n\n    1. 修复 stock_individual_info_em 接口\n\n1.5.30 fix: fix hurun_rank interface\n\n    1. 修复 hurun_rank 接口，新增多个排行榜及统一数据输出格式\n\n1.5.29 fix: fix index_zh_a_hist_min_em interface\n\n    1. 修复 index_zh_a_hist_min_em 接口，个别指数数据获取\n\n1.5.28 fix: fix bond_zh_cov interface\n\n    1. 修复 bond_zh_cov 接口\n\n1.5.27 fix: fix stock_comment_em interface\n\n    1. 修复 stock_comment_em 接口，补充字段跟网页数据源统一并新增`交易日`字段\n\n1.5.26 fix: fix stock_comment_em interface\n\n    1. 修复 stock_comment_em 接口，将接口重命名为 stock_comment_em，修改字段名称和字段类型\n\n1.5.25 fix: fix stock_analyst_rank_em and stock_analyst_detail_em interface\n\n    1. 修复 stock_analyst_rank_em 接口，将接口重命名为 stock_analyst_rank_em\n    2. 修复 stock_analyst_detail_em 接口，将接口重命名为 stock_analyst_detail_em\n\n1.5.24 fix: fix stock_profit_forecast interface\n\n    1. 修复 stock_profit_forecast 接口，统一字段名称及类型\n\n1.5.23 fix: fix stock_board_concept_name_em interface\n\n    1. 修复 stock_board_concept_name_em 接口，增加字段的容错\n\n1.5.22 fix: fix futures_correlation_nh interface\n\n    1. 修复 futures_correlation_nh 接口，修改接口描述\n\n1.5.21 add: add futures_variety_index_nh interface\n\n    1. 新增 futures_variety_index_nh 接口，获取品种指数涨跌数据\n\n1.5.20 add: add futures_board_index_nh interface\n\n    1. 新增 futures_board_index_nh 接口，获取板块指数涨跌数据\n\n1.5.19 add: add futures_correlation_nh interface\n\n    1. 新增 futures_correlation_nh 接口，获取相关系数矩阵数据\n\n1.5.18 fix: fix fund_open_fund_rank_em interface\n\n    1. 修复 fund_open_fund_rank_em 接口，重命名 fund_em_open_fund_rank 为 fund_open_fund_rank_em\n\n1.5.17 add: add macro_china_bsi_index interface\n\n    1. 修复 macro_china_bsi_index 接口，获取超灵便型船运价指数数据\n\n1.5.16 fix: fix stock_info_sh_delist interface\n\n    1. 修复 stock_info_sh_delist 接口\n\n1.5.15 fix: fix bond_cb_jsl interface\n\n    1. 修复 bond_cb_jsl 接口\n\n1.5.14 add: add macro_china_bdti_index interface\n\n    1. 新增 macro_china_bdti_index 接口，获取原油运输指数数据\n\n1.5.13 add: add macro_china_lpi_index interface\n\n    1. 新增 macro_china_lpi_index 接口，获取物流景气指数数据\n\n1.5.12 fix: fix stock_gpzy_pledge_ratio_detail_em interface\n\n    1. 修复 stock_gpzy_pledge_ratio_detail_em 接口并重命名\n\n1.5.11 add: add index_bloomberg_billionaires_hist interface\n\n    1. 新增 index_bloomberg_billionaires_hist 接口，获取彭博亿万富豪历史数据\n\n1.5.10 fix: fix stock_gpzy_pledge_ratio_em and stock_gpzy_profile_em interface\n\n    1. 修复 stock_gpzy_profile_em 接口，对该接口重命名，并对返回的数据按时间升序排列\n    2. 修复 stock_gpzy_pledge_ratio_em 接口，对该接口重名，并对返回的字段规范化\n\n1.5.9 fix: fix air_quality_hist interface\n\n    1. 修复 air_quality_hist 接口，主要修改接口的加密及解密逻辑\n\n1.5.8 add: add macro_china_construction_price_index interface\n\n    1. 新增 macro_china_construction_price_index 接口，获取建材价格指数数据\n\n1.5.7 add: add macro_china_construction_index interface\n\n    1. 新增 macro_china_construction_index 接口，获取建材指数数据\n\n1.5.6 add: add macro_china_yw_electronic_index interface\n\n    1. 新增 macro_china_yw_electronic_index 接口，获取义乌小商品指数-电子元器件数据\n\n1.5.5 add: add macro_global_sox_index interface\n\n    1. 新增 macro_global_sox_index 接口，获取费城半导体指数数据\n\n1.5.4 add: add macro_china_commodity_price_index interface\n\n    1. 新增 macro_china_commodity_price_index 接口，获取大宗商品价格数据\n\n1.5.3 add: add macro_china_energy_index interface\n\n    1. 新增 macro_china_energy_index 接口，获取能源指数数据\n\n1.5.2 add: add macro_china_agricultural_index interface\n\n    1. 新增 macro_china_agricultural_index 接口，获取农副指数数据\n\n1.5.1 add: add macro_china_agricultural_product interface\n\n    1. 新增 macro_china_agricultural_product 接口，获取农产品批发价格总指数数据\n\n1.4.99 add: add macro_china_vegetable_basket interface\n\n    1. 新增 macro_china_vegetable_basket 接口，获取菜篮子产品批发价格指数数据\n\n1.4.98 fix: fix stock_board_industry_hist_em interface\n\n    1. 修复 stock_board_industry_hist_em 接口，新增 start_date 和 end_date 参数\n\n1.4.97 fix: fix bond_spot_deal interface\n\n    1. 修复 bond_spot_deal 接口，对异常数据做处理\n\n1.4.96 fix: fix stock_sse_deal_daily interface\n\n    1. 修复 stock_sse_deal_daily 接口，最近接口调用新的地址\n\n1.4.95 add: add bond_zh_cov_value_analysis interface\n\n    1. 新增 bond_zh_cov_value_analysis 接口，获取可转债溢价率分析和可转债价值分析数据\n\n1.4.94 add: add macro_china_mobile_number interface\n\n    1. 新增 macro_china_mobile_number 接口，获取手机出货量数据\n\n1.4.93 add: add macro_china_insurance_income interface\n\n    1. 新增 macro_china_insurance_income 接口，获取原保险保费收入数据\n\n1.4.92 add: add stock_lhb_hyyyb_em interface\n\n    1. 新增 stock_lhb_hyyyb_em 接口，获取东方财富网-数据中心-龙虎榜单-每日活跃营业部数据\n\n1.4.91 fix: fix macro_china_new_financial_credit interface\n\n    1. 修复 macro_china_new_financial_credit 接口，规范返回字段的类型和按时间排序\n\n1.4.90 add: add macro_china_bank_financing interface\n\n    1. 新增 macro_china_bank_financing 接口，获取银行理财产品发行数量数据\n\n1.4.89 fix: fix stock_us_hist interface\n\n    1. 修复 stock_us_hist 接口，结果数据根据日期排序\n\n1.4.88 fix: fix fund_new_found_em interface\n\n    1. 修复 fund_em_new_found 接口命名为 fund_new_found_em 接口\n\n1.4.87 add: add fund_portfolio_industry_allocation_em interface\n\n    1. 新增 fund_portfolio_industry_allocation_em 接口，获取天天基金网-基金档案-投资组合-行业配置数据\n\n1.4.86 fix: fix rename all interface in fund_aum_em.py\n\n    1. 修改 fund_em_aum_hist 接口，重名为 fund_aum_hist_em\n    2. 修改 fund_em_aum_trend 接口，重名为 fund_aum_trend_em\n    3. 修改 fund_em_aum 接口，重名为 fund_aum_em\n\n1.4.85 add: add fund_portfolio_bond_hold_em interface\n\n    1. 新增 fund_portfolio_bond_hold_em 接口，获取天天基金网-基金档案-投资组合-债券持仓数据\n\n1.4.84 fix: fix fund_portfolio_change_em interface\n\n    1. 修复 fund_portfolio_change_em 接口，新增 indicator 字段\n\n1.4.83 add: add stock_us_code_table_fu interface\n\n    1. 新增 stock_us_code_table_fu 接口，获取股票代码\n\n1.4.82 fix: fix stock_a_code_to_symbol interface\n\n    1. 修复 stock_a_code_to_symbol 接口，支持北交所股票\n\n1.4.81 add: add fund_portfolio_change_em interface\n\n    1. 新增 fund_portfolio_change_em 接口，获取天天基金网-基金档案-投资组合-重大变动数据\n\n1.4.80 add: add stock_board_concept_hist_min_em interface\n\n    1. 新增 stock_board_concept_hist_min_em 接口，获取东方财富-沪深板块-概念板块-分时历史行情数据\n\n1.4.79 add: add stock_board_industry_hist_min_em interface\n\n    1. 新增 stock_board_industry_hist_min_em 接口，获取东方财富-沪深板块-行业板块-分时历史行情数据\n\n1.4.78 add: add remove matplotlib module and support cache\n\n    1. 移除 matplotlib 模块，让 AKShare 更专注于数据采集\n    2. 新增缓存，对于速度较慢的接口逐步增加缓存支持\n    3. 移除所有接口中的绘图功能\n    4. 修复 google_index 接口\n    5. 移除 西本新干线 接口\n    6. 在 utils 模块中新增 ak_session 以支持缓存\n    7. 添加 requests-cache 作为依赖库\n\n1.4.77 fix: fix stock_hk_ggt_components_em interface\n\n    1. 修复 stock_hsgt_em 文件中的所有 pandas.DataFrame 的 append 方法为 concat\n\n1.4.76 add: add stock_lhb_stock_statistic_em interface\n\n    1. 新增 stock_lhb_stock_statistic_em 接口，获取个股上榜统计数据\n\n1.4.75 fix: fix stock_lhb_stock_detail_em interface\n\n    1. 修复 stock_lhb_stock_detail_em 接口，处理有多种排行标准的数据\n\n1.4.74 fix: fix stock_lhb_stock_detail_em interface\n\n    1. 修复 stock_lhb_stock_detail_em 接口返回数据与目标网站统一\n\n1.4.73 add: add stock_lhb_jgmmtj_em interface\n\n    1. 新增 stock_lhb_jgmmtj_em 接口，该接口获取机构买卖每日统计数据\n\n1.4.72 add: add stock_lhb_stock_statistic_em interface\n\n    1. 新增 stock_lhb_stock_statistic_em 接口，该接口获取股票龙虎榜统计详情\n\n1.4.71 add: add stock_lhb_stock_detail_em interface\n\n    1. 新增 stock_lhb_stock_detail_em 接口，该接口获取龙虎榜个股详情数据\n\n1.4.70 add: add stock_lhb_detail_em interface\n\n    1. 新增 stock_lhb_detail_em 接口获取东方财富-股票数据-龙虎榜详情\n\n1.4.69 fix: fix crypto_js_spot interface\n\n    1. 修复 crypto_js_spot 接口，规范字段名称及返回数据的格式\n\n1.4.68 fix: fix crypto_hist interface\n\n    1. 修复 crypto_hist 接口，修改其中返回数据类型\n\n1.4.67 fix: fix crypto_name_url_table interface\n\n    1. 修复 crypto_name_url_table 获取可以获得历史数据的货币名称\n\n1.4.66 fix: fix stock_gpzy_profile_em interface\n\n    1. 修复 stock_gpzy_profile_em 接口并设定返回数据的数据类型\n\n1.4.65 fix: fix spot_hist_sge interface\n\n    1. 修复 spot_hist_sge 接口的数据输出格式\n\n1.4.64 fix: fix bond_china_close_return interface\n\n    1. 修复 bond_china_close_return 接口，修改文档增加描述信息\n\n1.4.63 fix: fix macro_china_swap_rate interface\n\n    1. 修复 macro_china_swap_rate 接口，并规范返回数据的类型\n\n1.4.62 fix: fix option_finance_board interface\n\n    1. 修复 option_finance_board 参数为 华泰柏瑞沪深300ETF期权 时的文档说明\n\n1.4.61 fix: fix get_dce_daily interface\n\n    1. 修复 get_dce_daily 接口的索引问题\n\n1.4.60 fix: fix stock_zh_a_hist_163 interface\n\n    1. 修复 stock_zh_a_hist_163 接口的冗余变量问题\n\n1.4.59 add: add stock_zh_a_hist_163 interface\n\n    1. 新增 stock_zh_a_hist_163 接口，用于获取沪深 A 股票的日频率量价数据，主要可以获取总市值和流通市值数据\n\n1.4.58 fix: fix stock_zh_kcb_daily interface\n\n    1. 修复 stock_zh_kcb_daily 返回数据的类型\n\n1.4.57 fix: fix bond_spot_quote interface\n\n    1. 修复 bond_spot_quote 接口数据错位问题\n\n1.4.56 fix: fix index_detail_hist_cni and index_detail_cni interface\n\n    1. 修改 index_detail_hist_cni 接口，新增 date 参数，可以指定 date 来获取数据\n    2. 修改 index_detail_cni 的 date 参数的格式为 \"202201\"\n\n1.4.55 fix: fix energy_carbon interface\n\n    1. 修复 energy_carbon_gz 接口的返回字段格式并且按日期排序\n    2. 修复 energy_carbon_hb 接口的返回字段格式并且按日期排序\n    3. 修复 energy_carbon_eu 接口的返回字段格式并且按日期排序\n    4. 修复 energy_carbon_sz 接口的返回字段格式并且按日期排序\n    5. 修复 energy_carbon_bj 接口的返回字段格式并且按日期排序\n    6. 修复上述接口的文档描述信息\n\n1.4.54 fix: fix stock_hot_rank_relate_em interface\n\n    1. 修复 stock_hot_rank_relate_em 接口的字段描述信息\n\n1.4.53 add: add stock_hot_rank_relate_em interface\n\n    1. 新增 stock_hot_rank_relate_em 接口，该接口可以获取东方财富-个股人气榜-相关股票数据\n\n1.4.52 add: add stock_hot_rank_latest_em interface\n\n    1. 新增 stock_hot_rank_latest_em 接口，该接口可以获取东方财富-个股人气榜-人气排名数据\n\n1.4.51 add: add stock_hot_keyword_em interface\n\n    1. 新增 stock_hot_keyword_em 接口，该接口可以获取指定股票的相关实时热门概念数据\n\n1.4.50 add: add stock_hot_rank_detail_realtime_em interface\n\n    1. 新增 stock_hot_rank_detail_realtime_em 接口，该接口可以获取东方财富个股人气榜-实时变动数据\n\n1.4.49 fix: fix stock_sse_deal_daily interface\n\n    1. 修复 stock_sse_deal_daily 接口，因为请求返回值新增了字段\n    2. 划分为 20211224、20220224 和 20220225 之后三个时间段进行请求\n\n1.4.48 fix: fix stock_sse_deal_daily interface\n\n    1. 修复 stock_sse_deal_daily 接口，因为请求返回值新增了字段\n\n1.4.47 add: add interface change log\n\n    1. 增加接口更新的详细说明文档\n\n1.4.46 fix: fix energy_oil_detail interface\n\n    1. 修改 energy_oil_detail 的返回日期格式，从 '2022/1/1' 为 '2022-01-01'\n    2. 修改 energy_oil_detail 的请求日期格式，从 '2022-01-01' 为 '20220101'\n    3. 修改 energy_oil_hist 和 energy_oil_detail 的返回值数据格式为 Pandas 的数据类型\n    4. 修改 energy_oil_hist 和 energy_oil_detail 的函数签名\n\n1.4.45 fix: fix air_quality_rank interface\n\n    1. 修改 air_city_list 的接口命名，修改后为 air_city_talbe\n    2. 修改 air_quality_watch_point 接口的请求日期格式，从 '2022-01-01' 为 '20220101'\n    3. 修改 air_quality_hist 接口的请求日期格式，从 '2022-01-01' 为 '20220101'\n\n## 版本更新说明\n\n1.18.50 fix: fix stock_gpzy_individual_pledge_ratio_detail_em interface\n\n1.18.49 fix: fix macro_china_urban_unemployment interface\n\n1.18.48 fix: fix stock_individual_spot_xq interface\n\n1.18.47 fix: fix stock_margin_underlying_info_szse interface\n\n1.18.46 fix: fix stock_a_all_pb interface\n\n1.18.45 fix: fix stock_a_high_low_statistics interface\n\n1.18.44 fix: fix index_option_50etf_qvix interface\n\n1.18.43 fix: fix stock_financial_abstract_new_ths interface\n\n1.18.42 fix: fix stock_zh_a_minute interface\n\n1.18.41 fix: fix stock_zh_a_minute interface\n\n1.18.40 fix: fix stock_hk_daily interface\n\n1.18.39 fix: fix stock_hk_daily interface\n\n1.18.38 fix: fix stock_hk_index_daily_sina interface\n\n1.18.37 fix: fix fund_etf_dividend_sina interface\n\n1.18.36 fix: fix stock_zygc_em interface\n\n1.18.35 fix: fix stock_ipo_ths interface\n\n1.18.34 fix: fix fund_fh_em interface\n\n1.18.33 fix: fix futures_spot_price_daily interface\n\n1.18.32 fix: fix fund_new_found_ths interface\n\n1.18.31 fix: fix stock_hk_dividend_payout_em interface\n\n1.18.30 fix: fix futures_inventory_99 interface\n\n1.18.29 fix: fix stock_individual_basic_info_xq interface\n\n1.18.28 fix: fix futures_spot_price_daily interface\n\n1.18.27 fix: fix futures_comm_js interface\n\n1.18.26 fix: fix fund_fh_em interface\n\n1.18.25 fix: fix qdii_e_comm_jsl interface\n\n1.18.24 fix: fix stock_individual_spot_xq interface\n\n1.18.23 fix: fix fund_fee_em interface\n\n1.18.22 fix: fix bond_gb_zh_sina interface\n\n1.18.21 fix: fix get_receipt interface\n\n1.18.20 fix: fix stock_individual_spot_xq interface\n\n1.18.19 fix: fix GitHub action\n\n1.18.18 fix: fix stock_individual_spot_xq interface\n\n1.18.17 fix: fix stock_individual_spot_xq interface\n\n1.18.16 fix: fix news_economic_baidu interface\n\n1.18.15 fix: fix fund_etf_scale_sse and fund_etf_scale_szse interface\n\n1.18.14 add: add fund_etf_scale_sse and fund_etf_scale_szse interface\n\n1.18.13 fix: fix futures_spot_price_daily interface\n\n1.18.12 fix: fix news_economic_baidu interface\n\n1.18.11 fix: fix stock_individual_spot_xq interface\n\n1.18.10 fix: fix futures_comm_info interface\n\n1.18.9 fix: fix fx_quote_baidu interface\n\n1.18.8 fix: fix stock_zh_valuation_comparison_em interface\n\n1.18.7 fix: fix stock_us_valuation_baidu interface\n\n1.18.6 fix: fix fund_fee_em interface\n\n1.18.5 fix: fix futures_inventory_99 interface\n\n1.18.4 fix: fix stock_zh_a_daily interface\n\n1.18.3 fix: fix stock_ipo_tutor_em interface\n\n1.18.2 fix: fix stock_ipo_declare_em interface\n\n1.18.1 fix: fix stock_us_valuation_baidu interface\n\n1.17.99 fix: fix stock_news_em interface\n\n1.17.98 fix: fix stock_jgdy_tj_em interface\n\n1.17.97 fix: fix stock_financial_debt_new_ths interface\n\n1.17.96 fix: fix stock_info_sh_name_code interface\n\n1.17.95 fix: fix stock_info_sh_name_code interface\n\n1.17.94 fix: fix index_detail_cni interface\n\n1.17.93 fix: fix stock_news_em interface\n\n1.17.92 fix: fix currency_boc_sina interface\n\n1.17.91 fix: fix news_economic_baidu interface\n\n1.17.90 fix: fix stock_individual_spot_xq interface\n\n1.17.89 fix: fix news_trade_notify_dividend_baidu interface\n\n1.17.88 fix: fix stock_zh_a_minute interface\n\n1.17.87 fix: fix stock_dividend_cninfo interface\n\n1.17.86 fix: fix stock_news_em interface\n\n1.17.85 fix: fix news_trade_notify_dividend_baidu interface\n\n1.17.84 fix: fix stock_individual_spot_xq interface\n\n1.17.83 fix: fix stock_cyq_em interface\n\n1.17.82 fix: fix stock_notice_report interface\n\n1.17.81 fix: fix get_receipt interface\n\n1.17.80 fix: fix futures_contract_detail_em interface\n\n1.17.79 fix: fix futures_contract_info_dce interface\n\n1.17.78 fix: fix update python 3.14 support\n\n1.17.77 fix: fix get_dce_daily interface\n\n1.17.76 fix: fix futures_index_ccidx interface\n\n1.17.75 fix: fix stock_a_ttm_lyr interface\n\n1.17.74 fix: fix futures_dce_position_rank interface\n\n1.17.73 fix: fix get_receipt interface\n\n1.17.72 fix: fix futures_warehouse_receipt_dce interface\n\n1.17.71 fix: fix futures_inventory_99 interface\n\n1.17.70 fix: fix macro_stock_finance interface\n\n1.17.69 fix: fix fund_etf_hist_sina interface\n\n1.17.68 fix: fix option_hist_dce interface\n\n1.17.67 fix: fix stock_zh_a_hist_tx interface\n\n1.17.66 fix: fix futures_delivery_czce interface\n\n1.17.65 fix: fix futures_dce_warehouse_receipt interface\n\n1.17.64 fix: fix stock_individual_spot_xq interface\n\n1.17.63 fix: fix stock_financial_analysis_indicator_em interface\n\n1.17.62 fix: fix futures_dce_warehouse_receipt interface\n\n1.17.61 fix: fix stock_individual_spot_xq interface\n\n1.17.60 fix: fix stock_intraday_sina interface\n\n1.17.59 fix: fix fx_c_swap_cm interface\n\n1.17.58 fix: fix fund_etf_fund_daily_em interface\n\n1.17.57 fix: fix stock_szse_summary interface\n\n1.17.56 fix: fix stock_balance_sheet_by_report_delisted_em interface\n\n1.17.55 fix: fix stock_zh_growth_comparison_em interface\n\n1.17.54 fix: fix fund_announcement_dividend_em interface\n\n1.17.53 fix: fix reits_hist_min_em interface\n\n1.17.52 fix: fix fund_overview_em interface\n\n1.17.51 fix: fix fund_manager_em interface\n\n1.17.50 fix: fix option_current_day_szse interface\n\n1.17.49 fix: fix option_czce_daily interface\n\n1.17.48 fix: fix stock_hk_dividend_payout_em interface\n\n1.17.47 fix: fix get_receipt interface\n\n1.17.46 fix: fix stock_financial_us_analysis_indicator_em interface\n\n1.17.45 fix: fix stock_dxsyl_em interface\n\n1.17.44 fix: fix stock_individual_spot_xq interface\n\n1.17.43 fix: fix fund_rating_all interface\n\n1.17.42 fix: fix reits_realtime_em interface\n\n1.17.41 fix: fix stock_info_global_ths interface\n\n1.17.40 fix: fix stock_gdfx_free_holding_change_em interface\n\n1.17.39 fix: fix bond_zh_cov_value_analysis interface\n\n1.17.38 fix: fix futures_inventory_99 interface\n\n1.17.37 fix: fix stock_zh_index_daily_em interface\n\n1.17.36 fix: fix futures_hist_em interface\n\n1.17.35 fix: fix option_dce_daily interface\n\n1.17.34 fix: fix option_czce_daily interface\n\n1.17.33 fix: fix stock_comment_em interface\n\n1.17.32 fix: fix macro_china_shrzgm interface\n\n1.17.31 fix: fix index_neei_cx interface\n\n1.17.30 fix: fix get_receipt interface\n\n1.17.29 fix: fix air_quality_watch_point interface\n\n1.17.28 fix: fix stock_financial_analysis_indicator_em interface\n\n1.17.27 fix: fix index_csindex_all interface\n\n1.17.26 fix: fix stock_hot_rank_detail_em interface\n\n1.17.25 fix: fix get_receipt interface\n\n1.17.24 fix: fix futures_inventory_99 interface\n\n1.17.23 fix: fix get_roll_yield interface\n\n1.17.22 fix: fix stock_individual_spot_xq interface\n\n1.17.21 fix: fix stock_sector_fund_flow_hist interface\n\n1.17.20 fix: fix stock_news_em interface\n\n1.17.19 fix: fix futures_spot_price_daily interface\n\n1.17.18 fix: fix option_dce_daily interface\n\n1.17.17 fix: fix stock_hk_spot interface\n\n1.17.16 fix: fix bond_zh_cov interface\n\n1.17.15 fix: fix stock_comment_em interface\n\n1.17.14 fix: fix forex_spot_em interface\n\n1.17.13 fix: fix futures_shfe_warehouse_receipt interface\n\n1.17.12 fix: fix get_receipt interface\n\n1.17.11 fix: fix stock_individual_spot_xq interface\n\n1.17.10 fix: fix get_shfe_daily interface\n\n1.17.9 fix: fix stock_zh_ab_comparison_em interface\n\n1.17.8 fix: fix forex_spot_em interface\n\n1.17.7 fix: fix futures_spot_price_daily interface\n\n1.17.6 fix: fix stock_tfp_em interface\n\n1.17.5 fix: fix stock_us_pink_spot_em interface\n\n1.17.4 fix: fix stock_news_em interface\n\n1.17.3 fix: fix stock_hot_search_baidu interface\n\n1.17.2 fix: fix stock_ggcg_em interface\n\n1.17.1 fix: fix stock_gdfx_holding_detail_em interface\n\n1.16.99 fix: fix stock_info_sz_delist interface\n\n1.16.98 fix: fix fund_open_fund_info_em interface\n\n1.16.97 fix: fix fund_open_fund_info_em interface\n\n1.16.96 fix: fix stock_individual_spot_xq interface\n\n1.16.95 fix: fix option_shfe_daily interface\n\n1.16.94 fix: fix futures_fees_info interface\n\n1.16.93 fix: fix stock_hsgt_individual_em interface\n\n1.16.92 fix: fix bond_cb_jsl interface\n\n1.16.91 fix: fix stock_sse_deal_daily interface\n\n1.16.90 fix: fix stock_hk_company_profile_em interface\n\n1.16.89 fix: fix stock_balance_sheet_by_yearly_em interface\n\n1.16.88 fix: fix futures_inventory_99 interface\n\n1.16.87 fix: fix stock_zygc_em interface\n\n1.16.86 fix: fix index_yw interface\n\n1.16.85 fix: fix stock_dividend_cninfo interface\n\n1.16.84 fix: fix stock_fhps_detail_ths interface\n\n1.16.83 fix: fix stock_individual_info_em interface\n\n1.16.82 fix: fix index_global_spot_em interface\n\n1.16.81 fix: fix option_shfe_daily interface\n\n1.16.80 fix: fix stock_zh_a_disclosure_report_cninfo interface\n\n1.16.79 fix: fix stock_individual_basic_info_xq interface\n\n1.16.78 fix: fix stock_zh_a_spot_em interface\n\n1.16.77 add: add stock_lhb_yyb_detail_em interface\n\n1.16.76 fix: fix spot_quotations_sge interface\n\n1.16.75 fix: fix get_qhkc_index interface\n\n1.16.74 fix: fix stock_individual_spot_xq interface\n\n1.16.73 fix: fix stock_board_industry_hist_em interface\n\n1.16.72 add: add bond_sh_buy_back_em interface\n\n1.16.71 add: add stock_zh_a_gbjg_em interface\n\n1.16.70 fix: fix stock_zh_ah_spot_em interface\n\n1.16.69 fix: fix stock_individual_spot_xq interface\n\n1.16.68 fix: fix option_dce_daily interface\n\n1.16.67 fix: fix stock_individual_basic_info_xq interface\n\n1.16.66 fix: fix macro_cons_silver interface\n\n1.16.65 fix: fix stock_dzjy_yybph interface\n\n1.16.64 add: add reits_hist_em interface\n\n1.16.63 fix: fix stock_board_concept_name_ths interface\n\n1.16.62 fix: fix stock_gdfx_free_holding_change_em interface\n\n1.16.61 fix: fix stock_board_concept_index_ths interface\n\n1.16.60 fix: fix stock_individual_fund_flow_rank interface\n\n1.16.59 fix: fix option_czce_hist interface\n\n1.16.58 fix: fix stock_zh_a_spot interface\n\n1.16.57 fix: fix stock_market_pe_lg interface\n\n1.16.56 fix: fix stock_zh_a_daily interface\n\n1.16.55 fix: fix stock_zh_a_spot_em interface\n\n1.16.54 fix: fix stock_zh_a_spot_em interface\n\n1.16.53 fix: fix stock_yjbb_em interface\n\n1.16.52 fix: fix stock_zh_a_spot_em interface\n\n1.16.51 fix: fix stock_individual_basic_info_xq interface\n\n1.16.50 fix: fix futures_inventory_99 interface\n\n1.16.49 fix: fix index_zh_a_hist_min_em interface\n\n1.16.48 fix: fix stock_individual_basic_info_xq interface\n\n1.16.47 fix: fix stock_hsgt_stock_statistics_em interface\n\n1.16.46 fix: fix stock_hk_index_spot_em interface\n\n1.16.45 fix: fix option_risk_analysis_em interface\n\n1.16.44 fix: fix stock_board_concept_hist_em interface\n\n1.16.43 fix: fix option_value_analysis_em interface\n\n1.16.42 fix: fix stock_concept_fund_flow_hist interface\n\n1.16.41 fix: fix stock_individual_fund_flow_rank interface\n\n1.16.40 add: add stock_individual_basic_info_xq interface\n\n1.16.39 fix: fix option_current_em interface\n\n1.16.38 fix: fix fund_etf_hist_em interface\n\n1.16.37 fix: fix stock_board_concept_hist_em interface\n\n1.16.36 fix: fix stock_intraday_em interface\n\n1.16.35 fix: fix futures_global_spot_em interface\n\n1.16.34 fix: fix stock_individual_fund_flow_rank interface\n\n1.16.33 fix: fix fund_open_fund_daily_em interface\n\n1.16.32 fix: fix news_economic_baidu interface\n\n1.16.31 add: add index_global_hist_em interface\n\n1.16.30 add: add forex_hist_em interface\n\n1.16.29 fix: fix futures_global_hist_em interface\n\n1.16.28 fix: fix futures_global_hist_em interface\n\n1.16.27 fix: fix futures_global_em interface\n\n1.16.26 add: add stock_hsgt_sh_hk_spot_em interface\n\n1.16.25 fix: fix stock_financial_abstract_ths interface\n\n1.16.24 fix: fix stock_financial_hk_report_em interface\n\n1.16.23 fix: fix stock_board_industry_cons_em interface\n\n1.16.22 fix: fix fund_money_fund_info_em interface\n\n1.16.21 fix: fix stock_hk_index_daily_em interface\n\n1.16.20 fix: fix stock_lhb_detail_em interface\n\n1.16.19 fix: fix stock_profit_forecast_ths interface\n\n1.16.18 fix: fix stock_board_concept_spot_em interface\n\n1.16.17 fix: fix stock_research_report_em interface\n\n1.16.16 fix: fix stock_board_concept_spot_em interface\n\n1.16.15 fix: fix stock_board_concept_name_em interface\n\n1.16.14 fix: fix stock_info_global_cls interface\n\n1.16.13 fix: fix futures_inventory_99 interface\n\n1.16.12 fix: fix bond_zh_hs_cov_daily interface\n\n1.16.11 fix: fix stock_intraday_em interface\n\n1.16.10 fix: fix option_risk_analysis_em interface\n\n1.16.9 fix: fix stock_sse_deal_daily interface\n\n1.16.8 fix: fix option_czce_daily interface\n\n1.16.7 fix: fix fund_lof_hist_em interface\n\n1.16.6 fix: fix stock_sgt_reference_exchange_rate_sse interface\n\n1.16.5 fix: fix stock_sector_fund_flow_rank interface\n\n1.16.4 fix: fix stock_hk_ggt_components_em interface\n\n1.16.3 fix: fix stock_zh_index_spot_em interface\n\n1.16.2 fix: fix stock_board_industry_hist_em interface\n\n1.16.1 fix: fix stock_main_fund_flow interface\n\n1.15.99 fix: fix stock_esg_zd_sina interface\n\n1.15.98 fix: fix stock_board_concept_name_em interface\n\n1.15.97 fix: fix stock_intraday_em interface\n\n1.15.96 fix: fix bond_cov_comparison interface\n\n1.15.95 fix: fix stock_us_spot_em interface\n\n1.15.94 fix: fix stock_zh_index_spot_em interface\n\n1.15.93 fix: fix fund_etf_spot_em interface\n\n1.15.92 fix: fix stock_individual_fund_flow_rank interface\n\n1.15.91 fix: fix stock_board_concept_cons_em interface\n\n1.15.90 fix: fix stock_financial_analysis_indicator interface\n\n1.15.89 fix: fix stock_individual_info_em interface\n\n1.15.88 fix: fix stock_zh_a_spot_em interface\n\n1.15.87 fix: fix futures_index_ccidx interface\n\n1.15.86 fix: fix stock_zdhtmx_em interface\n\n1.15.85 fix: fix stock_gddh_em interface\n\n1.15.84 fix: fix option_dce_daily interface\n\n1.15.83 fix: fix stock_szse_sector_summary interface\n\n1.15.82 fix: fix stock_individual_spot_xq interface\n\n1.15.81 fix: fix bank_fjcf_table_detail interface\n\n1.15.80 fix: fix option_gfex_vol_daily interface\n\n1.15.79 fix: fix stock_new_a_spot_em interface\n\n1.15.78 fix: fix stock_yzxdr_em interface\n\n1.15.77 fix: fix option_czce_daily interface\n\n1.15.76 fix: fix futures_zh_minute_sina interface\n\n1.15.75 feat: add futures_hist_em interface\n\n1.15.74 fix: fix macro_australia_retail_rate_monthly interface\n\n1.15.73 fix: fix stock_dzjy_hygtj interface\n\n1.15.72 fix: fix stock_us_spot interface\n\n1.15.71 fix: fix stock_dzjy_sctj interface\n\n1.15.70 fix: fix stock_research_report_em interface\n\n1.15.69 fix: fix index_zh_a_hist_min_em interface\n\n1.15.68 fix: fix stock_research_report_em interface\n\n1.15.67 fix: fix stock_hold_change_cninfo interface\n\n1.15.66 fix: fix fund_etf_dividend_sina interface\n\n1.15.65 fix: fix option_czce_daily interface\n\n1.15.64 fix: fix stock_zh_index_value_csindex interface\n\n1.15.63 fix: fix stock_financial_abstract interface\n\n1.15.62 fix: fix stock_zt_pool_sub_new_em interface\n\n1.15.61 fix: fix stock_zt_pool_strong_em interface\n\n1.15.60 fix: fix stock_hot_keyword_em interface\n\n1.15.59 fix: fix stock_sy_hy_em interface\n\n1.15.58 fix: fix futures_hold_pos_sina interface\n\n1.15.57 fix: fix add 2025 trade date\n\n1.15.56 fix: fix spot_goods interface\n\n1.15.55 fix: fix fund_etf_spot_em interface\n\n1.15.54 fix: fix stock_sy_profile_em interface\n\n1.15.53 fix: fix futures_inventory_99 interface\n\n1.15.52 fix: fix stock_zh_index_hist_csindex interface\n\n1.15.51 fix: fix stock_gpzy_pledge_ratio_em interface\n\n1.15.50 fix: fix stock_gpzy_profile_em interface\n\n1.15.49 fix: fix option_dce_daily interface\n\n1.15.48 fix: fix stock_mda_ym interface\n\n1.15.47 fix: fix stock_individual_spot_xq interface\n\n1.15.46 fix: fix fund_etf_fund_info_em interface\n\n1.15.45 fix: fix stock_jgdy_detail_em interface\n\n1.15.44 fix: fix index_detail_hist_adjust_cni interface\n\n1.15.43 fix: fix macro_china_urban_unemployment interface\n\n1.15.42 fix: fix get_roll_yield_bar interface\n\n1.15.41 fix: fix macro_china_fdi interface\n\n1.15.40 fix: fix macro_china_fdi interface\n\n1.15.39 fix: fix macro_china_new_house_price interface\n\n1.15.38 fix: fix futures_contract_info_ine interface\n\n1.15.37 fix: fix stock_individual_spot_xq interface\n\n1.15.36 fix: fix futures_global_em interface\n\n1.15.35 fix: fix futures_spot_price_daily interface\n\n1.15.34 fix: fix fund_open_fund_rank_em interface\n\n1.15.33 add: add stock_value_em interface\n\n1.15.32 fix: fix stock_info_global_cls interface\n\n1.15.31 fix: fix stock_zt_pool_strong_em interface\n\n1.15.30 fix: fix fund_etf_category_sina interface\n\n1.15.29 fix: fix option_dce_daily interface\n\n1.15.28 fix: fix stock_hk_valuation_baidu interface\n\n1.15.27 fix: fix stock_zh_index_spot_em interface\n\n1.15.26 fix: fix option_dce_daily interface\n\n1.15.25 fix: fix stock_news_main_cx interface\n\n1.15.24 fix: fix get_dce_daily interface\n\n1.15.23 fix: fix stock_sector_fund_flow_summary interface\n\n1.15.24 fix: fix get_dce_daily interface\n\n1.15.22 fix: fix air_quality_hebei interface\n\n1.15.21 fix: fix get_futures_daily interface\n\n1.15.20 fix: fix rv_from_stock_zh_a_hist_min_em interface\n\n1.15.19 fix: fix stock_share_hold_change_szse interface\n\n1.15.18 fix: fix stock_share_hold_change_sse interface\n\n1.15.17 fix: fix news_trade_notify_dividend_baidu interface\n\n1.15.16 fix: fix macro_bank_usa_interest_rate interface\n\n1.15.15 add: add macro_bank_china_interest_rate interface\n\n1.15.14 fix: fix macro_bank_usa_interest_rate interface\n\n1.15.13 fix: fix stock_inner_trade_xq interface\n\n1.15.12 fix: fix stock_shareholder_change_ths interface\n\n1.15.11 fix: fix stock_individual_spot_xq interface\n\n1.15.10 add: add volatility_yz_rv indicator\n\n1.15.9 fix: fix index_analysis_weekly_sw interface\n\n1.15.8 fix: fix fund_individual_basic_info_xq interface\n\n1.15.7 fix: fix index_hist_sw interface\n\n1.15.6 fix: fix qdii_e_index_jsl interface\n\n1.15.5 fix: fix stock_individual_spot_xq interface\n\n1.15.4 fix: fix stock_allotment_cninfo interface\n\n1.15.3 fix: fix stock_share_change_cninfo interface\n\n1.15.2 fix: fix stock_index_pe_lg interface\n\n1.15.1 fix: fix stock_a_all_pb interface\n\n1.14.99 fix: fix stock_a_ttm_lyr interface\n\n1.14.98 fix: fix futures_hold_pos_sina interface\n\n1.14.97 fix: fix stock_profile_cninfo interface\n\n1.14.96 fix: fix stock_zt_pool_sub_new_em interface\n\n1.14.95 fix: fix stock_zt_pool_sub_new_em interface\n\n1.14.94 fix: fix stock_zt_pool_strong_em interface\n\n1.14.93 fix: fix stock_zt_pool_em interface\n\n1.14.92 add: add qdii_a_index_jsl interface\n\n1.14.91 fix: fix stock_history_dividend interface\n\n1.14.90 fix: fix stock_board_change_em interface\n\n1.14.89 fix: fix bond_spot_deal interface\n\n1.14.88 fix: fix stock_hot_rank_relate_em interface\n\n1.14.87 fix: fix stock_hot_search_baidu interface\n\n1.14.86 fix: fix stock_comment_detail_scrd_focus_em interface\n\n1.14.85 fix: fix stock_profit_forecast_em interface\n\n1.14.84 fix: fix drewry_wci_index interface\n\n1.14.83 fix: fix stock_comment_detail_zhpj_lspf_em interface\n\n1.14.82 fix: fix stock_comment_detail_scrd_desire_daily_em interface\n\n1.14.81 fix: fix stock_hsgt_hist_em interface\n\n1.14.80 fix: fix stock_hot_rank_wc interface\n\n1.14.79 add: add stock_zcfz_bj_em interface\n\n1.14.78 fix: fix stock_analyst_rank_em interface\n\n1.14.77 fix: fix stock_zh_b_daily interface\n\n1.14.76 fix: fix stock_sy_em interface\n\n1.14.75 fix: fix stock_sy_hy_em interface\n\n1.14.74 fix: fix stock_gpzy_pledge_ratio_em interface\n\n1.14.73 fix: fix stock_gpzy_profile_em interface\n\n1.14.72 fix: fix fund_etf_hist_min_em interface\n\n1.14.71 fix: fix stock_mda_ym interface\n\n1.14.70 fix: fix setup.py\n\n1.14.69 fix: fix stock_zygc_ym interface\n\n1.14.68 fix: fix fund_scale_open_sina interface\n\n1.14.67 fix: fix futures_foreign_commodity_realtime interface\n\n1.14.66 fix: fix stock_profit_forecast_ths interface\n\n1.14.65 fix: fix option_dce_daily interface\n\n1.14.64 fix: fix stock_board_industry_spot_em interface\n\n1.14.63 add: add spot_quotations_sge interface\n\n1.14.62 fix: fix stock_zt_pool_em interface\n\n1.14.61 fix: fix stock_fund_flow_individual interface\n\n1.14.60 fix: fix bond_zh_cov_info_ths interface\n\n1.14.59 fix: fix macro_cnbs interface\n\n1.14.58 add: add spot_mixed_feed_soozhu interface\n\n1.14.57 add: add spot_soybean_price_soozhu interface\n\n1.14.56 add: add spot_corn_price_soozhu interface\n\n1.14.55 add: add spot_hog_crossbred_soozhu interface\n\n1.14.54 fix: fix stock_individual_info_em interface\n\n1.14.53 add: add spot_hog_three_way_soozhu interface\n\n1.14.52 fix: fix stock_esg_hz_sina interface\n\n1.14.51 add: add stock_news_main_cx interface\n\n1.14.50 add: add spot_hog_lean_price_soozhu interface\n\n1.14.49 fix: fix fortune_rank interface\n\n1.14.48 add: add spot_hog_year_trend_soozhu interface\n\n1.14.47 fix: fix spot_hog_soozhu interface\n\n1.14.46 add: add spot_hog_soozhu interface\n\n1.14.45 fix: fix option_lhb_em interface\n\n1.14.44 fix: fix stock_hk_famous_spot_em interface\n\n1.14.43 fix: fix stock_share_change_cninfo interface\n\n1.14.42 fix: fix stock_new_gh_cninfo interface\n\n1.14.41 fix: fix fund_report_asset_allocation_cninfo interface\n\n1.14.40 fix: fix fund_open_fund_rank_em interface\n\n1.14.39 fix: fix stock_zh_b_daily interface\n\n1.14.38 fix: fix stock_industry_clf_hist_sw interface\n\n1.14.37 fix: fix stock_zh_kcb_report_em interface\n\n1.14.36 fix: fix option_czce_daily interface\n\n1.14.35 add: add macro_rmb_deposit interface\n\n1.14.34 fix: fix macro_rmb_loan interface\n\n1.14.33 fix: fix stock_concept_cons_futu interface\n\n1.14.32 add: add stock_concept_cons_futu interface\n\n1.14.31 fix: fix option_shfe_daily interface\n\n1.14.30 fix: fix stock_us_hist_min_em interface\n\n1.14.29 fix: fix stock_individual_spot_xq interface\n\n1.14.28 fix: fix news_trade_notify_dividend_baidu interface\n\n1.14.27 fix: fix nlp_ownthink interface\n\n1.14.26 fix: fix futures_fees_info interface\n\n1.14.24 fix: fix macro_china_bond_public interface\n\n1.14.23 fix: fix macro_china_nbs_nation interface\n\n1.14.22 fix: fix macro_china_nbs_nation interface\n\n1.14.21 fix: fix stock_info_global_cls interface\n\n1.14.20 fix: fix option_risk_indicator_sse interface\n\n1.14.19 fix: fix bond_china_close_return interface\n\n1.14.18 fix: fix currency_pair_map interface\n\n1.14.17 fix: fix stock_board_industry_summary_ths interface\n\n1.14.16 fix: fix index_hist_sw interface\n\n1.14.15 fix: fix energy_carbon_domestic interface\n\n1.14.14 fix: fix option_shfe_daily interface\n\n1.14.13 fix: fix option_minute_em interface\n\n1.14.12 fix: fix get_tqdm function\n\n1.14.11 fix: fix bond_treasure_issue_cninfo interface\n\n1.14.10 fix: fix bond_cov_issue_cninfo interface\n\n1.14.9 fix: fix bond_zh_hs_spot interface\n\n1.14.8 add: add stock_register_sz interface\n\n1.14.7 fix: fix index_stock_info interface\n\n1.14.6 fix: fix stock_register_kcb interface\n\n1.14.5 fix: fix stock_margin_account_info interface\n\n1.14.4 add: add stock_margin_account_info interface\n\n1.14.3 fix: fix stock_industry_clf_hist_sw interface\n\n1.14.2 fix: fix fund_portfolio_hold_em interface\n\n1.14.1 fix: fix energy_carbon_hb interface\n\n1.13.99 fix: fix macro_china_swap_rate interface\n\n1.13.98 fix: fix stock_financial_analysis_indicator interface\n\n1.13.97 fix: fix fund_portfolio_hold_em interface\n\n1.13.96 fix: fix stock_dividend_cninfo interface\n\n1.13.95 fix: fix stock_allotment_cninfo interface\n\n1.13.94 fix: fix stock_share_change_cninfo interface\n\n1.13.93 add: add index_neei_cx interface\n\n1.13.92 fix: fix bond_china_close_return interface\n\n1.13.91 fix: fix stock_buffett_index_lg interface\n\n1.13.90 fix: fix stock_zh_valuation_baidu interface\n\n1.13.89 fix: fix stock_zh_index_daily interface\n\n1.13.88 fix: fix index_price_cflp interface\n\n1.13.87 fix: fix index_detail_cni interface\n\n1.13.86 fix: fix futures_foreign_commodity_realtime interface\n\n1.13.85 fix: fix stock_news_em interface\n\n1.13.84 fix: fix index_hist_sw interface\n\n1.13.83 fix: fix stock_balance_sheet_by_report_em interface\n\n1.13.82 fix: fix futures_dce_position_rank interface\n\n1.13.81 fix: fix futures_dce_position_rank interface\n\n1.13.80 fix: fix stock_irm_cninfo interface\n\n1.13.79 fix: fix stock_industry_category_cninfo interface\n\n1.13.78 fix: fix futures_gfex_position_rank interface\n\n1.13.77 fix: fix stock_news_em interface\n\n1.13.76 fix: fix macro_china_lpr interface\n\n1.13.75 add: add spot_price_qh interface\n\n1.13.74 add: add macro_info_ws interface\n\n1.13.73 fix: fix futures_shfe_warehouse_receipt interface\n\n1.13.72 fix: fix futures_contract_info_shfe interface\n\n1.13.71 fix: fix stock_fhps_detail_ths interface\n\n1.13.70 fix: fix stock_irm_cninfo interface\n\n1.13.69 fix: fix get_shfe_rank_table interface\n\n1.13.68 fix: fix rate_interbank interface\n\n1.13.67 fix: fix bond_info_cm interface\n\n1.13.66 fix: fix stock_lhb_yytj_sina interface\n\n1.13.65 fix: fix stock_financial_report_sina interface\n\n1.13.64 fix: fix stock_lh_yyb_most interface\n\n1.13.63 fix: fix index_detail_hist_cni interface\n\n1.13.62 fix: fix index_fear_greed_funddb interface\n\n1.13.61 fix: fix stock_lhb_hyyyb_em interface\n\n1.13.60 fix: fix stock_zh_a_disclosure_report_cninfo interface\n\n1.13.59 fix: fix stock_lhb_jgstatistic_em interface\n\n1.13.58 fix: fix stock_lhb_jgmmtj_em interface\n\n1.13.57 fix: fix stock_a_below_net_asset_statistics interface\n\n1.13.56 fix: fix currency_boc_safe interface\n\n1.13.55 fix: fix sunrise_monthly interface\n\n1.13.54 fix: fix stock_tfp_em interface\n\n1.13.53 fix: fix stock_index_pe_lg interface\n\n1.13.52 fix: fix stock_market_pb_lg interface\n\n1.13.51 fix: fix stock_market_activity_legu interface\n\n1.13.50 fix: fix news_cctv interface\n\n1.13.49 fix: fix stock_ipo_summary_cninfo interface\n\n1.13.48 fix: fix stock_hk_indicator_eniu interface\n\n1.13.47 fix: fix stock_a_indicator_lg interface\n\n1.13.46 fix: fix futures_stock_shfe_js interface\n\n1.13.45 fix: fix futures_stock_shfe_js interface\n\n1.13.44 fix: fix stock_lhb_stock_statistic_em interface\n\n1.13.43 fix: fix stock_account_statistics_em interface\n\n1.13.42 fix: fix index_fear_greed_funddb interface\n\n1.13.41 fix: fix stock_sy_hy_em interface\n\n1.13.40 fix: fix index_fear_greed_funddb interface\n\n1.13.39 add: add index_news_sentiment_scope interface\n\n1.13.38 fix: fix stock_market_activity_legu interface\n\n1.13.37 fix: fix stock_hk_index_daily_sina interface\n\n1.13.36 fix: fix stock_hsgt_hist_em interface\n\n1.13.35 fix: fix stock_margin_szse interface\n\n1.13.34 fix: fix bank_fjcf_table_detail interface\n\n1.13.33 fix: fix index_realtime_fund_sw interface\n\n1.13.32 fix: fix futures_contract_info_czce interface\n\n1.13.31 fix: fix stock_individual_spot_xq interface\n\n1.13.30 fix: fix futures_contract_info_shfe interface\n\n1.13.29 fix: fix stock_esg_msci_sina interface\n\n1.13.28 fix: fix stock_restricted_release_queue_em interface\n\n1.13.27 add: add stock_esg_msci_sina interface\n\n1.13.26 fix: fix option_sse_minute_sina interface\n\n1.13.25 fix: fix futures_zh_daily_sina interface\n\n1.13.24 fix: fix futures_spot_sys interface\n\n1.13.23 add: add macro_usa_cme_merchant_goods_holding interface\n\n1.13.22 fix: fix amac_manager_cancelled_info interface\n\n1.13.21 fix: fix stock_yjkb_em interface\n\n1.13.20 fix: fix stock_zh_a_disclosure_report_cninfo interface\n\n1.13.19 add: add car_market_country_cpca interface\n\n1.13.18 fix: fix macro_china_pmi_yearly interface\n\n1.13.17 fix: fix stock_zcfz_em interface\n\n1.13.16 add: add car_market_cate_cpca interface\n\n1.13.15 add: add car_market_man_rank_cpca interface\n\n1.13.14 fix: fix futures_fees_info interface\n\n1.13.13 fix: fix car_market_cpca interface\n\n1.13.12 fix: fix stock_zyjs_ths interface\n\n1.13.11 fix: fix option_minute_em interface\n\n1.13.10 fix: fix news_trade_notify_dividend_baidu interface\n\n1.13.9 chore: remove pyarrow deps\n\n1.13.8 fix: fix fund_etf_hist_em interface\n\n1.13.7 add: add futures_fees_info interface\n\n1.13.6 fix: fix stock_board_concept_name_ths interface\n\n1.13.5 fix: fix stock_main_fund_flow interface\n\n1.13.4 fix: fix stock_individual_spot_xq interface\n\n1.13.3 fix: fix stock_main_fund_flow interface\n\n1.13.2 add: add stock_main_fund_flow interface\n\n1.13.1 fix: fix futures_spot_stock interface\n\n1.12.99 fix: fix index_hog_spot_price interface\n\n1.12.98 fix: fix bond_zh_cov interface\n\n1.12.97 fix: fix stock_zh_a_hist_min_em interface\n\n1.12.96 fix: fix stock_bid_ask_em interface\n\n1.12.95 add: add futures_hog_core interface\n\n1.12.94 fix: fix stock_hk_index_daily_em interface\n\n1.12.93 fix: fix bond_debt_nafmii interface\n\n1.12.92 fix: fix fund_etf_hist_min_em interface\n\n1.12.91 add: add stock_info_global_em interface\n\n1.12.90 fix: fix fund_etf_spot_em interface\n\n1.12.89 fix: fix bond_china_yield interface\n\n1.12.88 fix: fix fund_etf_spot_em interface\n\n1.12.87 fix: fix fortune_rank interface\n\n1.12.86 fix: fix fund_etf_spot_em interface\n\n1.12.85 fix: fix stock_sector_fund_flow_summary interface\n\n1.12.84 fix: fix stock_market_fund_flow interface\n\n1.12.83 fix: fix stock_sector_fund_flow_rank interface\n\n1.12.82 fix: fix stock_tfp_em interface\n\n1.12.81 fix: fix macro_china_bond_public interface\n\n1.12.80 fix: fix get_czce_daily interface\n\n1.12.79 fix: fix futures_main_sina interface\n\n1.12.78 fix: fix stock_info_sh_delist interface\n\n1.12.77 fix: fix futures_contract_info_shfe interface\n\n1.12.76 fix: fix bond_zh_hs_spot interface\n\n1.12.75 add: add futures_contract_info_ine interface\n\n1.12.74 add: add futures_contract_info_czce interface\n\n1.12.73 fix: fix stock_individual_spot_xq interface\n\n1.12.72 fix: fix stock_hot_rank_wc interface\n\n1.12.71 fix: fix stock_zh_ah_spot interface\n\n1.12.70 fix: fix stock_lhb_detail_daily_sina interface\n\n1.12.69 fix: fix futures_hold_pos_sina interface\n\n1.12.68 fix: fix option_finance_board interface\n\n1.12.67 fix: fix index_hist_sw interface\n\n1.12.66 fix: fix stock_board_industry_hist_em interface\n\n1.12.65 fix: fix futures_foreign_commodity_realtime interface\n\n1.12.64 fix: fix stock_board_industry_index_ths interface\n\n1.12.63 add: add akqmt interface\n\n1.12.62 fix: fix stock_fund_flow_individual interface\n\n1.12.61 fix: fix stock_bid_ask_em interface\n\n1.12.60 fix: fix movie_boxoffice_daily interface\n\n1.12.59 fix: fix movie_boxoffice_realtime interface\n\n1.12.58 fix: fix stock_ipo_summary_cninfo interface\n\n1.12.57 fix: fix bank_fjcf_table_detail interface\n\n1.12.56 fix: fix stock_a_indicator_lg interface\n\n1.12.55 fix: fix stock_us_hist interface\n\n1.12.54 fix: fix stock_gpzy_pledge_ratio_detail_em interface\n\n1.12.53 fix: fix stock_rank_xzjp_ths interface\n\n1.12.52 fix: fix stock_rank_cxg_ths interface\n\n1.12.51 add: add stock_hsgt_fund_min_em interface\n\n1.12.50 fix: fix bond_china_close_return interface\n\n1.12.49 fix: fix stock_dxsyl_em interface\n\n1.12.48 fix: fix option_minute_em interface\n\n1.12.47 fix: fix stock_zh_ah_daily interface\n\n1.12.46 fix: fix futures_contract_detail interface\n\n1.12.45 fix: fix stock_individual_spot_xq interface\n\n1.12.44 fix: fix stock_zh_ah_daily interface\n\n1.12.43 fix: fix macro_china_market_margin_sh interface\n\n1.12.42 fix: fix stock_news_em interface\n\n1.12.41 fix: fix sw_index_third_cons interface\n\n1.12.40 fix: fix futures_to_spot_dce interface\n\n1.12.39 fix: fix futures_gfex_warehouse_receipt interface\n\n1.12.38 fix: fix futures_to_spot_dce interface\n\n1.12.37 fix: fix futures_delivery_shfe interface\n\n1.12.36 fix: fix bond_china_close_return interface\n\n1.12.35 fix: fix article_epu_index interface\n\n1.12.34 fix: fix repo_rate_hist interface\n\n1.12.33 fix: fix futures_global_em interface\n\n1.12.32 fix: fix energy_oil_hist interface\n\n1.12.31 add: add futures_global_em interface\n\n1.12.30 fix: fix futures_settlement_price_sgx interface\n\n1.12.29 add: add stock_individual_spot_xq interface\n\n1.12.28 fix: fix futures_foreign_commodity_realtime interface\n\n1.12.27 fix: fix stock_hk_fhpx_detail_ths interface\n\n1.12.26 fix: fix index_stock_info interface\n\n1.12.25 fix: fix fund_individual_basic_info_xq interface\n\n1.12.24 fix: fix stock_hk_index_spot_em interface\n\n1.12.23 fix: fix fund_etf_hist_min_em interface\n\n1.12.22 fix: fix stock_hsgt_board_rank_em interface\n\n1.12.21 fix: fix stock_hsgt_hold_stock_em interface\n\n1.12.20 fix: fix futures_inventory_99 interface\n\n1.12.19 fix: fix stock_hk_profit_forecast_et interface\n\n1.12.18 fix: fix stock_board_industry_index_ths interface\n\n1.12.17 fix: fix option_current_em interface\n\n1.12.16 fix: fix stock_hot_follow_xq interface\n\n1.12.15 fix: fix stock_hk_profit_forecast_et interface\n\n1.12.14 add: add stock_hk_profit_forecast_et interface\n\n1.12.13 fix: fix index_stock_cons_csindex interface\n\n1.12.12 fix: fix stock_zh_index_daily interface\n\n1.12.11 add: add stock_zh_index_spot_em interface\n\n1.12.10 fix: fix stock_add_stock interface\n\n1.12.9 add: add fund_individual_basic_info_xq interface\n\n1.12.8 fix: fix fund_open_fund_info_em interface\n\n1.12.7 fix: fix option_gfex_daily interface\n\n1.12.6 fix: fix fund_open_fund_info_em interface\n\n1.12.5 fix: fix stock_zh_a_gdhs interface\n\n1.12.4 fix: fix tool_trade_date_hist_sina interface\n\n1.12.3 fix: fix stock_gdfx_free_holding_teamwork_em interface\n\n1.12.2 fix: fix hurun_rank interface\n\n1.12.1 fix: fix futures_comm_info interface\n\n1.11.99 fix: fix stock_zh_index_spot interface\n\n1.11.98 fix: fix stock_zh_a_disclosure_report_cninfo interface\n\n1.11.97 add: add stock_zh_a_disclosure_report_cninfo interface\n\n1.11.96 fix: fix fund_rating_all interface\n\n1.11.95 fix: fix fund_etf_hist_min_em interface\n\n1.11.94 fix: fix index_zh_a_hist_min_em interface\n\n1.11.93 fix: fix stock_zh_a_hist_pre_min_em interface\n\n1.11.92 fix: fix get_gfex_receipt interface\n\n1.11.91 fix: remove stock_us_fundamental interface\n\n1.11.90 fix: fix futures_rule interface\n\n1.11.89 fix: fix bond_zh_us_rate interface\n\n1.11.88 fix: fix futures_board_index_nh interface\n\n1.11.87 fix: fix futures_board_index_nh interface\n\n1.11.86 fix: fix stock_telegraph_cls interface\n\n1.11.85 fix: fix stock_market_activity_legu interface\n\n1.11.84 fix: fix fund_name_em interface\n\n1.11.83 fix: fix stock_zt_pool_strong_em interface\n\n1.11.82 fix: fix bond_zh_us_rate interface\n\n1.11.81 fix: fix stock_gdfx_free_holding_detail_em interface\n\n1.11.80 fix: fix stock_cash_flow_sheet_by_report_em interface\n\n1.11.79 fix: fix get_receipt interface\n\n1.11.78 add: add stock_financial_benefit_ths interface\n\n1.11.77 fix: fix futures_zh_spot interface\n\n1.11.76 fix: fix option_czce_daily interface\n\n1.11.75 fix: fix futures_comex_inventory interface\n\n1.11.74 fix: fix stock_comment_em interface\n\n1.11.73 fix: fix futures_comex_inventory interface\n\n1.11.72 fix: fix get_rank_sum_daily interface\n\n1.11.71 fix: fix stock_balance_sheet_by_report_em interface\n\n1.11.70 fix: fix futures_gfex_position_rank interface\n\n1.11.69 add: add futures_gfex_position_rank interface\n\n1.11.68 fix: fix fund_aum_em interface\n\n1.11.67 fix: fix currency_boc_sina interface\n\n1.11.66 fix: fix fund_scale_structured_sina interface\n\n1.11.65 fix: fix futures_index_ccidx interface\n\n1.11.64 fix: fix futures_settlement_price_sgx interface\n\n1.11.63 fix: fix fund_scale_open_sina interface\n\n1.11.62 fix: fix stock_zt_pool_dtgc_em interface\n\n1.11.61 fix: fix fund_manager_em interface\n\n1.11.60 fix: fix bond_china_close_return interface\n\n1.11.59 fix: fix fund_portfolio_change_em interface\n\n1.11.58 fix: fix bond_china_close_return interface\n\n1.11.57 fix: fix stock_zt_pool_em interface\n\n1.11.56 fix: fix stock_balance_sheet_by_report_delisted_em interface\n\n1.11.55 fix: fix fund_portfolio_bond_hold_em interface\n\n1.11.54 fix: fix fund_portfolio_hold_em interface\n\n1.11.53 add: add stock_zh_a_hist_tx interface\n\n1.11.52 fix: fix fund_scale_change_em interface\n\n1.11.51 fix: fix stock_zh_a_daily interface\n\n1.11.50 fix: fix amac_fund_abs support\n\n1.11.49 add: add aarch64 support\n\n1.11.48 fix: fix installation.md\n\n1.11.47 add: add akracer 0.0.8 support\n\n1.11.46 add: add akracer support\n\n1.11.45 add: add stock_balance_sheet_by_report_delisted_em interface\n\n1.11.44 add: add stock_cyq_em interface\n\n1.11.43 fix: fix get_futures_daily interface\n\n1.11.42 fix: fix stock_gpzy_pledge_ratio_em interface\n\n1.11.41 fix: fix index_weibo_sina interface\n\n1.11.40 fix: fix index_option_300etf_qvix interface\n\n1.11.39 fix: fix index_option_50etf_qvix interface\n\n1.11.38 fix: fix setup.py interface\n\n1.11.37 fix: fix index_fear_greed_funddb interface\n\n1.11.36 add: add stock_fear_greed_funddb interface\n\n1.11.35 fix: fix stock_board_concept_hist_ths interface\n\n1.11.34 add: add stock_board_concept_graph_ths interface\n\n1.11.33 add: add stock_intraday_em interface\n\n1.11.32 add: add stock_margin_ratio_pa interface\n\n1.11.31 fix: fix futures_dce_warehouse_receipt interface\n\n1.11.30 fix: fix stock_zh_a_st_em interface\n\n1.11.29 fix: fix bond_new_composite_index_cbond interface\n\n1.11.28 fix: fix stock_margin_detail_szse interface\n\n1.11.27 fix: fix stock_margin_detail_szse interface\n\n1.11.26 fix: fix macro_china_supply_of_money interface\n\n1.11.25 fix: fix macro_china_central_bank_balance interface\n\n1.11.24 fix: fix macro_china_postal_telecommunicational interface\n\n1.11.23 fix: fix macro_china_society_traffic_volume interface\n\n1.11.22 fix: fix option_dce_daily interface\n\n1.11.21 fix: fix get_dce_daily interface\n\n1.11.20 fix: fix option_dce_daily interface\n\n1.11.19 fix: fix drewry_wci_index interface\n\n1.11.18 fix: fix get_rank_sum_daily interface\n\n1.11.17 fix: fix futures_spot_price_daily interface\n\n1.11.16 fix: fix stock_dividend_cninfo interface\n\n1.11.15 fix: fix stock_dividend_cninfo interface\n\n1.11.14 fix: fix migration_area_baidu interface\n\n1.11.13 fix: fix futures_comm_info interface\n\n1.11.12 fix: fix stock_board_concept_hist_ths interface\n\n1.11.11 fix: fix spot_hist_sge interface\n\n1.11.10 fix: fix bond_new_composite_index_cbond interface\n\n1.11.9 fix: fix currency_boc_safe interface\n\n1.11.8 fix: fix news_economic_baidu interface\n\n1.11.7 fix: fix get_futures_daily interface\n\n1.11.6 fix: fix futures_main_sina interface\n\n1.11.5 fix: fix macro_china_hk_cpi interface\n\n1.11.4 fix: fix bond_cb_profile_sina interface\n\n1.11.3 fix: fix stock_a_high_low_statistics interface\n\n1.11.2 fix: fix stock_a_below_net_asset_statistics interface\n\n1.11.1 add: add index_us_stock_sina interface\n\n1.10.99 fix: fix crypto_bitcoin_cme interface\n\n1.10.98 fix: fix get_cffex_rank_table interface\n\n1.10.97 fix: fix stock_financial_analysis_indicator interface\n\n1.10.96 fix: fix stock_hk_daily interface\n\n1.10.95 fix: fix crypto_bitcoin_cme interface\n\n1.10.94 add: add macro_china_nbs_nation interface\n\n1.10.93 add: add stock_ipo_summary_cninfo interface\n\n1.10.92 fix: fix stock_individual_fund_flow interface\n\n1.10.91 fix: fix stock_share_hold_change_szse interface\n\n1.10.90 fix: fix futures_comex_inventory interface\n\n1.10.89 add: add stock_share_hold_change_bse interface\n\n1.10.88 add: add stock_research_report_em interface\n\n1.10.87 add: add stock_zdhtmx_em interface\n\n1.10.86 add: add stock_gddh_em interface\n\n1.10.85 fix: fix stock_hot_rank_wc interface\n\n1.10.84 fix: fix stock_us_fundamental interface\n\n1.10.83 add: add stock_industry_clf_hist_sw interface\n\n1.10.82 fix: fix currency_boc_sina interface\n\n1.10.81 fix: fix stock_bid_ask_em interface\n\n1.10.80 fix: fix macro_china_gyzjz interface\n\n1.10.79 add: add stock_hold_management_detail_em interface\n\n1.10.78 fix: fix get_cffex_rank_table interface\n\n1.10.77 add: add bond_cb_profile_sina interface\n\n1.10.76 fix: fix stock_notice_report interface\n\n1.10.75 add: add macro_china_urban_unemployment interface\n\n1.10.74 add: add stock_sns_sseinfo interface\n\n1.10.73 add: add stock_irm_cninfo interface\n\n1.10.72 fix: fix stock_financial_hk_report_em interface\n\n1.10.71 fix: fix stock_us_hist interface\n\n1.10.70 fix: fix stock_zh_a_hist interface\n\n1.10.69 fix: fix currency_latest interface\n\n1.10.68 fix: fix option_gfex_daily interface\n\n1.10.67 rem: rem futures_egg_price_yearly interface\n\n1.10.66 fix: fix stock_financial_report_sina interface\n\n1.10.65 fix: fix macro_china_lpr interface\n\n1.10.64 fix: fix stock_zh_b_spot interface\n\n1.10.63 fix: fix stock_esg_hz_sina interface\n\n1.10.62 fix: fix index_hist_sw interface\n\n1.10.61 fix: fix macro_cnbs interface\n\n1.10.60 add: add macro_usa_cpi_yoy interface\n\n1.10.59 add: add fund_announcement_personnel_em interface\n\n1.10.58 fix: fix fund_etf_hist_em interface\n\n1.10.57 fix: fix stock_zh_valuation_baidu interface\n\n1.10.56 fix: fix stock_zh_b_daily interface\n\n1.10.55 fix: fix macro_usa_personal_spending interface\n\n1.10.54 fix: fix macro_usa_core_cpi_monthly interface\n\n1.10.53 fix: fix index_stock_cons_csindex interface\n\n1.10.52 fix: fix stock_financial_hk_report_em interface\n\n1.10.51 fix: fix fund_money_rank_em interface\n\n1.10.50 fix: fix car_energy_sale_cpca interface\n\n1.10.49 fix: fix stock_hot_rank_em interface\n\n1.10.48 add: add stock_esg_hz_sina interface\n\n1.10.47 add: add stock_esg_rate_sina interface\n\n1.10.46 fix: fix index_value_hist_funddb interface\n\n1.10.45 fix: fix stock_zh_a_minute interface\n\n1.10.44 fix: fix get_shfe_rank_table interface\n\n1.10.43 rem: rem index_vix interface\n\n1.10.42 fix: fix fund_rating_all interface\n\n1.10.41 add: add fund_lof_hist_em interface\n\n1.10.40 fix: fix futures_news_baidu interface\n\n1.10.39 fix: fix stock_board_concept_hist_min_em interface\n\n1.10.38 fix: fix stock_board_industry_hist_min_em interface\n\n1.10.37 rem: rem index_stock_hist interface\n\n1.10.36 fix: fix stock_sy_profile_em interface\n\n1.10.35 add: add get_gfex_receipt interface\n\n1.10.34 fix: fix futures_display_main_sina interface\n\n1.10.33 fix: fix index_sugar_msweet interface\n\n1.10.32 fix: fix get_cffex_daily interface\n\n1.10.31 fix: fix zh_subscribe_exchange_symbol interface\n\n1.10.30 fix: fix stock_info_sz_name_code interface\n\n1.10.29 fix: fix stock_zh_index_daily_em interface\n\n1.10.28 fix: fix stock_hot_up_em interface\n\n1.10.27 fix: fix stock_hot_up_em interface\n\n1.10.26 add: add stock_hot_up_em interface\n\n1.10.25 fix: fix index_sugar_msweet interface\n\n1.10.24 fix: fix stock_zh_a_daily interface\n\n1.10.23 fix: fix index_kq_fz interface\n\n1.10.22 fix: fix macro_china_cpi_monthly interface\n\n1.10.21 fix: fix fund_report_stock_cninfo interface\n\n1.10.20 fix: fix stock_new_gh_cninfo interface\n\n1.10.19 fix: fix bond_treasure_issue_cninfo interface\n\n1.10.18 fix: fix index_yw interface\n\n1.10.17 fix: fix stock_allotment_cninfo interface\n\n1.10.16 fix: fix bond_zh_hs_cov_min interface\n\n1.10.15 fix: fix bond_zh_hs_cov_pre_min interface\n\n1.10.14 fix: fix bond_zh_hs_cov_min interface\n\n1.10.13 fix: fix stock_share_change_cninfo interface\n\n1.10.12 fix: fix bond_cb_adj_logs_jsl interface\n\n1.10.11 fix: fix stock_zh_a_hist_pre_min_em interface\n\n1.10.10 fix: fix stock_zh_a_hist interface\n\n1.10.9 fix: fix bond_zh_hs_cov_min interface\n\n1.10.8 fix: fix futures_volatility_index_nh interface\n\n1.10.7 fix: fix option_finance_board interface\n\n1.10.6 fix: fix futures_nh_volatility_index interface\n\n1.10.5 fix: fix index_level_one_hist_sw interface\n\n1.10.4 fix: fix futures_return_index_nh interface\n\n1.10.3 fix: fix stock_gdfx_holding_analyse_em interface\n\n1.10.2 fix: fix stock_gdfx_holding_detail_em interface\n\n1.10.1 fix: fix stock_hold_control_cninfo interface\n\n1.9.99 fix: fix stock_hold_num_cninfo interface\n\n1.9.98 fix: fix stock_hold_control_cninfo interface\n\n1.9.97 fix: fix stock_industry_category_cninfo interface\n\n1.9.96 fix: fix stock_hold_control_cninfo interface\n\n1.9.95 fix: fix stock_zh_index_hist_csindex interface\n\n1.9.94 fix: fix stock_a_indicator_lg interface\n\n1.9.93 fix: fix index_level_one_hist_sw interface\n\n1.9.92 fix: fix article_ff_crr interface\n\n1.9.91 add: add stock_financial_abstract_ths interface\n\n1.9.90 fix: fix stock_sse_deal_daily interface\n\n1.9.89 fix: fix index_kq_fz interface\n\n1.9.88 fix: fix setup.py\n\n1.9.87 add: add option_minute_em interface\n\n1.9.86 fix: fix index_kq_fz interface\n\n1.9.85 fix: fix option_dce_daily interface\n\n1.9.84 fix: fix stock_hk_fhpx_detail_ths interface\n\n1.9.83 add: add stock_concept_fund_flow_hist interface\n\n1.9.82 fix: fix currency_boc_safe interface\n\n1.9.81 add: add stock_hk_index_spot_sina interface\n\n1.9.80 fix: fix futures_spot_price interface\n\n1.9.79 fix: fix stock_sse_deal_daily interface\n\n1.9.78 fix: fix macro_usa_gdp_monthly interface\n\n1.9.77 fix: fix stock_hot_rank_wc interface\n\n1.9.76 fix: fix stock_sector_detail interface\n\n1.9.75 fix: fix stock_board_industry_index_ths interface\n\n1.9.74 fix: fix get_shfe_rank_table interface\n\n1.9.73 add: add bond_zh_cov_info_ths interface\n\n1.9.72 fix: fix fund_manager interface\n\n1.9.71 fix: fix stock_lh_yyb_most interface\n\n1.9.70 fix: fix stock_szse_sector_summary interface\n\n1.9.69 fix: fix stock_lh_yyb_capital interface\n\n1.9.68 fix: fix stock_lh_yyb_capital interface\n\n1.9.67 fix: fix futures_zh_daily_sina interface\n\n1.9.66 fix: fix match_main_contract interface\n\n1.9.65 fix: fix stock_hot_search_baidu interface\n\n1.9.64 fix: fix stock_a_indicator_lg interface\n\n1.9.63 fix: fix get_czce_rank_table interface\n\n1.9.62 fix: fix bond_zh_us_rate interface\n\n1.9.61 fix: fix stock_lhb_detail_daily_sina interface\n\n1.9.60 add: add stock_hk_fhpx_detail_ths interface\n\n1.9.59 fix: fix stock_hot_search_baidu interface\n\n1.9.58 add: add option_gfex_daily interface\n\n1.9.57 fix: fix stock_lhb_detail_em interface\n\n1.9.56 fix: fix get_receipt interface\n\n1.9.55 fix: fix stock_zh_valuation_baidu interface\n\n1.9.54 fix: fix stock_board_concept_cons_ths interface\n\n1.9.53 fix: fix get_ine_daily interface\n\n1.9.52 fix: fix get_shfe_rank_table interface\n\n1.9.51 fix: fix get_shfe_daily interface\n\n1.9.50 fix: fix stock_a_all_pb interface\n\n1.9.49 add: add stock_lhb_yybph_em interface\n\n1.9.48 fix: fix index_stock_cons interface\n\n1.9.47 fix: fix option_dce_daily interface\n\n1.9.46 fix: fix stock_a_gxl_lg interface\n\n1.9.45 add: add stock_fhps_detail_ths interface\n\n1.9.44 fix: fix stock_a_high_low_statistics interface\n\n1.9.43 fix: fix stock_a_congestion_lg interface\n\n1.9.42 add: add stock_bid_ask_em interface\n\n1.9.41 fix: fix stock_a_indicator_lg interface\n\n1.9.40 fix: fix stock_profit_forecast_em interface\n\n1.9.39 fix: fix fund_stock_position_lg interface\n\n1.9.38 fix: fix stock_a_lg_indicator interface\n\n1.9.37 fix: fix stock_hk_indicator_eniu interface\n\n1.9.36 fix: fix stock_market_pe_lg interface\n\n1.9.35 fix: fix stock_a_lg_indicator interface\n\n1.9.34 fix: fix stock_zh_a_tick_tx_js interface\n\n1.9.33 add: add stock_hk_main_board_spot_em interface\n\n1.9.32 fix: fix bank_fjcf_table_detail interface\n\n1.9.31 fix: fix amac_fund_info interface\n\n1.9.30 fix: fix stock_a_lg_indicator interface\n\n1.9.29 fix: fix stock_a_lg_indicator interface\n\n1.9.28 fix: fix stock_financial_report_sina interface\n\n1.9.27 fix: fix fund_exchange_rank_em interface\n\n1.9.26 fix: fix bond_cb_jsl interface\n\n1.9.25 add: add stock_hk_hot_rank_em interface\n\n1.9.24 fix: fix bond_cb_adj_logs_jsl interface\n\n1.9.23 fix: fix bond_cb_redeem_jsl interface\n\n1.9.22 fix: fix fund_hk_fund_hist_em interface\n\n1.9.21 fix: fix fund_financial_fund_info_em interface\n\n1.9.20 fix: fix fund_financial_fund_info_em interface\n\n1.9.19 fix: fix macro_cnbs interface\n\n1.9.18 fix: fix macro_china_market_margin_sh interface\n\n1.9.17 add: add stock_board_industry_spot_em interface\n\n1.9.16 fix: fix stock_financial_abstract interface\n\n1.9.15 fix: fix stock_hk_daily interface\n\n1.9.14 fix: fix option_risk_analysis_em interface\n\n1.9.13 fix: fix stock_zh_valuation_baidu interface\n\n1.9.12 fix: fix stock_hot_rank_wc interface\n\n1.9.11 add: add stock_sector_fund_flow_hist interface\n\n1.9.10 add: add macro_shipping_bcti interface\n\n1.9.9 add: add macro_shipping_bci interface\n\n1.9.8 fix: fix stock_hk_valuation_baidu interface\n\n1.9.7 add: add stock_profit_forecast_ths interface\n\n1.9.6 fix: fix futures_hog_info interface\n\n1.9.5 fix: fix stock_info_a_code_name interface\n\n1.9.4 fix: fix drewry_wci_index interface\n\n1.9.3 fix: fix fx_quote_baidu interface\n\n1.9.2 fix: fix stock_xgsglb_em interface\n\n1.9.1 fix: fix index_value_name_funddb interface\n\n1.8.99 add: add futures_news_shmet interface\n\n1.8.98 fix: fix stock_info_sz_delist interface\n\n1.8.97 fix: fix futures_egg_price_yearly interface\n\n1.8.96 fix: fix option_finance_board interface\n\n1.8.95 fix: fix index_zh_a_hist interface\n\n1.8.94 fix: fix Dockerfile\n\n1.8.93 fix: fix stock_gdfx_holding_detail_em interface\n\n1.8.92 fix: fix stock_institute_hold interface\n\n1.8.91 fix: fix sunrise_monthly interface\n\n1.8.90 fix: fix bond_info_detail_cm interface\n\n1.8.89 fix: fix sunrise_city_list interface\n\n1.8.88 fix: fix stock_info_sz_delist interface\n\n1.8.87 fix: fix stock_info_sz_change_name interface\n\n1.8.86 fix: fix stock_info_sh_delist interface\n\n1.8.85 fix: fix stock_info_sh_name_code interface\n\n1.8.84 remove: remove stock_zh_a_scr_report interface\n\n1.8.83 fix: fix stock_info_sh_name_code interface\n\n1.8.82 fix: fix stock_fund_stock_holder interface\n\n1.8.81 fix: fix futures_hog_info interface\n\n1.8.80 fix: fix stock_profit_forecast interface\n\n1.8.79 fix: fix stock_hk_valuation_baidu interface\n\n1.8.78 fix: fix stock_profit_forecast interface\n\n1.8.77 fix: fix stock_analyst_rank_em interface\n\n1.8.76 remove: remove js_news and ws interface\n\n1.8.75 add: add stock_cy_a_spot_em interface\n\n1.8.74 fix: fix drewry_wci_index interface\n\n1.8.73 add: add stock_zyjs_ths interface\n\n1.8.72 fix: fix drewry_wci_index interface\n\n1.8.71 add: add stock_zygc_em interface\n\n1.8.70 add: add stock_market_pe_lg interface\n\n1.8.69 fix: fix stock_individual_fund_flow_rank interface\n\n1.8.68 fix: fix stock_individual_fund_flow interface\n\n1.8.67 fix: fix python warning 3.7.x support\n\n1.8.66 fix: fix python 3.7.x support\n\n1.8.65 fix: fix get_roll_yield_bar interface\n\n1.8.64 fix: fix stock_ggcg_em interface\n\n1.8.63 fix: fix stock_cash_flow_sheet_by_report_em interface\n\n1.8.62 fix: fix stock_board_industry_index_ths interface\n\n1.8.61 fix: fix futures_comm_info interface\n\n1.8.60 fix: fix hurun_rank interface\n\n1.8.59 fix: fix stock_zh_valuation_baidu interface\n\n1.8.58 fix: fix get_calendar interface\n\n1.8.57 fix: fix stock_szse_summary interface\n\n1.8.56 fix: fix stock_hk_valuation_baidu interface\n\n1.8.55 fix: fix macro_usa_pmi interface\n\n1.8.54 fix: fix get_roll_yield_bar interface\n\n1.8.53 fix: fix stock_hot_rank_wc interface\n\n1.8.52 fix: fix index_value_hist_funddb interface\n\n1.8.51 fix: fix fortune_rank interface\n\n1.8.50 fix: fix stock_us_daily interface\n\n1.8.49 fix: fix futures_comm_info interface\n\n1.8.48 add: add fund_etf_hist_em interface\n\n1.8.47 add: add option_cffex_sz50_list_sina interface\n\n1.8.46 fix: fix get_roll_yield_bar interface\n\n1.8.45 fix: fix calendar.json\n\n1.8.44 fix: fix stock_info_bj_name_code interface\n\n1.8.43 add: add stock_ebs_lg interface\n\n1.8.42 add: add get_gfex_daily interface\n\n1.8.41 add: add futures_index_ccidx interface\n\n1.8.40 add: add fund_balance_position_lg interface\n\n1.8.39 add: add stock_board_change_em interface\n\n1.8.38 fix: fix macro_cons_gold interface\n\n1.8.37 add: add fund_stock_position_lg interface\n\n1.8.36 add: add stock_a_congestion_lg interface\n\n1.8.35 add: add stock_hk_gxl_lg interface\n\n1.8.34 add: add stock_a_gxl_lg interface\n\n1.8.33 fix: fix stock_hot_rank_em interface\n\n1.8.32 fix: fix js_news interface\n\n1.8.31 fix: fix get_dce_daily interface\n\n1.8.30 fix: fix index_value_name_funddb interface\n\n1.8.29 fix: fix baidu_search_index interface\n\n1.8.28 fix: fix fund_fh_rank_em interface\n\n1.8.27 fix: fix fund_cf_em interface\n\n1.8.26 fix: fix bond_china_close_return_map interface\n\n1.8.25 fix: fix stock_circulate_stock_holder interface\n\n1.8.24 fix: fix stock_ipo_benefit_ths interface\n\n1.8.23 add: add stock_restricted_release_summary_em interface\n\n1.8.22 fix: fix stock_margin_detail_szse interface\n\n1.8.21 fix: fix stock_board_concept_hist_em interface\n\n1.8.20 fix: fix stock_board_concept_hist_em interface\n\n1.8.19 fix: fix stock_balance_sheet_by_yearly_em interface\n\n1.8.18 add: add stock_hsgt_fund_flow_summary_em interface\n\n1.8.17 fix: fix macro_china_fdi interface\n\n1.8.16 fix: fix macro_china_swap_rate interface\n\n1.8.15 fix: fix stock_price_js interface\n\n1.8.14 add: add stock_board_industry_summary_ths interface\n\n1.8.13 fix: fix macro_china_new_house_price interface\n\n1.8.12 fix: fix stock_yjyg_em interface\n\n1.8.11 fix: fix macro_china_ppi interface\n\n1.8.10 fix: fix stock_a_all_pb interface\n\n1.8.9 fix: fix stock_a_ttm_lyr interface\n\n1.8.8 fix: fix macro_china_gdp interface\n\n1.8.7 fix: fix stock_a_below_net_asset_statistics interface\n\n1.8.6 fix: fix stock_market_activity_legu interface\n\n1.8.5 fix: fix stock_a_lg_indicator interface\n\n1.8.4 fix: fix macro_china_hgjck interface\n\n1.8.3 fix: fix stock_pg_em interface\n\n1.8.2 fix: fix fund_portfolio_hold_em interface\n\n1.8.1 fix: fix stock_dxsyl_em interface\n\n1.7.99 fix: fix stock_lhb_detail_daily_sina interface\n\n1.7.98 add: add stock_zh_a_gdhs interface\n\n1.7.97 add: add index_hog_spot_price interface\n\n1.7.96 fix: fix futures_hog_info interface\n\n1.7.95 fix: fix spot_golden_benchmark_sge interface\n\n1.7.94 fix: fix fund_portfolio_hold_em interface\n\n1.7.93 fix: fix sw_index_third_cons interface\n\n1.7.92 fix: fix fund_portfolio_hold_em interface\n\n1.7.91 fix: fix futures_price_index_nh interface\n\n1.7.90 fix: fix stock_yjbb_em interface\n\n1.7.89 fix: fix stock_zh_index_daily_tx interface\n\n1.7.88 fix: fix stock_news_em interface\n\n1.7.87 fix: fix macro_uk interface\n\n1.7.86 fix: fix bond_info_cm interface\n\n1.7.85 fix: fix stock_board_industry_hist_em interface\n\n1.7.84 add: add bond_info_cm interface\n\n1.7.83 fix: fix macro_japan interface\n\n1.7.82 fix: fix index_analysis_daily_sw interface\n\n1.7.81 fix: fix macro_swiss_svme interface\n\n1.7.80 fix: fix stock_a_below_net_asset_statistics interface\n\n1.7.79 fix: fix macro_germany interface\n\n1.7.78 add: add index_analysis_sw interface\n\n1.7.77 fix: fix index_value_hist_funddb interface\n\n1.7.76 fix: fix macro_euro_gdp_yoy interface\n\n1.7.75 add: add index_component_sw interface\n\n1.7.74 fix: fix futures_news_baidu interface\n\n1.7.73 fix: fix stock_zh_index_daily_tx interface\n\n1.7.72 add: add index_min_sw interface\n\n1.7.71 add: add support for Python 3.11\n\n1.7.70 fix: fix index_hist_sw interface\n\n1.7.69 add: add index_hist_sw interface\n\n1.7.68 fix: fix hurun_rank interface\n\n1.7.67 fix: fix xincaifu_rank interface\n\n1.7.66 add: add index_realtime_sw interface\n\n1.7.65 fix: fix futures_rule interface\n\n1.7.64 add: add option_50etf_min_qvix interface\n\n1.7.63 add: add option_300etf_min_qvix interface\n\n1.7.62 add: add option_300etf_qvix interface\n\n1.7.61 add: add option_50etf_qvix interface\n\n1.7.60 fix: fix stock_zh_a_spot_em interface\n\n1.7.59 fix: fix stock_a_high_low_statistics interface\n\n1.7.58 fix: fix bond_cb_redeem_jsl interface\n\n1.7.57 fix: fix stock_a_high_low_statistics interface\n\n1.7.56 fix: fix stock_buffett_index_lg interface\n\n1.7.55 add: add fx_quote_baidu interface\n\n1.7.54 fix: fix stock_a_lg_indicator interface\n\n1.7.53 add: add stock_buffett_index_lg interface\n\n1.7.52 fix: fix stock_sse_summary interface\n\n1.7.51 fix: fix stock_a_lg_indicator interface\n\n1.7.50 add: add stock_hot_search_baidu interface\n\n1.7.49 add: add futures_news_baidu interface\n\n1.7.48 add: add stock_zh_vote_baidu interface\n\n1.7.47 add: add stock_zh_valuation_baidu interface\n\n1.7.46 fix: fix stock_hk_valuation_baidu interface\n\n1.7.45 add: add stock_hk_valuation_baidu interface\n\n1.7.44 add: add stock_allotment_cninfo interface\n\n1.7.43 fix: fix stock_a_all_pb interface\n\n1.7.42 add: add stock_sgt_reference_exchange_rate_szse interface\n\n1.7.41 add: add stock_sgt_reference_exchange_rate_sse interface\n\n1.7.40 add: add stock_sgt_settlement_exchange_rate_sse interface\n\n1.7.39 add: add stock_sgt_settlement_exchange_rate_szse interface\n\n1.7.38 add: add sw_index_second_info interface\n\n1.7.37 add: add sw_index_first_info interface\n\n1.7.36 fix: fix rename branch master to main\n\n1.7.35 fix: fix stock_market_fund_flow interface\n\n1.7.34 fix: fix bond_cb_jsl interface\n\n1.7.33 fix: fix stock_zh_ah_daily interface\n\n1.7.32 fix: fix stock_a_ttm_lyr interface\n\n1.7.31 fix: fix stock_a_lg_indicator interface\n\n1.7.30 fix: fix bond_cb_index_jsl interface\n\n1.7.29 fix: fix stock_us_daily interface\n\n1.7.28 fix: fix stock_info_sh_name_code interface\n\n1.7.27 fix: fix stock_qsjy_em interface\n\n1.7.26 add: add bond_new_composite_index_cbond interface\n\n1.7.25 add: add news_trade_notify_dividend_baidu interface\n\n1.7.24 fix: fix amac_manager_classify_info interface\n\n1.7.23 fix: fix rename futures_pig_info and futures_pig_rank interface\n\n1.7.22 add: add index_investing_global_area_index_name_url interface\n\n1.7.21 fix: fix futures_hog_info interface\n\n1.7.20 fix: fix crypto_js_spot interface\n\n1.7.19 fix: fix index_value_name_funddb interface\n\n1.7.18 fix: fix stock_lhb_jgmmtj_em interface\n\n1.7.17 fix: fix bond_cb_jsl interface\n\n1.7.16 fix: fix crypto_js_spot interface\n\n1.7.15 fix: fix news_economic_baidu interface\n\n1.7.14 fix: fix covid_19_risk_area interface\n\n1.7.13 fix: fix stock_balance_sheet_by_yearly_em interface\n\n1.7.12 fix: fix stock_repurchase_em interface\n\n1.7.11 fix: fix bond_cash_summary_sse interface\n\n1.7.10 fix: fix option_czce_daily interface\n\n1.7.9 add: add index_market_representation_hist_sw interface\n\n1.7.8 add: add index_style_index_hist_sw interface\n\n1.7.7 add: add index_level_one_hist_sw interface\n\n1.7.6 fix: fix covid_19_risk_area interface\n\n1.7.5 fix: fix fund_fh_em interface\n\n1.7.4 fix: fix stock_analyst_rank_em interface\n\n1.7.3 fix: fix stock_profit_sheet_by_report_em interface\n\n1.7.2 fix: fix futures_egg_price_yearly interface\n\n1.7.1 fix: fix fund_etf_fund_info_em interface\n\n1.6.99 fix: fix macro_china_fx_gold interface\n\n1.6.98 fix: fix macro_china_real_estate interface\n\n1.6.97 fix: fix macro_china_real_estate interface\n\n1.6.96 fix: fix macro_china_bond_public interface\n\n1.6.95 fix: fix energy_oil_detail interface\n\n1.6.94 fix: fix macro_china_hk_market_info interface\n\n1.6.93 fix: fix index_vix interface\n\n1.6.92 fix: fix hurun_rank interface\n\n1.6.91 fix: fix forbes_rank interface\n\n1.6.90 fix: fix macro_china_cpi_yearly interface\n\n1.6.89 fix: fix stock_board_concept_name_ths interface\n\n1.6.88 fix: fix option_cffex_zz1000_spot_sina interface\n\n1.6.87 fix: fix stock_ggcg_em interface\n\n1.6.86 fix: fix stock_gpzy_distribute_statistics_bank_em interface\n\n1.6.85 fix: fix option_finance_board interface\n\n1.6.84 fix: fix stock_zt_pool_em interface\n\n1.6.83 fix: fix option_dce_daily interface\n\n1.6.82 fix: fix option_cffex_hs300_spot_sina interface\n\n1.6.81 fix: fix currency_hist interface\n\n1.6.80 fix: fix index_investing_global interface\n\n1.6.79 fix: fix fund_rating_all interface\n\n1.6.78 fix: fix stock_telegraph_cls interface\n\n1.6.77 fix: fix stock_telegraph_cls interface\n\n1.6.76 add: add pycryptodomex library\n\n1.6.75 add: add option_cffex_zz1000_spot_sina interface\n\n1.6.74 add: add option_cffex_zz1000_list_sina interface\n\n1.6.73 fix: fix macro_china_rmb interface\n\n1.6.72 add: add futures_news_shmet interface\n\n1.6.71 fix: fix bond_zh_hs_cov_pre_min interface\n\n1.6.70 add: add bond_zh_hs_cov_pre_min interface\n\n1.6.69 add: add fund_info_index_em interface\n\n1.6.68 fix: fix stock_zh_a_minute interface\n\n1.6.67 fix: fix stock_zh_a_alerts_cls interface\n\n1.6.66 fix: fix stock_balance_sheet_by_report_em interface\n\n1.6.65 fix: fix bond_cb_redeem_jsl interface\n\n1.6.64 fix: fix index_investing_global interface\n\n1.6.63 fix: fix fund_portfolio_em and futures_roll_yield interface\n\n1.6.62 fix: fix futures_zh_spot interface\n\n1.6.61 fix: fix futures_shfe_warehouse_receipt interface\n\n1.6.60 add: add stock_telegraph_cls interface\n\n1.6.59 add: add stock_industry_change_cninfo interface\n\n1.6.58 fix: fix stock_gdfx_holding_analyse_em interface\n\n1.6.57 fix: fix stock_info_sh_name_code interface\n\n1.6.56 fix: fix index_zh_a_hist interface\n\n1.6.55 fix: fix stock_gdfx_free_holding_analyse_em interface\n\n1.6.54 fix: fix stock_hsgt_hold_stock_em interface\n\n1.6.53 fix: fix fx_spot_quote interface\n\n1.6.52 fix: fix index_zh_a_hist interface\n\n1.6.51 fix: fix stock_analyst_detail_em interface\n\n1.6.50 add: add stock_industry_category_cninfo interface\n\n1.6.49 fix: fix stock_zh_a_alerts_cls interface\n\n1.6.48 fix: fix stock_report_disclosure interface\n\n1.6.47 fix: fix stock_zh_a_minute interface\n\n1.6.46 fix: fix fund_open_fund_info_em interface\n\n1.6.45 fix: fix stock_zh_index_hist_csindex interface\n\n1.6.44 fix: fix futures_inventory_em interface\n\n1.6.43 fix: fix futures_inventory_99 interface\n\n1.6.42 fix: fix stock_balance_sheet_by_yearly_em interface\n\n1.6.41 add: add futures_inventory_99 interface\n\n1.6.40 add: add stock_mda_ym interface\n\n1.6.39 fix: fix futures_symbol_mark interface\n\n1.6.38 add: add stock_zygc_ym interface\n\n1.6.37 fix: remove futures_inventory_99 interface\n\n1.6.36 fix: fix option_finance_board interface\n\n1.6.35 fix: fix stock_zh_index_hist_csindex interface\n\n1.6.34 fix: fix fx_spot_quote interface\n\n1.6.33 fix: fix stock_report_fund_hold_detail interface\n\n1.6.32 fix: fix get_czce_daily interface\n\n1.6.31 fix: fix stock_gdfx_free_holding_detail_em interface\n\n1.6.30 fix: fix stock_info_a_code_name interface\n\n1.6.29 fix: fix stock_board_industry_name_em interface\n\n1.6.28 add: add currency_boc_safe interface\n\n1.6.27 fix: fix currency_boc_sina interface\n\n1.6.26 fix: fix bond_cb_index_jsl interface\n\n1.6.25 fix: fix bond_cb_index_jsl interface\n\n1.6.24 fix: fix bond_cb_index_jsl interface\n\n1.6.23 fix: fix bond_cb_index_jsl interface\n\n1.6.22 add: add stock_kc_a_spot_em interface\n\n1.6.21 fix: fix baidu_search_index interface\n\n1.6.20 fix: fix stock_board_industry_name_em and code_id_map_em interface\n\n1.6.19 fix: fix stock_comment_detail_zlkp_jgcyd_em interface\n\n1.6.18 fix: fix stock_zh_a_spot_em interface\n\n1.6.17 fix: fix stock_new_a_spot_em interface\n\n1.6.16 fix: fix baidu_search_index interface\n\n1.6.15 fix: fix bond_zh_cov_info interface\n\n1.6.14 fix: fix stock_hsgt_board_rank_em interface\n\n1.6.13 add: add stock_new_a_spot_em interface\n\n1.6.12 add: add stock_bj_a_spot_em interface\n\n1.6.11 add: add stock_sz_a_spot_em interface\n\n1.6.10 add: add stock_sh_a_spot_em interface\n\n1.6.9 fix: fix stock_zh_a_spot_em interface\n\n1.6.8 fix: fix futures_zh_spot interface\n\n1.6.7 add: add futures_zh_realtime interface\n\n1.6.6 fix: fix fund_etf_hist_sina interface\n\n1.6.5 fix: fix stock_board_cons_ths interface\n\n1.6.4 fix: fix stock_info_a_code_name interface\n\n1.6.3 fix: fix stock_info_a_code_name and stock_info_sh_delist interface\n\n1.6.2 fix: fix macro_china_cpi interface\n\n1.6.1 fix: fix stock_info_sh_name_code interface\n\n1.5.99 fix: fix stock_zh_a_hist_163 interface\n\n1.5.98 fix: fix news_cctv interface\n\n1.5.97 fix: fix stock_zh_a_hist interface\n\n1.5.96 fix: fix macro_bank_usa_interest_rate interface\n\n1.5.95 fix: fix stock_zh_a_hist_163 interface\n\n1.5.94 add: add bond_cb_redeem_jsl interface\n\n1.5.93 fix: fix stock_zh_a_hist interface\n\n1.5.92 fix: fix rate_interbank interface\n\n1.5.91 add: add bond_cb_index_jsl interface\n\n1.5.90 fix: fix macro_china_bond_public interface\n\n1.5.89 fix: fix stock_info_sh_name_code interface\n\n1.5.88 fix: fix stock_board_concept_name_ths interface\n\n1.5.87 fix: fix stock_tfp_em interface\n\n1.5.86 fix: fix stock_us_fundamental interface\n\n1.5.85 fix: fix stock_zh_a_hist interface\n\n1.5.84 fix: fix stock_three_report_em interface\n\n1.5.83 fix: fix energy_oil_hist, energy_oil_detail interface\n\n1.5.82 add: add option_risk_indicator_sse interface\n\n1.5.81 fix: fix macro_china_gdp_yearly interface\n\n1.5.80 add: add stock_szse_sector_summary interface\n\n1.5.79 add: add stock_szse_area_summary interface\n\n1.5.78 fix: fix stock_szse_summary interface\n\n1.5.77 fix: fix remove numpy dependency\n\n1.5.76 add: add news_report_time_baidu interface\n\n1.5.75 fix: fix stock_financial_analysis_indicator interface\n\n1.5.74 add: add news_trade_notify_suspend_baidu interface\n\n1.5.73 fix: fix stock_notice_report interface\n\n1.5.72 add: add news_economic_baidu interface\n\n1.5.71 fix: fix import path problem\n\n1.5.70 fix: fix stock_zh_a_spot interface\n\n1.5.69 fix: fix setup.py\n\n1.5.68 fix: fix test function\n\n1.5.67 add: add test function\n\n1.5.66 fix: fix crypto_hist interface\n\n1.5.65 fix: fix stock_repurchase_em interface\n\n1.5.64 fix: fix stock_cash_flow_sheet_by_yearly_em interface\n\n1.5.63 fix: fix import path problem\n\n1.5.62 add: add stock_cash_flow_sheet_by_quarterly_em interface\n\n1.5.61 add: add stock_cash_flow_sheet_by_report_em interface\n\n1.5.60 fix: fix sw_index_second_spot interface\n\n1.5.59 add: add stock_profit_sheet_by_yearly_em interface\n\n1.5.58 add: add stock_profit_sheet_by_quarterly_em interface\n\n1.5.57 add: add stock_profit_sheet_by_report_em interface\n\n1.5.56 add: add stock_balance_sheet_by_yearly_em interface\n\n1.5.55 add: add stock_balance_sheet_by_report_em interface\n\n1.5.54 fix: fix stock_lrb_em interface\n\n1.5.53 fix: fix stock_zcfz_em interface\n\n1.5.52 fix: fix stock_ggcg_em interface\n\n1.5.51 fix: fix stock_zh_a_tick_163 interface\n\n1.5.50 fix: fix covid_19_baidu interface\n\n1.5.49 add: add stock_inner_trade_xq interface\n\n1.5.48 fix: fix futures_return_index_nh interface\n\n1.5.47 fix: fix macro_china_lpr interface\n\n1.5.46 fix: fix stock_yzxdr_em interface\n\n1.5.45 add: add stock_hot_deal_xq interface\n\n1.5.44 fix: fix futures_to_spot_czce interface\n\n1.5.43 fix: fix stock_zt_pool_em interface\n\n1.5.42 fix: fix stock_zt_pool_dtgc_em interface\n\n1.5.41 fix: fix stock_margin_underlying_info_szse interface\n\n1.5.40 fix: fix js_news interface\n\n1.5.39 add: add stock_comment_detail_scrd_desire_daily_em interface\n\n1.5.38 add: add stock_comment_detail_scrd_cost_em interface\n\n1.5.37 add: add stock_comment_detail_scrd_desire_em interface\n\n1.5.36 add: add stock_comment_detail_scrd_focus_em interface\n\n1.5.35 add: add stock_comment_detail_zhpj_lspf_em interface\n\n1.5.34 fix: fix stock_gpzy_industry_data_em interface\n\n1.5.33 fix: fix fund_fh_em interface\n\n1.5.32 add: add stock_comment_detail_zlkp_jgcyd_em interface\n\n1.5.31 fix: fix stock_individual_info_em interface\n\n1.5.30 fix: fix hurun_rank interface\n\n1.5.29 fix: fix index_zh_a_hist_min_em interface\n\n1.5.28 fix: fix bond_zh_cov interface\n\n1.5.27 fix: fix stock_comment_em interface\n\n1.5.26 fix: fix stock_comment_em interface\n\n1.5.25 fix: fix stock_analyst_rank_em and stock_analyst_detail_em interface\n\n1.5.24 fix: fix stock_profit_forecast interface\n\n1.5.23 fix: fix stock_board_concept_name_em interface\n\n1.5.22 fix: fix futures_correlation_nh interface\n\n1.5.21 add: add futures_variety_index_nh interface\n\n1.5.20 add: add futures_board_index_nh interface\n\n1.5.19 add: add futures_correlation_nh interface\n\n1.5.18 fix: fix fund_open_fund_rank_em interface\n\n1.5.17 add: add macro_china_bsi_index interface\n\n1.5.16 fix: fix stock_info_sh_delist interface\n\n1.5.15 fix: fix bond_cb_jsl interface\n\n1.5.14 add: add macro_china_bdti_index interface\n\n1.5.13 add: add macro_china_lpi_index interface\n\n1.5.12 fix: fix stock_gpzy_pledge_ratio_detail_em interface\n\n1.5.11 add: add index_bloomberg_billionaires_hist interface\n\n1.5.10 fix: fix stock_gpzy_pledge_ratio_em and stock_gpzy_profile_em interface\n\n1.5.9 fix: fix air_quality_hist interface\n\n1.5.8 add: add macro_china_construction_price_index interface\n\n1.5.7 add: add macro_china_construction_index interface\n\n1.5.6 add: add macro_china_yw_electronic_index interface\n\n1.5.5 add: add macro_global_sox_index interface\n\n1.5.4 add: add macro_china_commodity_price_index interface\n\n1.5.3 add: add macro_china_energy_index interface\n\n1.5.2 add: add macro_china_agricultural_index interface\n\n1.5.1 add: add macro_china_agricultural_product interface\n\n1.4.99 add: add macro_china_vegetable_basket interface\n\n1.4.98 fix: fix stock_board_industry_hist_em interface\n\n1.4.97 fix: fix bond_spot_deal interface\n\n1.4.96 fix: fix stock_sse_deal_daily interface\n\n1.4.95 add: add bond_zh_cov_value_analysis interface\n\n1.4.94 add: add macro_china_mobile_number interface\n\n1.4.93 add: add macro_china_insurance_income interface\n\n1.4.92 add: add stock_lhb_hyyyb_em interface\n\n1.4.91 fix: fix macro_china_new_financial_credit interface\n\n1.4.90 add: add macro_china_bank_financing interface\n\n1.4.89 fix: fix stock_us_hist interface\n\n1.4.88 fix: fix fund_new_found_em interface\n\n1.4.87 add: add fund_portfolio_industry_allocation_em interface\n\n1.4.86 fix: fix rename all interface in fund_aum_em.py\n\n1.4.85 add: add fund_portfolio_bond_hold_em interface\n\n1.4.84 fix: fix fund_portfolio_change_em interface\n\n1.4.83 add: add stock_us_code_table_fu interface\n\n1.4.82 fix: fix stock_a_code_to_symbol interface\n\n1.4.81 add: add fund_portfolio_change_em interface\n\n1.4.80 add: add stock_board_concept_hist_min_em interface\n\n1.4.79 add: add stock_board_industry_hist_min_em interface\n\n1.4.78 add: add remove matplotlib module and support cache\n\n1.4.77 fix: fix stock_hk_ggt_components_em interface\n\n1.4.76 add: add stock_lhb_stock_statistic_em interface\n\n1.4.75 fix: fix stock_lhb_stock_detail_em interface\n\n1.4.74 fix: fix stock_lhb_stock_detail_em interface\n\n1.4.73 add: add stock_lhb_jgmmtj_em interface\n\n1.4.72 add: add stock_lhb_stock_statistic_em interface\n\n1.4.71 add: add stock_lhb_stock_detail_em interface\n\n1.4.70 add: add stock_lhb_detail_em interface\n\n1.4.69 fix: fix crypto_js_spot interface\n\n1.4.68 fix: fix crypto_hist interface\n\n1.4.67 fix: fix crypto_name_url_table interface\n\n1.4.66 fix: fix stock_gpzy_profile_em interface\n\n1.4.65 fix: fix spot_hist_sge interface\n\n1.4.64 fix: fix bond_china_close_return interface\n\n1.4.63 fix: fix macro_china_swap_rate interface\n\n1.4.62 fix: fix option_finance_board interface\n\n1.4.61 fix: fix get_dce_daily interface\n\n1.4.60 fix: fix stock_zh_a_hist_163 interface\n\n1.4.59 add: add stock_zh_a_hist_163 interface\n\n1.4.58 fix: fix stock_zh_kcb_daily interface\n\n1.4.57 fix: fix bond_spot_quote interface\n\n1.4.56 fix: fix index_detail_hist_cni and index_detail_cni interface\n\n1.4.55 fix: fix energy_carbon interface\n\n1.4.54 fix: fix stock_hot_rank_relate_em interface\n\n1.4.53 add: add stock_hot_rank_relate_em interface\n\n1.4.52 add: add stock_hot_rank_latest_em interface\n\n1.4.51 add: add stock_hot_keyword_em interface\n\n1.4.50 add: add stock_hot_rank_detail_realtime_em interface\n\n1.4.49 fix: fix stock_sse_deal_daily interface\n\n1.4.48 fix: fix stock_sse_deal_daily interface\n\n1.4.47 add: add interface change log\n\n1.4.46 fix: fix energy_oil_detail interface\n\n1.4.45 fix: fix air_quality_rank interface\n"
  },
  {
    "path": "docs/conf.py",
    "content": "# Configuration file for the Sphinx documentation builder.\n# sphinx-build -b html . build\n# This file only contains a selection of the most common options. For a full\n# list see the documentation:\n# https://www.sphinx-doc.org/en/master/usage/configuration.html\n\n# -- Path setup --------------------------------------------------------------\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n\nimport ast\nimport re\nfrom datetime import datetime\n\nfrom recommonmark.transform import AutoStructify\n\n\ndef get_version_string():\n    \"\"\"\n    get the version of akshare\n    :return: version number\n    :rtype: str, e.g. '0.6.24'\n    \"\"\"\n    with open(\"../akshare/_version.py\", \"rb\") as _f:\n        version_line = re.search(\n            pattern=r\"__version__\\s+=\\s+(.*)\", string=_f.read().decode(\"utf-8\")\n        ).group(1)\n        return str(ast.literal_eval(version_line))\n\n\nlatex_engine = \"xelatex\"\nlatex_use_xindy = False\nlatex_elements = {\n    \"preamble\": \"\\\\usepackage[UTF8]{ctex}\\n\",\n}\n\nsource_parsers = {\n    \".md\": \"recommonmark.parser.CommonMarkParser\",\n}\n\nsource_suffix = [\".rst\", \".md\"]\n\ngithub_doc_root = \"https://github.com/rtfd/recommonmark/tree/master/doc/\"\n\n# -- Project information -----------------------------------------------------\n\nproject = \"AKShare\"\ncopyright = f\"2019–{datetime.now().year}, AKShare Developers\"\nauthor = \"Albert King\"\nversion = get_version_string()\n\ntemplates_path = [\"_templates\"]\n\n# The full version, including alpha/beta/rc tags\nrelease = get_version_string()\n\n# -- General configuration ---------------------------------------------------\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom\n# ones.\nextensions = [\"recommonmark\", \"sphinx_markdown_tables\", \"sphinx_rtd_theme\"]\n\n# Add any paths that contain templates here, relative to this directory.\n\n\n# The language for content autogenerated by Sphinx. Refer to documentation\n# for a list of supported languages.\n#\n# This is also used if you do content translation via gettext catalogs.\n# Usually you set \"language\" from the command line for these cases.\nlanguage = \"zh_CN\"\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\n# This pattern also affects html_static_path and html_extra_path.\nexclude_patterns = [\"_build\", \"**.ipynb_checkpoints\"]\n\n# -- Options for HTML output -------------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\n#\nhtml_theme = \"sphinx_rtd_theme\"\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\n\n\nmaster_doc = \"index\"\n\n\ndef setup(app):\n    app.add_config_value(\n        \"recommonmark_config\",\n        {\n            \"url_resolver\": lambda url: github_doc_root + url,\n            \"auto_toc_tree_section\": \"Contents\",\n        },\n        True,\n    )\n    app.add_transform(AutoStructify)\n"
  },
  {
    "path": "docs/contributing.md",
    "content": "# [AKShare](https://github.com/akfamily/akshare) 贡献源码\n\n## 贡献指南\n\n### 克隆及提交代码\n\n1. 请从 [akshare-dev 分支](https://github.com/akfamily/akshare/tree/dev) 克隆，dev 分支中包含 AKShare 最新的开发代码\n2. 请提交修改后的代码到 [akshare-dev 分支](https://github.com/akfamily/akshare/tree/dev)\n\n### 代码及接口设计规范\n\n1. 代码需要符合 **PEP 8** 要求，请使用 [Ruff](https://github.com/astral-sh/ruff) 格式化代码\n2. 请使用 [pre-commit](https://pre-commit.com/) 来规范 git 提交记录，可以参考 [AKShare](https://github.com/akfamily/akshare) 的格式\n3. 函数接口的设计 **stock_zh_a_hist_sina** 结构，其中 **stock** 为金融产品，**zh** 为国家或地区，**a** 为市场或品种，**hist** 为 history 的缩写表示历史数据，**sina** 表示数据源为新浪\n4. 接口函数需要增加注释，注释规则请参考 **stock_zh_a_hist_sina** 接口的源码\n5. 需要在接口函数的注释中增加目标网站的地址（不是具体的数据接口地址，而是网页的地址）\n6. 返回数据格式要求：\n   1. 为了兼容 HTTP API 接口，所有返回的数据格式统一为 Pandas 中的 pandas.DataFrame 格式\n\n### 文档撰写规范\n\n1. 在新增或者修改接口后，需要修改相对应的接口文档，保持接口与文档的同步更新；\n2. 具体的接口文档路径（以股票接口的文档为例）为：akshare->docs->data->stock->stock.md，其中 stock 表示股票文件夹，stock.md 为具体的 Markdown 文件，需要在 stock.md 中对相应的接口文档进行修改或新增；\n3. 以股票分时数据接口文档为例：\n   1. 主要包含以下部分内容：\n      1. 接口：填写具体的接口名称\n      2. 目标地址：填写具体数据获取网页的地址（不是数据接口地址）\n      3. 描述：简单描述数据接口获取的数据\n      4. 限量：返回数据的情况\n      5. 输入参数：数据接口函数中需要输入的参数\n      6. 输出参数：返回数据的字段，这里需要填写返回数据的字段和类型\n      7. 接口示例：Python 调用该数据接口的代码\n      8. 数据示例：利用 **接口示例** 代码获取的数据的接口，这里只需要复制前 **5** 行和后 **5** 行数据即刻即可。\n\n   2. 示例如下：\n\n    ```shell\n      ##### 分时数据\n\n      接口: stock_zh_a_minute\n\n      目标地址: https://finance.sina.com.cn/realstock/company/sh600519/nc.shtml\n\n      描述: 新浪财经获取分时数据，目前可以获取 1, 5, 15, 30, 60 分钟的数据频率\n\n      限量: 单次返回指定公司的指定频率的所有历史分时行情数据\n\n      输入参数\n\n      \\```\n      | 名称   | 类型 |  描述|\n      | -------- | ---- |  --- |\n      | symbol | str  | symbol='sh000300'; 同日频率数据接口|\n      | period | str  | period='1'; 获取 1, 5, 15, 30, 60 分钟的数据频率|\n      \\```\n\n      输出参数\n\n      \\```shell\n      | 名称           | 类型        |  描述   |\n      | ------------  | ------      |  -------- |\n      | day           | object   |  -     |\n      | open          | float64      |  -     |\n      | high          | float64      |  -     |\n      | low           | float64      |  -     |\n      | close         | float64      |  -     |\n      | volume        | float64      |  -     |\n      | ma_price5     | float64      |  -     |\n      | ma_volume5    | float64      |  -     |\n      | ma_price10    | float64      |  -     |\n      | ma_volume10   | float64      |  -     |\n      | ma_price30    | float64      |  -     |\n      | ma_volume30   | float64      |  -     |\n      \\```\n\n      接口示例\n\n      \\```python\n      import akshare as ak\n\n      stock_zh_a_minute_df = ak.stock_zh_a_minute(symbol='sz000876', period='1', adjust=\"qfq\")\n      print(stock_zh_a_minute_df)\n      \\```\n\n      数据示例\n\n      \\```\n                             day  open  high   low  close  volume\n       0     2024-04-22 13:53:00  9.30  9.31  9.30   9.30   90000\n       1     2024-04-22 13:54:00  9.30  9.31  9.29   9.30   96100\n       2     2024-04-22 13:55:00  9.30  9.32  9.30   9.32   89200\n       3     2024-04-22 13:56:00  9.32  9.32  9.31   9.31   46300\n       4     2024-04-22 13:57:00  9.31  9.32  9.31   9.32   18000\n       ...                   ...   ...   ...   ...    ...     ...\n       1965  2024-05-07 14:54:00   NaN   NaN   NaN    NaN  129300\n       1966  2024-05-07 14:55:00   NaN   NaN   NaN    NaN  116100\n       1967  2024-05-07 14:56:00   NaN   NaN   NaN    NaN  111300\n       1968  2024-05-07 14:57:00   NaN   NaN   NaN    NaN   74400\n       1969  2024-05-07 15:00:00   NaN   NaN   NaN    NaN  305000\n       [1970 rows x 6 columns]\n      \\```\n    ```\n\n## 声明\n\n1. 所提交的代码如不符合上述规范，则可能会被拒绝合并；\n2. 由于某些原因，您所提交的代码、数据接口和文档会被修改、删除或被第三方使用；\n3. **输出参数**里面的字段类型必须为 Pandas 最新版本的 int64 类型，float64 类型，object 类型等三种类型之一，整数为 int64 类型，浮点数为 float64 类型，日期及字符串为 object 类型。\n"
  },
  {
    "path": "docs/data/article/article.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 波动率数据\n\n### 已实现波动率数据\n\n#### Oxford-Man\n\n接口: article_oman_rv\n\n目标地址: https://realized.oxford-man.ox.ac.uk/data/visualization\n\n描述: 获取 Oxford-Man 已实现波动率数据\n\n限量: 单次返回某个指数具体指标的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                        |\n|--------|-----|-------------------------------------------|\n| symbol | str | symbol=\"FTSE\", 具体指数请查看如下 **已实现波动率指数一览表**  |\n| index  | str | index=\"rk_th2\", 具体指标请查看如下 **已实现波动率指标一览表** |\n\n已实现波动率指数一览表\n\n| Symbol    | Name                                      | Earliest Available | Latest Available  |\n|-----------|-------------------------------------------|--------------------|-------------------|\n| .AEX      | AEX index                                 | January 03, 2000   | November 28, 2019 |\n| .AORD     | All Ordinaries                            | January 04, 2000   | November 28, 2019 |\n| .BFX      | Bell 20 Index                             | January 03, 2000   | November 28, 2019 |\n| .BSESN    | S&P BSE Sensex                            | January 03, 2000   | November 28, 2019 |\n| .BVLG     | PSI All-Share Index                       | October 15, 2012   | November 28, 2019 |\n| .BVSP     | BVSP BOVESPA Index                        | January 03, 2000   | November 28, 2019 |\n| .DJI      | Dow Jones Industrial Average              | January 03, 2000   | November 27, 2019 |\n| .FCHI     | CAC 40                                    | January 03, 2000   | November 28, 2019 |\n| .FTMIB    | FTSE MIB                                  | June 01, 2009      | November 28, 2019 |\n| .FTSE     | FTSE 100                                  | January 04, 2000   | November 28, 2019 |\n| .GDAXI    | DAX                                       | January 03, 2000   | November 28, 2019 |\n| .GSPTSE   | S&P/TSX Composite index                   | May 02, 2002       | November 28, 2019 |\n| .HSI      | HANG SENG Index                           | January 03, 2000   | November 28, 2019 |\n| .IBEX     | IBEX 35 Index                             | January 03, 2000   | November 28, 2019 |\n| .IXIC     | Nasdaq 100                                | January 03, 2000   | November 27, 2019 |\n| .KS11     | Korea Composite Stock Price Index (KOSPI) | January 04, 2000   | November 28, 2019 |\n| .KSE      | Karachi SE 100 Index                      | January 03, 2000   | November 28, 2019 |\n| .MXX      | IPC Mexico                                | January 03, 2000   | November 28, 2019 |\n| .N225     | Nikkei 225                                | February 02, 2000  | November 28, 2019 |\n| .NSEI     | NIFTY 50                                  | January 03, 2000   | November 28, 2019 |\n| .OMXC20   | OMX Copenhagen 20 Index                   | October 03, 2005   | November 28, 2019 |\n| .OMXHPI   | OMX Helsinki All Share Index              | October 03, 2005   | November 28, 2019 |\n| .OMXSPI   | OMX Stockholm All Share Index             | October 03, 2005   | November 28, 2019 |\n| .OSEAX    | Oslo Exchange All-share Index             | September 03, 2001 | November 28, 2019 |\n| .RUT      | Russel 2000                               | January 03, 2000   | November 27, 2019 |\n| .SMSI     | Madrid General Index                      | July 04, 2005      | November 28, 2019 |\n| .SPX      | S&P 500 Index                             | January 03, 2000   | November 27, 2019 |\n| .SSEC     | Shanghai Composite Index                  | January 04, 2000   | November 28, 2019 |\n| .SSMI     | Swiss Stock Market Index                  | January 04, 2000   | November 28, 2019 |\n| .STI      | Straits Times Index                       | January 03, 2000   | November 28, 2019 |\n| .STOXX50E | EURO STOXX 50                             | January 03, 2000   | November 28, 2019 |\n\n已实现波动率指标一览表\n\n| Code          | Description                                   |\n|---------------|-----------------------------------------------|\n| bv            | Bipower Variation (5-min)                     |\n| bv_ss         | Bipower Variation (5-min Sub-sampled)         |\n| close_price   | Closing (Last) Price                          |\n| close_time    | Closing Time                                  |\n| medrv         | Median Realized Variance (5-min)              |\n| nobs          | Number of Observations                        |\n| open_price    | Opening (First) Price                         |\n| open_time     | Opening Time                                  |\n| open_to_close | Open to Close Return                          |\n| rk_parzen     | Realized Kernel Variance (Non-Flat Parzen)    |\n| rk_th2        | Realized Kernel Variance (Tukey-Hanning(2))   |\n| rk_twoscale   | Realized Kernel Variance (Two-Scale/Bartlett) |\n| rsv           | Realized Semi-variance (5-min)                |\n| rsv_ss        | Realized Semi-variance (5-min Sub-sampled)    |\n| rv10          | Realized Variance (10-min)                    |\n| rv10_ss       | Realized Variance (10-min Sub-sampled)        |\n| rv5           | Realized Variance (5-min)                     |\n| rv5_ss        | Realized Variance (5-min Sub-sampled)         |\n\n输出参数\n\nOxford-Man-已实现波动率数据\n\n| 名称    | 类型                | 描述 |\n|-------|-------------------|----|\n| index | datetime.datetime | 日期 |\n| data  | float             | 数据 |\n\n接口示例\n\n```python\nimport akshare as ak\n\narticle_oman_rv_df = ak.article_oman_rv(symbol=\"FTSE\", index=\"rk_th2\")\nprint(article_oman_rv_df)\n```\n\n数据示例\n```\n2000-01-04    22.95\n2000-01-05    19.37\n2000-01-06    18.22\n2000-01-07    19.34\n2000-01-10    15.67\n              ...\n2019-11-04     6.71\n2019-11-05     5.90\n2019-11-06     6.43\n2019-11-07     5.81\n2019-11-08     6.75\n```\n\n#### Risk-Lab\n\n接口: article_rlab_rv\n\n目标地址: https://dachxiu.chicagobooth.edu/\n\n描述: 获取 Risk-Lab 已实现波动率数据\n\n限量: 单次返回某个指数所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                           |\n|--------|-----|----------------------------------------------|\n| symbol | str | symbol=\"39693\", 某个具体指数 help(article_rlab_rv) |\n\n输出参数\n\nRisk-Lab-已实现波动率数据\n\n| 名称    | 类型                | 描述  |\n|-------|-------------------|-----|\n| index | datetime.datetime | 日期  |\n| data  | float             | 数据  |\n\n接口示例\n\n```python\nimport akshare as ak\n\narticle_rlab_rv_df = ak.article_rlab_rv(symbol=\"39693\")\nprint(article_rlab_rv_df)\n```\n\n数据示例\n\n```\n1996-01-02    0.000000\n1996-01-04    0.000000\n1996-01-05    0.000000\n1996-01-09    0.000000\n1996-01-10    0.000000\n                ...\n2019-11-04    0.175107\n2019-11-05    0.185112\n2019-11-06    0.210373\n2019-11-07    0.240808\n2019-11-08    0.199549\n```\n\n## [AKShare](https://github.com/akfamily/akshare) 多因子数据\n\n### Current Research Returns\n\n接口: article_ff_crr\n\n目标地址: https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html\n\n描述: 获取 Current Research Returns 多因子数据; 更多信息请访问目标地址\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称             | 类型     | 描述   |\n|----------------|--------|------|\n| item           | object | -    |\n| September 2019 | object | 动态日期 |\n| Last 3 Months  | object | 动态日期 |\n| Last 12 Months | object | 动态日期 |\n\n接口示例\n\n```python\nimport akshare as ak\n\narticle_ff_crr_df = ak.article_ff_crr()\nprint(article_ff_crr_df)\n```\n\n数据示例\n\n```\n                                           item  ... Last 12  Months\n0                Fama/French 3 Research Factors  ...               -\n1                                         Rm-Rf  ...            8.12\n2                                           SMB  ...           -9.44\n3                                           HML  ...          -14.98\n4          Fama/French 5 Research Factors (2x3)  ...               -\n5                                         Rm-Rf  ...            8.12\n6                                           SMB  ...          -12.25\n7                                           HML  ...          -14.98\n8                                           RMW  ...            8.46\n9                                           CMA  ...          -14.63\n10              Fama/French Research Portfolios  ...               -\n11           Size and Book-to-Market Portfolios  ...               -\n12                                  Small Value  ...           -7.16\n13                                Small Neutral  ...            1.97\n14                                  Big Neutral  ...           -2.47\n15                                 Small Growth  ...           -2.56\n16                                    Big Value  ...            0.51\n17                                   Big Growth  ...           22.70\n18  Size and Operating Profitability Portfolios  ...               -\n19                                 Small Robust  ...            4.19\n20                                Small Neutral  ...            0.17\n21                                   Small Weak  ...           -4.93\n22                                   Big Robust  ...           19.99\n23                                  Big Neutral  ...            5.67\n24                                     Big Weak  ...           12.20\n25               Size and Investment Portfolios  ...               -\n26                           Small Conservative  ...           -6.81\n27                                Small Neutral  ...           -1.21\n28                             Small Aggressive  ...            1.64\n29                             Big Conservative  ...            0.77\n30                                  Big Neutral  ...           14.75\n31                               Big Aggressive  ...           21.59\n[32 rows x 4 columns]\n```\n\n## [AKShare](https://github.com/akfamily/akshare) 政策不确定性数据\n\n### 国家和地区指数\n\n接口: article_epu_index\n\n目标地址: https://www.policyuncertainty.com/index.html\n\n描述: 国家或地区的经济政策不确定性(EPU)数据\n\n限量: 单次返回某个具体国家或地区的所有月度经济政策不确定性数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                    |\n|--------|-----|---------------------------------------|\n| symbol | str | symbol=\"China\"; 按 **国家和地区一览表** 输入相应参数 |\n\n国家和地区一览表\n\n| 英文名词        | 说明              |\n|-------------|-----------------|\n| Global      |                 |\n| Australia   |                 |\n| Canada      |                 |\n| China       |                 |\n| Europe      | 欧洲              |\n| Germany     | 欧洲              |\n| Hong Kong   |                 |\n| Ireland     |                 |\n| Japan       |                 |\n| Mexico      |                 |\n| Russia      |                 |\n| Spain       |                 |\n| UK          |                 |\n| USA         |                 |\n| Brazil      |                 |\n| Chile       |                 |\n| Colombia    | 有两种, 默认第一种(FKT) |\n| France      | 欧洲              |\n| Greece      |                 |\n| India       |                 |\n| Italy       | 欧洲              |\n| South Korea |                 |\n| Netherlands |                 |\n| Singapore   |                 |\n| Sweden      |                 |\n\n输出参数\n\n| 名称 | 类型 | 描述        |\n|----|----|-----------|\n| -  | -  | 每个国家或地区不同 |\n\n接口示例\n\n```python\nimport akshare as ak\n\narticle_epu_index_df = ak.article_epu_index(symbol=\"China\")  # 注意单词第一个字母大写\nprint(article_epu_index_df)\n```\n\n数据示例\n\n```\n     year  month  China_Policy_Index\n0    1995      1          192.911910\n1    1995      2          193.987850\n2    1995      3           88.227035\n3    1995      4          131.034710\n4    1995      5          177.096860\n..    ...    ...                 ...\n342  2023      7          704.566080\n343  2023      8          709.881990\n344  2023      9          819.746150\n345  2023     10          603.739890\n346  2023     11          743.397580\n[347 rows x 3 columns]\n```\n"
  },
  {
    "path": "docs/data/bank/bank.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 银行数据\n\n### 银保监分局本级行政处罚\n\n接口: bank_fjcf_table_detail\n\n目标地址: https://www.cbirc.gov.cn/cn/view/pages/ItemDetail.html?docId=881574&itemId=4115&generaltype=9\n\n描述: 首页-政务信息-行政处罚-银保监分局本级-XXXX行政处罚信息公开表, 是信息公开表不是处罚决定书书\n\n限量: 单次返回银保监分局本级行政处罚中的指定页数的所有表格数据\n\n输入参数\n\n| 名称    | 类型  | 描述                                          |\n|-------|-----|---------------------------------------------|\n| page  | int | page=5; 获取前 5 页数据, 并返回处理好后的数据框              |\n| item  | int | item=\"分局本级\"; choice of {\"机关\", \"本级\", \"分局本级\"} |\n| begin | int | begin=1; 开始页面                               |\n\n输出参数-分局本级\n\n| 名称           | 类型 | 描述 |\n|--------------|----|----|\n| 行政处罚决定书文号    | -  | -  |\n| 姓名           | -  | -  |\n| 单位           | -  | -  |\n| 单位名称         | -  | -  |\n| 主要负责人姓名      | -  | -  |\n| 主要违法违规事实（案由） | -  | -  |\n| 行政处罚依据       | -  | -  |\n| 行政处罚决定       | -  | -  |\n| 作出处罚决定的机关名称  | -  | -  |\n| 作出处罚决定的日期    | -  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbank_fjcf_table_detail_df = ak.bank_fjcf_table_detail(page=5, item=\"分局本级\")\nprint(bank_fjcf_table_detail_df)\n```\n\n数据示例\n\n```\n      行政处罚决定书文号  ...             处罚公布日期\n0    楚金罚决字〔2024〕9号  ...  2024-02-08 18:38:00\n1    楚金罚决字〔2024〕8号  ...  2024-02-08 18:28:00\n2    楚金罚决字〔2024〕7号  ...  2024-02-08 18:18:00\n3    遵金罚决字〔2024〕4号  ...  2024-02-08 17:04:00\n4    遵金罚决字〔2024〕3号  ...  2024-02-08 17:03:00\n..             ...  ...                  ...\n85  吉金监罚决字〔2024〕9号  ...  2024-02-02 12:19:02\n86  吉金监罚决字〔2024〕8号  ...  2024-02-02 12:18:30\n87  吉金监罚决字〔2024〕7号  ...  2024-02-02 12:17:47\n88  吉金监罚决字〔2024〕6号  ...  2024-02-02 12:17:08\n89  吉金监罚决字〔2024〕5号  ...  2024-02-02 11:47:50\n[90 rows x 12 columns]\n```\n"
  },
  {
    "path": "docs/data/bond/bond.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 债券数据\n\n#### 债券查询\n\n接口: bond_info_cm\n\n目标地址: https://www.chinamoney.com.cn/chinese/scsjzqxx/\n\n描述: 中国外汇交易中心暨全国银行间同业拆借中心-数据-债券信息-信息查询\n\n输入参数\n\n| 名称          | 类型  | 描述                                                      |\n|-------------|-----|---------------------------------------------------------|\n| bond_name   | str | bond_name=\"\"; 默认为空                                      |\n| bond_code   | str | bond_code=\"\"; 默认为空                                      |\n| bond_issue  | str | bond_issue=\"\"; 默认为空, 通过 ak.bond_info_cm_query() 查询相关参数  |\n| bond_type   | str | bond_type=\"\"; 默认为空, 通过 ak.bond_info_cm_query() 查询相关参数   |\n| coupon_type | str | coupon_type=\"\"; 默认为空, 通过 ak.bond_info_cm_query() 查询相关参数 |\n| issue_year  | str | issue_year=\"\"; 默认为空                                     |\n| underwriter | str | underwriter=\"\"; 默认为空, 通过 ak.bond_info_cm_query() 查询相关参数 |\n| grade       | str | grade=\"\"; 默认为空                                          |\n\n输出参数\n\n| 名称       | 类型     | 描述  |\n|----------|--------|-----|\n| 债券简称     | object | -   |\n| 债券代码     | object | -   |\n| 发行人/受托机构 | object | -   |\n| 债券类型     | object | -   |\n| 发行日期     | object | -   |\n| 最新债项评级   | object | -   |\n| 查询代码     | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_info_cm_df = ak.bond_info_cm(bond_name=\"\", bond_code=\"\", bond_issue=\"\", bond_type=\"短期融资券\", coupon_type=\"零息式\", issue_year=\"2019\", grade=\"A-1\", underwriter=\"重庆农村商业银行股份有限公司\")\nprint(bond_info_cm_df)\n```\n\n数据示例\n\n```\n          债券简称       债券代码      发行人/受托机构   债券类型        发行日期 最新债项评级        查询代码\n0   19渝机电CP002  041900474  重庆机电控股(集团)公司  短期融资券  2019-12-16    A-1  06006vznk4\n1   19渝机电CP001  041900229  重庆机电控股(集团)公司  短期融资券  2019-06-13    A-1  786875qtsi\n2  19万林投资CP001  041900126  重庆万林投资发展有限公司  短期融资券  2019-03-25    A-1  695327xh9n\n```\n\n#### 债券基础信息\n\n接口: bond_info_detail_cm\n\n目标地址: https://www.chinamoney.com.cn/chinese/zqjc/?bondDefinedCode=egfjh08154\n\n描述: 中国外汇交易中心暨全国银行间同业拆借中心-数据-债券信息-信息查询-债券详情\n\n输入参数\n\n| 名称     | 类型  | 描述                                                 |\n|--------|-----|----------------------------------------------------|\n| symbol | str | symbol=\"19万林投资CP001\"; 通过 ak.bond_info_cm() 查询 债券简称 |\n\n输出参数\n\n| 名称    | 类型     | 描述  |\n|-------|--------|-----|\n| name  | object | -   |\n| value | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_info_detail_cm_df = ak.bond_info_detail_cm(symbol=\"19万林投资CP001\")\nprint(bond_info_detail_cm_df)\n```\n\n数据示例\n\n```\n        name                       value\n0        bondFullName  重庆万林投资发展有限公司2019年度第一期短期融资券\n1     bondDefinedCode                  695327xh9n\n2            bondName                 19万林投资CP001\n3            bondCode                   041900126\n4            isinCode                         ---\n..                ...                         ...\n59        chrgngMthds                         ---\n60             crdtEv                         ---\n61     brchStlmntMthd                         ---\n62  rgstrtnCnfrmtnDay                         ---\n63             inptTp                           0\n[64 rows x 2 columns]\n```\n\n### 债券基础名词\n\n#### 固定收益证券\n\n是指持券人可以在特定的时间内取得固定的收益并预先知道取得收益的数量和时间, 如固定利率债券、优先股股票等.\n\n#### 国债\n\n国债又称国家公债, 是国家以其信用为基础, 按照债券的一般原则, 通过向社会发行债券筹集资金所形成的债权债务关系. 国债是中央政府为筹集财政资金而发行的一种政府债券, 由中央政府向投资者出具的、承诺在一定时期支付利息和到期偿还本金的债权债务凭证, 由于国债的发行主体是国家, 所以它具有最高的信用度, 被公认为是最安全的投资工具.\n\n### 上交所债券\n\n#### 债券现券市场概览\n\n接口: bond_cash_summary_sse\n\n目标地址: https://bond.sse.com.cn/data/statistics/overview/bondow/\n\n描述: 上登债券信息网-市场数据-市场统计-市场概览-债券现券市场概览\n\n限量: 单次返回指定交易日的债券现券市场概览数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date='20200111' |\n\n输出参数\n\n| 名称   | 类型      | 描述       |\n|------|---------|----------|\n| 债券现货 | object  | -        |\n| 托管只数 | int64   | -        |\n| 托管市值 | float64 | 注意单位: 亿元 |\n| 托管面值 | float64 | 注意单位: 亿元 |\n| 数据日期 | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_cash_summary_sse_df = ak.bond_cash_summary_sse(date='20210111')\nprint(bond_cash_summary_sse_df)\n```\n\n数据示例\n\n```\n        债券现货   托管只数       托管市值       托管面值        数据日期\n0         国债    193    6815.47    6758.46  2021-01-11\n1        地方债   5317    6713.69    6709.22  2021-01-11\n2        金融债     19     989.76     970.70  2021-01-11\n3        企业债   2233    7497.15    7433.93  2021-01-11\n4  非公开发行公司债券   4974   43857.61   44191.15  2021-01-11\n5       可交换债     57    1352.85    1280.10  2021-01-11\n6   公开发行公司债券   3393   46382.41   46644.57  2021-01-11\n7     可转换公司债    142    3655.79    3179.81  2021-01-11\n8     资产支持证券   4141   14838.03   14829.47  2021-01-11\n9         合计  20469  132102.75  131997.40  2021-01-11\n```\n\n#### 债券成交概览\n\n接口: bond_deal_summary_sse\n\n目标地址: http://bond.sse.com.cn/data/statistics/overview/turnover/\n\n描述: 上登债券信息网-市场数据-市场统计-市场概览-债券成交概览\n\n限量: 单次返回指定交易日的债券成交概览数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date='20200104' |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 债券类型   | object  | -        |\n| 当日成交笔数 | int64   | -        |\n| 当日成交金额 | float64 | 注意单位: 万元 |\n| 当年成交笔数 | int64   | -        |\n| 当年成交金额 | float64 | 注意单位: 万元 |\n| 数据日期   | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_summary_sse_df = ak.bond_deal_summary_sse(date='20210104')\nprint(bond_summary_sse_df)\n```\n\n数据示例\n\n```\n        债券类型  当日成交笔数 当日成交金额  当年成交笔数  当年成交金额  数据日期\n0      记账式国债    3685   363349.44    3685   363349.44  2021-01-04\n1      地方政府债      11    81284.62      11    81284.62  2021-01-04\n2        金融债     568    11075.26     568    11075.26  2021-01-04\n3        企业债     234   124537.76     234   124537.76  2021-01-04\n4    中小企业私募债     298   802906.69     298   802906.69  2021-01-04\n5    公开发行公司债    1570  1442430.80    1570  1442430.80  2021-01-04\n6   非公开发行公司债      26    66038.67      26    66038.67  2021-01-04\n7        可转债  923863  1566929.29  923863  1566929.29  2021-01-04\n8       可交换债    3962    26873.67    3962    26873.67  2021-01-04\n9        分离债       0        0.00       0        0.00  2021-01-04\n10  企业资产支持证券      44   215197.41      44   215197.41  2021-01-04\n11  信贷资产支持证券       0        0.00       0        0.00  2021-01-04\n12      其他债券       0        0.00       0        0.00  2021-01-04\n13        合计  934261  4700623.60  934261  4700623.60  2021-01-04\n```\n\n### 债券基础数据\n\n#### 银行间市场债券发行基础数据\n\n接口: bond_debt_nafmii\n\n目标地址: http://zhuce.nafmii.org.cn/fans/publicQuery/manager\n\n描述: 中国银行间市场交易商协会-非金融企业债务融资工具注册信息系统\n\n限量: 单次获取指定 page 页面数据的 50 条数据\n\n输入参数\n\n| 名称   | 类型  | 描述                     |\n|------|-----|------------------------|\n| page | str | page=\"1\", 需要获取第 page 页 |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 债券名称    | object  | -       |\n| 品种      | object  | -       |\n| 注册或备案   | object  | -       |\n| 金额      | float64 | 注意单位：亿元 |\n| 注册通知书文号 | object  | -       |\n| 更新日期    | object  | -       |\n| 项目状态    | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_debt_nafmii_df = ak.bond_debt_nafmii(page=\"2\")\nprint(bond_debt_nafmii_df)\n```\n\n数据示例\n\n```\n                                          债券名称        品种  ...        更新日期  项目状态\n0       绍兴市柯桥区开发经营集团有限公司关于2024年度第一期超短期融资券的注册报告   SCP  ...  2024-03-15    20\n1         上海市北高新（集团）有限公司关于2024年度第一期超短期融资券的注册报告   SCP  ...  2024-03-15    40\n2           江苏黄海金融控股集团有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-15    40\n3            成都香城城市发展有限公司关于2024年度第一期短期融资券的注册报告    CP  ...  2024-03-15    20\n4           张家口建设发展集团有限公司关于2024年度第一期短期融资券的注册报告    CP  ...  2024-03-15    20\n5     浙江余姚工业园区开发建设投资有限公司关于2024年度第一期超短期融资券的注册报告   SCP  ...  2024-03-15    20\n6             苏州恒泰控股集团有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-15    40\n7            义乌市国有资本运营有限公司关于2024年度第三期中期票据的注册报告   MTN  ...  2024-03-15    20\n8           内蒙古包钢钢联股份有限公司关于2024年度第一期短期融资券的注册报告    CP  ...  2024-03-15    20\n9       中国蓝星（集团）股份有限公司关于2024-2026年度债务融资工具的注册报告   DFI  ...  2024-03-15    20\n10         溧阳市城市建设发展集团有限公司关于2024年度第二期中期票据的注册报告   MTN  ...  2024-03-15    20\n11      重庆长寿开发投资（集团）有限公司关于2024年度第一期超短期融资券的注册报告   SCP  ...  2024-03-15    20\n12           邯郸市交通投资集团有限公司关于2024年度第二期中期票据的注册报告   MTN  ...  2024-03-15    20\n13              山东出版集团有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-15    20\n14      乌鲁木齐城市建设投资（集团）有限公司关于2024年度第四期中期票据的注册报告   MTN  ...  2024-03-15    20\n15           周口城投发展集团有限公司关于2024年度第一期短期融资券的注册报告    CP  ...  2024-03-15    20\n16        重庆市江津区珞璜开发建设有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-15    40\n17            上海城投控股股份有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-15    20\n18   北京中关村科技创业金融服务集团有限公司关于2024年度第一期超短期融资券的注册报告   SCP  ...  2024-03-15    20\n19          枣庄矿业（集团）有限责任公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-15    20\n20         靖江市北辰城乡投资建设有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-15    40\n21        茅台（上海）融资租赁有限公司关于2024年度第一期超短期融资券的注册报告   SCP  ...  2024-03-15    30\n22     山东寿光金鑫投资发展控股集团有限公司关于2024年度第一期短期融资券的注册报告    CP  ...  2024-03-15    30\n23              横店集团控股有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-15    30\n24  中国公路工程咨询集团有限公司关于2024年度第一期超短期融资券（科创票据）的注册报告   SCP  ...  2024-03-15    30\n25            厦门金圆投资集团有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-15    30\n26       青岛西海岸公用事业集团有限公司关于2024年度第一期超短期融资券的注册报告   SCP  ...  2024-03-15    30\n27            昆明轨道交通集团有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-15    30\n28            横店集团控股有限公司关于2024年度第一期超短期融资券的注册报告   SCP  ...  2024-03-15    30\n29            济南高新控股集团有限公司关于2024年度第二期中期票据的注册报告   MTN  ...  2024-03-15    20\n30           温州市交通运输集团有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-15    20\n31        重庆长寿开发投资（集团）有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-15    40\n32        华能国际电力股份有限公司关于2024-2026年度债务融资工具的注册报告  TDFI  ...  2024-03-15    40\n33           江苏新海连发展集团有限公司关于2024年度第三期中期票据的注册报告   MTN  ...  2024-03-15    20\n34    吉安市井冈山开发区金庐陵经济发展有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-14    20\n35          海安开发区建设投资有限公司关于2024年度第四期短期融资券的注册报告    CP  ...  2024-03-14    20\n36          保利商业保理有限公司关于2024年度第一期邦鑫资产支持票据的注册报告   ABN  ...  2024-03-14    40\n37     湖北省广播电视信息网络股份有限公司关于2024年度第一期超短期融资券的注册报告   SCP  ...  2024-03-14    40\n38       湖北省广播电视信息网络股份有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-14    40\n39            红狮控股集团有限公司关于2024年度第一期超短期融资券的注册报告   SCP  ...  2024-03-14    40\n40            湖南电广传媒股份有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-14    20\n41          广州珠江实业集团有限公司关于2024年度第一期超短期融资券的注册报告   SCP  ...  2024-03-14    20\n42          湖北农谷实业集团有限责任公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-14    20\n43        开封经济技术开发（集团）有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-14    20\n44           福州市金融控股集团有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-14    20\n45          嘉兴湾北城市发展集团有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-14    20\n46       合肥东部新城投资控股集团有限公司关于2024年度第一期短期融资券的注册报告    CP  ...  2024-03-14    20\n47            日照高新发展集团有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-14    20\n48            天津能源投资集团有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-14    20\n49            浙江英特集团股份有限公司关于2024年度第一期中期票据的注册报告   MTN  ...  2024-03-14    20\n[50 rows x 7 columns]\n```\n\n### 中国债券市场行情数据\n\n#### 现券市场做市报价\n\n接口: bond_spot_quote\n\n目标地址: https://www.chinamoney.com.cn/chinese/mkdatabond/\n\n描述: 中国外汇交易中心暨全国银行间同业拆借中心-市场数据-市场行情-债券市场行情-现券市场做市报价\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 报价机构  | object  |         |\n| 债券简称  | object  |         |\n| 买入净价  | float64 | 注意单位: 元 |\n| 卖出净价  | float64 | 注意单位: 元 |\n| 买入收益率 | float64 | 注意单位: % |\n| 卖出收益率 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_spot_quote_df = ak.bond_spot_quote()\nprint(bond_spot_quote_df)\n```\n\n数据示例\n\n```\n     报价机构       债券简称  买入净价 卖出净价  买入收益率 卖出收益率\n0   星展银行(中国)  21进出10  100.34  102.44  3.335  3.0750\n1   星展银行(中国)  20农发08  101.88  102.87  2.882  2.5901\n2   星展银行(中国)  20农发07  100.57  101.26  2.640  2.1401\n3   星展银行(中国)  20农发02   99.79  100.03  2.400  2.1701\n4   星展银行(中国)  20进出13  101.00  101.71  2.641  2.1605\n5   星展银行(中国)  20进出05  100.40  101.02  2.790  2.5700\n6       平安证券  22进出05   98.38   99.40  2.970  2.7409\n7       平安证券  22国开01   99.85   99.95  2.265  2.1401\n8       平安证券  20农发08  101.88  102.90  2.882  2.5820\n9       平安证券  20农发02   99.82  100.00  2.370  2.2000\n10      平安证券  20进出05  100.48  101.02  2.760  2.5700\n11      平安证券  20国开12  101.63  102.27  2.820  2.6200\n12      平安证券  20国开08  100.21  100.85  2.820  2.6150\n13      平安证券  20国开07  100.71  100.95  2.479  2.3074\n14      平安证券  18进出03  102.35  102.52  2.295  2.1000\n```\n\n#### 现券市场成交行情\n\n接口: bond_spot_deal\n\n目标地址: https://www.chinamoney.com.cn/chinese/mkdatabond/\n\n描述: 中国外汇交易中心暨全国银行间同业拆借中心-市场数据-市场行情-债券市场行情-现券市场成交行情\n\n限量: 单次返回所有即期数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 债券简称  | object  | -        |\n| 成交净价  | float64 | 注意单位: 元  |\n| 最新收益率 | float64 | 注意单位: %  |\n| 涨跌    | float64 | 注意单位: BP |\n| 加权收益率 | float64 | 注意单位: %  |\n| 交易量   | float64 | 注意单位: 亿  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_spot_deal_df = ak.bond_spot_deal()\nprint(bond_spot_deal_df)\n```\n\n数据示例\n\n```\n                       债券简称    成交净价   最新收益率     涨跌   加权收益率  交易量\n0                  23附息国债26  103.20  2.3000  -0.80  2.3168  NaN\n1                  23附息国债18  101.31  2.3650  -0.80  2.3733  NaN\n2                    20人民财险  101.15  4.1810  -0.23  4.1810  NaN\n3              23无锡建投MTN003  100.87  2.7369    NaN  2.7369  NaN\n4     22国新控股MTN005(能源保供特别债)  100.88  2.5900    NaN  2.5900  NaN\n                     ...     ...     ...    ...     ...  ...\n1775           22滨江房产MTN001  100.64  3.2700  -0.01  3.2700  NaN\n1776            23建设银行CD059   97.44  1.8492   1.00  1.8492  NaN\n1777            23华夏银行CD085   97.43  1.8505   1.00  1.8505  NaN\n1778            24招商银行CD015   97.84  2.2099    NaN  2.2100  NaN\n1779               24贴现国债13   99.88  1.7497  65.65  1.7497  NaN\n[1780 rows x 6 columns]\n```\n\n#### 国债及其他债券收益率曲线\n\n接口: bond_china_yield\n\n目标地址: https://yield.chinabond.com.cn/cbweb-pbc-web/pbc/historyQuery?startDate=2019-02-07&endDate=2020-02-04&gjqx=0&qxId=ycqx&locale=cn_ZH\n\n描述: 中国债券信息网-国债及其他债券收益率曲线\n\n限量: 单次返回所有指定日期间 start_date 到 end_date 需要小于一年的所有数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                          |\n|------------|-----|-------------------------------------------------------------|\n| start_date | str | start_date=\"20190204\", 指定开始日期; start_date 到 end_date 需要小于一年 |\n| end_date   | str | end_date=\"20200204\", 指定结束日期; start_date 到 end_date 需要小于一年   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 曲线名称 | object  |     |\n| 日期   | object  |     |\n| 3月   | float64 |     |\n| 6月   | float64 |     |\n| 1年   | float64 |     |\n| 3年   | float64 |     |\n| 5年   | float64 |     |\n| 7年   | float64 |     |\n| 10年  | float64 |     |\n| 30年  | float64 |     |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_china_yield_df = ak.bond_china_yield(start_date=\"20210201\", end_date=\"20220201\")\nprint(bond_china_yield_df)\n```\n\n数据示例\n\n```\n                    曲线名称          日期      3月  ...      7年     10年     30年\n0      中债中短期票据收益率曲线(AAA)  2021-02-01  3.2000  ...  3.9929  4.1465     NaN\n1    中债商业银行普通债收益率曲线(AAA)  2021-02-01  3.1085  ...  3.8172  3.9554  4.5813\n2              中债国债收益率曲线  2021-02-01  2.4501  ...  3.1725  3.1712  3.7342\n3              中债国债收益率曲线  2021-02-02  2.4001  ...  3.1829  3.1862  3.7415\n4      中债中短期票据收益率曲线(AAA)  2021-02-02  3.0242  ...  3.9707  4.1243     NaN\n..                   ...         ...     ...  ...     ...     ...     ...\n748  中债商业银行普通债收益率曲线(AAA)  2022-01-29  2.3008  ...  3.3258  3.4677  3.8345\n749            中债国债收益率曲线  2022-01-29  1.7876  ...  2.6521  2.7013  3.2750\n750    中债中短期票据收益率曲线(AAA)  2022-01-30  2.4486  ...  3.4477  3.6091     NaN\n751  中债商业银行普通债收益率曲线(AAA)  2022-01-30  2.2908  ...  3.3122  3.4541  3.8209\n752            中债国债收益率曲线  2022-01-30  1.7756  ...  2.6555  2.6997  3.2718\n[753 rows x 10 columns]\n```\n\n### 沪深债券\n\n#### 实时行情数据\n\n接口: bond_zh_hs_spot\n\n目标地址: https://vip.stock.finance.sina.com.cn/mkt/#hs_z\n\n描述: 新浪财经-债券-沪深债券-实时行情数据\n\n限量: 单次返回所有沪深债券的实时行情数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                |\n|------------|-----|-----------------------------------|\n| start_page | str | start_page=\"1\"; 开始获取的页面，每页 80 条数据 |\n| end_page   | str | end_page=\"10\"; 结束获取的页面，每页 80 条数据  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 代码  | object  | -       |\n| 名称  | object  | -       |\n| 最新价 | float64 | -       |\n| 涨跌额 | float64 | -       |\n| 涨跌幅 | float64 | -       |\n| 买入  | float64 | -       |\n| 卖出  | float64 | -       |\n| 昨收  | float64 | -       |\n| 今开  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 成交量 | int64   | 注意单位: 手 |\n| 成交额 | int64   | 注意单位: 万 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_zh_hs_spot_df = ak.bond_zh_hs_spot(start_page=\"1\", end_page=\"5\")\nprint(bond_zh_hs_spot_df)\n```\n\n数据示例\n\n```\n      代码      名称      最新价   涨跌额  ...   最高       最低    成交量   成交额\n0    sh010107   21国债⑺  100.010  0.00  ...    0.000    0.000      0        0\n1    sh010303   03国债⑶  100.010  0.00  ...    0.000    0.000      0        0\n2    sh010504   05国债⑷  102.396  0.05  ...  102.397  102.395  10390  1063895\n3    sh010512   05国债⑿  100.050  0.00  ...    0.000    0.000      0        0\n4    sh010609   06国债⑼  100.000  0.00  ...    0.000    0.000      0        0\n..        ...     ...      ...   ...  ...      ...      ...    ...      ...\n395  sh020418  21贴债21   99.550  0.00  ...    0.000    0.000      0        0\n396  sh020419  21贴债22   99.560  0.00  ...    0.000    0.000      0        0\n397  sh020420  21贴债23   99.570  0.00  ...    0.000    0.000      0        0\n398  sh020421  21贴债24   99.560  0.00  ...    0.000    0.000      0        0\n399  sh020422  21贴债25   99.030  0.00  ...    0.000    0.000      0        0\n[400 rows x 13 columns]\n```\n\n#### 历史行情数据\n\n接口: bond_zh_hs_daily\n\n目标地址: https://money.finance.sina.com.cn/bond/quotes/sh019315.html\n\n描述: 新浪财经-债券-沪深债券-历史行情数据, 历史数据按日频率更新\n\n限量: 单次返回具体某个沪深转债的所有历史行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"sh010107\" |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| date   | object  | -   |\n| open   | float64 | -   |\n| high   | float64 | -   |\n| low    | float64 | -   |\n| close  | float64 | -   |\n| volume | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_zh_hs_daily_df = ak.bond_zh_hs_daily(symbol=\"sh010107\")\nprint(bond_zh_hs_daily_df)\n```\n\n数据示例\n\n```\n            date     open     high      low    close    volume\n0     2001-08-20  101.255  102.835  101.255  102.695  60765500\n1     2001-08-21  102.743  103.213  102.683  103.133  19927710\n2     2001-08-22  103.332  103.402  103.022  103.222  13132740\n3     2001-08-23  103.260  103.300  103.080  103.110   9544530\n4     2001-08-24  103.158  103.158  102.908  102.958   7068480\n          ...      ...      ...      ...      ...       ...\n4801  2021-07-26  100.030  100.060  100.000  100.010   1757900\n4802  2021-07-27  100.010  100.030  100.000  100.030   1635540\n4803  2021-07-28  100.010  100.030  100.000  100.020   1425370\n4804  2021-07-29  100.000  100.020  100.000  100.010    244680\n4805  2021-07-30  100.000  100.010   99.990  100.010    150850\n[4806 rows x 6 columns]\n```\n\n### 沪深可转债\n\n#### 可转债-详情资料\n\n接口: bond_cb_profile_sina\n\n目标地址: https://money.finance.sina.com.cn/bond/info/sz128039.html\n\n描述: 新浪财经-债券-可转债-详情资料\n\n限量: 单次返回指定 symbol 的可转债-详情资料数据\n\n输入参数\n\n| 名称     | 类型  | 描述                            |\n|--------|-----|-------------------------------|\n| symbol | str | symbol=\"sz128039\"; 带市场标识的转债代码 |\n\n输出参数\n\n| 名称    | 类型     | 描述 |\n|-------|--------|----|\n| item  | object | -  |\n| value | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_cb_profile_sina_df = ak.bond_cb_profile_sina(symbol=\"sz128039\")\nprint(bond_cb_profile_sina_df)\n```\n\n数据示例\n\n```\n        item                                              value\n0       债券名称                          2018年三力士股份有限公司公开发行可转换公司债券\n1       债券简称                                               三力转债\n2       债券代码                                           sz128039\n3       债券类型                                             可转换企业债\n4    债券面值（元）                                                100\n5    债券年限（年）                                                  6\n6    票面利率（%）                                                 --\n7        到期日                                         2024-06-08\n8        兑付日                                         2024-06-08\n9        摘牌日                                                 --\n10      计息方式                                               递进利率\n11      利率说明  本次发行的可转债票面利率第一年0.3%、第二年0.5%、第三年1.0%、第四年1.3%、第五...\n12      付息方式                                              周期性付息\n13      起息日期                                         2018-06-08\n14      止息日期                                         2024-06-07\n15      付息日期                                              06-08\n16     年付息次数                                                  1\n17   发行价格（元）                                                100\n18  发行规模（亿元）                                                6.2\n19      发行日期                                         2018-06-08\n20      上市日期                                         2018-06-29\n21      上市场所                                              深圳交易所\n22      信用等级                                                 A+\n23  内部信用增级方式                                                 --\n24  外部信用增级方式                                                 --\n```\n\n#### 可转债-债券概况\n\n接口: bond_cb_summary_sina\n\n目标地址: https://money.finance.sina.com.cn/bond/quotes/sh155255.html\n\n描述: 新浪财经-债券-可转债-债券概况\n\n限量: 单次返回指定 symbol 的可转债-债券概况数据\n\n输入参数\n\n| 名称     | 类型  | 描述                            |\n|--------|-----|-------------------------------|\n| symbol | str | symbol=\"sh155255\"; 带市场标识的转债代码 |\n\n输出参数\n\n| 名称    | 类型     | 描述 |\n|-------|--------|----|\n| item  | object | -  |\n| value | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_cb_summary_sina_df = ak.bond_cb_summary_sina(symbol=\"sh155255\")\nprint(bond_cb_summary_sina_df)\n```\n\n数据示例\n\n```\n        item       value\n0       债券类型       普通企业债\n1       计息方式        固定利率\n2       付息方式       周期性付息\n3    票面利率（%）        5.50\n4      每年付息日       03-20\n5    发行价格（元）         100\n6   发行规模（亿元）          17\n7    债券面值（元）         100\n8    债券年限（年）           5\n9       到期日期  2024-03-20\n10     全价（元）          --\n11   剩余年限（年）        0.62\n12  到期收益率（%）          --\n13      修正久期          --\n14        凸性          --\n```\n\n#### 实时行情数据\n\n接口: bond_zh_hs_cov_spot\n\n目标地址: https://vip.stock.finance.sina.com.cn/mkt/#hskzz_z\n\n描述: 新浪财经-沪深可转债数据\n\n限量: 单次返回所有沪深可转债的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型  | 描述    |\n|-----|-----|-------|\n| -   | -   | 不逐一列出 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_zh_hs_cov_spot_df = ak.bond_zh_hs_cov_spot()\nprint(bond_zh_hs_cov_spot_df)\n```\n\n数据示例\n\n```\n       symbol  name    trade pricechange  ...   volume     amount     code    ticktime\n0    sh110044  广电转债  164.404      -7.464  ...   463810   78867792  110044  15:00:01\n1    sh110045  海澜转债  135.440      -0.737  ...   814670  110615438  110045  15:00:01\n2    sh110047  山鹰转债  109.574      -0.846  ...   610430   67002925  110047  15:00:01\n3    sh110048  福能转债  161.464       0.083  ...  1146040  187753075  110048  15:00:01\n4    sh110052  贵广转债  121.081      -4.359  ...   466970   58073701  110052  15:00:01\n..        ...   ...      ...         ...  ...      ...        ...     ...       ...\n555  sz128138  侨银转债  117.980      -0.220  ...    84537    9982766  128138  15:00:00\n556  sz128141  旺能转债  114.511      -3.023  ...   328740   38135547  128141  15:00:00\n557  sz128142  新乳转债  108.094      -0.223  ...   106070   11479168  128142  15:00:00\n558  sz128143  锋龙转债  132.097      -7.166  ...  1053140  142958765  128143  15:00:00\n559  sz128144  利民转债  104.313      -1.542  ...   161388   16911258  128144  15:00:00\n[560 rows x 15 columns]\n```\n\n#### 历史行情数据-日频\n\n接口: bond_zh_hs_cov_daily\n\n目标地址: https://biz.finance.sina.com.cn/suggest/lookup_n.php?q=sh110048\n\n描述: 新浪财经-历史行情数据，日频率更新, 新上的标的需要次日更新数据\n\n限量: 单次返回具体某个沪深可转债的所有历史行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"sh113542\" |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| date   | object  | -   |\n| open   | float64 | -   |\n| high   | float64 | -   |\n| low    | float64 | -   |\n| close  | float64 | -   |\n| volume | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_zh_hs_cov_daily_df = ak.bond_zh_hs_cov_daily(symbol=\"sz128039\")\nprint(bond_zh_hs_cov_daily_df)\n```\n\n数据示例\n\n```\n            date     open     high      low    close   volume\n0     2018-06-29   91.470   95.200   89.400   89.500  1456563\n1     2018-07-02   90.100   91.000   88.202   88.279   465913\n2     2018-07-03   88.400   89.400   88.010   89.400   430800\n3     2018-07-04   89.397   89.448   88.515   88.608   215772\n4     2018-07-05   88.580   88.690   88.103   88.200   117494\n          ...      ...      ...      ...      ...      ...\n1370  2024-02-22  108.000  108.555  107.901  108.200   182005\n1371  2024-02-23  108.200  109.296  107.600  107.800   125660\n1372  2024-02-26  107.800  108.254  107.555  108.099   118131\n1373  2024-02-27  107.980  108.222  107.672  107.800    81086\n1374  2024-02-28  107.878  108.106  105.847  105.980   149757\n[1375 rows x 6 columns]\n```\n\n#### 历史行情数据-分时\n\n接口: bond_zh_hs_cov_min\n\n目标地址: https://quote.eastmoney.com/concept/sz128039.html\n\n描述: 东方财富网-可转债-分时行情\n\n限量: 单次返回指定可转债、指定频率、复权调整和时间区间的分时数据, 其中 1 分钟数据只返回近 1 个交易日数据且不复权; 其余 period 只能获取近期的数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                                                  |\n|------------|-----|-----------------------------------------------------------------------------------------------------|\n| symbol     | str | symbol='sz123106'; 转债代码                                                                             |\n| period     | str | period='5'; choice of {'1', '5', '15', '30', '60'}; 其中 1 分钟数据返回近 1 个交易日数据且不复权                       |\n| adjust     | str | adjust=''; choice of {'', 'qfq', 'hfq'}; '': 不复权, 'qfq': 前复权, 'hfq': 后复权, 其中 1 分钟数据返回近 1 个交易日数据且不复权 |\n| start_date | str | start_date=\"1979-09-01 09:32:00\"; 日期时间; 默认返回所有数据                                                    |\n| end_date   | str | end_date=\"2222-01-01 09:32:00\"; 日期时间; 默认返回所有数据                                                      |\n\n输出参数-1分钟数据\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 时间  | object  | -       |\n| 开盘  | float64 | -       |\n| 收盘  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 成交量 | float64 | 注意单位: 手 |\n| 成交额 | float64 | -       |\n| 最新价 | float64 | -       |\n\n接口示例-1分钟数据\n\n```python\nimport akshare as ak\n\nbond_zh_hs_cov_min_df = ak.bond_zh_hs_cov_min(symbol=\"sz123124\", period='1', adjust='', start_date=\"1979-09-01 09:32:00\", end_date=\"2222-01-01 09:32:00\")\nprint(bond_zh_hs_cov_min_df)\n```\n\n数据示例-1分钟数据\n\n```\n            时间           开盘     收盘  ...    成交量   成交额       最新价\n0    2021-11-02 09:30:00  120.000  120.000  ...  195  234000.0  120.0000\n1    2021-11-02 09:31:00  119.980  119.889  ...  390  467090.0  119.8855\n2    2021-11-02 09:32:00  119.889  119.741  ...  115  137730.0  119.8657\n3    2021-11-02 09:33:00  119.900  120.100  ...  542  649973.0  119.9286\n4    2021-11-02 09:34:00  120.100  120.022  ...   83   99593.0  119.9326\n..                   ...      ...      ...  ...  ...       ...       ...\n236  2021-11-02 14:56:00  120.018  120.060  ...  150  180075.0  120.3760\n237  2021-11-02 14:57:00  120.060  120.095  ...  289  346535.0  120.3732\n238  2021-11-02 14:58:00  120.095  120.095  ...    0       0.0  120.3732\n239  2021-11-02 14:59:00  120.095  120.095  ...    0       0.0  120.3732\n240  2021-11-02 15:00:00  120.099  120.099  ...  198  237796.0  120.3719\n```\n\n输出参数-其他\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 时间  | object  | -       |\n| 开盘  | float64 | -       |\n| 收盘  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 涨跌额 | float64 | -       |\n| 成交量 | float64 | 注意单位: 手 |\n| 成交额 | float64 | -       |\n| 振幅  | float64 | 注意单位: % |\n| 换手率 | float64 | 注意单位: % |\n\n接口示例-其他\n\n```python\nimport akshare as ak\n\nbond_zh_hs_cov_min_df = ak.bond_zh_hs_cov_min(symbol=\"sz123124\", period='5', adjust='hfq', start_date=\"2021-09-01 09:32:00\", end_date=\"2021-09-06 09:32:00\")\nprint(bond_zh_hs_cov_min_df)\n```\n\n数据示例-其他\n\n```\n              时间       开盘       收盘  ...         成交额    振幅   换手率\n0     2021-09-10 09:35:00  128.048  130.164  ...  12380872.0  1.78  1.83\n1     2021-09-10 09:40:00  130.306  129.720  ...  11514303.0  1.12  1.70\n2     2021-09-10 09:45:00  129.800  129.781  ...  12926171.0  0.87  1.90\n3     2021-09-10 09:50:00  129.815  129.700  ...   9881294.0  0.53  1.45\n4     2021-09-10 09:55:00  129.682  129.868  ...   7237449.0  0.51  1.07\n                   ...      ...      ...  ...         ...   ...   ...\n1483  2021-11-02 14:40:00  119.979  119.940  ...    462174.0  0.04  0.07\n1484  2021-11-02 14:45:00  119.940  119.960  ...    582866.0  0.05  0.09\n1485  2021-11-02 14:50:00  119.960  120.000  ...    394934.0  0.08  0.06\n1486  2021-11-02 14:55:00  120.002  120.050  ...    634978.0  0.07  0.10\n1487  2021-11-02 15:00:00  120.018  120.099  ...    764406.0  0.10  0.12\n```\n\n#### 历史行情数据-盘前分时\n\n接口: bond_zh_hs_cov_pre_min\n\n目标地址: https://quote.eastmoney.com/concept/sz128039.html\n\n描述: 东方财富网-可转债-分时行情-盘前分时\n\n限量: 单次返回指定可转债在最近一个交易日的盘前分时数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 时间  | object  | -       |\n| 开盘  | float64 | -       |\n| 收盘  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 成交量 | float64 | 注意单位: 手 |\n| 成交额 | float64 | -       |\n| 最新价 | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_zh_hs_cov_pre_min_df = ak.bond_zh_hs_cov_pre_min(symbol=\"sh113570\")\nprint(bond_zh_hs_cov_pre_min_df)\n```\n\n数据示例\n\n```\n                 时间      开盘     收盘  ...  成交量     成交额    最新价\n0    2022-07-27 09:15:00  128.14  128.14  ...    0       0.0  128.1400\n1    2022-07-27 09:16:00  128.14  128.14  ...    0       0.0  127.9800\n2    2022-07-27 09:17:00  128.03  128.03  ...    0       0.0  127.9800\n3    2022-07-27 09:18:00  128.30  128.30  ...    0       0.0  127.9800\n4    2022-07-27 09:19:00  128.30  128.30  ...    0       0.0  127.9800\n..                   ...     ...     ...  ...  ...       ...       ...\n131  2022-07-27 11:26:00  128.89  128.89  ...   37   47688.0  128.4185\n132  2022-07-27 11:27:00  128.83  128.71  ...   27   34765.0  128.4193\n133  2022-07-27 11:28:00  128.71  128.80  ...   21   27043.0  128.4201\n134  2022-07-27 11:29:00  128.80  128.81  ...   85  109487.0  128.4232\n135  2022-07-27 11:30:00  128.81  128.78  ...    7    9016.0  128.4235\n```\n\n#### 可转债数据一览表\n\n接口: bond_zh_cov\n\n目标地址: https://data.eastmoney.com/kzz/default.html\n\n描述: 东方财富网-数据中心-新股数据-可转债数据一览表\n\n限量: 单次返回当前交易时刻的所有可转债数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称          | 类型      | 描述       |\n|-------------|---------|----------|\n| 债券代码        | object  | -        |\n| 债券简称        | object  | -        |\n| 申购日期        | object  | -        |\n| 申购代码        | object  | -        |\n| 申购上限        | float64 | 注意单位: 万元 |\n| 正股代码        | object  | -        |\n| 正股简称        | object  | -        |\n| 正股价         | float64 | -        |\n| 转股价         | float64 | -        |\n| 转股价值        | float64 | -        |\n| 债现价         | float64 | -        |\n| 转股溢价率       | float64 | 注意单位: %  |\n| 原股东配售-股权登记日 | float64 | -        |\n| 原股东配售-每股配售额 | object  | -        |\n| 发行规模        | float64 | 注意单位: 亿元 |\n| 中签号发布日      | object  | -        |\n| 中签率         | float64 | 注意单位: %  |\n| 上市时间        | object  | -        |\n| 信用评级        | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_zh_cov_df = ak.bond_zh_cov()\nprint(bond_zh_cov_df)\n```\n\n数据示例\n\n```\n     债券代码   债券简称   申购日期    申购代码  ...   中签号发布日   中签率  上市时间  信用评级\n0    113682   益丰转债  2024-03-04  754939  ...  2024-03-06  0.010597         NaT    AA\n1    127105   龙星转债  2024-02-01  072442  ...  2024-02-05  0.005491  2024-03-06   AA-\n2    123240   楚天转债  2024-01-31  370358  ...  2024-02-02  0.004307  2024-02-29    AA\n3    127104   姚记转债  2024-01-25  072605  ...  2024-01-29  0.001866  2024-02-26    A+\n4    123239   锋工转债  2024-01-19  370488  ...  2024-01-23  0.000734  2024-02-22    A+\n..      ...    ...         ...     ...  ...         ...       ...         ...   ...\n915  110227   赤化转债  2007-10-10  733227  ...  2007-10-16  0.158854  2007-10-23   AAA\n916  126006  07深高债  2007-10-09  733548  ...  2007-10-15  0.290304  2007-10-30   AAA\n917  110971   恒源转债  2007-09-24  733971  ...  2007-09-28  5.311774  2007-10-12   AAA\n918  110567   山鹰转债  2007-09-05  733567  ...  2007-09-11  0.496391  2007-09-17    AA\n919  110026   中海转债  2007-07-02  733026  ...  2007-07-06  1.333453  2007-07-12   AAA\n[920 rows x 19 columns]\n```\n\n#### 可转债详情\n\n接口: bond_zh_cov_info\n\n目标地址: https://data.eastmoney.com/kzz/detail/123121.html\n\n描述: 东方财富网-数据中心-新股数据-可转债详情\n\n限量: 单次返回指定 symbol 的可转债详情数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                                  |\n|-----------|-----|-------------------------------------------------------------------------------------|\n| symbol    | str | symbol=\"123121\"; 可转债代码                                                              |\n| indicator | str | indicator=\"基本信息\"; choice of {\"基本信息\", \"中签号\", \"筹资用途\", \"重要日期\"}, 其中 \"可转债重要条款\" 在 \"基本信息中\" |\n\n输出参数\n\n| 名称   | 类型     | 描述        |\n|------|--------|-----------|\n| 债券代码 | object | 返回 67 个字段 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_zh_cov_info_df = ak.bond_zh_cov_info(symbol=\"123121\", indicator=\"基本信息\")\nprint(bond_zh_cov_info_df)\n```\n\n数据示例\n\n```\n  SECURITY_CODE   SECUCODE TRADE_MARKET  ... IS_CONVERT_STOCK IS_REDEEM IS_SELLBACK\n0        123121  123121.SZ       CNSESZ  ...                是         是           是\n```\n\n#### 可转债详情-同花顺\n\n接口: bond_zh_cov_info_ths\n\n目标地址: https://data.10jqka.com.cn/ipo/bond/\n\n描述: 同花顺-数据中心-可转债\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 债券代码   | object  | -       |\n| 债券简称   | object  | -       |\n| 申购日期   | object  | -       |\n| 申购代码   | object  | -       |\n| 原股东配售码 | object  | -       |\n| 每股获配额  | float64 | -       |\n| 计划发行量  | float64 | -       |\n| 实际发行量  | float64 | -       |\n| 中签公布日  | object  | -       |\n| 中签号    | object  | -       |\n| 上市日期   | object  | -       |\n| 正股代码   | object  | -       |\n| 正股简称   | object  | -       |\n| 转股价格   | float64 | -       |\n| 到期时间   | object  | -       |\n| 中签率    | object  | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_zh_cov_info_ths_df = ak.bond_zh_cov_info_ths()\nprint(bond_zh_cov_info_ths_df)\n```\n\n数据示例\n\n```\n    债券代码  债券简称   申购日期    申购代码  ...  正股简称   转股价格   到期时间      中签率\n0    123247  万凯转债  2024-08-16  371216  ...  万凯新材   0.00  2030-08-16  0.00000000\n1    123246  远信转债  2024-08-16  371053  ...  远信工业   0.00  2030-08-16  0.00000000\n2    123245  集智转债  2024-08-14  370553  ...  集智股份  23.54  2030-08-14  0.00000000\n3    127106  伟隆转债  2024-08-13  072871  ...  伟隆股份   8.60  2030-08-13  0.00042180\n4    110096  豫光转债  2024-08-12  733531  ...  豫光金铅   6.17  2030-08-12  0.00408851\n..      ...   ...         ...     ...  ...   ...    ...         ...         ...\n844  128015  久其转债  2017-06-08  072279  ...  久其软件   5.00  2023-06-08  2.38141745\n845  127004  模塑转债  2017-06-02  070700  ...  模塑科技   7.24  2023-06-02  0.50864100\n846  128014  永东转债  2017-04-17  072753  ...  永东股份   9.28  2023-04-17  1.32286600\n847  113012  骆驼转债  2017-03-24  783311  ...  骆驼股份   9.86  2023-03-24  0.15814823\n848  113011  光大转债  2017-03-17  783818  ...  光大银行   3.35  2023-03-17  0.49992510\n[849 rows x 16 columns]\n```\n\n#### 可转债比价表\n\n接口: bond_cov_comparison\n\n目标地址: https://quote.eastmoney.com/center/fullscreenlist.html#convertible_comparison\n\n描述: 东方财富网-行情中心-债券市场-可转债比价表\n\n限量: 单次返回当前交易时刻的所有可转债比价数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 序号    | int32   | -       |\n| 转债代码  | object  | -       |\n| 转债名称  | object  | -       |\n| 转债最新价 | object  | -       |\n| 转债涨跌幅 | object  | 注意单位: % |\n| 正股代码  | object  | -       |\n| 正股名称  | object  | -       |\n| 正股最新价 | object  | -       |\n| 正股涨跌幅 | object  | 注意单位: % |\n| 转股价   | object  | -       |\n| 转股价值  | object  | -       |\n| 转股溢价率 | object  | 注意单位: % |\n| 纯债溢价率 | object  | 注意单位: % |\n| 回售触发价 | object  | -       |\n| 强赎触发价 | object  | -       |\n| 到期赎回价 | object  | -       |\n| 纯债价值  | float64 | -       |\n| 开始转股日 | object  | -       |\n| 上市日期  | object  | -       |\n| 申购日期  | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_cov_comparison_df = ak.bond_cov_comparison()\nprint(bond_cov_comparison_df)\n```\n\n数据示例\n\n```\n      序号 转债代码  转债名称  转债最新价  ... 纯债价值   开始转股日  上市日期   申购日期\n0      1  127105   龙星转债        -  ...   87.5843  20240807  20240306  20240201\n1      2  123240   楚天转债        -  ...   95.2117  20240806  20240229  20240131\n2      3  127104   姚记转债  145.688  ...   78.7398  20240731  20240226  20240125\n3      4  123239   锋工转债   120.99  ...   77.9967  20240725  20240222  20240119\n4      5  123238  卡倍转02  120.322  ...   78.1354  20240717  20240201  20240111\n..   ...     ...    ...      ...  ...       ...       ...       ...       ...\n545  546  127006   敖东转债  105.995  ...  104.9099  20180919  20180511  20180313\n546  547  127005   长证转债   104.89  ...  104.9193  20180917  20180411  20180312\n547  548  128036   金农转债  105.732  ...  105.6951  20180917  20180402  20180309\n548  549  113505   杭电转债   107.85  ...  107.9525  20180912  20180327  20180306\n549  550  113504   艾华转债  105.924  ...  105.9800  20180910  20180323  20180302\n[550 rows x 20 columns]\n```\n\n#### 可转债价值分析\n\n接口: bond_zh_cov_value_analysis\n\n目标地址: https://data.eastmoney.com/kzz/detail/113527.html\n\n描述: 东方财富网-行情中心-新股数据-可转债数据-可转债价值分析\n\n限量: 单次返回所有可转债价值分析数据\n\n输入参数\n\n| 名称     | 类型  | 描述                     |\n|--------|-----|------------------------|\n| symbol | str | symbol=\"113527\"; 可转债代码 |\n\n输出参数\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 日期    | object  | -       |\n| 收盘价   | float64 | 注意单位: 元 |\n| 纯债价值  | float64 | 注意单位: 元 |\n| 转股价值  | float64 | 注意单位: 元 |\n| 纯债溢价率 | float64 | 注意单位: % |\n| 转股溢价率 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_zh_cov_value_analysis_df = ak.bond_zh_cov_value_analysis(symbol=\"113527\")\nprint(bond_zh_cov_value_analysis_df)\n```\n\n数据示例\n\n```\n        日期      收盘价      纯债价值      转股价值    纯债溢价率    转股溢价率\n0     2019-01-24      NaN   90.156612   98.195187  10.918098   1.837985\n1     2019-01-25      NaN   90.015417   98.729947  11.092081   1.286391\n2     2019-01-28      NaN   90.070170   97.593583  11.024549   2.465753\n3     2019-01-29      NaN   90.075261   94.585561  11.018274   5.724382\n4     2019-01-30      NaN   89.976132   94.184492  11.140586   6.174592\n          ...      ...         ...         ...        ...        ...\n1229  2024-02-22  122.183  112.436703   98.963731   8.668252  23.462403\n1230  2024-02-23  121.745  112.471066   99.274611   8.245618  22.634577\n1231  2024-02-26  122.580  112.497496  102.383420   8.962425  19.726417\n1232  2024-02-27  122.030  112.525381  103.212435   8.446645  18.231878\n1233  2024-02-28  116.601  112.526608   92.953368   3.620825  25.440318\n[1234 rows x 6 columns]\n```\n\n#### 可转债溢价率分析\n\n接口: bond_zh_cov_value_analysis\n\n目标地址: https://data.eastmoney.com/kzz/detail/113527.html\n\n描述: 东方财富网-行情中心-新股数据-可转债数据-可转债溢价率分析\n\n限量: 单次返回所有可转债溢价率分析数据；此接口同 bond_zh_cov_value_analysis\n\n输入参数\n\n| 名称     | 类型  | 描述                     |\n|--------|-----|------------------------|\n| symbol | str | symbol=\"113527\"; 可转债代码 |\n\n输出参数\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 日期    | object  | -       |\n| 收盘价   | float64 | 注意单位: 元 |\n| 纯债价值  | float64 | 注意单位: 元 |\n| 转股价值  | float64 | 注意单位: 元 |\n| 纯债溢价率 | float64 | 注意单位: % |\n| 转股溢价率 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_zh_cov_value_analysis_df = ak.bond_zh_cov_value_analysis(symbol=\"113527\")\nprint(bond_zh_cov_value_analysis_df)\n```\n\n数据示例\n\n```\n      日期     收盘价      纯债价值      转股价值    纯债溢价率    转股溢价率\n0    2019-01-24     NaN   90.186522   98.195187  10.881313   1.837985\n1    2019-01-25     NaN   90.045626   98.729947  11.054811   1.286391\n2    2019-01-28     NaN   90.100390   97.593583  10.987310   2.465753\n3    2019-01-29     NaN   90.105909   94.585561  10.980512   5.724382\n4    2019-01-30     NaN   90.006260   94.184492  11.103384   6.174592\n..          ...     ...         ...         ...        ...        ...\n766  2022-03-24  123.46  107.178436  102.871795  15.191082  20.013460\n767  2022-03-25  122.83  107.241827  103.076923  14.535535  19.163433\n768  2022-03-28  123.37  107.300045  102.564103  14.976652  20.285750\n769  2022-03-29  122.37  107.319545  101.025641  14.023964  21.127665\n770  2022-03-30  122.75  107.335419  102.358974  14.361132  19.921092\n```\n\n### 质押式回购\n\n#### 上证质押式回购\n\n接口: bond_sh_buy_back_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#bond_sh_buyback\n\n描述: 东方财富网-行情中心-债券市场-上证质押式回购\n\n限量: 单次返回所有行情数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 序号  | int64   | -  |\n| 代码  | object  | -  |\n| 名称  | object  | -  |\n| 最新价 | float64 | -  |\n| 涨跌额 | float64 | -  |\n| 涨跌幅 | float64 | -  |\n| 今开  | float64 | -  |\n| 最高  | float64 | -  |\n| 最低  | float64 | -  |\n| 昨收  | float64 | -  |\n| 成交量 | float64 | -  |\n| 成交额 | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_sh_buy_back_em_df = ak.bond_sh_buy_back_em()\nprint(bond_sh_buy_back_em_df)\n```\n\n数据示例\n\n```\n   序号 代码    名称    最新价  ...  最低    昨收    成交量          成交额\n0   1  204001  GC001  1.600  ...  1.200  1.440  1820652598  1.820653e+12\n1   2  204007  GC007  1.735  ...  1.600  1.715   189609010  1.896090e+11\n2   3  204014  GC014  1.745  ...  1.600  1.750    26214422  2.621442e+10\n3   4  204004  GC004  1.560  ...  1.200  1.475    18866666  1.886667e+10\n4   5  204003  GC003  1.565  ...  1.250  1.485    11683291  1.168329e+10\n5   6  204028  GC028  1.795  ...  1.630  1.810    10913644  1.091364e+10\n6   7  204002  GC002  1.580  ...  1.200  1.470    10655418  1.065542e+10\n7   8  204091  GC091  1.795  ...  1.655  1.795      751463  7.514630e+08\n8   9  204182  GC182  1.755  ...  1.600  1.800       84107  8.410700e+07\n[9 rows x 12 columns]\n```\n\n#### 深证质押式回购\n\n接口: bond_sz_buy_back_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#bond_sz_buyback\n\n描述: 东方财富网-行情中心-债券市场-深证质押式回购\n\n限量: 单次返回所有行情数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 序号  | int64   | -  |\n| 代码  | object  | -  |\n| 名称  | object  | -  |\n| 最新价 | float64 | -  |\n| 涨跌额 | float64 | -  |\n| 涨跌幅 | float64 | -  |\n| 今开  | float64 | -  |\n| 最高  | float64 | -  |\n| 最低  | float64 | -  |\n| 昨收  | float64 | -  |\n| 成交量 | float64 | -  |\n| 成交额 | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_sz_buy_back_em_df = ak.bond_sz_buy_back_em()\nprint(bond_sz_buy_back_em_df)\n```\n\n数据示例\n\n```\n   序号  代码    名称   最新价  ...    最低   昨收     成交量          成交额\n0   1  131810  Ｒ-001  1.555  ...  1.305  1.410  213447602  2.134476e+11\n1   2  131801  Ｒ-007  1.735  ...  1.405  1.715   19034425  1.903442e+10\n2   3  131800  Ｒ-003  1.490  ...  1.015  1.430    3258575  3.258575e+09\n3   4  131809  Ｒ-004  1.500  ...  0.110  1.465    2571117  2.571117e+09\n4   5  131811  Ｒ-002  1.525  ...  1.200  1.455    1620576  1.620576e+09\n5   6  131802  Ｒ-014  1.750  ...  0.010  1.785    1312069  1.312069e+09\n6   7  131803  Ｒ-028  1.740  ...  1.600  1.790     986564  9.865640e+08\n7   8  131805  Ｒ-091  1.680  ...  1.000  1.815      20476  2.047600e+07\n8   9  131806  Ｒ-182  1.660  ...  1.600  1.730      14124  1.412400e+07\n[9 rows x 12 columns]\n```\n\n#### 质押式回购历史数据\n\n接口: bond_buy_back_hist_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#bond_sh_buyback\n\n描述: 东方财富网-行情中心-债券市场-质押式回购-历史数据\n\n限量: 单次返回所有历史行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                       |\n|--------|-----|--------------------------|\n| symbol | str | symbol=\"204001\"; 质押式回购代码 |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 日期  | int64   | -  |\n| 开盘  | float64 | -  |\n| 收盘  | float64 | -  |\n| 最高  | float64 | -  |\n| 最低  | float64 | -  |\n| 成交量 | float64 | -  |\n| 成交额 | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_buy_back_hist_em_df = ak.bond_buy_back_hist_em(symbol=\"204001\")\nprint(bond_buy_back_hist_em_df)\n```\n\n数据示例\n\n```\n           日期    开盘  收盘    最高    最低        成交量     成交额\n0     2006-05-08  1.50  1.500  1.500  1.50         100  1.000000e+05\n1     2006-05-16  1.65  1.650  1.650  1.65       10000  1.000000e+07\n2     2006-05-22  1.62  1.620  1.620  1.62         500  5.000000e+05\n3     2006-06-01  3.06  3.060  3.060  3.06       50000  5.000000e+07\n4     2006-06-12  1.62  1.620  1.620  1.62         400  4.000000e+05\n...          ...   ...    ...    ...   ...         ...           ...\n4565  2025-03-28  2.25  3.595  5.100  2.22  1777635143  1.777635e+12\n4566  2025-03-31  2.90  2.780  3.900  1.30  1900163681  1.900164e+12\n4567  2025-04-01  2.11  1.745  2.130  1.65  1848921966  1.848922e+12\n4568  2025-04-02  1.86  1.440  1.955  1.20  1797375867  1.797376e+12\n4569  2025-04-03  1.80  1.600  1.815  1.20  1820652598  1.820653e+12\n[4570 rows x 7 columns]\n```\n\n### 可转债实时数据-集思录\n\n接口: bond_cb_jsl\n\n目标地址: https://www.jisilu.cn/data/cbnew/#cb\n\n描述: 集思录可转债实时数据，包含行情数据（涨跌幅，成交量和换手率等）及可转债基本信息（转股价，溢价率和到期收益率等）\n\n限量: 单次返回当前交易时刻的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                 |\n|--------|-----|----------------------------------------------------|\n| cookie | str | cookie=''; 此处输入您的集思录 cookie 就可以获取完整数据，否则只能返回前 30 条 |\n\n1. 需要查看的链接为：https://app.jisilu.cn/data/cbnew/\n2. 需要复制的 Cookie 为：![](https://pic2.zhimg.com/80/v2-c66f56a334e2c5642a9c8e2975b2f871_1440w.webp)\n3. 参考文章：[如何拿到集思录的可转债实时数据](https://zhuanlan.zhihu.com/p/607755294)\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 代码     | object  | -        |\n| 转债名称   | object  | -        |\n| 现价     | float64 | -        |\n| 涨跌幅    | float64 | 注意单位: %  |\n| 正股代码   | object  | -        |\n| 正股名称   | object  | -        |\n| 正股价    | float64 | -        |\n| 正股涨跌   | float64 | 注意单位: %  |\n| 正股PB   | float64 | -        |\n| 转股价    | float64 | -        |\n| 转股价值   | float64 | -        |\n| 转股溢价率  | float64 | 注意单位: %  |\n| 债券评级   | object  | -        |\n| 回售触发价  | float64 | -        |\n| 强赎触发价  | float64 | -        |\n| 转债占比   | float64 | 注意单位: %  |\n| 到期时间   | object  | -        |\n| 剩余年限   | float64 | -        |\n| 剩余规模   | float64 | 注意单位: 亿元 |\n| 成交额    | float64 | 注意单位: 万元 |\n| 换手率    | float64 | 注意单位: %  |\n| 到期税前收益 | float64 | 注意单位: %  |\n| 双低     | float64 | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_cb_jsl_df = ak.bond_cb_jsl(cookie=\"您的集思录 cookie\")\nprint(bond_cb_jsl_df)\n```\n\n数据示例\n\n```\n    代码   转债名称      现价    涨跌幅  ...    成交额    换手率  到期税前收益  双低\n0   404004   汇车退债   41.318 -18.13  ...     985.32     1.02  124.58   23.96\n1   123174   精锻转债  171.157   9.82  ...  619050.35   571.01   -9.27  167.83\n2   127094   红墙转债  169.460   0.87  ...  694959.33  1337.11   -7.53  168.43\n3   123243   严牌转债  130.278  -0.09  ...    9868.03    18.47   -1.79  129.40\n4   113690  豪24转债  250.879   4.94  ...  205346.07   197.79  -13.14  250.20\n5   123078   Z凯转债  123.999  -1.98  ...   78852.22  1028.44     NaN  123.38\n6   123249   英搏转债  181.826  -1.82  ...   50419.49    36.36   -8.19  181.23\n7   113637   华翔转债  155.824   9.49  ...  332671.71   786.13  -10.01  155.35\n8   123213   天源转债  235.149   0.32  ...   21350.97    18.73  -15.55  234.73\n9   127055   精装转债  163.000   2.71  ...   35810.85    78.76  -11.02  162.62\n10  128133   奇正转债  131.500   1.53  ...   10088.62     9.87  -10.26  131.30\n11  113050   南银转债  129.367  -0.13  ...   15545.42     1.32   -7.67  129.31\n12  110079   杭银转债  134.733  -0.23  ...   41122.60     5.79  -10.46  134.68\n13  127053   豪美转债  206.500   4.67  ...  124653.85   210.95  -17.97  206.67\n14  113065   齐鲁转债  127.507  -0.11  ...   16181.16     1.92   -3.18  127.72\n15  128144   利民转债  172.187   1.58  ...   71165.54    93.54  -21.66  172.73\n16  127076   中宠转2  232.000   2.43  ...  202273.42   152.24  -18.48  232.56\n17  118023   广大转债  128.185   0.89  ...   13487.13     6.83   -2.12  129.06\n18  111011   冠盛转债  229.721   1.93  ...   75634.98   115.93  -16.71  230.61\n19  118004   博瑞转债  142.506  -0.45  ...   15675.52    23.43   -6.72  143.42\n20  127081   中旗转债  351.000   3.85  ...  799563.46   687.46  -25.67  351.93\n21  123186   志特转债  158.000  -4.24  ...   32129.43    47.22   -6.95  159.07\n22  127043   川恒转债  137.600   3.39  ...   31220.26    21.94   -6.40  138.91\n23  123089   九洲转2  144.450  -1.40  ...   55067.00   189.12  -12.25  145.79\n24  123235   亿田转债  187.132  -0.46  ...   18737.02    20.04   -9.35  188.72\n25  123204   金丹转债  132.370   0.97  ...    8120.82    11.76   -2.43  134.06\n26  123209   聚隆转债  153.098   2.74  ...   39885.48   144.38   -6.04  154.90\n27  123245   集智转债  235.000   4.65  ...   91552.39   256.32  -12.07  237.05\n28  113561   正裕转债  139.872   1.99  ...    4939.26    25.79  -31.90  142.01\n29  113030   东风转债  133.583  -0.05  ...    4672.41    17.79  -26.68  135.83\n[30 rows x 23 columns]\n```\n\n### 可转债强赎\n\n接口: bond_cb_redeem_jsl\n\n目标地址: https://www.jisilu.cn/data/cbnew/#redeem\n\n描述: 集思录可转债-强赎\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 代码    | object  | -       |\n| 名称    | object  | -       |\n| 现价    | float64 | -       |\n| 正股代码  | object  | -       |\n| 正股名称  | object  | -       |\n| 规模    | float64 | 注意单位: 亿 |\n| 剩余规模  | float64 | -       |\n| 转股起始日 | object  | -       |\n| 最后交易日 | object  | -       |\n| 到期日   | object  | -       |\n| 转股价   | float64 | -       |\n| 强赎触发比 | int64   | 注意单位: % |\n| 强赎触发价 | float64 | -       |\n| 正股价   | float64 | -       |\n| 强赎价   | float64 | -       |\n| 强赎天计数 | object  | -       |\n| 强赎条款  | object  | -       |\n| 强赎状态  | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_cb_redeem_jsl_df = ak.bond_cb_redeem_jsl()\nprint(bond_cb_redeem_jsl_df)\n```\n\n数据示例\n\n```\n         代码    名称       现价  ...       强赎天计数                           强赎条款   强赎状态\n0    123084  高澜转债  144.600  ...  25/15 | 30  如果公司股票在任意连续三十个交易日中至少十五个交易日...  已公告强赎\n1    123070  鹏辉转债  369.543  ...  30/20 | 30  如果公司A股股票连续30个交易日中至少有20个交易日...  已公告强赎\n2    113599  嘉友转债  139.980  ...  22/15 | 30  如果公司股票连续三十个交易日中至少有十五个交易日的收...  已公告强赎\n3    113630  赛伍转债  131.550  ...  20/15 | 30  如果公司 A 股股票连续 30 个交易日中至少有15...  已公告强赎\n4    123073  同和转债  148.460  ...  25/20 | 30  如果公司A股股票连续三十个交易日中至少有二十个交易日...  已公告强赎\n..      ...   ...      ...  ...         ...                            ...    ...\n439  113639  华正转债  113.270  ...   0/15 | 30  如果公司股票在任何连续三十个交易日中至少十五个交易日...\n440  123136  城市转债  244.200  ...   0/15 | 30  如果公司股票在任意连续三十个交易日中至少有十五个交易...\n441  123137  锦浪转债  166.490  ...   0/15 | 30  如果公司股票在任意连续三十个交易日中至少十五个交易日...\n442  123138  丝路转债  144.700  ...   0/15 | 30  如果公司股票在任何连续三十个交易日中至少十五个交易日...\n443  113646  永吉转债  253.950  ...   0/15 | 30  公司股票在任何连续三十个交易日中至少有十五个交易日的...\n```\n\n### 集思录可转债等权指数\n\n接口: bond_cb_index_jsl\n\n目标地址: https://www.jisilu.cn/web/data/cb/index\n\n描述: 可转债-集思录可转债等权指数\n\n限量: 单次返回所有历史数据数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称                  | 类型      | 描述        |\n|---------------------|---------|-----------|\n| price_dt            | object  | 日期        |\n| price               | float64 | 指数        |\n| amount              | float64 | 剩余规模(亿元)  |\n| volume              | float64 | 成交额(亿元)   |\n| count               | int64   | 数量        |\n| increase_val        | float64 | 涨跌        |\n| increase_rt         | float64 | 涨幅        |\n| avg_price           | float64 | 平均价格(元)   |\n| mid_price           | float64 | 中位数价格(元)  |\n| mid_convert_value   | float64 | 中位数转股价值   |\n| avg_dblow           | float64 | 平均双底      |\n| avg_premium_rt      | float64 | 平均溢价率     |\n| mid_premium_rt      | float64 | 中位数溢价率    |\n| avg_ytm_rt          | float64 | 平均收益率     |\n| turnover_rt         | float64 | 换手率       |\n| price_90            | int64   | >90       |\n| price_90_100        | int64   | 90~100    |\n| price_100_110       | int64   | 100~110   |\n| price_110_120       | int64   | 110~120   |\n| price_120_130       | int64   | 120~130   |\n| price_130           | int64   | >130      |\n| increase_rt_90      | float64 | >90涨幅     |\n| increase_rt_90_100  | float64 | 90~100涨幅  |\n| increase_rt_100_110 | float64 | 100~110涨幅 |\n| increase_rt_110_120 | float64 | 110~120涨幅 |\n| increase_rt_120_130 | float64 | 120~130涨幅 |\n| increase_rt_130     | float64 | >130涨幅    |\n| idx_price           | float64 | 沪深300指数   |\n| idx_increase_rt     | float64 | 沪深300指数涨幅 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_cb_index_jsl_df = ak.bond_cb_index_jsl()\nprint(bond_cb_index_jsl_df)\n```\n\n数据示例\n\n```\n        price_dt     price  ...  idx_price  idx_increase_rt\n0     2017-12-29  1000.000  ...   4030.850             0.30\n1     2018-01-02  1008.831  ...   4087.400             1.40\n2     2018-01-03  1018.808  ...   4111.390             0.59\n3     2018-01-04  1024.344  ...   4128.810             0.42\n4     2018-01-05  1034.655  ...   4138.750             0.24\n...          ...       ...  ...        ...              ...\n1146  2022-09-19  1997.231  ...   3928.000            -0.12\n1147  2022-09-20  2012.310  ...   3932.836             0.12\n1148  2022-09-21  2019.373  ...   3903.735            -0.74\n1149  2022-09-22  2017.313  ...   3869.344            -0.88\n1150  2022-09-23  1998.653  ...   3856.021            -0.34\n```\n\n### 可转债转股价格调整记录-集思录\n\n接口: bond_cb_adj_logs_jsl\n\n目标地址: https://app.jisilu.cn/data/cbnew/#cb; 点击带红色星号的转股价会弹出转股价调整记录\n\n描述: 集思录-单个可转债的转股价格-调整记录\n\n限量: 返回当前时刻该可转债的所有转股价格调整记录\n\n输入参数\n\n| 名称     | 类型  | 描述                     |\n|--------|-----|------------------------|\n| symbol | str | symbol=\"128013\"; 可转债代码 |\n\n输出参数\n\n| 名称       | 类型      | 描述  |\n|----------|---------|-----|\n| 转债名称     | object  | -   |\n| 股东大会日    | object  | -   |\n| 下修前转股价   | float64 | -   |\n| 下修后转股价   | float64 | -   |\n| 新转股价生效日期 | object  | -   |\n| 下修底价     | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_convert_adj_logs_jsl_df = ak.bond_cb_adj_logs_jsl(symbol=\"128013\")\nprint(bond_convert_adj_logs_jsl_df)\n```\n\n数据示例\n\n```\n   转债名称  股东大会日  下修前转股价 下修后转股价 新转股价生效日期 下修底价\n0  洪涛转债  2021-02-23    3.10    2.32  2021-02-24  2.32\n1  洪涛转债  2020-06-29    8.00    3.12  2020-06-30  3.12\n2  洪涛转债  2019-11-20    9.97    8.00  2019-11-21  3.10\n```\n\n### 收盘收益率曲线历史数据\n\n接口: bond_china_close_return\n\n目标地址: https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1\n\n描述: 收盘收益率曲线历史数据, 该接口只能获取近 3 个月的数据，且每次获取的数据不超过 1 个月\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                       |\n|------------|-----|--------------------------------------------------------------------------|\n| symbol     | str | symbol=\"政策性金融债(进出口行)\"; 通过网页查询或调用 **ak.bond_china_close_return_map()** 获取 |\n| period     | str | period: str = \"1\"; 期限间隔, choice of {'0.1', '0.5', '1'}                   |\n| start_date | str | start_date=\"20231101\"; 结束日期, 结束日期和开始日期不要超过 1 个月                          |\n| end_date   | str | end_date=\"20231101\"; 结束日期, 结束日期和开始日期不要超过 1 个月                            |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| 日期    | object  | -   |\n| 期限    | float64 | -   |\n| 到期收益率 | float64 | -   |\n| 即期收益率 | float64 | -   |\n| 远期收益率 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_china_close_return_df = ak.bond_china_close_return(symbol=\"国债\", period=\"1\", start_date=\"20231101\", end_date=\"20231101\")\nprint(bond_china_close_return_df)\n```\n\n数据示例\n\n```\n       日期       期限   到期收益率 即期收益率  远期收益率\n0   2023-11-01   0.083  1.7031  1.7031     NaN\n1   2023-11-01   0.250  2.3102  2.3102     NaN\n2   2023-11-01   0.500  2.3825  2.3825     NaN\n3   2023-11-01   0.750  2.2547  2.2547     NaN\n4   2023-11-01   1.000  2.2452  2.2452  2.5188\n5   2023-11-01   2.000  2.3803  2.3819  2.5649\n6   2023-11-01   3.000  2.4403  2.4429  2.6295\n7   2023-11-01   4.000  2.4858  2.4895  2.7256\n8   2023-11-01   5.000  2.5313  2.5367  3.0216\n9   2023-11-01   6.000  2.6076  2.6174  3.1898\n10  2023-11-01   7.000  2.6838  2.6989  2.6956\n11  2023-11-01   8.000  2.6851  2.6985  2.6986\n12  2023-11-01   9.000  2.6865  2.6985  2.7016\n13  2023-11-01  10.000  2.6878  2.6988  2.9891\n14  2023-11-01  11.000  2.7115  2.7252  3.0458\n```\n\n### 中美国债收益率\n\n接口: bond_zh_us_rate\n\n目标地址: https://data.eastmoney.com/cjsj/zmgzsyl.html\n\n描述: 东方财富网-数据中心-经济数据-中美国债收益率历史数据\n\n限量: 返回 start_date 开始后的所有交易日的数据; 数据从 19901219 开始\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| start_date | str | start_date=\"19901219\" |\n\n输出参数\n\n| 名称            | 类型      | 描述  |\n|---------------|---------|-----|\n| 日期            | object  | -   |\n| 中国国债收益率2年     | float64 | -   |\n| 中国国债收益率5年     | float64 | -   |\n| 中国国债收益率10年    | float64 | -   |\n| 中国国债收益率30年    | float64 | -   |\n| 中国国债收益率10年-2年 | float64 | -   |\n| 中国GDP年增率      | float64 | -   |\n| 美国国债收益率2年     | float64 | -   |\n| 美国国债收益率5年     | float64 | -   |\n| 美国国债收益率10年    | float64 | -   |\n| 美国国债收益率30年    | float64 | -   |\n| 美国国债收益率10年-2年 | float64 | -   |\n| 美国GDP年增率      | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_zh_us_rate_df = ak.bond_zh_us_rate(start_date=\"19901219\")\nprint(bond_zh_us_rate_df)\n```\n\n数据示例\n\n```\n     日期  中国国债收益率2年  中国国债收益率5年  ...  美国国债收益率30年  美国国债收益率10年-2年  美国GDP年增率\n0     1990-12-19        NaN        NaN  ...        8.19           0.79       NaN\n1     1990-12-20        NaN        NaN  ...        8.22           0.80       NaN\n2     1990-12-21        NaN        NaN  ...        8.28           0.81       NaN\n3     1990-12-24        NaN        NaN  ...        8.36           0.85       NaN\n4     1990-12-26        NaN        NaN  ...        8.30           0.88       NaN\n          ...        ...        ...  ...         ...            ...       ...\n8595  2023-11-27     2.4719     2.6012  ...        4.53          -0.45       NaN\n8596  2023-11-28     2.4369     2.5762  ...        4.52          -0.39       NaN\n8597  2023-11-29     2.4460     2.5840  ...        4.44          -0.37       NaN\n8598  2023-11-30     2.4259     2.5691  ...        4.54          -0.36       NaN\n8599  2023-12-01     2.4169     2.5665  ...        4.40          -0.34       NaN\n[8600 rows x 13 columns]\n```\n\n### 中国国债收益率行情\n\n接口: bond_gb_zh_sina\n\n目标地址: https://stock.finance.sina.com.cn/forex/globalbd/cn10yt.html\n\n描述: 新浪财经-债券-中国国债收益率行情数据\n\n限量: 返回最近 1000 个交易日的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                                                   |\n|--------|-----|--------------------------------------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"中国10年期国债\"; choice of {\"中国1年期国债\", \"中国2年期国债\", \"中国3年期国债\", \"中国5年期国债\", \"中国7年期国债\", \"中国10年期国债\", \"中国15年期国债\", \"中国20年期国债\", \"中国30年期国债\"} |\n\n输出参数\n\n| 名称     | 类型      | 描述 |\n|--------|---------|----|\n| date   | object  | -  |\n| open   | float64 | -  |\n| high   | float64 | -  |\n| low    | float64 | -  |\n| close  | float64 | -  |\n| volume | int64   | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_gb_zh_sina_df = ak.bond_gb_zh_sina(symbol=\"中国10年期国债\")\nprint(bond_gb_zh_sina_df)\n```\n\n数据示例\n\n```\n           date   open   high    low  close  volume\n0    2022-02-28  2.788  2.855  2.776  2.789       0\n1    2022-03-01  2.789  2.847  2.785  2.816       0\n2    2022-03-02  2.816  2.830  2.816  2.822       0\n3    2022-03-03  2.822  2.843  2.821  2.842       0\n4    2022-03-04  2.842  2.843  2.825  2.831       0\n..          ...    ...    ...    ...    ...     ...\n995  2026-01-28  1.824  1.875  1.809  1.810       0\n996  2026-01-29  1.810  1.839  1.793  1.809       0\n997  2026-01-30  1.808  1.839  1.794  1.804       0\n998  2026-02-02  1.804  1.831  1.798  1.810       0\n999  2026-02-03  1.810  1.824  1.798  1.816       0\n[1000 rows x 6 columns]\n```\n\n### 美国国债收益率行情\n\n接口: bond_gb_us_sina\n\n目标地址: https://stock.finance.sina.com.cn/forex/globalbd/cn10yt.html\n\n描述: 新浪财经-债券-美国国债收益率行情数据\n\n限量: 返回最近 1000 个交易日的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                                                                                              |\n|--------|-----|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"美国10年期国债\"; choice of {\"美国1月期国债\", \"美国2月期国债\", \"美国3月期国债\", \"美国4月期国债\", \"美国6月期国债\", \"美国1年期国债\", \"美国2年期国债\", \"美国3年期国债\", \"美国5年期国债\", \"美国7年期国债\", \"美国10年期国债\", \"美国20年期国债\", \"美国30年期国债\"} |\n\n输出参数\n\n| 名称     | 类型      | 描述 |\n|--------|---------|----|\n| date   | object  | -  |\n| open   | float64 | -  |\n| high   | float64 | -  |\n| low    | float64 | -  |\n| close  | float64 | -  |\n| volume | int64   | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_gb_us_sina_df = ak.bond_gb_us_sina(symbol=\"美国10年期国债\")\nprint(bond_gb_us_sina_df)\n```\n\n数据示例\n\n```\n           date    open   high     low   close  volume\n0    2022-03-18  2.1550  2.191  2.1330  2.1476       0\n1    2022-03-21  2.1476  2.320  2.1476  2.3168       0\n2    2022-03-22  2.3110  2.392  2.3110  2.3770       0\n3    2022-03-23  2.3860  2.417  2.2860  2.3207       0\n4    2022-03-24  2.3080  2.396  2.3040  2.3408       0\n..          ...     ...    ...     ...     ...     ...\n995  2026-01-28  4.2390  4.273  4.2270  4.2472       0\n996  2026-01-29  4.2390  4.271  4.2230  4.2348       0\n997  2026-01-30  4.2470  4.279  4.2330  4.2589       0\n998  2026-02-02  4.2470  4.283  4.2120  4.2789       0\n999  2026-02-03  4.2750  4.299  4.2630  4.2670       0\n[1000 rows x 6 columns]\n```\n\n### 债券发行\n\n#### 国债发行\n\n接口: bond_treasure_issue_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-专题统计-债券报表-债券发行-国债发行\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| start_date | str | start_date=\"20210911\" |\n| end_date   | str | end_date=\"20211110\"   |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 债券代码   | object  | -        |\n| 债券简称   | object  | -        |\n| 发行起始日  | object  | -        |\n| 发行终止日  | object  | -        |\n| 计划发行总量 | float64 | 注意单位: 亿元 |\n| 实际发行总量 | float64 | 注意单位: 亿元 |\n| 发行价格   | float64 | 注意单位: 元  |\n| 单位面值   | int64   | 注意单位: 元  |\n| 缴款日    | object  | -        |\n| 增发次数   | int64   | -        |\n| 交易市场   | object  | -        |\n| 发行方式   | object  | -        |\n| 发行对象   | object  | -        |\n| 公告日期   | object  | -        |\n| 债券名称   | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_treasure_issue_cninfo_df = ak.bond_treasure_issue_cninfo(start_date=\"20210910\", end_date=\"20211109\")\nprint(bond_treasure_issue_cninfo_df)\n```\n\n数据示例\n\n```\n       债券代码      债券简称  ...        公告日期                债券名称\n0    020450    21贴债53  ...  2021-10-29  2021年记账式贴现(五十三期)国债\n1    108450    贴债2153  ...  2021-10-29  2021年记账式贴现(五十三期)国债\n2    219953  21贴现国债53  ...  2021-10-29  2021年记账式贴现(五十三期)国债\n3    020451    21贴债54  ...  2021-11-04  2021年记账式贴现(五十四期)国债\n4    108451    贴债2154  ...  2021-11-04  2021年记账式贴现(五十四期)国债\n..      ...       ...  ...         ...                 ...\n99   102103    国债2103  ...  2021-09-03    2021年记账式附息(三期)国债\n100  210003  21附息国债03  ...  2021-09-03    2021年记账式附息(三期)国债\n101  020441    21贴债44  ...  2021-09-09  2021年记账式贴现(四十四期)国债\n102  108441    贴债2144  ...  2021-09-09  2021年记账式贴现(四十四期)国债\n103  219944  21贴现国债44  ...  2021-09-09  2021年记账式贴现(四十四期)国债\n[104 rows x 15 columns]\n```\n\n#### 地方债发行\n\n接口: bond_local_government_issue_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-专题统计-债券报表-债券发行-地方债发行\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| start_date | str | start_date=\"20210911\" |\n| end_date   | str | end_date=\"20211110\"   |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 债券代码   | object  | -        |\n| 债券简称   | object  | -        |\n| 发行起始日  | object  | -        |\n| 发行终止日  | object  | -        |\n| 计划发行总量 | float64 | 注意单位: 亿元 |\n| 实际发行总量 | float64 | 注意单位: 亿元 |\n| 发行价格   | float64 | 注意单位: 元  |\n| 单位面值   | int64   | 注意单位: 元  |\n| 缴款日    | object  | -        |\n| 增发次数   | int64   | -        |\n| 交易市场   | object  | -        |\n| 发行方式   | object  | -        |\n| 发行对象   | object  | -        |\n| 公告日期   | object  | -        |\n| 债券名称   | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_local_government_issue_cninfo_df = ak.bond_local_government_issue_cninfo(start_date=\"20210911\", end_date=\"20211110\")\nprint(bond_local_government_issue_cninfo_df)\n```\n\n数据示例\n\n```\n         债券代码  ...                                             债券名称\n0      186882  ...               2021年新疆维吾尔自治区(新疆生产建设兵团)再融资一般债券(二期)\n1      192633  ...               2021年新疆维吾尔自治区(新疆生产建设兵团)再融资一般债券(二期)\n2     2171216  ...               2021年新疆维吾尔自治区(新疆生产建设兵团)再融资一般债券(二期)\n3      186883  ...               2021年新疆维吾尔自治区(新疆生产建设兵团)再融资专项债券(二期)\n4      192634  ...               2021年新疆维吾尔自治区(新疆生产建设兵团)再融资专项债券(二期)\n...       ...  ...                                              ...\n1444   192226  ...         2021年山东省政府棚改专项债券(八期)-2021年山东省政府专项债券(四十期)\n1445  2105885  ...         2021年山东省政府棚改专项债券(八期)-2021年山东省政府专项债券(四十期)\n1446   186469  ...  2021年山东省政府支持中小银行发展专项债券(一期)-2021年山东省政府专项债券(四十一期)\n1447   192227  ...  2021年山东省政府支持中小银行发展专项债券(一期)-2021年山东省政府专项债券(四十一期)\n1448  2105886  ...  2021年山东省政府支持中小银行发展专项债券(一期)-2021年山东省政府专项债券(四十一期)\n[1449 rows x 15 columns]\n```\n\n#### 企业债发行\n\n接口: bond_corporate_issue_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-专题统计-债券报表-债券发行-企业债发行\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| start_date | str | start_date=\"20210911\" |\n| end_date   | str | end_date=\"20211110\"   |\n\n输出参数\n\n| 名称         | 类型      | 描述       |\n|------------|---------|----------|\n| 债券代码       | object  | -        |\n| 债券简称       | object  | -        |\n| 公告日期       | object  | -        |\n| 交易所网上发行起始日 | object  | -        |\n| 交易所网上发行终止日 | object  | -        |\n| 计划发行总量     | float64 | 注意单位: 万元 |\n| 实际发行总量     | float64 | 注意单位: 万元 |\n| 发行面值       | float64 | -        |\n| 发行价格       | int64   | 注意单位: 元  |\n| 发行方式       | object  | -        |\n| 发行对象       | object  | -        |\n| 发行范围       | object  | -        |\n| 承销方式       | object  | -        |\n| 最小认购单位     | float64 | 注意单位: 万元 |\n| 募资用途说明     | object  | -        |\n| 最低认购额      | float64 | 注意单位: 万元 |\n| 债券名称       | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_corporate_issue_cninfo_df = ak.bond_corporate_issue_cninfo(start_date=\"20210911\", end_date=\"20211110\")\nprint(bond_corporate_issue_cninfo_df)\n```\n\n数据示例\n\n```\n        债券代码       债券简称  ...       最低认购额                                      债券名称\n0     184109     21开泰01  ...  10000000.0        2021年如东县开泰城建投资有限公司城市停车场建设专项债券(品种一)\n1    2180441  21开泰专项债01  ...  10000000.0        2021年如东县开泰城建投资有限公司城市停车场建设专项债券(品种一)\n2     184114     21云发01  ...   1000000.0             2021年第一期株洲市云龙发展投资控股集团有限公司公司债券\n3    2180450    21株云发01  ...   1000000.0             2021年第一期株洲市云龙发展投资控股集团有限公司公司债券\n4     188968     21电力Y3  ...  10000000.0  2021年国投电力控股股份有限公司面向专业投资者公开发行可续期公司债券(第三期)\n..       ...        ...  ...         ...                                       ...\n429   188725     21通用01  ...  10000000.0   2021年中国通用技术(集团)控股有限责任公司公开发行公司债券(第一期)品种一\n430   188702     21正奇01  ...  10000000.0       2021年正奇控股股份有限公司面向专业投资者公开发行公司债券(第一期)\n431   188738     21舟城02  ...  10000000.0   2021年舟山海城建设投资集团有限公司面向专业投资者公开发行公司债券(第二期)\n432   188758     21一航Y2  ...   1000000.0        2021年中交第一航务工程局有限公司公开发行可续期公司债券(第二期)\n433   149632     H1碧地03  ...   1000000.0      2021年碧桂园地产集团有限公司面向专业投资者公开发行公司债券(第三期)\n[434 rows x 17 columns]\n```\n\n#### 可转债发行\n\n接口: bond_cov_issue_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-专题统计-债券报表-债券发行-可转债发行\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| start_date | str | start_date=\"20210913\" |\n| end_date   | str | end_date=\"20211112\"   |\n\n输出参数\n\n| 名称              | 类型      | 描述       |\n|-----------------|---------|----------|\n| 债券代码            | object  | -        |\n| 债券简称            | object  | -        |\n| 公告日期            | object  | -        |\n| 发行起始日           | object  | -        |\n| 发行终止日           | object  | -        |\n| 计划发行总量          | float64 | 注意单位: 万元 |\n| 实际发行总量          | float64 | 注意单位: 万元 |\n| 发行面值            | int64   | 注意单位: 元  |\n| 发行价格            | float64 | 注意单位: 元  |\n| 发行方式            | object  | -        |\n| 发行对象            | object  | -        |\n| 发行范围            | object  | -        |\n| 承销方式            | object  | -        |\n| 募资用途说明          | object  | -        |\n| 初始转股价格          | float64 | 注意单位: 元  |\n| 转股开始日期          | object  | -        |\n| 转股终止日期          | object  | -        |\n| 网上申购日期          | object  | -        |\n| 网上申购代码          | object  | -        |\n| 网上申购简称          | object  | -        |\n| 网上申购数量上限        | float64 | 注意单位: 万元 |\n| 网上申购数量下限        | float64 | 注意单位: 万元 |\n| 网上申购单位          | float64 | -        |\n| 网上申购中签结果公告日及退款日 | object  | -        |\n| 优先申购日           | object  | -        |\n| 配售价格            | float64 | 注意单位: 元  |\n| 债权登记日           | object  | -        |\n| 优先申购缴款日         | object  | -        |\n| 转股代码            | object  | -        |\n| 交易市场            | object  | -        |\n| 债券名称            | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_cov_issue_cninfo_df = ak.bond_cov_issue_cninfo(start_date=\"20210913\", end_date=\"20211112\")\nprint(bond_cov_issue_cninfo_df)\n```\n\n数据示例\n\n```\n      债券代码  债券简称  ... 交易市场                                       债券名称\n0   110083  苏租转债  ...  上交所             2021年江苏金融租赁股份有限公司公开发行A股可转换公司债券\n1   123130  设研转债  ...  深交所  2021年河南省交通规划设计研究院股份有限公司创业板向不特定对象发行可转换公司债券\n2   127050  麒麟转债  ...  深交所              2021年青岛森麒麟轮胎股份有限公司公开发行可转换公司债券\n3   111001  山玻转债  ...  上交所               2021年山东玻纤集团股份有限公司公开发行可转换公司债券\n4   113631  皖天转债  ...  上交所             2021年安徽省天然气开发股份有限公司公开发行可转换公司债券\n5   123129  锦鸡转债  ...  深交所        2021年江苏锦鸡实业股份有限公司创业板向不特定对象发行可转换公司债券\n6   127049  希望转2  ...  深交所                2021年新希望六和股份有限公司公开发行可转换公司债券\n7   123128  首华转债  ...  深交所    2021年首华燃气科技(上海)股份有限公司创业板向不特定对象发行可转换公司债券\n8   123127  耐普转债  ...  深交所           2021年江西耐普矿机股份有限公司向不特定对象发行可转换公司债券\n9   110082  宏发转债  ...  上交所                 2021年宏发科技股份有限公司公开发行可转换公司债券\n10  113630  赛伍转债  ...  上交所                  苏州赛伍应用技术股份有限公司公开发行可转换公司债券\n11  127048  中大转债  ...  深交所                宁波中大力德智能传动股份有限公司公开发行可转换公司债券\n12  127047  帝欧转债  ...  深交所                 2021年帝欧家居股份有限公司公开发行可转换公司债券\n13  127046  百润转债  ...  深交所           2021年上海百润投资控股集团股份有限公司公开发行可转换公司债券\n14  113629  泉峰转债  ...  上交所           2021年南京泉峰汽车精密技术股份有限公司公开发行可转换公司债券\n[15 rows x 31 columns]\n```\n\n#### 可转债转股\n\n接口: bond_cov_stock_issue_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-专题统计-债券报表-债券发行-可转债转股\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 债券代码     | object  | -       |\n| 债券简称     | object  | -       |\n| 公告日期     | object  | -       |\n| 转股代码     | object  | -       |\n| 转股简称     | object  | -       |\n| 转股价格     | float64 | 注意单位: 元 |\n| 自愿转换期起始日 | object  | -       |\n| 自愿转换期终止日 | object  | -       |\n| 标的股票     | object  | -       |\n| 债券名称     | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_cov_stock_issue_cninfo_df = ak.bond_cov_stock_issue_cninfo()\nprint(bond_cov_stock_issue_cninfo_df)\n```\n\n数据示例\n\n```\n       债券代码   债券简称  ...    标的股票                                 债券名称\n0    113685  升24转债  ...  603305     2024年宁波旭升集团股份有限公司向不特定对象发行可转换公司债券\n1    111019   宏柏转债  ...  605366    2024年江西宏柏新材料股份有限公司向不特定对象发行可转换公司债券\n2    113684   湘泵转债  ...  603319      2024年湖南机油泵股份有限公司向不特定对象发行可转换公司债券\n3    113683  伟24转债  ...  603568     2024年浙江伟明环保股份有限公司向不特定对象发行可转换公司债券\n4    113682   益丰转债  ...  603939    2024年益丰大药房连锁股份有限公司向不特定对象发行可转换公司债券\n..      ...    ...  ...     ...                                  ...\n281  118029   富淼转债  ...  688350     2022年江苏富淼科技股份有限公司向不特定对象发行可转换公司债券\n282  123172   漱玉转债  ...  301017  2022年漱玉平民大药房连锁股份有限公司向不特定对象发行可转换公司债券\n283  123172   漱玉转债  ...  301017  2022年漱玉平民大药房连锁股份有限公司向不特定对象发行可转换公司债券\n284  127078   优彩转债  ...  002998       2022年优彩环保资源科技股份有限公司公开发行可转换公司债券\n285  127078   优彩转债  ...  002998       2022年优彩环保资源科技股份有限公司公开发行可转换公司债券\n[286 rows x 10 columns]\n```\n\n### 中债指数\n\n#### 总指数\n\n##### 综合类指数\n\n###### 新综合指数\n\n接口: bond_new_composite_index_cbond\n\n目标地址: https://yield.chinabond.com.cn/cbweb-mn/indices/single_index_query\n\n描述: 中国债券信息网-中债指数-中债指数族系-总指数-综合类指数-中债-新综合指数\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                                                                                                                                                       |\n|-----------|-----|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| indicator | str | indicator=\"财富\"; choice of {\"全价\", \"净价\", \"财富\", \"平均市值法久期\", \"平均现金流法久期\", \"平均市值法凸性\", \"平均现金流法凸性\", \"平均现金流法到期收益率\", \"平均市值法到期收益率\", \"平均基点价值\", \"平均待偿期\", \"平均派息率\", \"指数上日总市值\", \"财富指数涨跌幅\", \"全价指数涨跌幅\", \"净价指数涨跌幅\", \"现券结算量\"} |\n| period    | str | period=\"总值\"; choice of {\"总值\", \"1年以下\", \"1-3年\", \"3-5年\", \"5-7年\", \"7-10年\", \"10年以上\", \"0-3个月\", \"3-6个月\", \"6-9个月\", \"9-12个月\", \"0-6个月\", \"6-12个月\"}                                                                  |\n\n输出参数\n\n| 名称    | 类型      | 描述   |\n|-------|---------|------|\n| date  | object  | -    |\n| value | float64 | 注意单位 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_new_composite_index_cbond_df = ak.bond_new_composite_index_cbond(indicator=\"财富\", period=\"总值\")\nprint(bond_new_composite_index_cbond_df)\n```\n\n数据示例\n\n```\n            date     value\n0     2002-01-04   99.9731\n1     2002-01-07  100.0149\n2     2002-01-08   99.8273\n3     2002-01-09  100.0203\n4     2002-01-10   99.9317\n          ...       ...\n5440  2023-09-27  226.5951\n5441  2023-09-28  226.7308\n5442  2023-10-07  226.9880\n5443  2023-10-08  227.0376\n5444  2023-10-09  226.9609\n[5445 rows x 2 columns]\n```\n\n###### 综合指数\n\n接口: bond_composite_index_cbond\n\n目标地址: https://yield.chinabond.com.cn/cbweb-mn/indices/single_index_query\n\n描述: 中国债券信息网-中债指数-中债指数族系-总指数-综合类指数-中债-综合指数\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                                                                                                                                                       |\n|-----------|-----|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| indicator | str | indicator=\"财富\"; choice of {\"全价\", \"净价\", \"财富\", \"平均市值法久期\", \"平均现金流法久期\", \"平均市值法凸性\", \"平均现金流法凸性\", \"平均现金流法到期收益率\", \"平均市值法到期收益率\", \"平均基点价值\", \"平均待偿期\", \"平均派息率\", \"指数上日总市值\", \"财富指数涨跌幅\", \"全价指数涨跌幅\", \"净价指数涨跌幅\", \"现券结算量\"} |\n| period    | str | period=\"总值\"; choice of {\"总值\", \"1年以下\", \"1-3年\", \"3-5年\", \"5-7年\", \"7-10年\", \"10年以上\", \"0-3个月\", \"3-6个月\", \"6-9个月\", \"9-12个月\", \"0-6个月\", \"6-12个月\"}                                                                  |\n\n输出参数\n\n| 名称    | 类型      | 描述   |\n|-------|---------|------|\n| date  | object  | -    |\n| value | float64 | 注意单位 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbond_composite_index_cbond_df = ak.bond_composite_index_cbond(indicator=\"财富\", period=\"总值\")\nprint(bond_composite_index_cbond_df)\n```\n\n数据示例\n\n```\n            date     value\n0     2002-01-03   99.9731\n1     2002-01-06  100.0149\n2     2002-01-07   99.8273\n3     2002-01-08  100.0203\n4     2002-01-09   99.9317\n          ...       ...\n5429  2023-09-11  232.4624\n5430  2023-09-12  232.5571\n5431  2023-09-13  232.6593\n5432  2023-09-14  232.5994\n5433  2023-09-17  232.5021\n[5434 rows x 2 columns]\n```\n"
  },
  {
    "path": "docs/data/currency/currency.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 货币数据\n\n### 货币报价最新数据\n\n接口: currency_latest\n\n注意：此接口使用外部 API, 免费账号每月限量访问 5000 次, 可以在 [currencyscoop](https://currencyscoop.com/) 注册\n\n目标地址: https://currencyscoop.com/\n\n描述: 货币报价最新数据\n\n限量: 单次返回指定货币的最新报价数据\n\n输入参数\n\n| 名称      | 类型  | 描述                                                                                                          |\n|---------|-----|-------------------------------------------------------------------------------------------------------------|\n| base    | str | base=\"USD\"                                                                                                  |\n| symbols | str | symbols=\"\"; 默认返回全部, 可以在此处设置 symbols=\"AUD\", 则返回 AUD 的数据; 可以在此处设置 symbols: str = \"AUD,CNY\", 则返回 AUD 和 CNY 的数据 |\n| api_key | str | api_key=\"此处输入 API\";                                                                                         |\n\n更多相关参数可以访问: https://currencybeacon.com/api-documentation 和 https://currencybeacon.com/supported-currencies\n\n输出参数\n\n| 名称       | 类型                  | 描述        |\n|----------|---------------------|-----------|\n| currency | object              | 货币代码      |\n| date     | datetime64[ns, UTC] | 日期时间-注意时区 |\n| base     | object              | 货币        |\n| rates    | float64             | 比率        |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncurrency_latest_df = ak.currency_latest(base=\"USD\", symbols=\"\", api_key=\"此处输入 API\")\nprint(currency_latest_df)\n```\n\n数据示例\n\n```\n    currency                      date base         rates\n0        ADA 2023-07-24 10:56:21+00:00  USD      3.213363\n1        AED 2023-07-24 10:56:21+00:00  USD      3.672500\n2        AFN 2023-07-24 10:56:21+00:00  USD     85.665822\n3        ALL 2023-07-24 10:56:21+00:00  USD     91.125190\n4        AMD 2023-07-24 10:56:21+00:00  USD    387.300314\n..       ...                       ...  ...           ...\n215      ZAR 2023-07-24 10:56:21+00:00  USD     17.927659\n216      ZMK 2023-07-24 10:56:21+00:00  USD  19493.346892\n217      ZMW 2023-07-24 10:56:21+00:00  USD     19.493347\n218      ZWD 2023-07-24 10:56:21+00:00  USD    361.900000\n219      ZWL 2023-07-24 10:56:21+00:00  USD   4677.170339\n[220 rows x 4 columns]\n```\n\n### 货币报价历史数据\n\n接口: currency_history\n\n注意：此接口使用外部 API, 免费账号每月限量访问 5000 次, 可以在 [currencyscoop](https://currencyscoop.com/) 注册\n\n目标地址: https://currencyscoop.com/\n\n描述: 货币报价历史数据\n\n限量: 单次返回指定货币在指定交易日的报价历史数据-免费账号每月限量访问 5000 次\n\n输入参数\n\n| 名称      | 类型  | 描述                                                                                                          |\n|---------|-----|-------------------------------------------------------------------------------------------------------------|\n| base    | str | base=\"USD\"                                                                                                  |\n| date    | str | date=\"2023-02-03\"                                                                                           |\n| symbols | str | symbols=\"\"; 默认返回全部, 可以在此处设置 symbols=\"AUD\", 则返回 AUD 的数据; 可以在此处设置 symbols: str = \"AUD,CNY\", 则返回 AUD 和 CNY 的数据 |\n| api_key | str | api_key=\"此处输入 API\";                                                                                         |\n\n输出参数\n\n| 名称       | 类型      | 描述   |\n|----------|---------|------|\n| currency | object  | 货币代码 |\n| date     | object  | 日期   |\n| base     | float64 | 货币   |\n| rates    | float64 | 比率   |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncurrency_history_df = ak.currency_history(base=\"USD\", date=\"2023-02-03\", symbols=\"\", api_key=\"此处输入 API\")\nprint(currency_history_df)\n```\n\n数据示例\n\n```\n    currency       date base         rates\n0        ADA 2023-02-03  USD      2.501764\n1        AED 2023-02-03  USD      3.672500\n2        AFN 2023-02-03  USD     89.667343\n3        ALL 2023-02-03  USD    107.092799\n4        AMD 2023-02-03  USD    395.155660\n..       ...        ...  ...           ...\n215      ZAR 2023-02-03  USD     17.470971\n216      ZMK 2023-02-03  USD  19217.069221\n217      ZMW 2023-02-03  USD     19.217069\n218      ZWD 2023-02-03  USD    361.900000\n219      ZWL 2023-02-03  USD    804.930876\n[220 rows x 4 columns]\n```\n\n### 货币报价时间序列数据\n\n接口: currency_time_series\n\n注意：此接口使用外部 API, 免费账号每月限量访问 5000 次, 可以在 [currencyscoop](https://currencyscoop.com/) 注册\n\n目标地址: https://currencyscoop.com/\n\n描述: 货币报价时间序列数据\n\n限量: 单次返回指定货币在指定交易日到另一指定交易日的报价数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                                                          |\n|------------|-----|-------------------------------------------------------------------------------------------------------------|\n| base       | str | base=\"USD\"                                                                                                  |\n| start_date | str | start_date=\"2023-02-03\"                                                                                     |\n| end_date   | str | end_date=\"2023-03-04\"                                                                                       |\n| symbols    | str | symbols=\"\"; 默认返回全部, 可以在此处设置 symbols=\"AUD\", 则返回 AUD 的数据; 可以在此处设置 symbols: str = \"AUD,CNY\", 则返回 AUD 和 CNY 的数据 |\n| api_key    | str | api_key=\"此处输入 API\";                                                                                         |\n\n输出参数\n\n| 名称   | 类型      | 描述     |\n|------|---------|--------|\n| date | object  | 日期     |\n| ...  | float64 | 货币价格数据 |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncurrency_time_series_df = ak.currency_time_series(base=\"USD\", start_date=\"2023-02-03\", end_date=\"2023-03-04\", symbols=\"\", api_key=\"此处输入 API\")\nprint(currency_time_series_df)\n```\n\n数据示例\n\n```\n          date       ADA     AED  ...        ZMW    ZWD         ZWL\n0   2023-02-03  2.501764  3.6725  ...  19.217069  361.9  804.930876\n1   2023-02-04  2.523126  3.6725  ...  19.190104  361.9  804.930876\n2   2023-02-05  2.548544  3.6725  ...  19.359966  361.9  804.898394\n3   2023-02-06  2.588994  3.6725  ...  19.211667  361.9  812.084265\n4   2023-02-07  2.503360  3.6725  ...  19.163126  361.9  816.624716\n5   2023-02-08  2.615068  3.6725  ...  19.276132  361.9  831.793316\n6   2023-02-09  2.772723  3.6725  ...  19.298303  361.9  833.966241\n7   2023-02-10  2.767700  3.6725  ...  19.377991  361.9  839.246195\n8   2023-02-11  2.736774  3.6725  ...  19.360544  361.9  839.246195\n9   2023-02-12  2.748749  3.6725  ...  19.316502  361.9  839.264194\n10  2023-02-13  2.803486  3.6725  ...  19.196452  361.9  846.084936\n11  2023-02-14  2.587805  3.6725  ...  19.375476  361.9  850.135849\n12  2023-02-15  2.443325  3.6725  ...  19.341588  361.9  856.219979\n13  2023-02-16  2.523309  3.6725  ...  19.494675  361.9  860.307069\n14  2023-02-17  2.474066  3.6725  ...  19.654148  361.9  863.222832\n15  2023-02-18  2.487758  3.6725  ...  19.470201  361.9  863.222832\n16  2023-02-19  2.485208  3.6725  ...  19.340051  361.9  863.295153\n17  2023-02-20  2.487952  3.6725  ...  19.516557  361.9  893.102417\n18  2023-02-21  2.582063  3.6725  ...  19.524095  361.9  893.264541\n19  2023-02-22  2.552943  3.6725  ...  19.613078  361.9  873.680243\n20  2023-02-23  2.621636  3.6725  ...  19.684268  361.9  873.836274\n21  2023-02-24  2.745342  3.6725  ...  19.739989  361.9  894.480661\n22  2023-02-25  2.765595  3.6725  ...  19.820979  361.9  894.480661\n23  2023-02-26  2.737813  3.6725  ...  19.767109  361.9  894.489801\n24  2023-02-27  2.738002  3.6725  ...  19.749675  361.9  886.192242\n25  2023-02-28  2.797012  3.6725  ...  19.865244  361.9  889.436788\n26  2023-03-01  2.803997  3.6725  ...  19.959017  361.9  892.608637\n27  2023-03-02  2.980559  3.6725  ...  20.006057  361.9  898.930254\n28  2023-03-03  2.925695  3.6725  ...  20.023367  361.9  899.419086\n29  2023-03-04  2.939316  3.6725  ...  20.100199  361.9  899.419086\n[30 rows x 221 columns]\n```\n\n### 货币基础信息查询\n\n接口: currency_currencies\n\n注意：此接口使用外部 API, 免费账号每月限量访问 5000 次, 可以在 [currencyscoop](https://currencyscoop.com/) 注册\n\n目标地址: https://currencyscoop.com/\n\n描述: 所有货币的基础信息\n\n限量: 单次返回指定所有货币基础信息\n\n输入参数\n\n| 名称      | 类型  | 描述                  |\n|---------|-----|---------------------|\n| c_type  | str | c_type=\"fiat\"       |\n| api_key | str | api_key=\"此处输入 API\"; |\n\n输出参数\n\n| 名称                  | 类型     | 描述 |\n|---------------------|--------|----|\n| id                  | int64  | -  |\n| name                | object | -  |\n| short_code          | object | -  |\n| code                | object | -  |\n| precision           | int64  | -  |\n| subunit             | int64  | -  |\n| symbol              | object | -  |\n| symbol_first        | bool   | -  |\n| decimal_mark        | object | -  |\n| thousands_separator | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncurrency_currencies_df = ak.currency_currencies(c_type=\"fiat\", api_key=\"此处输入 API\")\nprint(currency_currencies_df)\n```\n\n数据示例\n\n```\n      id                           name  ... decimal_mark thousands_separator\n0      1                     UAE Dirham  ...            .                   ,\n1      2                        Afghani  ...            .                   ,\n2      3                            Lek  ...            .                   ,\n3      4                  Armenian Dram  ...            .                   ,\n4      5  Netherlands Antillean Guilder  ...            ,                   .\n..   ...                            ...  ...          ...                 ...\n156  157                      CFP Franc  ...            .                   ,\n157  158                    Yemeni Rial  ...            .                   ,\n158  159                           Rand  ...            .                   ,\n159  160                 Zambian Kwacha  ...            .                   ,\n160  161                Zimbabwe Dollar  ...            .                   ,\n[161 rows x 10 columns]\n```\n\n### 货币对价格转换\n\n接口: currency_convert\n\n注意：此接口使用外部 API, 免费账号每月限量访问 5000 次, 可以在 [currencyscoop](https://currencyscoop.com/) 注册\n\n目标地址: https://currencyscoop.com/\n\n描述: 指定货币对指定货币数量的转换后价格\n\n限量: 单次返回指定货币对的转换后价格\n\n输入参数\n\n| 名称      | 类型  | 描述                  |\n|---------|-----|---------------------|\n| base    | str | base=\"USD\"; 基础货币    |\n| to      | str | to=\"CNY\"; 需要转换到的货币  |\n| amount  | str | amount=\"10000\"; 转换量 |\n| api_key | str | api_key=\"此处输入 API\"; |\n\n输出参数\n\n| 名称    | 类型     | 描述 |\n|-------|--------|----|\n| item  | object | -  |\n| value | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncurrency_convert_df = ak.currency_convert(base=\"USD\", to=\"CNY\", amount=\"10000\", api_key=\"此处输入 API\")\nprint(currency_convert_df)\n```\n\n数据示例\n\n```\n        item                value\n0  timestamp  2023-07-24 11:31:20\n1       date           2023-07-24\n2       from                  USD\n3         to                  CNY\n4     amount                10000\n5      value            71898.995\n```\n"
  },
  {
    "path": "docs/data/dc/dc.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 加密货币数据\n\n### 实时数据\n\n接口: crypto_js_spot\n\n目标地址: https://datacenter.jin10.com/reportType/dc_bitcoin_current\n\n描述: 加密货币实时行情\n\n限量: 单次返回主流加密货币当前时点行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述     |\n|---------|---------|--------|\n| 市场      | object  | -      |\n| 交易品种    | object  | -      |\n| 最近报价    | float64 | -      |\n| 涨跌额     | float64 | -      |\n| 涨跌幅     | float64 | -      |\n| 24小时最高  | float64 | -      |\n| 24小时最低  | float64 | 注意货币币种 |\n| 24小时成交量 | float64 | 注意货币币种 |\n| 更新时间    | float64 | -      |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncrypto_js_spot_df = ak.crypto_js_spot()\nprint(crypto_js_spot_df)\n```\n\n数据示例\n\n```\n               市场    交易品种  ...   24小时成交量        更新时间\n0    Bitfinex(香港)  LTCUSD  ...  23157.88  2022-03-15 16:02:03\n1    Bitflyer(日本)  BTCJPY  ...   2031.26  2022-03-15 16:02:03\n2    Bitstamp(美国)  BTCUSD  ...   1380.17  2022-03-15 16:02:03\n3      CEX.IO(伦敦)  BTCUSD  ...     54.51  2022-03-15 16:02:03\n4  Kraken_EUR(美国)  BTCEUR  ...   1342.40  2022-03-15 16:02:03\n5      Kraken(美国)  LTCUSD  ...  21871.79  2022-03-15 16:02:03\n6      OKCoin(中国)  BTCUSD  ...    239.14  2022-03-15 16:02:03\n7    Bitfinex(香港)  BCHUSD  ...      0.00  2020-11-16 21:02:04\n8    Bitfinex(香港)  BTCUSD  ...   7496.55  2022-03-15 16:02:03\n9      Kraken(美国)  BTCUSD  ...   3147.43  2022-03-15 16:02:03\n```\n\n### 持仓报告\n\n#### 比特币持仓报告\n\n接口: crypto_bitcoin_hold_report\n\n目标地址: https://datacenter.jin10.com/dc_report?name=bitcoint\n\n描述: 比特币持仓报告\n\n限量: 单次返回当前时点的比特币持仓报告数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 代码       | object  | 日期时间-索引 |\n| 公司名称-英文  | object  | -       |\n| 公司名称-中文  | object  | -       |\n| 国家/地区    | object  | -       |\n| 市值       | float64 | -       |\n| 比特币占市值比重 | float64 | 注意单位: % |\n| 持仓成本     | float64 | -       |\n| 持仓占比     | float64 | 注意单位: % |\n| 持仓量      | float64 | -       |\n| 当日持仓市值   | float64 | -       |\n| 查询日期     | object  | -       |\n| 公告链接     | object  | -       |\n| 分类       | object  | -       |\n| 倍数       | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncrypto_bitcoin_hold_report_df = ak.crypto_bitcoin_hold_report()\nprint(crypto_bitcoin_hold_report_df)\n```\n\n数据示例\n\n```\n               代码                               公司名称-英文  ...    分类  倍数\n0       MSTR:NADQ                         MicroStrategy  ...  上市公司 NaN\n1       MARA:NADQ         Marathon Digital Holdings Inc  ...  上市公司 NaN\n2       TSLA:NADQ                            Tesla, Inc  ...  上市公司 NaN\n3      HUT:NASDAQ                     Hut 8 Mining Corp  ...  上市公司 NaN\n4       COIN:NADQ                 Coinbase Global, Inc.  ...  上市公司 NaN\n5   BRPHF:OTCMKTS               Galaxy Digital Holdings  ...  上市公司 NaN\n6         SQ:NYSE                           Block, Inc.  ...  上市公司 NaN\n7       RIOT:NADQ                  Riot Platforms, Inc.  ...  上市公司 NaN\n8    BTGGF:TCMKTS                      Bitcoin Group SE  ...  上市公司 NaN\n9        VOYG:TSX                   Voyager Digital LTD  ...  上市公司 NaN\n10    HIVE:NASDAQ                       Hive Blockchain  ...  上市公司 NaN\n11  NEXOF:OTCMKTS                         NEXON Co. Ltd  ...  上市公司 NaN\n12   EXOD:OTCMKTS                   Exodus Movement Inc  ...  上市公司 NaN\n13        HKD:HKG                                 Meitu  ...  上市公司 NaN\n14    PHUN:NASDAQ                        Phunware, Inc.  ...  上市公司 NaN\n15       NFT:AQSE                   NFT Investments PLC  ...  上市公司 NaN\n16    BITF:NASDAQ                      Bitfarms Limited  ...  上市公司 NaN\n17    CLSK:NASDAQ                        CleanSpark Inc  ...  上市公司 NaN\n18  DMGGF:OTCMKTS         DMG Blockchain Solutions Inc.  ...  上市公司 NaN\n19    BTBT:NASDAQ                     Bit Digital, Inc.  ...  上市公司 NaN\n20    CIFR:NASDAQ                         Cipher Mining  ...  上市公司 NaN\n21  NPPTF:OTCMKTS                Neptune Digital Assets  ...  上市公司 NaN\n22        ABT:DUS      Advanced Bitcoin Technologies AG  ...  上市公司 NaN\n23      LQWDF:OTC                     LQwD FinTech Corp  ...  上市公司 NaN\n24  BBKCF:OTCMKTS              BIGG Digital Assets Inc.  ...  上市公司 NaN\n25  BNXAF:OTCMKTS                    Banxa Holdings Inc  ...  上市公司 NaN\n26  HSSHF:OTCMKTS              Digihost Technology Inc.  ...  上市公司 NaN\n27   BTCS:OTCMKTS                             BTCS Inc.  ...  上市公司 NaN\n28      SATO:TSXV  Canada Computational Unlimited Corp.  ...  上市公司 NaN\n29   FRMO:OTCMKTS                            FRMO Corp.  ...  上市公司 NaN\n30  ARBKF:OTCMKTS                   Argo Blockchain PLC  ...  上市公司 NaN\n31    MILE:NASDAQ                             Metromile  ...  上市公司 NaN\n32    MOGO:Nasdaq                        MOGO Financing  ...  上市公司 NaN\n33           None                                   USA  ...  政府机构 NaN\n34           None                        Ukraine (govt)  ...  政府机构 NaN\n35           None                               Mt. Gox  ...  私营企业 NaN\n36           None                             Block.one  ...  私营企业 NaN\n37           None                   Tether Holdings LTD  ...  私营企业 NaN\n38           None                  The Tezos Foundation  ...  私营企业 NaN\n39           None            Stone Ridge Holdings Group  ...  私营企业 NaN\n40           None                  Massachusetts Mutual  ...  私营企业 NaN\n41           None                       Lisk Foundation  ...  私营企业 NaN\n42           None                             Seetee AS  ...  私营企业 NaN\n43   GBTC:OTCMKTS               Grayscale Bitcoin Trust  ...   ETF NaN\n44      XBTE:NADQ             CoinShares / XBT Provider  ...   ETF NaN\n45       BTCC:TSX                   Purpose Bitcoin ETF  ...   ETF NaN\n46       BTCQ:TSX            3iQ CoinShares Bitcoin ETF  ...   ETF NaN\n47     BTCE:XETRA                 ETC Group Bitcoin ETP  ...   ETF NaN\n48     QBTCBV:TSX                  3iQ The Bitcoin Fund  ...   ETF NaN\n49   BITW:OTCMKTS          Bitwise 10 Crypto Index Fund  ...   ETF NaN\n50  OTCQX:OTCMKTS      Grayscale Digital Large Cap Fund  ...   ETF NaN\n51       ABTC:SWX                           21Shares AG  ...   ETF NaN\n52     VBTC:XETRA            VanEck Vectors Bitcoin ETN  ...   ETF NaN\n53       BTCX:TSX                CI Galaxy Bitcoin Fund  ...   ETF NaN\n54       OBTC:OTC                  Osprey Bitcoin Trust  ...   ETF NaN\n55   BTC0E.AS:OTC               Valour Bitcoin Zero ETP  ...   ETF NaN\n56       EBIT:TSX                    Evolve Bitcoin ETF  ...   ETF NaN\n57       BITC:TSX               Ninepoint Bitcoin Trust  ...   ETF NaN\n58       FTBC:TSE        Fidelity Advantage Bitcoin ETF  ...   ETF NaN\n[59 rows x 14 columns]\n```\n\n### CME-成交量报告\n\n接口: crypto_bitcoin_cme\n\n目标地址: https://datacenter.jin10.com/reportType/dc_cme_btc_report\n\n描述: 芝加哥商业交易所-比特币成交量报告\n\n限量: 单次返回指定交易日的比特币成交量报告数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date=\"20230830\" |\n\n输出参数\n\n| 名称     | 类型      | 描述 |\n|--------|---------|----|\n| 商品     | object  | -  |\n| 类型     | object  | -  |\n| 电子交易合约 | int64   | -  |\n| 场内成交合约 | float64 | -  |\n| 场外成交合约 | int64   | -  |\n| 成交量    | int64   | -  |\n| 未平仓合约  | int64   | -  |\n| 持仓变化   | int64   | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncrypto_bitcoin_cme_df = ak.crypto_bitcoin_cme(date=\"20230830\")\nprint(crypto_bitcoin_cme_df)\n```\n\n数据示例\n\n```\n      商品  类型  电子交易合约  场内成交合约  场外成交合约   成交量  未平仓合约  持仓变化\n0    比特币  期货    7895     NaN     366  8261  15364  -808\n1    比特币  看涨      38     NaN       0    38   3260    11\n2    比特币  期权     113     NaN       0   113   5871   -27\n3    比特币  看跌      75     NaN       0    75   2611   -38\n4  微型比特币  期货    7818     NaN       0  7818   8353  -425\n```\n"
  },
  {
    "path": "docs/data/energy/energy.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 能源数据\n\n### 碳排放\n\n#### 碳排放权-国内\n\n接口: energy_carbon_domestic\n\n目标地址: http://www.tanjiaoyi.com/\n\n描述: 碳交易网-行情信息\n\n限量: 返回指定 symbol 的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                      |\n|--------|-----|-------------------------------------------------------------------------|\n| symbol | str | symbol=\"湖北\"; choice of {'湖北', '上海', '北京', '重庆', '广东', '天津', '深圳', '福建'} |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 日期  | object  |         |\n| 成交价 | float64 | 注意单位: 元 |\n| 成交量 | float64 | 注意单位: 吨 |\n| 成交额 | float64 | -       |\n| 地点  | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nenergy_carbon_domestic_df = ak.energy_carbon_domestic(symbol=\"湖北\")\nprint(energy_carbon_domestic_df)\n```\n\n数据示例\n\n```\n      日期        成交价       成交量           成交额  地点\n0     2014-04-02  21.000000  510020.0  1.071040e+07  湖北\n1     2014-04-03  24.200001   51468.0  1.245530e+06  湖北\n2     2014-04-04  26.620001  304125.0  8.092670e+06  湖北\n3     2014-04-05  26.620001       0.0  0.000000e+00  湖北\n4     2014-04-06  26.620001       0.0  0.000000e+00  湖北\n          ...        ...       ...           ...  ..\n1847  2021-03-17  31.799999     535.0  1.701280e+04  湖北\n1848  2021-03-18  28.129999     551.0  1.550140e+04  湖北\n1849  2021-03-19  30.350000    2074.0  6.293808e+04  湖北\n1850  2021-03-22  30.350000    3073.0  9.326129e+04  湖北\n1851  2021-03-23  30.350000     100.0  3.508000e+03  湖北\n```\n\n#### 碳排放权-北京\n\n接口: energy_carbon_bj\n\n目标地址: https://www.bjets.com.cn/article/jyxx/\n\n描述: 北京市碳排放权电子交易平台-北京市碳排放权公开交易行情\n\n注意: 注意在 2017-08-08 日的数据有误 70.074.00（BEA）\n\n限量: 全部历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述        |\n|------|---------|-----------|\n| 日期   | object  |           |\n| 成交量  | int64   | 注意单位: 吨   |\n| 成交均价 | float64 | 注意单位: 元/吨 |\n| 成交额  | float64 | 注意单位: 元   |\n| 成交单位 | object  | -         |\n\n接口示例\n\n```python\nimport akshare as ak\n\nenergy_carbon_bj_df = ak.energy_carbon_bj()\nprint(energy_carbon_bj_df)\n```\n\n数据示例\n\n```\n          日期     成交量   成交均价     成交额  成交单位\n0     2013-11-28     800  51.25        NaN   NaN\n1     2013-12-02     300  55.10        NaN   NaN\n2     2013-12-05     100  50.20        NaN   NaN\n3     2013-12-06     100  50.00        NaN   NaN\n4     2013-12-11     100  50.50        NaN   NaN\n          ...     ...    ...        ...   ...\n1456  2022-01-04    8370  83.00   694710.0  None\n1457  2022-01-12  100000  74.60  7460000.0   BEA\n1458  2022-02-10       1  59.70       59.7   BEA\n1459  2022-02-14     110  60.00     6600.0   BEA\n1460  2022-03-02     100  62.00     6200.0   BEA\n```\n\n#### 碳排放权-深圳\n\n接口: energy_carbon_sz\n\n目标地址: http://www.cerx.cn/dailynewsCN/index.htm\n\n描述: 深圳碳排放交易所-国内碳情\n\n限量: 全部历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 交易日期   | object  | -   |\n| 市场交易指数 | object  | -   |\n| 开盘价    | float64 | -   |\n| 最高价    | float64 | -   |\n| 最低价    | float64 | -   |\n| 成交均价   | float64 | -   |\n| 收盘价    | float64 | -   |\n| 成交量    | int64   | -   |\n| 成交额    | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nenergy_carbon_sz_df = ak.energy_carbon_sz()\nprint(energy_carbon_sz_df)\n```\n\n数据示例\n\n```\n     交易日期    市场交易指数   开盘价    最高价    最低价   成交均价    收盘价  成交量    成交额\n0    2022-01-21  SZA-2014  10.54  10.54  10.54  10.54  10.54    1  10.54\n1    2022-01-21  SZA-2020  13.80    NaN    NaN    NaN  13.80    0   0.00\n2    2022-01-21  SZA-2019  16.28  16.28  16.28  16.28  16.28    1  16.28\n3    2022-01-21  SZA-2015  16.02  19.58  16.02  16.62  16.02    6  99.74\n4    2022-01-21  SZA-2017   6.41    NaN    NaN    NaN   6.41    0   0.00\n..          ...       ...    ...    ...    ...    ...    ...  ...    ...\n195  2022-03-03  SZA-2016   4.82    NaN    NaN    NaN   4.82    0   0.00\n196  2022-03-03  SZA-2017   4.20    NaN    NaN    NaN   4.20    0   0.00\n197  2022-03-03  SZA-2018   6.00   6.00   6.00   6.00   6.00    1   6.00\n198  2022-03-03  SZA-2019   6.88    NaN    NaN    NaN   6.88    0   0.00\n199  2022-03-03  SZA-2020   4.78    NaN    NaN    NaN   4.78    0   0.00\n```\n\n#### 碳排放权-国际\n\n接口: energy_carbon_eu\n\n目标地址: http://www.cerx.cn/dailynewsOuter/index.htm\n\n描述: 深圳碳排放交易所-国际碳情\n\n限量: 返回从 2018-03-13 至 2020-04-29 的所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 交易日期   | object  | -   |\n| 市场交易指数 | object  | -   |\n| 开盘价    | float64 | -   |\n| 最高价    | float64 | -   |\n| 最低价    | float64 | -   |\n| 成交均价   | float64 | -   |\n| 收盘价    | float64 | -   |\n| 成交量    | int64   | -   |\n| 成交额    | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nenergy_carbon_eu_df = ak.energy_carbon_eu()\nprint(energy_carbon_eu_df)\n```\n\n数据示例\n\n```\n      交易日期 市场交易指数  开盘价  最高价  最低价  成交均价    收盘价  成交量  成交额\n0     2018-03-13  欧盟EUA  NaN  NaN  NaN   NaN  11.40  15880000.0  NaN\n1     2018-03-13  欧盟CER  NaN  NaN  NaN   NaN   0.19         NaN  NaN\n2     2018-03-14  欧盟EUA  NaN  NaN  NaN   NaN  11.18  17926000.0  NaN\n3     2018-03-14  欧盟CER  NaN  NaN  NaN   NaN   0.19      3000.0  NaN\n4     2018-03-15  欧盟EUA  NaN  NaN  NaN   NaN  11.19  17290000.0  NaN\n          ...    ...  ...  ...  ...   ...    ...         ...  ...\n997   2020-04-27  欧盟CER  NaN  NaN  NaN   NaN   0.24      1000.0  NaN\n998   2020-04-28  欧盟EUA  NaN  NaN  NaN   NaN  20.21  21249000.0  NaN\n999   2020-04-28  欧盟CER  NaN  NaN  NaN   NaN   0.25      1000.0  NaN\n1000  2020-04-29  欧盟EUA  NaN  NaN  NaN   NaN  20.19  18621000.0  NaN\n1001  2020-04-29  欧盟CER  NaN  NaN  NaN   NaN   0.25     96000.0  NaN\n```\n\n#### 碳排放权-湖北\n\n接口: energy_carbon_hb\n\n目标地址: http://www.cerx.cn/dailynewsOuter/index.htm\n\n描述: 湖北碳排放权交易中心-碳排放权交易数据\n\n限量: 返回从 2014-04-02 至今的所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 日期  | object  | -  |\n| 成交价 | float64 | -  |\n| 成交量 | float64 | -  |\n| 最新  | float64 | -  |\n| 涨跌  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nenergy_carbon_hb_df = ak.energy_carbon_hb()\nprint(energy_carbon_hb_df)\n```\n\n数据示例\n\n```\n          日期    成交价    成交量   最新   涨跌\n0     2014-04-02  21.00  510020.0  0.0  0.0\n1     2014-04-03  24.20   51468.0  0.0  0.0\n2     2014-04-04  26.61  304125.0  0.0  0.0\n3     2014-04-08  26.57  112057.0  0.0  0.0\n4     2014-04-09  25.07   77473.0  0.0  0.0\n...          ...    ...       ...  ...  ...\n2433  2024-06-03  41.72    1314.0  0.0  0.0\n2434  2024-06-04  42.01    3260.0  0.0  0.0\n2435  2024-06-05  42.09    7031.0  0.0  0.0\n2436  2024-06-06  41.97    3691.0  0.0  0.0\n2437  2024-06-07  42.41   17613.0  0.0  0.0\n[2438 rows x 5 columns]\n```\n\n#### 碳排放权-广州\n\n接口: energy_carbon_gz\n\n目标地址: http://www.cnemission.com/article/hqxx/\n\n描述: 广州碳排放权交易中心-行情信息\n\n限量: 该接口返回从 2013-12-19 至今的所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 日期   | object  | -       |\n| 品种   | object  | -       |\n| 开盘价  | float64 | -       |\n| 收盘价  | float64 | -       |\n| 最高价  | float64 | -       |\n| 最低价  | float64 | -       |\n| 涨跌   | float64 | -       |\n| 涨跌幅  | float64 | 注意单位: % |\n| 成交数量 | int64   | -       |\n| 成交金额 | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nenergy_carbon_gz_df = ak.energy_carbon_gz()\nprint(energy_carbon_gz_df)\n```\n\n数据示例\n\n```\n          日期    品种    开盘价    收盘价  ...    涨跌   涨跌幅    成交数量        成交金额\n0     2013-12-19  GDEA  60.00  60.17  ...  0.17  0.28  120029  7221740.00\n1     2013-12-20  GDEA  60.17  60.00  ... -0.17 -0.28     100     6000.00\n2     2014-03-11  GDEA  60.00  60.00  ...  0.00  0.00    5242   314520.00\n3     2014-03-14  GDEA  60.00  63.00  ...  3.00  5.00     200    12600.00\n4     2014-03-17  GDEA  63.00  65.00  ...  2.00  3.17     100     6500.00\n          ...   ...    ...    ...  ...   ...   ...     ...         ...\n1718  2022-02-28  GDEA  72.24  71.38  ... -0.86 -1.19    9468   675792.95\n1719  2022-03-01  GDEA  71.38  69.44  ... -1.94 -2.72    3239   224927.37\n1720  2022-03-02  GDEA  69.44  69.57  ...  0.13  0.19   18551  1290675.12\n1721  2022-03-03  GDEA  69.57  66.95  ... -2.62 -3.77  135661  8450773.49\n1722  2022-03-04  GDEA  66.95  66.80  ... -0.15 -0.22    8042   537213.18\n```\n\n### 中国油价\n\n#### 汽柴油历史调价信息\n\n接口: energy_oil_hist\n\n目标地址: https://data.eastmoney.com/cjsj/oil_default.html\n\n描述: 东方财富-数据中心-中国油价-汽柴油历史调价信息\n\n限量: 单次返回中国油价的所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述        |\n|------|---------|-----------|\n| 调整日期 | object  | 价格调整的日期   |\n| 汽油价格 | int64   | 注意单位: 元/吨 |\n| 柴油价格 | int64   | 注意单位: 元/吨 |\n| 汽油涨幅 | float64 | 注意单位: 元/吨 |\n| 柴油涨幅 | float64 | 注意单位: 元/吨 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nenergy_oil_hist_df = ak.energy_oil_hist()\nprint(energy_oil_hist_df)\n```\n\n数据示例\n\n```\n     调整日期  汽油价格  柴油价格   汽油涨跌   柴油涨跌\n0    2000-06-06  2935  2430    NaN    NaN\n1    2000-07-15  3135  2610  200.0  180.0\n2    2000-08-18  3405  2770  270.0  160.0\n3    2000-09-20  3615  3070  210.0  300.0\n4    2000-10-20  3435  3440 -180.0  370.0\n..          ...   ...   ...    ...    ...\n272  2023-11-22  9100  8055 -340.0 -330.0\n273  2023-12-06  9045  8005  -55.0  -50.0\n274  2023-12-20  8630  7605 -415.0 -400.0\n275  2024-01-04  8830  7795  200.0  190.0\n276  2024-01-18  8780  7745  -50.0  -50.0\n[277 rows x 5 columns]\n```\n\n#### 地区油价\n\n接口: energy_oil_detail\n\n目标地址: https://data.eastmoney.com/cjsj/oil_default.html\n\n描述: 东方财富-数据中心-中国油价-地区油价\n\n限量: 返回指定调价日的全国各地区的油价的历史数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                              |\n|------|-----|-----------------------------------------------------------------|\n| date | str | date=\"20200319\"; 此日期为调价日期, 通过调用 ak.energy_oil_hist() 可以获取历史调价日期 |\n\n输出参数\n\n| 名称     | 类型      | 描述                    |\n|--------|---------|-----------------------|\n| 日期     | object  | 价格调整的日期               |\n| 地区     | object  | 地区                    |\n| V_0    | float64 | 0#柴油价格(单位:元/升)        |\n| V_92   | float64 | 92#汽油价格(单位:元/升)       |\n| V_95   | float64 | 95#汽油价格(单位:元/升)       |\n| V_89   | float64 | 89#汽油价格(单位:元/升)       |\n| ZDE_0  | float64 | 0#柴油涨幅(单位:元/升)        |\n| ZDE_92 | float64 | 92#汽油涨幅(单位:元/升)       |\n| ZDE_95 | float64 | 95#汽油涨幅(单位:元/升)       |\n| ZDE_89 | float64 | 89#汽油涨幅(单位:元/升)       |\n| QE_0   | float64 | 上一次调整时0#柴油价格(单位:元/升)  |\n| QE_92  | float64 | 上一次调整时92#汽油价格(单位:元/升) |\n| QE_95  | float64 | 上一次调整时95#汽油价格(单位:元/升) |\n| QE_89  | float64 | 上一次调整时89#汽油价格(单位:元/升) |\n\n接口示例\n\n```python\nimport akshare as ak\n\nenergy_oil_detail_df = ak.energy_oil_detail(date=\"20240118\")\nprint(energy_oil_detail_df)\n```\n\n数据示例\n\n```\n            日期   地区       V_0      V_92  ...      QE_0     QE_92     QE_95     QE_89\n0   2024-01-18   上海  7.300000  8.120000  ...  7.340000  7.670000  8.160000  7.150000\n1   2024-01-18   云南  7.391245  8.382528  ...  7.433895  7.850000  8.425648  7.229800\n2   2024-01-18  内蒙古  7.190000  8.110000  ...  7.230000  7.640000  8.150000       NaN\n3   2024-01-18   北京  7.370000  8.160000  ...  7.410000  7.700000  8.200000  7.210000\n4   2024-01-18   吉林  7.240000  8.230000  ...  7.280000  7.670000  8.270000       NaN\n5   2024-01-18   四川  7.370000  8.290000  ...  7.410000  7.800000  8.340000  7.240000\n6   2024-01-18   天津  7.320000  8.090000  ...  7.360000  7.700000  8.130000  7.140000\n7   2024-01-18   宁夏  7.200000  7.990000  ...  7.250000  7.600000  8.030000  7.170000\n8   2024-01-18   安徽  7.360000  8.160000  ...  7.400000  7.660000  8.200000  7.180000\n9   2024-01-18   山东  7.230000  8.180000  ...  7.280000  7.670000  8.230000  7.120000\n10  2024-01-18   山西  7.390000  8.220000  ...  7.430000  7.650000  8.260000  7.160000\n11  2024-01-18   广东  7.330000  8.320000  ...  7.370000  7.720000  8.370000  7.170000\n12  2024-01-18   广西  7.380000  8.340000  ...  7.420000  7.760000  8.390000  7.230000\n13  2024-01-18   新疆  7.100000  8.010000  ...  7.140000  7.530000  8.050000       NaN\n14  2024-01-18   江苏  7.280000  8.120000  ...  7.320000  7.670000  8.160000  7.190000\n15  2024-01-18   江西  7.370000  8.180000  ...  7.410000  7.660000  8.230000  7.120000\n16  2024-01-18   河北  7.320000  8.090000  ...  7.360000  7.700000  8.130000  7.140000\n17  2024-01-18   河南  7.300000  8.190000  ...  7.350000  7.710000  8.230000       NaN\n18  2024-01-18   浙江  7.300000  8.120000  ...  7.340000  7.670000  8.160000  7.120000\n19  2024-01-18   海南  7.400000  9.320000  ...  7.450000  8.820000  9.370000  8.130000\n20  2024-01-18   湖北  7.310000  8.210000  ...  7.350000  7.710000  8.260000       NaN\n21  2024-01-18   湖南  7.385677  8.093585  ...  7.428818  7.653788  8.135849  7.172131\n22  2024-01-18   甘肃  7.220000  8.180000  ...  7.260000  7.700000  8.220000  7.120000\n23  2024-01-18   福建  7.310000  8.150000  ...  7.350000  7.670000  8.190000  7.140000\n24  2024-01-18   西藏  7.860000  9.030000  ...  7.900000  8.580000  9.080000  8.100000\n25  2024-01-18   贵州  7.420000  8.230000  ...  7.470000  7.830000  8.280000  7.390000\n26  2024-01-18   辽宁  7.220000  8.300000  ...  7.260000  7.850000  8.350000       NaN\n27  2024-01-18   重庆  7.390000  8.160000  ...  7.430000  7.770000  8.210000  7.340000\n28  2024-01-18   陕西  7.210000  7.980000  ...  7.250000  7.590000  8.020000  7.160000\n29  2024-01-18   青海  7.240000  8.170000  ...  7.280000  7.660000  8.210000  7.190000\n30  2024-01-18  黑龙江  7.160000  8.210000  ...  7.210000  7.730000  8.250000       NaN\n[31 rows x 14 columns]\n```\n"
  },
  {
    "path": "docs/data/event/event.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 迁徙数据\n\n### 迁徙数据-百度\n\n#### 迁入与迁出地详情\n\n接口: migration_area_baidu\n\n目标地址: https://qianxi.baidu.com/?from=shoubai#city=0\n\n描述: 百度-百度地图慧眼-百度迁徙-迁入/迁出地数据接口\n\n限量: 单次返回前 100 个城市的数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                          |\n|-----------|-----|-------------------------------------------------------------|\n| area      | str | area=\"乌鲁木齐市\", 输入需要查询的省份或者城市, 都需要用全称, 比如: \"浙江省\", \"乌鲁木齐市\"     |\n| indicator | str | indicator=\"move_in\", 返回迁入地详情, indicator=\"move_out\", 返回迁出地详情 |\n| date      | str | date=\"20230922\", 需要滞后一天                                     |\n\n输出参数\n\n| 名称            | 类型      | 描述       |\n|---------------|---------|----------|\n| city_name     | object  | 城市名称     |\n| province_name | object  | 所属省份     |\n| value         | float64 | 迁徙规模, 比例 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmigration_area_baidu_df = ak.migration_area_baidu(area=\"重庆市\", indicator=\"move_in\", date=\"20230922\")\nprint(migration_area_baidu_df)\n```\n\n数据示例\n\n```\n     city_name province_name  value\n0          苏州市           江苏省  24.43\n1          嘉兴市           浙江省   6.46\n2          杭州市           浙江省   5.09\n3          南通市           江苏省   4.94\n4          无锡市           江苏省   3.90\n..         ...           ...    ...\n95         淄博市           山东省   0.10\n96  恩施土家族苗族自治州           湖北省   0.10\n97         惠州市           广东省   0.10\n98         汕头市           广东省   0.10\n99     大理白族自治州           云南省   0.10\n[100 rows x 3 columns]\n```\n\n#### 迁徙规模\n\n接口: migration_scale_baidu\n\n目标地址: https://qianxi.baidu.com/?from=shoubai#city=0\n\n描述: 百度-百度地图慧眼-百度迁徙-迁徙规模\n\n- 迁徙规模指数：反映迁入或迁出人口规模，城市间可横向对比\n- 城市迁徙边界采用该城市行政区划，包含该城市管辖的区、县、乡、村\n\n限量: 单次返回所有迁徙规模数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                          |\n|-----------|-----|-------------------------------------------------------------|\n| area      | str | area=\"广州市\", 输入需要查询的省份或者城市, 都需要用全称, 比如: \"浙江省\", \"乌鲁木齐市\"       |\n| indicator | str | indicator=\"move_in\", 返回迁入地详情, indicator=\"move_out\", 返回迁出地详情 |\n\n输出参数\n\n| 名称     | 类型      | 描述     |\n|--------|---------|--------|\n| 日期     | object  | -      |\n| 迁徙规模指数 | float64 | 定义参见百度 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmigration_scale_baidu_df = ak.migration_scale_baidu(area=\"广州市\", indicator=\"move_in\")\nprint(migration_scale_baidu_df)\n```\n\n数据示例\n\n```\n         日期     迁徙规模指数\n0     2019-01-12   8.413535\n1     2019-01-13   7.877218\n2     2019-01-14   8.920660\n3     2019-01-15   7.426858\n4     2019-01-16   7.339183\n          ...        ...\n1100  2023-09-18  13.620539\n1101  2023-09-19   9.761666\n1102  2023-09-20   9.755867\n1103  2023-09-21  10.397938\n1104  2023-09-22  10.492319\n[1105 rows x 2 columns]\n```\n"
  },
  {
    "path": "docs/data/fund/fund_private.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 私募基金数据\n\n### 中国证券投资基金业协会\n\n#### 会员信息\n\n##### 会员机构综合查询\n\n接口: amac_member_info\n\n目标地址: https://gs.amac.org.cn/amac-infodisc/res/pof/member/index.html\n\n描述: 中国证券投资基金业协会-信息公示-会员信息-会员机构综合查询\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称       | 类型     | 描述 |\n|----------|--------|----|\n| 机构（会员）名称 | object | -  |\n| 会员代表     | object | -  |\n| 会员类型     | object | -  |\n| 会员编号     | object | -  |\n| 入会时间     | object | -  |\n| 机构类型     | object | -  |\n| 是否星标     | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\namac_member_info_df = ak.amac_member_info()\nprint(amac_member_info_df)\n```\n\n数据示例\n\n```\n          机构（会员）名称 会员代表  会员类型          会员编号        入会时间            机构类型 是否星标\n0         天相投资顾问有限公司  林义相  联席会员  LX1800000144  2012-06-06            其他机构    N\n1         国泰基金管理有限公司  周向勇  普通会员  PT0100000001  2012-06-06        公募基金管理公司    Y\n2       南方基金管理股份有限公司  杨小松  普通会员  PT0100000002  2012-06-06        公募基金管理公司    Y\n3         华夏基金管理有限公司  李一梅  普通会员  PT0100000003  2012-06-06        公募基金管理公司    Y\n4         华安基金管理有限公司  张霄岭  普通会员  PT0100000004  2012-06-06        公募基金管理公司    Y\n              ...  ...   ...           ...         ...             ...  ...\n4858  南通乐洵私募基金管理有限公司  胡爱文  观察会员  GC1900033127  2024-03-25     私募证券投资基金管理人    N\n4859  上海瀛赐私募基金管理有限公司   黄振  观察会员  GC1900033128  2024-03-25     私募证券投资基金管理人    N\n4860  合肥高新资本创业投资有限公司  吴玉麟  观察会员  GC1900033129  2024-03-25  私募股权、创业投资基金管理人    N\n4861    上海涌见资产管理有限公司   张阳  观察会员  GC1900033130  2024-03-25     私募证券投资基金管理人    N\n4862    深圳布谷资本管理有限公司  林三秀  观察会员  GC1900033131  2024-03-25     私募证券投资基金管理人    N\n[4863 rows x 7 columns]\n```\n\n#### 从业人员信息\n\n##### 基金从业人员资格注册信息\n\n接口: amac_person_fund_org_list\n\n目标地址: https://gs.amac.org.cn/amac-infodisc/res/pof/person/personOrgList.html\n\n描述: 中国证券投资基金业协会-信息公示-从业人员信息-基金从业人员资格注册信息\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                                                                                                                                                                                                                         |\n|--------|-----|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"公募基金管理公司\"; choice of {\"公募基金管理公司\", \"公募基金管理公司资管子公司\", \"商业银行\", \"证券公司\", \"证券公司子公司\", \"私募基金管理人\", \"保险公司子公司\", \"保险公司\", \"外包服务机构\", \"期货公司\", \"期货公司资管子公司\", \"媒体机构\", \"证券投资咨询机构\", \"评价机构\", \"外资私募证券基金管理人\", \"支付结算\", \"独立服务机构\", \"地方自律组织\", \"境外机构\", \"律师事务所\", \"会计师事务所\", \"交易所\", \"独立第三方销售机构\", \"证券公司资管子公司\", \"证券公司私募基金子公司\", \"其他\"} |\n\n输出参数\n\n| 名称       | 类型     | 描述  |\n|----------|--------|-----|\n| 序号       | int64  | -   |\n| 机构名称     | object | -   |\n| 员工人数     | object | -   |\n| 基金从业资格   | int64  | -   |\n| 基金销售业务资格 | int64  | -   |\n| 基金经理     | int64  | -   |\n| 投资经理     | int64  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\namac_person_fund_org_list_df = ak.amac_person_fund_org_list(symbol=\"公募基金管理公司\")\nprint(amac_person_fund_org_list_df)\n```\n\n数据示例\n\n```\n    序号            机构名称      机构类型  员工人数  基金从业资格  基金销售业务资格  基金经理  投资经理\n0      1      安信基金管理有限责任公司  公募基金管理公司   234     233         0    19    33\n1      2        百嘉基金管理有限公司  公募基金管理公司    42      42         0     2     2\n2      3        宝盈基金管理有限公司  公募基金管理公司   180     176         0     8    16\n3      4  北京京管泰富基金管理有限责任公司  公募基金管理公司    47      47         0     3     2\n4      5       贝莱德基金管理有限公司  公募基金管理公司   100     100         0     3     8\n..   ...               ...       ...   ...     ...       ...   ...   ...\n141  142      中信保诚基金管理有限公司  公募基金管理公司   210     207         0    11    26\n142  143      中信建投基金管理有限公司  公募基金管理公司   198     198         0     9    19\n143  144        中银基金管理有限公司  公募基金管理公司   407     407         0    15    45\n144  145    中邮创业基金管理股份有限公司  公募基金管理公司   207     207         0     6    21\n145  146        朱雀基金管理有限公司  公募基金管理公司    90      90         0     9     8\n[146 rows x 8 columns]\n```\n\n##### 债券投资交易相关人员公示\n\n接口: amac_person_bond_org_list\n\n目标地址: https://gs.amac.org.cn/amac-infodisc/res/pof/person/personOrgList.html\n\n描述: 中国证券投资基金业协会-信息公示-从业人员信息-债券投资交易相关人员公示\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| 序号   | int64  | -   |\n| 机构类型 | object | -   |\n| 机构名称 | object | -   |\n| 公示网址 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\namac_person_bond_org_list_df = ak.amac_person_bond_org_list()\nprint(amac_person_bond_org_list_df)\n```\n\n数据示例\n\n```\n      序号  ...                                               公示网址\n0      1  ...  https://www.essencefund.com/mall/views/custser...\n1      2  ...  http://www.baijiafunds.com.cn/aboutus/annnounc...\n2      3  ...  http://www.byfunds.com/baoying/aboutus/about-u...\n3      4  ...  http://www.cdbsfund.com/main/gywm/zzcx/index.s...\n4      5  ...  https://www.bxrfund.com/#/list?menuid=10129&se...\n..   ...  ...                                                ...\n302  303  ...     https://www.citicsam.com/nformation/personnel/\n303  304  ...  https://www.tkfunds.com.cn/aboutus/bondstaff/i...\n304  305  ...  http://fund.piccamc.com/pc/newsInfo/articleInf...\n305  306  ...         http://www.ebscn.com/gdzb/views/index.html\n306  307  ...         https://hs.guosen.com.cn/hs/xxgs_zqjy.html\n[307 rows x 4 columns]\n```\n\n#### 私募基金管理人公示\n\n##### 私募基金管理人综合查询\n\n接口: amac_manager_info\n\n目标地址: https://gs.amac.org.cn/amac-infodisc/res/pof/manager/index.html\n\n描述: 中国证券投资基金业协会-信息公示-私募基金管理人公示-私募基金管理人综合查询\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称                    | 类型     | 描述 |\n|-----------------------|--------|----|\n| 私募基金管理人名称             | object | -  |\n| 法定代表人/执行事务合伙人(委派代表)姓名 | object | -  |\n| 机构类型                  | object | -  |\n| 注册地                   | object | -  |\n| 登记编号                  | object | -  |\n| 成立时间                  | object | -  |\n| 登记时间                  | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\namac_manager_info_df = ak.amac_manager_info()\nprint(amac_manager_info_df)\n```\n\n数据示例\n\n```\n              私募基金管理人名称 法定代表人/执行事务合伙人(委派代表)姓名  ...        成立时间        登记时间\n0      平安道远投资管理（上海）有限公司                    王博  ...  2011-03-15  2014-03-17\n1        上海重阳投资管理股份有限公司                    王庆  ...  2009-06-26  2014-03-17\n2          上海景林资产管理有限公司                   高云程  ...  2012-06-06  2014-03-17\n3        富舜资产管理（上海）有限公司                    周楠  ...  2012-02-10  2014-03-17\n4            深圳民森投资有限公司                    蔡明  ...  2007-04-05  2014-03-17\n                 ...                   ...  ...         ...         ...\n21087  汉领（上海）私募基金管理有限公司                   夏明晨  ...  2022-09-07  2024-03-18\n21088    青岛亿洋创业投资管理有限公司                   陆游龙  ...  2024-02-05  2024-03-25\n21089    广州山岳私募基金管理有限公司                    柯声  ...  2023-08-15  2024-03-25\n21090   东莞市生技私募基金管理有限公司                    肖丹  ...  2022-10-28  2024-04-01\n21091  湖北农发创业投资基金管理有限公司                    熊赟  ...  2023-08-21  2024-04-01\n[21092 rows x 7 columns]\n```\n\n##### 私募基金管理人分类公示\n\n接口: amac_manager_classify_info\n\n目标地址: https://gs.amac.org.cn/amac-infodisc/res/pof/manager/managerList.html\n\n描述: 中国证券投资基金业协会-信息公示-私募基金管理人公示-私募基金管理人分类公示\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称                    | 类型     | 描述  |\n|-----------------------|--------|-----|\n| 私募基金管理人名称             | object | -   |\n| 法定代表人/执行事务合伙人(委派代表)姓名 | object | -   |\n| 机构类型                  | object | -   |\n| 登记编号                  | object | -   |\n| 注册地                   | object | -   |\n| 办公地                   | object | -   |\n| 成立时间                  | object | -   |\n| 登记时间                  | object | -   |\n| 在管基金数量                | int64  | -   |\n| 会员类型                  | object | -   |\n| 是否有提示信息               | object | -   |\n| 是否有诚信信息               | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\namac_manager_classify_info_df = ak.amac_manager_classify_info()\nprint(amac_manager_classify_info_df)\n```\n\n数据示例\n\n```\n        私募基金管理人名称 法定代表人/执行事务合伙人(委派代表)姓名  ... 是否有提示信息 是否有诚信信息\n0      平安道远投资管理（上海）有限公司                    王博  ...       是       否\n1        上海重阳投资管理股份有限公司                    王庆  ...       否       否\n2          上海景林资产管理有限公司                   高云程  ...       是       否\n3        富舜资产管理（上海）有限公司                    周楠  ...       是       否\n4            深圳民森投资有限公司                    蔡明  ...       否       否\n                 ...                   ...  ...     ...     ...\n21087  汉领（上海）私募基金管理有限公司                   夏明晨  ...       是       否\n21088    青岛亿洋创业投资管理有限公司                   陆游龙  ...       是       否\n21089    广州山岳私募基金管理有限公司                    柯声  ...       是       否\n21090   东莞市生技私募基金管理有限公司                    肖丹  ...       是       否\n21091  湖北农发创业投资基金管理有限公司                    熊赟  ...       是       否\n[21092 rows x 12 columns]\n```\n\n##### 证券公司私募基金子公司管理人信息公示\n\n接口: amac_member_sub_info\n\n目标地址: https://gs.amac.org.cn/amac-infodisc/res/pof/member/index.html?primaryInvestType=private\n\n描述: 中国证券投资基金业协会-信息公示-私募基金管理人公示-证券公司私募基金子公司管理人信息公示\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称       | 类型     | 描述 |\n|----------|--------|----|\n| 机构（会员）名称 | object | -  |\n| 会员代表     | object | -  |\n| 会员类型     | object | -  |\n| 会员编号     | object | -  |\n| 入会时间     | object | -  |\n| 公司类型     | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\namac_member_sub_info_df = ak.amac_member_sub_info()\nprint(amac_member_sub_info_df)\n```\n\n数据示例\n\n```\n          机构（会员）名称 会员代表  会员类型          会员编号        入会时间            公司类型\n0         天相投资顾问有限公司  林义相  联席会员  LX1800000144  2012-06-06            其他机构\n1         国泰基金管理有限公司  周向勇  普通会员  PT0100000001  2012-06-06        公募基金管理公司\n2       南方基金管理股份有限公司  杨小松  普通会员  PT0100000002  2012-06-06        公募基金管理公司\n3         华夏基金管理有限公司  李一梅  普通会员  PT0100000003  2012-06-06        公募基金管理公司\n4         华安基金管理有限公司  张霄岭  普通会员  PT0100000004  2012-06-06        公募基金管理公司\n              ...  ...   ...           ...         ...             ...\n4858  南通乐洵私募基金管理有限公司  胡爱文  观察会员  GC1900033127  2024-03-25     私募证券投资基金管理人\n4859  上海瀛赐私募基金管理有限公司   黄振  观察会员  GC1900033128  2024-03-25     私募证券投资基金管理人\n4860  合肥高新资本创业投资有限公司  吴玉麟  观察会员  GC1900033129  2024-03-25  私募股权、创业投资基金管理人\n4861    上海涌见资产管理有限公司   张阳  观察会员  GC1900033130  2024-03-25     私募证券投资基金管理人\n4862    深圳布谷资本管理有限公司  林三秀  观察会员  GC1900033131  2024-03-25     私募证券投资基金管理人\n[4863 rows x 6 columns]\n```\n\n#### 基金产品\n\n##### 私募基金管理人基金产品\n\n接口: amac_fund_info\n\n目标地址: https://gs.amac.org.cn/amac-infodisc/res/pof/fund/index.html\n\n描述: 中国证券投资基金业协会-信息公示-基金产品公示-私募基金管理人基金产品\n\n限量: 单次返回指定页码之间的所有历史数据, 其中与每页 100 条的目标网站对应; 默认返回所有数据\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| start_page | str | start_page='1'; 开始页码  |\n| end_page   | str | end_page=\"2000\"; 结束页码 |\n\n输出参数\n\n| 名称        | 类型     | 描述 |\n|-----------|--------|----|\n| 基金名称      | object | -  |\n| 私募基金管理人名称 | object | -  |\n| 私募基金管理人类型 | object | -  |\n| 运行状态      | object | -  |\n| 备案时间      | object | -  |\n| 建立时间      | object | -  |\n| 托管人名称     | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\namac_fund_info_df = ak.amac_fund_info(start_page=\"1\", end_page='100')\nprint(amac_fund_info_df)\n```\n\n数据示例\n\n```\n                          基金名称           私募基金管理人名称  ...        建立时间           托管人名称\n0               长安万丰贯富4号资产管理计划      上海万丰友方投资管理有限公司  ...  2013-09-22  上海浦东发展银行股份有限公司\n1              红塔红土基金—翼虎量化对冲二期       深圳市翼虎投资管理有限公司  ...  2013-02-08      上海银行股份有限公司\n2             万家正行季季加利专项资产管理计划    歌斐诺宝（上海）资产管理有限公司  ...  2013-03-11      兴业银行股份有限公司\n3           指财通基金-耀之债期1号资产管理计划  上海耀之私募基金管理中心（有限合伙）  ...  2013-11-06    中国光大银行股份有限公司\n4     万家共赢歌斐诺宝精选组合3号三期专项资产管理计划    歌斐诺宝（上海）资产管理有限公司  ...  2014-01-13      宁波银行股份有限公司\n                        ...                 ...  ...         ...             ...\n9995          景泰复利回报第十五期证券投资基金     深圳市景泰利丰投资发展有限公司  ...  2015-04-23      交通银行股份有限公司\n9996       浙商证券-望正诚朴1号私募证券投资基金        深圳望正资产管理有限公司  ...  2015-05-19      交通银行股份有限公司\n9997                  持赢复利1期基金      南京持赢私募基金管理有限公司  ...  2015-05-01      南京银行股份有限公司\n9998              惠正创富私募证券投资基金      广东惠正私募基金管理有限公司  ...  2015-05-27      招商证券股份有限公司\n9999        恒天财富稳增金狮1号灵活策略对冲基金        恒天中岩投资管理有限公司  ...  2015-05-20      中信证券股份有限公司\n[10000 rows x 7 columns]\n```\n\n##### 证券公司集合资管产品公示\n\n接口: amac_securities_info\n\n目标地址: https://gs.amac.org.cn/amac-infodisc/res/pof/securities/index.html\n\n描述: 中国证券投资基金业协会-信息公示-基金产品公示-证券公司集合资管产品公示\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称    | 类型     | 描述 |\n|-------|--------|----|\n| 产品名称  | object | -  |\n| 产品编码  | object | -  |\n| 管理人名称 | object | -  |\n| 成立日期  | object | -  |\n| 到期时间  | object | -  |\n| 投资类型  | object | -  |\n| 是否分级  | object | -  |\n| 托管人名称 | object | -  |\n| 备案日期  | object | -  |\n| 运作状态  | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\namac_securities_info_df = ak.amac_securities_info()\nprint(amac_securities_info_df)\n```\n\n数据示例\n\n```\n                                  产品名称    产品编码  ...        备案日期  运作状态\n0      华泰拉普拉斯家园1号科创板员工持股集合资产管理计划  SAHB48  ...  2024-04-03  正在运作\n1             国泰君安君享兴盈1号集合资产管理计划  SAJN14  ...  2024-04-02  正在运作\n2          方正证券满盈12M003号集合资产管理计划  SAHT72  ...  2024-04-02  正在运作\n3             光证资管渝选增强1号集合资产管理计划  SAJM87  ...  2024-04-03  正在运作\n4            华源证券安鑫周周盈3号集合资产管理计划  SAJN58  ...  2024-04-02  正在运作\n                          ...     ...  ...         ...   ...\n20286           申银万国宝鼎1期集合资产管理计划  S00792  ...  2013-05-07  正在运作\n20287       东方红-先锋2号（展期）集合资产管理计划  S00052  ...  2013-05-07  正在运作\n20288           光证资管添盈1号集合资产管理计划  S08647  ...  2013-08-20  正在运作\n20289               中金一号集合资产管理计划  S00773  ...  2013-07-01  提前清算\n20290            东方红先锋1号集合资产管理计划  S00844  ...  2013-05-07  正在运作\n[20291 rows x 10 columns]\n```\n\n##### 证券公司直投基金\n\n接口: amac_aoin_info\n\n目标地址: https://gs.amac.org.cn/amac-infodisc/res/aoin/product/index.html\n\n描述: 中国证券投资基金业协会-信息公示-基金产品公示-证券公司直投基金\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称    | 类型     | 描述 |\n|-------|--------|----|\n| 产品编码  | object | -  |\n| 产品名称  | object | -  |\n| 直投子公司 | object | -  |\n| 管理机构  | object | -  |\n| 设立日期  | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\namac_aoin_info_df = ak.amac_aoin_info()\nprint(amac_aoin_info_df)\n```\n\n数据示例\n\n```\n       产品编码                             产品名称  ...                  管理机构       设立日期\n0    S32077            深圳市远盛发展一期股权投资企业（有限合伙）  ...         深圳市远盛投资管理有限公司 2012-12-26\n1    S32105             新疆华融天泽鼎鑫投资合伙企业（有限合伙）  ...            华融天泽投资有限公司 2013-03-14\n2    S32073               新疆广发信德广电夹层投资有限合伙企业  ...      新疆广发信德稳胜投资管理有限公司 2013-03-25\n3    S32644             吉林省国家新材料产业创业投资有限责任公司  ...      北京一创吉星创业投资管理有限公司 2013-05-24\n4    S32067                 赣州致发投资合伙企业（有限合伙）  ...        江西致远发展投资管理有限公司 2013-07-09\n..      ...                              ...  ...                   ...        ...\n219  S32563             桂银柳江新型城镇化城市发展契约型私募基金  ...        贵州兴黔财富资本管理有限公司 2017-06-30\n220  S32630                       兴黔一号私募投资基金  ...        贵州兴黔财富资本管理有限公司 2017-07-13\n221  S32557                 南宁交轨投资合伙企业（有限合伙）  ...        贵州兴黔财富资本管理有限公司 2017-10-25\n222  S32565                南宁桂耀城投资合伙企业（有限合伙）  ...        贵州兴黔财富资本管理有限公司 2017-11-27\n223  S32582  深圳润信新观象战略新兴产业私募股权投资基金合伙企业（有限合伙）  ...  深圳市润信新观象股权投资基金管理有限公司 2018-04-24\n[224 rows x 5 columns]\n```\n\n##### 证券公司私募投资基金\n\n接口: amac_fund_sub_info\n\n目标地址: https://gs.amac.org.cn/amac-infodisc/res/pof/subfund/index.html\n\n描述: 中国证券投资基金业协会-信息公示-基金产品公示-证券公司私募投资基金\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称        | 类型     | 描述 |\n|-----------|--------|----|\n| 产品编码      | object | -  |\n| 产品名称      | object | -  |\n| 私募基金管理人名称 | object | -  |\n| 托管人名称     | object | -  |\n| 成立日期      | object | -  |\n| 备案日期      | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\namac_fund_sub_info_df = ak.amac_fund_sub_info()\nprint(amac_fund_sub_info_df)\n```\n\n数据示例\n\n```\n       产品编码                        产品名称  ...       成立日期       备案日期\n0     S32080          甘肃现代农业产业创业投资基金有限公司  ... 2012-12-25 2013-10-23\n1     SD6315      中信并购投资基金（深圳）合伙企业（有限合伙）  ... 2012-11-15 2014-04-09\n2     SD1670              中国－比利时直接股权投资基金  ... 2004-10-18 2014-04-17\n3     SD1807      中投长春国家光电信息创业投资基金(有限合伙）  ... 2013-08-30 2014-04-21\n4     SD2445      无锡国联领翔中小企业成长投资中心（有限合伙）  ... 2013-12-31 2014-04-22\n      ...                         ...  ...        ...        ...\n1687  SAGN06    中金辰盛（武汉）创业投资基金合伙企业（有限合伙）  ... 2024-01-12 2024-03-22\n1688  SAHR12       温州大罗山瓯财股权投资合伙企业（有限合伙）  ... 2023-05-22 2024-03-22\n1689  SAGB78   广州知城琶洲信德产业投资基金合伙企业 （有限合伙）  ... 2024-01-11 2024-03-25\n1690  SAHY41  重庆荣昌创新发展私募股权投资基金合伙企业（有限合伙）  ... 2024-03-06 2024-04-03\n1691  SAJJ25      广州智源和鑫创业投资基金合伙企业（有限合伙）  ... 2024-03-05 2024-04-03\n[1692 rows x 6 columns]\n```\n\n##### 基金公司及子公司集合资管产品公示\n\n接口: amac_fund_account_info\n\n目标地址: https://gs.amac.org.cn/amac-infodisc/res/fund/account/index.html\n\n描述: 中国证券投资基金业协会-信息公示-基金产品公示-基金公司及子公司集合资管产品公示\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称    | 类型     | 描述 |\n|-------|--------|----|\n| 成立日期  | object | -  |\n| 产品编码  | object | -  |\n| 产品名称  | object | -  |\n| 管理人名称 | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\namac_fund_account_info_df = ak.amac_fund_account_info()\nprint(amac_fund_account_info_df)\n```\n\n数据示例\n\n```\n         成立日期    产品编码                         产品名称           管理人名称\n0     2024-04-02  SAHT40          建信尊享吉康一年13号集合资产管理计划    建信基金管理有限责任公司\n1     2024-04-01  SAJA72  华夏资本-AU9999龙腾宁惠跃享6号集合资产管理计划      华夏资本管理有限公司\n2     2024-03-29  SAJL52            创金合信创力20号集合资产管理计划    创金合信基金管理有限公司\n3     2024-03-29  SAJD21          招商财富-丰利联动1号集合资产管理计划    招商财富资产管理有限公司\n4     2024-03-29  SACX99             创金合信聚睿6号集合资产管理计划    创金合信基金管理有限公司\n          ...     ...                          ...             ...\n38244        NaT  S93786              千石资本-天演5期资产管理计划  北京千石创富资本管理有限公司\n38245        NaT  ST3713        汇添富资本-添添富理财7天专项资产管理计划     汇添富资本管理有限公司\n38246        NaT  S88308         金元惠理江阴首府花园1号专项资产管理计划  上海金元百利资产管理有限公司\n38247        NaT  S92026          中银资产-信利系列5号专项资产管理计划      中银资产管理有限公司\n38248        NaT  S88283         金元惠理延安保障房12号专项资产管理计划  上海金元百利资产管理有限公司\n[38249 rows x 4 columns]\n```\n\n##### 资产支持专项计划\n\n接口: amac_fund_abs\n\n目标地址: https://gs.amac.org.cn/amac-infodisc/res/fund/abs/index.html\n\n描述: 中国证券投资基金业协会-信息公示-产品公示-资产支持专项计划\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称     | 类型     | 描述 |\n|--------|--------|----|\n| 编号     | int64  | -  |\n| 备案编号   | object | -  |\n| 专项计划全称 | object | -  |\n| 管理人    | object | -  |\n| 托管人    | object | -  |\n| 成立日期   | object | -  |\n| 预期到期时间 | object | -  |\n| 备案通过时间 | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\namac_fund_abs_df = ak.amac_fund_abs()\nprint(amac_fund_abs_df)\n```\n\n数据示例\n\n```\n      编号  备案编号  ...   预期到期时间  备案通过时间\n0        1  S29340  ...  2018-02-15  2015-04-23\n1        2  S33309  ...  2020-01-22  2015-04-23\n2        3  S33578  ...  2020-04-14  2015-05-07\n3        4  S33490  ...  2020-04-13  2015-05-07\n4        5  S34510  ...  2022-03-25  2015-05-07\n    ...     ...  ...         ...         ...\n8335  8336  S37011  ...  2020-05-19  2015-06-07\n8336  8337  S38847  ...  2018-05-17  2015-06-07\n8337  8338  S39153  ...  2018-03-07  2015-06-07\n8338  8339  S38598  ...  2017-05-18  2015-06-07\n8339  8340  S37663  ...  2016-08-21  2015-06-07\n[8340 rows x 8 columns]\n```\n\n##### 期货公司集合资管产品公示\n\n接口: amac_futures_info\n\n目标地址: https://gs.amac.org.cn/amac-infodisc/res/pof/futures/index.html\n\n描述: 中国证券投资基金业协会-信息公示-基金产品公示-期货公司集合资管产品公示\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称    | 类型     | 描述 |\n|-------|--------|----|\n| 产品名称  | object | -  |\n| 产品编码  | object | -  |\n| 管理人名称 | object | -  |\n| 托管人名称 | object | -  |\n| 成立日期  | object | -  |\n| 投资类型  | object | -  |\n| 是否分级  | object | -  |\n| 备案日期  | object | -  |\n| 到期日   | object | -  |\n| 运作状态  | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\namac_futures_info_df = ak.amac_futures_info()\nprint(amac_futures_info_df)\n```\n\n数据示例\n\n```\n              产品名称    产品编码       管理人名称  ...        备案日期         到期日  运作状态\n0          大越期货高益集合资产管理计划  SAGG91  大越期货股份有限公司  ...  2024-04-03  2034-03-25  正在运作\n1        大地期货新辰一号集合资产管理计划  SAHK47    大地期货有限公司  ...  2024-03-28  2029-03-26  正在运作\n2        冠通资管兆享7号集合资产管理计划  SAHR85  冠通期货股份有限公司  ...  2024-04-03  2029-03-24  正在运作\n3        盛达期货鑫鼎1号集合资产管理计划  SAHX81    盛达期货有限公司  ...  2024-04-01  2030-03-21  正在运作\n4        华鑫期货鑫诚一号集合资产管理计划  SAFX88    华鑫期货有限公司  ...  2024-03-26  2039-03-18  正在运作\n                   ...     ...         ...  ...         ...         ...   ...\n9643       浙商期货春晓1号资产管理计划  S24005    浙商期货有限公司  ...  2015-05-21  2016-01-06  正常清算\n9644      浙商多策略精选2号资产管理计划  S24001    浙商期货有限公司  ...  2015-05-12  2015-12-24  正常清算\n9645       新湖资管稳健1号资产管理计划  S24002  新湖期货股份有限公司  ...  2015-06-01  2034-12-23  正在运作\n9646  海证期货巨杉净值线1号集合资产管理计划  S94010    海证期货有限公司  ...  2014-06-03  2033-09-04  正在运作\n9647      美尔雅-北极星1号资产管理计划  S30147    正信期货有限公司  ...  2015-06-04  2016-04-20  正常清算\n[9648 rows x 10 columns]\n```\n\n#### 诚信信息\n\n##### 已注销私募基金管理人名单\n\n接口: amac_manager_cancelled_info\n\n目标地址: https://gs.amac.org.cn/amac-infodisc/res/cancelled/manager/index.html\n\n描述: 中国证券投资基金业协会-信息公示-诚信信息-已注销私募基金管理人名单\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称       | 类型     | 描述 |\n|----------|--------|----|\n| 管理人名称    | object | -  |\n| 统一社会信用代码 | object | -  |\n| 登记时间     | object | -  |\n| 注销时间     | object | -  |\n| 注销类型     | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\namac_manager_cancelled_info_df = ak.amac_manager_cancelled_info()\nprint(amac_manager_cancelled_info_df)\n```\n\n数据示例\n\n```\n           管理人名称            统一社会信用代码        登记时间        注销时间  注销类型\n0        北京国民信和投资基金有限公司          05559209-0  2014-05-26  2015-04-07   100\n1            湖南海盟投资有限公司          68501913-3  2014-05-26  2015-04-07   100\n2      广元友利股权投资基金管理有限公司          07144608-5  2014-11-26  2015-04-07   100\n3        上海骏福股权投资基金有限公司          06784881-5  2014-06-04  2015-04-07   100\n4        上海清科凯盛投资管理有限公司          59312920-4  2014-04-23  2015-04-07   100\n                 ...                 ...         ...         ...   ...\n22267      上海津尧资产管理有限公司          34224529-4  2015-07-30  2024-04-02   100\n22268     深圳市清江基金管理有限公司  91440300335206596E  2017-07-12  2024-04-02   100\n22269      苏州宝时投资管理有限公司          31419103-0  2014-11-19  2024-04-03   100\n22270     深圳市禾瑞股权投资有限公司  91440300MA5D9XA002  2017-01-23  2024-04-03   100\n22271  中楚私募基金管理（海南）有限公司  91460200MAA95MYA9Q  2023-04-03  2024-04-04   200\n[22272 rows x 5 columns]\n```\n"
  },
  {
    "path": "docs/data/fund/fund_public.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 公募基金数据\n\n### 基金基本信息\n\n接口: fund_name_em\n\n目标地址: http://fund.eastmoney.com/fund.html\n\n描述: 东方财富网-天天基金网-基金数据-所有基金的基本信息数据\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| 基金代码 | object | -   |\n| 拼音缩写 | object | -   |\n| 基金简称 | object | -   |\n| 基金类型 | object | -   |\n| 拼音全称 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_name_em_df = ak.fund_name_em()\nprint(fund_name_em_df)\n```\n\n数据示例\n\n```\n       基金代码      拼音缩写  ...  基金类型                              拼音全称\n0      000001        HXCZHH  ...   混合型                  HUAXIACHENGZHANGHUNHE\n1      000002        HXCZHH  ...   混合型                  HUAXIACHENGZHANGHUNHE\n2      000003      ZHKZZZQA  ...   债券型           ZHONGHAIKEZHUANZHAIZHAIQUANA\n3      000004      ZHKZZZQC  ...   债券型           ZHONGHAIKEZHUANZHAIZHAIQUANC\n4      000005    JSZQXYDQZQ  ...  定开债券   JIASHIZENGQIANGXINYONGDINGQIZHAIQUAN\n       ...           ...  ...   ...                                    ...\n10223  952035     GTJAJDCHH  ...   混合型             GUOTAIJUNANJUNDECHENGHUNHE\n10224  952099    GTJAJDXHHC  ...   混合型              GUOTAIJUNANJUNDEXINHUNHEC\n10225  959991  XZJQLLXYSHHA  ...   混合型  XINGZHENGJINQILINLINGXIANYOUSHIHUNHEA\n10226  959993  XZJQLLXYSHHC  ...   混合型  XINGZHENGJINQILINLINGXIANYOUSHIHUNHEC\n10227  980003   TPYLGYGDCYZ  ...   债券型   TAIPINGYANGLIUGEYUEGUNDONGCHIYOUZHAI\n```\n\n### 基金基本信息-雪球\n\n接口: fund_individual_basic_info_xq\n\n目标地址: https://danjuanfunds.com/funding/000001\n\n描述: 雪球基金-基金详情\n\n限量: 单次返回单只基金基本信息\n\n输入参数\n\n| 名称      | 类型    | 描述                      |\n|---------|-------|-------------------------|\n| symbol  | str   | symbol=\"000001\"; 基金代码   |\n| timeout | float | timeout=None; 默认不设置超时参数 |\n\n输出参数\n\n| 名称    | 类型     | 描述 |\n|-------|--------|----|\n| item  | object | -  |\n| value | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_individual_basic_info_xq_df = ak.fund_individual_basic_info_xq(symbol=\"000001\")\nprint(fund_individual_basic_info_xq_df)\n```\n\n数据示例\n\n```\n      item                                              value\n0     基金代码                                             000001\n1     基金名称                                             华夏成长混合\n2     基金全称                                            华夏成长前收费\n3     成立时间                                         2001-12-18\n4     最新规模                                             27.30亿\n5     基金公司                                         华夏基金管理有限公司\n6     基金经理                                            王泽实 万方方\n7     托管银行                                       中国建设银行股份有限公司\n8     基金类型                                             混合型-偏股\n9     评级机构                                               晨星评级\n10    基金评级                                               一星基金\n11    投资策略  在股票投资方面，本基金重点投资于预期利润或收入具有良好增长潜力的成长型上市公司发行的股票，从...\n12    投资目标  本基金属成长型基金，主要通过投资于具有良好成长性的上市公司的股票，在保持基金资产安全性和流动...\n13  业绩比较基准                                       本基金暂不设业绩比较基准\n```\n\n### 基金基本信息-指数型\n\n接口: fund_info_index_em\n\n目标地址: http://fund.eastmoney.com/trade/zs.html\n\n描述: 东方财富网-天天基金网-基金数据-基金基本信息-指数型\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                                    |\n|-----------|-----|---------------------------------------------------------------------------------------|\n| symbol    | str | symbol=\"全部\"; choice of {\"全部\", \"沪深指数\", \"行业主题\", \"大盘指数\", \"中盘指数\", \"小盘指数\", \"股票指数\", \"债券指数\"} |\n| indicator | str | indicator=\"全部\"; choice of {\"全部\", \"被动指数型\", \"增强指数型\"}                                    |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 基金代码 | object  | -       |\n| 基金名称 | object  | -       |\n| 单位净值 | float64 | -       |\n| 日期   | object  | -       |\n| 日增长率 | float64 | 注意单位: % |\n| 近1周  | float64 | 注意单位: % |\n| 近1月  | float64 | 注意单位: % |\n| 近3月  | float64 | 注意单位: % |\n| 近6月  | float64 | 注意单位: % |\n| 近1年  | float64 | 注意单位: % |\n| 近2年  | float64 | 注意单位: % |\n| 近3年  | float64 | 注意单位: % |\n| 今年来  | float64 | 注意单位: % |\n| 成立来  | float64 | 注意单位: % |\n| 手续费  | float64 | 注意单位: % |\n| 起购金额 | object  | -       |\n| 跟踪标的 | object  | -       |\n| 跟踪方式 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_info_index_em_df = ak.fund_info_index_em(symbol=\"沪深指数\", indicator=\"增强指数型\")\nprint(fund_info_index_em_df)\n```\n\n数据示例\n\n```\n     基金代码            基金名称         单位净值    日期  ...   手续费  起购金额  跟踪标的   跟踪方式\n0    005313        万家中证1000指数增强A  1.3029  2022-07-26  ...  0.15   10元  沪深指数  增强指数型\n1    005314        万家中证1000指数增强C  1.2988  2022-07-26  ...  0.00   10元  沪深指数  增强指数型\n2    004194        招商中证1000指数增强A  1.5630  2022-07-26  ...  0.12   10元  沪深指数  增强指数型\n3    004195        招商中证1000指数增强C  1.5469  2022-07-26  ...  0.00   10元  沪深指数  增强指数型\n4    007178           浙商中华预期高股息A  1.1339  2022-07-26  ...  0.12   10元  沪深指数  增强指数型\n..      ...                  ...     ...         ...  ...   ...   ...   ...    ...\n275  015784      中信建投中证1000指数增强A  0.9946  2022-07-22  ...  0.15   10元  沪深指数  增强指数型\n276  015785      中信建投中证1000指数增强C  0.9943  2022-07-22  ...  0.00   10元  沪深指数  增强指数型\n277  015921  申万菱信国证2000指数增强型发起式A  0.9945  2022-07-22  ...  0.12   10元  沪深指数  增强指数型\n278  015148        华安中证1000指数增强A  0.9999  2022-07-22  ...  0.12   10元  沪深指数  增强指数型\n279  016134       嘉实沪深300指数研究增强C  0.9614  2022-07-26  ...  0.00   10元  沪深指数  增强指数型\n```\n\n### 基金申购状态\n\n接口: fund_purchase_em\n\n目标地址: http://fund.eastmoney.com/Fund_sgzt_bzdm.html#fcode,asc_1\n\n描述: 东方财富网站-天天基金网-基金数据-基金申购状态\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称             | 类型      | 描述      |\n|----------------|---------|---------|\n| 序号             | object  | -       |\n| 基金代码           | object  | -       |\n| 基金简称           | object  | -       |\n| 基金类型           | object  | -       |\n| 最新净值/万份收益      | float64 | -       |\n| 最新净值/万份收益-报告时间 | object  | -       |\n| 申购状态           | object  | -       |\n| 赎回状态           | object  | -       |\n| 下一开放日          | object  | -       |\n| 购买起点           | float64 | -       |\n| 日累计限定金额        | float64 | -       |\n| 手续费            | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_purchase_em_df = ak.fund_purchase_em()\nprint(fund_purchase_em_df)\n```\n\n数据示例\n\n```\n          序号    基金代码                基金简称  ... 购买起点       日累计限定金额   手续费\n0          1  000001              华夏成长混合  ...   10  1.000000e+11  0.15\n1          2  000003            中海可转债债券A  ...   10  1.000000e+10  0.08\n2          3  000004            中海可转债债券C  ...   10  1.000000e+10  0.00\n3          4  000005          嘉实增强信用定期债券  ...   10  1.000000e+11  0.08\n4          5  000006         西部利得量化成长混合A  ...   10  2.000000e+04  0.15\n      ...     ...                 ...  ...  ...           ...   ...\n14955  14956  970118        东吴裕丰6个月持有债券C  ...   10  1.000000e+11  0.00\n14956  14957  970119  兴证资管金麒麟恒睿致远一年持有混合A  ...    0  0.000000e+00  1.20\n14957  14958  970120  兴证资管金麒麟恒睿致远一年持有混合B  ...    0  0.000000e+00   NaN\n14958  14959  970121  兴证资管金麒麟恒睿致远一年持有混合C  ...    0  0.000000e+00  0.00\n14959  14960  980003         太平洋六个月滚动持有债  ...  100  1.000000e+11  0.05\n```\n\n### 基金行情\n\n#### ETF基金实时行情-东财\n\n接口: fund_etf_spot_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#fund_etf\n\n描述: 东方财富-ETF 实时行情\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 代码         | object  | -       |\n| 名称         | object  | -       |\n| 最新价        | float64 | -       |\n| IOPV实时估值   | float64 | -       |\n| 基金折价率      | float64 | 注意单位: % |\n| 涨跌额        | float64 | -       |\n| 涨跌幅        | float64 | 注意单位: % |\n| 成交量        | float64 | -       |\n| 成交额        | float64 | -       |\n| 开盘价        | float64 | -       |\n| 最高价        | float64 | -       |\n| 最低价        | float64 | -       |\n| 昨收         | float64 | -       |\n| 换手率        | float64 | -       |\n| 量比         | float64 | -       |\n| 委比         | float64 | -       |\n| 外盘         | float64 | -       |\n| 内盘         | float64 | -       |\n| 主力净流入-净额   | float64 | -       |\n| 主力净流入-净占比  | float64 | -       |\n| 超大单净流入-净额  | float64 | -       |\n| 超大单净流入-净占比 | float64 | -       |\n| 大单净流入-净额   | float64 | -       |\n| 大单净流入-净占比  | float64 | -       |\n| 中单净流入-净额   | float64 | -       |\n| 中单净流入-净占比  | float64 | -       |\n| 小单净流入-净额   | float64 | -       |\n| 小单净流入-净占比  | float64 | -       |\n| 现手         | float64 | -       |\n| 买一         | float64 | -       |\n| 卖一         | float64 | -       |\n| 最新份额       | float64 | -       |\n| 流通市值       | int64   | -       |\n| 总市值        | int64   | -       |\n| 数据日期       | object  | -       |\n| 更新时间       | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_etf_spot_em_df = ak.fund_etf_spot_em()\nprint(fund_etf_spot_em_df)\n```\n\n数据示例\n\n```\n          代码    名称  ...       数据日期                  更新时间\n0     520890  港股通红利低波ETF  ... 2024-12-26 2024-12-26 16:11:57+08:00\n1     159331     红利港股ETF  ... 2024-12-26 2024-12-26 15:34:48+08:00\n2     159333   港股央企红利ETF  ... 2024-12-26 2024-12-26 15:34:45+08:00\n3     159583     通信设备ETF  ... 2024-12-26 2024-12-26 15:35:03+08:00\n4     515880       通信ETF  ... 2024-12-26 2024-12-26 16:11:33+08:00\n...      ...         ...  ...        ...                       ...\n1005  561170     绿电50ETF  ... 2024-12-26 2024-12-26 16:11:52+08:00\n1006  562550       绿电ETF  ... 2024-12-26 2024-12-26 16:11:39+08:00\n1007  159301     公用事业ETF  ... 2024-12-26 2024-12-26 15:34:36+08:00\n1008  159611       电力ETF  ... 2024-12-26 2024-12-26 15:34:12+08:00\n1009  560580     电力ETF南方  ... 2024-12-26 2024-12-26 16:11:52+08:00\n[1010 rows x 37 columns]\n```\n\n#### 基金实时行情-同花顺\n\n接口: fund_etf_category_ths\n\n目标地址: https://fund.10jqka.com.cn/datacenter/jz/kfs/etf/\n\n描述: 同花顺理财-基金数据-每日净值-实时行情\n\n限量: 单次返回指定 date 和 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                             |\n|--------|-----|------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"ETF\"; choice of {\"股票型\", \"债券型\", \"混合型\", \"ETF\", \"LOF\", \"QDII\", \"保本型\", \"指数型\", \"\"}; \"\" 表示全部 |\n| date   | str | date=\"\"; 默认返回当前最新的数据                                                                           |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 序号       | int64   | -       |\n| 基金代码     | object  | -       |\n| 基金名称     | object  | -       |\n| 当前-单位净值  | float64 | -       |\n| 当前-累计净值  | float64 | -       |\n| 前一日-单位净值 | float64 | -       |\n| 前一日-累计净值 | float64 |         |\n| 增长值      | float64 | -       |\n| 增长率      | float64 | 注意单位: % |\n| 赎回状态     | object  | -       |\n| 申购状态     | object  | -       |\n| 最新-交易日   | object  | -       |\n| 最新-单位净值  | float64 | -       |\n| 最新-累计净值  | float64 | -       |\n| 基金类型     | object  | -       |\n| 查询日期     | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_etf_category_ths_df = ak.fund_etf_category_ths(symbol=\"ETF\", date=\"20240620\")\nprint(fund_etf_category_ths_df)\n```\n\n数据示例\n\n```\n      序号    基金代码         基金名称  ...  最新-累计净值  基金类型    查询日期\n0      1  159691            高股息ETF港股  ...   1.2039   股票型  2024-06-20\n1      2  588200        嘉实上证科创板芯片ETF  ...   1.0000   股票型  2024-06-20\n2      3  588290        华安上证科创板芯片ETF  ...   0.9775   股票型  2024-06-20\n3      4  588890        南方上证科创板芯片ETF  ...   1.1194   股票型  2024-06-20\n4      5  513530                港股红利  ...   1.3692   股票型  2024-06-20\n..   ...     ...                 ...  ...      ...   ...         ...\n979  980  560360         万家中证软件服务ETF  ...   1.0000   股票型  2024-06-20\n980  981  588500  易方达上证科创板100增强策略ETF  ...      NaN   股票型  2024-06-20\n981  982  588680   广发上证科创板100增强策略ETF  ...      NaN   股票型  2024-06-20\n982  983  588860             科创医药ETF  ...      NaN   股票型  2024-06-20\n983  984  588990        博时上证科创板芯片ETF  ...      NaN   股票型  2024-06-20\n[984 rows x 16 columns]\n```\n\n#### ETF基金实时行情-同花顺\n\n接口: fund_etf_spot_ths\n\n目标地址: https://fund.10jqka.com.cn/datacenter/jz/kfs/etf/\n\n描述: 同花顺理财-基金数据-每日净值-ETF-实时行情\n\n限量: 单次返回指定 date 的所有数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"\"; 默认返回当前最新的数据 |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 序号       | int64   | -       |\n| 基金代码     | object  | -       |\n| 基金名称     | object  | -       |\n| 当前-单位净值  | float64 | -       |\n| 当前-累计净值  | float64 | -       |\n| 前一日-单位净值 | float64 | -       |\n| 前一日-累计净值 | float64 |         |\n| 增长值      | float64 | -       |\n| 增长率      | float64 | 注意单位: % |\n| 赎回状态     | object  | -       |\n| 申购状态     | object  | -       |\n| 最新-交易日   | object  | -       |\n| 最新-单位净值  | float64 | -       |\n| 最新-累计净值  | float64 | -       |\n| 基金类型     | object  | -       |\n| 查询日期     | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_etf_spot_ths_df = ak.fund_etf_spot_ths(date=\"20240620\")\nprint(fund_etf_spot_ths_df)\n```\n\n数据示例\n\n```\n      序号    基金代码         基金名称  ...  最新-累计净值  基金类型    查询日期\n0      1  159691            高股息ETF港股  ...   1.2039   股票型  2024-06-20\n1      2  588200        嘉实上证科创板芯片ETF  ...   1.0000   股票型  2024-06-20\n2      3  588290        华安上证科创板芯片ETF  ...   0.9775   股票型  2024-06-20\n3      4  588890        南方上证科创板芯片ETF  ...   1.1194   股票型  2024-06-20\n4      5  513530                港股红利  ...   1.3692   股票型  2024-06-20\n..   ...     ...                 ...  ...      ...   ...         ...\n979  980  560360         万家中证软件服务ETF  ...   1.0000   股票型  2024-06-20\n980  981  588500  易方达上证科创板100增强策略ETF  ...      NaN   股票型  2024-06-20\n981  982  588680   广发上证科创板100增强策略ETF  ...      NaN   股票型  2024-06-20\n982  983  588860             科创医药ETF  ...      NaN   股票型  2024-06-20\n983  984  588990        博时上证科创板芯片ETF  ...      NaN   股票型  2024-06-20\n[984 rows x 16 columns]\n```\n\n#### LOF基金实时行情-东财\n\n接口: fund_lof_spot_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#fund_lof\n\n描述: 东方财富-LOF 实时行情\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 代码   | object  | -       |\n| 名称   | object  | -       |\n| 最新价  | float64 | -       |\n| 涨跌额  | float64 | -       |\n| 涨跌幅  | float64 | 注意单位: % |\n| 成交量  | float64 | -       |\n| 成交额  | float64 | -       |\n| 开盘价  | float64 | -       |\n| 最高价  | float64 | -       |\n| 最低价  | float64 | -       |\n| 昨收   | float64 | -       |\n| 换手率  | float64 | -       |\n| 流通市值 | int64   | -       |\n| 总市值  | int64   | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_lof_spot_em_df = ak.fund_lof_spot_em()\nprint(fund_lof_spot_em_df)\n```\n\n数据示例\n\n```\n      代码       名称    最新价    涨跌额  ...     昨收  换手率  流通市值        总市值\n0    166009     中欧动力LOF  3.123  0.114  ...  3.009  0.64    6716805    6716805\n1    161811  沪深300LOF银华  0.859  0.029  ...  0.830  0.04    7986026    7986026\n2    160807  长盛沪深300LOF  1.454  0.033  ...  1.421  0.56    3979752    3979752\n3    165520       有色LOF  1.515  0.034  ...  1.481  0.30   17217774   17217774\n4    161217     国投资源LOF  1.238  0.027  ...  1.211  0.07    5947481    5947481\n..      ...         ...    ...    ...  ...    ...   ...        ...        ...\n146  501083     科创银华LOF  1.336 -0.024  ...  1.360  0.32  124253745  124253745\n147  160512     博时卓越LOF  2.465 -0.045  ...  2.510  0.00   35852612   35852612\n148  160621     鹏华丰和LOF  1.421 -0.029  ...  1.450  0.41    2367956    2367956\n149  160215     国泰价值LOF  2.341 -0.053  ...  2.394  0.07    7602067    7602067\n150  165515    信诚300LOF  1.048 -0.054  ...  1.102  0.07   37943012   37943012\n[151 rows x 14 columns]\n```\n\n#### 基金实时行情-新浪\n\n接口: fund_etf_category_sina\n\n目标地址: http://vip.stock.finance.sina.com.cn/fund_center/index.html#jjhqetf\n\n描述: 新浪财经-基金列表及行情数据\n\n限量: 单次返回指定 symbol 基金的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                    |\n|--------|-----|-------------------------------------------------------|\n| symbol | str | symbol=\"LOF基金\"; choice of {\"封闭式基金\", \"ETF基金\", \"LOF基金\"} |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 代码  | object  | -       |\n| 名称  | object  | -       |\n| 最新价 | float64 | -       |\n| 涨跌额 | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 买入  | float64 | -       |\n| 卖出  | float64 | -       |\n| 昨收  | float64 | -       |\n| 今开  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 成交量 | int64   | 注意单位: 股 |\n| 成交额 | int64   | 注意单位: 元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_etf_category_sina_df = ak.fund_etf_category_sina(symbol=\"封闭式基金\")\nprint(fund_etf_category_sina_df)\n```\n\n数据示例\n\n```\n       代码      名称     最新价    涨跌额  ...  最高      最低    成交量     成交额\n0   sz180801    首钢绿能  12.520  0.008  ...  12.530  12.475   839446  10510150\n1   sz180701    绍兴原水   3.413  0.001  ...   3.425   3.385  2764883   9437963\n2   sz180603     大悦城   3.398 -0.006  ...   3.420   3.350   425614   1447551\n3   sz180602    中金印力   3.200 -0.005  ...   3.205   3.192  1477800   4729717\n4   sz180601    华润商业   7.347  0.001  ...   7.388   7.347   521600   3834548\n5   sz180502    蛇口租房   3.060  0.030  ...   3.062   3.010  1079728   3287126\n6   sz180501    红土安居   2.825 -0.001  ...   2.829   2.815  1075226   3036275\n7   sz180401    鹏华深能   6.018 -0.013  ...   6.053   6.010  1696744  10231735\n8   sz180303  宝湾REIT   3.712 -0.035  ...   3.763   3.702   408619   1519206\n9   sz180302     深国际   2.347 -0.005  ...   2.355   2.342   592300   1391501\n10  sz180301  盐港REIT   1.995 -0.009  ...   2.004   1.995  3516392   7024407\n11  sz180203    招商高速   6.950 -0.030  ...   6.979   6.908   104832    728293\n12  sz180202    越秀高速   6.280 -0.037  ...   6.319   6.279   602846   3794019\n13  sz180201    广州广河   9.296  0.041  ...   9.313   9.255   790604   7344115\n14  sz180105  广开REIT   2.340 -0.013  ...   2.356   2.340   154500    362621\n15  sz180103    和达高科   2.252 -0.013  ...   2.280   2.251  2045315   4616908\n16  sz180102    合肥高新   1.850 -0.010  ...   1.863   1.846  4180592   7751961\n17  sz180101    蛇口产园   1.992 -0.008  ...   2.004   1.990  1864202   3718024\n18  sh508099     中关村   2.095 -0.017  ...   2.120   2.089  1662042   3487014\n19  sh508098    京东仓储   2.609 -0.003  ...   2.624   2.608  3107261   8117486\n20  sh508096    京能光伏  10.070  0.061  ...  10.070  10.009   916226   9187077\n21  sh508089  特变REIT   4.905  0.034  ...   4.905   4.852   414200   2023350\n22  sh508088  东久REIT   3.290 -0.030  ...   3.339   3.260  7251364  23935638\n23  sh508086    河北高速   5.425 -0.007  ...   5.444   5.416   460352   2498931\n24  sh508077    华润有巢   2.567 -0.023  ...   2.600   2.560  3447426   8891771\n25  sh508069    南京交通   5.715 -0.005  ...   5.835   5.700   436500   2498995\n26  sh508068  京保REIT   3.151  0.003  ...   3.155   3.138  3164947   9956753\n27  sh508066  苏交REIT   6.088  0.093  ...   6.091   5.988  2878543  17329774\n28  sh508058    厦门安居   3.237  0.015  ...   3.266   3.208  1717570   5547566\n29  sh508056     普洛斯   3.304 -0.014  ...   3.330   3.296  3530115  11676209\n30  sh508033  深高REIT   6.449  0.004  ...   6.462   6.449   121205    782249\n31  sh508031    城投宽庭   3.388  0.015  ...   3.400   3.366   900154   3047776\n32  sh508028    国家电投  10.054  0.001  ...  10.078  10.035  2473268  24877774\n33  sh508027    东吴苏园   3.301 -0.032  ...   3.348   3.301  3575937  11922619\n34  sh508026    电建清源   3.522 -0.032  ...   3.586   3.503  1333100   4715147\n35  sh508022    津开产园   2.469  0.001  ...   2.477   2.436   175933    434868\n36  sh508021  临港REIT   4.265 -0.094  ...   4.359   4.251  3999528  17192524\n37  sh508019    湖北科投   2.255 -0.004  ...   2.274   2.240  3526346   7958065\n38  sh508018  中交REIT   4.976 -0.014  ...   4.996   4.975  4906984  24480193\n39  sh508017    金茂商业   2.592 -0.017  ...   2.615   2.576   363552    943842\n40  sh508015  明阳REIT   7.694  0.080  ...   7.750   7.620   220000   1689001\n41  sh508011    物美消费   2.721  0.011  ...   2.723   2.710  1004698   2731640\n42  sh508009    安徽交控   6.901  0.003  ...   6.907   6.882  1251593   8633658\n43  sh508008  铁建REIT   8.369 -0.002  ...   8.378   8.333  1158391   9686968\n44  sh508007    山东高速   7.490 -0.055  ...   7.553   7.490  1484920  11176058\n45  sh508006    首创水务   3.723  0.002  ...   3.744   3.700  3058890  11380469\n46  sh508005    首创奥莱   2.695  0.009  ...   2.695   2.630   360381    967838\n47  sh508003    中金联东   3.227 -0.005  ...   3.230   3.202    20226     65206\n48  sh508002    百联消费   2.219 -0.006  ...   2.230   2.215   857272   1904408\n49  sh508001    浙江杭徽   7.123 -0.021  ...   7.144   7.123  2369443  16895672\n50  sh508000  张江REIT   2.526 -0.009  ...   2.531   2.519  1483719   3742364\n[51 rows x 13 columns]\n```\n\n#### ETF基金分时行情-东财\n\n接口: fund_etf_hist_min_em\n\n目标地址: https://quote.eastmoney.com/sz159707.html\n\n描述: 东方财富-ETF 分时行情; 该接口只能获取近期的分时数据，注意时间周期的设置\n\n限量: 单次返回指定 ETF、频率、复权调整和时间区间的分时数据, 其中 1 分钟数据只返回近 5 个交易日数据且不复权\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                                                  |\n|------------|-----|-----------------------------------------------------------------------------------------------------|\n| symbol     | str | symbol='513500'; ETF 代码可以在 **ak.fund_etf_spot_em()** 中获取                                            |\n| start_date | str | start_date=\"1979-09-01 09:32:00\"; 日期时间; 默认返回所有数据                                                    |\n| end_date   | str | end_date=\"2222-01-01 09:32:00\"; 日期时间; 默认返回所有数据                                                      |\n| period     | str | period='5'; choice of {'1', '5', '15', '30', '60'}; 其中 1 分钟数据返回近 5 个交易日数据且不复权                       |\n| adjust     | str | adjust=''; choice of {'', 'qfq', 'hfq'}; '': 不复权, 'qfq': 前复权, 'hfq': 后复权, 其中 1 分钟数据返回近 5 个交易日数据且不复权 |\n\n输出参数-1分钟数据\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 时间  | object  | -   |\n| 开盘  | float64 | -   |\n| 收盘  | float64 | -   |\n| 最高  | float64 | -   |\n| 最低  | float64 | -   |\n| 成交量 | float64 | -   |\n| 成交额 | float64 | -   |\n| 均价  | float64 | -   |\n\n接口示例-1分钟数据\n\n```python\nimport akshare as ak\n\nfund_etf_hist_min_em_df = ak.fund_etf_hist_min_em(symbol=\"511220\", period=\"1\", adjust=\"\", start_date=\"2024-03-20 09:30:00\", end_date=\"2024-03-20 17:40:00\")\nprint(fund_etf_hist_min_em_df)\n```\n\n数据示例-1分钟数据\n\n```\n              时间         开盘      收盘  ...   成交量   成交额       均价\n0    2024-03-20 09:30:00  10.191  10.191  ...     0        0.0  10.1910\n1    2024-03-20 09:31:00  10.191  10.192  ...   413   420929.0  10.1920\n2    2024-03-20 09:32:00  10.192  10.191  ...    59    60127.0  10.1919\n3    2024-03-20 09:33:00  10.191  10.191  ...   123   125360.0  10.1919\n4    2024-03-20 09:34:00  10.191  10.192  ...    37    37711.0  10.1919\n..                   ...     ...     ...  ...   ...        ...      ...\n236  2024-03-20 14:56:00  10.190  10.190  ...     9     9171.0  10.1901\n237  2024-03-20 14:57:00  10.190  10.190  ...     0        0.0  10.1901\n238  2024-03-20 14:58:00  10.191  10.190  ...    58    59103.0  10.1901\n239  2024-03-20 14:59:00  10.190  10.191  ...   109   111082.0  10.1901\n240  2024-03-20 15:00:00  10.191  10.190  ...  3953  4028111.0  10.1901\n[241 rows x 8 columns]\n```\n\n输出参数-其他\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 时间  | object  | -       |\n| 开盘  | float64 | -       |\n| 收盘  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 涨跌额 | float64 | -       |\n| 成交量 | float64 | -       |\n| 成交额 | float64 | -       |\n| 振幅  | float64 | 注意单位: % |\n| 换手率 | float64 | 注意单位: % |\n\n接口示例-其他\n\n```python\nimport akshare as ak\n\nfund_etf_hist_min_em_df = ak.fund_etf_hist_min_em(symbol=\"513500\", period=\"5\", adjust=\"hfq\", start_date=\"2023-12-11 09:32:00\", end_date=\"2023-12-11 17:40:00\")\nprint(fund_etf_hist_min_em_df)\n```\n\n数据示例-其他\n\n```\n         时间     开盘     收盘     最高  ...     成交量         成交额    振幅   换手率\n0   2023-12-11 09:35:00  3.114  3.114  3.116  ...   49422   7694560.0  0.13  0.10\n1   2023-12-11 09:40:00  3.112  3.116  3.116  ...   11297   1758943.0  0.13  0.02\n2   2023-12-11 09:45:00  3.116  3.114  3.116  ...   10528   1639996.0  0.06  0.02\n3   2023-12-11 09:50:00  3.116  3.114  3.116  ...   14457   2252082.0  0.06  0.03\n4   2023-12-11 09:55:00  3.116  3.116  3.116  ...   31021   4832213.0  0.06  0.06\n5   2023-12-11 10:00:00  3.116  3.116  3.116  ...   15096   2351804.0  0.06  0.03\n6   2023-12-11 10:05:00  3.116  3.116  3.116  ...   28473   4436031.0  0.06  0.06\n7   2023-12-11 10:10:00  3.116  3.116  3.116  ...   21966   3422245.0  0.06  0.04\n8   2023-12-11 10:15:00  3.118  3.118  3.118  ...    4083    636297.0  0.06  0.01\n9   2023-12-11 10:20:00  3.118  3.118  3.118  ...    3527    549824.0  0.06  0.01\n10  2023-12-11 10:25:00  3.118  3.118  3.118  ...    4559    710690.0  0.06  0.01\n11  2023-12-11 10:30:00  3.118  3.118  3.118  ...    9277   1445434.0  0.06  0.02\n12  2023-12-11 10:35:00  3.118  3.116  3.118  ...   24972   3891409.0  0.06  0.05\n13  2023-12-11 10:40:00  3.118  3.118  3.118  ...    2117    329945.0  0.06  0.00\n14  2023-12-11 10:45:00  3.118  3.116  3.118  ...   10884   1696677.0  0.06  0.02\n15  2023-12-11 10:50:00  3.118  3.116  3.118  ...    1601    249564.0  0.06  0.00\n16  2023-12-11 10:55:00  3.118  3.116  3.118  ...    9538   1486933.0  0.06  0.02\n17  2023-12-11 11:00:00  3.118  3.118  3.118  ...    4282    667478.0  0.06  0.01\n18  2023-12-11 11:05:00  3.118  3.118  3.118  ...   11936   1860818.0  0.06  0.02\n19  2023-12-11 11:10:00  3.118  3.116  3.118  ...    3570    556521.0  0.06  0.01\n20  2023-12-11 11:15:00  3.118  3.118  3.118  ...    2789    434766.0  0.06  0.01\n21  2023-12-11 11:20:00  3.118  3.118  3.118  ...    2315    360889.0  0.06  0.00\n22  2023-12-11 11:25:00  3.116  3.118  3.118  ...   21950   3421895.0  0.06  0.04\n23  2023-12-11 11:30:00  3.118  3.118  3.118  ...    3537    551374.0  0.06  0.01\n24  2023-12-11 13:05:00  3.118  3.116  3.118  ...   21913   3414971.0  0.06  0.04\n25  2023-12-11 13:10:00  3.118  3.118  3.118  ...   18369   2863406.0  0.06  0.04\n26  2023-12-11 13:15:00  3.118  3.116  3.118  ...   54827   8546798.0  0.06  0.11\n27  2023-12-11 13:20:00  3.118  3.118  3.118  ...    2570    400640.0  0.06  0.01\n28  2023-12-11 13:25:00  3.118  3.118  3.118  ...    2601    405414.0  0.06  0.01\n29  2023-12-11 13:30:00  3.118  3.118  3.118  ...    3033    472734.0  0.06  0.01\n30  2023-12-11 13:35:00  3.118  3.116  3.118  ...   15563   2426052.0  0.06  0.03\n31  2023-12-11 13:40:00  3.118  3.116  3.118  ...   13824   2155085.0  0.06  0.03\n32  2023-12-11 13:45:00  3.118  3.118  3.118  ...   16696   2602092.0  0.06  0.03\n33  2023-12-11 13:50:00  3.118  3.118  3.118  ...    2991    466255.0  0.06  0.01\n34  2023-12-11 13:55:00  3.118  3.120  3.120  ...   37419   5833886.0  0.06  0.07\n35  2023-12-11 14:00:00  3.120  3.122  3.122  ...   34011   5305927.0  0.13  0.07\n36  2023-12-11 14:05:00  3.120  3.122  3.124  ...  100028  15612481.0  0.13  0.20\n37  2023-12-11 14:10:00  3.124  3.124  3.124  ...    4448    694602.0  0.06  0.01\n38  2023-12-11 14:15:00  3.124  3.120  3.124  ...   20700   3231425.0  0.13  0.04\n39  2023-12-11 14:20:00  3.122  3.122  3.122  ...   28460   4440057.0  0.06  0.06\n40  2023-12-11 14:25:00  3.120  3.120  3.122  ...   40567   6330234.0  0.06  0.08\n41  2023-12-11 14:30:00  3.120  3.120  3.122  ...   38468   5999601.0  0.13  0.08\n42  2023-12-11 14:35:00  3.118  3.118  3.120  ...   15520   2420175.0  0.06  0.03\n43  2023-12-11 14:40:00  3.120  3.120  3.120  ...    7381   1151356.0  0.06  0.01\n44  2023-12-11 14:45:00  3.120  3.120  3.120  ...   27514   4289666.0  0.06  0.05\n45  2023-12-11 14:50:00  3.120  3.118  3.120  ...   16476   2568813.0  0.06  0.03\n46  2023-12-11 14:55:00  3.116  3.118  3.118  ...   10180   1586741.0  0.06  0.02\n47  2023-12-11 15:00:00  3.118  3.118  3.120  ...   32074   5000284.0  0.13  0.06\n[48 rows x 11 columns]\n```\n\n#### LOF基金分时行情-东财\n\n接口: fund_lof_hist_min_em\n\n目标地址: https://quote.eastmoney.com/sz166009.html\n\n描述: 东方财富-LOF 分时行情; 该接口只能获取近期的分时数据，注意时间周期的设置\n\n限量: 单次返回指定 LOF、频率、复权调整和时间区间的分时数据, 其中 1 分钟数据只返回近 5 个交易日数据且不复权\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                                                  |\n|------------|-----|-----------------------------------------------------------------------------------------------------|\n| symbol     | str | symbol='166009'; LOF 代码可以在 **ak.fund_lof_spot_em()** 中获取                                            |\n| start_date | str | start_date=\"1979-09-01 09:32:00\"; 日期时间; 默认返回所有数据                                                    |\n| end_date   | str | end_date=\"2222-01-01 09:32:00\"; 日期时间; 默认返回所有数据                                                      |\n| period     | str | period='5'; choice of {'1', '5', '15', '30', '60'}; 其中 1 分钟数据返回近 5 个交易日数据且不复权                       |\n| adjust     | str | adjust=''; choice of {'', 'qfq', 'hfq'}; '': 不复权, 'qfq': 前复权, 'hfq': 后复权, 其中 1 分钟数据返回近 5 个交易日数据且不复权 |\n\n输出参数-1分钟数据\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 时间  | object  | -   |\n| 开盘  | float64 | -   |\n| 收盘  | float64 | -   |\n| 最高  | float64 | -   |\n| 最低  | float64 | -   |\n| 成交量 | float64 | -   |\n| 成交额 | float64 | -   |\n| 均价  | float64 | -   |\n\n接口示例-1分钟数据\n\n```python\nimport akshare as ak\n\nfund_lof_hist_min_em_df = ak.fund_lof_hist_min_em(symbol=\"166009\", period=\"1\", adjust=\"\", start_date=\"2024-03-20 09:30:00\", end_date=\"2024-03-20 14:40:00\")\nprint(fund_lof_hist_min_em_df)\n```\n\n数据示例-1分钟数据\n\n```\n                 时间     开盘    收盘    最高   最低  成交量 成交额  均价\n0    2024-03-20 09:30:00  2.627  2.627  2.627  2.627    0  0.0  2.627\n1    2024-03-20 09:31:00  2.627  2.627  2.627  2.627    0  0.0  2.627\n2    2024-03-20 09:32:00  2.627  2.627  2.627  2.627    0  0.0  2.627\n3    2024-03-20 09:33:00  2.627  2.627  2.627  2.627    0  0.0  2.627\n4    2024-03-20 09:34:00  2.627  2.627  2.627  2.627    0  0.0  2.627\n..                   ...    ...    ...    ...    ...  ...  ...    ...\n216  2024-03-20 14:36:00  2.563  2.563  2.563  2.563    0  0.0  2.563\n217  2024-03-20 14:37:00  2.563  2.563  2.563  2.563    0  0.0  2.563\n218  2024-03-20 14:38:00  2.563  2.563  2.563  2.563    0  0.0  2.563\n219  2024-03-20 14:39:00  2.563  2.563  2.563  2.563    0  0.0  2.563\n220  2024-03-20 14:40:00  2.563  2.563  2.563  2.563    0  0.0  2.563\n[221 rows x 8 columns]\n```\n\n输出参数-其他\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 时间  | object  | -       |\n| 开盘  | float64 | -       |\n| 收盘  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 涨跌额 | float64 | -       |\n| 成交量 | float64 | -       |\n| 成交额 | float64 | -       |\n| 振幅  | float64 | 注意单位: % |\n| 换手率 | float64 | 注意单位: % |\n\n接口示例-其他\n\n```python\nimport akshare as ak\n\nfund_lof_hist_min_em_df = ak.fund_lof_hist_min_em(symbol=\"166009\", period=\"5\", adjust=\"hfq\", start_date=\"2023-07-01 09:32:00\", end_date=\"2023-07-04 14:40:00\")\nprint(fund_lof_hist_min_em_df)\n```\n\n数据示例-其他\n\n```\n         时间     开盘     收盘     最高  ...  成交量      成交额    振幅   换手率\n0   2023-07-03 09:35:00  3.996  3.996  3.996  ...    2    590.0  0.00  0.01\n1   2023-07-03 09:40:00  3.996  3.996  3.996  ...    0      0.0  0.00  0.00\n2   2023-07-03 09:45:00  3.996  3.996  3.996  ...    0      0.0  0.00  0.00\n3   2023-07-03 09:50:00  3.996  4.271  4.271  ...    1    322.0  6.88  0.00\n4   2023-07-03 09:55:00  4.271  4.060  4.271  ...    9   2715.0  4.94  0.04\n5   2023-07-03 10:00:00  4.060  4.062  4.062  ...    1    302.0  0.05  0.00\n6   2023-07-03 10:05:00  4.062  4.060  4.062  ...   91  27463.0  0.05  0.42\n7   2023-07-03 10:10:00  4.060  4.060  4.060  ...    0      0.0  0.00  0.00\n8   2023-07-03 10:15:00  4.060  4.060  4.060  ...    0      0.0  0.00  0.00\n9   2023-07-03 10:20:00  4.060  4.060  4.060  ...    0      0.0  0.00  0.00\n10  2023-07-03 10:25:00  4.060  4.060  4.060  ...    0      0.0  0.00  0.00\n11  2023-07-03 10:30:00  4.060  4.060  4.060  ...    0      0.0  0.00  0.00\n12  2023-07-03 10:35:00  4.060  4.060  4.060  ...    0      0.0  0.00  0.00\n13  2023-07-03 10:40:00  4.060  4.060  4.060  ...    0      0.0  0.00  0.00\n14  2023-07-03 10:45:00  4.060  4.060  4.060  ...    9   2716.0  0.00  0.04\n15  2023-07-03 10:50:00  4.060  4.060  4.060  ...    0      0.0  0.00  0.00\n16  2023-07-03 10:55:00  4.060  4.060  4.060  ...    0      0.0  0.00  0.00\n17  2023-07-03 11:00:00  4.060  4.060  4.060  ...    0      0.0  0.00  0.00\n18  2023-07-03 11:05:00  4.060  4.060  4.060  ...    0      0.0  0.00  0.00\n19  2023-07-03 11:10:00  4.060  4.242  4.242  ...    1    320.0  4.48  0.00\n20  2023-07-03 11:15:00  4.242  4.242  4.242  ...    0      0.0  0.00  0.00\n21  2023-07-03 11:20:00  4.242  4.067  4.242  ...   22   6655.0  4.13  0.10\n22  2023-07-03 11:25:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n23  2023-07-03 11:30:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n24  2023-07-03 13:05:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n25  2023-07-03 13:10:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n26  2023-07-03 13:15:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n27  2023-07-03 13:20:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n28  2023-07-03 13:25:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n29  2023-07-03 13:30:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n30  2023-07-03 13:35:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n31  2023-07-03 13:40:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n32  2023-07-03 13:45:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n33  2023-07-03 13:50:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n34  2023-07-03 13:55:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n35  2023-07-03 14:00:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n36  2023-07-03 14:05:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n37  2023-07-03 14:10:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n38  2023-07-03 14:15:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n39  2023-07-03 14:20:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n40  2023-07-03 14:25:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n41  2023-07-03 14:30:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n42  2023-07-03 14:35:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n43  2023-07-03 14:40:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n44  2023-07-03 14:45:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n45  2023-07-03 14:50:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n46  2023-07-03 14:55:00  4.067  4.067  4.067  ...    0      0.0  0.00  0.00\n47  2023-07-03 15:00:00  4.067  4.165  4.165  ...    1    312.0  2.41  0.00\n[48 rows x 11 columns]\n```\n\n#### ETF基金历史行情-东财\n\n接口: fund_etf_hist_em\n\n目标地址: http://quote.eastmoney.com/sz159707.html\n\n描述: 东方财富-ETF 行情; 历史数据按日频率更新, 当日收盘价请在收盘后获取\n\n限量: 单次返回指定 ETF、指定周期和指定日期间的历史行情日频率数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                              |\n|------------|-----|-----------------------------------------------------------------|\n| symbol     | str | symbol='159707'; ETF 代码可以在 **ak.fund_etf_spot_em()** 中获取或查看东财主页 |\n| period     | str | period='daily'; choice of {'daily', 'weekly', 'monthly'}        |\n| start_date | str | start_date='20000101'; 开始查询的日期                                  |\n| end_date   | str | end_date='20230104'; 结束查询的日期                                    |\n| adjust     | str | 默认返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据                      |\n\n**数据复权**\n\n1.为何要复权：由于股票存在配股、分拆、合并和发放股息等事件，会导致股价出现较大的缺口。\n若使用不复权的价格处理数据、计算各种指标，将会导致它们失去连续性，且使用不复权价格计算收益也会出现错误。\n为了保证数据连贯性，常通过前复权和后复权对价格序列进行调整。\n\n2.前复权：保持当前价格不变，将历史价格进行增减，从而使股价连续。\n前复权用来看盘非常方便，能一眼看出股价的历史走势，叠加各种技术指标也比较顺畅，是各种行情软件默认的复权方式。\n这种方法虽然很常见，但也有两个缺陷需要注意。\n\n2.1 为了保证当前价格不变，每次股票除权除息，均需要重新调整历史价格，因此其历史价格是时变的。\n这会导致在不同时点看到的历史前复权价可能出现差异。\n\n2.2 对于有持续分红的公司来说，前复权价可能出现负值。\n\n3.后复权：保证历史价格不变，在每次股票权益事件发生后，调整当前的股票价格。\n后复权价格和真实股票价格可能差别较大，不适合用来看盘。\n其优点在于，可以被看作投资者的长期财富增长曲线，反映投资者的真实收益率情况。\n\n4.在量化投资研究中普遍采用后复权数据。\n\n输出参数\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 日期  | object  | -   |\n| 开盘  | float64 | -   |\n| 收盘  | float64 | -   |\n| 最高  | float64 | -   |\n| 最低  | float64 | -   |\n| 成交量 | int64   | -   |\n| 成交额 | float64 | -   |\n| 振幅  | float64 | -   |\n| 涨跌幅 | float64 | -   |\n| 涨跌额 | float64 | -   |\n| 换手率 | float64 | -   |\n\n接口示例-不复权\n\n```python\nimport akshare as ak\n\nfund_etf_hist_em_df = ak.fund_etf_hist_em(symbol=\"513500\", period=\"daily\", start_date=\"20000101\", end_date=\"20230201\", adjust=\"\")\nprint(fund_etf_hist_em_df)\n```\n\n数据示例-不复权\n\n```\n       日期     开盘     收盘     最高  ...    振幅   涨跌幅    涨跌额   换手率\n0     2014-01-15  0.994  0.986  0.996  ...  0.00  0.00  0.000  1.88\n1     2014-01-16  0.988  0.991  0.994  ...  0.61  0.51  0.005  0.56\n2     2014-01-17  0.993  0.987  0.993  ...  0.81 -0.40 -0.004  0.24\n3     2014-01-20  0.983  0.982  0.988  ...  0.61 -0.51 -0.005  0.20\n4     2014-01-21  0.982  0.984  0.996  ...  2.65  0.20  0.002  0.31\n          ...    ...    ...    ...  ...   ...   ...    ...   ...\n2179  2022-12-28  1.260  1.260  1.262  ...  0.31 -1.10 -0.014  2.73\n2180  2022-12-29  1.245  1.244  1.248  ...  0.48 -1.27 -0.016  2.91\n2181  2022-12-30  1.261  1.255  1.263  ...  0.64  0.88  0.011  2.28\n2182  2023-01-03  1.250  1.250  1.252  ...  0.48 -0.40 -0.005  4.49\n2183  2023-01-04  1.247  1.245  1.249  ...  0.40 -0.40 -0.005  1.81\n```\n\n接口示例-前复权\n\n```python\nimport akshare as ak\n\nfund_etf_hist_em_df = ak.fund_etf_hist_em(symbol=\"513500\", period=\"daily\", start_date=\"20000101\", end_date=\"20230201\", adjust=\"qfq\")\nprint(fund_etf_hist_em_df)\n```\n\n数据示例-前复权\n\n```\n      日期     开盘     收盘     最高  ...    振幅   涨跌幅    涨跌额   换手率\n0     2014-01-15  0.497  0.493  0.498  ...  0.00  0.00  0.000  1.88\n1     2014-01-16  0.494  0.496  0.497  ...  0.61  0.61  0.003  0.56\n2     2014-01-17  0.497  0.494  0.497  ...  0.81 -0.40 -0.002  0.24\n3     2014-01-20  0.492  0.491  0.494  ...  0.61 -0.61 -0.003  0.20\n4     2014-01-21  0.491  0.492  0.498  ...  2.65  0.20  0.001  0.31\n          ...    ...    ...    ...  ...   ...   ...    ...   ...\n2179  2022-12-28  1.260  1.260  1.262  ...  0.31 -1.10 -0.014  2.73\n2180  2022-12-29  1.245  1.244  1.248  ...  0.48 -1.27 -0.016  2.91\n2181  2022-12-30  1.261  1.255  1.263  ...  0.64  0.88  0.011  2.28\n2182  2023-01-03  1.250  1.250  1.252  ...  0.48 -0.40 -0.005  4.49\n2183  2023-01-04  1.247  1.245  1.249  ...  0.40 -0.40 -0.005  1.85\n```\n\n接口示例-后复权\n\n```python\nimport akshare as ak\n\nfund_etf_hist_em_df = ak.fund_etf_hist_em(symbol=\"513500\", period=\"daily\", start_date=\"20000101\", end_date=\"20230201\", adjust=\"hfq\")\nprint(fund_etf_hist_em_df)\n```\n\n数据示例-后复权\n\n```\n       日期     开盘     收盘     最高  ...    振幅   涨跌幅    涨跌额   换手率\n0     2014-01-15  0.994  0.986  0.996  ...  0.00  0.00  0.000  1.88\n1     2014-01-16  0.988  0.991  0.994  ...  0.61  0.51  0.005  0.56\n2     2014-01-17  0.993  0.987  0.993  ...  0.81 -0.40 -0.004  0.24\n3     2014-01-20  0.983  0.982  0.988  ...  0.61 -0.51 -0.005  0.20\n4     2014-01-21  0.982  0.984  0.996  ...  2.65  0.20  0.002  0.31\n          ...    ...    ...    ...  ...   ...   ...    ...   ...\n2179  2022-12-28  2.520  2.520  2.524  ...  0.31 -1.10 -0.028  2.73\n2180  2022-12-29  2.490  2.488  2.496  ...  0.48 -1.27 -0.032  2.91\n2181  2022-12-30  2.522  2.510  2.526  ...  0.64  0.88  0.022  2.28\n2182  2023-01-03  2.500  2.500  2.504  ...  0.48 -0.40 -0.010  4.49\n2183  2023-01-04  2.494  2.490  2.498  ...  0.40 -0.40 -0.010  1.86\n```\n\n#### LOF基金历史行情-东财\n\n接口: fund_lof_hist_em\n\n目标地址: https://quote.eastmoney.com/sz166009.html\n\n描述: 东方财富-LOF 行情; 历史数据按日频率更新, 当日收盘价请在收盘后获取\n\n限量: 单次返回指定 LOF、指定周期和指定日期间的历史行情日频率数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                       |\n|------------|-----|----------------------------------------------------------|\n| symbol     | str | symbol='166009'; LOF 代码可以在 **ak.fund_lof_spot_em()** 中获取 |\n| period     | str | period='daily'; choice of {'daily', 'weekly', 'monthly'} |\n| start_date | str | start_date='20000101'; 开始查询的日期                           |\n| end_date   | str | end_date='20230104'; 结束查询的日期                             |\n| adjust     | str | 默认返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据               |\n\n**数据复权**\n\n1.为何要复权：由于股票存在配股、分拆、合并和发放股息等事件，会导致股价出现较大的缺口。\n若使用不复权的价格处理数据、计算各种指标，将会导致它们失去连续性，且使用不复权价格计算收益也会出现错误。\n为了保证数据连贯性，常通过前复权和后复权对价格序列进行调整。\n\n2.前复权：保持当前价格不变，将历史价格进行增减，从而使股价连续。\n前复权用来看盘非常方便，能一眼看出股价的历史走势，叠加各种技术指标也比较顺畅，是各种行情软件默认的复权方式。\n这种方法虽然很常见，但也有两个缺陷需要注意。\n\n2.1 为了保证当前价格不变，每次股票除权除息，均需要重新调整历史价格，因此其历史价格是时变的。\n这会导致在不同时点看到的历史前复权价可能出现差异。\n\n2.2 对于有持续分红的公司来说，前复权价可能出现负值。\n\n3.后复权：保证历史价格不变，在每次股票权益事件发生后，调整当前的股票价格。\n后复权价格和真实股票价格可能差别较大，不适合用来看盘。\n其优点在于，可以被看作投资者的长期财富增长曲线，反映投资者的真实收益率情况。\n\n4.在量化投资研究中普遍采用后复权数据。\n\n输出参数\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 日期  | object  | -   |\n| 开盘  | float64 | -   |\n| 收盘  | float64 | -   |\n| 最高  | float64 | -   |\n| 最低  | float64 | -   |\n| 成交量 | int64   | -   |\n| 成交额 | float64 | -   |\n| 振幅  | float64 | -   |\n| 涨跌幅 | float64 | -   |\n| 涨跌额 | float64 | -   |\n| 换手率 | float64 | -   |\n\n接口示例-不复权\n\n```python\nimport akshare as ak\n\nfund_lof_hist_em_df = ak.fund_lof_hist_em(symbol=\"166009\", period=\"daily\", start_date=\"20000101\", end_date=\"20230703\", adjust=\"\")\nprint(fund_lof_hist_em_df)\n```\n\n数据示例-不复权\n\n```\n      日期     开盘  收盘     最高  ...    振幅   涨跌幅    涨跌额     换手率\n0     2011-04-29  0.966  0.970  0.971  ...  0.00  0.00  0.000  541.96\n1     2011-05-03  0.973  0.980  0.980  ...  0.82  1.03  0.010   41.61\n2     2011-05-04  0.976  0.971  0.980  ...  1.12 -0.92 -0.009   48.42\n3     2011-05-05  0.966  0.970  0.971  ...  0.51 -0.10 -0.001   24.30\n4     2011-05-06  0.960  0.973  0.975  ...  1.55  0.31  0.003   21.23\n          ...    ...    ...    ...  ...   ...   ...    ...     ...\n2515  2023-06-27  3.083  2.975  3.083  ...  4.07 -4.62 -0.144    0.27\n2516  2023-06-28  3.054  2.967  3.054  ...  3.36 -0.27 -0.008    0.54\n2517  2023-06-29  2.951  2.995  2.995  ...  1.48  0.94  0.028    0.57\n2518  2023-06-30  3.010  3.009  3.156  ...  4.97  0.47  0.014    0.16\n2519  2023-07-03  2.954  3.123  3.229  ...  9.14  3.79  0.114    0.64\n[2520 rows x 11 columns]\n```\n\n接口示例-前复权\n\n```python\nimport akshare as ak\n\nfund_lof_hist_em_df = ak.fund_lof_hist_em(symbol=\"166009\", period=\"daily\", start_date=\"20000101\", end_date=\"20230703\", adjust=\"qfq\")\nprint(fund_lof_hist_em_df)\n```\n\n数据示例-前复权\n\n```\n     日期     开盘     收盘     最高  ...     振幅    涨跌幅    涨跌额     换手率\n0     2011-04-29 -0.076 -0.072 -0.071  ...   0.00   0.00  0.000  541.96\n1     2011-05-03 -0.069 -0.062 -0.062  ... -11.11  13.89  0.010   41.61\n2     2011-05-04 -0.066 -0.071 -0.062  ... -17.74 -14.52 -0.009   48.42\n3     2011-05-05 -0.076 -0.072 -0.071  ...  -7.04  -1.41 -0.001   24.30\n4     2011-05-06 -0.082 -0.069 -0.067  ... -20.83   4.17  0.003   21.23\n          ...    ...    ...    ...  ...    ...    ...    ...     ...\n2515  2023-06-27  3.083  2.975  3.083  ...   4.07  -4.62 -0.144    0.27\n2516  2023-06-28  3.054  2.967  3.054  ...   3.36  -0.27 -0.008    0.54\n2517  2023-06-29  2.951  2.995  2.995  ...   1.48   0.94  0.028    0.57\n2518  2023-06-30  3.010  3.009  3.156  ...   4.97   0.47  0.014    0.16\n2519  2023-07-03  2.954  3.123  3.229  ...   9.14   3.79  0.114    0.64\n[2520 rows x 11 columns]\n```\n\n接口示例-后复权\n\n```python\nimport akshare as ak\n\nfund_lof_hist_em_df = ak.fund_lof_hist_em(symbol=\"166009\", period=\"daily\", start_date=\"20000101\", end_date=\"20230703\", adjust=\"hfq\")\nprint(fund_lof_hist_em_df)\n```\n\n数据示例-后复权\n\n```\n      日期     开盘     收盘     最高  ...    振幅   涨跌幅    涨跌额     换手率\n0     2011-04-29  0.966  0.970  0.971  ...  0.00  0.00  0.000  541.96\n1     2011-05-03  0.973  0.980  0.980  ...  0.82  1.03  0.010   41.61\n2     2011-05-04  0.976  0.971  0.980  ...  1.12 -0.92 -0.009   48.42\n3     2011-05-05  0.966  0.970  0.971  ...  0.51 -0.10 -0.001   24.30\n4     2011-05-06  0.960  0.973  0.975  ...  1.55  0.31  0.003   21.23\n          ...    ...    ...    ...  ...   ...   ...    ...     ...\n2515  2023-06-27  4.125  4.017  4.125  ...  3.05 -3.46 -0.144    0.27\n2516  2023-06-28  4.096  4.009  4.096  ...  2.49 -0.20 -0.008    0.54\n2517  2023-06-29  3.993  4.037  4.037  ...  1.10  0.70  0.028    0.57\n2518  2023-06-30  4.052  4.051  4.198  ...  3.69  0.35  0.014    0.16\n2519  2023-07-03  3.996  4.165  4.271  ...  6.79  2.81  0.114    0.64\n[2520 rows x 11 columns]\n```\n\n#### 基金历史行情-新浪\n\n接口: fund_etf_hist_sina\n\n目标地址: http://vip.stock.finance.sina.com.cn/fund_center/index.html#jjhqetf\n\n描述: 新浪财经-基金行情的日频率行情数据\n\n限量: 单次返回指定基金的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                      |\n|--------|-----|---------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"sh510050\"; 基金列表可以通过 **ak.fund_etf_category_sina(symbol=\"LOF基金\")** 可选参数为: 封闭式基金, ETF基金, LOF基金 查询 |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| date   | object  | -       |\n| open   | float64 | -       |\n| high   | float64 | -       |\n| low    | float64 | -       |\n| close  | float64 | -       |\n| volume | int64   | 注意单位: 手 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_etf_hist_sina_df = ak.fund_etf_hist_sina(symbol=\"sh510050\")\nprint(fund_etf_hist_sina_df)\n```\n\n数据示例\n\n```\n            date   open   high    low  close      volume\n0     2005-02-23  0.881  0.882  0.866  0.876  1269742542\n1     2005-02-24  0.876  0.876  0.868  0.876   451614223\n2     2005-02-25  0.877  0.887  0.875  0.880   506460695\n3     2005-02-28  0.878  0.879  0.870  0.872   187965193\n4     2005-03-01  0.870  0.873  0.865  0.867   208094456\n...          ...    ...    ...    ...    ...         ...\n4796  2024-11-15  2.808  2.821  2.777  2.778  1394418910\n4797  2024-11-18  2.789  2.835  2.776  2.790  1199619816\n4798  2024-11-19  2.786  2.793  2.743  2.778   919468916\n4799  2024-11-20  2.772  2.794  2.764  2.784   854979945\n4800  2024-11-21  2.780  2.795  2.772  2.791   738982704\n[4801 rows x 6 columns]\n```\n\n### 基金净值\n\n#### 开放式基金-实时数据\n\n接口: fund_open_fund_daily_em\n\n目标地址: http://fund.eastmoney.com/fund.html#os_0;isall_0;ft_;pt_1\n\n描述: 东方财富网-天天基金网-基金数据, 此接口在每个交易日 **16:00-23:00** 更新当日的最新开放式基金净值数据\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称        | 类型    | 描述      |\n|-----------|-------|---------|\n| 基金代码      | str   | -       |\n| 基金简称      | str   | -       |\n| 单位净值      | float | 随时间变动   |\n| 累计净值      | float | 随时间变动   |\n| 前交易日-单位净值 | float | 随时间变动   |\n| 前交易日-累计净值 | float | 随时间变动   |\n| 日增长值      | float | -       |\n| 日增长率      | float | -       |\n| 申购状态      | str   | -       |\n| 赎回状态      | str   | -       |\n| 手续费       | str   | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_open_fund_daily_em_df = ak.fund_open_fund_daily_em()\nprint(fund_open_fund_daily_em_df)\n```\n\n数据示例\n\n```\n      基金代码             基金简称 2020-12-28-单位净值  ...  申购状态  赎回状态    手续费\n0      010407        安信中债1-3年政策性金融债C          1.0906  ...  开放申购  开放赎回  0.00%\n1      161725             招商中证白酒指数分级          1.3869  ...   限大额  开放赎回  0.10%\n2      160632                  鹏华酒分级          1.0360  ...  开放申购  开放赎回  0.12%\n3      004987             诺德新享灵活配置混合          2.2665  ...  开放申购  开放赎回  0.15%\n4      008135               华宸未来价值先锋          1.4346  ...  开放申购  开放赎回  0.15%\n       ...                    ...             ...  ...   ...   ...    ...\n10005  009209       长信稳利一年持有期混合(FOF)                  ...  开放申购   封闭期  0.80%\n10006  873002  广发资管全球精选一年持有期债券(QDII)                  ...   封闭期   封闭期\n10007  007401       浦银颐和稳健养老一年(FOF)A                  ...  开放申购  开放赎回  0.08%\n10008  010672        鹏华创新未来18个月封闭混合B                  ...   封闭期  开放赎回\n10009  010650       易方达创新未来18个月封闭混合B                  ...   封闭期  开放赎回\n```\n\n#### 开放式基金-历史数据\n\n接口: fund_open_fund_info_em\n\n目标地址: http://fund.eastmoney.com/pingzhongdata/710001.js\n\n描述: 东方财富网-天天基金网-基金数据-具体基金信息\n\n限量: 单次返回当前时刻所有历史数据, 在查询基金数据的时候注意基金前后端问题\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                                             |\n|-----------|-----|------------------------------------------------------------------------------------------------|\n| symbol    | str | symbol=\"710001\"; 需要基金代码, 可以通过调用 **ak.fund_open_fund_daily_em()** 获取                            |\n| indicator | str | indicator=\"单位净值走势\";  参见 **fund_open_fund_info_em** 参数一览表                                       |\n| period    | str | period=\"成立来\"; 该参数只对 `累计收益率走势` 有效, choice of {\"1月\", \"3月\", \"6月\", \"1年\", \"3年\", \"5年\", \"今年来\", \"成立来\"} |\n\nfund_open_fund_info_em 参数一览表\n\n| 参数名称    | 备注  |\n|---------|-----|\n| 单位净值走势  | -   |\n| 累计净值走势  | -   |\n| 累计收益率走势 | -   |\n| 同类排名走势  | -   |\n| 同类排名百分比 | -   |\n| 分红送配详情  | -   |\n| 拆分详情    | -   |\n\n输出参数-单位净值走势\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 净值日期 | object  | -       |\n| 单位净值 | float64 | -       |\n| 日增长率 | float64 | 注意单位: % |\n\n接口示例-单位净值走势\n\n```python\nimport akshare as ak\n\nfund_open_fund_info_em_df = ak.fund_open_fund_info_em(symbol=\"710001\", indicator=\"单位净值走势\")\nprint(fund_open_fund_info_em_df)\n```\n\n数据示例-单位净值走势\n\n```\n       净值日期    单位净值  日增长率\n0     2011-09-21  1.0000  0.00\n1     2011-09-23  1.0000  0.00\n2     2011-09-30  1.0001  0.01\n3     2011-10-14  1.0005  0.04\n4     2011-10-21  1.0007  0.02\n          ...     ...   ...\n2973  2023-12-25  2.6137  0.28\n2974  2023-12-26  2.5804 -1.27\n2975  2023-12-27  2.6219  1.61\n2976  2023-12-28  2.6322  0.39\n2977  2023-12-29  2.6590  1.02\n[2978 rows x 3 columns]\n```\n\n输出参数-累计净值走势\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 净值日期 | object  | -   |\n| 累计净值 | float64 | -   |\n\n接口示例-累计净值走势\n\n```python\nimport akshare as ak\n\nfund_open_fund_info_em_df = ak.fund_open_fund_info_em(symbol=\"710001\", indicator=\"累计净值走势\")\nprint(fund_open_fund_info_em_df)\n```\n\n数据示例-累计净值走势\n\n```\n       净值日期    累计净值\n0     2011-09-21  1.0000\n1     2011-09-23  1.0000\n2     2011-09-30  1.0001\n3     2011-10-14  1.0005\n4     2011-10-21  1.0007\n          ...     ...\n2973  2023-12-25  2.6137\n2974  2023-12-26  2.5804\n2975  2023-12-27  2.6219\n2976  2023-12-28  2.6322\n2977  2023-12-29  2.6590\n[2978 rows x 2 columns]\n```\n\n输出参数-累计收益率走势\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 日期    | object  | -       |\n| 累计收益率 | float64 | 注意单位: % |\n\n接口示例-累计收益率走势\n\n```python\nimport akshare as ak\n\nfund_open_fund_info_em_df = ak.fund_open_fund_info_em(symbol=\"710001\", indicator=\"累计收益率走势\", period=\"成立来\")\nprint(fund_open_fund_info_em_df)\n```\n\n数据示例-累计收益率走势\n\n```\n         日期   累计收益率\n0    2011-09-21    0.00\n1    2011-11-09    3.52\n2    2011-11-29    1.92\n3    2011-12-19   -3.17\n4    2012-01-09   -5.69\n..          ...     ...\n209  2023-10-19  165.84\n210  2023-11-08  173.36\n211  2023-11-28  165.36\n212  2023-12-18  164.23\n213  2023-12-29  165.90\n[214 rows x 2 columns]\n```\n\n输出参数-同类排名走势\n\n| 名称            | 类型      | 描述  |\n|---------------|---------|-----|\n| 报告日期          | object  | -   |\n| 同类型排名-每日近三月排名 | float64 | -   |\n| 总排名-每日近三月排名   | float64 | -   |\n\n接口示例-同类排名走势\n\n```python\nimport akshare as ak\n\nfund_open_fund_info_em_df = ak.fund_open_fund_info_em(symbol=\"710001\", indicator=\"同类排名走势\")\nprint(fund_open_fund_info_em_df)\n```\n\n数据示例-同类排名走势\n\n```\n     报告日期  同类型排名-每日近三月排名  总排名-每日近三月排名\n0     2013-01-04             39          353\n1     2013-01-07             49          353\n2     2013-01-08             72          353\n3     2013-01-09             83          353\n4     2013-01-10             90          353\n          ...            ...          ...\n2670  2023-12-25           1969         3970\n2671  2023-12-26           2415         3978\n2672  2023-12-27           2072         3983\n2673  2023-12-28           2389         3983\n2674  2023-12-29           2404         4036\n[2675 rows x 3 columns]\n```\n\n输出参数-同类排名百分比\n\n| 名称                 | 类型      | 描述  |\n|--------------------|---------|-----|\n| 报告日期               | object  | -   |\n| 同类型排名-每日近3月收益排名百分比 | float64 | -   |\n\n接口示例-同类排名百分比\n\n```python\nimport akshare as ak\n\nfund_open_fund_info_em_df = ak.fund_open_fund_info_em(symbol=\"710001\", indicator=\"同类排名百分比\")\nprint(fund_open_fund_info_em_df)\n```\n\n数据示例-同类排名百分比\n\n```\n     报告日期  同类型排名-每日近3月收益排名百分比\n0     2013-01-04               88.95\n1     2013-01-07               86.12\n2     2013-01-08               79.60\n3     2013-01-09               76.49\n4     2013-01-10               74.50\n          ...                 ...\n2670  2023-12-25               50.40\n2671  2023-12-26               39.29\n2672  2023-12-27               47.98\n2673  2023-12-28               40.02\n2674  2023-12-29               40.44\n[2675 rows x 2 columns]\n```\n\n输出参数-分红送配详情\n\n| 名称    | 类型     | 描述  |\n|-------|--------|-----|\n| 年份    | object | -   |\n| 权益登记日 | object | -   |\n| 除息日   | object | -   |\n| 每份分红  | object | -   |\n| 分红发放日 | object | -   |\n\n接口示例-分红送配详情\n\n```python\nimport akshare as ak\n\nfund_open_fund_info_em_df = ak.fund_open_fund_info_em(symbol=\"161606\", indicator=\"分红送配详情\")\nprint(fund_open_fund_info_em_df)\n```\n\n数据示例-分红送配详情\n\n```\n  年份       权益登记日    除息日          每份分红       分红发放日\n0  2023年  2023-01-16  2023-01-16  每份派现金0.0050元  2023-01-18\n1  2022年  2022-01-19  2022-01-19  每份派现金0.0050元  2022-01-21\n2  2021年  2021-01-19  2021-01-19  每份派现金0.0050元  2021-01-21\n3  2007年  2007-10-25  2007-10-25  每份派现金0.7700元  2007-10-29\n4  2007年  2007-03-12  2007-03-12  每份派现金1.1100元  2007-03-14\n5  2006年  2006-05-30  2006-05-30  每份派现金0.0600元  2006-06-01\n```\n\n输出参数-拆分详情\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 年份     | object | -   |\n| 拆分折算日  | object | -   |\n| 拆分类型   | object | -   |\n| 拆分折算比例 | object | -   |\n\n接口示例-拆分详情\n\n```python\nimport akshare as ak\n\nfund_open_fund_info_em_df = ak.fund_open_fund_info_em(symbol=\"161606\", indicator=\"拆分详情\")\nprint(fund_open_fund_info_em_df)\n```\n\n数据示例-拆分详情\n\n```\n    年份   拆分折算日  拆分类型    拆分折算比例\n0  2020年  2020-12-15  份额折算  1:1.0054\n1  2020年  2020-08-26  份额折算  1:1.4982\n2  2019年  2019-12-16  份额折算  1:1.0107\n3  2019年  2019-07-02  份额折算  1:1.5569\n4  2018年  2018-12-17  份额折算  1:1.0255\n5  2017年  2017-12-15  份额折算  1:1.0045\n6  2017年  2017-09-26  份额折算  1:1.4942\n7  2016年  2016-12-15  份额折算  1:1.0230\n8  2015年  2015-12-15  份额折算  1:1.0180\n```\n\n#### 货币型基金-实时数据\n\n接口: fund_money_fund_daily_em\n\n目标地址: http://fund.eastmoney.com/HBJJ_pjsyl.html\n\n描述: 东方财富网-天天基金网-基金数据-货币型基金收益, 此接口数据每个交易日 **16:00～23:00**\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称          | 类型    | 描述  |\n|-------------|-------|-----|\n| 基金代码        | str   | -   |\n| 基金简称        | str   | -   |\n| 当前交易日-万份收益  | float | -   |\n| 当前交易日-7日年化% | float | -   |\n| 当前交易日-单位净值  | float | -   |\n| 前一交易日-万份收益  | float | -   |\n| 前一交易日-7日年化% | float | -   |\n| 前一交易日-单位净值  | float | -   |\n| 日涨幅         | str   | -   |\n| 成立日期        | str   | -   |\n| 基金经理        | str   | -   |\n| 手续费         | str   | -   |\n| 可购全部        | str   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_money_fund_daily_em_df = ak.fund_money_fund_daily_em()\nprint(fund_money_fund_daily_em_df)\n```\n\n数据示例\n\n```\n       基金代码        基金简称 当前交易日-万份收益 当前交易日-7日年化%  ...        成立日期  基金经理  手续费 可购全部\n2    004186     江信增利货币B     0.4461     4.1720%  ...  2017-08-03    杨淳  0费率   购买\n3    002884  华润元大现金通货币B     0.8919     3.9870%  ...  2016-07-27  李仆 等  0费率   购买\n4    004185     江信增利货币A     0.4065     3.9620%  ...  2017-08-03    杨淳  0费率   购买\n5    002883  华润元大现金通货币A     0.8585     3.8460%  ...  2016-07-27  李仆 等  0费率   购买\n6    740602       长安货币B     0.4641     3.7260%  ...  2013-01-25    孟楠  0费率   购买\n..      ...         ...        ...         ...  ...         ...   ...  ...  ...\n448  519513    万家日日薪货币R        ---         ---  ...  2013-01-15    郅元  0费率   购买\n449  005202    兴业稳天盈货币B        ---         ---  ...  2017-09-11  丁进 等  0费率   购买\n450  000908   农银红利日结货币B        ---         ---  ...  2014-12-19  许娅 等  0费率   购买\n451  000907   农银红利日结货币A        ---         ---  ...  2014-12-19  许娅 等  0费率   购买\n452  519507       万家货币B        ---         ---  ...  2013-08-15    郅元  0费率   购买\n```\n\n#### 货币型基金-历史数据\n\n接口: fund_money_fund_info_em\n\n目标地址: https://fundf10.eastmoney.com/jjjz_000009.html\n\n描述: 东方财富网-天天基金网-基金数据-货币型基金-历史净值\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                   |\n|--------|-----|----------------------------------------------------------------------|\n| symbol | str | symbol=\"000009\"; 需要基金代码, 可以通过调用 **ak.fund_money_fund_daily_em()** 获取 |\n\n输出参数\n\n| 名称      | 类型      | 描述 |\n|---------|---------|----|\n| 净值日期    | object  | -  |\n| 每万份收益   | float64 | -  |\n| 7日年化收益率 | float64 | -  |\n| 申购状态    | object  | -  |\n| 赎回状态    | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_money_fund_info_em_df = ak.fund_money_fund_info_em(symbol=\"000009\")\nprint(fund_money_fund_info_em_df)\n```\n\n数据示例\n\n```\n      净值日期    每万份收益  7日年化收益率  申购状态  赎回状态\n0     2013-03-25  21.2775    3.485   封闭期   封闭期\n1     2013-03-26   0.9561    3.482  开放申购  开放赎回\n2     2013-03-27   0.3729    3.175  开放申购  开放赎回\n3     2013-03-28   0.7068    3.042  开放申购  开放赎回\n4     2013-03-29   0.6744    2.892  开放申购  开放赎回\n...          ...      ...      ...   ...   ...\n4187  2025-02-27   0.3724    1.371  暂停申购  开放赎回\n4188  2025-02-28   0.3789    1.374  暂停申购  开放赎回\n4189  2025-03-01   0.3790    1.377  暂停申购  开放赎回\n4190  2025-03-02   0.3790    1.381  暂停申购  开放赎回\n4191  2025-03-03   0.4081    1.408  暂停申购  开放赎回\n[4192 rows x 5 columns]\n```\n\n#### 理财型基金-实时数据\n\n接口: fund_financial_fund_daily_em\n\n目标地址: http://fund.eastmoney.com/lcjj.html#1_1__0__ljjz,desc_1_os1\n\n描述: 东方财富网-天天基金网-基金数据-理财型基金-实时数据, 此接口数据每个交易日 **16:00～23:00** 更新\n\n限量: 该接口由于目标网站未更新数据，暂时不能返回数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称          | 类型    | 描述  |\n|-------------|-------|-----|\n| 序号          | int   | -   |\n| 基金代码        | str   | -   |\n| 基金简称        | str   | -   |\n| 上一期年化收益率    | float | -   |\n| 当前交易日-万份收益  | float | -   |\n| 当前交易日-7日年华  | float | -   |\n| 前一个交易日-万份收益 | float | -   |\n| 前一个交易日-7日年华 | float | -   |\n| 封闭期         | float | -   |\n| 申购状态        | str   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_financial_fund_daily_em_df = ak.fund_financial_fund_daily_em()\nprint(fund_financial_fund_daily_em_df)\n```\n\n数据示例\n\n```\n   序号 基金代码   基金简称  上一期年化收益率  ... 前一个交易日-万份收益 前一个交易日-7日年华  封闭期 申购状态\n0   1  000134     信诚理财28日盈A   2.1010  ...      0.4548      1.8150  28天  限大额\n1   2  090021      大成月添利债券A   4.7470  ...      0.5243      1.8540  1个月  限大额\n2   3  110051   易方达月月利理财债券B   2.4040  ...      0.6606      2.2450  1个月  限大额\n3   4  070035    嘉实理财宝7天债券A   1.8310  ...      0.4871      1.8310   7天  限大额\n4   5  660016     农银7天理财债券A   1.6780  ...      0.4567      1.6780   7天  限大额\n5   6  000791   银华双月定期理财债券A           ...      0.6134      2.2390  2个月  限大额\n6   7  001057    华夏理财30天债券A   3.0650  ...      0.6477      2.2020  1个月  限大额\n7   8  110050   易方达月月利理财债券A   2.1140  ...      0.5813      1.9560  1个月  限大额\n8   9  090023  大成月月盈短期理财债券A  22.2030  ...      0.4640      1.7510  1个月  限大额\n9  10  000322    农银14天理财债券A           ...      0.4592      1.6080  14天  限大额\n```\n\n#### 理财型基金-历史数据\n\n接口: fund_financial_fund_info_em\n\n目标地址: http://fundf10.eastmoney.com/jjjz_000791.html\n\n描述: 东方财富网站-天天基金网-基金数据-理财型基金收益-历史净值明细\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                     |\n|--------|-----|------------------------------------------------------------------------|\n| symbol | str | symbol=\"000134\"; 基金代码, 可以通过调用 **ak.fund_financial_fund_daily_em()** 获取 |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 净值日期 | object  | -       |\n| 单位净值 | float64 | -       |\n| 累计净值 | float64 | -       |\n| 日增长率 | float64 | -       |\n| 申购状态 | object  | -       |\n| 赎回状态 | object  | -       |\n| 分红送配 | object  | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_financial_fund_info_em_df = ak.fund_financial_fund_info_em(symbol=\"000134\")\nprint(fund_financial_fund_info_em_df)\n```\n\n数据示例\n\n```\n     净值日期    单位净值    累计净值  日增长率    申购状态  赎回状态 分红送配\n0    2020-06-23  0.9982  0.9982   NaN    暂停申购  开放赎回\n1    2020-06-24  0.9987  0.9987  0.05    暂停申购  开放赎回\n2    2020-06-29  0.9994  0.9994  0.07    暂停申购  开放赎回\n3    2020-06-30  0.9995  0.9995  0.01    暂停申购  开放赎回\n4    2020-07-01  0.9998  0.9998  0.03    暂停申购  开放赎回\n..          ...     ...     ...   ...     ...   ...  ...\n663  2023-03-16  1.0291  1.0951  0.02  限制大额申购  开放赎回\n664  2023-03-17  1.0294  1.0954  0.03  限制大额申购  开放赎回\n665  2023-03-20  1.0302  1.0962  0.08  限制大额申购  开放赎回\n666  2023-03-21  1.0303  1.0963  0.01  限制大额申购  开放赎回\n667  2023-03-22  1.0303  1.0963  0.00  限制大额申购  开放赎回\n```\n\n#### 分级基金-实时数据\n\n接口: fund_graded_fund_daily_em\n\n目标地址: http://fund.eastmoney.com/fjjj.html#1_1__0__zdf,desc_1\n\n描述: 东方财富网-天天基金网-基金数据-分级基金-实时数据, 此接口数据每个交易日 **16:00～23:00**\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称        | 类型    | 描述      |\n|-----------|-------|---------|\n| 基金代码      | str   | -       |\n| 基金简称      | str   | -       |\n| 单位净值      | float | -       |\n| 累计净值      | float | -       |\n| 前交易日-单位净值 | float | -       |\n| 前交易日-累计净值 | float | -       |\n| 日增长值      | float | -       |\n| 日增长率      | float | 注意单位: % |\n| 市价        | str   | -       |\n| 折价率       | str   | -       |\n| 手续费       | str   | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_graded_fund_daily_em_df = ak.fund_graded_fund_daily_em()\nprint(fund_graded_fund_daily_em_df)\n```\n\n数据示例\n\n```\n       基金代码            基金简称    单位净值    累计净值  ...   日增长率      市价     折价率    手续费\n0    150232     申万菱信申万电子分级B  0.5598          ...  15.85  0.9080  -62.20\n1    150174  信诚中证TMT产业主题分级B  0.6580  2.0740  ...  10.77    0.76  -15.50\n2    150312   信诚中证智能家居指数分级B  0.7430  0.0960  ...  10.73  0.7570   -1.88\n3    150310   信诚中证信息安全指数分级B  0.9090  0.1040  ...   9.92  1.0790  -18.70\n4    150151  信诚中证800有色指数分级B    0.63  1.1180  ...   6.42  0.7110  -12.86\n..      ...             ...     ...     ...  ...    ...     ...     ...    ...\n341  150252   招商中证煤炭等权指数分级B                  ...         0.5120\n342  150324   工银中证环保产业指数分级B                  ...           0.74\n343  150197   国泰国证有色金属行业分级B                  ...           0.44\n344  150294   南方中证高铁产业指数分级B                  ...         0.4350\n345  161825       银华中证800分级                  ...                         1.20%\n```\n\n#### 分级基金-历史数据\n\n接口: fund_graded_fund_info_em\n\n目标地址: http://fundf10.eastmoney.com/jjjz_004186.html\n\n描述: 东方财富网站-天天基金网-基金数据-分级基金-历史数据\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                    |\n|--------|-----|-----------------------------------------------------------------------|\n| symbol | str | symbol=\"150232\"; 需要基金代码, 可以通过调用 **ak.fund_graded_fund_daily_em()** 获取 |\n\n输出参数\n\n| 名称   | 类型    | 描述                                                                       |\n|------|-------|--------------------------------------------------------------------------|\n| 净值日期 | str   | -                                                                        |\n| 单位净值 | float | -                                                                        |\n| 累计净值 | float | -                                                                        |\n| 日增长率 | float | 注意单位: %; 日增长率为空原因如下: 1. 非交易日净值不参与日增长率计算(灰色数据行). 2. 上一交易日净值未披露, 日增长率无法计算. |\n| 申购状态 | str   | -                                                                        |\n| 赎回状态 | str   | -                                                                        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_graded_fund_info_em_df = ak.fund_graded_fund_info_em(symbol=\"150232\")\nprint(fund_graded_fund_info_em_df)\n```\n\n数据示例\n\n```\n      净值日期     单位净值 累计净值 日增长率 申购状态 赎回状态\n0     2015-05-14  1.0000  1.0000   NaN  封闭期  封闭期\n1     2015-05-15  0.9997  0.9997 -0.03  封闭期  封闭期\n2     2015-05-18  0.9993  0.9993 -0.04  封闭期  封闭期\n3     2015-05-19  0.9991  0.9991 -0.02  封闭期  封闭期\n4     2015-05-20  0.9988  0.9988 -0.03  封闭期  封闭期\n...          ...     ...     ...   ...  ...  ...\n1338  2020-11-03  0.9749     NaN  1.72  封闭期  封闭期\n1339  2020-11-04  0.9830     NaN  0.83  封闭期  封闭期\n1340  2020-11-05  1.0235     NaN  4.12  封闭期  封闭期\n1341  2020-11-06  1.0453     NaN  2.13  封闭期  封闭期\n1342  2020-11-09  1.1120     NaN  6.38  封闭期  封闭期\n[1343 rows x 6 columns]\n```\n\n#### 场内交易基金-实时数据\n\n接口: fund_etf_fund_daily_em\n\n目标地址: http://fund.eastmoney.com/cnjy_dwjz.html\n\n描述: 东方财富网站-天天基金网-基金数据-场内交易基金-实时数据, 此接口数据每个交易日 **16:00～23:00**\n\n限量: 单次返回当前时刻所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称          | 类型      | 描述            |\n|-------------|---------|---------------|\n| 基金代码        | object  | -             |\n| 基金简称        | object  | -             |\n| 类型          | float64 | -             |\n| 当前交易日-单位净值  | float64 | 会返回具体的日期值作为字段 |\n| 当前交易日-累计净值  | float64 | 会返回具体的日期值作为字段 |\n| 前一个交易日-单位净值 | float64 | 会返回具体的日期值作为字段 |\n| 前一个交易日-累计净值 | float64 | 会返回具体的日期值作为字段 |\n| 增长值         | float64 | -             |\n| 增长率         | object  | -             |\n| 市价          | object  | -             |\n| 折价率         | object  | -             |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_etf_fund_daily_em_df = ak.fund_etf_fund_daily_em()\nprint(fund_etf_fund_daily_em_df)\n```\n\n数据示例\n\n```\n       基金代码             基金简称      类型  ...     增长率      市价     折价率\n0    159909   招商深证TMT50ETF行情  ETF-场内  ...   0.12%  7.0200   0.14%\n1    159991     招商创业板大盘ETF行情  ETF-场内  ...   0.64%  1.4840   0.02%\n2    150270    招商中证白酒指数分级B行情    分级杠杆  ...   2.61%  1.4650  -1.16%\n3    150262    华宝中证医疗指数分级B行情    分级杠杆  ...   0.81%  1.3930   2.64%\n4    150250    招商中证银行指数分级B行情    分级杠杆  ...  -1.06%  1.3380  -0.62%\n..      ...              ...     ...  ...     ...     ...     ...\n474  510860      兴业上证50ETF行情  ETF-场内  ...     ---     ---     ---\n475  150175    银华恒生国企指数分级A行情    固定收益  ...     ---     ---     ---\n476  150205    鹏华中证国防指数分级A行情    固定收益  ...     ---     ---     ---\n477  150321    富国中证煤炭指数分级A行情    固定收益  ...     ---     ---     ---\n478  515790  华泰柏瑞中证光伏产业ETF行情  ETF-场内  ...     ---     ---     ---\n```\n\n#### 场内交易基金-历史数据\n\n接口: fund_etf_fund_info_em\n\n目标地址: http://fundf10.eastmoney.com/jjjz_004186.html\n\n描述: 东方财富网站-天天基金网-基金数据-场内交易基金-历史净值数据\n\n限量: 单次返回当前时刻所有历史数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                             |\n|------------|-----|----------------------------------------------------------------|\n| fund       | str | fund=\"511280\"; 基金代码, 可以通过调用 **ak.fund_etf_fund_daily_em()** 获取 |\n| start_date | str | start_date=\"20000101\"; 开始时间                                    |\n| end_date   | str | end_date=\"20500101\"; 结束时间                                      |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 净值日期 | object  | -       |\n| 单位净值 | float64 | -       |\n| 累计净值 | float64 | -       |\n| 日增长率 | float64 | 注意单位: % |\n| 申购状态 | object  | -       |\n| 赎回状态 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_etf_fund_info_em_df = ak.fund_etf_fund_info_em(fund=\"511280\", start_date=\"20000101\", end_date=\"20500101\")\nprint(fund_etf_fund_info_em_df)\n```\n\n数据示例\n\n```\n     净值日期      单位净值    累计净值  日增长率  申购状态  赎回状态\n0    2018-05-03    1.0000  1.0000   NaN   封闭期   封闭期\n1    2018-05-04    1.0003  1.0003  0.03   封闭期   封闭期\n2    2018-05-11    1.0006  1.0006   NaN   封闭期   封闭期\n3    2018-05-14  100.0804  1.0008  0.02   封闭期   封闭期\n4    2018-05-18  100.1054  1.0011   NaN   封闭期   封闭期\n..          ...       ...     ...   ...   ...   ...\n779  2021-07-28  110.8370  1.1084 -0.02  场内买入  场内卖出\n780  2021-07-29  110.8154  1.1082 -0.02  场内买入  场内卖出\n781  2021-07-30  110.7640  1.1076 -0.05  场内买入  场内卖出\n782  2021-08-02  110.6097  1.1061 -0.14  场内买入  场内卖出\n783  2021-08-03  113.8015  1.1380  2.89  暂停申购  暂停赎回\n[784 rows x 6 columns]\n```\n\n#### 香港基金-历史数据\n\n接口: fund_hk_fund_hist_em\n\n目标地址: http://overseas.1234567.com.cn/f10/FundJz/968092#FHPS\n\n描述: 东方财富网站-天天基金网-基金数据-香港基金-历史净值明细\n\n限量: 单次返回指定 code 和 symbol 所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                            |\n|--------|-----|---------------------------------------------------------------|\n| code   | str | code=\"1002200683\"; 香港基金代码, 可以通过调用 **ak.fund_em_hk_rank()** 获取 |\n| symbol | str | symbol=\"历史净值明细\"; choice of {\"历史净值明细\", \"分红送配详情\"}               |\n\n输出参数-历史净值明细\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 净值日期 | object  | -       |\n| 单位净值 | float64 | -       |\n| 日增长值 | float64 | -       |\n| 日增长率 | float64 | 注意单位: % |\n| 单位   | object  | -       |\n\n接口示例-历史净值明细\n\n```python\nimport akshare as ak\n\nfund_hk_fund_hist_em_df = ak.fund_hk_fund_hist_em(code='1002200683', symbol=\"历史净值明细\")\nprint(fund_hk_fund_hist_em_df)\n```\n\n数据示例-历史净值明细\n\n```\n     净值日期     单位净值    日增长值    日增长率 单位\n0    2021-01-19  10.0056 -0.0583 -0.5793  元\n1    2021-01-18  10.0639  0.0620  0.6199  元\n2    2021-01-15  10.0019 -0.0074 -0.0739  元\n3    2021-01-14  10.0093  0.0444  0.4456  元\n4    2021-01-13   9.9649 -0.0026 -0.0261  元\n..          ...      ...     ...     ... ..\n165  2020-05-14  10.0774  0.0214  0.2128  元\n166  2020-05-13  10.0560  0.0210  0.2093  元\n167  2020-05-12  10.0350  0.0350  0.3500  元\n168  2020-05-11  10.0000  0.0000  0.0000  元\n169  2020-05-08  10.0000                  元\n```\n\n输出参数-分红送配详情\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| 年份    | object  | -   |\n| 权益登记日 | object  | -   |\n| 除息日   | object  | -   |\n| 分红发放日 | object  | -   |\n| 分红金额  | float64 | -   |\n| 单位    | object  | -   |\n\n接口示例-分红送配详情\n\n```python\nimport akshare as ak\n\nfund_hk_fund_hist_em_df = ak.fund_hk_fund_hist_em(code='1002200683', symbol=\"分红送配详情\")\nprint(fund_hk_fund_hist_em_df)\n```\n\n数据示例-分红送配详情\n\n```\n     年份权益登记日         除息日    分红发放日    分红金额 单位\n0  2020              2020-12-31              0.0522  元\n1  2020  2020-11-30  2020-11-30  2020-12-14  0.0552  元\n2  2020  2020-10-30  2020-10-30  2020-11-13  0.0573  元\n3  2020  2020-09-30  2020-09-30  2020-10-16  0.0527  元\n4  2020  2020-08-31  2020-08-31  2020-09-14  0.0545  元\n5  2020  2020-07-31  2020-07-31  2020-08-14  0.0593  元\n6  2020  2020-06-30  2020-06-30  2020-07-15  0.0669  元\n```\n\n### 分红送配\n\n#### 基金累计分红\n\n接口: fund_etf_dividend_sina\n\n目标地址: https://finance.sina.com.cn/fund/quotes/510050/bc.shtml\n\n描述: 新浪财经-基金-ETF 基金-累计分红\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"sh510050\" |\n\n输出参数\n\n| 名称   | 类型      | 描述    |\n|------|---------|-------|\n| 日期   | object  | 除权除息日 |\n| 累计分红 | float64 | -     |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_etf_dividend_sina_df = ak.fund_etf_dividend_sina(symbol=\"sh510050\")\nprint(fund_etf_dividend_sina_df)\n```\n\n数据示例\n\n```\n           日期   累计分红\n0  2006-05-19  0.024\n1  2006-11-16  0.061\n2  2008-11-19  0.121\n3  2010-11-16  0.147\n4  2012-05-16  0.158\n5  2012-11-13  0.195\n6  2013-11-15  0.248\n7  2014-11-17  0.291\n8  2016-11-29  0.344\n9  2017-11-28  0.398\n10 2018-12-03  0.447\n11 2019-12-02  0.494\n12 2020-11-30  0.545\n13 2021-11-29  0.586\n14 2022-12-01  0.623\n15 2023-11-27  0.662\n16 2024-12-02  0.717\n```\n\n#### 基金分红\n\n接口: fund_fh_em\n\n目标地址: http://fund.eastmoney.com/data/fundfenhong.html\n\n描述: 天天基金网-基金数据-分红送配-基金分红\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                                                                                                                                                                                                                                                                           |\n|------|-----|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| year | str | year=\"2025\"; 最早支持 1999 年                                                                                                                                                                                                                                                                                                     |\n| typ  | str | typ=\"\"; 空串表示全部; choice of {\"指数型-其他\", \"指数型-海外股票\", \"指数型-固收\", \"指数型-股票\", \"债券型-中短债\", \"债券型-长债\", \"债券型-理财\", \"债券型-混合债\", \"债券型-混合一级\", \"债券型-混合二级\", \"货币型-普通货币\", \"货币型-浮动净值\", \"混合型-平衡\", \"混合型-偏债\", \"混合型-偏股\", \"混合型-灵活\", \"混合型-绝对收益\", \"股票型\", \"REITs\", \"Reits\", \"QDII-商品\", \"QDII-普通股票\", \"QDII-混合债\", \"QDII-混合偏股\", \"QDII-纯债\", \"QDII-REITs\", \"FOF\"} |\n| rank | str | rank=\"BZDM\"; 排序字段; choice of {\"BZDM\", \"ABBNAME\", \"DJR\", \"FSRQ\", \"FHFCZ\", \"FFR\"}; \"BZDM\": 基金代码, \"ABBNAME\": 基金简称, \"DJR\": 权益登记日, \"FSRQ\": 除息日期, \"FHFCZ\": 分红(元/份), \"FFR\": 分红发放日                                                                                                                                                   |\n| sort | str | sort=\"asc\"; 排序方式; choice of {\"asc\", \"desc\"}                                                                                                                                                                                                                                                                                  |\n| page | int | page=-1; 请求第page页数据; -1 表示全部页面                                                                                                                                                                                                                                                                                               |\n输出参数\n\n| 名称    | 类型      | 描述        |\n|-------|---------|-----------|\n| 序号    | int64   | -         |\n| 基金代码  | object  | -         |\n| 基金简称  | object  | -         |\n| 权益登记日 | object  | -         |\n| 除息日期  | object  | -         |\n| 分红    | float64 | 注意单位: 元/份 |\n| 分红发放日 | object  | -         |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_fh_em_df = ak.fund_fh_em(year=\"2025\")\nprint(fund_fh_em_df)\n```\n\n数据示例\n\n```\n      序号   基金代码           基金简称   权益登记日      除息日期     分红      分红发放日\n0        1  000001         华夏成长混合  2025-09-22  2025-09-22  0.0100  2025-09-23\n1        2  000005     嘉实增强信用定期债券  2025-03-21  2025-03-21  0.0105  2025-03-24\n2        3  000005     嘉实增强信用定期债券  2025-06-20  2025-06-20  0.0095  2025-06-23\n3        4  000005     嘉实增强信用定期债券  2025-09-19  2025-09-19  0.0080  2025-09-22\n4        5  000017        财通可持续混合  2025-07-29  2025-07-29  0.0031  2025-07-31\n...    ...     ...            ...         ...         ...     ...         ...\n6449  6450  970072     华安证券合赢添利债券  2025-03-27  2025-03-27  0.0070  2025-03-31\n6450  6451  970072     华安证券合赢添利债券  2025-06-26  2025-06-26  0.0040  2025-06-30\n6451  6452  970086  华安证券合赢三个月持有债券  2025-03-27  2025-03-27  0.0090  2025-03-31\n6452  6453  970086  华安证券合赢三个月持有债券  2025-06-26  2025-06-26  0.0060  2025-06-30\n6453  6454  970124     国元元赢六个月定开债  2025-04-21  2025-04-21  0.0150  2025-04-23\n[6454 rows x 7 columns]\n```\n\n#### 基金拆分\n\n接口: fund_cf_em\n\n目标地址: http://fund.eastmoney.com/data/fundchaifen.html\n\n描述: 天天基金网-基金数据-分红送配-基金拆分\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                                                                                                                                                                             |\n|------|-----|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| year | str | year=\"2025\"; 最早支持 2005 年                                                                                                                                                                                                       |\n| typ  | str | typ=\"\"; 空串表示全部; choice of {\"\", \"指数型-其他\", \"指数型-海外股票\", \"指数型-固收\", \"指数型-股票\", \"债券型-中短债\", \"债券型-长债\", \"债券型-可转债\", \"债券型-混合债\", \"债券型-混合一级\", \"债券型-混合二级\", \"商品（不含QDII）\", \"货币型\", \"混合型-平衡\", \"混合型-偏债\", \"混合型-偏股\", \"混合型-灵活\", \"股票型\", \"QDII\", \"FOF\"} |\n| rank | str | rank=\"FSRQ\"; 排序字段; choice of {\"BZDM\", \"ABBNAME\", \"FSRQ\", \"FHFCZ\"}; \"BZDM\": 基金代码, \"ABBNAME\": 基金简称, \"FSRQ\": 拆分折算日, \"FHFCZ\": 拆分折算(每份)                                                                                             |\n| sort | str | sort=\"desc\"; choice of {\"asc\", \"desc\"}                                                                                                                                                                                         |\n| page | int | page=-1; 请求第page页数据; -1 表示全部页面                                                                                                                                                                                                 |\n\n输出参数\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 序号    | int64   | -        |\n| 基金代码  | object  | -        |\n| 基金简称  | object  | -        |\n| 拆分折算日 | object  | -        |\n| 拆分类型  | object  | -        |\n| 拆分折算  | float64 | 注意单位: 每份 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_cf_em_df = ak.fund_cf_em(year=\"2025\")\nprint(fund_cf_em_df)\n```\n\n数据示例\n\n```\n   序号   基金代码           基金简称       拆分折算日  拆分类型      拆分折算\n0    1  159220    华宝标普港股通低波红利ETF  2025-11-07  份额分拆  2.000000\n1    2  562000       华宝中证A100ETF  2025-11-07  份额分拆  2.000000\n2    3  562080   华宝沪深300自由现金流ETF  2025-11-07  份额分拆  2.000000\n3    4  159583     富国中证通信设备主题ETF  2025-11-05  份额分拆  2.000000\n4    5  588860  工银瑞信上证科创板生物医药ETF  2025-10-24  份额分拆  2.000000\n..  ..     ...               ...         ...   ...       ...\n77  78  159396    博时深证基准做市信用债ETF  2025-01-17  份额折算  0.010000\n78  79  511110   易方达上证基准做市公司债ETF  2025-01-17  份额折算  0.010000\n79  80  511200    华夏上证基准做市公司债ETF  2025-01-17  份额折算  0.010000\n80  81  511070    南方上证基准做市公司债ETF  2025-01-14  份额折算  0.010000\n81  82  000465     景顺长城鑫月薪定期支付债券  2025-01-09  份额折算  1.056828\n[82 rows x 6 columns]\n```\n\n#### 基金分红排行\n\n接口: fund_fh_rank_em\n\n目标地址: http://fund.eastmoney.com/data/fundleijifenhong.html\n\n描述: 天天基金网-基金数据-分红送配-基金分红排行\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述        |\n|------|---------|-----------|\n| 序号   | int64   | -         |\n| 基金代码 | object  | -         |\n| 基金简称 | object  | -         |\n| 累计分红 | float64 | 注意单位: 元/份 |\n| 累计次数 | int64   | -         |\n| 成立日期 | object  | -         |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_fh_rank_em_df = ak.fund_fh_rank_em()\nprint(fund_fh_rank_em_df)\n```\n\n数据示例\n\n```\n        序号  基金代码            基金简称      累计分红  累计次数   成立日期\n0        1  511220      海富通上证城投债ETF  32.760000    27  2014-11-13\n1        2  184801      鹏华前海万科REITS  32.528400     5  2015-07-06\n2        3  511880            银华日利A  27.060000     9  2013-04-01\n3        4  003816            银华日利B  25.794000     6  2016-11-23\n4        5  511270     海富通上证10年期ETF   9.770000    12  2018-10-12\n    ...     ...              ...        ...   ...         ...\n4616  4617  009678  浙商智多益稳健一年持有期混合C   0.001000     1  2021-01-29\n4617  4618  010539     浙商智多金稳健一年持有A   0.001000     1  2021-06-24\n4618  4619  006792     鹏华港美互联股票美元现汇   0.000607     1  2019-04-15\n4619  4620  159937          博时黄金ETF   0.000200     1  2014-08-13\n4620  4621  008139        鑫元一年中高等级债   0.000100     1  2020-03-18\n```\n\n### 基金排行\n\n#### 开放式基金排行\n\n接口: fund_open_fund_rank_em\n\n目标地址: https://fund.eastmoney.com/data/fundranking.html\n\n描述: 东方财富网-数据中心-开放式基金排行\n\n限量: 单次返回当前时刻所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                       |\n|--------|-----|--------------------------------------------------------------------------|\n| symbol | str | symbol=\"全部\"; choice of {\"全部\", \"股票型\", \"混合型\", \"债券型\", \"指数型\", \"QDII\", \"FOF\"} |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 序号   | int64   | -       |\n| 基金代码 | object  | -       |\n| 基金简称 | object  | -       |\n| 日期   | object  | -       |\n| 单位净值 | float64 | -       |\n| 累计净值 | float64 | -       |\n| 日增长率 | float64 | 注意单位: % |\n| 近1周  | float64 | 注意单位: % |\n| 近1月  | float64 | 注意单位: % |\n| 近3月  | float64 | 注意单位: % |\n| 近6月  | float64 | 注意单位: % |\n| 近1年  | float64 | 注意单位: % |\n| 近2年  | float64 | 注意单位: % |\n| 近3年  | float64 | 注意单位: % |\n| 今年来  | float64 | 注意单位: % |\n| 成立来  | float64 | 注意单位: % |\n| 自定义  | float64 | 注意单位: % |\n| 手续费  | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_open_fund_rank_em_df = ak.fund_open_fund_rank_em(symbol=\"全部\")\nprint(fund_open_fund_rank_em_df)\n```\n\n数据示例\n\n```\n      序号    基金代码                    基金简称  ...       成立来      自定义    手续费\n0          1  003384                  金鹰添盈纯债债券A  ...  146.67  138.619600  0.08%\n1          2  012623                  金鹰添盈纯债债券C  ...  106.92  133.400700  0.00%\n2          3  008729                    同泰恒利纯债C  ...  141.60  125.063500  0.00%\n3          4  008728                    同泰恒利纯债A  ...  139.84  122.035400  0.08%\n4          5  017091  景顺长城纳斯达克科技ETF联接(QDII)A人民币  ...   62.36         NaN  0.12%\n      ...     ...                        ...  ...     ...         ...    ...\n15005  15006  019983                  泓德智选启元混合C  ...  -14.00  -14.000000  0.00%\n15006  15007  020693                  长城健康消费混合C  ...    5.15    5.148741  0.00%\n15007  15008  019936  华安恒生互联网科技业ETF发起式联接(QDII)A  ...    1.39    1.390000  0.05%\n15008  15009  020880                  天弘齐享债券发起D  ...    0.21    0.207645  0.06%\n15009  15010  020738               安信宝利债券(LOF)C  ...    0.72    0.716648  0.00%\n[15010 rows x 18 columns]\n```\n\n#### 场内交易基金排行榜\n\n接口: fund_exchange_rank_em\n\n目标地址: https://fund.eastmoney.com/data/fbsfundranking.html\n\n描述: 东方财富网-数据中心-场内交易基金排行榜\n\n限量: 单次返回当前时刻所有数据, 每个交易日 17 点后更新\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 序号   | int64   | -       |\n| 基金代码 | object  | -       |\n| 基金简称 | object  | -       |\n| 类型   | object  | -       |\n| 日期   | object  | -       |\n| 单位净值 | float64 | -       |\n| 累计净值 | float64 | -       |\n| 近1周  | float64 | 注意单位: % |\n| 近1月  | float64 | 注意单位: % |\n| 近3月  | float64 | 注意单位: % |\n| 近6月  | float64 | 注意单位: % |\n| 近1年  | float64 | 注意单位: % |\n| 近2年  | float64 | 注意单位: % |\n| 近3年  | float64 | 注意单位: % |\n| 今年来  | float64 | 注意单位: % |\n| 成立来  | float64 | 注意单位: % |\n| 成立日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_exchange_rank_em_df = ak.fund_exchange_rank_em()\nprint(fund_exchange_rank_em_df)\n```\n\n数据示例\n\n```\n      序号    基金代码                基金简称  ...    今年来     成立来        成立日期\n0      1  513300  华夏纳斯达克100ETF(QDII)  ...   8.31   62.36  2020-10-22\n1      2  159632  华安纳斯达克100ETF(QDII)  ...   6.52   46.67  2022-07-21\n2      3  513100        国泰纳斯达克100ETF  ...   7.14  545.00  2013-04-25\n3      4  159941        广发纳斯达克100ETF  ...   7.07  288.28  2015-06-10\n4      5  513520        华夏野村日经225ETF  ...  11.69   42.39  2019-06-12\n..   ...     ...                 ...  ...    ...     ...         ...\n875  876  159573       华夏创业板中盘200ETF  ... -15.70  -15.30  2023-12-15\n876  877  159577      汇添富MSCI美国50ETF  ...    NaN    0.13  2024-02-05\n877  878  159549     天弘中证红利低波动100ETF  ...   3.48    2.38  2023-11-23\n878  879  159562    华夏中证沪深港黄金产业股票ETF  ...    NaN    3.62  2024-01-11\n879  880  560300        汇添富中证电信主题ETF  ...   4.35    2.64  2023-12-05\n[880 rows x 17 columns]\n```\n\n#### 货币型基金排行\n\n接口: fund_money_rank_em\n\n目标地址: https://fund.eastmoney.com/data/hbxfundranking.html\n\n描述: 东方财富网-数据中心-货币型基金排行\n\n限量: 单次返回当前时刻所有数据, 每个交易日 17 点后更新, 货币基金的单位净值均为 1.0000 元，最新一年期定存利率: 1.50%\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 序号       | int64   | -       |\n| 基金代码     | object  | -       |\n| 基金简称     | object  | -       |\n| 日期       | object  | -       |\n| 万份收益     | float64 | 注意单位: % |\n| 年化收益率7日  | float64 | 注意单位: % |\n| 年化收益率14日 | float64 | 注意单位: % |\n| 年化收益率28日 | float64 | 注意单位: % |\n| 近1月      | float64 | 注意单位: % |\n| 近3月      | float64 | 注意单位: % |\n| 近6月      | float64 | 注意单位: % |\n| 近1年      | float64 | 注意单位: % |\n| 近2年      | float64 | 注意单位: % |\n| 近3年      | float64 | 注意单位: % |\n| 近5年      | float64 | 注意单位: % |\n| 今年来      | float64 | 注意单位: % |\n| 成立来      | float64 | 注意单位: % |\n| 手续费      | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_money_rank_em_df = ak.fund_money_rank_em()\nprint(fund_money_rank_em_df)\n```\n\n数据示例\n\n```\n      序号  基金代码   基金简称          日期  ...    近5年   今年来    成立来    手续费\n0      1  004121    兴银现金添利A  2024-02-28  ...   9.83  0.39  18.94  0.00%\n1      2  002234  泰信天天收益货币B  2024-02-28  ...  11.96  0.39  22.74  0.00%\n2      3  740602      长安货币B  2024-02-28  ...  11.56  0.37  40.86  0.00%\n3      4  015972   中航航行宝货币B  2024-02-28  ...    NaN  0.39   3.78  0.00%\n4      5  001821   兴全天添益货币B  2024-02-28  ...  13.18  0.39  27.46  0.00%\n..   ...     ...        ...         ...  ...    ...   ...    ...    ...\n539  540  019040      国联日盈C  2024-02-28  ...    NaN  0.44   1.29  0.00%\n540  541  019145      长盛货币E  2024-02-28  ...    NaN  0.37   1.14  0.00%\n541  542  019769  华商现金增利货币E  2024-02-28  ...    NaN  0.34   0.74  0.00%\n542  543  019967    工银如意货币C  2024-02-28  ...    NaN  0.38   0.72  0.00%\n543  544  020097      中加货币E  2024-02-28  ...    NaN  0.35   0.52  0.00%\n[544 rows x 18 columns]\n```\n\n#### 理财基金排行\n\n接口: fund_lcx_rank_em\n\n目标地址: https://fund.eastmoney.com/data/lcxfundranking.html#t;c0;r;sSYL_Z;ddesc;pn50;f;os1;\n\n描述: 东方财富网-数据中心-理财基金排行, 每个交易日17点后更新, 货币基金的单位净值均为 1.0000 元，最新一年期定存利率: 1.50%\n\n限量: 由于目标网站没有数据，该接口暂时未能返回数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 序号       | int64   | -       |\n| 基金代码     | object  | -       |\n| 基金简称     | object  | -       |\n| 日期       | object  | -       |\n| 万份收益     | float64 | -       |\n| 年化收益率7日  | float64 | 注意单位: % |\n| 年化收益率14日 | float64 | 注意单位: % |\n| 年化收益率28日 | float64 | 注意单位: % |\n| 近1周      | float64 | 注意单位: % |\n| 近1月      | float64 | 注意单位: % |\n| 近3月      | float64 | 注意单位: % |\n| 近6月      | float64 | 注意单位: % |\n| 今年来      | float64 | 注意单位: % |\n| 成立来      | float64 | 注意单位: % |\n| 可购买      | float64 | 可购买     |\n| 手续费      | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_lcx_rank_em_df = ak.fund_lcx_rank_em()\nprint(fund_lcx_rank_em_df)\n```\n\n数据示例\n\n```\n   序号    基金代码     基金简称          日期    万份收益  ...   近6月   今年来      成立来 可购买    手续费\n0   1  531014  建信双周理财B  2021-01-17   0.783  ...  1.12  0.14  36.6531   1  0.00%\n1   2  530014  建信双周理财A  2021-01-17  0.7035  ...  0.98  0.12   33.374   1  0.00%\n```\n\n#### 香港基金排行\n\n接口: fund_hk_rank_em\n\n目标地址: https://overseas.1234567.com.cn/FundList\n\n描述: 东方财富网-数据中心-基金排行-香港基金排行\n\n限量: 单次返回当前时刻所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述                       |\n|--------|---------|--------------------------|\n| 序号     | int64   | -                        |\n| 基金代码   | object  | -                        |\n| 基金简称   | object  | -                        |\n| 币种     | object  | -                        |\n| 日期     | object  | -                        |\n| 单位净值   | float64 | -                        |\n| 日增长率   | float64 | 注意单位: %                  |\n| 近1周    | float64 | 注意单位: %                  |\n| 近1月    | float64 | 注意单位: %                  |\n| 近3月    | float64 | 注意单位: %                  |\n| 近6月    | float64 | 注意单位: %                  |\n| 近1年    | float64 | 注意单位: %                  |\n| 近2年    | float64 | 注意单位: %                  |\n| 近3年    | float64 | 注意单位: %                  |\n| 今年来    | float64 | 注意单位: %                  |\n| 成立来    | float64 | 注意单位: %                  |\n| 可购买    | object  | -                        |\n| 香港基金代码 | object  | 用于查询历史净值数据, 通过该字段查询相关的数据 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_hk_rank_em_df = ak.fund_hk_rank_em()\nprint(fund_hk_rank_em_df)\n```\n\n数据示例\n\n```\n      序号    基金代码                       基金简称  ...      成立来   可购买      香港基金代码\n0      1  968077             东方汇理创新动力股票基金分派  ...   2.5000  不可购买  1002185388\n1      2  968062                 摩根太平洋科技人民币  ...  20.7000   可购买  1002075743\n2      3  968063                  摩根太平洋科技美元  ...  16.9000  不可购买  1002075744\n3      4  968075                百达策略收益累积CNY  ...  19.6950   可购买  1002185380\n4      5  968061               摩根太平洋科技人民币对冲  ...  16.9000   可购买  1002075741\n..   ...     ...                        ...  ...      ...   ...         ...\n107  108  968031              中银香港全天候香港股票基金  ... -46.5613  不可购买  1001402919\n108  109  968006                     行健宏扬中国  ... -17.9400   可购买  1000595430\n109  110  968058  博时-安本标准精选新兴市场债券基金PRC类别A美元  ...      NaN  不可购买  1002059492\n110  111  968060  博时-安本标准精选新兴市场债券基金PRC类别I美元  ...      NaN  不可购买  1002059495\n111  112  968153                 南方东英精选美元债券  ...   1.6000  不可购买  1003656354\n[112 rows x 18 columns]\n```\n\n### 基金业绩-雪球\n\n接口: fund_individual_achievement_xq\n\n目标地址: https://danjuanfunds.com/rn/funding/:code/RankInfo?symbol=000001&fd_type=2&btn_pos=1\n\n描述: 雪球基金-基金详情-基金业绩-详情\n\n限量: 单次返回单只基金业绩详情\n\n输入参数\n\n| 名称      | 类型    | 描述                      |\n|---------|-------|-------------------------|\n| symbol  | str   | symbol=\"000001\"; 基金代码   |\n| timeout | float | timeout=None; 默认不设置超时参数 |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 业绩类型     | object  | -       |\n| 周期       | object  | -       |\n| 本产品区间收益  | float64 | 注意单位: % |\n| 本产品最大回撒  | float64 | 注意单位: % |\n| 周期收益同类排名 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_individual_achievement_xq_df = ak.fund_individual_achievement_xq(symbol=\"000001\")\nprint(fund_individual_achievement_xq_df)\n```\n\n数据示例\n\n```\n    业绩类型  周期    本产品区间收益 本产品最大回撒 周期收益同类排名\n0   年度业绩  成立以来  399.458300    54.55   128/7671\n1   年度业绩  今年以来   -0.768251    26.58  4175/7674\n2   年度业绩  2023  -21.990000    26.58  1631/1843\n3   年度业绩  2022  -17.040000    27.87   872/1740\n4   年度业绩  2021   -7.400000    21.63  1505/1625\n5   年度业绩  2020   27.660000    14.39  1023/1549\n6   年度业绩  2019   25.970000    11.81   854/1471\n7   年度业绩  2018  -19.050000    23.65   761/1278\n8   年度业绩  2017   17.110000     6.94   224/1068\n9   年度业绩  2016  -22.720000    24.67    609/681\n10  年度业绩  2015   25.860000    40.81    192/298\n11  年度业绩  2014   15.270000    10.66    134/204\n12  年度业绩  2013   15.710000     9.96     53/156\n13  年度业绩  2012    7.250000    12.67     39/132\n14  年度业绩  2011  -24.450000    29.07     81/114\n15  年度业绩  2010    3.560000    16.23     61/103\n16  年度业绩  2009   67.370000    21.29      38/87\n17  年度业绩  2008  -44.020000    53.97      18/73\n18  年度业绩  2007  130.730000    15.58      13/60\n19  年度业绩  2006  118.050000    12.46      20/45\n20  年度业绩  2005   -5.330000    18.35      32/33\n21  年度业绩  2004    3.910000    18.06       5/16\n22  年度业绩  2003   13.090000    12.68        7/7\n23  年度业绩  2002   -3.090000    11.93        1/1\n24  阶段业绩   近1月   -4.791167      NaN  6390/7643\n25  阶段业绩   近3月  -11.731204    13.78  7244/7564\n26  阶段业绩   近6月  -17.377404    19.72  5985/7313\n27  阶段业绩   近1年  -22.592303    26.58  5891/6832\n28  阶段业绩   近3年  -40.505159    48.55  3301/3783\n29  阶段业绩   近5年   -3.250474    48.55  2300/2414\n```\n\n### 净值估算\n\n接口: fund_value_estimation_em\n\n目标地址: http://fund.eastmoney.com/fundguzhi.html\n\n描述: 东方财富网-数据中心-净值估算\n\n限量: 单次返回当前交易日指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                    |\n|--------|-----|-------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol='全部'; 默认返回所有数据; choice of {'全部', '股票型', '混合型', '债券型', '指数型', 'QDII', 'ETF联接', 'LOF', '场内交易基金'} |\n\n输出参数\n\n| 名称             | 类型    | 描述  |\n|----------------|-------|-----|\n| 序号             | str   | -   |\n| 基金代码           | str   | -   |\n| 基金名称           | str   | -   |\n| 交易日-估算数据-估算值   | float | -   |\n| 交易日-估算数据-估算增长率 | str   | -   |\n| 交易日-公布数据-单位净值  | float | -   |\n| 交易日-公布数据-日增长率  | str   | -   |\n| 估算偏差           | str   | -   |\n| 交易日-单位净值       | str   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_value_estimation_em_df = ak.fund_value_estimation_em(symbol=\"混合型\")\nprint(fund_value_estimation_em_df)\n```\n\n数据示例\n\n```\n        序号    基金代码  ...    估算偏差 2021-02-18-单位净值\n0        1  164403  ...   0.06%          1.6720\n1        2  180020  ...  -0.34%          1.9700\n2        3  161810  ...  -0.47%          3.3300\n3        4  009394  ...  -1.04%          1.0705\n4        5  001763  ...   1.37%          1.5990\n    ...     ...  ...     ...             ...\n4846  4847  010895  ...     ---             ---\n4847  4848  010875  ...     ---             ---\n4848  4849  010718  ...     ---             ---\n4849  4850  010717  ...     ---             ---\n4850  4851  011059  ...     ---             ---\n```\n\n### 基金数据分析\n\n接口: fund_individual_analysis_xq\n\n目标地址: https://danjuanfunds.com/funding/000001\n\n描述: 雪球基金-基金详情-数据分析\n\n限量: 返回单只基金历史表现分析数据\n\n输入参数\n\n| 名称      | 类型    | 描述                      |\n|---------|-------|-------------------------|\n| symbol  | str   | symbol=\"000001\"; 基金代码   |\n| timeout | float | timeout=None; 默认不设置超时参数 |\n\n输出参数\n\n| 名称       | 类型      | 描述     |\n|----------|---------|--------|\n| 周期       | object  | -      |\n| 较同类风险收益比 | int64   | 注意单位：% |\n| 较同类抗风险波动 | int64   | 注意单位：% |\n| 年化波动率    | float64 | 注意单位：% |\n| 年化夏普比率   | float64 | -      |\n| 最大回撤     | float64 | 注意单位：% |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_individual_analysis_xq_df = ak.fund_individual_analysis_xq(symbol=\"000001\")\nprint(fund_individual_analysis_xq_df)\n```\n\n数据示例\n\n```\n   周期  较同类风险收益比 较同类抗风险波动  年化波动率  年化夏普比率   最大回撤\n0  近1年         3        61  12.72   -1.89  26.58\n1  近3年         9        56  18.66   -0.93  48.55\n2  近5年         2        57  19.04   -0.11  48.55\n```\n\n### 基金盈利概率\n\n接口: fund_individual_profit_probability_xq\n\n目标地址: https://danjuanfunds.com/funding/000001\n\n描述: 雪球基金-基金详情-盈利概率；历史任意时点买入，持有满X时间，盈利概率，以及平均收益\n\n限量: 单次返回单只基金历史任意时点买入，持有满 X 时间，盈利概率，以及平均收益\n\n输入参数\n\n| 名称      | 类型    | 描述                      |\n|---------|-------|-------------------------|\n| symbol  | str   | symbol=\"000001\"; 基金代码   |\n| timeout | float | timeout=None; 默认不设置超时参数 |\n\n输出参数\n\n| 名称   | 类型     | 描述     |\n|------|--------|--------|\n| 持有时长 | object | -      |\n| 盈利概率 | object | 注意单位：% |\n| 平均收益 | object | 注意单位：% |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_individual_profit_probability_xq_df = ak.fund_individual_profit_probability_xq(symbol=\"000001\")\nprint(fund_individual_profit_probability_xq_df)\n```\n\n数据示例\n\n```\n  持有时长  盈利概率 平均收益\n0  满6个月    53   5.97\n1   满1年    59  14.23\n2   满2年    66  32.34\n3   满3年    76  51.16\n```\n\n### 基金持仓资产比例\n\n接口: fund_individual_detail_hold_xq\n\n目标地址: https://danjuanfunds.com/rn/fund-detail/archive?id=103&code=000001\n\n描述: 雪球基金-基金详情-基金持仓-详情\n\n限量: 单次返回单只基金指定日期的持仓大类资产比例\n\n输入参数\n\n| 名称      | 类型    | 描述                      |\n|---------|-------|-------------------------|\n| symbol  | str   | symbol=\"000001\"; 基金代码   |\n| date    | str   | date=\"20231231\"; 季度日期   |\n| timeout | float | timeout=None; 默认不设置超时参数 |\n\n输出参数\n\n| 名称   | 类型      | 描述     |\n|------|---------|--------|\n| 资产类型 | object  | -      |\n| 仓位占比 | float64 | 注意单位：% |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_individual_detail_hold_xq_df = ak.fund_individual_detail_hold_xq(symbol=\"002804\", date=\"20231231\")\nprint(fund_individual_detail_hold_xq_df)\n```\n\n数据示例\n\n```\n  资产类型   仓位占比\n0   股票  51.95\n1   现金  19.51\n2   其他  29.09\n```\n\n### 基金基本概况\n\n接口: fund_overview_em\n\n目标地址: https://fundf10.eastmoney.com/jbgk_015641.html\n\n描述: 天天基金-基金档案-基本概况\n\n限量: 单次返回指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"015641\"; 基金代码 |\n\n输出参数\n\n| 名称      | 类型     | 描述 |\n|---------|--------|----|\n| 基金全称    | object | -  |\n| 基金简称    | object | -  |\n| 基金代码    | object | -  |\n| 基金类型    | object | -  |\n| 发行日期    | object | -  |\n| 成立日期/规模 | object | -  |\n| 资产规模    | object | -  |\n| 份额规模    | object | -  |\n| 基金管理人   | object | -  |\n| 基金托管人   | object | -  |\n| 基金经理人   | object | -  |\n| 成立来分红   | object | -  |\n| 管理费率    | object | -  |\n| 托管费率    | object | -  |\n| 销售服务费率  | object | -  |\n| 最高认购费率  | object | -  |\n| 业绩比较基准  | object | -  |\n| 跟踪标的    | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_overview_em_df = ak.fund_overview_em(symbol=\"015641\")\nprint(fund_overview_em_df)\n```\n\n数据示例\n\n```\n                 基金全称          基金简称        基金代码 基金类型         发行日期                成立日期/规模  ...       跟踪标的\n0  银华数字经济股票型发起式证券投资基金  银华数字经济股票发起式A  015641（前端）  股票型  2022年05月12日  2022年05月20日 / 0.137亿份  ...  该基金无跟踪标的\n[1 rows x 18 columns]\n```\n\n### 基金交易费率\n\n接口: fund_fee_em\n\n目标地址: https://fundf10.eastmoney.com/jjfl_015641.html\n\n描述: 天天基金-基金档案-购买信息\n\n限量: 单次返回指定 symbol 的 indicator 数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                                                          |\n|-----------|-----|-------------------------------------------------------------------------------------------------------------|\n| symbol    | str | symbol=\"015641\"; 基金代码                                                                                       |\n| indicator | str | indicator=\"申购费率\"; choice of {\"交易状态\", \"申购与赎回金额\", \"交易确认日\", \"运作费用\", \"认购费率（前端）\", \"认购费率（后端）\",\"申购费率（前端）\", \"赎回费率\"} |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| 费用类型  | object  | -  |\n| 条件或名称 | object  | -  |\n| 费用    | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_fee_em_df = ak.fund_fee_em(symbol=\"015641\", indicator=\"认购费率\")\nprint(fund_fee_em_df)\n```\n\n数据示例\n\n```\n                适用金额 适用期限      原费率 天天基金优惠费率\n0            小于100万元  ---    1.20%    0.12%\n1  大于等于100万元，小于200万元  ---    0.80%    0.08%\n2  大于等于200万元，小于500万元  ---    0.50%    0.05%\n3          大于等于500万元  ---  每笔1000元  每笔1000元\n```\n\n### 基金交易规则\n\n接口: fund_individual_detail_info_xq\n\n目标地址: https://danjuanfunds.com/djapi/fund/detail/675091\n\n描述: 雪球基金-基金详情-基金交易规则\n\n限量: 单次返回单只基金基金交易规则\n\n输入参数\n\n| 名称      | 类型    | 描述                      |\n|---------|-------|-------------------------|\n| symbol  | str   | symbol=\"000001\"; 基金代码   |\n| timeout | float | timeout=None; 默认不设置超时参数 |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| 费用类型  | object  | -  |\n| 条件或名称 | object  | -  |\n| 费用    | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_individual_detail_info_xq_df = ak.fund_individual_detail_info_xq(symbol=\"000001\")\nprint(fund_individual_detail_info_xq_df)\n```\n\n数据示例\n\n```\n   费用类型                 条件或名称      费用\n0  买入规则      0.0万<买入金额<100.0万     1.5\n1  买入规则   100.0万<=买入金额<500.0万     1.2\n2  买入规则  500.0万<=买入金额<1000.0万     0.8\n3  买入规则         1000.0万<=买入金额  1000.0\n4  卖出规则        0.0天<持有期限<7.0天     1.5\n5  卖出规则            7.0天<=持有期限     0.5\n6  其他费用                 基金管理费     1.2\n7  其他费用                 基金托管费     0.2\n```\n\n### 基金持仓\n\n接口: fund_portfolio_hold_em\n\n目标地址: https://fundf10.eastmoney.com/ccmx_000001.html\n\n描述: 天天基金网-基金档案-投资组合-基金持仓\n\n限量: 单次返回指定 symbol 和 date 的所有持仓数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                       |\n|--------|-----|----------------------------------------------------------|\n| symbol | str | symbol=\"000001\"; 基金代码, 可以通过调用 **ak.fund_name_em()** 接口获取 |\n| date   | str | date=\"2024\"; 指定年份                                        |\n\n输出参数\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 序号    | int64   | -        |\n| 股票代码  | object  | -        |\n| 股票名称  | object  | -        |\n| 占净值比例 | float64 | 注意单位: %  |\n| 持股数   | float64 | 注意单位: 万股 |\n| 持仓市值  | float64 | 注意单位: 万元 |\n| 季度    | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_portfolio_hold_em_df = ak.fund_portfolio_hold_em(symbol=\"000001\", date=\"2024\")\nprint(fund_portfolio_hold_em_df)\n```\n\n数据示例\n\n```\n   序号 股票代码  股票名称  占净值比例 持股数 持仓市值              季度\n0   1  002025   航天电器   3.46  209.92  7947.67  2024年1季度股票投资明细\n1   2  600862   中航高科   3.24  380.43  7441.16  2024年1季度股票投资明细\n2   3  600941   中国移动   2.86   62.11  6568.75  2024年1季度股票投资明细\n3   4  300395    菲利华   2.80  216.80  6417.42  2024年1季度股票投资明细\n4   5  300034   钢研高纳   2.69  403.16  6168.33  2024年1季度股票投资明细\n5   6  002371   北方华创   2.67   20.07  6134.03  2024年1季度股票投资明细\n6   7  002475   立讯精密   2.30  179.77  5287.04  2024年1季度股票投资明细\n7   8  600276   恒瑞医药   2.22  111.06  5105.35  2024年1季度股票投资明细\n8   9  600522   中天科技   1.99  325.78  4570.69  2024年1季度股票投资明细\n9  10  000100  TCL科技   1.82  893.37  4172.03  2024年1季度股票投资明细\n```\n\n### 债券持仓\n\n接口: fund_portfolio_bond_hold_em\n\n目标地址: https://fundf10.eastmoney.com/ccmx_000001.html\n\n描述: 天天基金网-基金档案-投资组合-债券持仓\n\n限量: 单次返回指定 symbol 和 date 的所有持仓数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                       |\n|--------|-----|----------------------------------------------------------|\n| symbol | str | symbol=\"000001\"; 基金代码, 可以通过调用 **ak.fund_name_em()** 接口获取 |\n| date   | str | date=\"2023\"; 指定年份                                        |\n\n输出参数\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 序号    | int64   | -        |\n| 债券代码  | object  | -        |\n| 债券名称  | object  | -        |\n| 占净值比例 | float64 | 注意单位: %  |\n| 持仓市值  | float64 | 注意单位: 万元 |\n| 季度    | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_portfolio_bond_hold_em_df = ak.fund_portfolio_bond_hold_em(symbol=\"000001\", date=\"2023\")\nprint(fund_portfolio_bond_hold_em_df)\n```\n\n数据示例\n\n```\n    序号       债券代码         债券名称  占净值比例      持仓市值              季度\n0    1     230304       23进出04   4.05  11047.16  2023年3季度债券投资明细\n1    2  101564021  15华能集MTN002   3.77  10301.03  2023年3季度债券投资明细\n2    3  101901385  19中石油MTN006   3.45   9405.76  2023年3季度债券投资明细\n3    4     220216       22国开16   2.97   8119.40  2023年3季度债券投资明细\n4    5     220411       22农发11   1.86   5088.53  2023年3季度债券投资明细\n5    6     113648         巨星转债   0.06    175.04  2023年3季度债券投资明细\n6    7     113563         柳药转债   0.04    104.69  2023年3季度债券投资明细\n7    8     123117         健帆转债   0.02     61.57  2023年3季度债券投资明细\n8    9     113633         科沃转债   0.02     66.63  2023年3季度债券投资明细\n9   10     127073         天赐转债   0.02     55.47  2023年3季度债券投资明细\n10  11     123119         康泰转2   0.02     50.93  2023年3季度债券投资明细\n11  12     113661        福22转债   0.01     40.55  2023年3季度债券投资明细\n12  13     113061         拓普转债   0.01     22.23  2023年3季度债券投资明细\n13  14     128134         鸿路转债   0.01     35.97  2023年3季度债券投资明细\n14  15     123114         三角转债   0.01     31.16  2023年3季度债券投资明细\n15  16     118019         金盘转债   0.00      2.39  2023年3季度债券投资明细\n16  17     118031        天23转债   0.00      0.21  2023年3季度债券投资明细\n17  18     123107         温氏转债   0.00      0.02  2023年3季度债券投资明细\n18  19     220014     22附息国债14   3.83  11197.77  2023年2季度债券投资明细\n19  20  101564021  15华能集MTN002   3.50  10239.61  2023年2季度债券投资明细\n20  21  101901385  19中石油MTN006   3.20   9351.59  2023年2季度债券投资明细\n21  22     220216       22国开16   2.77   8084.53  2023年2季度债券投资明细\n22  23     200207       20国开07   2.11   6168.95  2023年2季度债券投资明细\n23  24     123114         三角转债   0.15    445.84  2023年2季度债券投资明细\n24  25     113648         巨星转债   0.06    184.35  2023年2季度债券投资明细\n25  26     113563         柳药转债   0.04    108.85  2023年2季度债券投资明细\n26  27     113633         科沃转债   0.02     67.83  2023年2季度债券投资明细\n27  28     123119         康泰转2   0.02     47.93  2023年2季度债券投资明细\n28  29     123117         健帆转债   0.02     60.68  2023年2季度债券投资明细\n29  30     127073         天赐转债   0.02     62.25  2023年2季度债券投资明细\n30  31     113061         拓普转债   0.01     22.68  2023年2季度债券投资明细\n31  32     113661        福22转债   0.01     43.46  2023年2季度债券投资明细\n32  33     128134         鸿路转债   0.01     36.04  2023年2季度债券投资明细\n33  34     118019         金盘转债   0.00      2.30  2023年2季度债券投资明细\n34  35     123107         温氏转债   0.00      0.03  2023年2季度债券投资明细\n35  36     220014     22附息国债14   3.80  11139.61  2023年1季度债券投资明细\n36  37  101564021  15华能集MTN002   3.57  10476.87  2023年1季度债券投资明细\n37  38  101901385  19中石油MTN006   3.15   9245.03  2023年1季度债券投资明细\n38  39     220216       22国开16   2.74   8027.62  2023年1季度债券投资明细\n39  40     200207       20国开07   2.09   6133.08  2023年1季度债券投资明细\n40  41     123114         三角转债   0.15    444.77  2023年1季度债券投资明细\n41  42     113648         巨星转债   0.06    176.94  2023年1季度债券投资明细\n42  43     113563         柳药转债   0.04    107.36  2023年1季度债券投资明细\n43  44     127073         天赐转债   0.02     61.26  2023年1季度债券投资明细\n44  45     123117         健帆转债   0.02     67.79  2023年1季度债券投资明细\n45  46     113633         科沃转债   0.02     67.44  2023年1季度债券投资明细\n46  47     123119         康泰转2   0.02     51.18  2023年1季度债券投资明细\n47  48     113061         拓普转债   0.01     22.16  2023年1季度债券投资明细\n48  49     128134         鸿路转债   0.01     37.60  2023年1季度债券投资明细\n49  50     118019         金盘转债   0.00      2.54  2023年1季度债券投资明细\n50  51     123107         温氏转债   0.00      0.03  2023年1季度债券投资明细\n```\n\n### 行业配置\n\n接口: fund_portfolio_industry_allocation_em\n\n目标地址: https://fundf10.eastmoney.com/hytz_000001.html\n\n描述: 天天基金网-基金档案-投资组合-行业配置\n\n限量: 单次返回指定 symbol 和 date 的所有持仓数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                       |\n|--------|-----|----------------------------------------------------------|\n| symbol | str | symbol=\"000001\"; 基金代码, 可以通过调用 **ak.fund_name_em()** 接口获取 |\n| date   | str | date=\"2023\"; 指定年份                                        |\n\n输出参数\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 序号    | int64   | -        |\n| 行业类别  | object  | -        |\n| 占净值比例 | float64 | 注意单位: %  |\n| 市值    | float64 | 注意单位: 万元 |\n| 截止时间  | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_portfolio_industry_allocation_em_df = ak.fund_portfolio_industry_allocation_em(symbol=\"000001\", date=\"2023\")\nprint(fund_portfolio_industry_allocation_em_df)\n```\n\n数据示例\n\n```\n    序号              行业类别  占净值比例             市值        截止时间\n0    1               制造业  69.53  189787.963063  2023-09-30\n1    2        科学研究和技术服务业   1.61    4388.935702  2023-09-30\n2    3            批发和零售业   1.43    3896.705281  2023-09-30\n3    4               金融业   1.17    3195.408100  2023-09-30\n4    5               采矿业   1.17    3194.758900  2023-09-30\n5    6              房地产业   0.96    2629.990410  2023-09-30\n6    7          租赁和商务服务业   0.62    1688.184585  2023-09-30\n7    8   信息传输、软件和信息技术服务业   0.52    1423.173173  2023-09-30\n8    9               建筑业   0.21     571.626784  2023-09-30\n9   10           卫生和社会工作   0.20     538.414546  2023-09-30\n10  11     水利、环境和公共设施管理业   0.00       4.560998  2023-09-30\n11  12  电力、热力、燃气及水生产和供应业   0.00       3.356397  2023-09-30\n12  13               制造业  68.81  201157.775395  2023-06-30\n13  14            批发和零售业   1.41    4129.958752  2023-06-30\n14  15              房地产业   1.39    4067.173378  2023-06-30\n15  16        科学研究和技术服务业   1.26    3684.969783  2023-06-30\n16  17               采矿业   0.93    2716.791300  2023-06-30\n17  18   信息传输、软件和信息技术服务业   0.78    2268.536719  2023-06-30\n18  19               金融业   0.67    1962.987600  2023-06-30\n19  20          租赁和商务服务业   0.35    1021.826600  2023-06-30\n20  21               建筑业   0.34     982.386764  2023-06-30\n21  22           卫生和社会工作   0.33     972.647166  2023-06-30\n22  23  电力、热力、燃气及水生产和供应业   0.18     525.067947  2023-06-30\n23  24     水利、环境和公共设施管理业   0.00       2.256657  2023-06-30\n24  25               制造业  65.89  193354.962582  2023-03-31\n25  26        科学研究和技术服务业   3.92   11490.739335  2023-03-31\n26  27          租赁和商务服务业   1.90    5584.193500  2023-03-31\n27  28   信息传输、软件和信息技术服务业   1.45    4256.190176  2023-03-31\n28  29               金融业   1.35    3952.021810  2023-03-31\n29  30            批发和零售业   0.90    2635.429240  2023-03-31\n30  31              房地产业   0.86    2519.415738  2023-03-31\n31  32               建筑业   0.24     708.283312  2023-03-31\n32  33       交通运输、仓储和邮政业   0.24     699.449400  2023-03-31\n33  34         文化、体育和娱乐业   0.23     669.061400  2023-03-31\n34  35           卫生和社会工作   0.20     596.362379  2023-03-31\n35  36  电力、热力、燃气及水生产和供应业   0.01      36.160320  2023-03-31\n36  37     水利、环境和公共设施管理业   0.00      10.346959  2023-03-31\n```\n\n### 重大变动\n\n接口: fund_portfolio_change_em\n\n目标地址: https://fundf10.eastmoney.com/ccbd_000001.html\n\n描述: 天天基金网-基金档案-投资组合-重大变动\n\n限量: 单次返回指定 symbol、indicator 和 date 的所有重大变动数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                       |\n|-----------|-----|----------------------------------------------------------|\n| symbol    | str | symbol=\"003567\"; 基金代码, 可以通过调用 **ak.fund_name_em()** 接口获取 |\n| indicator | str | indicator=\"累计买入\"; choice of {\"累计买入\", \"累计卖出\"}             |\n| date      | str | date=\"2023\"; 指定年份                                        |\n\n输出参数\n\n| 名称          | 类型      | 描述       |\n|-------------|---------|----------|\n| 序号          | int64   | -        |\n| 股票代码        | object  | -        |\n| 股票名称        | object  | -        |\n| 本期累计买入金额    | float64 | 注意单位: 万元 |\n| 占期初基金资产净值比例 | float64 | 注意单位: %  |\n| 季度          | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_portfolio_change_em_df = ak.fund_portfolio_change_em(symbol=\"003567\", indicator=\"累计买入\", date=\"2023\")\nprint(fund_portfolio_change_em_df)\n```\n\n数据示例\n\n```\n    序号    股票代码  股票名称  本期累计买入金额  占期初基金资产净值比例    季度\n0    1  000063  中兴通讯  45959.42         4.19  2023年2季度累计买入股票明细\n1    2  002006  精工科技  42754.23         3.90  2023年2季度累计买入股票明细\n2    3  603533  掌阅科技  33449.27         3.05  2023年2季度累计买入股票明细\n3    4  688036  传音控股  28652.88         2.61  2023年2季度累计买入股票明细\n4    5  688258  卓易信息  28106.85         2.56  2023年2季度累计买入股票明细\n5    6  300476  胜宏科技  26217.00         2.39  2023年2季度累计买入股票明细\n6    7  300166  东方国信  23755.48         2.17  2023年2季度累计买入股票明细\n7    8  300212   易华录  23142.50         2.11  2023年2季度累计买入股票明细\n8    9  002291  遥望科技  23005.45         2.10  2023年2季度累计买入股票明细\n9   10  688111  金山办公  23023.65         2.10  2023年2季度累计买入股票明细\n10  11  300383  光环新网  19910.32         1.82  2023年2季度累计买入股票明细\n11  12  300101  振芯科技  19625.59         1.79  2023年2季度累计买入股票明细\n12  13  688596  正帆科技  19312.14         1.76  2023年2季度累计买入股票明细\n13  14  002865  钧达股份  18848.16         1.72  2023年2季度累计买入股票明细\n14  15  605377  华旺科技  18064.00         1.65  2023年2季度累计买入股票明细\n15  16  605589  圣泉集团  18005.08         1.64  2023年2季度累计买入股票明细\n16  17  603806   福斯特  17598.39         1.61  2023年2季度累计买入股票明细\n17  18  300613   富瀚微  17566.87         1.60  2023年2季度累计买入股票明细\n18  19  002919  名臣健康  16740.63         1.53  2023年2季度累计买入股票明细\n19  20  600641  万业企业  16500.35         1.51  2023年2季度累计买入股票明细\n```\n\n### 基金评级\n\n#### 基金评级总汇\n\n接口: fund_rating_all\n\n目标地址: https://fund.eastmoney.com/data/fundrating.html\n\n描述: 天天基金网-基金评级-基金评级总汇\n\n限量: 单次返回所有基金评级数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 代码     | object  | -   |\n| 简称     | object  | -   |\n| 基金经理   | object  | -   |\n| 基金公司   | object  | -   |\n| 5星评级家数 | int64   | -   |\n| 上海证券   | float64 | -   |\n| 招商证券   | float64 | -   |\n| 济安金信   | float64 | -   |\n| 手续费    | float64 | -   |\n| 类型     | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_rating_all_df = ak.fund_rating_all()\nprint(fund_rating_all_df)\n```\n\n数据示例\n\n```\n           代码               简称     基金经理 基金公司  ...  济安金信  晨星评级     手续费       类型\n0      270007             广发大盘成长混合       李巍   广发  ...   2.0   2.0  0.0015    混合型-灵活\n1      270009              广发增强债券C    张芊,方抗   广发  ...   3.0   2.0  0.0000  债券型-混合一级\n2      270010        广发沪深300ETF联接A      霍华明   广发  ...   4.0   3.0  0.0012    指数型-股票\n3      270014                广发货币B      温秀娟   广发  ...   4.0   NaN  0.0000  货币型-普通货币\n4      270025            广发行业领先混合A       程琨   广发  ...   5.0   3.0  0.0015    混合型-偏股\n...       ...                  ...      ...  ...  ...   ...   ...     ...       ...\n14518  004170            万家现金增利货币B   郅元,黄倩倩   万家  ...   4.0   NaN  0.0000  货币型-普通货币\n14519  007201          民生加银聚益纯债债券A  李文君,赵小强   民生  ...   4.0   4.0  0.0008    债券型-长债\n14520  161831  银华恒生国企指数(QDII-LOF)A      李宜璇   银华  ...   2.0   2.0  0.0012  指数型-海外股票\n14521  004238              永赢瑞益债券A  杨凡颖,余国豪   永赢  ...   4.0   3.0  0.0008    债券型-长债\n14522  000436           易方达裕惠定开混合A       胡剑  易方达  ...   5.0   NaN  0.0010    混合型-偏债\n[14523 rows x 11 columns]\n```\n\n#### 上海证券评级\n\n接口: fund_rating_sh\n\n目标地址: https://fund.eastmoney.com/data/fundrating_3.html\n\n描述: 天天基金网-基金评级-上海证券评级\n\n限量: 单次返回指定交易日的所有基金评级数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                        |\n|------|-----|---------------------------------------------------------------------------|\n| date | str | date='20230630'; https://fund.eastmoney.com/data/fundrating_3.html 获取查询日期 |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 代码         | object  | -       |\n| 简称         | object  | -       |\n| 基金经理       | object  | -       |\n| 基金公司       | object  | -       |\n| 3年期评级-3年评级 | int64   | -       |\n| 3年期评级-较上期  | float64 | -       |\n| 5年期评级-5年评级 | float64 | -       |\n| 5年期评级-较上期  | float64 | -       |\n| 单位净值       | float64 | -       |\n| 日期         | object  | -       |\n| 日增长率       | float64 | 注意单位: % |\n| 近1年涨幅      | float64 | 注意单位: % |\n| 近3年涨幅      | float64 | 注意单位: % |\n| 近5年涨幅      | float64 | 注意单位: % |\n| 手续费        | object  | -       |\n| 类型         | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_rating_sh_df = ak.fund_rating_sh(date='20230630')\nprint(fund_rating_sh_df)\n```\n\n数据示例\n\n```\n      代码           简称     基金经理    基金公司  ...  近3年涨幅  近5年涨幅    手续费  类型\n0     000004     中海可转债债券C       章俊    中海基金  ...  -8.00  24.14  0.00%\n1     000003     中海可转债债券A       章俊    中海基金  ...  -6.77  25.94  0.08%\n2     000014      华夏聚利债券A      何家琪    华夏基金  ...  27.31  61.22  0.06%\n3     000015      华夏纯债债券A      柳万军    华夏基金  ...  10.16  22.21  0.08%\n4     000046     工银产业债债券B      何秀红  工银瑞信基金  ...   8.79  26.21  0.00%\n      ...          ...      ...     ...  ...    ...    ...    ...  ..\n4632  540009   汇丰晋信消费红利股票  范坤祥,费馨涵  汇丰晋信基金  ...  -5.45  39.22  0.15%\n4633  540010   汇丰晋信科技先锋股票       陈平  汇丰晋信基金  ... -30.95  31.16  0.15%\n4634  960000    汇丰晋信大盘股票H      闵良超  汇丰晋信基金  ...    NaN    NaN\n4635  671030   西部利得事件驱动股票      张昌平  西部利得基金  ...  35.24    NaN  0.15%\n4636  673090  西部利得个股精选股票A      童国林  西部利得基金  ...   3.18  50.24  0.12%\n[4637 rows x 16 columns]\n```\n\n#### 招商证券评级\n\n接口: fund_rating_zs\n\n目标地址: http://fund.eastmoney.com/data/fundrating_2.html\n\n描述: 天天基金网-基金评级-招商证券评级\n\n限量: 单次返回指定交易日的所有基金评级数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                        |\n|------|-----|---------------------------------------------------------------------------|\n| date | str | date='20230331'; https://fund.eastmoney.com/data/fundrating_2.html 获取查询日期 |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 代码         | object  | -       |\n| 简称         | object  | -       |\n| 基金经理       | object  | -       |\n| 基金公司       | object  | -       |\n| 3年期评级-3年评级 | int64   | -       |\n| 3年期评级-较上期  | float64 | -       |\n| 单位净值       | float64 | -       |\n| 日期         | object  | -       |\n| 日增长率       | float64 | 注意单位: % |\n| 近1年涨幅      | float64 | 注意单位: % |\n| 近3年涨幅      | float64 | 注意单位: % |\n| 近5年涨幅      | float64 | 注意单位: % |\n| 手续费        | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_rating_zs_df = ak.fund_rating_zs(date='20230331')\nprint(fund_rating_zs_df)\n```\n\n数据示例\n\n```\n      代码               简称     基金经理  基金公司  ...  近1年涨幅  近3年涨幅   近5年涨幅    手续费\n0     005161        华商上游产业股票A       童立  华商基金  ...  -1.82  84.44  153.39  0.15%\n1     005660        嘉实资源精选股票A      苏文杰  嘉实基金  ...  -3.08  76.04     NaN  0.15%\n2     007130         中庚小盘价值股票      丘栋荣  中庚基金  ...   4.65  94.52     NaN  1.50%\n3     320020         诺安策略精选股票       李迪  诺安基金  ...   1.63  44.76  102.39  0.15%\n4     007538         永赢沪深300A       万纯  永赢基金  ...  -9.77   4.63     NaN  0.10%\n      ...              ...      ...   ...  ...    ...    ...     ...    ...\n3319  162714  广发深证100指数(LOF)A      陆志明  广发基金  ... -17.19 -10.96   30.65  0.12%\n3320  070009         嘉实超短债债券C      李金灿  嘉实基金  ...   2.12   6.91   13.97  0.00%\n3321  000227         华安年年红债券A      石雨欣  华安基金  ...   1.45   6.83   27.18  0.06%\n3322  002864        广发安泽短债债券A      刘志辉  广发基金  ...   2.70   8.07   16.11  0.04%\n3323  000239        华安年年盈定开债A  朱才敏,魏媛媛  华安基金  ...   0.50   8.18   32.63  0.06%\n[3324 rows x 13 columns]\n```\n\n#### 济安金信评级\n\n接口: fund_rating_ja\n\n目标地址: https://fund.eastmoney.com/data/fundrating_4.html\n\n描述: 天天基金网-基金评级-济安金信评级\n\n限量: 单次返回指定交易日的所有基金评级数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                        |\n|------|-----|---------------------------------------------------------------------------|\n| date | str | date='20200930'; https://fund.eastmoney.com/data/fundrating_4.html 获取查询日期 |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 代码         | object  | -       |\n| 简称         | object  | -       |\n| 基金经理       | object  | -       |\n| 基金公司       | object  | -       |\n| 3年期评级-3年评级 | int64   | -       |\n| 3年期评级-较上期  | float64 | -       |\n| 单位净值       | float64 | -       |\n| 日期         | object  | -       |\n| 日增长率       | float64 | 注意单位: % |\n| 近1年涨幅      | float64 | 注意单位: % |\n| 近3年涨幅      | float64 | 注意单位: % |\n| 近5年涨幅      | float64 | 注意单位: % |\n| 手续费        | object  | -       |\n| 类型         | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_rating_ja_df = ak.fund_rating_ja(date='20200930')\nprint(fund_rating_ja_df)\n```\n\n数据示例\n\n```\n          代码           简称     基金经理    基金公司  ...  近3年涨幅  近5年涨幅    手续费   类型\n0     000005   嘉实增强信用定期债券       轩璇    嘉实基金  ...  10.34  25.83  0.08%  纯债型\n1     000010   易方达天天理财货币B  石大怿,刘朝阳   易方达基金  ...   6.83  13.06  0.00%  货币型\n2     000006  西部利得量化成长混合A      盛丰衍  西部利得基金  ...  46.57    NaN  0.15%  混合型\n3     000011    华夏大盘精选混合A      陈伟彦    华夏基金  ...  12.92  48.80  0.15%  混合型\n4     000009   易方达天天理财货币A  石大怿,刘朝阳   易方达基金  ...   6.06  11.71  0.00%  货币型\n      ...          ...      ...     ...  ...    ...    ...    ...  ...\n7718  690005   民生加银内需增长混合      柳世庆  民生加银基金  ...  -6.02  66.62  0.15%  混合型\n7719  690010  民生加银现金增利货币A   张玓,郑雅洁  民生加银基金  ...   5.49  10.74  0.00%  货币型\n7720  690009   民生加银红利回报混合   王亮,邓凯成  民生加银基金  ...  -0.87  37.61  0.15%  混合型\n7721  690210  民生加银现金增利货币B   张玓,郑雅洁  民生加银基金  ...   6.25  12.09  0.00%  货币型\n7722  690202    民生增强收益债券C      谢志华  民生加银基金  ...   0.41  24.72  0.00%  二级债\n[7723 rows x 14 columns]\n```\n\n### 基金经理\n\n接口: fund_manager_em\n\n目标地址: https://fund.eastmoney.com/manager/default.html\n\n描述: 天天基金网-基金数据-基金经理大全\n\n限量: 单次返回所有基金经理数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称        | 类型      | 描述       |\n|-----------|---------|----------|\n| 序号        | int64   | -        |\n| 姓名        | object  | -        |\n| 所属公司      | object  | -        |\n| 现任基金代码    | object  | -        |\n| 现任基金      | object  | -        |\n| 累计从业时间    | int64   | 注意单位: 天  |\n| 现任基金资产总规模 | float64 | 注意单位: 亿元 |\n| 现任基金最佳回报  | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_manager_em_df = ak.fund_manager_em()\nprint(fund_manager_em_df)\n```\n\n数据示例\n\n```\n       序号   姓名    所属公司  ...累计从业时间 现任基金资产总规模 现任基金最佳回报\n0         1  艾邦妮    华夏基金  ...   1110      3.13     24.96\n1         1  艾邦妮    华夏基金  ...   1110      3.13     24.96\n2         1  艾邦妮    华夏基金  ...   1110      3.13     24.96\n3         2   艾翀  中信建投基金  ...    983      3.87     91.87\n4         2   艾翀  中信建投基金  ...    983      3.87     91.87\n...     ...  ...     ...  ...    ...       ...       ...\n32078  4080  祝祯哲    富国基金  ...    895     23.77     12.14\n32079  4081  周宗舟  汇丰晋信基金  ...    855      3.40     49.61\n32080  4081  周宗舟  汇丰晋信基金  ...    855      3.40     49.61\n32081  4081  周宗舟  汇丰晋信基金  ...    855      3.40     49.61\n32082  4081  周宗舟  汇丰晋信基金  ...    855      3.40     49.61\n[32083 rows x 8 columns]\n```\n\n### 新发基金\n\n接口: fund_new_found_em\n\n目标地址: https://fund.eastmoney.com/data/xinfound.html\n\n描述: 天天基金网-基金数据-新发基金-新成立基金\n\n限量: 单次返回所有新发基金数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 基金代码  | object  | -        |\n| 基金简称  | object  | -        |\n| 发行公司  | object  | -        |\n| 基金类型  | object  | -        |\n| 集中认购期 | object  | -        |\n| 募集份额  | float64 | 注意单位: 亿份 |\n| 成立日期  | object  | -        |\n| 成立来涨幅 | float64 | 注意单位: %  |\n| 基金经理  | object  | -        |\n| 申购状态  | object  | -        |\n| 优惠费率  | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_new_found_em_df = ak.fund_new_found_em()\nprint(fund_new_found_em_df)\n```\n\n数据示例\n\n```\n        基金代码                      基金简称    发行公司  ...   基金经理  申购状态  优惠费率\n0     019879              万家周期驱动股票发起式A    万家基金  ...     叶勇  开放申购  0.15\n1     019873                     长城短债E    长城基金  ...    邹德立   限大额  0.00\n2     019872                     长城短债D    长城基金  ...    邹德立   限大额  0.03\n3     019880              万家周期驱动股票发起式C    万家基金  ...     叶勇  开放申购  0.00\n4     019671  广发中证香港创新药ETF发起式联接(QDII)C    广发基金  ...     刘杰  开放申购  0.00\n      ...                       ...     ...  ...    ...   ...   ...\n7310  008411                  博时富信纯债债券    博时基金  ...     陈黎   限大额  0.08\n7311  008135                  华宸未来价值先锋  华宸未来基金  ...    张翼翔  开放申购  0.15\n7312  007729     招商普盛全球配置(QDII-FOF)人民币    招商基金  ...    范刚强  开放申购  0.15\n7313  008055            汇添富中债7-10年国开债C   汇添富基金  ...  何旻,李伟  开放申购  0.00\n7314  008054            汇添富中债7-10年国开债A   汇添富基金  ...  何旻,李伟  开放申购  0.05\n[7315 rows x 11 columns]\n```\n\n接口: fund_new_found_ths\n\n目标地址: https://fund.10jqka.com.cn/datacenter/xfjj/\n\n描述: 同花顺-基金数据-新发基金\n\n限量: 单次返回所有新发基金数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                  |\n|--------|-----|-------------------------------------------------------------------------------------|\n| symbol | str | choice of {\"全部\", \"发行中\", \"将发行\"} \"全部\": 全部新发基金; \"发行中\": 发行中的基金; \"将发行\": 将发行的基金; 默认为 \"全部\" |\n\n输出参数\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 基金代码  | object  | -        |\n| 基金名称  | object  | -        |\n| 投资类型  | object  | -        |\n| 募集起始日 | object  | -        |\n| 募集终止日 | object  | -        |\n| 管理人   | object  | -        |\n| 基金经理  | object  | -        |\n| 认购费率  | float64 | 注意单位: %  |\n| 最低认购  | float64 | -        |\n| 基金类型  | object  | -        |\n| 投资风格  | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_new_found_ths_df = ak.fund_new_found_ths(symbol=\"全部\")\nprint(fund_new_found_ths_df)\n```\n\n数据示例\n\n```\n       基金代码       基金名称 投资类型       募集起始日  ... 认购费率 最低认购   基金类型  投资风格\n0    020073          财通中证A500指数A  股票型  2026-02-13  ...  0.3  NaN  开放式基金   平衡型\n1    020074          财通中证A500指数C  股票型  2026-02-13  ...  0.0  NaN  开放式基金   平衡型\n2    022471  兴全安养稳健养老一年持有混合(FOF)  基金型  2026-02-26  ...  0.5  1.0  开放式基金  None\n3    023679       格林上证科创板综合指数增强A  股票型  2026-03-04  ...  0.3  1.0  开放式基金   成长型\n4    023680       格林上证科创板综合指数增强C  股票型  2026-03-04  ...  0.0  1.0  开放式基金   成长型\n..      ...                  ...  ...         ...  ...  ...  ...    ...   ...\n218  520790        兴业中证港股通互联网ETF  股票型  2026-03-02  ...  0.3  NaN    ETF   成长型\n219  560210           景顺长城农牧渔ETF  股票型  2026-02-24  ...  0.3  NaN    ETF   平衡型\n220  560400      华泰柏瑞中证全指证券公司ETF  股票型  2026-02-26  ...  0.3  NaN    ETF   平衡型\n221  560410          鹏华中证电池主题ETF  股票型  2026-03-19  ...  0.3  NaN    ETF   平衡型\n222  589250       浦银安盛科创板芯片设计ETF  股票型  2026-03-02  ...  0.3  NaN    ETF   平衡型\n[223 rows x 11 columns]\n```\n\n### 基金规模\n\n#### 开放式基金\n\n接口: fund_scale_open_sina\n\n目标地址: https://vip.stock.finance.sina.com.cn/fund_center/index.html#jjhqetf\n\n描述: 基金数据中心-基金规模-开放式基金\n\n限量: 单次返回指定 symbol 的基金规模数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                       |\n|--------|-----|--------------------------------------------------------------------------|\n| symbol | str | symbol=\"股票型基金\"; choice of {\"股票型基金\", \"混合型基金\", \"债券型基金\", \"货币型基金\", \"QDII基金\"} |\n\n输出参数\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 序号    | int64   | -        |\n| 基金代码  | object  | -        |\n| 基金简称  | object  | -        |\n| 单位净值  | float64 | 注意单位: 元  |\n| 总募集规模 | float64 | 注意单位: 万份 |\n| 最近总份额 | float64 | 注意单位: 份  |\n| 成立日期  | object  | -        |\n| 基金经理  | object  | -        |\n| 更新日期  | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_scale_open_sina_df = ak.fund_scale_open_sina(symbol='股票型基金')\nprint(fund_scale_open_sina_df)\n```\n\n数据示例\n\n```\n        序号    基金代码               基金简称  ...        成立日期     基金经理        更新日期\n0        1  510300       华泰柏瑞沪深300ETF  ...  2012-05-04       柳军  2023-11-06\n1        2  009341          易方达均衡成长股票  ...  2020-05-22       陈皓  2023-11-06\n2        3  512960        博时央企结构调整ETF  ...  2018-10-19      赵云阳  2023-11-06\n3        4  000051      华夏沪深300ETF联接A  ...  2009-07-10  张弘弢、赵宗庭  2023-11-06\n4        5  001409           工银互联网加股票  ...  2015-06-05       单文  2023-11-06\n    ...     ...                ...  ...         ...      ...         ...\n3677  3678  015676  鹏华中证移动互联网指数(LOF)C  ...  2022-05-10      罗英宇  2023-11-06\n3678  3679  160222      国泰国证食品饮料行业指数A  ...  2021-01-01       梁杏  2023-11-06\n3679  3680  160221      国泰国证有色金属行业指数A  ...  2021-01-01      吴中昊  2023-11-06\n3680  3681  160218       国泰国证房地产行业指数A  ...  2021-01-01      吴中昊  2023-11-06\n3681  3682  960000          汇丰晋信大盘股票H  ...  2015-12-29      闵良超  2023-11-06\n[3682 rows x 9 columns]\n```\n\n#### 封闭式基金\n\n接口: fund_scale_close_sina\n\n目标地址: https://vip.stock.finance.sina.com.cn/fund_center/index.html#jjhqetf\n\n描述: 基金数据中心-基金规模-封闭式基金\n\n限量: 单次返回所有封闭式基金的基金规模数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 序号    | int64   | -        |\n| 基金代码  | object  | -        |\n| 基金简称  | object  | -        |\n| 单位净值  | float64 | 注意单位: 元  |\n| 总募集规模 | float64 | 注意单位: 万份 |\n| 最近总份额 | float64 | 注意单位: 份  |\n| 成立日期  | object  | -        |\n| 基金经理  | object  | -        |\n| 更新日期  | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_scale_close_sina_df = ak.fund_scale_close_sina()\nprint(fund_scale_close_sina_df)\n```\n\n数据示例\n\n```\n      序号    基金代码            基金简称  ...        成立日期  基金经理        更新日期\n0      1  017800     招商恒鑫30个月封闭债  ...  2023-02-22   李家辉  2023-10-16\n1      2  001369    兴业稳固收益两年理财债券  ...  2015-06-10   唐丁祥  2023-11-06\n2      3  017798  易方达恒固18个月封闭债券A  ...  2023-03-06   纪玲云  2023-10-16\n3      4  017792      工银泰丰一年封闭债券  ...  2023-03-21   张略钊         NaT\n4      5  163418    兴全合兴混合(LOF)A  ...  2021-01-12    陈宇  2023-11-06\n..   ...     ...             ...  ...         ...   ...         ...\n135  136  165809       东吴中证可转债指数  ...  2014-05-09    邵笛         NaN\n136  137  519059      海富通可转债优选债券  ...  2014-05-06    何谦         NaN\n137  138  000631        中银聚利分级债券  ...  2014-06-05    陈玮         NaN\n138  139  005863    华夏鼎禄三个月定开债券C  ...  2018-10-11    孙蕾         NaN\n139  140  006394  招商添德3个月定开债发起式C  ...  2018-09-12   黄晓婷         NaN\n[140 rows x 9 columns]\n```\n\n#### 分级子基金\n\n接口: fund_scale_structured_sina\n\n目标地址: https://vip.stock.finance.sina.com.cn/fund_center/index.html#jjgmfjall\n\n描述: 基金数据中心-基金规模-分级子基金\n\n限量: 单次返回所有分级子基金的基金规模数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 序号    | int64   | -        |\n| 基金代码  | object  | -        |\n| 基金简称  | object  | -        |\n| 单位净值  | float64 | 注意单位: 元  |\n| 总募集规模 | float64 | 注意单位: 万份 |\n| 最近总份额 | float64 | 注意单位: 份  |\n| 成立日期  | object  | -        |\n| 基金经理  | object  | -        |\n| 更新日期  | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_scale_structured_sina_df = ak.fund_scale_structured_sina()\nprint(fund_scale_structured_sina_df)\n```\n\n数据示例\n\n```\n      序号    基金代码             基金简称  ...        成立日期  基金经理        更新日期\n0      1  150006            长盛同庆A  ...  2009-05-12    王宁         NaN\n1      2  150007            长盛同庆B  ...  2009-05-12    王宁         NaN\n2      3  150099         长盛同庆800B  ...  2012-05-12    王超         NaN\n3      4  150098         长盛同庆800A  ...  2012-05-12    王超         NaN\n4      5  150259       易方达重组指数分级A  ...  2015-06-03   刘树荣         NaN\n..   ...     ...              ...  ...         ...   ...         ...\n397  398  000910          鑫元合丰纯债C  ...  2016-12-27    陈浩  2023-11-09\n398  399  000501     华富恒富18个月定开债C  ...  2017-11-22   姚姣姣         NaT\n399  400  000502     华富恒富18个月定开债A  ...  2017-11-22   姚姣姣         NaT\n400  401  000623      华富恒财定期开放债券C  ...  2018-08-07   倪莉莎         NaT\n401  402  163118  申万菱信中证申万医药生物指数A  ...  2021-01-01   廖裕舟  2023-11-09\n[402 rows x 9 columns]\n```\n\n#### ETF 基金份额-上交所\n\n接口: fund_etf_scale_sse\n\n目标地址: https://www.sse.com.cn/assortment/fund/etf/list/scale/\n\n描述: 上海证券交易所-产品-基金产品-ETF产品-ETF产品列表-基金规模\n\n限量: 单次返回指定日期的 ETF 基金份额数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date=\"20250115\" |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| 序号    | int64   | -  |\n| 基金代码  | object  | -  |\n| 基金简称  | object  | -  |\n| ETF类型 | object  | -  |\n| 统计日期  | object  | -  |\n| 基金份额  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_etf_scale_sse_df = ak.fund_etf_scale_sse(date=\"20250115\")\nprint(fund_etf_scale_sse_df)\n```\n\n数据示例\n\n```\n      序号 基金代码  基金简称 ETF类型  统计日期        基金份额\n0      1  510010   治理ETF    单市  2025-01-15    20152.44\n1      2  510020   超大ETF    单市  2025-01-15     4324.80\n2      3  510030   价值ETF    单市  2025-01-15    21122.98\n3      4  510040  上证180E    单市  2025-01-15    56448.00\n4      5  510050   50ETF    单市  2025-01-15  5533716.68\n..   ...     ...     ...   ...         ...         ...\n588  589  588880    科创指数    单市  2025-01-15    46836.80\n589  590  588890     科创芯    单市  2025-01-15    23381.00\n590  591  588900  科创100N    单市  2025-01-15    40678.30\n591  592  588930   科创板AI    单市  2025-01-15    16532.90\n592  593  588990     科芯片    单市  2025-01-15    14574.54\n[593 rows x 6 columns]\n```\n\n#### ETF 基金份额-深交所\n\n接口: fund_etf_scale_szse\n\n目标地址: https://fund.szse.cn/marketdata/fundslist/index.html\n\n描述: 深圳证券交易所-基金产品-基金列表-ETF基金份额\n\n限量: 单次返回最近交易日的 ETF 基金份额数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| 基金代码  | object  | -  |\n| 基金简称  | object  | -  |\n| 基金类别  | object  | -  |\n| 投资类别  | object  | -  |\n| 上市日期  | object  | -  |\n| 基金份额  | float64 | -  |\n| 基金管理人 | object  | -  |\n| 基金发起人 | float64 | -  |\n| 基金托管人 | float64 | -  |\n| 净值    | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_etf_scale_szse_df = ak.fund_etf_scale_szse()\nprint(fund_etf_scale_szse_df)\n```\n\n数据示例\n\n```\n     基金代码        基金简称   基金类别  ... 基金发起人 基金托管人  净值\n0    159001        货币ETF易方达    ETF  ...   NaN   NaN  100.0000\n1    159003         招商快线ETF    ETF  ...   NaN   NaN  100.0000\n2    159005        汇添富快钱ETF    ETF  ...   NaN   NaN  100.0000\n3    159100           巴西ETF    ETF  ...   NaN   NaN    1.0223\n4    159101      港股通科技ETF基金    ETF  ...   NaN   NaN    0.9906\n..      ...             ...    ...  ...   ...   ...       ...\n898  180606    中金中国绿发商业REIT  不动产基金  ...   NaN   NaN       NaN\n899  180607      华夏中海商业REIT  不动产基金  ...   NaN   NaN       NaN\n900  180701    银华绍兴原水水利REIT  不动产基金  ...   NaN   NaN       NaN\n901  180801      中航首钢绿能REIT  不动产基金  ...   NaN   NaN       NaN\n902  180901  南方润泽科技数据中心REIT  不动产基金  ...   NaN   NaN       NaN\n[903 rows x 10 columns]\n```\n\n### 基金公司规模\n\n#### 基金规模详情\n\n接口: fund_aum_em\n\n目标地址: https://fund.eastmoney.com/Company/lsgm.html\n\n描述: 天天基金网-基金数据-基金规模\n\n限量: 单次返回所有基金规模数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 序号     | int64   | -        |\n| 基金公司   | object  | -        |\n| 成立时间   | object  | -        |\n| 全部管理规模 | float64 | 注意单位: 亿元 |\n| 全部基金数  | int64   | -        |\n| 全部经理数  | int64   | -        |\n| 更新日期   | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_aum_em_df = ak.fund_aum_em()\nprint(fund_aum_em_df)\n```\n\n数据示例\n\n```\n      序号          基金公司        成立时间    全部管理规模  全部基金数  全部经理数   更新日期\n0      1   易方达基金管理有限公司  2001-04-17  16599.27    632     81  11-08\n1      2    广发基金管理有限公司  2003-08-05  12701.86    660     82  11-10\n2      3    华夏基金管理有限公司  1998-04-09  12379.85    709    113  11-10\n3      4  南方基金管理股份有限公司  1998-03-06  10966.40    607     84  10-24\n4      5    天弘基金管理有限公司  2004-11-08  10486.77    334     46  11-01\n..   ...           ...         ...       ...    ...    ...    ...\n200  201    国都证券股份有限公司  2001-12-28      0.41      2      2  09-30\n201  202    天风证券股份有限公司  2000-03-29       NaN      0      0  12-31\n202  203    国新证券股份有限公司  2007-09-07       NaN      0      0  03-31\n203  204    安信证券股份有限公司  2006-08-22       NaN      0      0  03-31\n204  205    东兴证券股份有限公司  2008-05-28       NaN      0      0  03-31\n[205 rows x 7 columns]\n```\n\n#### 基金规模走势\n\n接口: fund_aum_trend_em\n\n目标地址: http://fund.eastmoney.com/Company/default.html\n\n描述: 天天基金网-基金数据-市场全部基金规模走势\n\n限量: 单次返回所有市场全部基金规模走势数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| date  | object  | -   |\n| value | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_aum_trend_em_df = ak.fund_aum_trend_em()\nprint(fund_aum_trend_em_df)\n```\n\n数据示例\n\n```\n          date         value\n0   2016-06-30  7.795280e+12\n1   2016-09-30  8.572922e+12\n2   2016-12-31  8.966215e+12\n3   2017-03-31  8.964740e+12\n4   2017-06-30  9.887788e+12\n5   2017-09-30  1.085338e+13\n6   2017-12-31  1.141607e+13\n7   2018-03-31  1.205598e+13\n8   2018-06-30  1.256286e+13\n9   2018-09-30  1.307637e+13\n10  2018-12-31  1.285114e+13\n11  2019-03-31  1.349216e+13\n12  2019-06-30  1.321250e+13\n13  2019-09-30  1.332581e+13\n14  2019-12-31  1.463123e+13\n15  2020-03-31  1.624671e+13\n16  2020-06-30  1.649092e+13\n17  2020-09-30  1.717224e+13\n18  2020-12-31  1.953767e+13\n19  2021-03-31  2.116346e+13\n20  2021-06-28  2.233053e+13\n```\n\n#### 基金公司历年管理规模\n\n接口: fund_aum_hist_em\n\n目标地址: http://fund.eastmoney.com/Company/lsgm.html\n\n描述: 天天基金网-基金数据-基金公司历年管理规模排行列表\n\n限量: 单次返回所有基金公司历年管理规模排行列表数据\n\n输入参数\n\n| 名称   | 类型  | 描述                      |\n|------|-----|-------------------------|\n| year | str | year=\"2023\"; 从 2001 年开始 |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 序号   | int64   | -   |\n| 基金公司 | object  | -   |\n| 总规模  | float64 | -   |\n| 股票型  | float64 | -   |\n| 混合型  | float64 | -   |\n| 债券型  | float64 | -   |\n| 指数型  | float64 | -   |\n| QDII | float64 | -   |\n| 货币型  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_aum_hist_em_df = ak.fund_aum_hist_em(year=\"2023\")\nprint(fund_aum_hist_em_df)\n```\n\n数据示例\n\n```\n      序号       基金公司       总规模      股票型  ...    债券型    指数型    QDII      货币型\n0      1   易方达基金管理有限公司  16514.20  2704.67  ...  3221.98  2343.89  763.82  6802.29\n1      2    广发基金管理有限公司  12633.03  1124.83  ...  2749.18  1179.12  394.54  6046.73\n2      3    华夏基金管理有限公司  12238.81  3551.49  ...  1924.34  3430.87  785.84  4458.91\n3      4  南方基金管理股份有限公司  10853.73  1266.44  ...  2198.48  1453.78   83.07  5791.66\n4      5    天弘基金管理有限公司  10479.03   817.96  ...  1908.11   862.39  153.29  7405.90\n..   ...           ...       ...      ...  ...      ...      ...     ...      ...\n194  195    瑞达基金管理有限公司      1.05      NaN  ...      NaN      NaN     NaN      NaN\n195  196    华创证券有限责任公司      1.03      NaN  ...     1.03      NaN     NaN      NaN\n196  197  明亚基金管理有限责任公司      1.00     0.47  ...      NaN     0.47     NaN      NaN\n197  198    华鑫证券有限责任公司      0.72      NaN  ...     0.72      NaN     NaN      NaN\n198  199    国都证券股份有限公司      0.41      NaN  ...      NaN      NaN     NaN      NaN\n[199 rows x 9 columns]\n```\n\n### REITs\n\n#### REITs-实时行情\n\n接口: reits_realtime_em\n\n目标地址: http://quote.eastmoney.com/center/gridlist.html#fund_reits_all\n\n描述: 东方财富网-行情中心-REITs-沪深 REITs-实时行情\n\n限量: 单次返回所有 REITs 的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 序号  | int64   | -       |\n| 代码  | object  | -       |\n| 名称  | object  | -       |\n| 最新价 | float64 | -       |\n| 涨跌额 | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 成交量 | int64   | -       |\n| 成交额 | float64 | -       |\n| 开盘价 | float64 | -       |\n| 最高价 | float64 | -       |\n| 最低价 | float64 | -       |\n| 昨收  | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nreits_realtime_em_df = ak.reits_realtime_em()\nprint(reits_realtime_em_df)\n```\n\n数据示例\n\n```\n    序号  代码               名称    最新价  ...    开盘价    最高价  最低价     昨收\n0    1  508026   嘉实中国电建清洁能源REIT  4.180  ...  4.110  4.199  4.110  4.150\n1    2  508009       中金安徽交控REIT  7.749  ...  7.722  7.781  7.687  7.722\n2    3  180106    广发成都高投产业园REIT  4.064  ...  4.053  4.100  4.000  4.050\n3    4  180401       鹏华深圳能源REIT  6.361  ...  6.348  6.379  6.344  6.344\n4    5  508008       国金中国铁建REIT  9.460  ...  9.434  9.486  9.425  9.435\n..  ..     ...              ...    ...  ...    ...    ...    ...    ...\n58  59  180102       华夏合肥高新REIT  2.196  ...  2.218  2.245  2.172  2.245\n59  60  508021  国泰君安临港创新产业园REIT  4.415  ...  4.515  4.526  4.388  4.515\n60  61  508066       华泰江苏交控REIT  6.524  ...  6.650  6.730  6.521  6.679\n61  62  180302        华夏深国际REIT  2.829  ...  2.888  2.988  2.822  2.928\n62  63  508007       中金山东高速REIT  8.184  ...  8.432  8.432  8.180  8.472\n[63 rows x 12 columns]\n```\n\n#### REITs-历史行情\n\n接口: reits_hist_em\n\n目标地址: https://quote.eastmoney.com/sh508097.html\n\n描述: 东方财富网-行情中心-REITs-沪深 REITs-历史行情\n\n限量: 单次返回指定 symbol 的历史行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                        |\n|--------|-----|---------------------------|\n| symbol | str | symbol=\"508097\"; REITs 代码 |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 日期  | object  | -       |\n| 今开  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 最新价 | float64 | -       |\n| 成交量 | int64   | -       |\n| 成交额 | float64 | -       |\n| 振幅  | float64 | 注意单位: % |\n| 换手  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nreits_hist_em_df = ak.reits_hist_em(symbol=\"508097\")\nprint(reits_hist_em_df)\n```\n\n数据示例\n\n```\n      日期       今开    最高   最低   最新价    成交量 成交额    振幅    换手\n0   2024-12-03  2.599  2.599  2.567  2.595  26355  6792450.0  1.25  0.66\n1   2024-12-04  2.595  2.600  2.557  2.600   5391  1397092.0  1.66  0.13\n2   2024-12-05  2.600  2.600  2.572  2.592   1481   383988.0  1.08  0.04\n3   2024-12-06  2.592  2.703  2.592  2.694   3165   829019.0  4.28  0.08\n4   2024-12-09  2.717  2.800  2.717  2.769   7622  2099354.0  3.08  0.19\n..         ...    ...    ...    ...    ...    ...        ...   ...   ...\n71  2025-03-21  3.311  3.348  3.293  3.347   2408   801004.0  1.66  0.06\n72  2025-03-24  3.346  3.420  3.346  3.408   6742  2289801.0  2.21  0.17\n73  2025-03-25  3.408  3.479  3.408  3.448   4742  1631309.0  2.08  0.12\n74  2025-03-26  3.432  3.520  3.419  3.515   3782  1314263.0  2.93  0.09\n75  2025-03-27  3.498  3.600  3.498  3.570   3915  1389384.0  2.90  0.10\n[76 rows x 9 columns]\n```\n\n### 基金报告\n\n#### 基金重仓股\n\n接口: fund_report_stock_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-专题统计-基金报表-基金重仓股\n\n限量: 返回指定 date 的所有数据; date 从 2017 年开始\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                                       |\n|------|-----|------------------------------------------------------------------------------------------|\n| date | str | date=\"20210630\"; choice of {\"XXXX0331\", \"XXXX0630\", \"XXXX0930\", \"XXXX1231\"}, 其中 XXXX 为年份 |\n\n输出参数\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 序号     | int64  | -   |\n| 股票代码   | object | -   |\n| 股票简称   | object | -   |\n| 报告期    | object | -   |\n| 基金覆盖家数 | int64  | -   |\n| 持股总数   | object | -   |\n| 持股总市值  | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_report_stock_cninfo_df = ak.fund_report_stock_cninfo(date=\"20210630\")\nprint(fund_report_stock_cninfo_df)\n```\n\n数据示例\n\n```\n       序号  股票代码  股票简称   报告期  基金覆盖家数   持股总数  持股总市值\n0        1  605011  杭州热电  2021-06-30    3722  1928625   1712.62\n1        2  603171  税友股份  2021-06-30    3653  2289995   4396.79\n2        3  001208  华菱线缆  2021-06-30    3593  6218772   4807.11\n3        4  605287  德才股份  2021-06-30    3461  1200847   3789.87\n4        5  601528  瑞丰银行  2021-06-30    3324  7284126  11341.38\n...    ...     ...   ...         ...     ...      ...       ...\n3951  3952  836239  长虹能源  2021-06-30       1   273070   1791.34\n3952  3953  836675  秉扬科技  2021-06-30       1   477163    660.87\n3953  3954  836826  盖世食品  2021-06-30       1  1731830   1087.59\n3954  3955  837344  三元基因  2021-06-30       1   274142    610.79\n3955  3956  839167  同享科技  2021-06-30       1   315074    667.96\n```\n\n#### 基金行业配置\n\n接口: fund_report_industry_allocation_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-专题统计-基金报表-基金行业配置\n\n限量: 返回指定 date 的所有数据; date 从 2017 年开始\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                                       |\n|------|-----|------------------------------------------------------------------------------------------|\n| date | str | date=\"20210630\"; choice of {\"XXXX0331\", \"XXXX0630\", \"XXXX0930\", \"XXXX1231\"}, 其中 XXXX 为年份 |\n\n输出参数\n\n| 名称      | 类型      | 描述       |\n|---------|---------|----------|\n| 行业编码    | object  | -        |\n| 证监会行业名称 | object  | -        |\n| 报告期     | object  | -        |\n| 基金覆盖家数  | int64   | 注意单位: 只  |\n| 行业规模    | float64 | 注意单位: 亿元 |\n| 占净资产比例  | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_report_industry_allocation_cninfo_df = ak.fund_report_industry_allocation_cninfo(date=\"20210630\")\nprint(fund_report_industry_allocation_cninfo_df)\n```\n\n数据示例\n\n```\n   行业编码           证监会行业名称         报告期  基金覆盖家数      行业规模  占净资产比例\n0     A          农、林、牧、渔业  2021-06-30    3117    225.63    0.10\n1     B               采矿业  2021-06-30    2182    807.04    0.35\n2     C               制造业  2021-06-30    4897  37945.44   16.66\n3     D  电力、热力、燃气及水生产和供应业  2021-06-30    4044    350.24    0.15\n4     E               建筑业  2021-06-30    3931    236.84    0.10\n5     F            批发和零售业  2021-06-30    3802    352.99    0.15\n6     G       交通运输、仓储和邮政业  2021-06-30    2150    739.33    0.32\n7     H            住宿和餐饮业  2021-06-30     513    145.43    0.06\n8     I   信息传输、软件和信息技术服务业  2021-06-30    4472   2501.85    1.10\n9     J               金融业  2021-06-30    4348   4539.41    1.99\n10    K              房地产业  2021-06-30    2062    669.58    0.29\n11    L          租赁和商务服务业  2021-06-30    2410   1035.95    0.45\n12    M        科学研究和技术服务业  2021-06-30    3052   1595.45    0.70\n13    N     水利、环境和公共设施管理业  2021-06-30    3486    124.66    0.05\n14    O     居民服务、修理和其他服务业  2021-06-30       1      0.00    0.00\n15    P                教育  2021-06-30     737     77.00    0.03\n16    Q           卫生和社会工作  2021-06-30    1877   1487.55    0.65\n17    R         文化、体育和娱乐业  2021-06-30    1386    375.28    0.16\n18    S                综合  2021-06-30     278     60.31    0.03\n```\n\n#### 基金资产配置\n\n接口: fund_report_asset_allocation_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-专题统计-基金报表-基金资产配置\n\n限量: 返回所有基金资产配置数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称            | 类型     | 描述       |\n|---------------|--------|----------|\n| 报告期           | object | -        |\n| 基金覆盖家数        | object | 注意单位: 只  |\n| 股票权益类占净资产比例   | object | 注意单位: %  |\n| 债券固定收益类占净资产比例 | object | 注意单位: %  |\n| 现金货币类占净资产比例   | object | 注意单位: %  |\n| 基金市场净资产规模     | object | 注意单位: 亿元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_report_asset_allocation_cninfo_df = ak.fund_report_asset_allocation_cninfo()\nprint(fund_report_asset_allocation_cninfo_df)\n```\n\n数据示例\n\n```\n      报告期  基金覆盖家数  股票权益类占净资产比例  债券固定收益类占净资产比例  现金货币类占净资产比例  基金市场净资产规模\n0   2024-06-30   11600        18.72          58.23        19.68  303791.15\n1   2024-03-31   11346        20.37          58.42        20.17  286070.29\n2   2023-12-31   11012        21.36          58.07        20.63  270156.52\n3   2023-09-30   10776        22.22          57.36        17.84  270492.99\n4   2023-06-30   10539        22.58          56.70        19.31  272807.40\n..         ...     ...          ...            ...          ...        ...\n63  2008-09-30     392        57.63          30.48        10.80   18272.96\n64  2008-06-30     358        62.90          19.38        10.67   20680.07\n65  2008-03-31     342        68.70          14.88        13.48   25757.00\n66  2007-12-31     342        74.32          10.17        10.85   32918.04\n67  2007-09-30     327        77.00           9.25        12.32   29924.06\n[68 rows x 6 columns]\n```\n\n### 规模份额\n\n#### 规模变动\n\n接口: fund_scale_change_em\n\n目标地址: https://fund.eastmoney.com/data/gmbdlist.html\n\n描述: 天天基金网-基金数据-规模份额-规模变动\n\n限量: 返回所有规模变动数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 序号    | int64   | -        |\n| 截止日期  | object  | -        |\n| 基金家数  | int64   | -        |\n| 期间申购  | float64 | 注意单位: 亿份 |\n| 期间赎回  | float64 | 注意单位: 亿份 |\n| 期末总份额 | float64 | 注意单位: 亿份 |\n| 期末净资产 | float64 | 注意单位: 亿份 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_scale_change_em_df = ak.fund_scale_change_em()\nprint(fund_scale_change_em_df)\n```\n\n数据示例\n\n```\n      序号  截止日期   基金家数  期间申购  期间赎回      期末总份额   期末净资产\n0      1  2023-09-30  18788  358045.47  360752.19  264069.33  273412.57\n1      2  2023-06-30  18132  340624.75  330338.84  264410.61  275641.99\n2      3  2023-03-31  17531  325891.23  324651.27  251161.43  264545.81\n3      4  2022-12-31  16880  307176.62  317969.28  246613.07  258026.93\n4      5  2022-09-30  16180  313441.70  310953.24  253704.92  264088.21\n..   ...         ...    ...        ...        ...        ...        ...\n97    98  1999-06-30     12        NaN        NaN     260.00     360.04\n98    99  1999-03-31      6        NaN        NaN     120.00     128.21\n99   100  1998-12-31      5        NaN        NaN     100.00     107.42\n100  101  1998-09-30      5        NaN        NaN     100.00     101.79\n101  102  1998-06-30      4        NaN        NaN      80.00      82.72\n[102 rows x 7 columns]\n```\n\n#### 持有人结构\n\n接口: fund_hold_structure_em\n\n目标地址: https://fund.eastmoney.com/data/cyrjglist.html\n\n描述: 天天基金网-基金数据-规模份额-持有人结构\n\n限量: 返回所有持有人结构数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 序号     | int64   | -        |\n| 截止日期   | object  | -        |\n| 基金家数   | int64   | -        |\n| 机构持有比列 | float64 | 注意单位: %  |\n| 个人持有比列 | float64 | 注意单位: %  |\n| 内部持有比列 | float64 | 注意单位: %  |\n| 总份额    | float64 | 注意单位: 亿份 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_hold_structure_em_df = ak.fund_hold_structure_em()\nprint(fund_hold_structure_em_df)\n```\n\n数据示例\n\n```\n    序号  截止日期  基金家数 机构持有比列 个人持有比列 内部持有比列  总份额\n0    1  2023-06-30  17981   45.77   54.12    1.14  263786.82\n1    2  2022-12-31  16726   46.74   53.23    1.12  245886.54\n2    3  2022-06-30  15373   48.43   51.67    0.92  245830.19\n3    4  2021-12-31  13551   47.37   52.84    0.81  223047.85\n4    5  2021-06-30  11800   46.79   53.68    0.65  203021.86\n5    6  2020-12-31  10613   48.55   51.80    0.60  177103.29\n6    7  2020-06-30   9618   50.46   49.83    0.58  161524.18\n7    8  2019-12-31   8602   49.35   50.73    0.48  148597.63\n8    9  2019-06-30   7816   48.47   51.78    0.45  147281.28\n9   10  2018-12-31   7121   48.11   52.39    0.34  142042.26\n10  11  2018-06-30   7021   44.02   56.00    0.28  140090.11\n11  12  2017-12-31   6591   48.18   51.91    0.24  122782.24\n12  13  2017-06-30   6120   49.24   50.77    0.27  118044.49\n13  14  2016-12-31   4921   53.77   46.92    0.31  109800.64\n14  15  2016-06-30   4179   53.98   46.01    0.26  117137.30\n15  16  2015-12-31   4193   47.42   52.57    0.40  122292.88\n16  17  2015-06-30   3339   38.34   61.55    0.55   91637.69\n17  18  2014-12-31   2500   28.30   72.02    0.64   61490.76\n18  19  2014-06-30   2227   27.46   72.38    0.91   57789.93\n19  20  2013-12-31   1961   26.91   74.45    1.33   41896.32\n20  21  2013-06-30   1688   25.10   78.03    1.41   34968.03\n21  22  2012-12-31   1391   27.56   72.49    1.47   30319.83\n22  23  2012-06-30   1169   23.78   75.82    2.24   27154.95\n23  24  2011-12-31   1017   25.04   77.67    1.99   25755.88\n24  25  2011-06-30    876   20.19   79.76    1.35   23881.04\n25  26  2010-12-31    750   21.34   80.29    1.36   22991.23\n26  27  2010-06-30    664   16.62   86.15    0.99   23082.30\n27  28  2009-12-31    600   20.27   82.84    0.36   23112.19\n28  29  2009-06-30    522   14.58   88.84    0.03   21839.02\n29  30  2008-12-31    455   15.70   86.93    0.02   24780.24\n30  31  2008-06-30    391   12.40   92.53    0.01   21690.83\n31  32  2007-12-31    367   11.12   93.65    0.01   21479.03\n32  33  2007-06-30    340   15.46   91.26    0.35   11237.33\n33  34  2006-12-31    300   37.44   81.51    0.00    4024.31\n34  35  2006-06-30    249   60.80   65.54    0.00    2759.32\n35  36  2005-12-31    211   55.68   60.64    0.00    3904.09\n36  37  2005-06-30    184   56.04   66.87    0.00    3521.60\n37  38  2004-12-31    153   55.29   79.25    0.00    2365.37\n38  39  2004-06-30    127   66.97   79.44    0.00    1759.85\n```\n\n### 基金仓位\n\n#### 股票型基金仓位\n\n接口: fund_stock_position_lg\n\n目标地址: https://legulegu.com/stockdata/fund-position/pos-stock\n\n描述: 乐咕乐股-基金仓位-股票型基金仓位\n\n限量: 返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型      | 描述               |\n|----------|---------|------------------|\n| date     | object  | -                |\n| close    | float64 | 注意单位: 沪深 300 收盘价 |\n| position | float64 | 注意单位: 持仓比例       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_stock_position_lg_df = ak.fund_stock_position_lg()\nprint(fund_stock_position_lg_df)\n```\n\n数据示例\n\n```\n           date    close  position\n0    2017-12-04  4018.86     89.25\n1    2017-12-08  4003.38     90.57\n2    2017-12-15  3980.86     90.43\n3    2017-12-22  4054.60     90.27\n4    2017-12-29  4030.85     90.34\n..          ...      ...       ...\n256  2022-11-25  3775.78     87.73\n257  2022-12-02  3870.95     89.01\n258  2022-12-09  3998.24     89.58\n259  2022-12-16  3954.23     90.10\n260  2022-12-23  3828.22     89.67\n```\n\n#### 平衡混合型基金仓位\n\n接口: fund_balance_position_lg\n\n目标地址: https://legulegu.com/stockdata/fund-position/pos-pingheng\n\n描述: 乐咕乐股-基金仓位-平衡混合型基金仓位\n\n限量: 返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型      | 描述               |\n|----------|---------|------------------|\n| date     | object  | -                |\n| close    | float64 | 注意单位: 沪深 300 收盘价 |\n| position | float64 | 注意单位: 持仓比例       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_balance_position_lg_df = ak.fund_balance_position_lg()\nprint(fund_balance_position_lg_df)\n```\n\n数据示例\n\n```\n           date    close  position\n0    2017-12-04  4018.86     68.03\n1    2017-12-08  4003.38     70.94\n2    2017-12-15  3980.86     71.28\n3    2017-12-22  4054.60     71.88\n4    2017-12-29  4030.85     72.29\n..          ...      ...       ...\n256  2022-11-25  3775.78     65.26\n257  2022-12-02  3870.95     66.41\n258  2022-12-09  3998.24     67.51\n259  2022-12-16  3954.23     68.88\n260  2022-12-23  3828.22     68.28\n```\n\n#### 灵活配置型基金仓位\n\n接口: fund_linghuo_position_lg\n\n目标地址: https://legulegu.com/stockdata/fund-position/pos-linghuo\n\n描述: 乐咕乐股-基金仓位-灵活配置型基金仓位\n\n限量: 返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型      | 描述               |\n|----------|---------|------------------|\n| date     | object  | -                |\n| close    | float64 | 注意单位: 沪深 300 收盘价 |\n| position | float64 | 注意单位: 持仓比例       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_linghuo_position_lg_df = ak.fund_linghuo_position_lg()\nprint(fund_linghuo_position_lg_df)\n```\n\n数据示例\n\n```\n           date    close  position\n0    2017-12-04  4018.86     51.44\n1    2017-12-08  4003.38     52.48\n2    2017-12-15  3980.86     52.59\n3    2017-12-22  4054.60     52.70\n4    2017-12-29  4030.85     53.18\n..          ...      ...       ...\n256  2022-11-25  3775.78     69.86\n257  2022-12-02  3870.95     71.01\n258  2022-12-09  3998.24     71.95\n259  2022-12-16  3954.23     72.73\n260  2022-12-23  3828.22     72.55\n```\n\n### 基金公告\n\n#### 分红配送\n\n接口: fund_announcement_dividend_em\n\n目标地址: https://fundf10.eastmoney.com/jjgg_000001_2.html\n\n描述: 东方财富网站-天天基金网-基金档案-基金公告-分红配送\n\n限量: 返回所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                 |\n|--------|-----|------------------------------------|\n| symbol | str | 基金代码，可以通过调用 ak.fund_name_em() 接口获取 |\n\n输出参数\n\n| 名称   | 类型     | 描述                     |\n|------|--------|------------------------|\n| 基金代码 | object | 基金代码                   |\n| 公告标题 | object | -                      |\n| 基金名称 | object | 基金名称                   |\n| 公告日期 | object | 公告的发布日期                |\n| 报告ID | object | 获取报告详情的依据; 拼接后可以获取公告地址 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_announcement_dividend_em_df = ak.fund_announcement_dividend_em(symbol=\"000001\")\nprint(fund_announcement_dividend_em_df)\n```\n\n数据示例\n\n```\n      基金代码                               公告标题    基金名称        公告日期                  报告ID\n0   000001  华夏成长：分红预案暨恢复办理前端申购、转换转入及定期定额业务的公告  华夏成长混合  2007-01-11  AN201202270004188634\n1   000001                      华夏成长：收益分配结果公告  华夏成长混合  2007-01-12  AN201202270004188696\n2   000001                      华夏成长：第十四次分红公告  华夏成长混合  2008-01-21  AN201202280004340626\n3   000001                      华夏成长：第十五次分红公告  华夏成长混合  2009-12-23  AN201202280004349731\n4   000001                      华夏成长：第十六次分红公告  华夏成长混合  2010-09-03  AN201203010004668233\n5   000001             华夏基金：关于调整基金分红方式变更规则的公告  华夏成长混合  2011-04-25  AN201203020004814462\n6   000001                 华夏成长证券投资基金第十七次分红公告  华夏成长混合  2014-11-14  AN201411140007631861\n7   000001                 华夏成长证券投资基金第十八次分红公告  华夏成长混合  2015-11-16  AN201511160011417234\n8   000001                 华夏成长证券投资基金第十九次分红公告  华夏成长混合  2016-12-20  AN201612200201481224\n9   000001                 华夏成长证券投资基金第二十次分红公告  华夏成长混合  2017-12-04  AN201712041061520183\n10  000001                华夏成长证券投资基金第二十一次分红公告  华夏成长混合  2019-11-04  AN201911041370282062\n11  000001                华夏成长证券投资基金第二十二次分红公告  华夏成长混合  2020-12-15  AN202012151440056896\n12  000001                华夏成长证券投资基金第二十三次分红公告  华夏成长混合  2021-12-15  AN202112151534669937\n13  000001                华夏成长证券投资基金第二十四次分红公告  华夏成长混合  2023-01-10  AN202301101581832718\n```\n\n#### 定期报告\n\n接口: fund_announcement_report_em\n\n目标地址: https://fundf10.eastmoney.com/jjgg_000001_3.html\n\n描述: 东方财富网站-天天基金网-基金档案-基金公告-定期报告\n\n限量: 返回所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                 |\n|--------|-----|------------------------------------|\n| symbol | str | 基金代码，可以通过调用 ak.fund_name_em() 接口获取 |\n\n输出参数\n\n| 名称   | 类型     | 描述                     |\n|------|--------|------------------------|\n| 基金代码 | object | 基金代码                   |\n| 公告标题 | object | -                      |\n| 基金名称 | object | 基金名称                   |\n| 公告日期 | object | 公告的发布日期                |\n| 报告ID | object | 获取报告详情的依据; 拼接后可以获取公告地址 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_announcement_report_em_df = ak.fund_announcement_report_em(symbol=\"000001\")\nprint(fund_announcement_report_em_df)\n```\n\n数据示例\n\n```\n      基金代码                   公告标题    基金名称        公告日期                  报告ID\n0   000001         华夏成长：2011年年度报告  华夏成长混合  2012-03-30  AN201203300005099372\n1   000001       华夏成长：2012年第一季度报告  华夏成长混合  2012-04-23  AN201205070005160501\n2   000001       华夏成长：2012年第二季度报告  华夏成长混合  2012-07-18  AN201207180005363504\n3   000001        华夏成长：2012年半年度报告  华夏成长混合  2012-08-28  AN201208280005468375\n4   000001      华夏成长：2012年半年度报告摘要  华夏成长混合  2012-08-28  AN201208280005468376\n..     ...                    ...     ...         ...                   ...\n95  000001  华夏成长证券投资基金2024年第4季度报告  华夏成长混合  2025-01-22  AN202501221642432601\n96  000001    华夏成长证券投资基金2024年年度报告  华夏成长混合  2025-03-31  AN202503311649448425\n97  000001  华夏成长证券投资基金2025年第1季度报告  华夏成长混合  2025-04-22  AN202504221660344553\n98  000001  华夏成长证券投资基金2025年第2季度报告  华夏成长混合  2025-07-21  AN202507211712819893\n99  000001    华夏成长证券投资基金2025年中期报告  华夏成长混合  2025-08-30  AN202508301736777385\n[100 rows x 5 columns]\n```\n\n#### 人事公告\n\n接口: fund_announcement_personnel_em\n\n目标地址: http://fundf10.eastmoney.com/jjgg_000001_4.html\n\n描述: 东方财富网站-天天基金网-基金档案-基金公告-人事调整\n\n限量: 返回所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                 |\n|--------|-----|------------------------------------|\n| symbol | str | 基金代码，可以通过调用 ak.fund_name_em() 接口获取 |\n\n输出参数\n\n| 名称   | 类型     | 描述                     |\n|------|--------|------------------------|\n| 基金代码 | object | 基金代码                   |\n| 公告标题 | object | -                      |\n| 基金名称 | object | 基金名称                   |\n| 公告日期 | object | 公告的发布日期                |\n| 报告ID | object | 获取报告详情的依据; 拼接后可以获取公告地址 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfund_announcement_personnel_em_df = ak.fund_announcement_personnel_em(symbol=\"000001\")\nprint(fund_announcement_personnel_em_df)\n```\n\n数据示例\n\n```\n      基金代码                               公告标题    基金名称        公告日期                  报告ID\n0   000001    华夏基金管理有限公司关于调整华夏成长证券投资基金基金经理的公告  华夏成长混合  2013-06-29  AN201306290003484248\n1   000001    华夏基金管理有限公司关于增聘华夏成长证券投资基金基金经理的公告  华夏成长混合  2014-03-18  AN201403180005270024\n2   000001    华夏基金管理有限公司关于调整华夏成长证券投资基金基金经理的公告  华夏成长混合  2014-06-21  AN201406210006119867\n3   000001    华夏基金管理有限公司关于调整华夏成长证券投资基金基金经理的公告  华夏成长混合  2015-01-09  AN201501090008098479\n4   000001  华夏基金管理有限公司关于调整华夏成长证券投资公告基金基金经理的公告  华夏成长混合  2015-11-21  AN201511210011484696\n5   000001    华夏基金管理有限公司关于调整华夏成长证券投资基金基金经理的公告  华夏成长混合  2017-01-14  AN201701140268312342\n6   000001    华夏基金管理有限公司关于调整华夏成长证券投资基金基金经理的公告  华夏成长混合  2017-02-25  AN201702250364410226\n7   000001    华夏基金管理有限公司关于调整华夏成长证券投资基金基金经理的公告  华夏成长混合  2017-03-30  AN201703300451418174\n8   000001    华夏基金管理有限公司关于调整华夏成长证券投资基金基金经理的公告  华夏成长混合  2021-02-24  AN202102241464811736\n9   000001    华夏基金管理有限公司关于增聘华夏成长证券投资基金基金经理的公告  华夏成长混合  2021-09-18  AN202109181516930266\n10  000001    华夏基金管理有限公司关于调整华夏成长证券投资基金基金经理的公告  华夏成长混合  2022-04-13  AN202204131558964253\n11  000001    华夏基金管理有限公司关于调整华夏成长证券投资基金基金经理的公告  华夏成长混合  2022-10-29  AN202210291579611414\n```\n"
  },
  {
    "path": "docs/data/futures/futures.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 期货数据\n\n### 期货基础信息\n\n主要提供金融期货和商品期货相关的数据\n\n#### 期货交易所\n\n| 交易所名称                                | 交易所代码 | 合约后缀  | 首页地址                    |\n|--------------------------------------|-------|-------|-------------------------|\n| [中国金融期货交易所](http://www.cffex.com.cn) | CFFEX | .CFX  | http://www.cffex.com.cn |\n| [上海期货交易所](https://www.shfe.com.cn)   | SHFE  | .SHF  | https://www.shfe.com.cn |\n| [上海国际能源交易中心](https://www.ine.cn)     | INE   | .INE  | https://www.ine.cn      |\n| [郑州商品交易所](http://www.czce.com.cn)    | CZCE  | .ZCE  | http://www.czce.com.cn  |\n| [大连商品交易所](http://www.dce.com.cn)     | DCE   | .DCE  | http://www.dce.com.cn   |\n| [广州期货交易所](http://www.gfex.com.cn)    | GFEX  | .GFEX | http://www.gfex.com.cn  |\n\n#### 期货交易时间\n\n**本表格更新于 20241118**\n\n| 交易所        | 交易所代码 | 品种名称     | 品种代码 | 集合竞价                     | 日盘时间                                  | 夜盘时间        |\n|------------|-------|----------|------|--------------------------|---------------------------------------|-------------|\n| 上海期货交易所    | SHFE  | 螺纹钢      | rb   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 上海期货交易所    | SHFE  | 热轧卷板     | hc   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 上海期货交易所    | SHFE  | 石油沥青     | bu   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 上海期货交易所    | SHFE  | 天然橡胶     | ru   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 上海期货交易所    | SHFE  | 合成橡胶     | br   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 上海期货交易所    | SHFE  | 燃料油      | fu   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 上海期货交易所    | SHFE  | 纸浆       | sp   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 上海期货交易所    | SHFE  | 铜        | cu   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海期货交易所    | SHFE  | 铝        | al   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海期货交易所    | SHFE  | 氧化铝      | ao   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海期货交易所    | SHFE  | 铅        | pb   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海期货交易所    | SHFE  | 锌        | zn   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海期货交易所    | SHFE  | 锡        | sn   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海期货交易所    | SHFE  | 镍        | ni   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海期货交易所    | SHFE  | 不锈钢      | ss   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海期货交易所    | SHFE  | 黄金       | au   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-02:30 |\n| 上海期货交易所    | SHFE  | 白银       | ag   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-02:30 |\n| 上海期货交易所    | SHFE  | 线材       | wr   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 上海国际能源交易中心 | INE   | 20号胶     | nr   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 上海国际能源交易中心 | INE   | 低硫燃料油    | lu   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 上海国际能源交易中心 | INE   | 国际铜      | bc   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海国际能源交易中心 | INE   | 原油       | sc   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-02:30 |\n| 上海国际能源交易中心 | INE   | 集运指数(欧线) | ec   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 大连商品交易所    | DCE   | 黄大豆1号    | a    | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 黄大豆2号    | b    | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 黄玉米      | c    | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 玉米淀粉     | cs   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 豆粕       | m    | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 豆油       | y    | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 棕榈油      | p    | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 铁矿石      | i    | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 焦炭       | j    | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 焦煤       | jm   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 聚乙烯      | l    | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 聚氯乙烯     | v    | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 聚丙烯      | pp   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 乙二醇      | eg   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 粳米       | rr   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 苯乙烯      | eb   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 液化石油气    | pg   | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 鸡蛋       | jd   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 大连商品交易所    | DCE   | 纤维板      | fb   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 大连商品交易所    | DCE   | 胶合板      | bb   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 大连商品交易所    | DCE   | 生猪       | lh   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 大连商品交易所    | DCE   | 原木       | lg   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 菜粕       | RM   | 20:55-21:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 菜籽油      | OI   | 20:55-21:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 一号棉花     | CF   | 20:55-21:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 精对苯二甲酸   | TA   | 20:55-21:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 对二甲苯     | PX   | 20:55-21:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 白砂糖      | SR   | 20:55-21:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 甲醇       | MA   | 20:55-21:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 玻璃       | FG   | 20:55-21:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 动力煤      | ZC   | 20:55-21:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 棉纱       | CY   | 20:55-21:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 纯碱       | SA   | 20:55-21:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 烧碱       | SH   | 20:55-21:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 短纤       | PF   | 20:55-21:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 瓶片       | PR   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 粳稻       | JR   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 菜籽       | RS   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 普通小麦     | PM   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 强麦       | WH   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 早籼稻      | RI   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 晚籼稻      | LR   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 硅铁       | SF   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 锰硅       | SM   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 苹果       | AP   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 红枣       | CJ   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 尿素       | UR   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 花生       | PK   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 广州期货交易所    | GFEX  | 工业硅      | SI   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 广州期货交易所    | GFEX  | 碳酸锂      | LC   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 广州期货交易所    | GFEX  | 多晶硅      | PS   | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 中国金融期货交易所  | CFFEX | 沪深300指数  | IF   | 09:25-09:30              | 09:30-11:30, 13:00-15:00              | -           |\n| 中国金融期货交易所  | CFFEX | 上证50指数   | IH   | 09:25-09:30              | 09:30-11:30, 13:00-15:00              | -           |\n| 中国金融期货交易所  | CFFEX | 中证500指数  | IC   | 09:25-09:30              | 09:30-11:30, 13:00-15:00              | -           |\n| 中国金融期货交易所  | CFFEX | 中证1000指数 | IM   | 09:25-09:30              | 09:30-11:30, 13:00-15:00              | -           |\n| 中国金融期货交易所  | CFFEX | 2年期国债    | TS   | 09:25-09:30              | 09:30-11:30, 13:00-15:15              | -           |\n| 中国金融期货交易所  | CFFEX | 5年期国债    | TF   | 09:25-09:30              | 09:30-11:30, 13:00-15:15              | -           |\n| 中国金融期货交易所  | CFFEX | 10年期国债   | T    | 09:25-09:30              | 09:30-11:30, 13:00-15:15              | -           |\n| 中国金融期货交易所  | CFFEX | 30年期国债   | TL   | 09:25-09:30              | 09:30-11:30, 13:00-15:15              | -           |\n\n#### 金融期货\n\n##### 中国金融期货交易所\n\n**本表更新于 20241118**\n\n|   | 交易所简称     | 交易品种       | 证券代码 | 标准合约上市日    |\n|--:|:----------|:-----------|:-----|:-----------|\n| 1 | 中国金融期货交易所 | 沪深300股指期货  | IF   | 2010-04-16 |\n| 2 | 中国金融期货交易所 | 5年期国债期货    | TF   | 2013-09-06 |\n| 3 | 中国金融期货交易所 | 10年期国债期货   | T    | 2015-03-20 |\n| 4 | 中国金融期货交易所 | 中证500股指期货  | IC   | 2015-04-16 |\n| 5 | 中国金融期货交易所 | 上证50股指期货   | IH   | 2015-04-16 |\n| 6 | 中国金融期货交易所 | 2年期国债期货    | TS   | 2017-02-27 |\n| 7 | 中国金融期货交易所 | 中证1000股指期货 | IM   | 2022-07-22 |\n| 8 | 中国金融期货交易所 | 30年期国债期货   | TL   | 2023-04-21 |\n\n#### 商品期货\n\n##### 上海国际能源交易中心\n\n**本表更新于 20241118**\n\n|   | 交易所简称      | 交易品种     | 证券代码 | 标准合约上市日    |\n|--:|:-----------|:---------|:-----|:-----------|\n| 1 | 上海国际能源交易中心 | 原油       | sc   | 2018-03-26 |\n| 2 | 上海国际能源交易中心 | 20号胶     | nr   | 2019-08-12 |\n| 3 | 上海国际能源交易中心 | 低硫燃料油    | lu   | 2020-06-22 |\n| 4 | 上海国际能源交易中心 | 国际铜      | bc   | 2020-11-19 |\n| 5 | 上海国际能源交易中心 | 集运指数(欧线) | ec   | 2023-08-18 |\n\n##### 上海期货交易所\n\n**本表更新于 20241118**\n\n|    | 交易所简称   | 交易品种  | 证券代码 | 标准合约上市日    |\n|---:|:--------|:------|:-----|:-----------|\n|  1 | 上海期货交易所 | 橡胶    | RU   | 1999-05-04 |\n|  2 | 上海期货交易所 | 沪铜    | CU   | 1999-06-18 |\n|  3 | 上海期货交易所 | 沪铝    | AL   | 1999-08-04 |\n|  4 | 上海期货交易所 | 燃油    | FU   | 2004-08-25 |\n|  5 | 上海期货交易所 | 沪锌    | ZN   | 2007-03-26 |\n|  6 | 上海期货交易所 | 沪金    | AU   | 2008-01-09 |\n|  7 | 上海期货交易所 | 螺纹钢   | RB   | 2009-03-27 |\n|  8 | 上海期货交易所 | 线材    | WR   | 2009-03-27 |\n|  9 | 上海期货交易所 | 沪铅    | PB   | 2011-03-24 |\n| 10 | 上海期货交易所 | 沪银    | AG   | 2012-05-10 |\n| 11 | 上海期货交易所 | 沥青    | BU   | 2013-10-09 |\n| 12 | 上海期货交易所 | 热卷    | HC   | 2014-03-21 |\n| 13 | 上海期货交易所 | 锡     | SN   | 2015-03-27 |\n| 14 | 上海期货交易所 | 镍     | NI   | 2015-03-27 |\n| 15 | 上海期货交易所 | 纸浆    | SP   | 2018-11-27 |\n| 16 | 上海期货交易所 | 不锈钢   | SS   | 2019-09-25 |\n| 17 | 上海期货交易所 | 氧化铝   | AO   | 2023-06-19 |\n| 18 | 上海期货交易所 | 丁二烯橡胶 | BR   | 2023-07-28 |\n\n##### 郑州商品交易所\n\n**本表更新于 20241118**\n\n|    | 交易所简称   | 交易品种 | 证券代码 | 标准合约上市日    |\n|---:|:--------|:-----|:-----|:-----------|\n|  1 | 郑州商品交易所 | 郑棉   | CF   | 2004-06-01 |\n|  2 | 郑州商品交易所 | 白糖   | SR   | 2006-01-06 |\n|  3 | 郑州商品交易所 | PTA  | TA   | 2006-12-18 |\n|  4 | 郑州商品交易所 | 普麦   | PM   | 2012-01-17 |\n|  5 | 郑州商品交易所 | 玻璃   | FG   | 2012-12-03 |\n|  6 | 郑州商品交易所 | 菜粕   | RM   | 2012-12-28 |\n|  7 | 郑州商品交易所 | 菜籽   | RS   | 2012-12-28 |\n|  8 | 郑州商品交易所 | 菜油   | OI   | 2013-05-16 |\n|  9 | 郑州商品交易所 | 早籼   | RI   | 2013-05-24 |\n| 10 | 郑州商品交易所 | 强麦   | WH   | 2013-05-24 |\n| 11 | 郑州商品交易所 | 郑煤   | ZC   | 2013-09-26 |\n| 12 | 郑州商品交易所 | 粳稻   | JR   | 2013-11-18 |\n| 13 | 郑州商品交易所 | 晚籼   | LR   | 2014-07-08 |\n| 14 | 郑州商品交易所 | 锰硅   | SM   | 2014-08-08 |\n| 15 | 郑州商品交易所 | 硅铁   | SF   | 2014-08-08 |\n| 16 | 郑州商品交易所 | 甲醇   | MA   | 2015-05-18 |\n| 17 | 郑州商品交易所 | 棉纱   | CY   | 2017-08-18 |\n| 18 | 郑州商品交易所 | 苹果   | AP   | 2017-12-22 |\n| 19 | 郑州商品交易所 | 红枣   | CJ   | 2019-04-30 |\n| 20 | 郑州商品交易所 | 尿素   | UR   | 2019-08-09 |\n| 21 | 郑州商品交易所 | 纯碱   | SA   | 2019-12-06 |\n| 22 | 郑州商品交易所 | 短纤   | PF   | 2020-10-12 |\n| 23 | 郑州商品交易所 | 花生   | PK   | 2021-02-01 |\n| 24 | 郑州商品交易所 | 烧碱   | SH   | 2023-09-15 |\n| 25 | 郑州商品交易所 | 对二甲苯 | PX   | 2023-09-15 |\n| 26 | 郑州商品交易所 | 瓶片   | PR   | 2024-08-30 |\n\n##### 大连商品交易所\n\n**本表更新于 20241118**\n\n|    | 交易所简称   | 交易品种  | 证券代码 | 标准合约上市日    |\n|---:|:--------|:------|:-----|:-----------|\n|  1 | 大连商品交易所 | 豆一    | A    | 1999-01-18 |\n|  2 | 大连商品交易所 | 豆粕    | M    | 2000-07-17 |\n|  3 | 大连商品交易所 | 玉米    | C    | 2004-09-22 |\n|  4 | 大连商品交易所 | 豆二    | B    | 2004-12-22 |\n|  5 | 大连商品交易所 | 豆油    | Y    | 2006-01-09 |\n|  6 | 大连商品交易所 | 塑料    | L    | 2007-07-31 |\n|  7 | 大连商品交易所 | 棕榈    | P    | 2007-10-29 |\n|  8 | 大连商品交易所 | PVC   | V    | 2009-05-25 |\n|  9 | 大连商品交易所 | 焦炭    | J    | 2011-04-15 |\n| 10 | 大连商品交易所 | 焦煤    | JM   | 2013-03-22 |\n| 11 | 大连商品交易所 | 铁矿石   | I    | 2013-10-18 |\n| 12 | 大连商品交易所 | 鸡蛋    | JD   | 2013-11-08 |\n| 13 | 大连商品交易所 | 纤维板   | FB   | 2013-12-06 |\n| 14 | 大连商品交易所 | 胶合板   | BB   | 2013-12-06 |\n| 15 | 大连商品交易所 | 聚丙烯   | PP   | 2014-02-28 |\n| 16 | 大连商品交易所 | 玉米淀粉  | CS   | 2014-12-19 |\n| 17 | 大连商品交易所 | 乙二醇   | EG   | 2018-12-10 |\n| 18 | 大连商品交易所 | 粳米    | RR   | 2019-08-16 |\n| 19 | 大连商品交易所 | 苯乙烯   | EB   | 2019-09-26 |\n| 20 | 大连商品交易所 | 液化石油气 | PG   | 2020-03-30 |\n| 21 | 大连商品交易所 | 生猪    | LH   | 2021-01-08 |\n| 22 | 大连商品交易所 | 原木    | LG   | 2024-11-18 |\n\n##### 广州期货交易所\n\n**本表更新于 20241118**\n\n|   | 交易所简称   | 交易品种 | 证券代码 | 标准合约上市日    |\n|--:|:--------|:-----|:-----|:-----------|\n| 1 | 广州期货交易所 | 工业硅  | si   | 2022-12-22 |\n| 2 | 广州期货交易所 | 碳酸锂  | lc   | 2023-07-21 |\n| 3 | 广州期货交易所 | 多晶硅  | ps   | 2024-12-26 |\n\n### 期货基础名词\n\n#### 连续合约\n\n需要注意, 由于期货合约存续的特殊性, 针对每一品种的期货合约, 系统中都增加了主力连续合约以及指数连续合约两个人工合成的合约来满足使用需求.\n\n#### 主力连续合约\n\n主力连续合约: 合约首次上市时, 以当日收盘同品种持仓量最大者作为从第二个交易日开始的主力合约.\n当同品种其他合约持仓量在收盘后超过当前主力合约 1.1 倍时, 从第二个交易日开始进行主力合约的切换.\n日内不会进行主力合约的切换.\n主力连续合约是由该品种期货不同时期主力合约接续而成, 代码以 88 或 888 结尾结尾, 例如 IF88 或 IF888.\n前者为合约量价数据的简单拼接, 未做平滑处理;\n后者对价格进行了”平滑”处理, 处理规则如下:\n以主力合约切换前一天(T-1日)新、旧两个主力合约收盘价做差,\n之后将 T-1 日及以前的主力连续合约的所有价格水平整体加上或减去该价差,\n以”整体抬升”或”整体下降”主力合约的价格水平, 成交量、持仓量均不作调整, 成交额统一设置为 0.\n\n#### 指数连续合约\n\n指数连续合约: 由当前品种全部可交易合约以累计持仓量为权重加权平均得到, 代码以 99 结尾, 例如 IF99.\n\n在期货市场中，指数连续合约（Continuous Futures Contract）是一种将多个到期月份的期货合约连接起来，形成一个连续的价格数据序列。\n它的主要目的是为了解决期货合约到期换仓的问题，便于投资者进行长期分析和交易。\n\n由于期货合约具有到期限制，投资者在进行长期持仓时需要在合约到期前将持有的合约平仓，并买入下一个到期的合约。\n这个过程称为“展期”或“换仓”。在这个过程中，不同到期合约之间的价格差异可能导致投资收益的波动。为了解决这一问题，期货市场上出现了指数连续合约的概念。\n\n指数连续合约的构建方法有很多种，其中最常见的是基于成交量和持仓量的加权平均。\n在这种方法中，将不同到期合约的价格按照成交量或持仓量进行加权平均，以得到一个连续的价格序列。这样，投资者可以通过观察指数连续合约的走势，来更好地了解整个期货市场的动态。\n\n需要注意的是，指数连续合约并非真实存在的交易品种，它只是一种数据处理方法，用于帮助投资者分析和制定交易策略。\n实际上，投资者仍然需要在各个到期月份的期货合约之间进行展期或换仓操作。\n\n总之，指数连续合约是一种在期货市场中广泛应用的分析工具，有助于投资者进行长期市场分析和交易策略制定。\n\n#### 展期收益率\n\n期货市场中的展期收益率（Rolling Yield）是指在期货合约到期时，多头投资者将持有的近月合约换成远月合约时可能产生的收益。展期收益率在期货市场中具有重要意义，因为它反映了期货市场的期限结构，也可以作为投资者制定投资策略的依据。\n\n展期收益率的计算方法是将近月期货合约的价格与远月期货合约的价格进行比较。具体计算公式如下：\n\n展期收益率 =（近月合约价格 - 远月合约价格）/ 近月合约价格\n\n展期收益率可以是正数，也可以是负数。正数表示远月合约价格低于近月合约价格，多头投资者在展期时卖出较贵的近月合约、买入较便宜的远月合约，从而获得正向收益；负数表示远月合约价格高于近月合约价格，多头投资者在展期时卖出较便宜的近月合约、买入较贵的远月合约，可能面临损失。\n\n期货市场的期限结构通常分为三种类型：\n\n1. 远期溢价（Contango）：远月合约价格高于近月合约价格，展期收益率为负。\n2. 远期折价（Backwardation）：远月合约价格低于近月合约价格，展期收益率为正。\n3. 平价（Flat）：远月合约价格与近月合约价格相同，展期收益率接近于零。\n\n投资者可以根据不同的期限结构和展期收益率来调整其期货交易策略，以实现收益最大化或风险最小化。\n\n### 期货基础数据\n\n#### 期货交易费用参照表\n\n接口: futures_fees_info\n\n目标地址: http://openctp.cn/fees.html\n\n描述: openctp 期货交易费用参照表\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称          | 类型      | 描述 |\n|-------------|---------|----|\n| 交易所         | object  | -  |\n| 合约代码        | object  | -  |\n| 合约名称        | object  | -  |\n| 品种代码        | object  | -  |\n| 品种名称        | object  | -  |\n| 合约乘数        | int64   | -  |\n| 最小跳动        | float64 | -  |\n| 开仓费率（按金额）   | float64 | -  |\n| 开仓费用（按手）    | float64 | -  |\n| 平仓费率（按金额）   | float64 | -  |\n| 平仓费用（按手）    | float64 | -  |\n| 平今费率（按金额）   | float64 | -  |\n| 平今费用（按手）    | float64 | -  |\n| 做多保证金率（按金额） | float64 | -  |\n| 做多保证金（按手）   | int64   | -  |\n| 做空保证金率（按金额） | float64 | -  |\n| 做空保证金（按手）   | int64   | -  |\n| 上日结算价       | float64 | -  |\n| 上日收盘价       | float64 | -  |\n| 最新价         | float64 | -  |\n| 成交量         | int64   | -  |\n| 持仓量         | int64   | -  |\n| 1手开仓费用      | float64 | -  |\n| 1手平仓费用      | float64 | -  |\n| 1手平今费用      | float64 | -  |\n| 做多1手保证金     | float64 | -  |\n| 做空1手保证金     | float64 | -  |\n| 1Tick平仓盈亏   | float64 | -  |\n| 2Tick平仓盈亏   | float64 | -  |\n| 1Tick平仓收益率  | object  | -  |\n| 2Tick平仓收益率  | object  | -  |\n| 1Tick平今盈亏   | float64 | -  |\n| 2Tick平今盈亏   | float64 | -  |\n| 1Tick平今收益率  | object  | -  |\n| 2Tick平今收益率  | object  | -  |\n| 更新时间        | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_fees_info_df = ak.futures_fees_info()\nprint(futures_fees_info_df)\n```\n\n数据示例\n\n```\n      交易所    合约代码    合约名称  ... 1Tick平今收益率 2Tick平今收益率                 更新时间\n0    CZCE   AP410   苹果10月  ...    -0.147%    -0.049%  2024-07-05 15:12:27\n1    CZCE   AP411   苹果11月  ...    -0.153%    -0.051%  2024-07-05 15:12:27\n2    CZCE   AP412   苹果12月  ...     -0.15%     -0.05%  2024-07-05 15:12:27\n3    CZCE   AP501    苹果1月  ...    -0.148%     -0.05%  2024-07-05 15:12:27\n4    CZCE   AP503    苹果3月  ...    -0.148%    -0.049%  2024-07-05 15:12:27\n..    ...     ...     ...  ...        ...        ...                  ...\n764  SHFE  zn2502  zn2502  ...     0.138%     0.295%  2024-07-05 15:12:27\n765  SHFE  zn2503  zn2503  ...     0.138%     0.295%  2024-07-05 15:12:27\n766  SHFE  zn2504  zn2504  ...     0.138%     0.295%  2024-07-05 15:12:27\n767  SHFE  zn2505  zn2505  ...     0.138%     0.296%  2024-07-05 15:12:27\n768  SHFE  zn2506  zn2506  ...     0.138%     0.295%  2024-07-05 15:12:27\n[769 rows x 36 columns]\n```\n\n#### 期货手续费与保证金\n\n接口: futures_comm_info\n\n目标地址: https://www.9qihuo.com/qihuoshouxufei\n\n描述: 九期网-期货手续费数据\n\n限量: 单次返回指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                   |\n|--------|-----|------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"所有\"; choice of {\"所有\", \"上海期货交易所\", \"大连商品交易所\", \"郑州商品交易所\", \"上海国际能源交易中心\", \"中国金融期货交易所\", \"广州期货交易所\"} |\n\n输出参数\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 交易所名称        | object  | -       |\n| 合约名称         | object  | -       |\n| 合约代码         | object  | -       |\n| 现价           | float64 | -       |\n| 涨停板          | float64 | -       |\n| 跌停板          | float64 | -       |\n| 保证金-买开       | float64 | 注意单位: % |\n| 保证金-卖开       | float64 | 注意单位: % |\n| 保证金-每手       | float64 | 注意单位: 元 |\n| 手续费标准-开仓-万分之 | float64 | -       |\n| 手续费标准-开仓-元   | object  | -       |\n| 手续费标准-平昨-万分之 | float64 | -       |\n| 手续费标准-平昨-元   | object  | -       |\n| 手续费标准-平今-万分之 | float64 | -       |\n| 手续费标准-平今-元   | object  | -       |\n| 每跳毛利         | int64   | 注意单位: 元 |\n| 手续费          | float64 | 注意: 开+平 |\n| 每跳净利         | float64 | 注意单位: 元 |\n| 备注           | object  | 是否主力合约  |\n| 手续费更新时间      | object  | -       |\n| 价格更新时间       | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_comm_info_df = ak.futures_comm_info(symbol=\"所有\")\nprint(futures_comm_info_df)\n```\n\n数据示例\n\n```\n         交易所名称          合约名称  ...                  手续费更新时间                   价格更新时间\n0      上海期货交易所        沪银2404  ...  2024-04-15 22:59:13.785  2024-04-15 22:58:45.832\n1      上海期货交易所        沪银2405  ...  2024-04-15 22:59:13.785  2024-04-15 22:58:45.832\n2      上海期货交易所        沪银2406  ...  2024-04-15 22:59:13.785  2024-04-15 22:58:45.832\n3      上海期货交易所        沪银2407  ...  2024-04-15 22:59:13.785  2024-04-15 22:58:45.832\n4      上海期货交易所        沪银2408  ...  2024-04-15 22:59:13.785  2024-04-15 22:58:45.832\n..         ...           ...  ...                      ...                      ...\n695  中国金融期货交易所  30年期国债期货2409  ...  2024-04-15 22:59:37.599  2024-04-15 22:58:45.832\n696  中国金融期货交易所  30年期国债期货2412  ...  2024-04-15 22:59:37.599  2024-04-15 22:58:45.832\n697  中国金融期货交易所     2年期国债2406  ...  2024-04-15 22:59:37.599  2024-04-15 22:58:45.832\n698  中国金融期货交易所     2年期国债2409  ...  2024-04-15 22:59:37.599  2024-04-15 22:58:45.832\n699  中国金融期货交易所     2年期国债2412  ...  2024-04-15 22:59:37.599  2024-04-15 22:58:45.832\n[700 rows x 21 columns]\n```\n\n##### 金十数据\n\n接口: futures_comm_js\n\n目标地址: https://www.jin10.com/\n\n描述: 金十财经-期货手续费数据\n\n限量: 单次返回指定日期的期货手续费数据\n\n输入参数\n\n| 名称   | 类型  | 描述                              |\n|------|-----|---------------------------------|\n| date | str | date=\"20260213\"; 日期格式为 YYYYMMDD |\n\n输出参数\n\n| 名称      | 类型      | 描述 |\n|---------|---------|----|\n| 日期      | object  | -  |\n| 合约品种    | str     | -  |\n| 合约代码    | str     | -  |\n| 手续费公布时间 | str     | -  |\n| 价格公布时间  | str     | -  |\n| 现价      | float64 | -  |\n| 涨停板     | float64 | -  |\n| 跌停板     | float64 | -  |\n| 保证金/买开  | str     | -  |\n| 保证金/卖开  | str     | -  |\n| 保证金/每手  | str     | -  |\n| 开仓      | str     | -  |\n| 平今      | str     | -  |\n| 平昨      | str     | -  |\n| 每手跳数    | int64   | -  |\n| 每跳毛利    | float64 | -  |\n| 每跳净利    | float64 | -  |\n| 交易所     | str     | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_comm_js_df = ak.futures_comm_js(date=\"20260213\")\nprint(futures_comm_js_df)\n```\n\n数据示例\n\n```\n    日期        合约品种    合约代码  ... 每跳毛利   每跳净利         交易所\n0   2026-02-13      黄金2604  au2604  ...  NaN    0.0     上海期货交易所\n1   2026-02-13      鸡蛋2604  jd2604  ...  NaN    0.5     大连商品交易所\n2   2026-02-13    集运指数2604  ec2604  ...  NaN -105.5  上海国际能源交易中心\n3   2026-02-13       锰硅605   SM605  ...  NaN    7.0     郑州商品交易所\n4   2026-02-13     铸造铝2604  ad2604  ...  NaN   38.9     上海期货交易所\n..         ...         ...     ...  ...  ...    ...         ...\n85  2026-02-13   5年期国债2603  TF2603  ...  NaN   47.0   中国金融期货交易所\n86  2026-02-13  30年期国债2603  TL2603  ...  NaN   97.0   中国金融期货交易所\n87  2026-02-13   2年期国债2603  TS2603  ...  NaN   37.0   中国金融期货交易所\n88  2026-02-13    20号胶2604  nr2604  ...  NaN   47.3  上海国际能源交易中心\n89  2026-02-13   10年国债2603   T2603  ...  NaN   47.0   中国金融期货交易所\n[90 rows x 18 columns]\n```\n\n#### 期货规则-交易日历表\n\n接口: futures_rule\n\n目标地址: https://www.gtjaqh.com/pc/calendar.html\n\n描述: 国泰君安期货-交易日历数据表\n\n限量: 单次返回指定交易日所有合约的交易日历数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                 |\n|------|-----|------------------------------------|\n| date | str | date=\"20231205\"; 需要指定为交易日, 且是近期的日期 |\n\n输出参数\n\n| 名称          | 类型      | 描述      |\n|-------------|---------|---------|\n| 交易所         | object  | -       |\n| 品种          | object  | -       |\n| 代码          | object  | -       |\n| 交易保证金比例     | float64 | 注意单位: % |\n| 涨跌停板幅度      | float64 | 注意单位: % |\n| 合约乘数        | int64   | -       |\n| 最小变动价位      | float64 | -       |\n| 限价单每笔最大下单手数 | int64   | -       |\n| 特殊合约参数调整    | object  | -       |\n| 调整备注        | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_rule_df = ak.futures_rule(date=\"20231205\")\nprint(futures_rule_df)\n```\n\n数据示例\n\n```\n     交易所          品种  ...                                      特殊合约参数调整  调整备注\n0    上期所           铜  ...  CU2312合约交易保证金比例为20.0%; CU2401合约交易保证金比例为15.0%   NaN\n1    上期所         铜期权  ...    期权卖方交易保证金中涉及标的期货合约的公司交易保证金按照对应的期货合约保证金标准收取   NaN\n2    上期所           铝  ...  AL2312合约交易保证金比例为20.0%; AL2401合约交易保证金比例为15.0%   NaN\n3    上期所         铝期权  ...    期权卖方交易保证金中涉及标的期货合约的公司交易保证金按照对应的期货合约保证金标准收取   NaN\n4    上期所           锌  ...  ZN2312合约交易保证金比例为20.0%; ZN2401合约交易保证金比例为15.0%   NaN\n..   ...         ...  ...                                           ...   ...\n117  中金所  中证1000股指期权  ...                       保证金调整系数为14%，最低保障系数为0.50   NaN\n118  中金所       2年期国债  ...                          TS2312合约交易保证金比例为1.3%   NaN\n119  中金所       5年期国债  ...                          TF2312合约交易保证金比例为2.5%   NaN\n120  中金所      30年期国债  ...                          TL2312合约交易保证金比例为6.5%   NaN\n121  中金所      10年期国债  ...                           T2312合约交易保证金比例为3.5%   NaN\n[122 rows x 10 columns]\n```\n\n#### 库存数据-99期货网\n\n接口: futures_inventory_99\n\n目标地址: https://www.99qh.com/data/stockIn?productId=61\n\n描述: 99 期货网-大宗商品库存数据\n\n限量: 单次返回指定 symbol 的具体品种的期货库存数据, 仓单日报数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                     |\n|--------|-----|--------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol='豆一'; 交易所对应的具体品种中文名称或者英文代码; 如：大连商品交易所的豆一; 具体品种查询：https://www.99qh.com/data/stockIn?productId=61 |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 日期  | object  | -  |\n| 收盘价 | float64 | -  |\n| 库存  | int64   | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_inventory_99_df = ak.futures_inventory_99(symbol='豆一')\nprint(futures_inventory_99_df)\n```\n\n数据示例\n\n```\n         日期     收盘价     库存\n0     2005-01-14  3000.0  13107\n1     2005-01-21  2627.0  22695\n2     2005-01-28  2631.0  25031\n3     2005-02-04  2637.0  20023\n4     2005-02-18  2680.0  18454\n...          ...     ...    ...\n4014  2025-02-27  4232.0  37696\n4015  2025-02-28  4218.0  37696\n4016  2025-03-03  4239.0  37536\n4017  2025-03-04  4252.0  37536\n4018  2025-03-05  4175.0  37536\n[4019 rows x 3 columns]\n```\n\n#### 库存数据-东方财富\n\n接口: futures_inventory_em\n\n目标地址: http://data.eastmoney.com/ifdata/kcsj.html\n\n描述: 东方财富网-期货数据-库存数据; 近 60 个交易日的期货库存日频率数据\n\n限量: 返回指定交易所指定品种的期货库存数据, 仓单日报数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                         |\n|--------|-----|----------------------------------------------------------------------------|\n| symbol | str | symbol=\"A\"; 支持品种代码和中文名称，中文名称参见：https://data.eastmoney.com/ifdata/kcsj.html |\n\n输出参数\n\n| 名称  | 类型      | 描述          |\n|-----|---------|-------------|\n| 日期  | object  | 日期          |\n| 库存  | int64   | 库存数据        |\n| 增减  | float64 | 相对前一个交易日的增减 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_inventory_em_df = ak.futures_inventory_em(symbol=\"A\")\nprint(futures_inventory_em_df)\n```\n\n数据示例\n\n```\n        日期     库存     增减\n0   2024-11-19  15522    NaN\n1   2024-11-20  15522    0.0\n2   2024-11-21  16322  800.0\n3   2024-11-22  16902  580.0\n4   2024-11-25  17139  237.0\n..         ...    ...    ...\n61  2025-02-21  38028    0.0\n62  2025-02-24  38146  118.0\n63  2025-02-25  38146    0.0\n64  2025-02-26  37696 -450.0\n65  2025-02-27  37696    0.0\n[66 rows x 3 columns]\n```\n\n#### 展期收益率\n\n展期收益率是由不同交割月的价差除以相隔月份数计算得来, 它反映了市场对该品种在近期交割和远期交割的价差预期.\n\n在 [AKShare](https://github.com/akfamily/akshare) 中可以通过 **get_roll_yield_bar** 接口下载展期收益率数据.\n\n这里展期收益率列表的序列类型分为三种, 分别可以通过:\n\n    1. type_method = \"date\"  # 某商品品种在不同日期的主力合约和次主力合约的价差组成\n    2. type_method = \"symbol\"  # 某商品品种在某天的所有交割月合约价格组成, 可以很方便的观察该品种从近期到远期的展期结构\n    3. type_method = \"var\"  # 某交易日, 所有品种的主力次主力合约展期收益率的组合, 可以方便的找到展期收益率高的品种和低的品种\n\n来获取.\n\n其中 \"date\" 类型, 调用方法例子为:\n\n```python\nimport akshare as ak\n\nak.get_roll_yield_bar(type_method=\"date\", var=\"RB\", start_day=\"20191009\", end_day=\"20191030\")  # 需要收盘收运行\n```\n\n其中 \"symbol\" 类型, 调用方法例子为:\n\n```python\nimport akshare as ak\n\nak.get_roll_yield_bar(type_method=\"symbol\", var=\"RB\", date=\"20191008\")  # 需要收盘收运行\n```\n\n其中 \"var\" 类型, 调用方法例子为:\n\n```python\nimport akshare as ak\n\nak.get_roll_yield_bar(type_method=\"var\", date=\"20191008\")  # 需要收盘收运行\n```\n\n利用 **get_roll_yield** 接口, 可以找到特定合约特定日期的主力合约次主力合约展期收益率, 或通过 symbol1 和 symbol2 变量自定义某两个合约的展期收益率.\n\n```python\nimport akshare as ak\n\nak.get_roll_yield(date=\"20180718\", var=\"IF\", symbol1=\"IF1812\", symbol2=\"IF1811\")  # 需要收盘收运行\n```\n\n注意: 1. 主力合约和次主力合约的定义, 是由该日的各交割月合约持仓量由大到小排序得到.\n\n#### 注册仓单\n\n注册仓单是由各交易所的公布的日级数据, 在一定程度上可以反映市场的库存变化. 调用例子如下:\n\n```python\nimport akshare as ak\n\nak.get_receipt(start_date=\"20180712\", end_date=\"20180719\", vars_list=[\"CU\", \"NI\"])\n```\n\n注意:\n\n1. vars_list 变量接上需要爬取的品种列表, 即使是一个品种, 也需要以列表形式输入;\n\n2. 在研究仓单的方向变化时, 需要考虑一些品种的年度周期性, 如农产品的收割季、工业品的开工季等;\n\n3. 需考虑到交割日的仓单变化.\n\n#### 现货价格和基差\n\n基差是商品期货非常重要的基本面因素, AKShare 在这里提供 3 中获取基差的方法:\n\n第一种：获取近期交易日的基差数据\n\n```python\nimport akshare as ak\n\nfutures_spot_price_df = ak.futures_spot_price(\"20240430\")\nprint(futures_spot_price_df)\n```\n\n```\n   symbol spot_price near_contract  ... near_basis_rate dom_basis_rate      date\n0       C    2298.57         c2405  ...        0.037167       0.038037  20240430\n1      CS     3042.0        cs2405  ...       -0.081854      -0.086128  20240430\n2       A     4730.0         a2405  ...       -0.013953      -0.014588  20240430\n3       M     3340.0         m2405  ...       -0.018862       0.013174  20240430\n4       Y     7840.0         y2405  ...       -0.029337      -0.025765  20240430\n5       P     7960.0         p2405  ...       -0.023618      -0.071608  20240430\n6      JD     3455.0        jd2405  ...       -0.146744       0.133719  20240430\n7       L    8407.14         l2405  ...        0.008191       0.010807  20240430\n8       V     5556.0         v2405  ...        0.035997       0.069834  20240430\n9      PP    7842.86        pp2405  ...       -0.031603      -0.027268  20240430\n10      I     892.11         i2405  ...       -0.005168      -0.021421  20240430\n11     EG    4481.67        eg2405  ...       -0.037412      -0.006397  20240430\n12     EB     9530.0        eb2405  ...       -0.007135       -0.01532  20240430\n13     PG     5052.0        pg2405  ...       -0.087688      -0.088282  20240430\n14     LH      14.85        lh2405  ...      976.777778     1169.03367  20240430\n15     WH     2616.0         WH405  ...        0.222477       0.222477  20240430\n16     PM     2616.0         PM405  ...        0.193425       0.193425  20240430\n17     CF   16640.17         CF405  ...       -0.070622        -0.0565  20240430\n18     SR     6650.0         SR405  ...       -0.029925      -0.073534  20240430\n19     TA     5940.5         TA405  ...       -0.006481      -0.003114  20240430\n20     OI    8398.33         OI405  ...       -0.015042       0.009486  20240430\n21     MA    2651.67         MA405  ...       -0.020994      -0.036079  20240430\n22     FG     1492.0         FG405  ...        0.018097       0.039544  20240430\n23     RS     5996.0         RS407  ...       -0.077051      -0.074383  20240430\n24     RM    2803.33         RM405  ...       -0.040427      -0.010463  20240430\n25     SF    6464.29         SF405  ...        0.064309       0.099889  20240430\n26     SM     5955.0         SM405  ...        0.293367       0.311167  20240430\n27     CY    24950.0         CY405  ...       -0.175752      -0.147695  20240430\n28     UR    2435.83         UR405  ...       -0.119397      -0.157577  20240430\n29     SA     2210.0         SA405  ...       -0.026244      -0.003167  20240430\n30     PF     7652.0         PF405  ...       -0.064297      -0.034762  20240430\n31     SH      790.0         SH405  ...        1.910127       2.382278  20240430\n32     CU   81593.33        cu2405  ...        0.000695       0.002165  20240430\n33     AL    20540.0        al2405  ...        0.001217       0.003165  20240430\n34     ZN    23378.0        zn2405  ...       -0.001625      -0.000342  20240430\n35     PB    17000.0        pb2405  ...        0.020882       0.019412  20240430\n36     NI  144166.67        ni2405  ...       -0.005318      -0.001503  20240430\n37     SN   262825.0        sn2405  ...       -0.009455      -0.005574  20240430\n38     AU     547.64        au2405  ...        0.003469       0.009422  20240430\n39     AG    7054.67        ag2405  ...        0.002457      -0.000237  20240430\n40     RB    3586.22        rb2405  ...        -0.01735       0.023362  20240430\n41     WR     3845.2        wr2405  ...       -0.059867      -0.059867  20240430\n42     HC     3896.0        hc2405  ...       -0.022331      -0.020021  20240430\n43     FU     5816.0        fu2405  ...       -0.352132      -0.397008  20240430\n44     BU    3680.86        bu2405  ...        0.008732       0.026391  20240430\n45     RU    13560.0        ru2405  ...        0.022493        0.04351  20240430\n46     SP     6400.0        sp2405  ...       -0.025312      -0.000313  20240430\n47     SS    14267.5        ss2405  ...       -0.020852        0.00403  20240430\n48     BR    13260.0        br2405  ...       -0.005279      -0.009427  20240430\n49     SI    13660.0        SI2405  ...       -0.127379      -0.118228  20240430\n50     LC   115400.0        LC2405  ...       -0.023397      -0.018631  20240430\n[51 rows x 11 columns]\n```\n\n返回值分别为品种、现货价格、最近交割合约、最近交割合约价格、主力合约、主力合约价格、最近合约基差值、主力合约基差值、最近合约基差率、主力合约基差率.\n\n第二种：获取历史交易日的基差数据\n\n```python\nimport akshare as ak\n\nfutures_spot_price_previous_df = ak.futures_spot_price_previous('20240430')\nprint(futures_spot_price_previous_df)\n```\n\n```\n       商品     现货价格 主力合约代码  主力合约价格  ...  主力合约变动百分比 180日内主力基差最高 180日内主力基差最低 180日内主力基差平均\n0       铜  81593.3   2406   81770  ...      -0.22     1050.00     -791.67      104.24\n1     螺纹钢  3586.22   2410    3670  ...      -2.31      113.89     -143.78      -14.75\n2       锌    23378   2406   23370  ...       0.03      319.00     -370.00       17.61\n3       铝    20540   2406   20605  ...      -0.32      276.67     -178.33       13.24\n4      黄金   547.64   2408   552.8  ...      -0.91        5.92       -8.03       -1.03\n5      线材   3845.2   2405    3615  ...       5.98      230.20     -135.00       -2.20\n6     燃料油     5816   2409    3507  ...      39.70     2618.00     2059.00     2340.99\n7    天然橡胶    13610   2409   14150  ...      -3.97     -505.00    -1540.00     -931.96\n8       铅    17000   2406   17330  ...      -1.94      115.00     -381.25      -99.64\n9      白银  7054.67   2406    7053  ...       0.02      181.00     -197.00      -15.58\n10   石油沥青  3680.86   2409    3778  ...      -2.64      123.33     -295.00     -121.34\n11   热轧卷板     3896   2410    3818  ...       2.00      132.00      -62.00       26.62\n12      镍   144167   2406  143950  ...       0.15     5543.33     -885.00     1265.46\n13      锡   262825   2406  261360  ...       0.56     4060.00    -6432.50     -160.25\n14     纸浆     6400   2409    6398  ...       0.03      470.00      -96.00      107.12\n15    不锈钢  14267.5   2409   14325  ...      -0.40      690.00     -290.00      181.46\n16  丁二烯橡胶    13260   2406   13135  ...       0.94      590.00     -760.00       67.67\n17    PTA   5940.5   2409    5922  ...       0.30      121.56     -140.50       -2.87\n18     白糖     6650   2409    6161  ...       7.35      831.00      121.00      393.34\n19     棉花  16640.2   2409   15700  ...       5.65     1534.33      677.67     1012.39\n20     普麦     2616   2405    3122  ...     -19.34     -130.00     -506.00     -300.03\n21  菜籽油OI  8398.33   2409    8478  ...      -0.94      319.33      -93.67      114.28\n22     玻璃    18.65   2409    1551  ...      -3.95      185.80     -226.40       -2.20\n23    菜籽粕  2803.33   2409    2774  ...       1.03      398.00       10.67      156.70\n24    油菜籽     5996   2411    5550  ...       7.44      621.00     -263.00      243.08\n25     硅铁  6464.29   2409    7110  ...      -9.98       44.29     -645.71     -183.63\n26     锰硅     5955   2409    7808  ...     -31.12      -31.67    -1853.00     -320.69\n27   甲醇MA  2651.67   2409    2556  ...       3.58      219.00      -32.00       90.06\n28     棉纱    24950   2409   21265  ...      14.77     6110.00     3135.00     4259.29\n29     尿素  2435.83   2409    2052  ...      15.72      634.00      113.67      356.79\n30     纯碱     2210   2409    2203  ...       0.32     1091.00     -126.00      448.78\n31   涤纶短纤     7652   2406    7386  ...       3.48      380.00       -6.00      209.43\n32     PX     8700   2409    8486  ...       2.46      410.00     -354.00       86.27\n33     烧碱      790   2409    2672  ...      -8.22      228.50     -371.25     -120.92\n34    棕榈油     7960   2409    7390  ...       7.16      800.00      -90.00      144.17\n35   聚氯乙烯     5556   2409    5944  ...      -6.98      -36.00     -422.00     -271.19\n36    聚乙烯  8407.14   2409    8498  ...      -1.07      250.57     -116.57       32.63\n37     豆一     4730   2407    4661  ...       1.46      237.00     -151.00        8.09\n38     豆粕     3340   2409    3384  ...      -1.32      650.00      -50.00      328.38\n39     豆油     7840   2409    7638  ...       2.58      608.00      116.00      390.83\n40     玉米  2298.57   2407    2386  ...      -3.78      147.00     -116.14        2.84\n41    铁矿石   892.11   2409     873  ...       2.13       93.28       -2.33       48.35\n42     鸡蛋     6.91   2409    3917  ...     -13.37     1227.00     -523.00      374.66\n43    聚丙烯  7842.86   2409    7629  ...       2.72      359.86       19.71      198.15\n44   玉米淀粉     3042   2407    2780  ...       8.61      468.00      236.00      324.03\n45    乙二醇  4481.67   2409    4453  ...       0.62      102.00     -290.33      -36.81\n46    苯乙烯     9530   2406    9384  ...       1.53      417.00     -299.00       55.10\n47  液化石油气     5052   2406    4606  ...       8.83      843.00     -113.00      314.14\n48     生猪    14.85   2409   17375  ...     -17.00     2050.00    -3275.00     -441.79\n49    工业硅    13660   2406   12045  ...      11.82     2140.00      820.00     1609.08\n50    碳酸锂   115400   2407  113250  ...       1.86    34500.00   -14750.00     6372.50\n[51 rows x 9 columns]\n```\n\n第三种：获取历史某段时间的基差值\n\n```python\nimport akshare as ak\n\nfutures_spot_price_daily_df = ak.futures_spot_price_daily(start_day=\"20240415\", end_day=\"20240418\", vars_list=[\"CU\", \"RB\"])\nprint(futures_spot_price_daily_df)\n```\n\n```\n  symbol spot_price near_contract  ... near_basis_rate dom_basis_rate      date\n0     CU    76290.0        cu2404  ...             0.0       0.010355  20240415\n1     RB    3512.89        rb2404  ...       -0.019895       0.027929  20240415\n2     CU    76800.0        cu2405  ...        0.001562       0.003906  20240416\n3     RB     3500.0        rb2405  ...           0.014          0.032  20240416\n4     CU    76380.0        cu2405  ...        0.000916       0.003404  20240417\n5     RB     3524.0        rb2405  ...        0.014472       0.032633  20240417\n6     CU   76878.33        cu2405  ...        0.007306       0.010298  20240418\n7     RB    3588.44        rb2405  ...         0.00573       0.027187  20240418\n[8 rows x 11 columns]\n```\n\n注意: 1. 现货价格是从生意社网站采集的, 仅支持从 2011 年至今每个交易日数据.\n\n#### 会员持仓排名\n\n自从**蜘蛛网策略**问世以来, 会员持仓数据日益受到关注. 数据的获取方式如下所示:\n获取某段时间的会员持仓排名前 5、前 10、前 15、前 20 等总和.\n\n```python\nimport akshare as ak\n\nget_rank_sum_daily_df = ak.get_rank_sum_daily(start_day=\"20180718\", end_day=\"20180719\", vars_list=[\"IF\", \"C\"])\nprint(get_rank_sum_daily_df)\n```\n\n获取某交易日某品种的持仓排名榜\n\n```python\nimport akshare as ak\n\nak.get_dce_rank_table()\nak.get_cffex_rank_table()\nak.get_rank_table_czce()\nak.get_shfe_rank_table()\n```\n\n代码示例:\n\n```python\nimport akshare as ak\n\nget_rank_table_czce_df = ak.get_rank_table_czce(date='20200213')\nprint(get_rank_table_czce_df)\n```\n\n注意:\n\n    1. 因为每个交易所公布的持仓排名不同: 大连商品交易所只公布品种的总持仓排名;\n\n    2. 没有按不同交割月划分;上海、中金交易所公布了每个交割月的持仓排名, 没有公布品种所有合约总排名;\n\n    3. 因此这里的品种排名和是各合约加总计算得来;郑州交易所公布了各合约排名和品种排名, 因此这里都是交易所原始数据.\n\n##### 大连商品交易所\n\n接口: futures_dce_position_rank\n\n目标地址: http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/rtj/rcjccpm/index.html\n\n描述: 大连商品交易所指定交易日的具体合约的持仓排名\n\n限量: 单次返回所有合约的持仓排名数据, 返回以合约名字为键, 具体排名数据为值的字典\n\n输入参数\n\n| 名称        | 类型   | 描述                                                                                                                    |\n|-----------|------|-----------------------------------------------------------------------------------------------------------------------|\n| date      | str  | date=\"20200511\"; 指定交易日, 该数据接口可以获取从 2000 年开始的数据, 20160104 由于交易所数据问题，返回为空可以调用 **futures_dce_position_rank_other** 来返回数据 |\n| vars_list | list | vars_list=cons.contract_symbols; 指定品种，比如：[\"C\", \"CS\"]                                                                  |\n\nP.S. **futures_dce_position_rank_other** 函数只返回页面显示的活跃合约，返回格式同 **futures_dce_position_rank**\n\n输出参数-字典\n\nP.S. 这里仅列出值(pandas.DataFrame)的字段信息\n\n| 名称                      | 类型      | 描述      |\n|-------------------------|---------|---------|\n| long_open_interest      | object  | 持买单量    |\n| long_open_interest_chg  | float64 | 持买单量-增减 |\n| long_party_name         | object  | 会员简称    |\n| rank                    | float64 | 名次      |\n| short_open_interest     | float64 | 持卖单量    |\n| short_open_interest_chg | float64 | 持买单量-增减 |\n| short_party_name        | object  | 会员简称    |\n| vol                     | float64 | 成交量     |\n| vol_chg                 | float64 | 成交量-增减  |\n| vol_party_name          | object  | 会员简称    |\n| symbol                  | object  | 具体合约    |\n| variety                 | object  | 品种      |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_dce_detail_dict = ak.futures_dce_position_rank(date=\"20200513\")\nprint(futures_dce_detail_dict)\n```\n\n数据示例-字典\n\n```\n{'jm2009':    long_open_interest long_open_interest_chg  ...  symbol  variety\n0               9,063                   -253  ...  jm2009       JM\n1               8,255                     65  ...  jm2009       JM\n2               5,954                   -216  ...  jm2009       JM\n3               3,691                   -127  ...  jm2009       JM\n4               3,387                    115  ...  jm2009       JM\n..                ...                    ...  ...     ...      ...\n15              1,539                   -120  ...  jm2009       JM\n16              1,457                    158  ...  jm2009       JM\n17              1,391                     92  ...  jm2009       JM\n18              1,377                    -60  ...  jm2009       JM\n19              1,343                    -40  ...  jm2009       JM\n}\n```\n\n##### 广州期货交易所\n\n接口: futures_gfex_position_rank\n\n目标地址: http://www.gfex.com.cn/gfex/rcjccpm/hqsj_tjsj.shtml\n\n描述: 广州期货交易所-日成交持仓排名\n\n限量: 单次返回所有合约的日成交持仓排名数据, 返回以合约名字为键, 具体排名数据为值的字典\n\n输入参数\n\n| 名称        | 类型   | 描述                                                       |\n|-----------|------|----------------------------------------------------------|\n| date      | str  | date=\"20231113\"; 指定交易日, 该数据接口可以获取从 20231110 开始的日成交持仓排名数据 |\n| vars_list | list | vars_list=None; 指定品种，比如：['SI', 'LC']                     |\n\n输出参数-字典\n\nP.S. 这里仅列出值(pandas.DataFrame)的字段信息\n\n| 名称                      | 类型     | 描述      |\n|-------------------------|--------|---------|\n| rank                    | int64  | 名次      |\n| vol_party_name          | object | 会员简称    |\n| vol                     | int64  | 成交量     |\n| vol_chg                 | int64  | 成交量-增减  |\n| long_party_name         | object | 会员简称    |\n| long_open_interest      | int64  | 持买单量    |\n| long_open_interest_chg  | int64  | 持买单量-增减 |\n| short_party_name        | object | 会员简称    |\n| short_open_interest     | int64  | 持卖单量    |\n| short_open_interest_chg | int64  | 持卖单量-增减 |\n| symbol                  | object | 具体合约    |\n| variety                 | object | 品种      |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_gfex_position_rank_dict = ak.futures_gfex_position_rank(date=\"20231113\")\nprint(futures_gfex_position_rank_dict)\n```\n\n数据示例-字典\n\n```\n{'si2312':     rank vol_party_name   vol  ...  short_open_interest_chg  symbol  variety\n0      1           中信期货  2940  ...                       50  SI2312       SI\n1      2           国海良时  1013  ...                        1  SI2312       SI\n2      3           永安期货   956  ...                     -376  SI2312       SI\n3      4           宝城期货   901  ...                      120  SI2312       SI\n4      5           浙商期货   648  ...                      -10  SI2312       SI\n5      6         国投安信期货   640  ...                     -460  SI2312       SI\n6      7         国泰君安期货   620  ...                      -94  SI2312       SI\n7      8           东证期货   515  ...                        1  SI2312       SI\n8      9           广发期货   352  ...                       52  SI2312       SI\n9     10           南华期货   294  ...                      895  SI2312       SI\n10    11         物产中大期货   275  ...                      -90  SI2312       SI\n11    12           华金期货   263  ...                       24  SI2312       SI\n12    13           广州期货   211  ...                       -4  SI2312       SI\n13    14           华泰期货   205  ...                        0  SI2312       SI\n14    15           国贸期货   185  ...                        0  SI2312       SI\n15    16           中粮期货   178  ...                        2  SI2312       SI\n16    17           申银万国   128  ...                        0  SI2312       SI\n17    18           中原期货   118  ...                      -20  SI2312       SI\n18    19           海证期货   113  ...                      -10  SI2312       SI\n19    20           兴证期货   108  ...                      -22  SI2312       SI\n[20 rows x 12 columns], 'si2401':     rank vol_party_name    vol  ...  short_open_interest_chg  symbol  variety\n0      1           中信期货  11711  ...                     -195  SI2401       SI\n1      2           广州期货   8079  ...                       96  SI2401       SI\n2      3           中信建投   7222  ...                      535  SI2401       SI\n3      4           广发期货   4361  ...                     1045  SI2401       SI\n4      5           华泰期货   3014  ...                       97  SI2401       SI\n5      6           东证期货   2252  ...                       89  SI2401       SI\n6      7         国投安信期货   1897  ...                      -70  SI2401       SI\n7      8           永安期货   1757  ...                       25  SI2401       SI\n8      9           海通期货   1723  ...                      -27  SI2401       SI\n9     10         国泰君安期货   1514  ...                       16  SI2401       SI\n10    11           国海良时   1456  ...                      611  SI2401       SI\n11    12           长安期货   1441  ...                      418  SI2401       SI\n12    13           华闻期货   1307  ...                    -1199  SI2401       SI\n13    14           方正中期   1247  ...                       20  SI2401       SI\n14    15           宝城期货   1158  ...                      317  SI2401       SI\n15    16           华金期货   1052  ...                       35  SI2401       SI\n16    17           信达期货    924  ...                      -45  SI2401       SI\n17    18           兴证期货    866  ...                        2  SI2401       SI\n18    19           浙商期货    777  ...                       19  SI2401       SI\n19    20           徽商期货    761  ...                        5  SI2401       SI\n[20 rows x 12 columns], 'lc2401':     rank vol_party_name     vol  ...  short_open_interest_chg  symbol  variety\n0      1           中信期货  164523  ...                    -1741  LC2401       LC\n1      2           华闻期货   50941  ...                     -284  LC2401       LC\n2      3           海通期货   47107  ...                     -822  LC2401       LC\n3      4           徽商期货   23884  ...                     1523  LC2401       LC\n4      5         东方财富期货   22906  ...                      205  LC2401       LC\n5      6         国泰君安期货   21530  ...                     -277  LC2401       LC\n6      7           中信建投   21033  ...                      541  LC2401       LC\n7      8           渤海期货   20804  ...                     -146  LC2401       LC\n8      9           宝城期货   18449  ...                      568  LC2401       LC\n9     10           东证期货   16656  ...                      -76  LC2401       LC\n10    11           华泰期货   16101  ...                      325  LC2401       LC\n11    12           广发期货   15262  ...                      146  LC2401       LC\n12    13           方正中期   15198  ...                     1664  LC2401       LC\n13    14           银河期货   11187  ...                      863  LC2401       LC\n14    15           东吴期货   10747  ...                      723  LC2401       LC\n15    16           平安期货    9572  ...                      -54  LC2401       LC\n16    17           华安期货    9340  ...                      296  LC2401       LC\n17    18           国信期货    9284  ...                      -44  LC2401       LC\n18    19           民生期货    9213  ...                      -91  LC2401       LC\n19    20           国富期货    9171  ...                     -174  LC2401       LC\n[20 rows x 12 columns], 'lc2407':     rank vol_party_name    vol  ...  short_open_interest_chg  symbol  variety\n0      1           中信期货  36637  ...                      244  LC2407       LC\n1      2           海通期货   4366  ...                       30  LC2407       LC\n2      3           中信建投   3499  ...                       10  LC2407       LC\n3      4         国泰君安期货   3314  ...                      308  LC2407       LC\n4      5           广发期货   3123  ...                       43  LC2407       LC\n5      6         东方财富期货   2976  ...                       82  LC2407       LC\n6      7           东证期货   2782  ...                     -133  LC2407       LC\n7      8           徽商期货   2716  ...                      411  LC2407       LC\n8      9           永安期货   2269  ...                       -7  LC2407       LC\n9     10           华泰期货   2076  ...                       23  LC2407       LC\n10    11           平安期货   2065  ...                       -7  LC2407       LC\n11    12           方正中期   1991  ...                      301  LC2407       LC\n12    13           华闻期货   1956  ...                       -3  LC2407       LC\n13    14           华安期货   1766  ...                       76  LC2407       LC\n14    15           安粮期货   1758  ...                     -190  LC2407       LC\n15    16           申银万国   1481  ...                       19  LC2407       LC\n16    17           东吴期货   1398  ...                       18  LC2407       LC\n17    18           中泰期货   1175  ...                      -93  LC2407       LC\n18    19           先锋期货   1144  ...                      -19  LC2407       LC\n19    20           银河期货   1100  ...                     -218  LC2407       LC\n[20 rows x 12 columns]}\n```\n\n#### 仓单日报\n\n##### 仓单日报-郑州商品交易所\n\n接口: futures_warehouse_receipt_czce\n\n目标地址: http://www.czce.com.cn/cn/jysj/cdrb/H770310index_1.htm\n\n描述: 郑州商品交易所-交易数据-仓单日报\n\n限量: 单次返回当前交易日的所有仓单日报数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20200702\"; 交易日 |\n\n输出参数\n\n| 名称    | 类型   | 描述                                     |\n|-------|------|----------------------------------------|\n| 键值对字典 | dict | 键值对, 键为品种代码, 值为 pandas.DataFrame 格式的数据 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_warehouse_receipt_czce_df = ak.futures_warehouse_receipt_czce(date=\"20200702\")\nprint(futures_warehouse_receipt_czce_df)\n```\n\n数据示例\n\n```\n{'SR':     仓库编号       仓库简称    年度   等级   品牌   仓单数量 当日增减 有效预报   升贴水\n0   0103       藁城永安   NaN  NaN  NaN      0    0  NaN   100\n1   0112       津军粮城   NaN  NaN  NaN      0    0  NaN    80\n2   0201      南京铁心桥   NaN  NaN  NaN      0    0  NaN   200\n3   0404       荣桂钦州   NaN  NaN  NaN      0    0  NaN     0\n4   0407       柳州桂糖   NaN  NaN  NaN      0    0  NaN     0\n5   0409       云南广大  1920    1   康白    180    0  NaN  -170\n6    NaN        NaN  1920    1  黎山雪     80    0  NaN   NaN\n7    NaN        NaN  1920    1  三菁山     20    0  NaN   NaN\n8    NaN        NaN  1920    1  仙人山     50    0  NaN   NaN\n9     小计        NaN   NaN  NaN  NaN    330    0    0   NaN\n10  0411       佛山华商   NaN  NaN  NaN      0    0  NaN    80\n11  0415       营口港务   NaN  NaN  NaN      0    0  NaN    50\n12  0417       中糖湖北  1920    1   绿原    407    0  NaN   240\n13   NaN        NaN  1920    1   西沁    363    0  NaN   NaN\n14    小计        NaN   NaN  NaN  NaN    770    0  230   NaN\n15  0428      郑州南阳寨  1920    1   中糖   1431    0  NaN   140\n16    小计        NaN   NaN  NaN  NaN   1431    0   79   NaN\n17  0433       荣桂来宾   NaN  NaN  NaN      0    0  NaN     0\n18  0434       广西贵港   NaN  NaN  NaN      0    0  NaN     0\n19  0435       广西弘信   NaN  NaN  NaN      0    0  NaN     0\n20  0436       营口北方   NaN  NaN  NaN      0    0  NaN    50\n21  0437  日照凌云海(厂库)  1920    1  ALL    440  -50  NaN    50\n22    小计        NaN   NaN  NaN  NaN    440  -50    0   NaN\n23  0438      广东北部湾  1920    1   甘岭   1640    0  NaN     0\n24    小计        NaN   NaN  NaN  NaN   1640    0    0   NaN\n25  0440      中粮曹妃甸   NaN  NaN  NaN      0    0  NaN    50\n26  0441       弘信扶绥   NaN  NaN  NaN      0    0  NaN     0\n27  0444       中糖南通   NaN  NaN  NaN      0    0  NaN   180\n28  0445   中粮屯河(厂库)  1920    1  ALL   5000    0  NaN    50\n29    小计        NaN   NaN  NaN  NaN   5000    0    0   NaN\n30  0447   星光糖业(厂库)   NaN  NaN  NaN      0    0  NaN   100\n31  0449       陕西咸阳  1920    1   晶菱     50    0  NaN    80\n32   NaN        NaN  1920    1   中糖   1490    0  NaN   NaN\n33    小计        NaN   NaN  NaN  NaN   1540    0    0   NaN\n34  0450       冀盛物流   NaN  NaN  NaN      0    0  NaN    50\n35  0451       中糖北京   NaN  NaN  NaN      0    0  NaN    50\n36  0452       云南陆航  1920    1  大湾江     40   40  NaN  -100\n37    小计        NaN   NaN  NaN  NaN     40   40    0   NaN\n38  0454       云鸥物流   NaN  NaN  NaN      0    0  NaN     0\n39  0508       平湖华瑞   NaN  NaN  NaN      0    0  NaN   180\n40    总计        NaN   NaN  NaN  NaN  11191  -10  309   NaN, 'CF':      仓库编号  仓库简称    年度    等级   产地   仓单数量  当日增减  有效预报\n0    0301  河南国储  1920  1128   新疆      1     0   NaN\n1     NaN   NaN  1920  1129   新疆      1     0   NaN\n2     NaN   NaN  1920  1228   新疆      7     0   NaN\n3     NaN   NaN  1920  1229   新疆      5     0   NaN\n4     NaN   NaN  1920  2127   新疆      2     0   NaN\n..    ...   ...   ...   ...  ...    ...   ...   ...\n368   NaN   NaN  1920  3129   新疆     41     0   NaN\n369   NaN   NaN  1920  3130   新疆      8     0   NaN\n370   NaN   NaN  1920  4129   新疆      5     0   NaN\n371    小计   NaN   NaN   NaN  NaN     86     0     1\n372    总计   NaN   NaN   NaN  NaN  20641  -261  2203}\n```\n\n##### 仓单日报-大连商品交易所\n\n接口: futures_warehouse_receipt_dce\n\n目标地址: http://www.dce.com.cn/dce/channel/list/187.html\n\n描述: 大连商品交易所-行情数据-统计数据-日统计-仓单日报\n\n限量: 单次返回当前交易日的所有仓单日报数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20251027\"; 交易日 |\n\n输出参数\n\n| 名称           | 类型     | 描述 |\n|--------------|--------|----|\n| 品种代码         | object | -  |\n| 品种名称         | object | -  |\n| 仓库/分库        | object | -  |\n| 可选提货地点/分库-数量 | object | -  |\n| 昨日仓单量（手）     | int64  | -  |\n| 今日仓单量（手）     | int64  | -  |\n| 增减（手）        | int64  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_warehouse_receipt_dce_df = ak.futures_warehouse_receipt_dce(date=\"20251027\")\nprint(futures_warehouse_receipt_dce_df)\n```\n\n数据示例\n\n```\n     品种代码  品种名称   仓库/分库 可选提货地点/分库-数量  昨日仓单量（手）  今日仓单量（手）  增减（手）\n0       a    豆一   哈尔滨益海         None      2200      2200      0\n1       a    豆一  桦南宏安粮贸         None       200       200      0\n2       a    豆一    源发物流         None      3021      3021      0\n3       a    豆一    嫩江九三         None       454       454      0\n4       a    豆一    中船东北         None      1215      1215      0\n..    ...   ...     ...          ...       ...       ...    ...\n186     y    豆油    天津九三         None      1200      1200      0\n187     y    豆油    河北嘉好         None      2000      2000      0\n188     y    豆油    钦州中粮         None      2000      2000      0\n189     y  豆油小计    None         None     27344     27144   -200\n190  None    总计    None         None    315072    314394   -678\n```\n\n##### 仓单日报-上海期货交易所\n\n接口: futures_shfe_warehouse_receipt\n\n目标地址: https://tsite.shfe.com.cn/statements/dataview.html?paramid=dailystock&paramdate=20200703\n\n描述: 提供上海期货交易所指定交割仓库期货仓单日报\n\n限量: 单次返回当前交易日的所有仓单日报数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20200702\"; 交易日 |\n\n输出参数\n\n| 名称    | 类型   | 描述                                     |\n|-------|------|----------------------------------------|\n| 键值对字典 | dict | 键值对, 键为品种代码, 值为 pandas.DataFrame 格式的数据 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_shfe_warehouse_receipt_df = ak.futures_shfe_warehouse_receipt(date=\"20200702\")\nprint(futures_shfe_warehouse_receipt_df)\n```\n\n数据示例\n\n```\n{'线材':     VARNAME VARSORT REGNAME    REGSORT  ... WRTWGHTS WRTCHANGE ROWORDER ROWSTATUS\n179      线材      80      江苏          2  ...        0         0       26         0\n180      线材      80      江苏          2  ...        0         0       76         0\n181      线材      80      江苏          2  ...        0         0   100000         1\n182      线材      80      浙江          3  ...        0         0       19         0\n183      线材      80      浙江          3  ...        0         0       68         0\n184      线材      80      浙江          3  ...        0         0   100000         1\n185      线材      80      天津          8  ...        0         0       40         0\n186      线材      80      天津          8  ...        0         0       89         0\n187      线材      80      天津          8  ...        0         0   100000         1\n188      线材      80          999999999  ...        0         0   200000         2\n[10 rows x 11 columns], '铝':    VARNAME VARSORT REGNAME    REGSORT  ... WRTWGHTS WRTCHANGE ROWORDER ROWSTATUS\n30       铝      20      上海          0  ...     3539         0       16         0\n31       铝      20      上海          0  ...        0         0       17         0\n32       铝      20      上海          0  ...      650         0       25         0\n33       铝      20      上海          0  ...      374         0       27         0\n34       铝      20      上海          0  ...        0         0       28         0\n35       铝      20      上海          0  ...       51         0       29         0\n36       铝      20      上海          0  ...      572         0       38         0\n37       铝      20      上海          0  ...     2431         0      340         0\n38       铝      20      上海          0  ...        0         0      344         0\n39       铝      20      上海          0  ...        0         0      346         0\n40       铝      20      上海          0  ...        0         0      383         0\n41       铝      20      上海          0  ...     7617         0   100000         1\n42       铝      20      广东          1  ...     1777         0        6         0\n43       铝      20      广东          1  ...        0         0        8         0\n44       铝      20      广东          1  ...     4230         0       12         0\n45       铝      20      广东          1  ...        0         0      342         0\n46       铝      20      广东          1  ...      778         0      368         0\n47       铝      20      广东          1  ...     6785         0   100000         1\n48       铝      20      江苏          2  ...     8750         0       26         0\n49       铝      20      江苏          2  ...     4586         0       84         0\n50       铝      20      江苏          2  ...    11405         0      318         0\n51       铝      20      江苏          2  ...       76         0      345         0\n52       铝      20      江苏          2  ...        0         0      348         0\n53       铝      20      江苏          2  ...     1326         0      349         0\n54       铝      20      江苏          2  ...    11267         0      352         0\n55       铝      20      江苏          2  ...        0         0      353         0\n56       铝      20      江苏          2  ...    37410         0   100000         1\n57       铝      20      浙江          3  ...     1907         0       19         0\n58       铝      20      浙江          3  ...        0         0      321         0\n59       铝      20      浙江          3  ...        0         0      324         0\n60       铝      20      浙江          3  ...    17983         0      327         0\n61       铝      20      浙江          3  ...    11110       603      354         0\n62       铝      20      浙江          3  ...    31000       603   100000         1\n63       铝      20      山东          4  ...     5509         0      363         0\n64       铝      20      山东          4  ...        0         0      364         0\n65       铝      20      山东          4  ...      650         0      365         0\n66       铝      20      山东          4  ...     6159         0   100000         1\n67       铝      20      天津          8  ...        0         0       40         0\n68       铝      20      天津          8  ...        0         0       42         0\n69       铝      20      天津          8  ...        0         0      338         0\n70       铝      20      天津          8  ...        0         0   100000         1\n71       铝      20      河南       9999  ...        0         0      333         0\n72       铝      20      河南       9999  ...      829         0      355         0\n73       铝      20      河南       9999  ...        0         0      356         0\n74       铝      20      河南       9999  ...        0         0      357         0\n75       铝      20      河南       9999  ...        0         0      358         0\n76       铝      20      河南       9999  ...      528         0      367         0\n77       铝      20      河南       9999  ...     1357         0   100000         1\n78       铝      20      辽宁       9999  ...        0         0      369         0\n79       铝      20      重庆       9999  ...        0         0      359         0\n80       铝      20      重庆       9999  ...        0         0      360         0\n81       铝      20      重庆       9999  ...        0         0   100000         1\n82       铝      20          999999999  ...        0         0   180000         2\n83       铝      20          999999999  ...    90328       603   190000         2\n84       铝      20          999999999  ...    90328       603   200000         2}\n```\n\n##### 仓单日报-广州期货交易所\n\n接口: futures_gfex_warehouse_receipt\n\n目标地址: http://www.gfex.com.cn/gfex/cdrb/hqsj_tjsj.shtml\n\n描述: 广州期货交易所-行情数据-仓单日报\n\n限量: 单次返回当前交易日的所有仓单日报数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20240122\"; 交易日 |\n\n输出参数\n\n| 名称    | 类型   | 描述                                     |\n|-------|------|----------------------------------------|\n| 键值对字典 | dict | 键值对, 键为品种代码, 值为 pandas.DataFrame 格式的数据 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_gfex_warehouse_receipt_df = ak.futures_gfex_warehouse_receipt(date=\"20240122\")\nprint(futures_gfex_warehouse_receipt_df)\n```\n\n数据示例\n\n```\n{'SI':      品种        仓库/分库  昨日仓单量  今日仓单量   增减\n0   工业硅         中储吴淞    696    696    0\n1   工业硅      中储大场137    732    732    0\n2   工业硅      中储大场310   3192   3204   12\n3   工业硅       中远海运宝山    828    828    0\n4   工业硅       象屿速传上海   3144   3144    0\n5   工业硅         中储无锡    240    240    0\n6   工业硅         江苏诚通   2870   2906   36\n7   工业硅        尖峰供应链    958   1210  252\n8   工业硅        广州港物流    204    204    0\n9   工业硅        国储830   2483   2483    0\n10  工业硅         建发东莞   2096   2096    0\n11  工业硅         广东炬申   1116   1116    0\n12  工业硅         中储成都   1330   1330    0\n13  工业硅         成都中集    500    500    0\n14  工业硅         外运新都   1297   1297    0\n15  工业硅        外运龙泉驿   1284   1320   36\n16  工业硅         中储新港   1632   1668   36\n17  工业硅         外运天津   1116   1164   48\n18  工业硅       中远海运滨海    952    952    0\n19  工业硅         建发天津   1968   2004   36\n20  工业硅         外运昆明   3383   3323    0\n21  工业硅        青岛港物流   2924   2924    0\n22  工业硅       国贸泰达昆明    648    828  180\n23  工业硅         云铝物流   4741   4729    0\n24  工业硅  厦门国贸（青岛港物流）   1200   1200    0\n25  工业硅   厦门国贸（国贸泰达）    840    840    0\n26  工业硅   厦门国贸（外运天津）    660    660    0, 'LC':      品种       仓库/分库  昨日仓单量  今日仓单量   增减\n0   碳酸锂      象屿速传上海   1954   2054  100\n1   碳酸锂       外运龙泉驿    561    561    0\n2   碳酸锂        中储临港    120    120    0\n3   碳酸锂        建发上海    619    665   90\n4   碳酸锂      中远海运镇江   1161   1151    0\n5   碳酸锂        五矿无锡   1346   1346    0\n6   碳酸锂      江苏奔牛港务     67     67    0\n7   碳酸锂        遂宁天诚     87     87    0\n8   碳酸锂  九岭锂业（宜春奉新）   1500   1500    0\n9   碳酸锂        永兴特钢    280    280    0\n10  碳酸锂    盛新锂能（遂宁）    970    970    0\n11  碳酸锂      中远海运南昌   3389   3399   10\n12  碳酸锂  九岭锂业（宜春宜丰）   1500   1500    0}\n```\n\n#### 期转现-大商所\n\n接口: futures_to_spot_dce\n\n目标地址: http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/jgtj/qzxcx/index.html\n\n描述: 大连商品交易所-期转现统计数据\n\n限量: 单次返回指定交易日的期转现统计数据\n\n输入参数\n\n| 名称   | 类型  | 描述                  |\n|------|-----|---------------------|\n| date | str | date=\"202312\"; 交易年月 |\n\n输出参数\n\n| 名称      | 类型     | 描述      |\n|---------|--------|---------|\n| 合约代码    | object | -       |\n| 期转现发生日期 | object | -       |\n| 期转现数量   | int64  | 注意单位: 手 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_to_spot_dce_df = ak.futures_to_spot_dce(date=\"202312\")\nprint(futures_to_spot_dce_df)\n```\n\n数据示例\n\n```\n     合约代码     期转现发生日期  期转现数量\n0   c2401  2023-12-19   1480\n1   c2401  2023-12-26   1490\n2  eb2312  2023-12-20    176\n```\n\n#### 期转现-郑商所\n\n接口: futures_to_spot_czce\n\n目标地址: http://www.czce.com.cn/cn/jysj/qzxtj/H770311index_1.htm\n\n描述: 郑州商品交易所-期转现统计数据\n\n限量: 单次返回指定交易日的期转现统计数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20210112\"; 交易日 |\n\n输出参数\n\n| 名称   | 类型     | 描述       |\n|------|--------|----------|\n| 合约代码 | object | -        |\n| 合约数量 | int64  | 注意: 单边计算 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_to_spot_czce_df = ak.futures_to_spot_czce(date=\"20231228\")\nprint(futures_to_spot_czce_df)\n```\n\n数据示例\n\n```\n    合约代码  合约数量\n0  CF401   496\n1  CJ401    10\n```\n\n#### 期转现-上期所\n\n接口: futures_to_spot_shfe\n\n目标地址: https://tsite.shfe.com.cn/statements/dataview.html?paramid=kx\n\n描述: 上海期货交易所-期转现数据\n\n限量: 单次返回指定交易月份的期转现数据\n\n输入参数\n\n| 名称   | 类型  | 描述                  |\n|------|-----|---------------------|\n| date | str | date=\"202312\"; 交易月份 |\n\n输出参数\n\n| 名称   | 类型      | 描述 |\n|------|---------|----|\n| 日期   | object  | -  |\n| 合约   | object  | -  |\n| 交割量  | float64 | -  |\n| 期转现量 | float64 | -  |\n\n注意:\n\n1 铜、铜(BC)、铝、锌、铅、镍、锡、螺纹钢、线材、热轧卷板、天然橡胶、20号胶、低硫燃料油、燃料油、石油沥青、纸浆、不锈钢的数量单位为：吨；黄金的数量单位为：克；白银的数量单位为：千克；原油的数量单位为：桶。\n2 交割量、期转现量为单向计算。\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_to_spot_shfe_df = ak.futures_to_spot_shfe(date=\"202312\")\nprint(futures_to_spot_shfe_df)\n```\n\n数据示例\n\n```\n       日期      合约       交割量    期转现量\n0   2023-12-15  cu2312    7950.0     0.0\n1   2023-12-11  bc2312    2750.0  2750.0\n2   2023-12-13  bc2312     700.0   700.0\n3   2023-12-15  bc2312    1900.0     0.0\n4   2023-12-08  bc2312    1500.0  1500.0\n5   2023-12-15  al2312    9400.0     0.0\n6   2023-12-25  al2401     400.0   400.0\n7   2023-12-26  al2401      25.0    25.0\n8   2023-12-15  zn2312    4375.0     0.0\n9   2023-12-15  pb2312   37800.0     0.0\n10  2023-12-15  ni2312    2442.0     0.0\n11  2023-12-15  sn2312     470.0     0.0\n12  2023-12-15  au2312  702000.0     0.0\n13  2023-12-15  ag2312  141990.0     0.0\n14  2023-12-15  rb2312    5100.0     0.0\n15  2023-12-15  hc2312   46200.0     0.0\n16  2023-12-19  hc2401     900.0   900.0\n17  2023-12-15  ss2312   11040.0     0.0\n18  2023-12-12  ss2312     120.0   120.0\n19  2023-12-29  sc2401  105000.0     0.0\n20  2023-12-29  lu2401   15700.0     0.0\n21  2023-12-29  fu2401  124540.0     0.0\n22  2023-12-15  bu2312    5180.0     0.0\n23  2023-12-01  nr2312    2000.0  2000.0\n24  2023-12-04  nr2312     900.0   900.0\n25  2023-12-15  nr2312    3600.0     0.0\n26  2023-12-11  nr2312     900.0   900.0\n27  2023-12-13  nr2402    1000.0  1000.0\n28  2023-12-15  ao2312   28800.0     0.0\n29  2023-12-15  sp2312   70060.0     0.0\n```\n\n#### 交割统计-大商所\n\n接口: futures_delivery_dce\n\n目标地址: http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/jgtj/jgsj/index.html\n\n描述: 大连商品交易所-交割统计\n\n限量: 单次返回指定交易月份的交割统计数据\n\n输入参数\n\n| 名称   | 类型  | 描述                  |\n|------|-----|---------------------|\n| date | str | date=\"202312\"; 交易月份 |\n\n输出参数\n\n| 名称   | 类型     | 描述 |\n|------|--------|----|\n| 品种   | object | -  |\n| 合约   | object | -  |\n| 交割日期 | object | -  |\n| 交割量  | int64  | -  |\n| 交割金额 | int64  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_delivery_dce_df = ak.futures_delivery_dce(date=\"202312\")\nprint(futures_delivery_dce_df)\n```\n\n数据示例\n\n```\n       品种    合约    交割日期    交割量       交割金额\n0      豆二   b2312  2023-12-19   1400   61586000\n1     苯乙烯  eb2312  2023-12-21   1220   49324600\n2     乙二醇  eg2312  2023-12-05   1503   61021800\n3     乙二醇  eg2312  2023-12-07    100    4027000\n4     乙二醇  eg2312  2023-12-08    100    4027000\n5     乙二醇  eg2312  2023-12-11    300   12081000\n6     铁矿石   i2312  2023-12-05    100   10140000\n7     铁矿石   i2312  2023-12-19   1100  111595000\n8      焦炭   j2312  2023-12-05     50   12650000\n9      鸡蛋  jd2312  2023-12-22      5     213350\n10     鸡蛋  jd2312  2023-12-26      5     221800\n11     鸡蛋  jd2312  2023-12-27      7     309470\n12     鸡蛋  jd2312  2023-12-29     30    1299000\n13     焦煤  jm2312  2023-12-14    200   29040000\n14    聚乙烯   l2312  2023-12-19   1084   42525320\n15     豆粕   m2312  2023-12-06   2751  107123940\n16     豆粕   m2312  2023-12-11     14     550340\n17     豆粕   m2312  2023-12-19    187    7242510\n18    棕榈油   p2312  2023-12-19   1979  139499920\n19  液化石油气  pg2312  2023-12-05    176   16892480\n20  液化石油气  pg2312  2023-12-08     88    8349440\n21  液化石油气  pg2312  2023-12-29    876   85550160\n22    聚丙烯  pp2312  2023-12-19    329   12107200\n23     粳米  rr2312  2023-12-06    350   12215000\n24   聚氯乙烯   v2312  2023-12-19  20399  583717385\n25     豆油   y2312  2023-12-11     28    2268000\n26     豆油   y2312  2023-12-14      5     405000\n27     豆油   y2312  2023-12-19     67    5496680\n```\n\n#### 交割统计-郑商所\n\n接口: futures_delivery_czce\n\n目标地址: http://www.czce.com.cn/cn/jysj/ydjgcx/H770316index_1.htm\n\n描述: 郑州商品交易所-交割统计\n\n限量: 单次返回指定交易月份的交割统计数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20210112\"; 交易日 |\n\n输出参数\n\n| 名称   | 类型     | 描述             |\n|------|--------|----------------|\n| 品种   | object | -              |\n| 交割数量 | int64  | 按单边统计          |\n| 交割额  | int64  | 注意单位: 元; 按单边统计 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_delivery_monthly_czce_df = ak.futures_delivery_czce(date=\"20210112\")\nprint(futures_delivery_monthly_czce_df)\n```\n\n数据示例\n\n```\n      品种  交割数量        交割额\n0     鲜苹果   138    8221920\n1      棉花  1416  106332600\n2    干制红枣    76    3697150\n3      棉纱     4     418600\n4  精对苯二甲酸   216    3974400\n5     动力煤   200   15276000\n6      合计  2050  137920670\n```\n\n#### 交割统计-上期所\n\n接口: futures_delivery_shfe\n\n目标地址: https://tsite.shfe.com.cn/statements/dataview.html?paramid=kx\n\n描述: 上海期货交易所-交割统计\n\n限量: 单次返回指定交易月份的交割统计数据\n\n输入参数\n\n| 名称   | 类型  | 描述                  |\n|------|-----|---------------------|\n| date | str | date=\"202312\"; 交易月份 |\n\n输出参数\n\n| 名称       | 类型      | 描述                                        |\n|----------|---------|-------------------------------------------|\n| 品种       | object  | -                                         |\n| 交割量-本月   | int64   | 注意单位: 手; 交割量单边计算; 交割数据统计期为上月 16 日到本月 15 日 |\n| 交割量-比重   | float64 | 注意单位: %                                   |\n| 交割量-本年累计 | int64   | 注意单位: 手; 交割量单边计算; 交割数据统计期为上月 16 日到本月 15 日 |\n| 交割量-累计同比 | float64 | 注意单位: %                                   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_delivery_shfe_df = ak.futures_delivery_shfe(date=\"202312\")\nprint(futures_delivery_shfe_df)\n```\n\n数据示例\n\n```\n         品种  交割量-本月  交割量-比重  交割量-本年累计    交割量-累计同比\n0         铜    1590    3.399833     57280    6.527804\n1     铜(BC)    1470    3.143242     21835    4.398757\n2         铝    1880    4.019929     74710  -33.431346\n3         锌     875    1.870977     34845  -49.216644\n4         铅    7560   16.165245     77230   16.126607\n5         镍    2442    5.221631     26634   41.234489\n6         锡     470    1.004982     24122   33.432902\n7       氧化铝    1440    3.079094      5250         NaN\n8        黄金    1365    2.918725      5418    5.552309\n9        白银    9466   20.240768    124720   -6.371990\n10      螺纹钢     510    1.090513     42330   95.700416\n11       线材       0    0.000000       180         NaN\n12     热轧卷板    4620    9.878761     92520   44.044839\n13      不锈钢    2232    4.772596     73932   66.558529\n14       原油     301    0.643616     40608   68.700926\n15    低硫燃料油     372    0.795433     14172  -48.957320\n16      燃料油    1730    3.699190     41964  406.200241\n17     石油沥青     518    1.107619     24412  -41.923205\n18    丁二烯橡胶       0         NaN         0         NaN\n19     天然橡胶       0         NaN     32656  123.456959\n20     20号胶     920    1.967199     16681    5.850625\n21       纸浆    7006   14.980649    107528   73.214343\n22  SCFIS欧线       0         NaN         0         NaN\n23       总计   46767  100.000000    939027   14.213102\n```\n\n#### 交割配对-大商所\n\n接口: futures_delivery_match_dce\n\n目标地址: http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/jgtj/jgsj/index.html\n\n描述: 大连商品交易所-交割配对\n\n限量: 单次返回指定品种的的交割配对数据\n\n输入参数\n\n| 名称     | 类型  | 描述               |\n|--------|-----|------------------|\n| symbol | str | symbol=\"a\"; 交易品种 |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| 合约号   | object  | -  |\n| 配对日期  | object  | -  |\n| 买会员号  | object  | -  |\n| 配对手数  | int64   | -  |\n| 卖会员号  | object  | -  |\n| 交割结算价 | float64 | -  |\n\n注意:\n\n1 价格：自2019年12月02日起，纤维板报价单位由元/张改为元/立方米\n2 配对手数：手\n3 交割结算价：元/吨，鸡蛋为元/500千克，纤维板为元/立方米、胶合板为元/张\n4 *为非期货公司会员\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_delivery_match_dce_df = ak.futures_delivery_match_dce(symbol=\"a\")\nprint(futures_delivery_match_dce_df)\n```\n\n数据示例\n\n```\n      合约号   配对日期  买会员号  配对手数   卖会员号   交割结算价\n0     a1401  2014-01-02  0014     5  196.0  4425.0\n1     a1401  2014-01-02  0014    26   51.0  4425.0\n2     a1401  2014-01-02  0014     2   97.0  4425.0\n3     a1401  2014-01-02  0014    20   52.0  4425.0\n4     a1401  2014-01-02  0021     1  125.0  4425.0\n     ...         ...   ...   ...    ...     ...\n1415  a2401  2024-01-12  0051    78   51.0  4757.0\n1416  a2401  2024-01-12  0110    21   51.0  4757.0\n1417  a2401  2024-01-12  0173   200   51.0  4757.0\n1418  a2401  2024-01-12  0196    40   51.0  4757.0\n1419  a2401  2024-01-17  0196    10   30.0  4793.0\n[1420 rows x 6 columns]\n```\n\n#### 交割配对-郑商所\n\n接口: futures_delivery_match_czce\n\n目标地址: http://www.czce.com.cn/cn/jysj/jgpd/H770308index_1.htm\n\n描述: 郑州商品交易所-交割配对\n\n限量: 单次返回指定品种的的交割配对数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20210106\"; 交易日 |\n\n输出参数\n\n| 名称        | 类型      | 描述            |\n|-----------|---------|---------------|\n| 卖方会员      | object  | -             |\n| 卖方会员-会员简称 | object  | -             |\n| 买方会员      | object  | -             |\n| 买方会员-会员简称 | object  | -             |\n| 交割量       | float64 | 注意单位: 手(单边计算) |\n| 配对日期      | object  | -             |\n| 合约代码      | object  | -             |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_delivery_match_czce_df = ak.futures_delivery_match_czce(date=\"20210106\")\nprint(futures_delivery_match_czce_df)\n```\n\n数据示例\n\n```\n    卖方会员 卖方会员-会员简称  买方会员 买方会员-会员简称 交割量        配对日期   合约代码\n0   0038      申银万国  0198      英大期货   6  2021-01-06  AP101\n1   0121      瑞达期货  0198      英大期货   4  2021-01-06  AP101\n2   0202      中辉期货  0163    五矿经易期货   2  2021-01-06  AP101\n3   0202      中辉期货  0058      鲁证期货   2  2021-01-06  AP101\n4   0203      宏源期货  0163    五矿经易期货   2  2021-01-06  AP101\n5   0262      一德期货  0058      鲁证期货   2  2021-01-06  AP101\n6   0262      一德期货  0058      鲁证期货   2  2021-01-06  AP101\n7   0203      宏源期货  0188      永安期货   8  2021-01-06  CF101\n8   0203      宏源期货  0188      永安期货   8  2021-01-06  CF101\n9   0209      华安期货  0088      中原期货   8  2021-01-06  CF101\n10  0209      华安期货  0088      中原期货   8  2021-01-06  CF101\n11  0068      中粮期货  0188      永安期货   9  2021-01-06  CJ101\n12  0068      中粮期货  0038      申银万国   7  2021-01-06  CJ101\n13  0068      中粮期货  0262      一德期货   7  2021-01-06  CJ101\n14  0068      中粮期货  0188      永安期货   6  2021-01-06  CJ101\n15  0068      中粮期货  0188      永安期货   6  2021-01-06  CJ101\n16  0068      中粮期货  0188      永安期货   5  2021-01-06  CJ101\n17  0068      中粮期货  0262      一德期货   4  2021-01-06  CJ101\n18  0068      中粮期货  0262      一德期货   3  2021-01-06  CJ101\n19  0068      中粮期货  0262      一德期货   3  2021-01-06  CJ101\n20  0068      中粮期货  0188      永安期货   2  2021-01-06  CJ101\n21  0068      中粮期货  0234      新湖期货   2  2021-01-06  CJ101\n22  0068      中粮期货  0188      永安期货   2  2021-01-06  CJ101\n23  0068      中粮期货  0068      中粮期货   1  2021-01-06  CJ101\n24  0068      中粮期货  0038      申银万国   1  2021-01-06  CJ101\n25  0068      中粮期货  0038      申银万国   1  2021-01-06  CJ101\n26  0068      中粮期货  0188      永安期货   1  2021-01-06  CJ101\n```\n\n#### 库存周报\n\n##### 上海期货交易所\n\n接口: futures_stock_shfe_js\n\n目标地址: https://datacenter.jin10.com/reportType/dc_shfe_weekly_stock\n\n描述: 金十财经-上海期货交易所指定交割仓库库存周报\n\n限量: 单次返回指定 date 的库存周报数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                    |\n|------|-----|---------------------------------------|\n| date | str | date=\"20240419\"; 库存周报只在每周的最后一个交易日公布数据 |\n\n输出参数\n\n| 名称           | 类型      | 描述 |\n|--------------|---------|----|\n| 商品           | object  | -  |\n| 期货总量{随日期变动}  | int64   | -  |\n| 期货总量{随日期变动}} | int64   | -  |\n| 增减           | int64   | -  |\n| 增减幅度         | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_stock_shfe_js_df = ak.futures_stock_shfe_js(date=\"20240419\")\nprint(futures_stock_shfe_js_df)\n```\n\n数据示例\n\n```\n           商品  期货总量2024-04-19  期货总量2024-04-12      增减   增减幅度\n0          黄金            3078            3105     -27  -0.87\n1           镍           23200           22774     426   1.87\n2           锡           14486           14098     388   2.75\n3           锌          131747          127634    4113   3.22\n4           铝          228537          231765   -3228  -1.39\n5           铜          300045          299723     322   0.11\n6           铅           51746           60215   -8469 -14.06\n7         螺纹钢          523732          521700    2032   0.39\n8          线材          162052          162502    -450  -0.28\n9          纸浆          451596          436461   15135   3.47\n10     白银(千克)         4544581         4494032   50549   1.12\n11        燃料油          183300          183300       0   0.00\n12       热轧卷板          749487          744419    5068   0.68\n13       沥青厂库          672180          672180       0   0.00\n14       沥青仓库           75553           82453   -6900  -8.37\n15       天然橡胶          216891          217721    -830  -0.38\n16  中质含硫原油(桶)         5628000         6308000 -680000 -10.78\n17       20号胶          141624          140737     887   0.63\n```\n\n#### 成交持仓\n\n接口: futures_hold_pos_sina\n\n目标地址: https://vip.stock.finance.sina.com.cn/q/view/vFutures_Positions_cjcc.php\n\n描述: 新浪财经-期货-成交持仓\n\n限量: 单次返回指定合约的成交持仓数据\n\n输入参数\n\n| 名称       | 类型  | 描述                                              |\n|----------|-----|-------------------------------------------------|\n| symbol   | str | symbol=\"成交量\"; choice of {\"成交量\", \"多单持仓\", \"空单持仓\"} |\n| contract | str | contract=\"OI2501\"; 只限于商品期货                      |\n| date     | str | date=\"20240223\"                                 |\n\n输出参数\n\n| 名称     | 类型     | 描述 |\n|--------|--------|----|\n| 名次     | int64  | -  |\n| 会员简称   | object | -  |\n| 成交量    | int64  | -  |\n| 比上交易增减 | int64  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_hold_pos_sina_df = ak.futures_hold_pos_sina(symbol=\"成交量\", contract=\"OI2501\", date=\"20241016\")\nprint(futures_hold_pos_sina_df)\n```\n\n数据示例\n\n```\n    名次    会员简称    成交量   比上交易增减\n0    1    中信期货（代客）  78197 -15458.0\n1    2    东证期货（代客）  67129  -6540.0\n2    3    国泰君安（代客）  53632 -12474.0\n3    4    银河期货（代客）  21916 -10902.0\n4    5    华闻期货（代客）  21807  -4777.0\n5    6    徽商期货（代客）  21615  -7861.0\n6    7    海通期货（代客）  18847  -4165.0\n7    8    中信建投（代客）  15285  -2470.0\n8    9    华泰期货（代客）  14610  -3036.0\n9   10    南华期货（代客）  11990   -554.0\n10  11    华西期货（代客）  11324   -795.0\n11  12    方正中期（代客）  10958  -4512.0\n12  13    瑞达期货（代客）   9038  -2121.0\n13  14    国金期货（代客）   9026   3334.0\n14  15    广发期货（代客）   8775  -5333.0\n15  16    中辉期货（代客）   7746  -4127.0\n16  17  国投安信期货（代客）   7739   1295.0\n17  18    安粮期货（代客）   7671  -1946.0\n18  19    东吴期货（代客）   7639  -4308.0\n19  20    东方财富（代客）   7220  -1248.0\n```\n\n#### 现期图\n\n接口: futures_spot_sys\n\n目标地址: https://www.100ppi.com/sf/792.html\n\n描述: 生意社-商品与期货-现期图\n\n限量: 单次返回指定品种的现期图数据\n\n输入参数\n\n| 名称       | 类型  | 描述                                                  |\n|----------|-----|-----------------------------------------------------|\n| symbol   | str | symbol=\"铜\"; 期货品种                                    |\n| contract | str | indicator=\"市场价格\"; choice of {\"市场价格\", \"基差率\", \"主力基差\"} |\n\n输出参数-市场价格\n\n| 名称   | 类型      | 描述 |\n|------|---------|----|\n| 日期   | object  | -  |\n| 现货价格 | float64 | -  |\n| 主力合约 | float64 | -  |\n| 最近合约 | float64 | -  |\n\n接口示例-市场价格\n\n```python\nimport akshare as ak\n\nfutures_spot_sys_df = ak.futures_spot_sys(symbol=\"铜\", indicator=\"市场价格\")\nprint(futures_spot_sys_df)\n```\n\n数据示例-市场价格\n\n```\n     日期   现货价格    主力合约     最近合约\n0   11-26  68661.67      NaN      NaN\n1   12-05  69005.00  68200.0  68570.0\n2   12-14  68613.33  68030.0  68570.0\n3   12-23  69418.33      NaN      NaN\n4   01-01  69250.00      NaN      NaN\n5   01-10  68200.00  67920.0  68110.0\n6   01-19  67813.33  67630.0  67680.0\n7   01-28  68943.33      NaN      NaN\n8   02-06  68001.67  68130.0  68010.0\n9   02-15  67710.00      NaN      NaN\n10  02-24  69351.67      NaN      NaN\n```\n\n输出参数-基差率\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 日期  | object  | -  |\n| 基差率 | float64 | -  |\n\n接口示例-基差率\n\n```python\nimport akshare as ak\n\nfutures_spot_sys_df = ak.futures_spot_sys(symbol=\"铜\", indicator=\"基差率\")\nprint(futures_spot_sys_df)\n```\n\n数据示例-基差率\n\n```\n     日期   基差率\n0   11-26   NaN\n1   12-05  1.17\n2   12-14  0.85\n3   12-23   NaN\n4   01-01   NaN\n5   01-10  0.41\n6   01-19  0.27\n7   01-28   NaN\n8   02-06 -0.19\n9   02-15   NaN\n10  02-24   NaN\n```\n\n输出参数-主力基差\n\n| 名称   | 类型      | 描述 |\n|------|---------|----|\n| 日期   | object  | -  |\n| 主力基差 | float64 | -  |\n\n接口示例-主力基差\n\n```python\nimport akshare as ak\n\nfutures_spot_sys_df = ak.futures_spot_sys(symbol=\"铜\", indicator=\"主力基差\")\nprint(futures_spot_sys_df)\n```\n\n数据示例-主力基差\n\n```\n    日期    主力基差\n0   11-26     NaN\n1   12-05  805.00\n2   12-14  583.33\n3   12-23     NaN\n4   01-01     NaN\n5   01-10  280.00\n6   01-19  183.33\n7   01-28     NaN\n8   02-06 -128.33\n9   02-15     NaN\n10  02-24     NaN\n```\n\n#### 合约信息\n\n##### 上海期货交易所\n\n接口: futures_contract_info_shfe\n\n目标地址: https://tsite.shfe.com.cn/bourseService/businessdata/summaryinquiry/\n\n描述: 上海期货交易所-交易所服务-业务数据-交易参数汇总查询\n\n限量: 单次返回指定 date 的期货合约信息数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20240513\"; 交易日 |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| 合约代码  | object  | -  |\n| 上市日   | object  | -  |\n| 到期日   | object  | -  |\n| 开始交割日 | object  | -  |\n| 最后交割日 | object  | -  |\n| 挂牌基准价 | float64 | -  |\n| 交易日   | object  | -  |\n| 更新时间  | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_contract_info_shfe_df = ak.futures_contract_info_shfe(date=\"20240513\")\nprint(futures_contract_info_shfe_df)\n```\n\n数据示例\n\n```\n     合约代码  上市日       到期日  ...    挂牌基准价    交易日               更新时间\n0    cu2405  2023-05-16  2024-05-15  ...  64490.0  2024-05-13  2024-05-13 18:21:10\n1    cu2406  2023-06-16  2024-06-17  ...  66930.0  2024-05-13  2024-05-13 18:21:10\n2    cu2407  2023-07-18  2024-07-15  ...  68220.0  2024-05-13  2024-05-13 18:21:10\n3    cu2408  2023-08-16  2024-08-15  ...  67270.0  2024-05-13  2024-05-13 18:21:10\n4    cu2409  2023-09-18  2024-09-18  ...  68900.0  2024-05-13  2024-05-13 18:21:10\n..      ...         ...         ...  ...      ...         ...                  ...\n271  ec2408  2023-08-18  2024-08-26  ...    780.0  2024-05-13  2024-05-13 18:21:10\n272  ec2410  2023-08-18  2024-10-28  ...    780.0  2024-05-13  2024-05-13 18:21:10\n273  ec2412  2023-08-18  2024-12-30  ...    780.0  2024-05-13  2024-05-13 18:21:10\n274  ec2502  2024-02-27  2025-02-24  ...   1359.8  2024-05-13  2024-05-13 18:21:10\n275  ec2504  2024-04-30  2025-04-28  ...   2158.3  2024-05-13  2024-05-13 18:21:10\n[276 rows x 8 columns]\n```\n\n##### 上海国际能源交易中心\n\n接口: futures_contract_info_ine\n\n目标地址: https://www.ine.cn/bourseService/summary/?name=currinstrumentprop\n\n描述: 上海国际能源交易中心-业务指南-交易参数汇总(期货)\n\n限量: 单次返回指定 date 的期货合约信息数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20241129\"; 交易日 |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| 合约代码  | object  | -  |\n| 上市日   | object  | -  |\n| 到期日   | object  | -  |\n| 开始交割日 | object  | -  |\n| 最后交割日 | object  | -  |\n| 挂牌基准价 | float64 | -  |\n| 交易日   | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_contract_info_ine_df = ak.futures_contract_info_ine(date=\"20241129\")\nprint(futures_contract_info_ine_df)\n```\n\n数据示例\n\n```\n    合约代码  上市日       到期日      开始交割日    最后交割日   挂牌基准价    交易日\n0   sc2412  2021-12-01  2024-11-29  2024-12-02  2024-12-06   420.0  2024-11-29\n1   sc2501  2024-01-02  2024-12-31  2025-01-06  2025-01-10   551.7  2024-11-29\n2   sc2502  2024-02-01  2025-01-31  2025-02-03  2025-02-07   567.2  2024-11-29\n3   sc2503  2022-03-01  2025-02-28  2025-03-03  2025-03-07   494.0  2024-11-29\n4   sc2504  2024-04-01  2025-03-31  2025-04-01  2025-04-07   593.4  2024-11-29\n..     ...         ...         ...         ...         ...     ...         ...\n57  ec2502  2024-02-27  2025-02-24  2025-02-24  2025-02-24  1359.8  2024-11-29\n58  ec2504  2024-04-30  2025-04-28  2025-04-28  2025-04-28  2158.3  2024-11-29\n59  ec2506  2024-06-25  2025-06-30  2025-06-30  2025-06-30  2403.8  2024-11-29\n60  ec2508  2024-08-27  2025-08-25  2025-08-25  2025-08-25  1509.4  2024-11-29\n61  ec2510  2024-10-29  2025-10-27  2025-10-27  2025-10-27  1920.9  2024-11-29\n[62 rows x 7 columns]\n```\n\n##### 大连商品交易所\n\n接口: futures_contract_info_dce\n\n目标地址: http://www.dce.com.cn/dce/channel/list/180.html\n\n描述: 大连商品交易所-数据中心-业务数据-交易参数-合约信息\n\n限量: 单次返回最近交易日的期货合约信息数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称     | 类型      | 描述 |\n|--------|---------|----|\n| 品种     | object  | -  |\n| 合约代码   | object  | -  |\n| 交易单位   | int64   | -  |\n| 最小变动价位 | float64 | -  |\n| 开始交易日  | object  | -  |\n| 最后交易日  | object  | -  |\n| 最后交割日  | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_contract_info_dce_df = ak.futures_contract_info_dce()\nprint(futures_contract_info_dce_df)\n```\n\n数据示例\n\n```\n    品种名称 合约  交易单位  最小变动价位  开始交易日 最后交易日   最后交割日\n0     豆一  a2511    10     1.0  2024-11-15  2025-11-14  2025-11-19\n1     豆一  a2601    10     1.0  2025-01-16  2026-01-15  2026-01-20\n2     豆一  a2603    10     1.0  2025-03-17  2026-03-13  2026-03-18\n3     豆一  a2605    10     1.0  2025-05-20  2026-05-19  2026-05-22\n4     豆一  a2607    10     1.0  2025-07-15  2026-07-14  2026-07-17\n..   ...    ...   ...     ...         ...         ...         ...\n232   豆油  y2603    10     2.0  2025-03-17  2026-03-13  2026-03-18\n233   豆油  y2605    10     2.0  2025-05-20  2026-05-19  2026-05-22\n234   豆油  y2607    10     2.0  2025-07-15  2026-07-14  2026-07-17\n235   豆油  y2608    10     2.0  2025-08-15  2026-08-14  2026-08-19\n236   豆油  y2609    10     2.0  2025-09-15  2026-09-14  2026-09-17\n[237 rows x 7 columns]\n```\n\n##### 郑州商品交易所\n\n接口: futures_contract_info_czce\n\n目标地址: http://www.czce.com.cn/cn/jysj/cksj/H770322index_1.htm\n\n描述: 郑州商品交易所-交易数据-参考数据\n\n限量: 单次返回指定 date 的期货合约信息数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20240228\"; 交易日 |\n\n输出参数\n\n| 名称                        | 类型      | 描述 |\n|---------------------------|---------|----|\n| 产品名称                      | object  | -  |\n| 合约代码                      | object  | -  |\n| 产品代码                      | object  | -  |\n| 产品类型                      | object  | -  |\n| 交易所MIC编码                  | object  | -  |\n| 交易场所                      | object  | -  |\n| 交易时间节假日除外                 | object  | -  |\n| 交易国家ISO编码                 | object  | -  |\n| 交易币种ISO编码                 | object  | -  |\n| 结算币种ISO编码                 | object  | -  |\n| 到期时间待国家公布2025年节假日安排后进行调整  | object  | -  |\n| 结算方式                      | object  | -  |\n| 挂牌频率                      | object  | -  |\n| 最小变动价位                    | object  | -  |\n| 最小变动价值                    | object  | -  |\n| 交易单位                      | object  | -  |\n| 计量单位                      | object  | -  |\n| 最大下单量                     | object  | -  |\n| 日持仓限额期货公司会员不限仓            | object  | -  |\n| 大宗交易最小规模                  | object  | -  |\n| 是否受CESR监管                 | object  | -  |\n| 是否为灵活合约                   | object  | -  |\n| 上市周期该产品的所有合约月份            | object  | -  |\n| 交割通知日                     | object  | -  |\n| 第一交易日                     | object  | -  |\n| 最后交易日待国家公布2025年节假日安排后进行调整 | object  | -  |\n| 交割结算日                     | object  | -  |\n| 月份代码                      | object  | -  |\n| 年份代码                      | object  | -  |\n| 最后交割日                     | object  | -  |\n| 车（船）板最后交割日                | object  | -  |\n| 合约交割月份本合约交割月份             | object  | -  |\n| 交易保证金率                    | object  | -  |\n| 涨跌停板                      | object  | -  |\n| 费用币种ISO编码                 | object  | -  |\n| 交易手续费                     | float64 | -  |\n| 手续费收取方式                   | object  | -  |\n| 交割手续费                     | float64 | -  |\n| 平今仓手续费                    | float64 | -  |\n| 交易限额                      | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_contract_info_czce_df = ak.futures_contract_info_czce(date=\"20240228\")\nprint(futures_contract_info_czce_df)\n```\n\n数据示例\n\n```\n      产品名称  合约代码 产品代码 产品类型 交易所MIC编码  ...  交易手续费 手续费收取方式 交割手续费 平今仓手续费  交易限额\n0    鲜苹果期货  AP403   AP   期货     XZCE  ...    5.0     绝对值   0.0   20.0   NaN\n1    鲜苹果期货  AP404   AP   期货     XZCE  ...    5.0     绝对值   0.0   20.0   NaN\n2    鲜苹果期货  AP405   AP   期货     XZCE  ...    5.0     绝对值   0.0   20.0   NaN\n3    鲜苹果期货  AP410   AP   期货     XZCE  ...    5.0     绝对值   0.0   20.0   NaN\n4    鲜苹果期货  AP411   AP   期货     XZCE  ...    5.0     绝对值   0.0   20.0   NaN\n..     ...    ...  ...  ...      ...  ...    ...     ...   ...    ...   ...\n213  动力煤期货  ZC410   ZC   期货     XZCE  ...  150.0     绝对值   0.0  150.0  20.0\n214  动力煤期货  ZC411   ZC   期货     XZCE  ...  150.0     绝对值   0.0  150.0  20.0\n215  动力煤期货  ZC412   ZC   期货     XZCE  ...  150.0     绝对值   0.0  150.0  20.0\n216  动力煤期货  ZC501   ZC   期货     XZCE  ...  150.0     绝对值   0.0  150.0  20.0\n217  动力煤期货  ZC502   ZC   期货     XZCE  ...  150.0     绝对值   0.0  150.0  20.0\n[218 rows x 40 columns]\n```\n\n##### 广州期货交易所\n\n接口: futures_contract_info_gfex\n\n目标地址: http://www.gfex.com.cn/gfex/hyxx/ywcs.shtml\n\n描述: 广州期货交易所-业务/服务-合约信息\n\n限量: 单次返回最近交易日的期货合约信息数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称     | 类型     | 描述 |\n|--------|--------|----|\n| 品种     | object | -  |\n| 合约代码   | object | -  |\n| 交易单位   | int64  | -  |\n| 最小变动单位 | int64  | -  |\n| 开始交易日  | object | -  |\n| 最后交易日  | object | -  |\n| 最后交割日  | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_contract_info_gfex_df = ak.futures_contract_info_gfex()\nprint(futures_contract_info_gfex_df)\n```\n\n数据示例\n\n```\n     品种    合约代码  交易单位  最小变动单位       开始交易日       最后交易日       最后交割日\n0   碳酸锂  lc2403     1      50  2023-07-21  2024-03-14  2024-03-19\n1   碳酸锂  lc2404     1      50  2023-07-21  2024-04-16  2024-04-19\n2   碳酸锂  lc2405     1      50  2023-07-21  2024-05-17  2024-05-22\n3   碳酸锂  lc2406     1      50  2023-07-21  2024-06-17  2024-06-20\n4   碳酸锂  lc2407     1      50  2023-07-21  2024-07-12  2024-07-17\n5   碳酸锂  lc2408     1      50  2023-08-15  2024-08-14  2024-08-19\n6   碳酸锂  lc2409     1      50  2023-09-15  2024-09-13  2024-09-20\n7   碳酸锂  lc2410     1      50  2023-10-23  2024-10-21  2024-10-24\n8   碳酸锂  lc2411     1      50  2023-11-15  2024-11-14  2024-11-19\n9   碳酸锂  lc2412     1      50  2023-12-15  2024-12-13  2024-12-18\n10  碳酸锂  lc2501     1      50  2024-01-16  2025-01-15  2025-01-20\n11  碳酸锂  lc2502     1      50  2024-02-23  2025-02-24  2025-02-27\n12  工业硅  si2403     5       5  2023-03-15  2024-03-14  2024-03-19\n13  工业硅  si2404     5       5  2023-08-15  2024-04-16  2024-04-19\n14  工业硅  si2405     5       5  2023-09-15  2024-05-17  2024-05-22\n15  工业硅  si2406     5       5  2023-10-23  2024-06-17  2024-06-20\n16  工业硅  si2407     5       5  2023-11-15  2024-07-12  2024-07-17\n17  工业硅  si2408     5       5  2023-12-15  2024-08-14  2024-08-19\n18  工业硅  si2409     5       5  2024-01-16  2024-09-13  2024-09-20\n19  工业硅  si2410     5       5  2024-02-23  2024-10-21  2024-10-24\n```\n\n##### 中国金融期货交易所\n\n接口: futures_contract_info_cffex\n\n目标地址: http://www.gfex.com.cn/gfex/hyxx/ywcs.shtml\n\n描述: 中国金融期货交易所-数据-交易参数\n\n限量: 单次返回指定 date 的期货合约信息数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20240228\"; 交易日 |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| 合约代码  | object  | -  |\n| 合约月份  | object  | -  |\n| 挂盘基准价 | float64 | -  |\n| 上市日   | object  | -  |\n| 最后交易日 | object  | -  |\n| 涨停板幅度 | object  | -  |\n| 跌停板幅度 | object  | -  |\n| 涨停板价位 | float64 | -  |\n| 跌停板价位 | float64 | -  |\n| 持仓限额  | int64   | -  |\n| 品种    | object  | -  |\n| 查询交易日 | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_contract_info_cffex_df = ak.futures_contract_info_cffex(date=\"20240228\")\nprint(futures_contract_info_cffex_df)\n```\n\n数据示例\n\n```\n        合约代码    合约月份    挂盘基准价 上市日  ...  跌停板价位 持仓限额 品种  查询交易日\n0           TS2409  2409  100.974  2023-12-11  ...  101.056  2000  TS  2024-02-28\n1           TS2406  2406  101.065  2023-09-11  ...  101.020  2000  TS  2024-02-28\n2           TS2403  2403  101.145  2023-06-12  ...  100.858  2000  TS  2024-02-28\n3           TL2409  2409   99.330  2023-12-11  ...  102.990  2000  TL  2024-02-28\n4           TL2406  2406   98.750  2023-09-11  ...  102.870  2000  TL  2024-02-28\n..             ...   ...      ...         ...  ...      ...   ...  ..         ...\n831  HO2403-C-2075  2403  193.200  2023-12-18  ...   83.800  1200  HO  2024-02-28\n832  HO2403-C-2050  2403  253.400  2023-12-06  ...  115.000  1200  HO  2024-02-28\n833  HO2403-C-2025  2403  234.800  2023-12-18  ...  133.600  1200  HO  2024-02-28\n834  HO2403-C-2000  2403  286.200  2023-12-08  ...  158.600  1200  HO  2024-02-28\n835  HO2403-C-1975  2403  241.200  2024-01-18  ...  189.600  1200  HO  2024-02-28\n[836 rows x 12 columns]\n```\n\n### 期货行情数据\n\n#### 内盘-实时行情数据\n\n接口: futures_zh_spot\n\n目标地址: https://finance.sina.com.cn/futuremarket/\n\n描述: 新浪财经-期货页面的实时行情数据\n\n限量: 单次返回当日可以订阅的所有期货品种数据；只能获取近期合约的数据\n\n输入参数\n\n| 名称             | 类型  | 描述                                                    |\n|----------------|-----|-------------------------------------------------------|\n| subscribe_list | str | 需要订阅的合约代码; e.g., 按照示例获取                               |\n| market         | str | market=\"CF\"; market=\"CF\": 商品期货, market=\"FF\": 金融期货     |\n| adjust         | str | adjust='0'; adjust='1': 返回合约、交易所和最小变动单位的实时数据, 返回数据会变慢 |\n\n输出参数\n\n| 名称                | 类型      | 描述                            |\n|-------------------|---------|-------------------------------|\n| symbol            | object  | 品种                            |\n| time              | object  | 时间, e.g., 144050表示下午14点40分50秒 |\n| open              | float64 | 开盘                            |\n| high              | float64 | 高                             |\n| low               | float64 | 低                             |\n| current_price     | float64 | 当前价格(买价)                      |\n| bid_price         | float64 | 买                             |\n| ask_price         | float64 | 卖价                            |\n| buy_vol           | int64   | 买量                            |\n| sell_vol          | int64   | 卖量                            |\n| hold              | float64 | 持仓量                           |\n| volume            | int64   | 成交量                           |\n| avg_price         | float64 | 均价                            |\n| last_close        | float64 | 上一个交易日的收盘价                    |\n| last_settle_price | float64 | 上一个交易日的结算价                    |\n\n接口示例-单品种获取\n\n```python\nimport akshare as ak\n\nfutures_zh_spot_df = ak.futures_zh_spot(symbol='V2205', market=\"CF\", adjust='0')\nprint(futures_zh_spot_df)\n```\n\n数据示例-单品种获取\n\n```\n    symbol    time    open  ...  avg_price  last_close  last_settle_price\n0  PVC2205  151039  8280.0  ...     8449.0      8423.0             8397.0\n```\n\n接口示例-多品种获取\n\n```python\nimport akshare as ak\n\n# 此处的合约需要是近期的合约, 否则会报错\nfutures_zh_spot_df = ak.futures_zh_spot(symbol='V2205, P2205, B2201, M2205', market=\"CF\", adjust='0')\nprint(futures_zh_spot_df)\n```\n\n数据示例-多品种获取\n\n```\n    symbol    time    open  ...  avg_price  last_close  last_settle_price\n0  PVC2205  151039  8280.0  ...     8449.0      8423.0             8397.0\n1  棕榈油2205  151039  7690.0  ...     7844.0      7926.0             7848.0\n2   豆二2201  151039  4165.0  ...     4193.0      4203.0             4203.0\n3   豆粕2205  151039  3151.0  ...     3164.0      3153.0             3159.0\n```\n\n接口示例-订阅所有商品期货(大商所, 上期所, 郑商所主力合约)\n\n```python\nimport time\nimport akshare as ak\n\ndce_text = ak.match_main_contract(symbol=\"dce\")\nczce_text = ak.match_main_contract(symbol=\"czce\")\nshfe_text = ak.match_main_contract(symbol=\"shfe\")\ngfex_text = ak.match_main_contract(symbol=\"gfex\")\n\nwhile True:\n    time.sleep(3)\n    futures_zh_spot_df = ak.futures_zh_spot(\n        symbol=\",\".join([dce_text, czce_text, shfe_text, gfex_text]),\n        market=\"CF\",\n        adjust='0')\n    print(futures_zh_spot_df)\n```\n\n数据示例-商品期货\n\n```\n        symbol    time       open  ...  avg_price  last_close  last_settle_price\n0     PVC2309  150118    5994.00  ...    6009.00     6025.00            6006.00\n1     棕榈油2309  150118    6850.00  ...    6842.00     6846.00            6960.00\n2      豆二2306  150118    3926.00  ...    3976.00     3999.00            3979.00\n3      豆粕2309  150118    3441.00  ...    3478.00     3497.00            3457.00\n4     铁矿石2309  150919     712.00  ...     715.00      714.00             721.00\n5      鸡蛋2309  150118    4216.00  ...    4194.00     4187.00            4216.00\n6      塑料2309  150118    8050.00  ...    8046.00     8039.00            8124.00\n7     聚丙烯2309  150118    7415.00  ...    7427.00     7424.00            7471.00\n8     纤维板2305  150118    1146.50  ...    1144.00     1158.00            1158.00\n9      豆油2309  150118    7452.00  ...    7470.00     7468.00            7558.00\n10     玉米2307  150919    2660.00  ...    2643.00     2644.00            2673.00\n11     豆一2307  150118    4849.00  ...    4822.00     4837.00            4878.00\n12     焦炭2309  150118    2160.00  ...    2147.00     2149.00            2194.50\n13     焦煤2309  150118    1408.00  ...    1384.50     1385.00            1439.50\n14     淀粉2307  150118    2983.00  ...    2964.00     2973.00            2993.00\n15    乙二醇2309  150118    4156.00  ...    4172.00     4162.00            4197.00\n16     粳米2307  150118    3432.00  ...    3427.00     3419.00            3438.00\n17    苯乙烯2306  150118    8230.00  ...    8240.00     8251.00            8285.00\n18     生猪2307  150118   16375.00  ...   16480.00    16520.00           16300.00\n19    PTA2309  145959    5586.00  ...    5590.00     5620.00            5640.00\n20     菜油2309  145959    8041.00  ...    8078.00     8047.00            8108.00\n21     菜籽2311  145944    5536.00  ...    5470.00     5503.00            5476.00\n22     菜粕2309  145959    2920.00  ...    2964.00     2998.00            2928.00\n26     白糖2307  145959    7007.00  ...    6981.00     7035.00            6903.00\n27     棉花2309  145959   15285.00  ...   15370.00    15485.00           15275.00\n28     甲醇2309  145959    2332.00  ...    2337.00     2334.00            2375.00\n29     玻璃2309  145959    1753.00  ...    1763.00     1793.00            1779.00\n30     硅铁2306  145959    7340.00  ...    7312.00     7314.00            7350.00\n31     锰硅2306  145959    7150.00  ...    7150.00     7170.00            6976.00\n32     棉纱2309  145959   22380.00  ...   22565.00    22625.00           22455.00\n33     苹果2310  145959    8546.00  ...    8573.00     8622.00            8513.00\n34     红枣2309  145959   10225.00  ...   10490.00    10645.00           10255.00\n35     尿素2309  145959    1989.00  ...    1997.00     1994.00            1989.00\n36     纯碱2309  145959    2141.00  ...    2120.00     2094.00            2147.00\n37     短纤2306  145959    7304.00  ...    7318.00     7364.00            7382.00\n38     花生2310  145959   10510.00  ...   10612.00    10680.00           10526.00\n39    燃料油2309  150000    2944.00  ...    2950.00     2973.00            3000.00\n40   上海原油2306  150000     525.90  ...     528.00      531.70             540.70\n41      铝2306  150000   18415.00  ...   18440.00    18470.00           18570.00\n42   天然橡胶2309  150000   11750.00  ...   11765.00    11770.00           11850.00\n43     沪锌2306  150000   21075.00  ...   21200.00    21280.00           21230.00\n44      铜2306  150000   66400.00  ...   66900.00    67410.00           66770.00\n45     黄金2306  150000     444.18  ...     444.06      444.04             446.94\n46    螺纹钢2310  150000    3691.00  ...    3683.00     3660.00            3728.00\n47     线材2305  150000    4380.00  ...    4524.00     4476.00            4487.00\n48      铅2306  150000   15280.00  ...   15255.00    15255.00           15285.00\n49     白银2306  150000    5611.00  ...    5587.00     5619.00            5629.00\n50     沥青2307  150000    3654.00  ...    3679.00     3699.00            3696.00\n51   热轧卷板2310  150000    3730.00  ...    3738.00     3721.00            3781.00\n52      锡2306  150000  207010.00  ...  209320.00   212380.00          208140.00\n53      镍2306  150000  179960.00  ...  182090.00   182320.00          179980.00\n54     纸浆2309  150000    5096.00  ...    5076.00     5058.00            5126.00\n55   20号胶2307  150000    9535.00  ...    9600.00     9620.00            9655.00\n56    不锈钢2306  150000   15160.00  ...   15225.00    15300.00           15155.00\n57  低硫燃料油2308  150000    3777.00  ...    3821.00     3840.00            3825.00\n58    国际铜2307  150000   58760.00  ...   59150.00    59660.00           59100.00\n59    工业硅2308  150015   15170.00  ...   15165.00    15190.00           15290.00\n```\n\n接口示例-订阅所有金融期货(中金所主力合约)\n\n```python\nimport time\nimport akshare as ak\n\ncffex_text = ak.match_main_contract(symbol=\"cffex\")\n\nwhile True:\n    time.sleep(3)\n    futures_zh_spot_df = ak.futures_zh_spot(symbol=cffex_text, market=\"FF\", adjust='0')\n    print(futures_zh_spot_df)\n```\n\n数据示例-金融期货\n\n```\n        symbol      time      open      high       low current_price  \\\n0  沪深300指数1912  15:00:00  3902.800  3915.000  3871.200      3879.000\n1    5年期国债1912  15:15:00    99.680    99.715    99.590        99.700\n2   上证50指数1912  15:00:00  2972.800  2977.600  2948.800      2957.200\n3  中证500指数1912  15:00:00  4841.200  4885.000  4800.800      4820.400\n         hold volume         amount\n0   93225.000  71712  279062965.600\n1   18853.000   9786     975248.030\n2   41928.000  25164   74617285.400\n3  113365.000  73086  353463074.600\n```\n\n#### 内盘-实时行情数据(品种)\n\n接口: futures_zh_realtime\n\n目标地址: https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_1\n\n描述: 新浪财经-期货实时行情数据\n\n限量: 单次返回指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                        |\n|--------|-----|-----------------------------------------------------------|\n| symbol | str | symbol=\"白糖\", 品种名称；可以通过 ak.futures_symbol_mark() 获取所有品种命名表 |\n\n输出参数\n\n| 名称             | 类型      | 描述     |\n|----------------|---------|--------|\n| symbol         | object  | 合约代码   |\n| exchange       | object  | 交易所    |\n| name           | object  | 合约中文名称 |\n| trade          | float64 | 最新价    |\n| settlement     | float64 | 动态结算   |\n| presettlement  | float64 | 昨日结算   |\n| open           | float64 | 今开     |\n| high           | float64 | 最高     |\n| low            | float64 | 最低     |\n| close          | float64 | 收盘     |\n| bidprice1      | float64 | 买入     |\n| askprice1      | float64 | 卖出     |\n| bidvol1        | int64   | 买量     |\n| askvol1        | int64   | 卖量     |\n| volume         | int64   | 成交量    |\n| position       | int64   | 持仓量    |\n| ticktime       | object  | 时间     |\n| tradedate      | object  | 日期     |\n| preclose       | float64 | 前收盘价   |\n| changepercent  | float64 | 涨跌幅    |\n| bid            | float64 | -      |\n| ask            | float64 | -      |\n| prevsettlement | float64 | 前结算价   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_zh_realtime_df = ak.futures_zh_realtime(symbol=\"白糖\")\nprint(futures_zh_realtime_df)\n```\n\n数据示例\n\n```\n   symbol exchange    name   trade  ...  changepercent  bid  ask  prevsettlement\n0     SR0     czce    白糖连续  6090.0  ...       0.004122  0.0  0.0          6065.0\n1  SR2209     czce  白糖2209  6090.0  ...       0.004122  0.0  0.0          6065.0\n2  SR2211     czce  白糖2211  6121.0  ...       0.004595  0.0  0.0          6093.0\n3  SR2301     czce  白糖2301  6229.0  ...       0.003544  0.0  0.0          6207.0\n4  SR2207     czce  白糖2207  6041.0  ...       0.003155  0.0  0.0          6022.0\n5  SR2303     czce  白糖2303  6200.0  ...       0.000484  0.0  0.0          6197.0\n6  SR2305     czce  白糖2305  6208.0  ...       0.000806  0.0  0.0          6203.0\n```\n\n接口示例-所有期货品种的所有合约（请注意数据获取频率）\n\n```python\nimport akshare as ak\nimport pandas as pd\n\nfutures_symbol_mark_df = ak.futures_symbol_mark()\n\nbig_df = pd.DataFrame()\nfor item in futures_symbol_mark_df['symbol']:\n    print(item)\n    futures_zh_realtime_df = ak.futures_zh_realtime(symbol=item)\n    big_df = pd.concat([big_df, futures_zh_realtime_df], ignore_index=True)\n\nprint(big_df)\n```\n\n数据示例-所有期货品种的所有合约\n\n```\n     symbol exchange           name  ...  bid  ask  prevsettlement\n0       TA0     czce          PTA连续  ...  0.0  0.0         6744.00\n1    TA2209     czce        PTA2209  ...  0.0  0.0         6744.00\n2    TA2208     czce        PTA2208  ...  0.0  0.0         6816.00\n3    TA2301     czce        PTA2301  ...  0.0  0.0         6424.00\n4    TA2210     czce          PTA连续  ...  0.0  0.0         6654.00\n..      ...      ...            ...  ...  ...  ...             ...\n565  IC2207    cffex  中证500指数期货2207  ...  0.0  0.0         5904.20\n566     TS0    cffex      2年期国债期货连续  ...  0.0  0.0          101.04\n567  TS2209    cffex    2年期国债期货2209  ...  0.0  0.0          101.04\n568  TS2206    cffex    2年期国债期货2206  ...  0.0  0.0          101.28\n569  TS2212    cffex    2年期国债期货2212  ...  0.0  0.0          100.92\n```\n\n#### 内盘-分时行情数据\n\n接口: futures_zh_minute_sina\n\n目标地址: http://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_3\n\n描述: 新浪财经-期货-分时数据\n\n限量: 单次返回指定 symbol 和 period 的分时数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                              |\n|--------|-----|-------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"IF2008\"; 具体合约(期货品种符号需要大写), 可以通过调用 ak.match_main_contract(symbol=\"cffex\") 接口获取, 或者访问网页获取 |\n| period | str | period=\"1\"; choice of {\"1\": \"1分钟\", \"5\": \"5分钟\", \"15\": \"15分钟\", \"30\": \"30分钟\", \"60\": \"60分钟\"}        |\n\n输出参数\n\n| 名称       | 类型      | 描述  |\n|----------|---------|-----|\n| datetime | object  | -   |\n| open     | float64 | -   |\n| high     | float64 | -   |\n| low      | float64 | -   |\n| close    | float64 | -   |\n| volume   | int64   | -   |\n| hold     | int64   | 持仓量 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_zh_minute_sina_df = ak.futures_zh_minute_sina(symbol=\"RB0\", period=\"1\")\nprint(futures_zh_minute_sina_df)\n```\n\n数据示例\n\n```\n                 datetime    open    high     low   close  volume     hold\n0     2025-01-14 21:13:00  3278.0  3280.0  3278.0  3279.0    3485  1739947\n1     2025-01-14 21:14:00  3279.0  3279.0  3277.0  3278.0    5880  1741617\n2     2025-01-14 21:15:00  3278.0  3278.0  3276.0  3276.0    4947  1740980\n3     2025-01-14 21:16:00  3276.0  3277.0  3276.0  3277.0    3766  1741117\n4     2025-01-14 21:17:00  3277.0  3278.0  3276.0  3278.0    3606  1741199\n...                   ...     ...     ...     ...     ...     ...      ...\n1018  2025-01-17 14:56:00  3373.0  3373.0  3371.0  3372.0    4021  1816948\n1019  2025-01-17 14:57:00  3371.0  3374.0  3371.0  3374.0    8199  1816486\n1020  2025-01-17 14:58:00  3373.0  3374.0  3372.0  3373.0    7900  1816404\n1021  2025-01-17 14:59:00  3373.0  3374.0  3371.0  3372.0   13951  1813334\n1022  2025-01-17 15:00:00  3371.0  3373.0  3371.0  3372.0   13335  1809583\n[1023 rows x 7 columns]\n```\n\n#### 内盘-历史行情数据-东财\n\n接口: futures_hist_em\n\n目标地址: https://qhweb.eastmoney.com/quote\n\n描述: 东方财富网-期货行情-行情数据；其中 weekly, monthly 获取的成交额和持仓量未经验证\n\n限量: 单次返回指定 symbol 的所有数据; 只能获取当期合约;\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                 |\n|------------|-----|--------------------------------------------------------------------|\n| symbol     | str | symbol=\"热卷主连\"; 具体合约可以通过 ak.futures_hist_table_em() 获取所有当期能获取数据的合约表 |\n| period     | str | period=\"daily\"; choice of {\"daily\", \"weekly\", \"monthly\"}           |\n| start_date | str | start_date=\"19900101\";                                             |\n| end_date   | str | end_date=\"20500101\";                                               |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 时间  | object  | -       |\n| 开盘  | int64   | -       |\n| 最高  | int64   | -       |\n| 最低  | int64   | -       |\n| 收盘  | int64   | -       |\n| 涨跌  | int64   | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 成交量 | int64   | -       |\n| 成交额 | int64   | -       |\n| 持仓量 | int64   | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_hist_em_df = ak.futures_hist_em(symbol=\"热卷主连\", period=\"daily\")\nprint(futures_hist_em_df)\n```\n\n数据示例\n\n```\n          时间    开盘    最高    最低  ...   涨跌幅     成交量   成交额   持仓量\n0     2014-03-21  3252  3336  3230  ...  0.00   93739            0    26015\n1     2014-03-24  3314  3330  3266  ...  0.18   43405            0    23808\n2     2014-03-25  3326  3400  3320  ...  1.44   59927            0    30628\n3     2014-03-26  3370  3382  3354  ... -0.06   18938            0    30280\n4     2014-03-27  3368  3386  3350  ... -0.41   20115            0    30715\n...          ...   ...   ...   ...  ...   ...     ...          ...      ...\n2636  2025-01-13  3316  3365  3313  ...  1.45  507472  16973149696  1170370\n2637  2025-01-14  3357  3416  3348  ...  1.94  510296  17280815616  1167989\n2638  2025-01-15  3400  3428  3391  ...  0.92  415364  14167324160  1158782\n2639  2025-01-16  3415  3450  3411  ...  1.09  465334  15972707584  1157046\n2640  2025-01-17  3447  3488  3436  ...  1.52  471470  16326870760  1196880\n[2641 rows x 10 columns]\n```\n\n#### 内盘-历史行情数据-新浪\n\n接口: futures_zh_daily_sina\n\n目标地址: https://finance.sina.com.cn/futures/quotes/V2105.shtml\n\n描述: 新浪财经-期货-日频数据\n\n限量: 单次返回指定 symbol 的所有日频数据; 期货连续合约为 品种代码+0，比如螺纹钢连续合约为 RB0;\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                    |\n|--------|-----|-----------------------------------------------------------------------|\n| symbol | str | symbol=\"RB0\"; 具体合约可以通过 ak.match_main_contract(symbol=\"shfe\") 获取或者访问网页 |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| date   | object  | -   |\n| open   | float64 | 开盘价 |\n| high   | float64 | 最高价 |\n| low    | float64 | 最低价 |\n| close  | float64 | 收盘价 |\n| volume | int64   | 成交量 |\n| hold   | int64   | 持仓量 |\n| settle | float64 | 结算价 |\n\n接口示例-连续\n\n```python\nimport akshare as ak\n\nfutures_zh_daily_sina_df = ak.futures_zh_daily_sina(symbol=\"RB0\")\nprint(futures_zh_daily_sina_df)\n```\n\n数据示例-连续\n\n```\n            date    open    high     low   close   volume     hold  settle\n0     2009-03-27  3550.0  3663.0  3513.0  3561.0   354590    45548     0.0\n1     2009-03-30  3550.0  3580.0  3528.0  3544.0   145168    48380     0.0\n2     2009-03-31  3538.0  3566.0  3531.0  3549.0    70592    44714     0.0\n3     2009-04-01  3560.0  3561.0  3543.0  3547.0    28100    42076     0.0\n4     2009-04-02  3545.0  3548.0  3456.0  3473.0   235446    68888     0.0\n          ...     ...     ...     ...     ...      ...      ...     ...\n3644  2024-03-28  3470.0  3504.0  3441.0  3481.0  2312398  1433991  3473.0\n3645  2024-03-29  3475.0  3486.0  3405.0  3412.0  2015960  1299182  3448.0\n3646  2024-04-01  3400.0  3456.0  3368.0  3456.0  1622273  1141786  3405.0\n3647  2024-04-02  3459.0  3493.0  3431.0  3463.0  1217107  1026768  3463.0\n3648  2024-04-03  3500.0  3540.0  3462.0  3463.0  1620584  1674662  3509.0\n[3649 rows x 8 columns]\n```\n\n接口示例-合约\n\n```python\nimport akshare as ak\n\nfutures_zh_daily_sina_df = ak.futures_zh_daily_sina(symbol=\"RB2410\")\nprint(futures_zh_daily_sina_df)\n```\n\n数据示例-合约\n\n```\n           date    open    high     low   close   volume     hold  settle\n0    2023-10-17  3600.0  3650.0  3600.0  3631.0     1140      893  3631.0\n1    2023-10-18  3636.0  3636.0  3593.0  3602.0     1050     1642  3615.0\n2    2023-10-19  3612.0  3633.0  3590.0  3623.0      818     2070  3608.0\n3    2023-10-20  3630.0  3638.0  3580.0  3588.0     1554     3088  3606.0\n4    2023-10-23  3580.0  3595.0  3555.0  3568.0     2058     4175  3570.0\n..          ...     ...     ...     ...     ...      ...      ...     ...\n110  2024-03-28  3487.0  3535.0  3461.0  3509.0   799059  1302305  3493.0\n111  2024-03-29  3505.0  3507.0  3443.0  3450.0   837570  1488697  3475.0\n112  2024-04-01  3439.0  3497.0  3408.0  3492.0  1404806  1569587  3445.0\n113  2024-04-02  3498.0  3546.0  3482.0  3506.0  1694801  1651838  3512.0\n114  2024-04-03  3500.0  3540.0  3462.0  3463.0  1620584  1674662  3509.0\n[115 rows x 8 columns]\n```\n\n#### 内盘-历史行情数据-交易所\n\n接口: get_futures_daily\n\n目标地址: 各交易所网站\n\n描述: 提供各交易所各品种的网站的历史行情数据, 其中 20040625, 20070604, 20081226, 20090119 原网页数据缺失\n\n限量: 单次返回指定时间段指定交易所的所有期货品种历史数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                      |\n|------------|-----|-------------------------------------------------------------------------|\n| start_date | str | start_date=\"20200701\"                                                   |\n| end_date   | str | end_date=\"20200716\"                                                     |\n| market     | str | market=\"DCE\"; choice of {\"CFFEX\", \"INE\", \"CZCE\", \"DCE\", \"SHFE\", \"GFEX\"} |\n\n输出参数\n\n| 名称            | 类型    | 描述   |\n|---------------|-------|------|\n| symbol        | str   | 合约   |\n| date          | str   | 交易日  |\n| open          | float | 开盘价  |\n| high          | float | 最高价  |\n| low           | float | 最低价  |\n| close         | str   | 收盘价  |\n| volume        | str   | 成交量  |\n| open_interest | str   | 持仓量  |\n| turnover      | float | 成交额  |\n| settle        | float | 结算价  |\n| pre_settle    | float | 前结算价 |\n| variety       | str   | 品种   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nget_futures_daily_df = ak.get_futures_daily(start_date=\"20200701\", end_date=\"20200716\", market=\"DCE\")\nprint(get_futures_daily_df)\n```\n\n数据示例\n\n```\n     symbol      date     open  ...   settle pre_settle variety\n0     A2007  20200701     6160  ...     6122       5643       A\n1     A2009  20200701     4871  ...     4874       4839       A\n2     A2011  20200701     4480  ...     4424       4411       A\n3     A2101  20200701     4402  ...     4385       4395       A\n4     A2103  20200701     4422  ...     4394       4412       A\n     ...       ...      ...  ...      ...        ...     ...\n2749   PG99  20200716  3899.35  ...  3881.69    3879.72      PG\n2750    P99  20200716   5257.2  ...  5269.32    5212.02       P\n2751    L99  20200716  7213.86  ...  7156.44    7220.27       L\n2752    M99  20200716  2858.98  ...  2862.43    2855.63       M\n2753   JM99  20200716  1193.58  ...  1195.49    1197.92      JM\n```\n\n#### 内盘-结算参数数据\n\n接口: futures_settle\n\n目标地址: 各交易所网站\n\n描述: 提供各交易所的结算参数数据，包括保证金、手续费、涨跌停板等参数\n\n限量: 单次返回指定日期指定交易所的结算参数数据；暂不支持 DCE\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                 |\n|--------|-----|--------------------------------------------------------------------|\n| date   | str | date=\"20250117\"; 结算参数日期，默认为当前交易日                                   |\n| market | str | market=\"CFFEX\"; choice of {\"CFFEX\", \"INE\", \"CZCE\", \"SHFE\", \"GFEX\"} |\n\n输出参数\n\n| 名称                       | 类型      | 描述       |\n|--------------------------|---------|----------|\n| date                     | str     | 结算日期     |\n| symbol                   | str     | 合约代码     |\n| variety                  | str     | 品种代码     |\n| settle_price             | float64 | 结算价      |\n| long_margin_ratio        | object  | 多头保证金率   |\n| short_margin_ratio       | object  | 空头保证金率   |\n| spec_long_margin_ratio   | float64 | 投机多头保证金率 |\n| spec_short_margin_ratio  | float64 | 投机空头保证金率 |\n| hedge_long_margin_ratio  | float64 | 套保多头保证金率 |\n| hedge_short_margin_ratio | float64 | 套保空头保证金率 |\n| trade_fee_ratio          | float64 | 交易手续费率   |\n| close_today_fee_ratio    | float64 | 平今手续费率   |\n| delivery_fee_ratio       | object  | 交割手续费率   |\n| is_single_market         | object  | 是否单边市    |\n| single_market_days       | object  | 连续单边市天数  |\n| limit_ratio              | object  | 涨跌停板幅度   |\n| position_limit           | object  | 持仓限额     |\n| trade_limit              | object  | 交易限额     |\n| rise_limit_rate          | object  | 涨停板比例    |\n| fall_limit_rate          | object  | 跌停板比例    |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_settle_df = ak.futures_settle(date=\"20260119\", market=\"INE\")\nprint(futures_settle_df)\n```\n\n数据示例\n\n```\n        date  symbol variety  ...  trade_limit rise_limit_rate fall_limit_rate\n0   20260119  sc2602      sc  ...         None            None            None\n1   20260119  sc2603      sc  ...         None            None            None\n2   20260119  sc2604      sc  ...         None            None            None\n3   20260119  sc2605      sc  ...         None            None            None\n4   20260119  sc2606      sc  ...         None            None            None\n..       ...     ...     ...  ...          ...             ...             ...\n57  20260119  ec2604      ec  ...         None            None            None\n58  20260119  ec2606      ec  ...         None            None            None\n59  20260119  ec2608      ec  ...         None            None            None\n60  20260119  ec2610      ec  ...         None            None            None\n61  20260119  ec2612      ec  ...         None            None            None\n[62 rows x 20 columns]\n```\n\n#### 外盘-品种代码表\n\n接口: futures_hq_subscribe_exchange_symbol\n\n目标地址: https://finance.sina.com.cn/money/future/hf.html\n\n描述: 新浪财经-外盘商品期货品种代码表数据\n\n限量: 单次返回当前交易日的订阅的所有期货品种的品种代码表数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| symbol | object | -   |\n| code   | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_hq_subscribe_exchange_symbol_df = ak.futures_hq_subscribe_exchange_symbol()\nprint(futures_hq_subscribe_exchange_symbol_df)\n```\n\n数据示例\n\n```\n      symbol  code\n0   NYBOT-棉花    CT\n1    LME镍3个月   NID\n2    LME铅3个月   PBD\n3    LME锡3个月   SND\n4    LME锌3个月   ZSD\n5    LME铝3个月   AHD\n6    LME铜3个月   CAD\n7    CBOT-黄豆     S\n8    CBOT-小麦     W\n9    CBOT-玉米     C\n10  CBOT-黄豆油    BO\n11  CBOT-黄豆粉    SM\n12      日本橡胶   TRB\n13    COMEX铜    HG\n14  NYMEX天然气    NG\n15   NYMEX原油    CL\n16   COMEX白银    SI\n17   COMEX黄金    GC\n18   CME-瘦肉猪   LHC\n19     布伦特原油   OIL\n20       伦敦金   XAU\n21       伦敦银   XAG\n22      伦敦铂金   XPT\n23      伦敦钯金   XPD\n24       马棕油  FCPO\n25     欧洲碳排放   EUA\n```\n\n#### 外盘-实时行情数据\n\n接口: futures_foreign_commodity_realtime\n\n目标地址: https://finance.sina.com.cn/money/future/hf.html\n\n描述: 新浪财经-外盘商品期货数据\n\n限量: 单次返回当前交易日的订阅的所有期货品种的数据\n\n输入参数\n\n| 名称     | 类型          | 描述                                                                     |\n|--------|-------------|------------------------------------------------------------------------|\n| symbol | list or str | 需要订阅的合约代码; 调用 **ak.futures_hq_subscribe_exchange_symbol()** 获取字段及代码对应表 |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| 名称    | object  | -   |\n| 最新价   | float64 | -   |\n| 人民币报价 | float64 | -   |\n| 涨跌额   | float64 | -   |\n| 涨跌幅   | float64 | -   |\n| 开盘价   | float64 | -   |\n| 最高价   | float64 | -   |\n| 最低价   | float64 | -   |\n| 昨日结算价 | float64 | -   |\n| 持仓量   | float64 | -   |\n| 买价    | float64 | -   |\n| 卖价    | float64 | -   |\n| 行情时间  | object  | -   |\n| 日期    | object  | -   |\n\n接口示例-传入字符串\n\n```python\nimport akshare as ak\n\nfutures_foreign_commodity_realtime_df = ak.futures_foreign_commodity_realtime(symbol='CT,NID')\nprint(futures_foreign_commodity_realtime_df)\n```\n\n数据示例-传入字符串\n\n```\n         名称      最新价          人民币报价  ...        卖价      行情时间          日期\n0  NYBOT-棉花     81.1   12953.138327  ...     81.13  16:13:34  2024-05-24\n1   LME镍3个月  20256.0  146748.643200  ...  20265.00  16:13:08  2024-05-24\n[2 rows x 14 columns]\n```\n\n接口示例-传入列表\n\n```python\nimport time\nimport akshare as ak\n\nprint(\"开始接收实时行情, 每 3 秒刷新一次\")\nsubscribe_list = ak.futures_foreign_commodity_subscribe_exchange_symbol()  # 其中 subscribe_list 为列表\nwhile True:\n    time.sleep(3)\n    futures_foreign_commodity_realtime_df = ak.futures_foreign_commodity_realtime(symbol=subscribe_list)\n    print(futures_foreign_commodity_realtime_df)\n```\n\n数据示例-传入列表\n\n```\n          名称       最新价    人民币报价  ...         卖价      行情时间       日期\n0     新加坡铁矿石    100.955  7.159729e+00  ...    101.000  05:05:00  2024-08-31\n1        马棕油   3980.500  9.075850e+02  ...   3979.000  18:00:00  2024-08-30\n2        日橡胶    374.790  2.658011e+04  ...    375.000  18:00:46  2024-08-30\n3       美国原糖     19.424  1.377550e+00  ...     19.440  01:00:00  2024-08-31\n4   CME比特币期货  61300.500  2.173716e+06  ...  61285.000  12:55:15  2024-08-23\n5   NYBOT-棉花     69.975  1.094071e+04  ...     69.960  02:19:58  2024-08-31\n6    LME镍3个月  16700.000  1.184364e+05  ...  16755.000  01:59:52  2024-08-31\n7    LME铅3个月   2067.950  1.466590e+04  ...   2068.000  01:59:02  2024-08-31\n8    LME锡3个月  32457.000  2.301850e+05  ...  32440.000  01:47:38  2024-08-31\n9    LME锌3个月   2897.150  2.054659e+04  ...   2899.000  01:59:00  2024-08-31\n10   LME铝3个月   2445.450  1.734313e+04  ...   2448.000  01:59:54  2024-08-31\n11   LME铜3个月   9248.850  6.559284e+04  ...   9254.000  01:59:48  2024-08-31\n12   CBOT-黄豆    999.875  2.605537e+03  ...    999.250  02:19:59  2024-08-31\n13   CBOT-小麦    552.150  1.438827e+03  ...    552.250  02:19:56  2024-08-31\n14   CBOT-玉米    401.525  1.121056e+03  ...    401.500  02:20:00  2024-08-31\n15  CBOT-黄豆油     41.855  6.544098e+03  ...     41.900  02:20:00  2024-08-31\n16  CBOT-黄豆粉    312.300  2.441852e+03  ...    312.600  02:20:00  2024-08-31\n18    COMEX铜    421.755  6.594209e+04  ...    422.000  04:59:55  2024-08-31\n19  NYMEX天然气      2.148  1.523362e+01  ...      2.146  04:59:58  2024-08-31\n20   NYMEX原油     73.621  3.811477e+03  ...     73.660  04:59:59  2024-08-31\n21   COMEX白银     29.229  2.072921e+02  ...     29.250  04:59:55  2024-08-31\n22   COMEX黄金   2535.060  5.780135e+02  ...   2536.000  04:59:58  2024-08-31\n23   CME-瘦肉猪     82.218  5.830901e+02  ...     82.250  02:04:59  2024-08-31\n24     布伦特原油     77.015  3.987190e+03  ...     77.060  05:58:53  2024-08-31\n25       伦敦金   2503.290  5.707696e+02  ...   2503.670  04:55:00  2024-08-31\n26       伦敦银     28.830  6.573465e+00  ...     28.880  04:55:00  2024-08-31\n27      伦敦铂金    930.960  2.122661e+02  ...    931.400  04:59:56  2024-08-31\n28      伦敦钯金    961.400  2.192067e+02  ...    962.500  04:58:04  2024-08-31\n29     欧洲碳排放     70.185  4.977520e+02  ...     70.260  00:00:00  2024-08-31\n[29 rows x 14 columns]\n```\n\n#### 外盘-实时行情数据-东财\n\n接口: futures_global_spot_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#futures_global\n\n描述: 东方财富网-行情中心-期货市场-国际期货-实时行情数据\n\n限量: 单次返回所有期货品种的实时行情数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 序号  | int64   | -       |\n| 代码  | object  | -       |\n| 名称  | object  | -       |\n| 最新价 | float64 | -       |\n| 涨跌额 | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 今开  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 昨结  | float64 | -       |\n| 成交量 | int64   | -       |\n| 买盘  | int64   | -       |\n| 卖盘  | int64   | -       |\n| 持仓量 | int64   | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_global_spot_em_df = ak.futures_global_spot_em()\nprint(futures_global_spot_em_df)\n```\n\n数据示例\n\n```\n     序号  代码           名称        最新价  ...   成交量  买盘  卖盘    持仓量\n0      1   NG00Y          天然气      3.252  ...  15662  8269  7393  305016\n1      2   NG25F      天然气2501      3.252  ...  15662  8269  7393  305016\n2      3  JRU24Z      日橡胶2412    380.000  ...      3     3     0      69\n3      4    LNKT        综合镍03  16100.000  ...      0     0     0       0\n4      5  JRU25G      日橡胶2502    376.000  ...     11    11     0     495\n..   ...     ...          ...        ...  ...    ...   ...   ...     ...\n615  616    M25G      天然气2502    119.310  ...    815   495   320   47830\n616  617  MPM25K      棕榈油2505   4570.000  ...    859   621   238   20731\n617  618  MPM25X      棕榈油2511   4235.000  ...      3     3     0    3189\n618  619   GC25Z  COMEX黄金2512   2756.200  ...     25     8    17    8537\n619  620   SB26K     糖11号2605     18.470  ...   2742  1289  1453   29289\n[620 rows x 14 columns]\n```\n\n#### 外盘-历史行情数据-东财\n\n接口: futures_global_hist_em\n\n目标地址: https://quote.eastmoney.com/globalfuture/HG25J.html\n\n描述: 东方财富网-行情中心-期货市场-国际期货-历史行情数据\n\n限量: 单次返回指定品种的历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                        |\n|--------|-----|---------------------------------------------------------------------------|\n| symbol | str | symbol=\"HG00Y\"; 品种代码；可以通过 ak.futures_global_spot_em() 来获取所有可获取历史行情数据的品种代码 |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 日期  | object  | -       |\n| 代码  | object  | -       |\n| 名称  | object  | -       |\n| 开盘  | float64 | -       |\n| 最新价 | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 总量  | int64   | -       |\n| 涨幅  | float64 | 注意单位: % |\n| 持仓  | object  | -       |\n| 日增  | int64   | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_global_hist_em_df = ak.futures_global_hist_em(symbol=\"HG00Y\")\nprint(futures_global_hist_em_df)\n```\n\n数据示例\n\n```\n         日期     代码      名称     开盘  ...     总量    涨幅      持仓      日增\n0     2011-07-15  HG00Y  COMEX铜  4.3740  ...      1  0.00       0           0\n1     2011-07-21  HG00Y  COMEX铜  4.4330  ...      2  1.35       0           0\n2     2011-07-29  HG00Y  COMEX铜  4.4580  ...    114  1.04       0           0\n3     2011-08-03  HG00Y  COMEX铜  4.3600  ...    167 -3.42       0           0\n4     2011-08-12  HG00Y  COMEX铜  4.0240  ...      6 -7.49       0           0\n...          ...    ...     ...     ...  ...    ...   ...     ...         ...\n3480  2025-02-27  HG00Y  COMEX铜  4.5835  ...  50367  0.17  122084        1306\n3481  2025-02-28  HG00Y  COMEX铜  4.5955  ...  42115 -1.19  123553        1469\n3482  2025-03-03  HG00Y  COMEX铜  4.5765  ...  48192  0.93  122627  4294966370\n3483  2025-03-04  HG00Y  COMEX铜  4.5880  ...  47016 -0.56  122610  4294967279\n3484  2025-03-05  HG00Y  COMEX铜  4.5800  ...  57782  5.25  123815        1205\n[3485 rows x 11 columns]\n```\n\n#### 外盘-历史行情数据-新浪\n\n接口: futures_foreign_hist\n\n目标地址: https://finance.sina.com.cn/futuremarket/\n\n描述: 新浪财经-期货外盘历史行情数据\n\n限量: 单次返回指定品种的历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                           |\n|--------|-----|------------------------------------------------------------------------------|\n| symbol | str | symbol=\"ZSD\"; 外盘期货的 **symbol** 可以通过 **ak.hf_subscribe_exchange_symbol()** 获取 |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| date   | object  | 交易日 |\n| open   | float64 | 开盘价 |\n| high   | float64 | 最高价 |\n| low    | float64 | 最低价 |\n| close  | float64 | 收盘价 |\n| volume | int64   | 成交量 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_foreign_hist_df = ak.futures_foreign_hist(symbol=\"ZSD\")\nprint(futures_foreign_hist_df)\n```\n\n数据示例\n\n```\n           date     open    high      low   close  volume  position  s\n0    2014-01-20  2082.00  2086.0  2068.75  2076.5    1159         0  0\n1    2014-01-21  2077.75  2092.5  2061.25  2089.0    1318         0  0\n2    2014-01-22  2088.75  2102.0  2077.50  2084.0    1754         0  0\n3    2014-01-23  2083.75  2084.0  2041.25  2045.5    2639         0  0\n4    2014-01-24  2043.75  2051.0  2019.25  2025.0    2264         0  0\n         ...      ...     ...      ...     ...     ...       ... ..\n2541 2024-01-15  2510.00  2615.0  2506.50  2555.0    9364         0  0\n2542 2024-01-16  2555.00  2567.0  2531.00  2548.5    6719         0  0\n2543 2024-01-17  2548.00  2550.0  2460.00  2466.0   11555         0  0\n2544 2024-01-18  2474.00  2478.5  2443.00  2466.0   10442         0  0\n2545 2024-01-19  2469.50  2485.0  2454.00  2456.5    7236         0  0\n[2546 rows x 8 columns]\n```\n\n#### 外盘-合约详情\n\n接口: futures_foreign_detail\n\n目标地址: https://finance.sina.com.cn/futuremarket/\n\n描述: 新浪财经-期货外盘期货合约详情\n\n限量: 单次返回指定品种的合约详情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                      |\n|--------|-----|-------------------------------------------------------------------------|\n| symbol | str | symbol=\"ZSD\"; 外盘期货的 **symbol** 可以通过 **hf_subscribe_exchange_symbol** 获取 |\n\n输出参数\n\n| 名称      | 类型  | 描述  |\n|---------|-----|-----|\n| 交易品种    | str | -   |\n| 最小变动价位\t | str | -   |\n| 交易时间\t   | str | -   |\n| 交易代码\t   | str | -   |\n| 交易单位\t   | str | -   |\n| 涨跌停板幅度\t | str | -   |\n| 交割品级\t\t  | str | -   |\n| 上市交易所\t\t | str | -   |\n| 报价单位\t\t  | str | -   |\n| 合约交割月份  | str | -   |\n| 交割地点    | str | -   |\n| 附加信息    | str | -   |\n\n接口示例\n\n```python\nimport akshare as ak\nfutures_foreign_detail_df = ak.futures_foreign_detail(symbol=\"ZSD\")\nprint(futures_foreign_detail_df)\n```\n\n数据示例\n\n```\n        0                               1  ...       4                       5\n0    交易品种                伦敦锌(CFD差价合约并非期货)  ...    报价单位                    美元/吨\n1  最小变动价位       电话交易：0.5美元/吨 电子盘：0.25美元/吨  ...  合约交割月份  LME三个月期货合约是连续合约，每日都有交割\n2    交易时间  LME Select北京时间（夏令时）08:00-02:00  ...    交割地点                     NaN\n3    交易代码                             ZSD  ...    附加信息                     NaN\n```\n\n#### 新加坡交易所期货\n\n接口: futures_settlement_price_sgx\n\n目标地址: https://www.sgx.com/zh-hans/research-education/derivatives\n\n描述: 新加坡交易所-衍生品-历史数据-历史结算价格; 数据于下个工作日新加坡时间下午 2 点起提供\n\n限量: 单次获取指定交易日前一日的所有期货品种的结算价数据; 只能获取过去 60 个交易日内的数据; 由于国内网络限制, 请使用代理访问\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20231107\"; 交易日 |\n\n输出参数\n\n| 名称     | 类型      | 描述     |\n|--------|---------|--------|\n| DATE   | int64   | 日期     |\n| COM    | object  | 品种代码   |\n| COM_MM | int64   | 品种到期月份 |\n| COM_YY | int64   | 品种年份   |\n| OPEN   | float64 | 开盘价    |\n| HIGH   | float64 | 最高价    |\n| LOW    | float64 | 最低价    |\n| CLOSE  | float64 | 收盘价    |\n| SETTLE | float64 | 结算价    |\n| VOLUME | int64   | 交易量    |\n| OINT   | int64   | 未平仓合约  |\n| SERIES | object  | 合约代码   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_settlement_price_sgx_df = ak.futures_settlement_price_sgx(date=\"20231108\")\nprint(futures_settlement_price_sgx_df)\n```\n\n数据示例\n\n```\n          DATE    COM  COM_MM  COM_YY  ...  SETTLE  VOLUME  OINT   SERIES\n0     20231107  1MF        11    2023  ...  465.34       0     0   1MFX23\n1     20231107  1MF        12    2023  ...  462.13       0     0   1MFZ23\n2     20231107  1MF         1    2024  ...  457.05       0     0   1MFF24\n3     20231107  1MF         2    2024  ...  453.97       0     0   1MFG24\n4     20231107  1MF         3    2024  ...  452.39       0     0   1MFH24\n        ...    ...     ...     ...  ...     ...     ...   ...      ...\n3165  20231107  ZYES       12    2023  ...   16.95       0     0  ZYESZ23\n3166  20231107  ZYES        1    2024  ...   17.05       0     0  ZYESF24\n3167  20231107  ZZEE       11    2023  ...  263.45     584    90  ZZEEX23\n3168  20231107  ZZEE       12    2023  ...  264.80       0     0  ZZEEZ23\n3169  20231107  ZZEE        1    2024  ...  266.25       0     0  ZZEEF24\n[3170 rows x 12 columns]\n```\n\n### 期货连续合约\n\n接口: futures_main_sina\n\n目标地址: https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_0\n\n描述: 新浪财经-期货-主力连续合约历史数据\n\n限量: 单次返回单个期货品种的主力连续合约的日频历史数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                            |\n|------------|-----|-------------------------------------------------------------------------------|\n| symbol     | str | symbol=\"IF0\"; 请参考 **新浪连续合约品种一览表**, 也可通过 **ak.futures_display_main_sina()** 获取 |\n| start_date | str | start_date=\"19900101\";                                                        |\n| end_date   | str | end_date=\"22220101\";                                                          |\n\n新浪连续合约品种一览表\n\n| index | symbol | exchange | name        |\n|------:|:-------|:---------|:------------|\n|     0 | V0     | dce      | PVC连续       |\n|     1 | P0     | dce      | 棕榈油连续       |\n|     2 | B0     | dce      | 豆二连续        |\n|     3 | M0     | dce      | 豆粕连续        |\n|     4 | I0     | dce      | 铁矿石连续       |\n|     5 | JD0    | dce      | 鸡蛋连续        |\n|     6 | L0     | dce      | 塑料连续        |\n|     7 | PP0    | dce      | 聚丙烯连续       |\n|     8 | FB0    | dce      | 纤维板连续       |\n|     9 | BB0    | dce      | 胶合板连续       |\n|    10 | Y0     | dce      | 豆油连续        |\n|    11 | C0     | dce      | 玉米连续        |\n|    12 | A0     | dce      | 豆一连续        |\n|    13 | J0     | dce      | 焦炭连续        |\n|    14 | JM0    | dce      | 焦煤连续        |\n|    15 | CS0    | dce      | 淀粉连续        |\n|    16 | EG0    | dce      | 乙二醇连续       |\n|    17 | RR0    | dce      | 粳米连续        |\n|    18 | EB0    | dce      | 苯乙烯连续       |\n|    19 | LH0    | dce      | 生猪连续        |\n|    20 | TA0    | czce     | PTA连续       |\n|    21 | OI0    | czce     | 菜油连续        |\n|    22 | RS0    | czce     | 菜籽连续        |\n|    23 | RM0    | czce     | 菜粕连续        |\n|    24 | ZC0    | czce     | 动力煤连续       |\n|    25 | WH0    | czce     | 强麦连续        |\n|    26 | JR0    | czce     | 粳稻连续        |\n|    27 | SR0    | czce     | 白糖连续        |\n|    28 | CF0    | czce     | 棉花连续        |\n|    29 | RI0    | czce     | 早籼稻连续       |\n|    30 | MA0    | czce     | 甲醇连续        |\n|    31 | FG0    | czce     | 玻璃连续        |\n|    32 | LR0    | czce     | 晚籼稻连续       |\n|    33 | SF0    | czce     | 硅铁连续        |\n|    34 | SM0    | czce     | 锰硅连续        |\n|    35 | CY0    | czce     | 棉纱连续        |\n|    36 | AP0    | czce     | 苹果连续        |\n|    37 | CJ0    | czce     | 红枣连续        |\n|    38 | UR0    | czce     | 尿素连续        |\n|    39 | SA0    | czce     | 纯碱连续        |\n|    40 | PF0    | czce     | 短纤连续        |\n|    41 | PK0    | czce     | 花生连续        |\n|    42 | FU0    | shfe     | 燃料油连续       |\n|    43 | SC0    | ine      | 上海原油连续      |\n|    44 | AL0    | shfe     | 铝连续         |\n|    45 | RU0    | shfe     | 天然橡胶连续      |\n|    46 | ZN0    | shfe     | 沪锌连续        |\n|    47 | CU0    | shfe     | 铜连续         |\n|    48 | AU0    | shfe     | 黄金连续        |\n|    49 | RB0    | shfe     | 螺纹钢连续       |\n|    50 | WR0    | shfe     | 线材连续        |\n|    51 | PB0    | shfe     | 铅连续         |\n|    52 | AG0    | shfe     | 白银连续        |\n|    53 | BU0    | shfe     | 沥青连续        |\n|    54 | HC0    | shfe     | 热轧卷板连续      |\n|    55 | SN0    | shfe     | 锡连续         |\n|    56 | NI0    | shfe     | 镍连续         |\n|    57 | SP0    | shfe     | 纸浆连续        |\n|    58 | NR0    | ine      | 20号胶连续      |\n|    59 | SS0    | shfe     | 不锈钢连续       |\n|    60 | LU0    | ine      | 低硫燃料油连续     |\n|    61 | BC0    | ine      | 国际铜连续       |\n|    62 | IF0    | cffex    | 沪深300指数期货连续 |\n|    63 | TF0    | cffex    | 5年期国债期货连续   |\n|    64 | IH0    | cffex    | 上证50指数期货连续  |\n|    65 | IC0    | cffex    | 中证500指数期货连续 |\n|    66 | TS0    | cffex    | 2年期国债期货连续   |\n\n输出参数\n\n| 名称    | 类型     | 描述   |\n|-------|--------|------|\n| 日期    | object | -    |\n| 开盘价   | int64  | -    |\n| 最高价   | int64  | -    |\n| 最低价   | int64  | -    |\n| 收盘价   | int64  | -    |\n| 成交量   | int64  | 注意单位 |\n| 持仓量   | int64  | 注意单位 |\n| 动态结算价 | int64  | -    |\n\n接口示例-主力连续合约\n\n```python\nimport akshare as ak\n\nfutures_main_sina_hist = ak.futures_main_sina(symbol=\"V0\", start_date=\"20200101\", end_date=\"20220101\")\nprint(futures_main_sina_hist)\n```\n\n数据示例-主力连续合约\n\n```\n     日期        开盘价  最高价 最低价 收盘价  成交量  持仓量  动态结算价\n0    2020-01-02  6520  6530  6485  6500    54491  230632   6500\n1    2020-01-03  6500  6510  6480  6495    72391  229655   6495\n2    2020-01-06  6495  6590  6480  6545   174761  237376   6535\n3    2020-01-07  6540  6545  6495  6510    86013  230968   6515\n4    2020-01-08  6515  6570  6510  6565   115493  235940   6550\n..          ...   ...   ...   ...   ...      ...     ...    ...\n481  2021-12-27  8500  8605  8233  8239  1162292  322968   8413\n482  2021-12-28  8239  8510  8224  8483   930875  342271   8362\n483  2021-12-29  8500  8520  8413  8484   797016  348914   8468\n484  2021-12-30  8480  8503  8372  8478   924423  351493      0\n485  2021-12-31  8492  8530  8276  8321   987714  320158   8384\n```\n\n接口示例-新浪主力连续合约品种一览表接口\n\n```python\nimport akshare as ak\n\nfutures_display_main_sina_df = ak.futures_display_main_sina()\nprint(futures_display_main_sina_df)\n```\n\n数据示例-新浪主力连续合约品种一览表接口\n\n```\n   symbol    exchange       name\n0      V0      dce        PVC连续\n1      P0      dce        棕榈油连续\n2      B0      dce         豆二连续\n3      M0      dce         豆粕连续\n4      I0      dce        铁矿石连续\n..    ...      ...          ...\n58    IF0    cffex  沪深300指数期货连续\n59    TF0    cffex    5年期国债期货连续\n60    IH0    cffex   上证50指数期货连续\n61    IC0    cffex  中证500指数期货连续\n62    TS0    cffex    2年期国债期货连续\n```\n\n### 期货合约详情-新浪\n\n接口: futures_contract_detail\n\n目标地址: https://finance.sina.com.cn/futures/quotes/V2101.shtml\n\n描述: 新浪财经-期货-期货合约详情数据\n\n限量: 单次返回指定 symbol 的合约详情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                              |\n|--------|-----|---------------------------------------------------------------------------------|\n| symbol | str | symbol='AP2101'; 请参考**新浪连续合约品种一览表**, 也可通过 **ak.futures_display_main_sina()** 获取 |\n\n新浪连续合约品种一览表（更新于 20241226）\n\n|    | symbol | exchange | name        |\n|---:|:-------|:---------|:------------|\n|  0 | V0     | dce      | PVC连续       |\n|  1 | P0     | dce      | 棕榈油连续       |\n|  2 | B0     | dce      | 豆二连续        |\n|  3 | M0     | dce      | 豆粕连续        |\n|  4 | I0     | dce      | 铁矿石连续       |\n|  5 | JD0    | dce      | 鸡蛋连续        |\n|  6 | L0     | dce      | 塑料连续        |\n|  7 | PP0    | dce      | 聚丙烯连续       |\n|  8 | FB0    | dce      | 纤维板连续       |\n|  9 | BB0    | dce      | 胶合板连续       |\n| 10 | Y0     | dce      | 豆油连续        |\n| 11 | C0     | dce      | 玉米连续        |\n| 12 | A0     | dce      | 豆一连续        |\n| 13 | J0     | dce      | 焦炭连续        |\n| 14 | JM0    | dce      | 焦煤连续        |\n| 15 | CS0    | dce      | 淀粉连续        |\n| 16 | EG0    | dce      | 乙二醇连续       |\n| 17 | RR0    | dce      | 粳米连续        |\n| 18 | EB0    | dce      | 苯乙烯连续       |\n| 19 | PG0    | dce      | 液化石油气连续     |\n| 20 | LH0    | dce      | 生猪连续        |\n| 21 | TA0    | czce     | PTA连续       |\n| 22 | OI0    | czce     | 菜油连续        |\n| 23 | RS0    | czce     | 菜籽连续        |\n| 24 | RM0    | czce     | 菜粕连续        |\n| 25 | WH0    | czce     | 强麦连续        |\n| 26 | JR0    | czce     | 粳稻连续        |\n| 27 | SR0    | czce     | 白糖连续        |\n| 28 | CF0    | czce     | 棉花连续        |\n| 29 | RI0    | czce     | 早籼稻连续       |\n| 30 | MA0    | czce     | 甲醇连续        |\n| 31 | FG0    | czce     | 玻璃连续        |\n| 32 | LR0    | czce     | 晚籼稻连续       |\n| 33 | SF0    | czce     | 硅铁连续        |\n| 34 | SM0    | czce     | 锰硅连续        |\n| 35 | CY0    | czce     | 棉纱连续        |\n| 36 | AP0    | czce     | 苹果连续        |\n| 37 | CJ0    | czce     | 红枣连续        |\n| 38 | UR0    | czce     | 尿素连续        |\n| 39 | SA0    | czce     | 纯碱连续        |\n| 40 | PF0    | czce     | 短纤连续        |\n| 41 | PK0    | czce     | 花生连续        |\n| 42 | SH0    | czce     | 烧碱连续        |\n| 43 | PX0    | czce     | 对二甲苯连续      |\n| 44 | FU0    | shfe     | 燃料油连续       |\n| 45 | SC0    | ine      | 上海原油连续      |\n| 46 | AL0    | shfe     | 铝连续         |\n| 47 | RU0    | shfe     | 天然橡胶连续      |\n| 48 | ZN0    | shfe     | 沪锌连续        |\n| 49 | CU0    | shfe     | 铜连续         |\n| 50 | AU0    | shfe     | 黄金连续        |\n| 51 | RB0    | shfe     | 螺纹钢连续       |\n| 52 | WR0    | shfe     | 线材连续        |\n| 53 | PB0    | shfe     | 铅连续         |\n| 54 | AG0    | shfe     | 白银连续        |\n| 55 | BU0    | shfe     | 沥青连续        |\n| 56 | HC0    | shfe     | 热轧卷板连续      |\n| 57 | SN0    | shfe     | 锡连续         |\n| 58 | NI0    | shfe     | 镍连续         |\n| 59 | SP0    | shfe     | 纸浆连续        |\n| 60 | NR0    | ine      | 20号胶连续      |\n| 61 | SS0    | shfe     | 不锈钢连续       |\n| 62 | LU0    | ine      | 低硫燃料油连续     |\n| 63 | BC0    | ine      | 国际铜连续       |\n| 64 | AO0    | shfe     | 氧化铝连续       |\n| 65 | BR0    | shfe     | 丁二烯橡胶连续     |\n| 66 | EC0    | ine      | 集运指数欧线期货连续  |\n| 67 | IF0    | cffex    | 沪深300指数期货连续 |\n| 68 | TF0    | cffex    | 5年期国债期货连续   |\n| 69 | IH0    | cffex    | 上证50指数期货连续  |\n| 70 | IC0    | cffex    | 中证500指数期货连续 |\n| 71 | TS0    | cffex    | 2年期国债期货连续   |\n| 72 | IM0    | cffex    | 中证连续指数期货连续  |\n| 73 | SI0    | gfex     | 工业硅连续       |\n| 74 | LC0    | gfex     | 碳酸锂连续       |\n| 75 | PS0    | gfex     | 多晶硅连续       |\n\n输出参数\n\n| 名称    | 类型     | 描述       |\n|-------|--------|----------|\n| item  | object | 合约具体的项目  |\n| value | object | 合约具体的项目值 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_contract_detail_df = ak.futures_contract_detail(symbol='V2001')\nprint(futures_contract_detail_df)\n```\n\n数据示例\n\n```\n       item                                              value\n0      交易品种                                               聚氯乙烯\n1    最小变动价位                                               5元/吨\n2      交易时间  上午 09:00-10:15 10:30-11:30 下午 13:30-15:00 夜间 2...\n3      交割品级  质量标准符合《悬浮法通用型聚氯乙烯树脂（GB/T 5761-2006）》规定的SG5型一等品...\n4      交割方式                                               实物交割\n5      交易单位                                               5吨/手\n6    涨跌停板幅度                                       上一交易日结算价的±4%\n7     最后交易日                                        合约月份第10个交易日\n8   最低交易保证金                                投机买卖20.0%，套保买卖20.0%\n9      交易代码                                                  V\n10     报价单位                                           元(人民币/吨)\n11   合约交割月份                                            1---12月\n12    最后交割日                                       最后交易日后第3个交易日\n13    交易手续费                                  开平仓2元/手，短线开平仓1元/手\n14    上市交易所                                            大连商品交易所\n```\n\n### 期货合约详情-东财\n\n接口: futures_contract_detail_em\n\n目标地址: https://quote.eastmoney.com/qihuo/v2602F.html\n\n描述: 东方财富-期货-期货合约详情数据\n\n限量: 单次返回指定 symbol 的合约详情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                              |\n|--------|-----|---------------------------------------------------------------------------------|\n| symbol | str | symbol='v2602F'; 请参考东方财富的期货品种标识：https://quote.eastmoney.com/center/futures.html |\n\n输出参数\n\n| 名称    | 类型     | 描述       |\n|-------|--------|----------|\n| item  | object | 合约具体的项目  |\n| value | object | 合约具体的项目值 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_contract_detail_em_df = ak.futures_contract_detail_em(symbol=\"v2603F\")\nprint(futures_contract_detail_em_df)\n```\n\n数据示例\n\n```\n       item                                              value\n0      交易品种                                               聚氯乙烯\n1    最小变动价位                                               5元/吨\n2      交易时间  上午 09:00-10:15 10:30-11:30 下午 13:30-15:00 夜间 2...\n3      交割品级  质量标准符合《悬浮法通用型聚氯乙烯树脂（GB/T 5761-2006）》规定的SG5型一等品...\n4      交割方式                                               实物交割\n5      交易单位                                               5吨/手\n6    涨跌停板幅度                                       上一交易日结算价的±4%\n7     最后交易日                                        合约月份第10个交易日\n8   最低交易保证金                                投机买卖20.0%，套保买卖20.0%\n9      交易代码                                                  V\n10     报价单位                                           元(人民币/吨)\n11   合约交割月份                                            1---12月\n12    最后交割日                                       最后交易日后第3个交易日\n13    交易手续费                                  开平仓1元/手，短线开平仓1元/手\n14    上市交易所                                            大连商品交易所\n```\n\n### 中证商品指数\n\n#### 中证商品指数\n\n接口: futures_index_ccidx\n\n目标地址: http://www.ccidx.com/index.html\n\n描述: 中证商品指数\n\n限量: 单次返回指定 symbol 的指数日频率数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                        |\n|--------|-----|-----------------------------------------------------------|\n| symbol | str | symbol=\"中证商品期货指数\"; choice of {\"中证商品期货指数\", \"中证商品期货价格指数\", } |\n\n输出参数\n\n| 名称   | 类型      | 描述 |\n|------|---------|----|\n| 日期   | object  | -  |\n| 指数代码 | object  | -  |\n| 收盘点位 | float64 | -  |\n| 结算点位 | float64 | -  |\n| 涨跌   | float64 | -  |\n| 涨跌幅  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_index_ccidx_df = ak.futures_index_ccidx(symbol=\"中证商品期货指数\")\nprint(futures_index_ccidx_df)\n```\n\n数据示例\n\n```\n     日期        指数代码      收盘点位  结算点位   涨跌   涨跌幅\n0    2021-02-18  100001.CCI  1421.18  1414.30  45.82  3.35\n1    2021-02-19  100001.CCI  1420.86  1419.17   4.87  0.34\n2    2021-02-22  100001.CCI  1439.96  1437.49  18.32  1.29\n3    2021-02-23  100001.CCI  1447.08  1445.75   8.26  0.57\n4    2021-02-24  100001.CCI  1449.70  1443.34  -2.41 -0.17\n..          ...         ...      ...      ...    ...   ...\n960  2025-02-06  100001.CCI  1965.37  1958.64   3.38  0.17\n961  2025-02-07  100001.CCI  1977.99  1972.23  13.59  0.69\n962  2025-02-10  100001.CCI  1984.26  1979.65   7.42  0.38\n963  2025-02-11  100001.CCI  1981.76  1985.65   6.00  0.30\n964  2025-02-12  100001.CCI  1986.45  1981.82  -3.83 -0.19\n[965 rows x 6 columns]\n```\n\n### 现货与股票\n\n接口: futures_spot_stock\n\n目标地址: https://data.eastmoney.com/ifdata/xhgp.html\n\n描述: 东方财富网-数据中心-现货与股票\n\n限量: 单次返回指定 indicator 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                      |\n|--------|-----|-------------------------------------------------------------------------|\n| symbol | str | symbol=\"能源\"; choice of {'能源', '化工', '塑料', '纺织', '有色', '钢铁', '建材', '农副'} |\n\n输出参数\n\n| 名称     | 类型      | 描述        |\n|--------|---------|-----------|\n| 商品名称   | object  | -         |\n| 近5月    | float64 | 注意: 具体的日期 |\n| 近4月    | float64 | 注意: 具体的日期 |\n| 近3月    | float64 | 注意: 具体的日期 |\n| 近2月    | float64 | 注意: 具体的日期 |\n| 近1月    | float64 | 注意: 具体的日期 |\n| 最新价    | float64 | -         |\n| 近半年涨跌幅 | float64 | 注意单位: %   |\n| 生产商    | object  | 注意: 字符串组成 |\n| 下游用户   | object  | 注意: 字符串组成 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_spot_stock_df = ak.futures_spot_stock(symbol=\"能源\")\nprint(futures_spot_stock_df)\n```\n\n数据示例\n\n```\n  商品名称  ...                                               下游用户\n0   甲醇  ...                                                  -\n1  燃料油  ...                                                  -\n2  炼焦煤  ...                              美锦能源, 长春燃气, 山西焦化, 宝泰隆\n3   沥青  ...                                                  -\n4  液化气  ...                                                  -\n5  动力煤  ...                                                  -\n6   焦炭  ...  沙钢股份, 中信特钢, 抚顺特钢, 三钢闽光, 首钢股份, 华菱钢铁, 鞍钢股份, 包钢股份...\n[7 rows x 10 columns]\n```\n\n### COMEX 库存数据\n\n接口: futures_comex_inventory\n\n目标地址: https://data.eastmoney.com/pmetal/comex/by.html\n\n描述: 东方财富网-数据中心-期货期权-COMEX 库存数据\n\n限量: 单次返回指定 symbol 的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                  |\n|--------|-----|-------------------------------------|\n| symbol | str | symbol=\"黄金\"; choice of {\"黄金\", \"白银\"} |\n\n输出参数\n\n| 名称                  | 类型      | 描述       |\n|---------------------|---------|----------|\n| 序号                  | int64   | -        |\n| 日期                  | object  | -        |\n| COMEX{symbol}库存量-吨  | float64 | 注意单位: 盎司 |\n| COMEX{symbol}库存量-盎司 | float64 | 注意单位: 吨  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_comex_inventory_df = ak.futures_comex_inventory(symbol=\"黄金\")\nprint(futures_comex_inventory_df)\n```\n\n数据示例\n\n```\n     序号      日期  COMEX白银库存量-吨  COMEX白银库存量-盎司\n0        1  2018-11-15    249.638588   8.026061e+06\n1        2  2018-11-16    249.638588   8.026061e+06\n2        3  2018-11-19    249.618620   8.025419e+06\n3        4  2018-11-20    249.318222   8.015761e+06\n4        5  2018-11-21    249.318222   8.015761e+06\n    ...         ...           ...            ...\n1244  1245  2023-11-08    618.567383   1.988739e+07\n1245  1246  2023-11-09    618.564383   1.988729e+07\n1246  1247  2023-11-10    618.462382   1.988401e+07\n1247  1248  2023-11-13    618.461542   1.988399e+07\n1248  1249  2023-11-14    618.461542   1.988399e+07\n[1249 rows x 4 columns]\n```\n\n### 生猪信息\n\n#### 核心数据\n\n接口: futures_hog_core\n\n目标地址: https://zhujia.zhuwang.com.cn\n\n描述: 玄田数据-核心数据\n\n限量: 单次返回指定 symbol 的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                            |\n|--------|-----|-----------------------------------------------|\n| symbol | str | symbol=\"外三元\"; choice of {\"外三元\", \"内三元\", \"土杂猪\"} |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| date  | object  | -  |\n| value | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_hog_core_df = ak.futures_hog_core(symbol=\"外三元\")\nprint(futures_hog_core_df)\n```\n\n数据示例\n\n```\n           date  value\n0    2023-03-18  15.42\n1    2023-03-19  15.46\n2    2023-03-20  15.42\n3    2023-03-21  15.44\n4    2023-03-22  15.25\n..          ...    ...\n362  2024-03-14  14.58\n363  2024-03-15  14.53\n364  2024-03-16  14.54\n365  2024-03-17  14.67\n366  2024-03-18  14.71\n[367 rows x 2 columns]\n```\n\n#### 成本维度\n\n接口: futures_hog_cost\n\n目标地址: https://zhujia.zhuwang.com.cn\n\n描述: 玄田数据-成本维度\n\n限量: 单次返回指定 symbol 的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                    |\n|--------|-----|-------------------------------------------------------|\n| symbol | str | symbol=\"玉米\"; choice of {\"玉米\", \"豆粕\", \"二元母猪价格\", \"仔猪价格\"} |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| date  | object  | -  |\n| value | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_hog_cost_df = ak.futures_hog_cost(symbol=\"玉米\")\nprint(futures_hog_cost_df)\n```\n\n数据示例\n\n```\n           date  value\n0    2023-03-18   2915\n1    2023-03-19   2895\n2    2023-03-20   2874\n3    2023-03-21   2903\n4    2023-03-22   2891\n..          ...    ...\n362  2024-03-14   2474\n363  2024-03-15   2486\n364  2024-03-16   2473\n365  2024-03-17   2471\n366  2024-03-18   2462\n[367 rows x 2 columns]\n```\n\n#### 供应维度\n\n接口: futures_hog_supply\n\n目标地址: https://zhujia.zhuwang.com.cn\n\n描述: 玄田数据-供应维度\n\n限量: 单次返回指定 symbol 的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                          |\n|--------|-----|---------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"玉米\"; choice of {\"猪肉批发价\", \"储备冻猪肉\", \"饲料原料数据\", \"白条肉\", \"生猪产能\", \"育肥猪\", \"肉类价格指数\", \"猪粮比价\"} |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| date  | object  | -  |\n| value | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_hog_supply_df = ak.futures_hog_supply(symbol=\"猪肉批发价\")\nprint(futures_hog_supply_df)\n```\n\n数据示例\n\n```\n          date  value\n0   2023-12-17  20.14\n1   2023-12-18  20.12\n2   2023-12-19  20.24\n3   2023-12-20  20.39\n4   2023-12-21  20.54\n..         ...    ...\n85  2024-03-11  19.89\n86  2024-03-12  19.96\n87  2024-03-13  20.01\n88  2024-03-14  20.12\n89  2024-03-15  20.27\n[90 rows x 2 columns]\n```\n\n### 生猪市场价格指数\n\n接口: index_hog_spot_price\n\n目标地址: https://hqb.nxin.com/pigindex/index.shtml\n\n描述: 行情宝-生猪市场价格指数\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述         |\n|--------|---------|------------|\n| 日期     | object  | -          |\n| 指数     | float64 | -          |\n| 4个月均线  | float64 | -          |\n| 6个月均线  | float64 | -          |\n| 12个月均线 | float64 | -          |\n| 预售均价   | float64 | 注意单位: 元/公斤 |\n| 成交均价   | float64 | 注意单位: 元/公斤 |\n| 成交均重   | int64   | 注意单位: kg   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_hog_spot_price_df = ak.index_hog_spot_price()\nprint(index_hog_spot_price_df)\n```\n\n数据示例\n\n```\n       日期        指数   4个月均线   6个月均线  12个月均线  预售均价   成交均价  成交均重\n0    2015-01-05   92.88     NaN     NaN     NaN   0.00  13.49     0\n1    2015-01-12   92.82     NaN     NaN     NaN   0.00  13.48     0\n2    2015-01-19   93.29     NaN     NaN     NaN   0.00  13.55     0\n3    2015-01-26   93.48     NaN     NaN     NaN   0.00  13.57     0\n4    2015-02-02   92.12     NaN     NaN     NaN   0.00  13.38     0\n..          ...     ...     ...     ...     ...    ...    ...   ...\n460  2024-02-05  107.08  100.72  105.82  103.19  16.06  15.55   116\n461  2024-02-26   95.14   99.63  103.68  103.25  15.64  13.81   122\n462  2024-03-04   96.85   99.31  102.08  103.02  15.60  14.06   120\n463  2024-03-11   98.45   99.10  101.32  102.79  15.69  14.30   122\n464  2024-03-18  100.62   99.07  100.69  102.65  15.76  14.61   125\n[465 rows x 8 columns]\n```\n\n### 期货资讯\n\n接口: futures_news_shmet\n\n目标地址: https://www.shmet.com/newsFlash/newsFlash.html?searchKeyword=\n\n描述: 上海金属网-快讯\n\n限量: 指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                           |\n|--------|-----|----------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"全部\"; choice of {\"全部\", \"要闻\", \"VIP\", \"财经\", \"铜\", \"铝\", \"铅\", \"锌\", \"镍\", \"锡\", \"贵金属\", \"小金属\"} |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| 发布时间 | object | -   |\n| 内容   | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfutures_news_shmet_df = ak.futures_news_shmet(symbol=\"铜\")\nprint(futures_news_shmet_df)\n```\n\n数据示例\n\n```\n                   发布时间                                                 内容\n0   2024-02-05 14:02:44+08:00  【金诚信资源：Lonshi铜矿增储情况】金诚信近日接受机构调研时表示，公司在2022年4月发...\n1   2024-02-05 14:02:44+08:00  【金诚信资源项目进展情况】金诚信近日接受机构调研时表示，公司两岔河磷矿南采区已投产，2023...\n2   2024-02-05 14:02:44+08:00  【金诚信资源：雨季对Dikulushi铜矿和Lonshi铜矿的影响】金诚信近日接受机构调研时...\n3   2024-02-05 14:02:44+08:00  【金诚信：整体来看，铜价存在长期持续震荡上行可能】金诚信近日接受机构调研时表示，从中长期来看...\n4   2024-02-05 14:19:22+08:00  【江苏省雨雪天气或影响该地区铜杆厂生产销售】2月3日11时12分，江苏省气象台变更发布道路结...\n..                        ...                                                ...\n995 2024-03-21 11:39:32+08:00  【中科铜箔2023年铜箔年产量超过34500吨】2023年，湖北中科铜箔的铜箔年产量由原来的...\n996 2024-03-21 11:39:32+08:00  【江西新越年产40万吨电解铜项目环评批准公示】根据建设项目环境影响评价审批程序的有关规定，经...\n997 2024-03-21 11:39:32+08:00  【铜陵有色铜基新材料项目空分制氧项目1号主冷箱顺利封顶】3月16日上午8点18分，随着300...\n998 2024-03-21 11:39:32+08:00  【电工合金：2023年净利润1.36亿元，同比增19.98%】近日，电工合金发布2023年年...\n999 2024-03-21 12:10:40+08:00  【SHMET铜现货报价】上海金属网讯：截止11:30分，上海金属网1#电解铜报72700-7...\n[1000 rows x 2 columns]\n```\n"
  },
  {
    "path": "docs/data/fx/fx.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 外汇数据\n\n### 实时行情数据\n\n接口: forex_spot_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#forex_all\n\n描述: 东方财富网-行情中心-外汇市场-所有汇率-实时行情数据\n\n限量: 单次返回所有实时行情数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 序号  | int64   | -  |\n| 代码  | object  | -  |\n| 名称  | object  | -  |\n| 最新价 | float64 | -  |\n| 涨跌额 | float64 | -  |\n| 涨跌幅 | float64 | -  |\n| 今开  | float64 | -  |\n| 最高  | float64 | -  |\n| 最低  | float64 | -  |\n| 昨收  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nforex_spot_em_df = ak.forex_spot_em()\nprint(forex_spot_em_df)\n```\n\n数据示例\n\n```\n     序号  代码           名称  ...          最高        最低        昨收\n0      1   USDZAR      美元兑南非兰特  ...   17.7123   17.5129   17.5916\n1      2   HKDJPY        港币兑日元  ...   18.3602   18.2621   18.2684\n2      3   USDJPY        美元兑日元  ...  144.1268  143.3220  143.4055\n3      4   CADJPY        加元兑日元  ...  105.5900  105.0575  105.0855\n4      5   CNHJPY     离岸人民币兑日元  ...   20.1081   20.0145   20.0260\n..   ...      ...          ...  ...       ...       ...       ...\n185  186   JPYHKD     100日元兑港币  ...    5.4757    5.4466    5.4739\n186  187   JPYTRY  100日元兑土耳其里拉  ...   27.7972   27.6140   27.7796\n187  188  CNYZARC   人民币南非兰特中间价  ...    2.4602    2.4602    2.4773\n188  189   ZARUSD      南非兰特兑美元  ...    0.0569    0.0565    0.0569\n189  190   HUFUSD     匈牙利福林兑美元  ...    0.0030    0.0029    0.0030\n[190 rows x 10 columns]\n```\n\n### 历史行情数据\n\n接口: forex_hist_em\n\n目标地址: https://quote.eastmoney.com/cnyrate/EURCNYC.html\n\n描述: 东方财富网-行情中心-外汇市场-所有汇率-历史行情数据\n\n限量: 单次返回指定 symbol 的历史行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                |\n|--------|-----|-------------------------------------------------------------------|\n| symbol | str | symbol=\"USDCNH\"; 品种代码；可以通过 ak.forex_spot_em() 来获取所有可获取历史行情数据的品种代码 |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 序号  | int64   | -  |\n| 代码  | object  | -  |\n| 名称  | object  | -  |\n| 最新价 | float64 | -  |\n| 涨跌额 | float64 | -  |\n| 涨跌幅 | float64 | -  |\n| 今开  | float64 | -  |\n| 最高  | float64 | -  |\n| 最低  | float64 | -  |\n| 昨收  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nforex_hist_em_df = ak.forex_hist_em(symbol=\"USDCNH\")\nprint(forex_hist_em_df)\n```\n\n数据示例\n\n```\n         日期      代码        名称      今开     最新价      最高      最低    振幅\n0     2010-08-23  USDCNH  美元兑离岸人民币  6.7200  6.7250  6.7250  6.7200  0.00\n1     2010-08-24  USDCNH  美元兑离岸人民币  6.7230  6.7265  6.7265  6.7230  0.05\n2     2010-08-25  USDCNH  美元兑离岸人民币  6.7325  6.7325  6.7325  6.7325  0.00\n3     2010-08-26  USDCNH  美元兑离岸人民币  6.7500  6.7450  6.7500  6.7450  0.07\n4     2010-08-27  USDCNH  美元兑离岸人民币  6.7530  6.7530  6.7530  6.7530  0.00\n...          ...     ...       ...     ...     ...     ...     ...   ...\n3776  2025-02-28  USDCNH  美元兑离岸人民币  7.3007  7.2954  7.3019  7.2844  0.24\n3777  2025-03-03  USDCNH  美元兑离岸人民币  7.2915  7.3027  7.3069  7.2848  0.30\n3778  2025-03-04  USDCNH  美元兑离岸人民币  7.3028  7.2543  7.3069  7.2488  0.80\n3779  2025-03-05  USDCNH  美元兑离岸人民币  7.2532  7.2362  7.2769  7.2343  0.59\n3780  2025-03-06  USDCNH  美元兑离岸人民币  7.2363  7.2484  7.2485  7.2354  0.18\n[3781 rows x 8 columns]\n```\n\n### 人民币牌价数据\n\n接口: currency_boc_sina\n\n目标地址: https://biz.finance.sina.com.cn/forex/forex.php?startdate=2012-01-01&enddate=2021-06-14&money_code=EUR&type=0\n\n描述: 新浪财经-中行人民币牌价历史数据\n\n限量: 单次返回指定日期的所有历史数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                                                                                                   |\n|------------|-----|------------------------------------------------------------------------------------------------------------------------------------------------------|\n| symbol     | str | symbol=\"美元\"; choice of {'美元', '英镑', '欧元', '澳门元', '泰国铢', '菲律宾比索', '港币', '瑞士法郎', '新加坡元', '瑞典克朗', '丹麦克朗', '挪威克朗', '日元', '加拿大元', '澳大利亚元', '新西兰元', '韩国元'} |\n| start_date | str | start_date=\"20230304\"; 开始日期和结束日期之间的间隔要超过 6 个月                                                                                                        |\n| end_date   | str | end_date=\"20231110\"; 开始日期和结束日期之间的间隔要超过 6 个月                                                                                                          |\n\n输出参数\n\n| 名称        | 类型      | 描述      |\n|-----------|---------|---------|\n| 日期        | object  | -       |\n| 中行汇买价     | float64 | 注意单位: 元 |\n| 中行钞买价     | float64 | 注意单位: 元 |\n| 中行钞卖价/汇卖价 | float64 | 注意单位: 元 |\n| 央行中间价     | float64 | 注意单位: 元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncurrency_boc_sina_df = ak.currency_boc_sina(symbol=\"美元\", start_date=\"20230304\", end_date=\"20231110\")\nprint(currency_boc_sina_df)\n```\n\n数据示例\n\n```\n    日期   中行汇买价   中行钞买价  中行钞卖价/汇卖价   央行中间价\n0    2023-03-06  691.80  686.17     694.73  689.51\n1    2023-03-07  694.49  688.84     697.44  691.56\n2    2023-03-08  693.49  687.85     696.43  695.25\n3    2023-03-09  695.04  689.39     697.99  696.66\n4    2023-03-10  689.70  684.09     692.62  696.55\n..          ...     ...     ...        ...     ...\n175  2023-11-06  725.83  725.67     728.73  717.80\n176  2023-11-07  726.73  726.57     729.63  717.76\n177  2023-11-08  726.73  726.57     729.63  717.73\n178  2023-11-09  727.28  727.12     730.18  717.72\n179  2023-11-10  727.93  727.77     730.83  717.71\n[180 rows x 5 columns]\n```\n\n### 人民币汇率中间价\n\n接口: currency_boc_safe\n\n目标地址: https://www.safe.gov.cn/safe/rmbhlzjj/index.html\n\n描述: 外汇管理局-人民币汇率中间价\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 日期   | object  | -   |\n| 美元   | float64 | -   |\n| 欧元   | float64 | -   |\n| 日元   | float64 | -   |\n| 港元   | float64 | -   |\n| 英镑   | float64 | -   |\n| 林吉特  | float64 | -   |\n| 卢布   | float64 | -   |\n| 澳元   | float64 | -   |\n| 加元   | float64 | -   |\n| 新西兰元 | float64 | -   |\n| 新加坡元 | float64 | -   |\n| 瑞士法郎 | float64 | -   |\n| 兰特   | float64 | -   |\n| 韩元   | float64 | -   |\n| 迪拉姆  | float64 | -   |\n| 里亚尔  | float64 | -   |\n| 福林   | float64 | -   |\n| 兹罗提  | float64 | -   |\n| 丹麦克朗 | float64 | -   |\n| 瑞典克朗 | float64 | -   |\n| 挪威克朗 | float64 | -   |\n| 里拉   | float64 | -   |\n| 比索   | float64 | -   |\n| 泰铢   | float64 | -   |\n\nP.S. 人民币对马来西亚林吉特、俄罗斯卢布、南非兰特、韩元、阿联酋迪拉姆、沙特里亚尔、匈牙利福林、波兰兹罗提、丹麦克朗、瑞典克朗、挪威克朗、土耳其里拉、墨西哥比索、泰铢汇率中间价采取间接标价法，即100人民币折合多少外币。人民币对其它10种货币汇率中间价仍采取直接标价法，即100外币折合多少人民币。\n\n接口示例\n\n```python\nimport akshare as ak\n\ncurrency_boc_safe_df = ak.currency_boc_safe()\nprint(currency_boc_safe_df)\n```\n\n数据示例\n\n```\n       日期        美元      欧元   日元  ...    挪威克朗     里拉      比索    泰铢\n0     1994-01-01  870.00     NaN  7.7800  ...     NaN      NaN     NaN     NaN\n1     1994-01-03  870.00     NaN  7.7800  ...     NaN      NaN     NaN     NaN\n2     1994-01-04  870.00     NaN  7.7196  ...     NaN      NaN     NaN     NaN\n3     1994-01-05  870.00     NaN  7.7196  ...     NaN      NaN     NaN     NaN\n4     1994-01-06  870.00     NaN  7.7196  ...     NaN      NaN     NaN     NaN\n          ...     ...     ...     ...  ...     ...      ...     ...     ...\n7318  2023-09-11  721.48  781.40  4.9710  ...  145.79  368.808  242.47  484.82\n7319  2023-09-12  719.86  779.52  4.9573  ...  146.60  371.740  239.65  487.87\n7320  2023-09-13  718.94  779.19  4.9356  ...  147.20  372.274  238.83  489.51\n7321  2023-09-14  718.74  776.11  4.9174  ...  148.01  372.886  238.35  492.54\n7322  2023-09-15  717.86  768.65  4.9064  ...  148.78  373.622  237.86  493.03\n[7323 rows x 25 columns]\n```\n\n### 人民币外汇即期报价\n\n接口: fx_spot_quote\n\n目标地址: http://www.chinamoney.com.cn/chinese/mkdatapfx/\n\n描述: 人民币外汇即期报价\n\n限量: 单次返回实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n人民币外汇即期报价\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 货币对 | object  |     |\n| 买报价 | float64 |     |\n| 卖报价 | float64 |     |\n\n**注：本行情为询价报价行情(美元为ODM), 实时更新**\n\n接口示例\n```python\nimport akshare as ak\n\nfx_spot_quote_df = ak.fx_spot_quote()\nprint(fx_spot_quote_df)\n```\n\n数据示例\n\n```\n      货币对        买报价        卖报价\n0      USD/CNY    6.68500    6.68540\n1      EUR/CNY    7.08170    7.08260\n2   100JPY/CNY    4.92400    4.92480\n3      HKD/CNY    0.85184    0.85196\n4      GBP/CNY    8.20610    8.20690\n5      AUD/CNY    4.65300    4.65310\n6      NZD/CNY    4.21240    4.21320\n7      SGD/CNY    4.82670    4.82680\n8      CHF/CNY    7.00390    7.00450\n9      CAD/CNY    5.21290    5.21360\n10     CNY/MYR    0.65590    0.65750\n11     CNY/RUB    7.93950    7.98320\n12     CNY/ZAR    2.37330    2.37360\n13     CNY/KRW  192.14000  192.20000\n14     CNY/AED    0.54935    0.54948\n15     CNY/SAR    0.56142    0.56147\n16     CNY/HUF   56.53140   56.57020\n17     CNY/PLN    0.66319    0.66344\n18     CNY/DKK    1.05070    1.05070\n19     CNY/SEK    1.50220    1.50240\n20     CNY/NOK    1.45980    1.46000\n21     CNY/TRY    2.48949    2.48980\n22     CNY/MXN    2.97690    2.97870\n23     CNY/THB    5.24800    5.25000\n```\n\n### 人民币外汇远掉报价\n\n接口: fx_swap_quote\n\n目标地址: http://www.chinamoney.com.cn/chinese/mkdatapfx/\n\n描述: 人民币外汇远掉报价\n\n限量: 单次返回实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n人民币外汇远掉报价\n\n| 名称  | 类型     | 描述                  |\n|-----|--------|---------------------|\n| 货币对 | object | e.g., \"USD/CNY\"     |\n| 1周  | object | e.g., \"11.50/12.00\" |\n| 1月  | object |                     |\n| 3月  | object |                     |\n| 6月  | object |                     |\n| 9月  | object |                     |\n| 1年  | object |                     |\n\n**注：本行情为询价报价行情(美元为ODM), 实时更新**\n\n接口示例\n\n```python\nimport akshare as ak\n\nfx_swap_quote_df = ak.fx_swap_quote()\nprint(fx_swap_quote_df)\n```\n\n数据示例\n\n```\n           货币对        1周  ...                 9月                 1年\n0      USD/CNY      5.00/5.00  ...    -235.00/-233.00    -347.00/-345.00\n1      EUR/CNY    39.17/39.28  ...    1241.70/1242.30    1513.74/1514.19\n2   100JPY/CNY    25.93/26.33  ...    1156.41/1158.04    1604.66/1604.74\n3      HKD/CNY      2.35/2.55  ...          6.88/7.10        -4.88/-4.41\n4      GBP/CNY    15.36/16.28  ...      221.38/222.74      188.33/191.70\n5      AUD/CNY      9.47/9.87  ...    -128.45/-127.09    -254.98/-248.56\n6      NZD/CNY      1.36/1.76  ...    -311.14/-299.26    -435.15/-420.15\n7      SGD/CNY      3.31/3.39  ...        44.03/44.60        72.00/84.97\n8      CHF/CNY    35.23/36.21  ...    1346.89/1347.41    1702.55/1706.77\n9      CAD/CNY      7.86/7.96  ...    -124.21/-122.50    -193.11/-190.60\n10     CNY/MYR     -1.43/0.35  ...       -22.75/-9.30       -21.12/-5.39\n11     CNY/RUB  627.40/627.80  ...  30785.79/32165.82  35730.95/36968.82\n12     CNY/ZAR    12.36/12.37  ...      719.25/726.67     992.29/1007.07\n13     CNY/KRW    -4.63/-0.56  ...     -106.97/-93.21    -125.42/-117.52\n14     CNY/AED    -0.60/-0.50  ...        18.31/18.63        27.90/28.35\n15     CNY/SAR        ---/---  ...        22.03/22.54        32.68/33.00\n16     CNY/HUF  370.56/423.79  ...  26568.04/26596.38  36664.72/36718.42\n17     CNY/PLN      5.37/5.39  ...      264.19/264.92      359.67/361.01\n18     CNY/DKK    -5.70/-5.49  ...    -186.20/-186.08    -229.34/-226.54\n19     CNY/SEK    -5.91/-5.90  ...    -132.23/-131.85    -137.94/-137.43\n20     CNY/NOK    -2.67/-2.64  ...      -43.57/-42.56      -35.65/-33.93\n21     CNY/TRY    53.89/61.57  ...    8321.13/8339.39  11516.20/11550.77\n22     CNY/MXN    -2.84/-2.80  ...      105.61/105.73    2350.95/2393.33\n23     CNY/THB  -68.44/-43.00  ...    -514.60/-436.28    -675.05/-534.00\n```\n\n### 外汇掉期 C-Swap 定盘曲线\n\n接口: fx_c_swap_cm\n\n目标地址: https://www.chinamoney.org.cn/chinese/bkcurvfsw\n\n描述: 中国外汇交易中心暨全国银行间同业拆借中心-基准-外汇市场-外汇掉期曲线-外汇掉期 C-Swap 定盘曲线\n\n限量: 单次返回所有行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称        | 类型      | 描述 |\n|-----------|---------|----|\n| 日期时间      | object  | -  |\n| 期限品种      | object  | -  |\n| 掉期点(Pips) | float64 | -  |\n| 掉期点数据源    | object  |    |\n| 全价汇率      | float64 |    |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfx_c_swap_cm_df = ak.fx_c_swap_cm()\nprint(fx_c_swap_cm_df)\n```\n\n数据示例\n\n```\n         日期时间 期限品种  掉期点(Pips) 掉期点数据源    全价汇率\n0   2025-09-26 16:30:00.0   ON     -15.00   报价数据  7.1374\n1   2025-09-26 16:30:00.0   TN      -4.75   报价数据  7.1359\n2   2025-09-26 16:30:00.0   SN     -16.74   报价数据  7.1337\n3   2025-09-26 16:30:00.0   1W     -16.74   报价数据  7.1337\n4   2025-09-26 16:30:00.0   2W     -41.80   报价数据  7.1312\n5   2025-09-26 16:30:00.0   3W     -76.05   报价数据  7.1278\n6   2025-09-26 16:30:00.0   1M    -122.74   报价数据  7.1231\n7   2025-09-26 16:30:00.0   2M    -239.50   报价数据  7.1115\n8   2025-09-26 16:30:00.0   3M    -373.75   报价数据  7.0980\n9   2025-09-26 16:30:00.0   6M    -706.75   报价数据  7.0647\n10  2025-09-26 16:30:00.0   9M   -1030.50   报价数据  7.0324\n11  2025-09-26 16:30:00.0   1Y   -1337.01   报价数据  7.0017\n```\n\n### 外币对即期报价\n\n接口: fx_pair_quote\n\n目标地址: http://www.chinamoney.com.cn/chinese/mkdatapfx/\n\n描述: 外币对即期报价\n\n限量: 单次返回当前时点最近更新的即时数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述              |\n|-----|---------|-----------------|\n| 货币对 | object  | e.g., \"AUD/USD\" |\n| 买报价 | float64 | e.g., \"0.68460\" |\n| 卖报价 | float64 | e.g., \"0.68461\" |\n\n**注：本行情为询价报价行情(美元为ODM), 实时更新**\n\n接口示例\n\n```python\nimport akshare as ak\n\nfx_pair_quote_df = ak.fx_pair_quote()\nprint(fx_pair_quote_df)\n```\n\n数据示例\n\n```\n        货币对        买报价        卖报价\n0   AUD/USD    0.69594    0.69600\n1   EUR/JPY  143.80300  143.81500\n2   EUR/USD    1.05929    1.05935\n3   GBP/USD    1.22733    1.22739\n4   USD/CAD    1.28238    1.28247\n5   USD/CHF    0.95410    0.95417\n6   USD/HKD    7.84744    7.84755\n7   USD/JPY  135.75500  135.76000\n8   USD/SGD    1.38510    1.38518\n9   NZD/USD    0.63003    0.63012\n10  EUR/GBP    0.86308    0.86308\n```\n\n### 指定币种的所有货币对\n\n接口: currency_pair_map\n\n目标地址: https://cn.investing.com/currencies/cny-jmd\n\n描述: 指定币种的所有能够获取到的货币对信息，历史数据可以调用 **ak.currency_history()** 获取\n\n限量: 单次返回指定币种的所有能获取数据的货币对\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                       |\n|--------|-----|------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"人民币\"; 此处提供中文的币种名称, 可以访问[网页](https://cn.investing.com/currencies/cny-jmd) 的页面下方查看 |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| name | object  | 货币对中文简称 |\n| code | float64 | 货币对代码   |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncurrency_pair_map_df = ak.currency_pair_map(symbol=\"人民币\")\nprint(currency_pair_map_df)\n```\n\n数据示例\n\n```\n         name     code\n0     人民币-丹麦克朗  cny-dkk\n1     丹麦克朗-人民币  dkk-cny\n2     人民币-瑞士法郎  cny-chf\n3     瑞士法郎-人民币  chf-cny\n4     人民币-捷克克朗  cny-czk\n..         ...      ...\n85   人民币-澳大利亚元  cny-aud\n86   澳大利亚元-人民币  aud-cny\n87    人民币-新西兰元  cny-nzd\n88    新西兰元-人民币  nzd-cny\n89  人民币-巴拿马巴波亚  cny-pab\n[90 rows x 2 columns]\n```\n\n### 货币对-投机情绪报告\n\n接口: macro_fx_sentiment\n\n目标地址: https://datacenter.jin10.com/reportType/dc_ssi_trends\n\n描述: 货币对-投机情绪报告\n\n限量: 单次返回指定日期所有品种的数据(所指定的日期必须在当前交易日之前的30个交易日内)\n\n输入参数\n\n| 名称         | 类型  | 描述                                                |\n|------------|-----|---------------------------------------------------|\n| start_date | str | start_date=\"2020-04-07\"; 所指定的日期必须在当前交易日之前的30个交易日内 |\n| end_date   | str | end_date=\"2020-04-07\"; 与 start_date 一致            |\n\n输出参数\n\n| 名称     | 类型      | 描述     |\n|--------|---------|--------|\n| date   | object  | 间隔10分钟 |\n| AUDJPY | float64 | -      |\n| AUDUSD | float64 | -      |\n| EURAUD | float64 | -      |\n| EURJPY | float64 | -      |\n| EURUSD | float64 | -      |\n| GBPJPY | float64 | -      |\n| GBPUSD | float64 | -      |\n| NZDUSD | float64 | -      |\n| USDCAD | float64 | -      |\n| USDCHF | float64 | -      |\n| USDJPY | float64 | -      |\n| USDX   | float64 | -      |\n| XAUUSD | float64 | -      |\n\n接口示例\n\n```python\nimport akshare as ak\nfrom datetime import datetime\n\ntest_date = datetime.now().date().isoformat().replace(\"-\", \"\")\nmacro_fx_sentiment_df = ak.macro_fx_sentiment(start_date=test_date, end_date=test_date)\nprint(macro_fx_sentiment_df)\n```\n\n数据示例\n\n```\n                 date  AUDJPY  AUDUSD  EURAUD  ...  USDCHF  USDJPY   USDX  XAUUSD\n0    2022-10-11 00:00   52.45   72.53   44.73  ...   39.59   33.90  37.00   72.38\n1    2022-10-11 00:10   52.46   72.47   44.85  ...   39.10   33.78  36.49   72.43\n2    2022-10-11 00:20   52.48   72.23   45.37  ...   39.10   33.88  36.48   72.75\n3    2022-10-11 00:30   52.38   72.34   44.71  ...   38.90   33.73  36.34   72.83\n4    2022-10-11 00:40   52.31   72.48   44.44  ...   38.80   33.61  36.23   72.82\n..                ...     ...     ...     ...  ...     ...     ...    ...     ...\n962  2022-10-17 19:30   54.86   68.14   36.53  ...   42.80   30.48  39.77   60.45\n963  2022-10-17 19:40   54.43   67.81   37.01  ...   43.54   30.83  39.82   60.73\n964  2022-10-17 19:50   54.39   68.46   36.92  ...   43.38   30.75  39.72   60.77\n965  2022-10-17 20:00   54.10   68.05   38.01  ...   44.05   30.88  39.49   61.36\n966  2022-10-17 20:10   55.51   67.39   36.80  ...   42.82   30.95  39.78   59.70\n```\n\n### 外汇行情报价\n\n接口: fx_quote_baidu\n\n目标地址: https://gushitong.baidu.com/top/foreign-rmb\n\n描述: 百度股市通-外汇-行情榜单\n\n限量: 单次返回指定 symbol 当前时点的行情报价\n\n输入参数\n\n| 名称     | 类型  | 描述                                   |\n|--------|-----|--------------------------------------|\n| symbol | str | symbol=\"人民币\"; choice of {\"人民币\", 美元\"} |\n\n输出参数\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 代码  | object  | -   |\n| 名称  | object  | -   |\n| 最新价 | float64 | -   |\n| 涨跌额 | float64 | -   |\n| 涨跌幅 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfx_quote_baidu_df = ak.fx_quote_baidu(symbol=\"人民币\")\nprint(fx_quote_baidu_df)\n```\n\n数据示例\n\n```\n         代码         名称       最新价     涨跌额     涨跌幅\n0    CNYSCR      人民币塞舌尔卢比    2.1391  0.2164  0.1126\n1    CNYETH   人民币Ethereum    0.0000  0.0000  0.0217\n2    CNYSBD     人民币所罗门群岛元    1.1711  0.0224  0.0195\n3    CNYTOP       人民币汤加潘加    0.3461  0.0038  0.0111\n4    CNYMDL     人民币摩尔多瓦列伊    2.4150  0.0238  0.0100\n..      ...           ...       ...     ...     ...\n150  CNYXPT       人民币珀价盎司    0.0001 -0.0000 -0.0071\n151  CNYPKR     人民币巴基斯坦卢比   40.1263 -0.3054 -0.0076\n152  CNYMGA  人民币马达加斯加阿里亚里  655.2200 -7.9000 -0.0119\n153  CNYRUB      人民币俄罗斯卢布   11.3331 -0.1375 -0.0120\n154  CNYXAG       人民币银价盎司    0.0018 -0.0000 -0.0151\n[155 rows x 5 columns]\n```\n"
  },
  {
    "path": "docs/data/hf/hf.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 高频数据\n\n### 标普 500 指数\n\n接口: hf_sp_500\n\n目标地址: https://github.com/FutureSharks/financial-data\n\n描述: 获取标普 500 指数的分钟数据, 由于数据量比较大, 需要等待, 由于服务器在国外, 建议使用代理访问\n\n输入参数\n\n| 名称   | 类型  | 描述                                   |\n|------|-----|--------------------------------------|\n| year | str | year=\"2017\"; 只能获取 **2012-2018** 年的数据 |\n\n输出参数\n\n| 名称    | 类型      | 描述   |\n|-------|---------|------|\n| date  | object  | 日期时间 |\n| open  | float64 | 开盘价  |\n| high  | float64 | 最高价  |\n| low   | float64 | 最低价  |\n| close | float64 | 收盘价  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nhf_sp_500_df = ak.hf_sp_500(year=\"2017\")\nprint(hf_sp_500_df)\n```\n\n数据示例\n\n```\n              date     open     high      low    close  price\n0       2017-01-02  2241.00  2244.50  2241.00  2243.50      0\n1       2017-01-02  2243.75  2243.75  2243.00  2243.00      0\n2       2017-01-02  2243.25  2243.25  2243.00  2243.25      0\n3       2017-01-02  2243.00  2243.00  2243.00  2243.00      0\n4       2017-01-02  2243.25  2243.75  2243.25  2243.75      0\n...            ...      ...      ...      ...      ...    ...\n222021  2017-12-29  2669.50  2669.75  2669.25  2669.25      0\n222022  2017-12-29  2669.00  2669.25  2669.00  2669.00      0\n222023  2017-12-29  2668.75  2668.75  2668.00  2668.25      0\n222024  2017-12-29  2667.75  2668.50  2667.75  2668.00      0\n222025  2017-12-29  2668.25  2668.50  2667.75  2668.50      0\n```\n"
  },
  {
    "path": "docs/data/index/index.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 指数数据\n\n### A股股票指数\n\n#### 实时行情数据-东财\n\n接口: stock_zh_index_spot_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#index_sz\n\n描述: 东方财富网-行情中心-沪深京指数\n\n限量: 单次返回所有指数的实时行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                         |\n|--------|-----|----------------------------------------------------------------------------|\n| symbol | str | symbol=\"上证系列指数\"；choice of {\"沪深重要指数\", \"上证系列指数\", \"深证系列指数\", \"指数成份\", \"中证系列指数\"} |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 序号  | int64   | -       |\n| 代码  | object  | -       |\n| 名称  | object  | -       |\n| 最新价 | float64 | -       |\n| 涨跌额 | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 成交量 | float64 | -       |\n| 成交额 | float64 | -       |\n| 振幅  | float64 | 注意单位: % |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 今开  | float64 | -       |\n| 昨收  | float64 | -       |\n| 量比  | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_index_spot_em_df = ak.stock_zh_index_spot_em(symbol=\"上证系列指数\")\nprint(stock_zh_index_spot_em_df)\n```\n\n数据示例\n\n```\n      序号  代码     名称    最新价   涨跌幅   涨跌额  ... 振幅  最高  最低 今开 昨收  量比\n0      1  000116  信用100   183.69  0.01  0.02  ...  0.0 NaN NaN NaN   183.67 NaN\n1      2  000101   5年信用   233.04  0.01  0.02  ...  0.0 NaN NaN NaN   233.02 NaN\n2      3  000022   沪公司债   234.63  0.01  0.02  ...  0.0 NaN NaN NaN   234.61 NaN\n3      4  000061  沪企债30   169.79  0.01  0.01  ...  0.0 NaN NaN NaN   169.78 NaN\n4      5  000012   国债指数   206.03  0.00  0.01  ...  0.0 NaN NaN NaN   206.02 NaN\n..   ...     ...    ...      ...   ...   ...  ...  ...  ..  ..  ..      ...  ..\n174  175  000005   商业指数  2351.11  0.00  0.00  ...  0.0 NaN NaN NaN  2351.11 NaN\n175  176  000004   工业指数  2703.99  0.00  0.00  ...  0.0 NaN NaN NaN  2703.99 NaN\n176  177  000003   Ｂ股指数   234.19  0.00  0.00  ...  0.0 NaN NaN NaN   234.19 NaN\n177  178  000002   Ａ股指数  3111.03  0.00  0.00  ...  0.0 NaN NaN NaN  3111.03 NaN\n178  179  000001   上证指数  2967.25  0.00  0.00  ...  0.0 NaN NaN NaN  2967.25 NaN\n[179 rows x 14 columns]\n```\n\n#### 实时行情数据-新浪\n\n接口: stock_zh_index_spot_sina\n\n目标地址: https://vip.stock.finance.sina.com.cn/mkt/#hs_s\n\n描述: 新浪财经-中国股票指数数据\n\n限量: 单次返回所有指数的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 代码  | object  | -       |\n| 名称  | object  | -       |\n| 最新价 | float64 | -       |\n| 涨跌额 | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 昨收  | float64 | -       |\n| 今开  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 成交量 | float64 | 注意单位: 手 |\n| 成交额 | float64 | 注意单位: 元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_index_spot_sina_df = ak.stock_zh_index_spot_sina()\nprint(stock_zh_index_spot_sina_df)\n```\n\n数据示例\n\n```\n     代码      名称      最新价  ...       最低        成交量           成交额\n0    sh000001  上证指数  2967.2472  ...  2953.2901   285455945  321018391310\n1    sh000002  Ａ股指数  3111.0281  ...  3096.3842   285134140  320788878153\n2    sh000003  Ｂ股指数   234.1943  ...   232.4912      297879     160673330\n3    sh000004  工业指数  2703.9886  ...  2690.2040   168709808  228294788620\n4    sh000005  商业指数  2351.1093  ...  2339.6375    23082870   23470835715\n..        ...   ...        ...  ...        ...         ...           ...\n552  sz980015  疫苗生科  8560.3130  ...  8533.3370   421452161   12430783309\n553  sz980016  公卫健康  6844.2740  ...  6824.8810   572854058   16723915499\n554  sz980028  龙头家电  9330.1080  ...  9296.8940   296504548    7181802948\n555  sz980030  消费电子  4393.0420  ...  4372.5400  1645434624   24770906620\n556  sz980032  新能电池  8862.8690  ...  8791.8960   344385538   13001077515\n[557 rows x 11 columns]\n```\n\n#### 历史行情数据\n\n##### 历史行情数据-新浪\n\n接口: stock_zh_index_daily\n\n目标地址: https://finance.sina.com.cn/realstock/company/sz399552/nc.shtml(示例)\n\n描述: 股票指数的历史数据按日频率更新\n\n限量: 单次返回指定 symbol 的所有历史行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"sz399552\" |\n\n输出参数-历史行情数据\n\n| 名称     | 类型      | 描述                    |\n|--------|---------|-----------------------|\n| date   | object  | 新浪的数据开始时间, 不是该指数的上市时间 |\n| open   | float64 | -                     |\n| high   | float64 | -                     |\n| low    | float64 | -                     |\n| close  | float64 | -                     |\n| volume | int64   | -                     |\n\n接口示例-历史行情数据\n\n```python\nimport akshare as ak\n\nstock_zh_index_daily_df = ak.stock_zh_index_daily(symbol=\"sz399552\")\nprint(stock_zh_index_daily_df)\n```\n\n数据示例-历史行情数据\n\n```\n            date      open      high       low     close       volume\n0     2005-01-04   996.682   996.682   984.795   986.927    232376203\n1     2005-01-05   986.570  1008.855   985.677  1003.633    348610113\n2     2005-01-06  1003.490  1003.490   990.792   994.595    293390559\n3     2005-01-07   993.434  1009.000   990.446   997.606    339162698\n4     2005-01-10   996.928  1006.457   993.123  1006.337    294940533\n          ...       ...       ...       ...       ...          ...\n4566  2023-10-23  5400.543  5400.794  5269.828  5290.334  10308312600\n4567  2023-10-24  5311.669  5363.195  5290.505  5352.012  11474572900\n4568  2023-10-25  5386.425  5423.014  5375.999  5375.999  11492124400\n4569  2023-10-26  5351.163  5404.992  5337.493  5398.934  10248504400\n4570  2023-10-27  5387.274  5514.308  5380.941  5492.027  11254280400\n[4571 rows x 6 columns]\n```\n\n##### 历史行情数据-腾讯\n\n接口: stock_zh_index_daily_tx\n\n目标地址: https://gu.qq.com/sh000919/zs\n\n描述: 股票指数(或者股票)历史行情数据\n\n限量: 单次返回具体某个股票指数(或者股票)的所有历史行情数据\n\n输入参数-历史行情数据\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"sh000919\" |\n\n输出参数-历史行情数据\n\n| 名称     | 类型      | 描述                  |\n|--------|---------|---------------------|\n| date   | object  | 腾讯的数据开始时间, 不是证券上市时间 |\n| open   | float64 | -                   |\n| close  | float64 | -                   |\n| high   | float64 | -                   |\n| low    | float64 | -                   |\n| amount | float64 | 注意单位: 手             |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_index_daily_tx_df = ak.stock_zh_index_daily_tx(symbol=\"sh000919\")\nprint(stock_zh_index_daily_tx_df)\n```\n\n数据示例\n\n```\n            date     open    close     high      low       amount\n0     2005-01-04   993.11   978.14   993.11   976.82   4235501.99\n1     2005-01-05   976.94   981.50   985.52   972.80   3366738.80\n2     2005-01-06   982.37   968.90   982.37   966.52   3137876.84\n3     2005-01-07   968.77   967.72   978.27   963.10   3340483.54\n4     2005-01-10   967.81   977.77   978.15   963.31   2680018.64\n          ...      ...      ...      ...      ...          ...\n4566  2023-10-23  4169.32  4140.72  4177.63  4115.03  51476987.00\n4567  2023-10-24  4146.42  4148.72  4157.80  4119.85  63088387.00\n4568  2023-10-25  4185.97  4158.66  4190.35  4149.74  70715384.00\n4569  2023-10-26  4139.06  4174.96  4177.47  4134.28  54267034.00\n4570  2023-10-27  4159.83  4179.02  4194.93  4146.62  60862014.00\n[4571 rows x 6 columns]\n```\n\n##### 历史行情数据-东方财富\n\n接口: stock_zh_index_daily_em\n\n目标地址: http://quote.eastmoney.com/center/hszs.html\n\n描述: 东方财富股票指数数据, 历史数据按日频率更新\n\n限量: 单次返回具体指数的所有历史行情数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                      |\n|------------|-----|-------------------------------------------------------------------------|\n| symbol     | str | symbol=\"sz399552\"; 支持 sz: 深交所, sh: 上交所, bj: 北交所, csi: 中证指数 + id(000905) |\n| start_date | str | start_date=\"19900101\"                                                   |\n| end_date   | str | end_date=\"20500101\"                                                     |\n\n输出参数\n\n| 名称     | 类型      | 描述                    |\n|--------|---------|-----------------------|\n| date   | object  | 东方财富的数据开始时间, 不是证券上市时间 |\n| open   | float64 | -                     |\n| close  | float64 | -                     |\n| high   | float64 | -                     |\n| low    | float64 | -                     |\n| volume | int64   | -                     |\n| amount | float64 | -                     |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_index_daily_em_df = ak.stock_zh_index_daily_em(symbol=\"sz399812\")\nprint(stock_zh_index_daily_em_df)\n```\n\n数据示例\n\n```\n            date     open    close     high      low    volume        amount\n0     2005-01-04   996.03   989.56   996.03   986.46    675733  4.986503e+08\n1     2005-01-05   989.87  1008.59  1011.29   989.46   1037894  9.068431e+08\n2     2005-01-06  1008.88  1002.81  1008.88   999.76    779152  5.631133e+08\n3     2005-01-07  1002.10  1004.06  1015.61   999.56    898377  7.554397e+08\n4     2005-01-10  1002.63  1014.12  1014.12  1000.90    651187  5.609582e+08\n          ...      ...      ...      ...      ...       ...           ...\n4566  2023-10-23  5659.09  5590.27  5666.15  5563.09   7956295  1.752549e+10\n4567  2023-10-24  5608.75  5692.22  5700.26  5590.94   8032521  1.902381e+10\n4568  2023-10-25  5735.01  5713.71  5751.73  5713.65   8597481  2.057249e+10\n4569  2023-10-26  5694.04  5749.56  5755.59  5684.16   8636096  2.021819e+10\n4570  2023-10-27  5747.77  5952.02  5969.61  5741.26  11493696  3.220613e+10\n[4571 rows x 7 columns]\n```\n\n##### 历史行情数据-通用\n\n接口: index_zh_a_hist\n\n目标地址: http://quote.eastmoney.com/center/hszs.html\n\n描述: 东方财富网-中国股票指数-行情数据\n\n限量: 单次返回具体指数指定 period 从 start_date 到 end_date 的之间的近期数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                       |\n|------------|-----|----------------------------------------------------------|\n| symbol     | str | symbol=\"399282\"; 指数代码，此处不用市场标识                           |\n| period     | str | period=\"daily\"; choice of {'daily', 'weekly', 'monthly'} |\n| start_date | str | start_date=\"19700101\"; 开始日期                              |\n| end_date   | str | end_date=\"22220101\"; 结束时间                                |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 日期  | object  | 交易日     |\n| 开盘  | float64 | 开盘价     |\n| 收盘  | float64 | 收盘价     |\n| 最高  | float64 | 最高价     |\n| 最低  | float64 | 最低价     |\n| 成交量 | int32   | 注意单位: 手 |\n| 成交额 | float64 | 注意单位: 元 |\n| 振幅  | float64 | 注意单位: % |\n| 涨跌幅 | float64 | 注意单位: % |\n| 涨跌额 | float64 | 注意单位: 元 |\n| 换手率 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_zh_a_hist_df = ak.index_zh_a_hist(symbol=\"000016\", period=\"daily\", start_date=\"19700101\", end_date=\"22220101\")\nprint(index_zh_a_hist_df)\n```\n\n数据示例\n\n```\n       日期       开盘       收盘       最高  ...   振幅   涨跌幅 涨跌额   换手率\n0     2004-01-02   997.00  1011.35  1021.57  ...  0.00  0.00   0.00  0.00\n1     2004-01-05  1008.28  1060.80  1060.90  ...  5.20  4.89  49.45  0.00\n2     2004-01-06  1059.14  1075.66  1086.69  ...  2.60  1.40  14.86  0.00\n3     2004-01-07  1075.56  1086.30  1095.84  ...  2.31  0.99  10.64  0.00\n4     2004-01-08  1087.68  1102.66  1108.29  ...  2.37  1.51  16.36  0.00\n          ...      ...      ...      ...  ...   ...   ...    ...   ...\n4400  2022-02-15  3101.36  3119.93  3126.42  ...  0.95  0.51  15.93  0.24\n4401  2022-02-16  3134.88  3136.08  3150.86  ...  0.70  0.52  16.15  0.20\n4402  2022-02-17  3138.77  3139.18  3156.87  ...  0.79  0.10   3.10  0.20\n4403  2022-02-18  3126.28  3162.82  3162.82  ...  1.30  0.75  23.64  0.19\n4404  2022-02-21  3155.32  3144.86  3155.88  ...  0.86 -0.57 -17.96  0.21\n```\n\n#### 分时行情数据\n\n接口: index_zh_a_hist_min_em\n\n目标地址: https://quote.eastmoney.com/center/hszs.html\n\n描述: 东方财富网-指数数据-分时行情\n\n限量: 单次返回具体指数指定 period 从 start_date 到 end_date 的之间的近期数据，该接口不能返回所有历史数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                                |\n|------------|-----|-----------------------------------------------------------------------------------|\n| symbol     | str | symbol=\"399006\"; 指数代码，此处不用市场标识                                                    |\n| period     | str | period=\"1\"; choice of {'1', '5', '15', '30', '60'}, 其中 1 分钟数据只能返回当前的, 其余只能返回近期的数据 |\n| start_date | str | start_date=\"1979-09-01 09:32:00\"; 开始日期时间                                          |\n| end_date   | str | end_date=\"2222-01-01 09:32:00\"; 结束时间时间                                            |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 时间  | object  | 交易日     |\n| 开盘  | float64 | 开盘价     |\n| 收盘  | float64 | 收盘价     |\n| 最高  | float64 | 最高价     |\n| 最低  | float64 | 最低价     |\n| 成交量 | int64   | 注意单位: 手 |\n| 成交额 | float64 | 注意单位: 元 |\n| 均价  | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_zh_a_hist_min_em_df = ak.index_zh_a_hist_min_em(symbol=\"000001\", period=\"1\", start_date=\"2023-12-11 09:30:00\", end_date=\"2023-12-11 19:00:00\")\nprint(index_zh_a_hist_min_em_df)\n```\n\n数据示例\n\n```\n           时间       开盘       收盘  ...       成交量           成交额       均价\n0    2023-12-11 09:30:00  2956.29  2956.29  ...   3198631  3.394971e+09  2957.681\n1    2023-12-11 09:31:00  2955.35  2937.70  ...  12531907  1.227149e+10  2945.626\n2    2023-12-11 09:32:00  2938.36  2935.57  ...   8823405  8.810568e+09  2940.907\n3    2023-12-11 09:33:00  2935.72  2932.00  ...   7235184  7.282885e+09  2940.683\n4    2023-12-11 09:34:00  2932.48  2933.37  ...   5309002  5.608316e+09  2945.141\n..                   ...      ...      ...  ...       ...           ...       ...\n236  2023-12-11 14:56:00  2990.23  2989.94  ...   2032283  2.301672e+09  2999.493\n237  2023-12-11 14:57:00  2989.94  2990.58  ...   2234140  2.480918e+09  3000.265\n238  2023-12-11 14:58:00  2990.73  2990.63  ...    128204  1.482932e+08  3000.532\n239  2023-12-11 14:59:00  2990.63  2990.63  ...         0  0.000000e+00  3000.532\n240  2023-12-11 15:00:00  2990.63  2991.44  ...   3969436  4.319616e+09  3001.557\n[241 rows x 8 columns]\n```\n\n### 港股股票指数\n\n#### 实时行情数据-新浪\n\n接口: stock_hk_index_spot_sina\n\n目标地址: https://vip.stock.finance.sina.com.cn/mkt/#zs_hk\n\n描述: 新浪财经-行情中心-港股指数\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 代码  | object  | -       |\n| 名称  | object  | -       |\n| 最新价 | float64 | -       |\n| 涨跌额 | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 昨收  | float64 | -       |\n| 今开  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_index_spot_sina_df = ak.stock_hk_index_spot_sina()\nprint(stock_hk_index_spot_sina_df)\n```\n\n数据示例\n\n```\n          代码               名称        最新价  ...         今开         最高         最低\n0     CES100     中华港股通精选100指数   3648.330  ...   3702.688   3712.628   3647.700\n1     CES120          中华120指数   5025.017  ...   5086.739   5107.486   5024.949\n2     CES280          中华280指数   5665.616  ...   5717.851   5731.186   5662.476\n3     CES300       中华沪深港300指数   3795.410  ...   3839.315   3850.479   3795.114\n4     CESA80          中华A80指数   6451.657  ...   6513.025   6534.666   6439.589\n5     CESG10          中华博彩业指数   3255.044  ...   3259.564   3282.658   3239.144\n6     CESHKM         中华香港内地指数   4542.094  ...   4610.777   4632.182   4542.094\n7      CSCMC         中证内地消费指数  10182.399  ...  10292.709  10347.834  10165.551\n8    CSHK100        中证香港100指数   1470.354  ...   1492.664   1497.654   1470.354\n9    CSHKDIV       中证香港红利港币指数   2666.181  ...   2696.106   2699.463   2665.965\n10    CSHKLC  中证香港上市可交易内地消费指数    972.576  ...    986.668    991.827    972.160\n11   CSHKLRE  中证香港上市可交易内地地産指数    261.217  ...    271.532    272.671    260.913\n12   CSHKMCS     中证香港中盘精选港币指数   1895.666  ...   1919.041   1921.188   1895.014\n13    CSHKME      中证香港内地股港元指数   1968.482  ...   1999.449   2008.286   1968.482\n14    CSHKPE     中证香港内地民营企业指数   1065.490  ...   1083.291   1089.320   1065.315\n15    CSHKSE     中证香港内地国有企业指数    577.901  ...    586.195    586.576    577.901\n16    CSI300          沪深300指数   3475.839  ...   3505.750   3516.699   3470.061\n17   CSRHK50  中证锐联香港基本面50港币指数   1507.089  ...   1527.417   1529.470   1506.434\n18       GEM        标普香港创业板指数     15.920  ...     16.150     16.170     15.890\n19       HKL        标普香港大型股指数  24092.189  ...  24486.980  24596.560  24092.190\n20     HSCCI       恒生香港中资企业指数   3461.570  ...   3526.840   3526.840   3457.380\n21     HSCEI         恒生中国企业指数   5879.580  ...   5972.800   5997.400   5879.580\n22       HSI             恒生指数  16721.689  ...  16978.700  17031.310  16721.690\n23     HSMBI       恒生中国内地银行指数   2538.970  ...   2572.330   2585.650   2538.570\n24    HSMOGI   恒生中国内地石油及天然气指数   2115.530  ...   2112.430   2125.260   2099.070\n25     HSMPI       恒生中国内地地产指数   1183.130  ...   1224.630   1231.290   1180.770\n26    HSTECH           恒生科技指数   3474.470  ...   3523.710   3549.310   3472.430\n27    SSE180          上证180指数   7619.146  ...   7682.757   7698.929   7607.821\n28  SSE180GV      上证180公司治理指数    898.229  ...    905.148    906.478    896.845\n29    SSE380          上证380指数   5125.197  ...   5147.366   5170.676   5118.144\n30     SSE50           上证50指数   2374.047  ...   2397.284   2402.643   2370.277\n31   SSECEQT       上证大宗商品股票指数   2760.349  ...   2768.583   2779.282   2746.892\n32   SSECOMP           上证综合指数   3019.474  ...   3035.577   3043.560   3014.830\n33    SSEDIV           上证红利指数   3171.188  ...   3171.996   3189.183   3157.513\n34   SSEITOP         上证龙头企业指数   2952.552  ...   2970.302   2976.126   2948.095\n35   SSEMCAP           上证中盘指数   3469.023  ...   3490.601   3498.174   3464.152\n36   SSEMEGA         上证超级大盘指数   1864.488  ...   1882.455   1887.538   1860.408\n37      VHSI           恒指波幅指数     22.400  ...     22.460     22.620     21.870\n[38 rows x 9 columns]\n```\n\n#### 历史行情数据-新浪\n\n接口: stock_hk_index_daily_sina\n\n目标地址: https://stock.finance.sina.com.cn/hkstock/quotes/CES100.html\n\n描述: 新浪财经-港股指数-历史行情数据\n\n限量: 单次返回指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| symbol | str | symbol=\"CES100\" |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| date   | object  | -       |\n| open   | object  | -       |\n| close  | float64 | -       |\n| high   | float64 | -       |\n| low    | float64 | 注意单位: % |\n| volume | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_index_daily_sina_df = ak.stock_hk_index_daily_sina(symbol=\"CES100\")\nprint(stock_hk_index_daily_sina_df)\n```\n\n数据示例\n\n```\n            date      open      high       low     close      volume\n0     2014-12-15  4354.014  4362.220  4331.394  4355.359  1087163017\n1     2014-12-16  4334.295  4347.367  4275.529  4280.410  1303011243\n2     2014-12-17  4278.770  4280.350  4223.895  4227.100  2002919200\n3     2014-12-18  4281.007  4296.184  4264.265  4282.028  1547580777\n4     2014-12-19  4347.982  4354.488  4321.534  4331.438  1515374212\n          ...       ...       ...       ...       ...         ...\n2293  2024-04-08  3645.559  3688.903  3624.238  3654.013  2067842312\n2294  2024-04-09  3678.340  3719.132  3677.429  3686.826  1588737425\n2295  2024-04-10  3706.046  3752.432  3701.602  3741.842  1947224622\n2296  2024-04-11  3678.382  3736.533  3676.288  3725.992  1829890643\n2297  2024-04-12  3702.688  3712.628  3647.700  3648.330  2097570788\n[2298 rows x 6 columns]\n```\n\n#### 实时行情数据-东财\n\n接口: stock_hk_index_spot_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#hk_index\n\n描述: 东方财富网-行情中心-港股-指数实时行情\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型      | 描述       |\n|------|---------|----------|\n| 序号   | int64   | -        |\n| 内部编号 | int64   | -        |\n| 代码   | object  | -        |\n| 名称   | object  | -        |\n| 最新价  | float64 | -        |\n| 涨跌额  | float64 | -        |\n| 涨跌幅  | float64 | 注意单位: %  |\n| 今开   | float64 | -        |\n| 最高   | float64 | -        |\n| 最低   | float64 | -        |\n| 昨收   | float64 | -        |\n| 成交量  | float64 | -        |\n| 成交额  | float64 | 注意单位: 港元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_index_spot_em_df = ak.stock_hk_index_spot_em()\nprint(stock_hk_index_spot_em_df)\n```\n\n数据示例\n\n```\n      序号  内部编号        代码  ...       昨收          成交量           成交额\n0      1   124      HSSH  ...  3193.38          0.0  3.222019e+09\n1      2   124  HSTECF2S  ...  3012.59          0.0           NaN\n2      3   124    HST2SI  ...   669.27          0.0           NaN\n3      4   124    HSCATI  ...  2948.24          0.0  8.038308e+09\n4      5   124    HSCIEN  ...  9125.68  398107136.0  1.974318e+09\n..   ...   ...       ...  ...      ...          ...           ...\n354  355   124    HSCASI  ...  2444.56          0.0  1.127230e+10\n355  356   124    HSSCID  ...  2102.39          0.0  3.358686e+09\n356  357   124    HSSCPB  ...  1477.63          0.0  3.409686e+09\n357  358   124     HSIDI  ...  1879.83          0.0  3.344741e+09\n358  359   125    CESHKB  ...  5000.55          0.0  2.768274e+09\n[359 rows x 13 columns]\n```\n\n#### 历史行情数据-东财\n\n接口: stock_hk_index_daily_em\n\n目标地址: https://quote.eastmoney.com/gb/zsHSTECF2L.html\n\n描述: 东方财富网-港股-股票指数数据\n\n限量: 单次返回指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                     |\n|--------|-----|--------------------------------------------------------|\n| symbol | str | symbol=\"HSTECF2L\"; 可以通过 ak.stock_hk_index_spot_em() 获取 |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| date   | object  | -   |\n| open   | float64 | -   |\n| high   | float64 | -   |\n| low    | float64 | -   |\n| latest | float64 | 最新价 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_index_daily_em_df = ak.stock_hk_index_daily_em(symbol=\"HSTECF2L\")\nprint(stock_zh_index_daily_em_df)\n```\n\n数据示例\n\n```\n           date     open     high      low   latest\n0    2021-04-12  3004.54  3031.66  2864.62  2873.91\n1    2021-04-13  2885.20  2931.77  2781.46  2799.10\n2    2021-04-14  2907.05  2970.43  2887.55  2948.15\n3    2021-04-15  2914.56  2931.71  2785.23  2871.69\n4    2021-04-16  2844.18  2960.53  2840.66  2957.73\n..          ...      ...      ...      ...      ...\n675  2024-01-08   313.48   317.70   295.35   296.93\n676  2024-01-09   300.03   307.01   291.85   292.02\n677  2024-01-10   288.51   296.62   284.45   289.18\n678  2024-01-11   288.87   306.52   288.03   300.63\n679  2024-01-12   296.03   305.46   291.92   294.83\n[680 rows x 5 columns]\n```\n\n### 美股股票指数\n\n#### 指数行情\n\n接口: index_us_stock_sina\n\n目标地址: https://stock.finance.sina.com.cn/usstock/quotes/.IXIC.html\n\n描述: 新浪财经-美股指数行情\n\n输入参数\n\n| 名称     | 类型  | 描述                                                         |\n|--------|-----|------------------------------------------------------------|\n| symbol | str | symbol=\".INX\"; choice of {\".IXIC\", \".DJI\", \".INX\", \".NDX\"} |\n\n输出参数\n\n| 名称     | 类型      | 描述 |\n|--------|---------|----|\n| date   | object  | -  |\n| open   | float64 | -  |\n| high   | float64 | -  |\n| low    | float64 | -  |\n| close  | float64 | -  |\n| volume | int64   | -  |\n| amount | int64   | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_us_stock_sina_df = ak.index_us_stock_sina(symbol=\".INX\")\nprint(index_us_stock_sina_df)\n```\n\n数据示例\n\n```\n          date       open       high  ...      close      volume         amount\n0     2004-01-02  1111.9200  1118.8500  ...  1108.4800  1153200000  1281300000000\n1     2004-01-05  1108.4800  1122.2200  ...  1122.2200  1578200064  1760250000000\n2     2004-01-06  1122.2200  1124.4600  ...  1123.6700  1494499968  1677120000000\n3     2004-01-07  1123.6700  1126.3300  ...  1126.3300  1704899968  1914940000000\n4     2004-01-08  1126.3300  1131.9200  ...  1131.9200  1868400000  2108990000000\n          ...        ...        ...  ...        ...         ...            ...\n4951  2023-08-30  4500.3398  4521.6499  ...  4514.8701  1827645178              0\n4952  2023-08-31  4517.0098  4532.2598  ...  4507.6602  2352361081              0\n4953  2023-09-01  4530.6001  4541.2500  ...  4515.7700  1958155311              0\n4954  2023-09-05  4510.0601  4514.2900  ...  4496.8301  2128341430              0\n4955  2023-09-06  4490.3501  4490.3501  ...  4465.4800  2122160141              0\n[4956 rows x 7 columns]\n```\n\n### 全球指数\n\n#### 全球指数-实时行情数据\n\n接口: index_global_spot_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#global_qtzs\n\n描述: 东方财富网-行情中心-全球指数-实时行情数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称     | 类型      | 描述          |\n|--------|---------|-------------|\n| 序号     | object  | -           |\n| 代码     | object  | -           |\n| 名称     | object  | -           |\n| 最新价    | float64 | -           |\n| 涨跌额    | float64 | -           |\n| 涨跌幅    | float64 | -           |\n| 开盘价    | float64 | -           |\n| 最高价    | float64 | -           |\n| 最低价    | float64 | -           |\n| 昨收价    | float64 | -           |\n| 振幅     | float64 | -           |\n| 最新行情时间 | object  | 注意是指数所在地的时间 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_global_spot_em_df = ak.index_global_spot_em()\nprint(index_global_spot_em_df)\n```\n\n数据示例\n\n```\n    序号     代码          名称  ...        昨收价    振幅          最新行情时间\n0    1       BDI   波罗的海BDI指数  ...    1228.00  0.00  2025-03-06 12:56:29\n1    2       PSI      菲律宾马尼拉  ...    6219.96  1.32  2025-03-07 14:50:43\n2    3     PSI20    葡萄牙PSI20  ...    6690.48  1.25  2025-03-07 18:05:45\n3    4       RTS      俄罗斯RTS  ...    1128.13  1.02  2025-03-07 18:20:38\n4    5       SET       泰国SET  ...    1189.55  1.27  2025-03-07 17:29:50\n5    6    KSE100     巴基斯坦卡拉奇  ...  113713.17  0.40  2025-03-07 15:30:00\n6    7   VNINDEX       越南胡志明  ...    1318.22  0.67  2025-03-07 15:57:49\n7    8     ICEXI      冰岛ICEX  ...    2273.38  0.52  2025-03-07 18:20:16\n8    9     HSCCI        红筹指数  ...    3901.21  2.20  2025-03-07 16:09:00\n9   10      JKSE     印尼雅加达综合  ...    6617.85  1.59  2025-03-07 16:50:00\n10  11     OSEBX     挪威OSEBX  ...    1476.13  0.63  2025-03-07 18:20:47\n11  12       MXX    墨西哥BOLSA  ...   52709.40  1.86  2025-03-07 04:59:59\n12  13       WIG       波兰WIG  ...   93444.96  1.07  2025-03-07 18:05:00\n13  14      BVSP   巴西BOVESPA  ...  123230.18  1.16  2025-03-07 04:30:00\n14  15        PX       布拉格指数  ...    2020.44  0.52  2025-03-07 18:20:09\n15  16       ASE     希腊雅典ASE  ...    1625.54  0.74  2025-03-07 18:05:31\n16  17    SENSEX  印度孟买SENSEX  ...   74340.09  0.72  2025-03-07 17:59:58\n17  18    CSEALL     斯里兰卡科伦坡  ...   16123.10  0.46  2025-03-07 17:00:00\n18  19       AEX       荷兰AEX  ...     910.72  0.36  2025-03-07 18:05:45\n19  20       STI   富时新加坡海峡时报  ...    3917.06  0.80  2025-03-07 17:20:00\n20  21       CRB   路透CRB商品指数  ...     301.47  0.13  2025-03-07 01:00:01\n21  22       BFX      比利时BFX  ...    4463.37  0.46  2025-03-07 18:05:45\n22  23      NZ50       新西兰50  ...   12428.84  0.99  2025-03-07 11:45:34\n23  24    000001        上证指数  ...    3381.10  0.80  2025-03-07 16:11:40\n24  25       AXX     富时AIM全股  ...     692.46  0.54  2025-03-07 18:20:00\n25  26     HSCEI        国企指数  ...    8938.09  2.75  2025-03-07 16:09:00\n26  27    000300       沪深300  ...    3956.24  0.81  2025-03-07 16:11:58\n27  28       MIB    富时意大利MIB  ...   38779.67  0.87  2025-03-07 18:20:54\n28  29      SSMI       瑞士SMI  ...   13029.39  0.82  2025-03-07 18:05:49\n29  30    399005       中小100  ...    6757.01  1.23  2025-03-07 15:34:42\n30  31      IBEX   西班牙IBEX35  ...   13234.20  0.60  2025-03-07 18:05:49\n31  32      KS11     韩国KOSPI  ...    2576.16  1.32  2025-03-07 14:29:59\n32  33    399001        深证成指  ...   10898.75  1.23  2025-03-07 15:34:09\n33  34      FTSE     英国富时100  ...    8682.84  0.64  2025-03-07 18:20:53\n34  35  KOSPI200  韩国KOSPI200  ...     340.31  1.38  2025-03-07 14:29:59\n35  36       UDI        美元指数  ...     104.20  0.67  2025-03-07 18:20:50\n36  37       HSI        恒生指数  ...   24369.71  2.48  2025-03-07 16:09:00\n37  38       HEX      芬兰赫尔辛基  ...   10592.07  0.78  2025-03-07 18:20:17\n38  39      ISEQ       爱尔兰综合  ...   11194.44  1.15  2025-03-07 18:05:45\n39  40      TWII        台湾加权  ...   22715.43  0.90  2025-03-07 13:30:00\n40  41    OMXSPI    瑞典OMXSPI  ...    2733.02  1.07  2025-03-07 18:20:56\n41  42      SX5E     欧洲斯托克50  ...    5520.47  0.87  2025-03-07 18:05:45\n42  43      KLSE  富时马来西亚KLCI  ...    1558.91  0.85  2025-03-07 17:05:00\n43  44       ATX      奥地利ATX  ...    4329.90  1.44  2025-03-07 18:05:48\n44  45      FCHI     法国CAC40  ...    8197.67  1.03  2025-03-07 18:05:45\n45  46       MCX     英国富时250  ...   20159.07  1.05  2025-03-07 18:20:53\n46  47      DJIA         道琼斯  ...   43006.59  1.37  2025-03-07 04:59:44\n47  48    OMXC20   OMX哥本哈根20  ...    2103.36  0.78  2025-03-07 18:20:53\n48  49       TSX  加拿大S&P/TSX  ...   24870.82  1.41  2025-03-07 04:59:46\n49  50     GDAXI     德国DAX30  ...   23419.48  0.94  2025-03-07 18:05:56\n50  51    399006        创业板指  ...    2234.69  1.38  2025-03-07 15:34:36\n51  52      AORD     澳大利亚普通股  ...    8326.40  1.80  2025-03-07 12:59:44\n52  53       SPX       标普500  ...    5842.63  1.72  2025-03-07 04:59:44\n53  54      AS51   澳大利亚标普200  ...    8094.70  1.83  2025-03-07 12:59:44\n54  55      N225       日经225  ...   37704.93  1.08  2025-03-07 14:30:00\n55  56       NDX        纳斯达克  ...   18552.73  2.47  2025-03-07 05:00:00\n[56 rows x 12 columns]\n```\n\n#### 全球指数-历史行情数据-东财\n\n接口: index_global_hist_em\n\n目标地址: https://quote.eastmoney.com/gb/zsUDI.html\n\n描述: 东方财富网-行情中心-全球指数-历史行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                               |\n|--------|-----|--------------------------------------------------|\n| symbol | str | symbol=\"美元指数\"; 可以通过 ak.index_global_spot_em() 获取 |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 日期  | object  | -       |\n| 代码  | object  | -       |\n| 名称  | object  | -       |\n| 今开  | float64 | -       |\n| 最新价 | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 振幅  | float64 | 主要单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_global_hist_em_df = ak.index_global_hist_em(symbol=\"美元指数\")\nprint(index_global_hist_em_df)\n```\n\n数据示例\n\n```\n          日期   代码    名称     今开     最新价   最高     最低    振幅\n0      1986-01-09  UDI  美元指数  124.18  123.21  124.71  122.91  0.00\n1      1986-01-10  UDI  美元指数  123.98  124.16  124.27  123.46  0.66\n2      1986-01-13  UDI  美元指数  124.82  124.47  125.21  124.23  0.79\n3      1986-01-14  UDI  美元指数  124.75  124.67  124.91  124.38  0.43\n4      1986-01-15  UDI  美元指数  124.64  124.30  124.64  124.07  0.46\n...           ...  ...   ...     ...     ...     ...     ...   ...\n10027  2025-03-03  UDI  美元指数  107.38  106.54  107.41  106.42  0.92\n10028  2025-03-04  UDI  美元指数  106.55  105.55  106.66  105.52  1.07\n10029  2025-03-05  UDI  美元指数  105.56  104.32  105.78  104.26  1.44\n10030  2025-03-06  UDI  美元指数  104.34  104.20  104.39  103.74  0.62\n10031  2025-03-07  UDI  美元指数  104.23  103.63  104.25  103.55  0.67\n[10032 rows x 8 columns]\n```\n\n#### 全球指数-历史行情数据-新浪\n\n接口: index_global_hist_sina\n\n目标地址: https://finance.sina.com.cn/stock/globalindex/quotes/UKX\n\n描述: 新浪财经-行情中心-环球市场-历史行情\n\n限量：单次返回最近的 1000 条数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                    |\n|--------|-----|-------------------------------------------------------|\n| symbol | str | symbol=\"瑞士股票指数\"; 可以通过 ak.index_global_name_table() 获取 |\n\n输出参数\n\n| 名称     | 类型      | 描述 |\n|--------|---------|----|\n| date   | object  | -  |\n| open   | object  | -  |\n| high   | object  | -  |\n| low    | float64 | -  |\n| close  | float64 | -  |\n| volume | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_global_hist_sina_df = ak.index_global_hist_sina(symbol=\"瑞士股票指数\")\nprint(index_global_hist_sina_df)\n```\n\n数据示例\n\n```\n           date      open      high       low     close    volume\n0    2021-03-22  10931.56  11048.58  10928.34  11048.58  51627000\n1    2021-03-23  11030.89  11118.33  11016.21  11098.66  48422000\n2    2021-03-24  11048.59  11106.94  11033.37  11063.87  43812000\n3    2021-03-25  11026.65  11102.78  11017.32  11098.81  52086000\n4    2021-03-26  11113.90  11143.86  11091.63  11116.81  46264000\n..          ...       ...       ...       ...       ...       ...\n995  2025-03-03  13032.86  13199.05  12956.84  13166.68  30859832\n996  2025-03-04  13099.49  13146.92  12991.81  13006.74  38551012\n997  2025-03-05  13081.21  13161.90  13066.22  13112.75  38270072\n998  2025-03-06  13090.73  13105.02  12928.22  13056.91  36533732\n999  2025-03-07  12959.80  12965.30  12888.30  12904.70   4468362\n[1000 rows x 6 columns]\n```\n\n### 中国股票指数成份\n\n#### 最新成份\n\n接口: index_stock_cons\n\n目标地址: http://vip.stock.finance.sina.com.cn/corp/view/vII_NewestComponent.php?page=1&indexid=399639\n\n描述: 指定指数的最新成份股票信息, 注意该接口返回的数据有部分是重复会导致数据缺失, 可以调用 **ak.index_stock_cons_sina()** 获取主流指数数据, 或调用**ak.index_stock_cons_csindex()**获取中证指数网提供的成分数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                   |\n|--------|-----|------------------------------------------------------|\n| symbol | str | symbol=\"000300\", 获取沪深 300 最新成份股, 指数代码见 **股票指数信息一览表** |\n\n股票指数信息一览表(可以在 AKShare 中通过如下代码获取本表)\n\n```python\nimport akshare as ak\n\nindex_stock_info_df = ak.index_stock_info()\nprint(index_stock_info_df)\n```\n\n| index\\_code | display\\_name      | publish\\_date |\n|-------------|--------------------|---------------|\n| 000001      | 上证指数               | 1991/7/15     |\n| 000002      | A股指数               | 1992/2/21     |\n| 000003      | B股指数               | 1992/2/21     |\n| 000004      | 工业指数               | 1993/5/3      |\n| 000005      | 商业指数               | 1993/5/3      |\n| 000006      | 地产指数               | 1993/5/3      |\n| 000007      | 公用指数               | 1993/5/3      |\n| 000008      | 综合指数               | 1993/5/3      |\n| 000009      | 上证380              | 2010/11/29    |\n| 000010      | 上证180              | 2002/7/1      |\n| 000011      | 基金指数               | 2000/6/9      |\n| 000012      | 国债指数               | 2003/1/2      |\n| 000013      | 上证企业债指数            | 2003/6/9      |\n| 000015      | 红利指数               | 2005/1/4      |\n| 000016      | 上证50               | 2004/1/2      |\n| 000017      | 新综指                | 2006/1/4      |\n| 000018      | 180金融              | 2007/12/10    |\n| 000019      | 治理指数               | 2008/1/2      |\n| 000020      | 中型综指               | 2008/5/12     |\n| 000021      | 180治理              | 2008/9/10     |\n| 000022      | 上证公司债指数            | 2008/11/19    |\n| 000025      | 180基建              | 2008/12/15    |\n| 000026      | 180资源              | 2008/12/15    |\n| 000027      | 180运输              | 2008/12/15    |\n| 000028      | 180成长              | 2009/1/9      |\n| 000029      | 180价值              | 2009/1/9      |\n| 000030      | 180R成长             | 2009/1/9      |\n| 000031      | 180R价值             | 2009/1/9      |\n| 000032      | 上证能源               | 2009/1/9      |\n| 000033      | 上证材料               | 2009/1/9      |\n| 000034      | 上证工业               | 2009/1/9      |\n| 000035      | 上证可选               | 2009/1/9      |\n| 000036      | 上证消费               | 2009/1/9      |\n| 000037      | 上证医药               | 2009/1/9      |\n| 000038      | 上证金融               | 2009/1/9      |\n| 000039      | 上证信息               | 2009/1/9      |\n| 000040      | 上证电信               | 2009/1/9      |\n| 000041      | 上证公用               | 2009/1/9      |\n| 000042      | 上证央企               | 2009/3/30     |\n| 000043      | 超大盘                | 2009/4/23     |\n| 000044      | 上证中盘               | 2009/7/3      |\n| 000045      | 上证小盘               | 2009/7/3      |\n| 000046      | 上证中小               | 2009/7/3      |\n| 000047      | 上证全指               | 2009/7/3      |\n| 000048      | 责任指数               | 2009/8/5      |\n| 000049      | 上证民企               | 2009/8/25     |\n| 000050      | 50等权               | 2011/1/4      |\n| 000051      | 180等权              | 2011/5/24     |\n| 000052      | 50基本               | 2012/1/9      |\n| 000053      | 180基本              | 2012/1/9      |\n| 000054      | 上证海外               | 2010/1/4      |\n| 000055      | 上证地企               | 2010/1/4      |\n| 000056      | 上证国企               | 2010/1/4      |\n| 000057      | 全指成长               | 2010/1/4      |\n| 000058      | 全指价值               | 2010/1/4      |\n| 000059      | 全R成长               | 2010/1/4      |\n| 000060      | 全R价值               | 2010/1/4      |\n| 000061      | 沪企债30              | 2010/1/4      |\n| 000062      | 上证沪企               | 2010/1/4      |\n| 000063      | 上证周期               | 2010/2/3      |\n| 000064      | 非周期                | 2010/2/3      |\n| 000065      | 上证龙头               | 2010/2/9      |\n| 000066      | 上证商品               | 2010/4/30     |\n| 000067      | 上证新兴               | 2010/4/30     |\n| 000068      | 上证资源               | 2010/5/28     |\n| 000069      | 消费80               | 2010/5/28     |\n| 000070      | 能源等权               | 2010/8/18     |\n| 000071      | 材料等权               | 2010/8/18     |\n| 000072      | 工业等权               | 2010/8/18     |\n| 000073      | 可选等权               | 2010/8/18     |\n| 000074      | 消费等权               | 2010/8/18     |\n| 000075      | 医药等权               | 2010/8/18     |\n| 000076      | 金融等权               | 2010/8/18     |\n| 000077      | 信息等权               | 2010/8/18     |\n| 000078      | 电信等权               | 2010/8/18     |\n| 000079      | 公用等权               | 2010/8/18     |\n| 000090      | 上证流通               | 2010/12/2     |\n| 000091      | 沪财中小               | 2011/4/6      |\n| 000092      | 资源50               | 2011/5/10     |\n| 000093      | 180分层              | 2011/5/24     |\n| 000094      | 上证上游               | 2011/5/10     |\n| 000095      | 上证中游               | 2011/5/10     |\n| 000096      | 上证下游               | 2011/5/10     |\n| 000097      | 高端装备               | 2011/5/24     |\n| 000098      | 上证F200             | 2011/7/1      |\n| 000099      | 上证F300             | 2011/7/1      |\n| 000100      | 上证F500             | 2011/7/1      |\n| 000101      | 5年信用               | 2013/4/1      |\n| 000102      | 沪投资品               | 2011/6/13     |\n| 000103      | 沪消费品               | 2011/6/13     |\n| 000104      | 380能源              | 2011/6/13     |\n| 000105      | 380材料              | 2011/6/13     |\n| 000106      | 380工业              | 2011/6/13     |\n| 000107      | 380可选              | 2011/6/13     |\n| 000108      | 380消费              | 2011/6/13     |\n| 000109      | 380医药              | 2011/6/13     |\n| 000110      | 380金融              | 2011/6/13     |\n| 000111      | 380信息              | 2011/6/13     |\n| 000112      | 380电信              | 2011/6/13     |\n| 000113      | 380公用              | 2011/6/13     |\n| 000114      | 持续产业               | 2011/8/22     |\n| 000115      | 380等权              | 2011/8/12     |\n| 000116      | 信用100              | 2013/2/26     |\n| 000117      | 380成长              | 2011/10/18    |\n| 000118      | 380价值              | 2011/10/18    |\n| 000119      | 380R成长             | 2011/10/18    |\n| 000120      | 380R价值             | 2011/10/18    |\n| 000121      | 医药主题               | 2011/10/18    |\n| 000122      | 农业主题               | 2011/10/18    |\n| 000123      | 180动态              | 2013/2/8      |\n| 000125      | 180稳定              | 2013/2/8      |\n| 000126      | 消费50               | 2011/12/9     |\n| 000128      | 380基本              | 2012/1/9      |\n| 000129      | 180波动              | 2012/1/9      |\n| 000130      | 380波动              | 2012/1/9      |\n| 000131      | 上证高新               | 2012/2/10     |\n| 000132      | 上证100              | 2012/4/20     |\n| 000133      | 上证150              | 2012/4/20     |\n| 000134      | 上证银行               | 2012/5/29     |\n| 000135      | 180高贝              | 2012/8/6      |\n| 000136      | 180低贝              | 2012/8/6      |\n| 000137      | 380高贝              | 2012/8/6      |\n| 000138      | 380低贝              | 2012/8/6      |\n| 000139      | 上证转债               | 2012/9/12     |\n| 000141      | 380动态              | 2013/2/8      |\n| 000142      | 380稳定              | 2013/2/8      |\n| 000145      | 优势资源               | 2012/5/29     |\n| 000146      | 优势制造               | 2012/5/29     |\n| 000147      | 优势消费               | 2012/5/29     |\n| 000148      | 消费领先               | 2012/5/29     |\n| 000149      | 180红利              | 2012/7/20     |\n| 000150      | 380红利              | 2012/7/20     |\n| 000151      | 上国红利               | 2012/7/20     |\n| 000152      | 上央红利               | 2012/7/20     |\n| 000153      | 上民红利               | 2012/7/20     |\n| 000155      | 市值百强               | 2012/7/20     |\n| 000158      | 上证环保               | 2012/9/25     |\n| 000159      | 上证沪股通指数            | 2014/11/17    |\n| 000160      | 上证一带一路主题指数         | 2015/6/24     |\n| 000161      | 上证中国制造2025主题指数     | 2015/10/29    |\n| 000162      | 上证互联网\\+主题指数        | 2015/10/29    |\n| 000171      | 新兴成指               | 2017/1/25     |\n| 000188      | 中国波指               | 2016/11/28    |\n| 000300      | 沪深300              | 2005/4/8      |\n| 000801      | 资源80               | 2011/11/8     |\n| 000802      | 500沪市              | 2011/11/8     |\n| 000803      | 300波动              | 2012/1/9      |\n| 000804      | 500波动              | 2012/1/9      |\n| 000805      | A股资源               | 2012/1/6      |\n| 000806      | 消费服务               | 2012/2/10     |\n| 000807      | 食品饮料               | 2012/2/17     |\n| 000808      | 医药生物               | 2012/2/17     |\n| 000809      | 细分农业               | 2012/4/11     |\n| 000810      | 细分能源               | 2012/4/11     |\n| 000811      | 细分有色               | 2012/4/11     |\n| 000812      | 细分机械               | 2012/4/11     |\n| 000813      | 细分化工               | 2012/4/11     |\n| 000814      | 细分医药               | 2012/4/11     |\n| 000815      | 细分食品               | 2012/4/11     |\n| 000816      | 细分地产               | 2012/4/11     |\n| 000817      | 兴证海峡               | 2011/9/27     |\n| 000818      | 细分金融               | 2012/4/11     |\n| 000819      | 有色金属               | 2012/5/9      |\n| 000820      | 煤炭指数               | 2012/5/9      |\n| 000821      | 300红利              | 2012/7/20     |\n| 000822      | 500红利              | 2012/7/20     |\n| 000823      | 中证800有色金属指数        | 2012/12/21    |\n| 000824      | 国企红利               | 2012/7/20     |\n| 000825      | 央企红利               | 2012/7/20     |\n| 000826      | 民企红利               | 2012/7/20     |\n| 000827      | 中证环保               | 2012/9/25     |\n| 000828      | 300高贝              | 2012/8/6      |\n| 000829      | 300低贝              | 2012/8/6      |\n| 000830      | 500高贝              | 2012/8/6      |\n| 000831      | 500低贝              | 2012/8/6      |\n| 000832      | 中证转债               | 2012/9/12     |\n| 000833      | 中高企债               | 2012/9/10     |\n| 000838      | 创业价值               | 2012/9/26     |\n| 000839      | 浙企综指               | 2012/11/9     |\n| 000840      | 浙江民企               | 2012/11/9     |\n| 000841      | 800医药              | 2012/12/21    |\n| 000842      | 800等权              | 2012/12/21    |\n| 000843      | 300动态              | 2013/1/7      |\n| 000844      | 300稳定              | 2013/1/7      |\n| 000846      | ESG100             | 2012/10/16    |\n| 000847      | 中证腾安价值100指数        | 2013/11/18    |\n| 000849      | 沪深300非银行金融指数       | 2012/12/21    |\n| 000850      | 沪深300有色金属指数        | 2012/12/21    |\n| 000851      | 中证百度百发策略100指数      | 2014/7/30     |\n| 000852      | 中证1000指数           | 2014/10/17    |\n| 000853      | 中证申万一带一路主题投资指数     | 2015/4/23     |\n| 000854      | 500原料              | 2013/11/6     |\n| 000855      | 央视财经500指数          | 2014/11/3     |\n| 000856      | 500工业              | 2013/11/6     |\n| 000857      | 500医药              | 2013/11/6     |\n| 000858      | 500信息              | 2013/11/6     |\n| 000891      | 中国战略新兴产业综合指数       | 2017/1/25     |\n| 000901      | 小康指数               | 2010/4/1      |\n| 000902      | 中证流通               | 2006/2/27     |\n| 000903      | 中证100              | 2006/5/29     |\n| 000904      | 中证200              | 2007/1/15     |\n| 000905      | 中证500              | 2007/1/15     |\n| 000906      | 中证800              | 2007/1/15     |\n| 000907      | 中证700              | 2007/1/15     |\n| 000908      | 300能源              | 2007/7/2      |\n| 000909      | 300材料              | 2007/7/2      |\n| 000910      | 300工业              | 2007/7/2      |\n| 000911      | 300可选              | 2007/7/2      |\n| 000912      | 300消费              | 2007/7/2      |\n| 000913      | 300医药              | 2007/7/2      |\n| 000914      | 300金融              | 2007/7/2      |\n| 000915      | 300信息              | 2007/7/2      |\n| 000916      | 300电信              | 2007/7/2      |\n| 000917      | 300公用              | 2007/7/2      |\n| 000918      | 300成长              | 2008/1/21     |\n| 000919      | 300价值              | 2008/1/21     |\n| 000920      | 300R成长             | 2008/1/21     |\n| 000921      | 300R价值             | 2008/1/21     |\n| 000922      | 中证红利               | 2008/5/26     |\n| 000923      | 公司债                | 2008/11/19    |\n| 000925      | 基本面50              | 2009/2/26     |\n| 000926      | 中证央企               | 2009/3/30     |\n| 000927      | 央企100              | 2009/3/30     |\n| 000928      | 中证能源               | 2009/7/3      |\n| 000929      | 中证材料               | 2009/7/3      |\n| 000930      | 中证工业               | 2009/7/3      |\n| 000931      | 中证可选               | 2009/7/3      |\n| 000932      | 中证消费               | 2009/7/3      |\n| 000933      | 中证医药               | 2009/7/3      |\n| 000934      | 中证金融               | 2009/7/3      |\n| 000935      | 中证信息               | 2009/7/3      |\n| 000936      | 中证电信               | 2009/7/3      |\n| 000937      | 中证公用               | 2009/7/3      |\n| 000938      | 中证民企               | 2009/8/25     |\n| 000939      | 民企200              | 2009/8/25     |\n| 000940      | 财富大盘               | 2009/9/25     |\n| 000941      | 新能源                | 2009/10/28    |\n| 000942      | 内地消费               | 2009/10/28    |\n| 000943      | 内地基建               | 2009/10/28    |\n| 000944      | 内地资源               | 2009/10/28    |\n| 000945      | 内地运输               | 2009/10/28    |\n| 000946      | 内地金融               | 2009/10/28    |\n| 000947      | 内地银行               | 2009/10/28    |\n| 000948      | 内地地产               | 2009/10/28    |\n| 000949      | 内地农业               | 2009/10/28    |\n| 000950      | 300基建              | 2009/10/28    |\n| 000951      | 300银行              | 2009/10/28    |\n| 000952      | 300地产              | 2009/10/28    |\n| 000953      | 中证地企               | 2010/2/9      |\n| 000954      | 地企100              | 2010/2/9      |\n| 000955      | 中证国企               | 2010/2/9      |\n| 000956      | 国企200              | 2010/2/9      |\n| 000957      | 300运输              | 2009/6/16     |\n| 000958      | 创业成长               | 2010/3/24     |\n| 000959      | 银河99               | 2010/2/9      |\n| 000960      | 中证龙头               | 2010/2/9      |\n| 000961      | 中证上游               | 2010/4/16     |\n| 000962      | 中证中游               | 2010/4/16     |\n| 000963      | 中证下游               | 2010/4/16     |\n| 000964      | 中证新兴               | 2010/4/30     |\n| 000965      | 基本200              | 2010/6/2      |\n| 000966      | 基本400              | 2010/6/2      |\n| 000967      | 基本600              | 2010/6/2      |\n| 000968      | 300周期              | 2010/5/28     |\n| 000969      | 300非周              | 2010/5/28     |\n| 000970      | ESG40              | 2010/9/17     |\n| 000971      | 等权90               | 2010/12/2     |\n| 000972      | 300沪市              | 2010/12/2     |\n| 000973      | 技术领先               | 2011/1/4      |\n| 000974      | 中证800金融指数          | 2013/5/9      |\n| 000975      | 钱江30               | 2014/1/2      |\n| 000976      | 新华金牛               | 2014/2/18     |\n| 000977      | 内地低碳               | 2011/1/21     |\n| 000978      | 医药100              | 2011/3/18     |\n| 000979      | 大宗商品               | 2011/8/22     |\n| 000980      | 中证超大               | 2011/5/10     |\n| 000981      | 300分层              | 2011/6/13     |\n| 000982      | 500等权              | 2011/6/13     |\n| 000983      | 智能资产               | 2011/6/17     |\n| 000984      | 300等权              | 2011/8/2      |\n| 000985      | 中证全指               | 2011/8/2      |\n| 000986      | 全指能源               | 2011/8/2      |\n| 000987      | 全指材料               | 2011/8/2      |\n| 000988      | 全指工业               | 2011/8/2      |\n| 000989      | 全指可选               | 2011/8/2      |\n| 000990      | 全指消费               | 2011/8/2      |\n| 000991      | 全指医药               | 2011/8/2      |\n| 000992      | 全指金融               | 2011/8/2      |\n| 000993      | 全指信息               | 2011/8/2      |\n| 000994      | 全指电信               | 2011/8/2      |\n| 000995      | 全指公用               | 2011/8/2      |\n| 000996      | 领先行业               | 2011/8/2      |\n| 000997      | 大消费                | 2011/11/11    |\n| 000998      | 中证TMT              | 2011/11/8     |\n| 000999      | 中证两岸三地500指数        | 2010/1/18     |\n| 399001      | 深证成指               | 1995/1/23     |\n| 399002      | 深成指R               | 1995/1/23     |\n| 399003      | 成份B指               | 1995/1/23     |\n| 399004      | 深证100R             | 2003/1/2      |\n| 399005      | 中小板指               | 2006/1/24     |\n| 399006      | 创业板指               | 2010/6/1      |\n| 399007      | 深证300              | 2009/11/4     |\n| 399008      | 中小300              | 2010/3/22     |\n| 399009      | 深证200              | 2011/9/1      |\n| 399010      | 深证700              | 2011/9/1      |\n| 399011      | 深证1000             | 2011/9/1      |\n| 399012      | 创业300              | 2013/1/7      |\n| 399013      | 深市精选               | 2014/5/30     |\n| 399015      | 深证中小创新指数           | 2015/3/24     |\n| 399016      | 深证创新指数             | 2016/12/1     |\n| 399017      | 中小板创新指数            | 2016/12/1     |\n| 399018      | 创业板创新指数            | 2016/12/1     |\n| 399050      | 创新引擎               | 2018/7/31     |\n| 399100      | 新指数                | 2006/2/16     |\n| 399101      | 中小板综               | 2005/12/1     |\n| 399102      | 创业板综合指数            | 2010/8/20     |\n| 399103      | 乐富指数               | 2011/12/2     |\n| 399106      | 深证综指               | 1991/4/4      |\n| 399107      | 深证A指               | 1992/10/4     |\n| 399108      | 深证B指               | 1992/10/6     |\n| 399231      | 农林指数               | 2013/3/4      |\n| 399232      | 采矿指数               | 2013/3/4      |\n| 399233      | 制造指数               | 2013/3/4      |\n| 399234      | 水电指数               | 2013/3/4      |\n| 399235      | 建筑指数               | 2013/3/4      |\n| 399236      | 批零指数               | 2013/3/4      |\n| 399237      | 运输指数               | 2013/3/4      |\n| 399238      | 餐饮指数               | 2013/3/4      |\n| 399239      | IT指数               | 2013/3/4      |\n| 399240      | 金融指数               | 2013/3/4      |\n| 399241      | 地产指数               | 2013/3/4      |\n| 399242      | 商务指数               | 2013/3/4      |\n| 399243      | 科研指数               | 2013/3/4      |\n| 399244      | 公共指数               | 2013/3/4      |\n| 399248      | 文化指数               | 2013/3/4      |\n| 399249      | 综企指数               | 2013/3/4      |\n| 399286      | 区块链50              | 2019/12/23    |\n| 399290      | 深转交债               | 2019/6/6      |\n| 399291      | 创精选88              | 2019/11/6     |\n| 399292      | 民企发展               | 2019/3/5      |\n| 399293      | 创业大盘               | 2019/4/18     |\n| 399294      | 中小创Q               | 2019/6/6      |\n| 399295      | 创业蓝筹               | 2019/1/23     |\n| 399296      | 创成长                | 2019/1/23     |\n| 399298      | 深证中高等级信用债指数        | 2014/9/25     |\n| 399299      | 深证中低等级信用债指数        | 2014/9/25     |\n| 399300      | 沪深300              | 2005/4/8      |\n| 399301      | 深信用债               | 2013/1/11     |\n| 399302      | 深公司债               | 2013/1/11     |\n| 399303      | 国证2000             | 2014/3/28     |\n| 399305      | 基金指数               | 2000/7/3      |\n| 399306      | 深证ETF              | 2011/12/2     |\n| 399307      | 深证转债               | 2014/8/27     |\n| 399310      | 国证50               | 2005/9/5      |\n| 399311      | 国证1000             | 2005/2/3      |\n| 399312      | 国证300              | 2005/2/3      |\n| 399313      | 巨潮100              | 2005/2/3      |\n| 399314      | 巨潮大盘               | 2005/2/3      |\n| 399315      | 巨潮中盘               | 2005/2/3      |\n| 399316      | 巨潮小盘               | 2005/2/3      |\n| 399317      | 国证A指               | 2005/2/3      |\n| 399318      | 巨潮B股指数             | 2005/2/3      |\n| 399319      | 资源优势               | 2005/1/4      |\n| 399320      | 国证服务               | 2005/1/4      |\n| 399321      | 国证红利               | 2005/1/4      |\n| 399322      | 国证治理               | 2005/12/12    |\n| 399324      | 深证红利               | 2006/1/24     |\n| 399326      | 成长40               | 2006/1/24     |\n| 399328      | 深证治理               | 2006/1/24     |\n| 399330      | 深证100              | 2006/1/24     |\n| 399332      | 深证创新\\(旧\\)          | 2006/2/27     |\n| 399333      | 中小板R               | 2006/12/27    |\n| 399335      | 深证央企               | 2009/8/3      |\n| 399337      | 深证民营               | 2009/8/3      |\n| 399339      | 深证科技               | 2009/8/3      |\n| 399341      | 深证责任               | 2009/8/3      |\n| 399344      | 深证300R             | 2009/11/4     |\n| 399346      | 深证成长               | 2009/11/4     |\n| 399348      | 深证价值               | 2009/11/4     |\n| 399350      | 皖江30               | 2012/12/18    |\n| 399351      | 深报指数               | 2004/9/1      |\n| 399352      | 深报综指               | 2005/2/3      |\n| 399353      | 国证物流               | 2005/3/1      |\n| 399354      | 分析师指数              | 2006/11/25    |\n| 399355      | 长三角                | 2007/7/2      |\n| 399356      | 珠三角                | 2007/7/2      |\n| 399357      | 环渤海                | 2007/7/2      |\n| 399358      | 泰达指数               | 2008/1/2      |\n| 399359      | 国证基建               | 2009/8/3      |\n| 399360      | 国证装备               | 2009/8/3      |\n| 399361      | 国证商业               | 2009/8/3      |\n| 399362      | 国证民营               | 2009/8/3      |\n| 399363      | 计算机指               | 2009/8/3      |\n| 399364      | 中金消费               | 2009/8/3      |\n| 399365      | 国证农业               | 2009/11/4     |\n| 399366      | 国证大宗               | 2009/11/4     |\n| 399367      | 巨潮地产               | 2009/11/4     |\n| 399368      | 国证军工               | 2009/11/4     |\n| 399369      | CBN\\-兴全            | 2009/11/4     |\n| 399370      | 国证成长               | 2010/1/4      |\n| 399371      | 国证价值               | 2010/1/4      |\n| 399372      | 大盘成长               | 2010/1/4      |\n| 399373      | 大盘价值               | 2010/1/4      |\n| 399374      | 中盘成长               | 2010/1/4      |\n| 399375      | 中盘价值               | 2010/1/4      |\n| 399376      | 小盘成长               | 2010/1/4      |\n| 399377      | 小盘价值               | 2010/1/4      |\n| 399378      | 南方低碳               | 2010/9/20     |\n| 399379      | 国证基金               | 2011/12/2     |\n| 399380      | 国证ETF              | 2011/12/2     |\n| 399381      | 1000能源             | 2011/12/2     |\n| 399382      | 1000材料             | 2011/12/2     |\n| 399383      | 1000工业             | 2011/12/2     |\n| 399384      | 1000可选             | 2011/12/2     |\n| 399385      | 1000消费             | 2011/12/2     |\n| 399386      | 1000医药             | 2011/12/2     |\n| 399387      | 1000金融             | 2011/12/2     |\n| 399388      | 1000信息             | 2011/12/2     |\n| 399389      | 国证通信               | 2011/12/2     |\n| 399390      | 1000公用             | 2011/12/2     |\n| 399391      | 投资时钟               | 2012/3/26     |\n| 399392      | 国证新兴               | 2012/3/28     |\n| 399393      | 国证地产               | 2012/8/20     |\n| 399394      | 国证医药               | 2012/10/29    |\n| 399395      | 国证有色               | 2012/10/29    |\n| 399396      | 国证食品               | 2012/10/29    |\n| 399397      | OCT文化              | 2012/11/9     |\n| 399398      | 绩效指数               | 2012/11/19    |\n| 399399      | 中经GDP              | 2012/11/23    |\n| 399400      | 大中盘                | 2013/3/20     |\n| 399401      | 中小盘                | 2013/3/20     |\n| 399402      | 周期100              | 2013/10/28    |\n| 399403      | 防御100              | 2013/10/28    |\n| 399404      | 大盘低波               | 2013/12/5     |\n| 399405      | 大盘高贝               | 2013/12/5     |\n| 399406      | 中盘低波               | 2013/12/5     |\n| 399407      | 中盘高贝               | 2013/12/5     |\n| 399408      | 小盘低波               | 2013/12/5     |\n| 399409      | 小盘高贝               | 2013/12/5     |\n| 399410      | 苏州率先               | 2013/12/12    |\n| 399411      | 红利100              | 2014/4/10     |\n| 399412      | 国证新能               | 2014/5/16     |\n| 399413      | 国证转债               | 2014/8/27     |\n| 399415      | I100               | 2014/9/12     |\n| 399416      | I300               | 2014/9/12     |\n| 399417      | 国证新能源汽车指数          | 2014/9/24     |\n| 399418      | 国证国家安全指数           | 2014/11/21    |\n| 399419      | 国证高铁指数             | 2014/12/10    |\n| 399420      | 国证保险证券指数           | 2014/12/10    |\n| 399423      | 中关村50指数            | 2015/2/5      |\n| 399427      | 国证德高行专利领先指数        | 2015/2/17     |\n| 399428      | 国证定向增发指数           | 2015/2/17     |\n| 399429      | 新丝路指数              | 2015/1/8      |\n| 399431      | 国证银行行业指数           | 2014/12/30    |\n| 399432      | 国证汽车与汽车零配件行业指数     | 2014/12/30    |\n| 399433      | 国证交通运输行业指数         | 2014/12/30    |\n| 399434      | 国证传媒行业指数           | 2014/12/30    |\n| 399435      | 国证农牧渔产品行业指数        | 2014/12/30    |\n| 399436      | 国证煤炭行业指数           | 2014/12/30    |\n| 399437      | 国证证券行业指数           | 2014/12/30    |\n| 399438      | 国证电力公用事业行业指数       | 2014/12/30    |\n| 399439      | 国证石油天然气行业指数        | 2014/12/30    |\n| 399440      | 国证黑色金属行业指数         | 2014/12/30    |\n| 399441      | 国证生物医药指数           | 2015/1/20     |\n| 399481      | 企债指数               | 2003/1/2      |\n| 399550      | 央视50               | 2012/6/6      |\n| 399551      | 央视创新               | 2013/6/6      |\n| 399552      | 央视成长               | 2013/6/6      |\n| 399553      | 央视回报               | 2013/6/6      |\n| 399554      | 央视治理               | 2013/6/6      |\n| 399555      | 央视责任               | 2013/6/6      |\n| 399556      | 央视生态               | 2014/6/6      |\n| 399557      | 央视文化               | 2014/6/6      |\n| 399602      | 中小成长               | 2010/5/24     |\n| 399604      | 中小价值               | 2010/5/24     |\n| 399606      | 创业板R               | 2010/6/1      |\n| 399608      | 科技100              | 2010/10/18    |\n| 399610      | TMT50              | 2010/11/8     |\n| 399611      | 中创100R             | 2011/2/28     |\n| 399612      | 中创100              | 2011/2/28     |\n| 399613      | 深证能源               | 2011/6/15     |\n| 399614      | 深证材料               | 2011/6/15     |\n| 399615      | 深证工业               | 2011/6/15     |\n| 399616      | 深证可选               | 2011/6/15     |\n| 399617      | 深证消费               | 2011/6/15     |\n| 399618      | 深证医药               | 2011/6/15     |\n| 399619      | 深证金融               | 2011/6/15     |\n| 399620      | 深证信息               | 2011/6/15     |\n| 399621      | 深证电信               | 2011/6/15     |\n| 399622      | 深证公用               | 2011/6/15     |\n| 399623      | 中小基础               | 2011/7/25     |\n| 399624      | 中创400              | 2011/8/15     |\n| 399625      | 中创500              | 2011/8/15     |\n| 399626      | 中创成长               | 2011/8/15     |\n| 399627      | 中创价值               | 2011/8/15     |\n| 399628      | 700成长              | 2011/9/1      |\n| 399629      | 700价值              | 2011/9/1      |\n| 399630      | 1000成长             | 2011/9/1      |\n| 399631      | 1000价值             | 2011/9/1      |\n| 399632      | 深100EW             | 2011/10/28    |\n| 399633      | 深300EW             | 2011/10/28    |\n| 399634      | 中小板EW              | 2011/10/28    |\n| 399635      | 创业板EW              | 2011/10/28    |\n| 399636      | 深证装备               | 2011/11/15    |\n| 399637      | 深证地产               | 2011/11/15    |\n| 399638      | 深证环保               | 2011/11/15    |\n| 399639      | 深证大宗               | 2011/11/15    |\n| 399640      | 创业基础               | 2012/1/16     |\n| 399641      | 深证新兴               | 2012/2/1      |\n| 399642      | 中小新兴               | 2012/2/1      |\n| 399643      | 创业新兴               | 2012/2/1      |\n| 399644      | 深证时钟               | 2012/3/26     |\n| 399645      | 100低波              | 2012/6/12     |\n| 399646      | 深消费50              | 2012/8/6      |\n| 399647      | 深医药50              | 2012/8/6      |\n| 399648      | 深证GDP              | 2012/8/8      |\n| 399649      | 中小红利               | 2012/8/20     |\n| 399650      | 中小治理               | 2012/8/20     |\n| 399651      | 中小责任               | 2012/8/20     |\n| 399652      | 中创高新               | 2012/9/17     |\n| 399653      | 深证龙头               | 2012/9/25     |\n| 399654      | 深证文化               | 2012/11/9     |\n| 399655      | 深证绩效               | 2012/11/19    |\n| 399656      | 100绩效              | 2012/11/19    |\n| 399657      | 300绩效              | 2012/11/19    |\n| 399658      | 中小绩效               | 2012/11/19    |\n| 399659      | 深成指EW              | 2012/11/23    |\n| 399660      | 中创EW               | 2012/11/23    |\n| 399661      | 深证低波               | 2012/12/20    |\n| 399662      | 深证高贝               | 2012/12/20    |\n| 399663      | 中小低波               | 2012/12/20    |\n| 399664      | 中小高贝               | 2012/12/20    |\n| 399665      | 中创低波               | 2012/12/20    |\n| 399666      | 中创高贝               | 2012/12/20    |\n| 399667      | 创业板G               | 2013/1/7      |\n| 399668      | 创业板V               | 2013/1/7      |\n| 399669      | 深证农业               | 2013/6/24     |\n| 399670      | 深周期50              | 2013/10/28    |\n| 399671      | 深防御50              | 2013/10/28    |\n| 399672      | 深红利50              | 2014/4/10     |\n| 399673      | 创业板50              | 2014/6/18     |\n| 399674      | 深A医药卫生指数           | 2015/6/8      |\n| 399675      | 深A软件与互联网指数         | 2015/6/8      |\n| 399676      | 深A医药卫生等权指数         | 2015/6/8      |\n| 399677      | 深A软件与互联网等权指数       | 2015/6/8      |\n| 399678      | 深证次新股指数            | 2015/6/18     |\n| 399679      | 深证200指数            | 2015/6/18     |\n| 399680      | 深成能源行业指数           | 2015/8/31     |\n| 399681      | 深成原材料行业指数          | 2015/8/31     |\n| 399682      | 深成工业行业指数           | 2015/8/31     |\n| 399683      | 深成可选消费行业指数         | 2015/8/31     |\n| 399684      | 深成主要消费行业指数         | 2015/8/31     |\n| 399685      | 深成医药卫生行业指数         | 2015/8/31     |\n| 399686      | 深成金融地产行业指数         | 2015/8/31     |\n| 399687      | 深成信息技术行业指数         | 2015/8/31     |\n| 399688      | 深成电信业务行业指数         | 2015/8/31     |\n| 399689      | 深成公用事业行业指数         | 2015/8/31     |\n| 399690      | 深证中小板专利领先指数        | 2016/5/23     |\n| 399691      | 深证创业板专利领先指数        | 2016/5/23     |\n| 399692      | 创业300低波动率指数        | 2016/12/20    |\n| 399693      | 安防产业               | 2016/6/20     |\n| 399694      | 创业高贝               | 2016/12/20    |\n| 399695      | 深证节能环保指数           | 2017/4/28     |\n| 399696      | 深证创投               | 2016/10/21    |\n| 399697      | 中关村60              | 2017/1/10     |\n| 399698      | 深证优势成长             | 2017/6/15     |\n| 399699      | 金融科技               | 2017/6/9      |\n| 399701      | 深证F60              | 2010/5/10     |\n| 399702      | 深证F120             | 2010/5/10     |\n| 399703      | 深证F200             | 2010/5/10     |\n| 399704      | 深证上游               | 2011/10/18    |\n| 399705      | 深证中游               | 2011/10/18    |\n| 399706      | 深证下游               | 2011/10/18    |\n| 399707      | 中证申万证券行业指数         | 2015/4/16     |\n| 399802      | 500深市              | 2012/9/5      |\n| 399803      | 中证工业4\\.0指数         | 2015/3/10     |\n| 399804      | 中证体育产业指数           | 2015/2/9      |\n| 399805      | 中证互联网金融指数          | 2015/2/10     |\n| 399806      | 中证环境治理指数           | 2014/7/21     |\n| 399807      | 中证高铁产业指数           | 2015/1/20     |\n| 399808      | 中证新能源指数            | 2015/2/10     |\n| 399809      | 中证方正富邦保险主题指数       | 2015/2/13     |\n| 399810      | 中证申万传媒行业投资指数       | 2015/8/3      |\n| 399811      | 中证申万电子行业投资指数       | 2015/8/3      |\n| 399812      | 中证养老产业指数           | 2014/6/6      |\n| 399813      | 中证国防安全指数           | 2015/1/29     |\n| 399814      | 中证大农业指数            | 2014/7/22     |\n| 399817      | 中证阿拉善生态主题100指数     | 2015/10/21    |\n| 399901      | 中证南方小康产业指数         | 2010/4/1      |\n| 399902      | 中证流通指数             | 2006/2/27     |\n| 399903      | 中证100指数            | 2006/5/29     |\n| 399904      | 中证中盘200指数          | 2007/1/15     |\n| 399905      | 中证500              | 2007/1/15     |\n| 399906      | 中证800指数            | 2007/1/15     |\n| 399907      | 中证中小盘700指数         | 2007/1/15     |\n| 399908      | 沪深300能源指数          | 2007/7/2      |\n| 399909      | 沪深300原材料指数         | 2007/7/2      |\n| 399910      | 沪深300工业指数          | 2007/7/2      |\n| 399911      | 沪深300可选消费指数        | 2007/7/2      |\n| 399912      | 沪深300主要消费指数        | 2007/7/2      |\n| 399913      | 沪深300医药卫生指数        | 2007/7/2      |\n| 399914      | 沪深300金融地产指数        | 2007/7/2      |\n| 399915      | 沪深300信息技术指数        | 2007/7/2      |\n| 399916      | 沪深300电信业务指数        | 2007/7/2      |\n| 399917      | 沪深300公用事业指数        | 2007/7/2      |\n| 399918      | 沪深300成长指数          | 2008/1/21     |\n| 399919      | 沪深300价值指数          | 2008/1/21     |\n| 399920      | 沪深300相对成长指数        | 2008/1/21     |\n| 399922      | 中证红利指数             | 2008/5/26     |\n| 399923      | 公司债                | 2008/11/19    |\n| 399925      | 中证锐联基本面50指数        | 2009/2/26     |\n| 399926      | 中证中央企业综合指数         | 2009/3/30     |\n| 399927      | 中证中央企业100指数        | 2009/3/30     |\n| 399928      | 中证能源指数             | 2009/7/3      |\n| 399929      | 中证原材料指数            | 2009/7/3      |\n| 399930      | 中证工业指数             | 2009/7/3      |\n| 399931      | 中证可选消费指数           | 2009/7/3      |\n| 399932      | 中证主要消费指数           | 2009/7/3      |\n| 399933      | 中证医药卫生指数           | 2009/7/3      |\n| 399934      | 中证金融地产指数           | 2009/7/3      |\n| 399935      | 中证信息技术指数           | 2009/7/3      |\n| 399936      | 中证电信业务指数           | 2009/7/3      |\n| 399937      | 中证公用事业指数           | 2009/7/3      |\n| 399938      | 中证民营企业综合指数         | 2009/8/25     |\n| 399939      | 中证民营企业200指数        | 2009/8/25     |\n| 399940      | 中证财富大盘指数           | 2009/9/25     |\n| 399941      | 中证内地新能源主题指数        | 2009/10/28    |\n| 399942      | 中证内地消费主题指数         | 2009/10/28    |\n| 399943      | 中证内地基建主题指数         | 2009/10/28    |\n| 399944      | 中证内地资源主题指数         | 2009/10/28    |\n| 399945      | 中证内地运输主题指数         | 2009/10/28    |\n| 399946      | 中证内地金融主题指数         | 2009/10/28    |\n| 399947      | 中证内地银行主题指数         | 2009/10/28    |\n| 399948      | 中证内地地产主题指数         | 2009/10/28    |\n| 399949      | 中证内地农业主题指数         | 2009/10/28    |\n| 399950      | 沪深300基建主题指数        | 2009/10/28    |\n| 399951      | 沪深300银行指数          | 2009/10/28    |\n| 399952      | 沪深300地产指数          | 2009/10/28    |\n| 399953      | 中证地方国有企业综合指数       | 2010/2/9      |\n| 399954      | 中证地方国有企业100指数      | 2010/2/9      |\n| 399955      | 中证国有企业综合指数         | 2010/2/9      |\n| 399956      | 中证国有企业200指数        | 2010/2/9      |\n| 399957      | 沪深300运输指数          | 2009/6/16     |\n| 399958      | 中证创业成长指数           | 2010/3/24     |\n| 399959      | 军工指数               | 2011/8/30     |\n| 399960      | 中证龙头企业指数           | 2010/2/9      |\n| 399961      | 中证上游资源产业指数         | 2010/4/16     |\n| 399962      | 中证中游制造产业指数         | 2010/4/16     |\n| 399963      | 中证下游消费与服务产业指数      | 2010/4/16     |\n| 399964      | 中证新兴产业指数           | 2010/4/30     |\n| 399965      | 800地产              | 2014/4/4      |\n| 399966      | 800非银              | 2014/4/4      |\n| 399967      | 中证军工               | 2013/12/26    |\n| 399968      | 沪深300周期行业指数        | 2010/5/28     |\n| 399969      | 沪深300非周期行业指数       | 2010/5/28     |\n| 399970      | 中证移动互联网指数          | 2014/5/5      |\n| 399971      | 中证传媒指数             | 2014/4/15     |\n| 399972      | 300深市              | 2012/6/21     |\n| 399973      | 中证国防指数             | 2014/4/15     |\n| 399974      | 中证国有企业改革指数         | 2014/8/7      |\n| 399975      | 中证全指证券公司指数\\(四级行业\\) | 2013/7/15     |\n| 399976      | 中证新能源汽车指数          | 2014/11/28    |\n| 399977      | 中证内地低碳经济主题指数       | 2011/1/21     |\n| 399978      | 中证医药100指数          | 2011/3/18     |\n| 399979      | 中证大宗商品股票指数         | 2011/8/22     |\n| 399980      | 中证超级大盘指数           | 2011/5/10     |\n| 399981      | 沪深300行业分层等权重指数     | 2011/6/13     |\n| 399982      | 中证500等权重指数         | 2011/6/13     |\n| 399983      | 沪深300地产等权重指数       | 2013/11/22    |\n| 399984      | 沪深300等权重指数         | 2011/8/2      |\n| 399985      | 中证全指指数             | 2011/8/2      |\n| 399986      | 中证银行指数             | 2013/7/15     |\n| 399987      | 中证酒指数              | 2014/12/10    |\n| 399989      | 中证医疗指数             | 2014/10/31    |\n| 399990      | 中证煤炭等权指数           | 2015/1/21     |\n| 399991      | 中证一带一路主题指数         | 2015/2/16     |\n| 399992      | 中证万得并购重组指数         | 2015/5/8      |\n| 399993      | 中证万得生物科技指数         | 2015/5/8      |\n| 399994      | 中证信息安全主题指数         | 2015/3/12     |\n| 399995      | 中证基建工程指数           | 2015/3/12     |\n| 399996      | 中证智能家居指数           | 2014/9/17     |\n| 399997      | 中证白酒指数             | 2015/1/21     |\n| 399998      | 中证煤炭指数             | 2015/2/13     |\n\n输出参数\n\n| 名称   | 类型     | 描述      |\n|------|--------|---------|\n| 品种代码 | object | 股票代码    |\n| 品种名称 | object | 股票名称    |\n| 纳入日期 | object | 成份股纳入日期 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_stock_cons_df = ak.index_stock_cons(symbol=\"000300\")\nprint(index_stock_cons_df)\n```\n\n数据示例\n\n```\n       品种代码  品种名称     纳入日期\n0    601916  浙商银行  2023-12-11\n1    301269  华大九天  2023-12-11\n2    688256   寒武纪  2023-12-11\n3    600515  海南机场  2023-12-11\n4    000999  华润三九  2023-12-11\n..      ...   ...         ...\n295  000157  中联重科  2005-04-08\n296  000069  华侨城A  2005-04-08\n297  000063  中兴通讯  2005-04-08\n298  000001  深发展A  2005-04-08\n299  000002   万科A  2005-04-08\n[300 rows x 3 columns]\n```\n\n输出参数-按市场归类\n\n| 名称   | 类型     | 描述      |\n|------|--------|---------|\n| 品种代码 | object | 股票代码    |\n| 品种名称 | object | 股票名称    |\n| 纳入日期 | object | 成份股纳入日期 |\n\n接口示例-按市场归类\n\n```python\nimport akshare as ak\n\nindex_stock_cons_df = ak.index_stock_cons(symbol=\"000300\")  # 主要调用 ak.stock_a_code_to_symbol() 来进行转换\nindex_stock_cons_df['symbol'] = index_stock_cons_df['品种代码'].apply(ak.stock_a_code_to_symbol)\nprint(index_stock_cons_df)\n```\n\n数据示例-按市场归类\n\n```\n      品种代码  品种名称  纳入日期    symbol\n0   000688  国城矿业  2020-12-14  sz000688\n1   002409  雅克科技  2020-12-14  sz002409\n2   002683  宏大爆破  2020-12-14  sz002683\n3   002709  天赐材料  2020-12-14  sz002709\n4   002064  华峰氨纶  2020-06-15  sz002064\n5   002458  益生股份  2020-06-15  sz002458\n6   002812  恩捷股份  2019-12-16  sz002812\n7   002128  露天煤业  2019-12-16  sz002128\n8   002080  中材科技  2019-12-16  sz002080\n9   000708  中信特钢  2019-12-16  sz000708\n10  002157  正邦科技  2019-06-17  sz002157\n11  000723  美锦能源  2019-06-17  sz000723\n12  000629  攀钢钒钛  2019-06-17  sz000629\n13  000930  中粮生化  2019-01-02  sz000930\n14  000860  顺鑫农业  2019-01-02  sz000860\n15  002110  三钢闽光  2018-07-02  sz002110\n16  002078  太阳纸业  2018-07-02  sz002078\n17  000703  恒逸石化  2018-07-02  sz000703\n18  000830  鲁西化工  2018-01-02  sz000830\n19  300618  寒锐钴业  2018-01-02  sz300618\n20  002408  齐翔腾达  2017-07-03  sz002408\n21  300498  温氏股份  2017-01-03  sz300498\n22  002299  圣农发展  2016-07-01  sz002299\n23  000959  首钢股份  2016-07-01  sz000959\n24  000807  云铝股份  2016-07-01  sz000807\n25  002221  东华能源  2016-01-04  sz002221\n26  000898  鞍钢股份  2014-07-01  sz000898\n27  002340   格林美  2014-01-02  sz002340\n28  002311  海大集团  2014-01-02  sz002311\n29  002385   大北农  2012-07-02  sz002385\n30  000876   新希望  2012-01-04  sz000876\n31  000998  隆平高科  2011-11-15  sz000998\n32  000983  西山煤电  2011-11-15  sz000983\n33  000960  锡业股份  2011-11-15  sz000960\n34  000878  云南铜业  2011-11-15  sz000878\n35  000825  太钢不锈  2011-11-15  sz000825\n36  000778  新兴铸管  2011-11-15  sz000778\n37  000709  河北钢铁  2011-11-15  sz000709\n38  000630  铜陵有色  2011-11-15  sz000630\n39  000060  中金岭南  2011-11-15  sz000060\n[40 rows x 4 columns]\n```\n\n#### 中证指数成份股\n\n接口: index_stock_cons_csindex\n\n目标地址: http://www.csindex.com.cn/zh-CN/indices/index-detail/000300\n\n描述: 中证指数网站-成份股目录，可以通过 ak.index_csindex_all() 获取所有指数\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"000300\"; 指数代码 |\n\n输出参数\n\n| 名称      | 类型     | 描述  |\n|---------|--------|-----|\n| 日期      | object | -   |\n| 指数代码    | object | -   |\n| 指数名称    | object | -   |\n| 指数英文名称  | object | -   |\n| 成分券代码   | object | -   |\n| 成分券名称   | object | -   |\n| 成分券英文名称 | object | -   |\n| 交易所     | object | -   |\n| 交易所英文名称 | object | -   |\n\n示例代码\n\n```python\nimport akshare as ak\n\nindex_stock_cons_csindex_df = ak.index_stock_cons_csindex(symbol=\"000300\")\nprint(index_stock_cons_csindex_df)\n```\n\n数据示例\n\n```\n             日期    指数代码  ...      交易所                  交易所英文名称\n0    2024-01-04  000300  ...  深圳证券交易所  Shenzhen Stock Exchange\n1    2024-01-04  000300  ...  深圳证券交易所  Shenzhen Stock Exchange\n2    2024-01-04  000300  ...  深圳证券交易所  Shenzhen Stock Exchange\n3    2024-01-04  000300  ...  深圳证券交易所  Shenzhen Stock Exchange\n4    2024-01-04  000300  ...  深圳证券交易所  Shenzhen Stock Exchange\n..          ...     ...  ...      ...                      ...\n295  2024-01-04  000300  ...  上海证券交易所  Shanghai Stock Exchange\n296  2024-01-04  000300  ...  上海证券交易所  Shanghai Stock Exchange\n297  2024-01-04  000300  ...  上海证券交易所  Shanghai Stock Exchange\n298  2024-01-04  000300  ...  上海证券交易所  Shanghai Stock Exchange\n299  2024-01-04  000300  ...  上海证券交易所  Shanghai Stock Exchange\n[300 rows x 9 columns]\n```\n\n#### 中证指数成份股权重\n\n接口: index_stock_cons_weight_csindex\n\n目标地址: http://www.csindex.com.cn/zh-CN/indices/index-detail/000300\n\n描述: 中证指数网站-成份股权重\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"000300\"; 指数代码 |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 日期      | object  | -       |\n| 指数代码    | object  | -       |\n| 指数名称    | object  | -       |\n| 指数英文名称  | object  | -       |\n| 成分券代码   | object  | -       |\n| 成分券名称   | object  | -       |\n| 成分券英文名称 | object  | -       |\n| 交易所     | object  | -       |\n| 交易所英文名称 | object  | -       |\n| 权重      | float64 | 注意单位: % |\n\n示例代码\n\n```python\nimport akshare as ak\n\nindex_stock_cons_weight_csindex_df = ak.index_stock_cons_weight_csindex(symbol=\"000300\")\nprint(index_stock_cons_weight_csindex_df)\n```\n\n数据示例\n\n```\n     日期    指数代码   指数名称  ...     交易所                交易所英文名称     权重\n0    2023-12-29  000300  沪深300  ...  深圳证券交易所  Shenzhen Stock Exchange  0.524\n1    2023-12-29  000300  沪深300  ...  深圳证券交易所  Shenzhen Stock Exchange  0.410\n2    2023-12-29  000300  沪深300  ...  深圳证券交易所  Shenzhen Stock Exchange  0.486\n3    2023-12-29  000300  沪深300  ...  深圳证券交易所  Shenzhen Stock Exchange  0.088\n4    2023-12-29  000300  沪深300  ...  深圳证券交易所  Shenzhen Stock Exchange  0.465\n..          ...     ...    ...  ...      ...                      ...    ...\n295  2023-12-29  000300  沪深300  ...  上海证券交易所  Shanghai Stock Exchange  0.074\n296  2023-12-29  000300  沪深300  ...  上海证券交易所  Shanghai Stock Exchange  0.136\n297  2023-12-29  000300  沪深300  ...  上海证券交易所  Shanghai Stock Exchange  0.063\n298  2023-12-29  000300  沪深300  ...  上海证券交易所  Shanghai Stock Exchange  0.178\n299  2023-12-29  000300  沪深300  ...  上海证券交易所  Shanghai Stock Exchange  0.602\n[300 rows x 10 columns]\n```\n\n### 国证指数\n\n#### 全部指数\n\n接口: index_all_cni\n\n目标地址: http://www.cnindex.com.cn/zh_indices/sese/index.html?act_menu=1&index_type=-1\n\n描述: 国证指数-最近交易日的所有指数的代码和基本信息\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述                               |\n|--------|---------|----------------------------------|\n| 指数代码   | object  | -                                |\n| 指数简称   | object  | -                                |\n| 样本数    | int64   | -                                |\n| 收盘点位   | float64 | -                                |\n| 涨跌幅    | float64 | -                                |\n| PE滚动   | float64 | -                                |\n| 成交量    | float64 | 注意单位: 债券指数成交量单位为亿张，非债券指数成交量单位为万手 |\n| 成交额    | float64 | 注意单位: 亿元                         |\n| 总市值    | float64 | 注意单位: 亿元                         |\n| 自由流通市值 | float64 | 注意单位: 亿元                         |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_all_cni_df = ak.index_all_cni()\nprint(index_all_cni_df)\n```\n\n数据示例\n\n```\n          指数代码          指数简称  样本数  ...          成交额            总市值        自由流通市值\n0       399001          深证成指  500  ...  1551.817177  182200.555052  93688.587978\n1       399002          深成指R  500  ...  1551.817177  182200.555052  93688.587978\n2       399003          成份Ｂ指   10  ...     0.545615     345.946714    289.787042\n3       399004        深证100R  100  ...   725.052558  102390.468955  51849.808034\n4       399005         中小100  100  ...   425.914666   52479.098750  26772.330931\n        ...           ...  ...  ...          ...            ...           ...\n1257  CNB20014  高等级非贴标绿债（全价）    0  ...   109.463922            NaN           NaN\n1258  CNB20015   高等级贴标绿债（全价）    0  ...   193.434154            NaN           NaN\n1259      CNYR       人民币实际指数    0  ...     0.000000            NaN           NaN\n1260      CNYX         人民币指数    0  ...     0.000000            NaN           NaN\n1261   RETHKDG    中华房地产信托基金R   30  ...     2.311884    1617.705097    221.909288\n[1262 rows x 10 columns]\n```\n\n#### 指数行情\n\n接口: index_hist_cni\n\n目标地址: http://www.cnindex.com.cn/module/index-detail.html?act_menu=1&indexCode=399001\n\n描述: 国证指数-具体指数的日频率行情数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                             |\n|------------|-----|------------------------------------------------|\n| symbol     | str | symbol=\"399005\"; 从 ak.index_all_cni() 接口获取指数代码 |\n| start_date | str | start_date=\"20230114\"                          |\n| end_date   | str | end_date=\"20240114\"                            |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 日期  | object  | -        |\n| 开盘价 | float64 | -        |\n| 最高价 | float64 | -        |\n| 最低价 | float64 | -        |\n| 收盘价 | float64 | -        |\n| 涨跌幅 | float64 | -        |\n| 成交量 | float64 | 注意单位: 万手 |\n| 成交额 | float64 | 注意单位: 亿元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_hist_cni_df = ak.index_hist_cni(symbol=\"399005\", start_date=\"20230114\", end_date=\"20240114\")\nprint(index_hist_cni_df)\n```\n\n数据示例\n\n```\n       日期      开盘价     最高价   最低价    收盘价   涨跌幅    成交量     成交额\n0    2023-01-16  7646.53  7791.17  7622.78  7726.87  0.0111  3333.08  764.47\n1    2023-01-17  7739.01  7763.82  7708.61  7747.54  0.0027  2451.54  553.48\n2    2023-01-18  7754.17  7788.91  7742.23  7752.89  0.0007  2135.29  491.04\n3    2023-01-19  7752.13  7821.15  7720.00  7821.15  0.0088  2316.82  551.81\n4    2023-01-20  7831.02  7872.72  7812.26  7858.43  0.0048  2388.04  591.12\n..          ...      ...      ...      ...      ...     ...      ...     ...\n237  2024-01-08  5724.03  5740.62  5618.65  5618.65 -0.0209  2380.41  393.86\n238  2024-01-09  5629.52  5683.72  5599.87  5641.58  0.0041  2480.49  427.98\n239  2024-01-10  5619.17  5670.40  5562.28  5594.86 -0.0083  2180.10  402.80\n240  2024-01-11  5588.35  5720.80  5575.51  5691.66  0.0173  2619.25  512.84\n241  2024-01-12  5675.48  5709.83  5646.72  5646.90 -0.0079  2454.19  433.13\n[242 rows x 8 columns]\n```\n\n#### 指数样本详情\n\n接口: index_detail_cni\n\n目标地址: http://www.cnindex.com.cn/module/index-detail.html?act_menu=1&indexCode=399001\n\n描述: 国证指数-指数样本详情数据；20251125 开始只能获取近期的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                 |\n|--------|-----|----------------------------------------------------|\n| symbol | str | symbol='399001'; 从 **ak.index_all_cni()** 接口获取指数代码 |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 日期     | object  | -        |\n| 样本代码   | object  | -        |\n| 样本简称   | object  | -        |\n| 所属行业   | object  | -        |\n| 自由流通市值 | float64 | 注意单位: 亿元 |\n| 总市值    | float64 | 注意单位: 亿元 |\n| 权重     | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_detail_cni_df = ak.index_detail_cni(symbol='399001')\nprint(index_detail_cni_df)\n```\n\n数据示例\n\n```\n               日期    样本代码   样本简称  所属行业      总市值    权重\n0      2025-11-28  000001   平安银行    金融  2253.03  0.67\n1      2025-11-28  000002  万  科Ａ   房地产   523.16  0.25\n2      2025-11-28  000009   中国宝安    工业   261.02  0.12\n3      2025-11-28  000021    深科技  信息技术   375.94  0.17\n4      2025-11-28  000027   深圳能源  公用事业   316.84  0.06\n...           ...     ...    ...   ...      ...   ...\n30495  2020-11-30  300773    拉卡拉    金融   266.81  0.12\n30496  2020-11-30  300775   三角防务    工业   170.01  0.09\n30497  2020-11-30  300777   中简科技   原材料   183.40  0.07\n30498  2020-11-30  300782    卓胜微  信息技术  1013.40  0.25\n30499  2020-11-30  300783   三只松鼠  主要消费   212.97  0.02\n[30500 rows x 6 columns]\n```\n\n#### 历史样本\n\n接口: index_detail_hist_cni\n\n目标地址: http://www.cnindex.com.cn/module/index-detail.html?act_menu=1&indexCode=399001\n\n描述: 国证指数-历史样本数据，返回所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                           |\n|--------|-----|--------------------------------------------------------------|\n| symbol | str | symbol='399005'; 从 **ak.index_all_cni()** 接口获取指数代码           |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 日期     | object  | -        |\n| 样本代码   | object  | -        |\n| 样本简称   | object  | -        |\n| 所属行业   | object  | -        |\n| 自由流通市值 | float64 | 注意单位: 亿元 |\n| 总市值    | float64 | 注意单位: 亿元 |\n| 权重     | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_detail_hist_cni_df = ak.index_detail_hist_cni(symbol='399005')\nprint(index_detail_hist_cni_df)\n```\n\n数据示例\n\n```\n      日期    样本代码   样本简称  所属行业      总市值    权重\n0      2025-12-31  000001   平安银行    金融  2214.22  0.62\n1      2025-12-31  000002  万  科Ａ   房地产   452.18  0.20\n2      2025-12-31  000009   中国宝安    工业   254.05  0.11\n3      2025-12-31  000021    深科技  信息技术   397.84  0.17\n4      2025-12-31  000027   深圳能源  公用事业   310.18  0.05\n...           ...     ...    ...   ...      ...   ...\n30495  2020-12-31  300782    卓胜微  信息技术  1026.97  0.46\n30496  2020-12-31  300783   三只松鼠  主要消费   164.77  0.03\n30497  2020-12-31  300803    指南针  信息技术   132.03  0.06\n30498  2020-12-31  300815    玉禾田    工业   128.57  0.03\n30499  2020-12-31  300999    金龙鱼  主要消费  5872.67  0.34\n[30500 rows x 6 columns]\n```\n\n#### 历史调样\n\n接口: index_detail_hist_adjust_cni\n\n目标地址: http://www.cnindex.com.cn/module/index-detail.html?act_menu=1&indexCode=399001\n\n描述: 国证指数-样本详情-历史调样\n\n输入参数\n\n| 名称     | 类型  | 描述                                                 |\n|--------|-----|----------------------------------------------------|\n| symbol | str | symbol='399005'; 从 **ak.index_all_cni()** 接口获取指数代码 |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| 开始日期 | object | -   |\n| 结束日期 | object | -   |\n| 样本代码 | object | -   |\n| 样本简称 | object | -   |\n| 所属行业 | object | -   |\n| 调整类型 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_detail_hist_adjust_cni_df = ak.index_detail_hist_adjust_cni(symbol='399005')\nprint(index_detail_hist_adjust_cni_df)\n```\n\n数据示例\n\n```\n      开始日期        结束日期  样本代码  样本简称 所属行业 调整类型\n0     2024-06-17  2024-12-13  002001  新 和 成  医药卫生  OLD\n1     2024-06-17  2024-12-13  002007   华兰生物  医药卫生  OLD\n2     2024-06-17  2024-12-13  002008   大族激光  信息技术  OLD\n3     2024-06-17  2024-12-13  002025   航天电器  信息技术  OLD\n4     2024-06-17  2024-12-13  002027   分众传媒  可选消费  OLD\n...          ...         ...     ...    ...   ...  ...\n1185  2019-12-16  2020-06-12  002926   华西证券    金融  OLD\n1186  2019-12-16  2020-06-12  002938   鹏鼎控股  信息技术  OLD\n1187  2019-12-16  2020-06-12  002939   长城证券    金融  OLD\n1188  2019-12-16  2020-06-12  002958   青农商行    金融    +\n1189  2019-12-16  2020-06-12  003816   中国广核  公用事业  OLD\n[1190 rows x 6 columns]\n```\n\n### 期权波动率指数\n\n#### 50ETF 期权波动率指数\n\n接口: index_option_50etf_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?50ETF\n\n描述: 50ETF 期权波动率指数 QVIX; 又称中国版的恐慌指数\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| date  | object  | -   |\n| open  | float64 | -   |\n| high  | float64 | -   |\n| low   | float64 | -   |\n| close | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_50etf_qvix_df = ak.index_option_50etf_qvix()\nprint(index_option_50etf_qvix_df)\n```\n\n数据示例\n\n```\n            date       open       high        low  close\n0     2015-02-09  28.800000  28.756878  27.829555  28.63\n1     2015-02-10  28.630000  29.435024  28.499700  28.75\n2     2015-02-11  26.470710  26.470710  26.176691  26.44\n3     2015-02-12  26.389094  26.389094  25.773367  25.80\n4     2015-02-13  24.286958  24.286958  22.810473  23.41\n          ...        ...        ...        ...    ...\n2108  2023-10-13  15.290000  15.780000  15.180000  15.61\n2109  2023-10-16  16.270000  16.720000  16.060000  16.41\n2110  2023-10-17  16.470000  16.580000  15.800000  15.80\n2111  2023-10-18  15.810000  16.110000  15.450000  15.70\n2112  2023-10-19  16.060000  18.280000  16.060000  17.95\n[2113 rows x 5 columns]\n```\n\n#### 50ETF 期权波动率指数-分时\n\n接口: index_option_50etf_min_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?50ETF\n\n描述: 50ETF 期权波动率指数-分时\n\n限量: 单次返回最近交易日的分时数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| time  | object  | -   |\n| qvix  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_50etf_min_qvix_df = ak.index_option_50etf_min_qvix()\nprint(index_option_50etf_min_qvix_df)\n```\n\n数据示例\n\n```\n         time   qvix\n0     9:30:00  16.06\n1     9:31:11  16.52\n2     9:32:11  16.52\n3     9:33:11  16.70\n4     9:34:11  16.64\n..        ...    ...\n234  14:53:19  18.14\n235  14:54:19  18.06\n236  14:55:19  17.99\n237  14:56:19  17.95\n238  15:00:00    NaN\n[239 rows x 2 columns]\n```\n\n#### 300ETF 期权波动率指数\n\n接口: index_option_300etf_qvix\n\n目标地址: https://1.optbbs.com/s/vix.shtml?300ETF\n\n描述: 300ETF 期权波动率指数 QVIX\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| date  | object  | -   |\n| open  | float64 | -   |\n| high  | float64 | -   |\n| low   | float64 | -   |\n| close | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_300etf_qvix_df = ak.index_option_300etf_qvix()\nprint(index_option_300etf_qvix_df)\n```\n\n数据示例\n\n```\n            date   open   high    low  close\n0     2015-02-09    NaN    NaN    NaN    NaN\n1     2015-02-10    NaN    NaN    NaN    NaN\n2     2015-02-11    NaN    NaN    NaN    NaN\n3     2015-02-12    NaN    NaN    NaN    NaN\n4     2015-02-13    NaN    NaN    NaN    NaN\n          ...    ...    ...    ...    ...\n2108  2023-10-13  15.18  15.70  15.00  15.46\n2109  2023-10-16  16.06  17.04  15.89  16.67\n2110  2023-10-17  16.73  16.96  16.18  16.19\n2111  2023-10-18  16.42  16.42  15.92  16.25\n2112  2023-10-19  16.59  18.46  16.59  18.06\n[2113 rows x 5 columns]\n```\n\n#### 300ETF 期权波动率指数-分时\n\n接口: index_option_300etf_min_qvix\n\n目标地址: https://1.optbbs.com/s/vix.shtml?300ETF\n\n描述: 300ETF 期权波动率指数-分时\n\n限量: 单次返回最近交易日的分时数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| time  | object  | -   |\n| qvix  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_300etf_min_qvix_df = ak.index_option_300etf_min_qvix()\nprint(index_option_300etf_min_qvix_df)\n```\n\n数据示例\n\n```\n         time   qvix\n0     9:30:00  16.59\n1     9:31:11  16.96\n2     9:32:11  17.13\n3     9:33:11  17.44\n4     9:34:11  17.39\n..        ...    ...\n234  14:53:19  18.30\n235  14:54:19  18.25\n236  14:55:19  18.17\n237  14:56:19  18.06\n238  15:00:00    NaN\n[239 rows x 2 columns]\n```\n\n#### 500ETF 期权波动率指数\n\n接口: index_option_500etf_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?500ETF\n\n描述: 500ETF 期权波动率指数 QVIX\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| date  | object  | -   |\n| open  | float64 | -   |\n| high  | float64 | -   |\n| low   | float64 | -   |\n| close | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_500etf_qvix_df = ak.index_option_500etf_qvix()\nprint(index_option_500etf_qvix_df)\n```\n\n数据示例\n\n```\n            date   open   high    low  close\n0     2015-02-09    NaN    NaN    NaN    NaN\n1     2015-02-10    NaN    NaN    NaN    NaN\n2     2015-02-11    NaN    NaN    NaN    NaN\n3     2015-02-12    NaN    NaN    NaN    NaN\n4     2015-02-13    NaN    NaN    NaN    NaN\n...          ...    ...    ...    ...    ...\n2393  2024-12-24  27.43  27.43  25.78  26.17\n2394  2024-12-25  26.47  27.60  26.10  26.74\n2395  2024-12-26  27.16  27.16  24.16  24.51\n2396  2024-12-27  24.74  24.76  23.48  23.75\n2397  2024-12-30  24.64  24.84  23.86  24.44\n[2398 rows x 5 columns]\n```\n\n#### 500ETF 期权波动率指数-分时\n\n接口: index_option_500etf_min_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?500ETF\n\n描述: 500ETF 期权波动率指数-分时\n\n限量: 单次返回最近交易日的分时数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| time  | object  | -   |\n| qvix  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_500etf_min_qvix_df = ak.index_option_500etf_min_qvix()\nprint(index_option_500etf_min_qvix_df)\n```\n\n数据示例\n\n```\n         time   qvix\n0     9:30:00  24.61\n1     9:31:51  24.61\n2     9:32:51  24.68\n3     9:33:51  24.69\n4     9:34:51  24.73\n..        ...    ...\n234  14:53:59  25.22\n235  14:54:59  25.15\n236  14:55:59  25.17\n237  14:56:59  25.21\n238  15:00:59  25.21\n[239 rows x 2 columns]\n```\n\n#### 创业板 期权波动率指数\n\n接口: index_option_cyb_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?CYB\n\n描述: 创业板 期权波动率指数 QVIX\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| date  | object  | -   |\n| open  | float64 | -   |\n| high  | float64 | -   |\n| low   | float64 | -   |\n| close | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_cyb_qvix_df = ak.index_option_cyb_qvix()\nprint(index_option_cyb_qvix_df)\n```\n\n数据示例\n\n```\n            date   open   high    low  close\n0     2015-02-09    NaN    NaN    NaN    NaN\n1     2015-02-10    NaN    NaN    NaN    NaN\n2     2015-02-11    NaN    NaN    NaN    NaN\n3     2015-02-12    NaN    NaN    NaN    NaN\n4     2015-02-13    NaN    NaN    NaN    NaN\n...          ...    ...    ...    ...    ...\n2393  2024-12-24  32.25  32.25  29.97  30.39\n2394  2024-12-25  30.41  30.53  29.23  29.84\n2395  2024-12-26  30.12  30.12  27.44  27.69\n2396  2024-12-27  27.72  27.91  26.77  26.95\n2397  2024-12-30  27.95  27.98  26.90  27.58\n[2398 rows x 5 columns]\n```\n\n#### 创业板 期权波动率指数-分时\n\n接口: index_option_cyb_min_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?CYB\n\n描述: 创业板 期权波动率指数-分时\n\n限量: 单次返回最近交易日的分时数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| time  | object  | -   |\n| qvix  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_cyb_min_qvix_df = ak.index_option_cyb_min_qvix()\nprint(index_option_cyb_min_qvix_df)\n```\n\n数据示例\n\n```\n         time   qvix\n0     9:30:00  27.85\n1     9:31:51  27.76\n2     9:32:51  27.84\n3     9:33:51  27.88\n4     9:34:51  27.71\n..        ...    ...\n234  14:53:59  28.53\n235  14:54:59  28.61\n236  14:55:59  28.61\n237  14:56:59  28.55\n238  15:00:59  28.49\n[239 rows x 2 columns]\n```\n\n#### 科创板 期权波动率指数\n\n接口: index_option_kcb_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?KCB\n\n描述: 科创板 期权波动率指数 QVIX\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| date  | object  | -   |\n| open  | float64 | -   |\n| high  | float64 | -   |\n| low   | float64 | -   |\n| close | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_kcb_qvix_df = ak.index_option_kcb_qvix()\nprint(index_option_kcb_qvix_df)\n```\n\n数据示例\n\n```\n            date   open   high    low  close\n0     2015-02-09    NaN    NaN    NaN    NaN\n1     2015-02-10    NaN    NaN    NaN    NaN\n2     2015-02-11    NaN    NaN    NaN    NaN\n3     2015-02-12    NaN    NaN    NaN    NaN\n4     2015-02-13    NaN    NaN    NaN    NaN\n...          ...    ...    ...    ...    ...\n2393  2024-12-24  37.88  37.93  36.76  37.03\n2394  2024-12-25  37.04  37.67  36.18  36.18\n2395  2024-12-26  35.92  36.68  33.78  34.01\n2396  2024-12-27  32.66  33.48  32.37  32.54\n2397  2024-12-30  33.50  33.80  33.04  33.37\n[2398 rows x 5 columns]\n```\n\n#### 科创板 期权波动率指数-分时\n\n接口: index_option_kcb_min_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?KCB\n\n描述: 科创板 期权波动率指数-分时\n\n限量: 单次返回最近交易日的分时数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| time  | object  | -   |\n| qvix  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_kcb_min_qvix_df = ak.index_option_kcb_min_qvix()\nprint(index_option_kcb_min_qvix_df)\n```\n\n数据示例\n\n```\n         time   qvix\n0     9:30:00  29.91\n1     9:31:51  31.34\n2     9:32:51  31.34\n3     9:33:51  33.52\n4     9:34:51  33.82\n..        ...    ...\n234  14:53:59  34.07\n235  14:54:59  34.06\n236  14:55:59  34.06\n237  14:56:59  33.91\n238  15:00:59  33.91\n[239 rows x 2 columns]\n```\n\n#### 深证100ETF 期权波动率指数\n\n接口: index_option_100etf_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?100ETF\n\n描述: 深证100ETF 期权波动率指数 QVIX\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| date  | object  | -   |\n| open  | float64 | -   |\n| high  | float64 | -   |\n| low   | float64 | -   |\n| close | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_100etf_qvix_df = ak.index_option_100etf_qvix()\nprint(index_option_100etf_qvix_df)\n```\n\n数据示例\n\n```\n            date   open   high    low  close\n0     2015-02-09    NaN    NaN    NaN    NaN\n1     2015-02-10    NaN    NaN    NaN    NaN\n2     2015-02-11    NaN    NaN    NaN    NaN\n3     2015-02-12    NaN    NaN    NaN    NaN\n4     2015-02-13    NaN    NaN    NaN    NaN\n...          ...    ...    ...    ...    ...\n2393  2024-12-24  25.46  25.46  24.05  24.21\n2394  2024-12-25  24.49  24.61  23.72  24.01\n2395  2024-12-26  24.40  24.40  22.18  22.46\n2396  2024-12-27  22.81  23.10  22.04  22.05\n2397  2024-12-30  23.15  23.15  22.23  22.44\n[2398 rows x 5 columns]\n```\n\n#### 深证100ETF 期权波动率指数-分时\n\n接口: index_option_100etf_min_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?100ETF\n\n描述: 深证100ETF 期权波动率指数-分时\n\n限量: 单次返回最近交易日的分时数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| time  | object  | -   |\n| qvix  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_100etf_min_qvix_df = ak.index_option_100etf_min_qvix()\nprint(index_option_100etf_min_qvix_df)\n```\n\n数据示例\n\n```\n         time   qvix\n0     9:30:00  22.80\n1     9:31:51  22.95\n2     9:32:51  22.85\n3     9:33:51  22.75\n4     9:34:51  22.66\n..        ...    ...\n234  14:53:59  23.05\n235  14:54:59  22.90\n236  14:55:59  23.02\n237  14:56:59  23.05\n238  15:00:59  23.04\n[239 rows x 2 columns]\n```\n\n#### 中证300股指 期权波动率指数\n\n接口: index_option_300index_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?Index\n\n描述: 中证300股指 期权波动率指数 QVIX\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| date  | object  | -   |\n| open  | float64 | -   |\n| high  | float64 | -   |\n| low   | float64 | -   |\n| close | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_300index_qvix_df = ak.index_option_300index_qvix()\nprint(index_option_300index_qvix_df)\n```\n\n数据示例\n\n```\n            date   open   high    low  close\n0     2015-02-09    NaN    NaN    NaN    NaN\n1     2015-02-10    NaN    NaN    NaN    NaN\n2     2015-02-11    NaN    NaN    NaN    NaN\n3     2015-02-12    NaN    NaN    NaN    NaN\n4     2015-02-13    NaN    NaN    NaN    NaN\n...          ...    ...    ...    ...    ...\n2393  2024-12-24  21.63  21.72  20.88  21.26\n2394  2024-12-25  21.53  21.53  20.94  21.07\n2395  2024-12-26  21.42  21.42  20.38  20.46\n2396  2024-12-27  20.75  20.88  20.04  20.13\n2397  2024-12-30  20.85  20.85  19.98  20.06\n[2398 rows x 5 columns]\n```\n\n#### 中证300股指 期权波动率指数-分时\n\n接口: index_option_300index_min_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?Index\n\n描述: 中证300股指 期权波动率指数-分时\n\n限量: 单次返回最近交易日的分时数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| time  | object  | -   |\n| qvix  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_300index_min_qvix_df = ak.index_option_300index_min_qvix()\nprint(index_option_300index_min_qvix_df)\n```\n\n数据示例\n\n```\n         time   qvix\n0     9:30:00  20.32\n1     9:31:51  20.25\n2     9:32:51  20.23\n3     9:33:51  20.31\n4     9:34:51  20.40\n..        ...    ...\n234  14:53:59  20.06\n235  14:54:59  20.00\n236  14:55:59  19.97\n237  14:56:59  20.03\n238  15:00:59  20.08\n[239 rows x 2 columns]\n```\n\n#### 中证1000股指 期权波动率指数\n\n接口: index_option_1000index_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?Index1000\n\n描述: 中证1000股指 期权波动率指数 QVIX\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| date  | object  | -   |\n| open  | float64 | -   |\n| high  | float64 | -   |\n| low   | float64 | -   |\n| close | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_1000index_qvix_df = ak.index_option_1000index_qvix()\nprint(index_option_1000index_qvix_df)\n```\n\n数据示例\n\n```\n            date   open   high    low  close\n0     2015-02-09    NaN    NaN    NaN    NaN\n1     2015-02-10    NaN    NaN    NaN    NaN\n2     2015-02-11    NaN    NaN    NaN    NaN\n3     2015-02-12    NaN    NaN    NaN    NaN\n4     2015-02-13    NaN    NaN    NaN    NaN\n...          ...    ...    ...    ...    ...\n2393  2024-12-24  28.95  29.11  28.07  28.23\n2394  2024-12-25  28.16  29.28  28.16  28.19\n2395  2024-12-26  28.54  28.54  26.74  26.90\n2396  2024-12-27  27.09  27.17  25.60  25.98\n2397  2024-12-30  26.85  27.04  26.15  26.50\n[2398 rows x 5 columns]\n```\n\n#### 中证1000股指 期权波动率指数-分时\n\n接口: index_option_1000index_min_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?Index1000\n\n描述: 中证1000股指 期权波动率指数-分时\n\n限量: 单次返回最近交易日的分时数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| time  | object  | -   |\n| qvix  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_1000index_min_qvix_df = ak.index_option_1000index_min_qvix()\nprint(index_option_1000index_min_qvix_df)\n```\n\n数据示例\n\n```\n         time   qvix\n0     9:30:00  26.79\n1     9:31:51  26.84\n2     9:32:51  26.90\n3     9:33:51  26.93\n4     9:34:51  26.78\n..        ...    ...\n234  14:53:59  27.50\n235  14:54:59  27.47\n236  14:55:59  27.51\n237  14:56:59  27.55\n238  15:00:59  27.55\n[239 rows x 2 columns]\n```\n\n#### 上证50股指 期权波动率指数\n\n接口: index_option_50index_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?50index\n\n描述: 上证50股指 期权波动率指数 QVIX\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| date  | object  | -   |\n| open  | float64 | -   |\n| high  | float64 | -   |\n| low   | float64 | -   |\n| close | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_50index_qvix_df = ak.index_option_50index_qvix()\nprint(index_option_50index_qvix_df)\n```\n\n数据示例\n\n```\n            date   open   high    low  close\n0     2015-02-09    NaN    NaN    NaN    NaN\n1     2015-02-10    NaN    NaN    NaN    NaN\n2     2015-02-11    NaN    NaN    NaN    NaN\n3     2015-02-12    NaN    NaN    NaN    NaN\n4     2015-02-13    NaN    NaN    NaN    NaN\n...          ...    ...    ...    ...    ...\n2393  2024-12-24  20.78  20.82  20.08  20.43\n2394  2024-12-25  20.72  21.19  20.43  20.67\n2395  2024-12-26  20.74  20.74  19.67  19.81\n2396  2024-12-27  19.96  20.10  19.43  19.54\n2397  2024-12-30  20.36  20.40  19.65  19.84\n[2398 rows x 5 columns]\n```\n\n#### 上证50股指 期权波动率指数-分时\n\n接口: index_option_50index_min_qvix\n\n目标地址: http://1.optbbs.com/s/vix.shtml?50index\n\n描述: 上证50股指 期权波动率指数-分时\n\n限量: 单次返回最近交易日的分时数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| time  | object  | -   |\n| qvix  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_option_50index_min_qvix_df = ak.index_option_50index_min_qvix()\nprint(index_option_50index_min_qvix_df)\n```\n\n数据示例\n\n```\n         time   qvix\n0     9:30:00  20.05\n1     9:31:51  20.24\n2     9:32:51  20.25\n3     9:33:51  20.15\n4     9:34:51  20.13\n..        ...    ...\n234  14:53:59  19.61\n235  14:54:59  19.73\n236  14:55:59  19.70\n237  14:56:59  19.62\n238  15:00:59  19.57\n[239 rows x 2 columns]\n```\n\n### 申万一级行业信息\n\n接口: sw_index_first_info\n\n目标地址: https://legulegu.com/stockdata/sw-industry-overview#level1\n\n描述: 申万一级行业信息\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称         | 类型      | 描述  |\n|------------|---------|-----|\n| 行业代码       | object  |     |\n| 行业名称       | object  |     |\n| 成份个数       | int64   |     |\n| 静态市盈率      | float64 |     |\n| TTM(滚动)市盈率 | float64 |     |\n| 市净率        | float64 |     |\n| 静态股息率      | float64 |     |\n\n接口示例\n\n```python\nimport akshare as ak\n\nsw_index_first_info_df = ak.sw_index_first_info()\nprint(sw_index_first_info_df)\n```\n\n数据示例\n\n```\n    行业代码  行业名称  成份个数  静态市盈率  TTM(滚动)市盈率   市净率  静态股息率\n0   801010.SI  农林牧渔    97  43.49       48.28  2.76   1.39\n1   801030.SI  基础化工   341  14.94       13.45  2.40   1.48\n2   801040.SI    钢铁    44   6.83        9.66  0.92   6.83\n3   801050.SI  有色金属   128  22.40       15.26  2.57   0.92\n4   801080.SI    电子   296  21.74       23.02  2.83   0.94\n5   801880.SI    汽车   238  27.56       29.76  2.25   1.69\n6   801110.SI  家用电器    79  16.70       15.68  2.90   2.97\n7   801120.SI  食品饮料   118  38.60       35.83  7.54   1.22\n8   801130.SI  纺织服饰   112  14.58       14.85  1.75   3.68\n9   801140.SI  轻工制造   142  19.92       23.64  2.26   1.77\n10  801150.SI  医药生物   353  24.22       22.19  3.08   1.15\n11  801160.SI  公用事业   122  20.54       19.11  1.90   2.41\n12  801170.SI  交通运输   123   9.20        8.07  1.24   2.16\n13  801180.SI   房地产   115   9.14       10.07  0.94   5.05\n14  801200.SI  商贸零售   104  23.41       25.75  2.29   1.35\n15  801210.SI  社会服务    73  43.26       42.17  3.18   0.51\n16  801780.SI    银行    42   4.67        4.50  0.54   5.52\n17  801790.SI  非银金融    87  11.43       12.91  1.16   2.79\n18  801230.SI    综合    24  48.95       40.81  2.07   0.66\n19  801710.SI  建筑材料    74   8.47        9.11  1.35   2.96\n20  801720.SI  建筑装饰   156   7.64        7.29  0.84   2.55\n21  801730.SI  电力设备   261  39.23       32.34  4.26   0.46\n22  801890.SI  机械设备   390  21.37       24.12  2.09   1.67\n23  801740.SI  国防军工    98  54.96       51.40  3.82   0.43\n24  801750.SI   计算机   265  30.96       32.51  3.03   1.03\n25  801760.SI    传媒   138  16.00       17.11  1.62   2.67\n26  801770.SI    通信   105  15.35       13.98  1.27   1.06\n27  801950.SI    煤炭    38  11.37        7.84  1.70   3.54\n28  801960.SI  石油石化    47  10.37        8.33  0.99   4.07\n29  801970.SI    环保   108  16.02       18.38  1.55   1.77\n30  801980.SI  美容护理    28  40.38       41.16  5.36   0.78\n```\n\n### 申万二级行业信息\n\n接口: sw_index_second_info\n\n目标地址: https://legulegu.com/stockdata/sw-industry-overview#level1\n\n描述: 申万二级行业信息\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称         | 类型      | 描述  |\n|------------|---------|-----|\n| 行业代码       | object  |     |\n| 行业名称       | object  |     |\n| 上级行业       | object  |     |\n| 成份个数       | int64   |     |\n| 静态市盈率      | float64 |     |\n| TTM(滚动)市盈率 | float64 |     |\n| 市净率        | float64 |     |\n| 静态股息率      | float64 |     |\n\n接口示例\n\n```python\nimport akshare as ak\n\nsw_index_second_info_df = ak.sw_index_second_info()\nprint(sw_index_second_info_df)\n```\n\n数据示例\n\n```\n     行业代码   行业名称  上级行业  成份个数 静态市盈率 TTM(滚动)市盈率 市净率 静态股息率\n0    801016.SI    种植业  农林牧渔    19  35.38       37.23  2.69   2.05\n1    801015.SI     渔业  农林牧渔     6  29.29       30.42  1.04   0.88\n2    801014.SI     饲料  农林牧渔    16  33.07       22.95  3.80   1.22\n3    801012.SI  农产品加工  农林牧渔    22  35.96       46.34  2.03   1.26\n4    801017.SI    养殖业  农林牧渔    21  10.64        6.61  2.08   1.44\n..         ...    ...   ...   ...    ...         ...   ...    ...\n119  801963.SI  炼化及贸易  石油石化    31  11.03       11.54  1.04   5.05\n120  801971.SI   环境治理    环保   105  18.89       17.79  1.47   1.89\n121  801972.SI  环保设备Ⅱ    环保    28  24.18       25.12  1.67   2.27\n122  801981.SI   个护用品  美容护理    13  32.54       31.44  2.46   2.59\n123  801982.SI    化妆品  美容护理    15  26.26       28.75  2.89   1.21\n[124 rows x 8 columns]\n```\n\n### 申万三级行业信息\n\n接口: sw_index_third_info\n\n目标地址: https://legulegu.com/stockdata/sw-industry-overview#level1\n\n描述: 申万三级行业信息\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称         | 类型      | 描述  |\n|------------|---------|-----|\n| 行业代码       | object  |     |\n| 行业名称       | object  |     |\n| 成份个数       | int64   |     |\n| 静态市盈率      | float64 |     |\n| TTM(滚动)市盈率 | float64 |     |\n| 市净率        | float64 |     |\n| 静态股息率      | float64 |     |\n\n接口示例\n\n```python\nimport akshare as ak\n\nsw_index_third_info_df = ak.sw_index_third_info()\nprint(sw_index_third_info_df)\n```\n\n数据示例\n\n```\n     行业代码      行业名称   上级行业  成份个数  静态市盈率  TTM(滚动)市盈率 市净率 静态股息率\n0    850111.SI        种子    种植业     8  49.00       53.27  3.63   0.78\n1    850113.SI     其他种植业    种植业     5  71.56       67.46  2.31   0.27\n2    850122.SI      水产养殖     渔业     4  70.32       82.58  1.03   0.55\n3    850142.SI      畜禽饲料     饲料     9  28.63       64.62  1.84   2.05\n4    850151.SI      果蔬加工  农产品加工     5  19.19       30.98  2.97   1.16\n..         ...       ...    ...   ...    ...         ...   ...    ...\n253  859714.SI    综合环境治理   环境治理    14  11.03       10.15  2.33   1.67\n254  859721.SI     环保设备Ⅲ  环保设备Ⅱ    28  24.18       25.12  1.67   2.27\n255  859811.SI      生活用纸   个护用品     9  29.10       30.32  2.23   2.72\n256  859821.SI  化妆品制造及其他    化妆品     7  23.92       28.49  2.17   1.33\n257  859822.SI     品牌化妆品    化妆品     8  26.90       28.81  3.14   1.18\n[258 rows x 8 columns]\n```\n\n### 申万三级行业成份\n\n接口: sw_index_third_cons\n\n目标地址: https://legulegu.com/stockdata/index-composition?industryCode=851921.SI\n\n描述: 申万三级行业成份\n\n输入参数\n\n| 名称     | 类型  | 描述                                                               |\n|--------|-----|------------------------------------------------------------------|\n| symbol | str | symbol=\"850111.SI\"; 行业代码; 可以通过 ak.sw_index_third_info() 获取所有行业代码 |\n\n输出参数\n\n| 名称               | 类型      | 描述       |\n|------------------|---------|----------|\n| 序号               | int64   |          |\n| 股票代码             | object  |          |\n| 股票简称             | object  |          |\n| 纳入时间             | object  |          |\n| 申万1级             | object  |          |\n| 申万2级             | object  |          |\n| 申万3级             | object  |          |\n| 价格               | float64 |          |\n| 市盈率              | float64 |          |\n| 市盈率ttm           | float64 |          |\n| 市净率              | float64 |          |\n| 股息率              | float64 | 注意单位: %  |\n| 市值               | float64 | 注意单位: 亿元 |\n| 归母净利润同比增长(09-30) | float64 | 注意单位: %  |\n| 归母净利润同比增长(06-30) | float64 | 注意单位: %  |\n| 营业收入同比增长(09-30)  | float64 | 注意单位: %  |\n| 营业收入同比增长(06-30)  | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nsw_index_third_cons_df = ak.sw_index_third_cons(symbol=\"850111.SI\")\nprint(sw_index_third_cons_df)\n```\n\n数据示例\n\n```\n   序号 股票代码  股票简称  ... 归母净利润同比增长(06-30) 营业收入同比增长(09-30) 营业收入同比增长(06-30)\n0   1  600313.SH  农发种业  ...          1433.66           35.62           18.57\n1   2  000713.SZ  丰乐种业  ...           -26.10            3.59           -5.45\n2   3  000998.SZ  隆平高科  ...          -421.52           55.20            6.98\n3   4  300087.SZ  荃银高科  ...           421.95           28.09           42.46\n4   5  300189.SZ  神农科技  ...           -39.18          -12.49          -12.68\n5   6  600371.SH  万向德农  ...           174.47           11.65            3.10\n6   7  600354.SH  敦煌种业  ...           -55.18           -8.59          -13.23\n7   8  002041.SZ  登海种业  ...             6.67           10.01            6.12\n```\n\n### 商品现货价格指数\n\n接口: spot_goods\n\n目标地址: http://finance.sina.com.cn/futuremarket/spotprice.shtml#titlePos_0\n\n描述: 新浪财经-商品现货价格指数\n\n输入参数\n\n| 名称     | 类型  | 描述                                      |\n|--------|-----|-----------------------------------------|\n| symbol | str | symbol=\"波罗的海干散货指数\"; 指数目录请参考 **现货指数一览表** |\n\n现货指数一览表\n\n| 名称        | 时间段     |\n|-----------|---------|\n| 波罗的海干散货指数 | 2007-至今 |\n| 钢坯价格指数    | 2005-至今 |\n| 澳大利亚粉矿价格  | 2020-至今 |\n\n输出参数\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 日期  | object  |     |\n| 指数  | float64 |     |\n| 涨跌额 | float64 |     |\n| 涨跌幅 | float64 |     |\n\n接口示例\n\n```python\nimport akshare as ak\n\nspot_goods_df = ak.spot_goods(symbol=\"波罗的海干散货指数\")\nprint(spot_goods_df)\n```\n\n数据示例\n\n```\n         日期      指数    涨跌额   涨跌幅\n0     2006-06-23  2808.0   83.0  0.0305\n1     2006-06-30  2964.0  156.0  0.0556\n2     2006-07-07  2870.0  -94.0 -0.0317\n3     2006-07-14  2968.0   98.0  0.0341\n4     2006-07-21  3191.0  223.0  0.0751\n...          ...     ...    ...     ...\n3673  2024-12-18  1028.0  -25.0 -2.3700\n3674  2024-12-19   976.0  -52.0 -5.0600\n3675  2024-12-20   990.0   14.0  1.4300\n3676  2024-12-23   994.0    4.0  0.4000\n3677  2024-12-24   997.0    3.0  0.3000\n[3678 rows x 4 columns]\n```\n\n### 义乌小商品指数\n\n接口: index_yw\n\n目标地址: https://www.ywindex.com/Home/Product/index/\n\n描述: 指定 symbol 的义乌小商品指数的近期历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                    |\n|--------|-----|-------------------------------------------------------|\n| symbol | str | symbol=\"周价格指数\"; choice of {\"周价格指数\", \"月价格指数\", \"月景气指数\"} |\n\n输出参数-周价格指数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 期数     | object  | -   |\n| 价格指数   | float64 | -   |\n| 场内价格指数 | float64 | -   |\n| 网上价格指数 | float64 | -   |\n| 订单价格指数 | float64 | -   |\n| 出口价格指数 | float64 | -   |\n\n接口示例-周价格指数\n\n```python\nimport akshare as ak\n\nindex_yw_df = ak.index_yw(symbol=\"周价格指数\")\nprint(index_yw_df)\n```\n\n数据示例-周价格指数\n\n```\n            期数    价格指数  场内价格指数  网上价格指数  订单价格指数  出口价格指数\n0   2023-12-25  102.39  101.53  113.54  100.09  103.37\n1   2024-01-01  102.56  102.08  115.00  101.14  105.93\n2   2024-01-08  101.93  101.67  113.70  104.33  108.47\n3   2024-01-15  102.46  102.53  113.25  102.35  104.82\n4   2024-01-22  101.36  101.33  113.67  102.51  104.90\n5   2024-01-29  101.70  101.72  111.63  100.24  102.08\n6   2024-03-11  101.48  101.62  111.36  100.23  101.47\n7   2024-03-18  101.72  101.92  112.56  100.06  101.79\n8   2024-03-25  102.20  103.63  114.80  100.22  102.33\n9   2024-04-01  101.65  102.00  110.17  101.87  104.52\n10  2024-04-08  101.87  102.04  105.75  103.16  103.07\n11  2024-04-15  102.13  102.26  104.55  101.91  102.12\n```\n\n输出参数-月价格指数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 期数     | object  | -   |\n| 价格指数   | float64 | -   |\n| 场内价格指数 | float64 | -   |\n| 网上价格指数 | float64 | -   |\n| 订单价格指数 | float64 | -   |\n| 出口价格指数 | float64 | -   |\n\n接口示例-月价格指数\n\n```python\nimport akshare as ak\n\nindex_yw_df = ak.index_yw(symbol=\"月价格指数\")\nprint(index_yw_df)\n```\n\n数据示例-月价格指数\n\n```\n     期数    价格指数 场内价格指数 网上价格指数 订单价格指数 出口价格指数\n0   2023-04-01  100.77  100.94  100.34  100.14  100.09\n1   2023-05-01  100.91  101.03  100.42  100.09  100.09\n2   2023-06-01  100.82  101.03  100.05  100.04  100.16\n3   2023-07-01  100.93  101.21  100.04  100.10  100.39\n4   2023-08-01  101.10  101.46   99.15  100.10  100.23\n5   2023-09-01  100.98  101.29  100.02  100.07  100.10\n6   2023-10-01  100.89  101.14   99.19  100.11  100.05\n7   2023-11-01  101.29  101.59  100.02  100.03  100.38\n8   2023-12-01  101.75  102.07  100.02  100.15  100.40\n9   2024-01-01  101.85  102.01  100.02  100.20  100.29\n10  2024-02-01  101.95  102.04  100.03  100.19  100.18\n11  2024-04-01  102.23  102.97  100.39  100.19  100.88\n```\n\n输出参数-月景气指数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 期数     | object  | -   |\n| 景气指数   | float64 | -   |\n| 规模指数   | float64 | -   |\n| 效益指数   | float64 | -   |\n| 市场信心指数 | float64 | -   |\n\n接口示例-月景气指数\n\n```python\nimport akshare as ak\n\nindex_yw_df = ak.index_yw(symbol=\"月景气指数\")\nprint(index_yw_df)\n```\n\n数据示例-月景气指数\n\n```\n       期数     景气指数   规模指数   效益指数  市场信心指数\n0   2023-04-01  1330.19  1096.32  1964.88  1007.34\n1   2023-05-01  1352.34  1089.34  2046.42  1008.92\n2   2023-06-01  1363.78  1109.05  2048.20  1018.99\n3   2023-07-01  1344.06  1064.82  2049.21  1011.24\n4   2023-08-01  1379.90  1113.82  2105.74  1008.84\n5   2023-09-01  1390.83  1118.74  2134.23  1010.20\n6   2023-10-01  1402.84  1109.48  2180.28  1016.54\n7   2023-11-01  1416.85  1139.37  2188.47  1015.19\n8   2023-12-01  1419.98  1137.22  2203.60  1013.36\n9   2024-01-01  1420.00  1131.98  2211.50  1012.54\n10  2024-02-01  1393.94  1099.76  2166.03  1014.11\n11  2024-04-01  1413.93  1101.44  2237.66  1006.87\n```\n\n### 柯桥纺织品指数\n\n接口: index_kq_fz\n\n目标地址: http://www.kqindex.cn/flzs/jiage\n\n描述: 指定 symbol 的柯桥纺织品指数的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                |\n|--------|-----|---------------------------------------------------|\n| symbol | str | symbol=\"价格指数\"; choice of {'价格指数', '景气指数', '外贸指数'} |\n\n输出参数-价格指数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 期次  | object  | -       |\n| 指数  | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n\n接口示例-价格指数\n\n```python\nimport akshare as ak\n\nindex_kq_fz_df = ak.index_kq_fz(symbol=\"价格指数\")\nprint(index_kq_fz_df)\n```\n\n数据示例-价格指数\n\n```\n    期次      指数    涨跌幅\n0   2007-06-04  112.88    NaN\n1   2007-06-11   97.77 -13.39\n2   2007-06-18   97.98   0.21\n3   2007-06-25   99.86   1.92\n4   2007-07-02  100.44   0.58\n..         ...     ...    ...\n751 2023-05-15  106.05  -0.06\n752 2023-05-22  106.01  -0.04\n753 2023-05-29  105.71  -0.28\n754 2023-06-05  105.97   0.25\n755 2023-06-12  106.30   0.31\n[756 rows x 3 columns]\n```\n\n输出参数-景气指数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 期次     | object  | -       |\n| 总景气指数  | float64 | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 流通景气指数 | float64 | -       |\n| 生产景气指数 | float64 | -       |\n\n接口示例-景气指数\n\n```python\nimport akshare as ak\n\nindex_kq_fz_df = ak.index_kq_fz(symbol=\"景气指数\")\nprint(index_kq_fz_df)\n```\n\n数据示例-景气指数\n\n```\n    期次    总景气指数    涨跌幅   流通景气指数   生产景气指数\n0    2007年06月  1105.95    NaN   862.60  1349.30\n1    2007年07月  1090.81  -1.37   855.77  1325.86\n2    2007年08月  1254.97  15.05   830.11  1679.83\n3    2007年09月  1137.48  -9.36   837.70  1437.26\n4    2007年10月  1136.22  -0.11   825.53  1446.91\n..        ...      ...    ...      ...      ...\n169  2022年12月  1115.95  -3.71  1183.50   908.33\n170  2023年02月  1140.71   2.22  1233.00   916.41\n171  2023年03月  1235.31   8.29  1389.60   881.62\n172  2023年04月  1307.75   5.86  1485.11   902.97\n173  2023年05月  1321.09   1.02  1473.07   932.58\n[174 rows x 5 columns]\n```\n\n输出参数-外贸指数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 期次       | object  | -       |\n| 价格指数     | float64 | -       |\n| 价格指数-涨跌幅 | float64 | 注意单位: % |\n| 景气指数     | float64 | -       |\n| 景气指数-涨跌幅 | float64 | 注意单位: % |\n\n接口示例-外贸指数\n\n```python\nimport akshare as ak\n\nindex_kq_fz_df = ak.index_kq_fz(symbol=\"外贸指数\")\nprint(index_kq_fz_df)\n```\n\n数据示例-外贸指数\n\n```\n     期次    价格指数  价格指数-涨跌幅     景气指数  景气指数-涨跌幅\n0    2007年06月  108.57       NaN  1465.48       NaN\n1    2007年07月   99.57     -8.29  1376.74     -6.06\n2    2007年08月   96.34     -3.24  1453.39      5.57\n3    2007年09月   96.42      0.08  1371.33     -5.65\n4    2007年10月   93.78     -2.74  1395.79      1.78\n..        ...     ...       ...      ...       ...\n172  2023年01月  181.50      3.31   693.81    -12.49\n173  2023年02月  162.02    -10.73   717.58      3.43\n174  2023年03月  173.36      7.00   660.49     -7.96\n175  2023年04月  158.99     -8.29   716.59      8.49\n176  2023年05月  158.88     -0.07   715.59     -0.14\n[177 rows x 5 columns]\n```\n\n### 柯桥时尚指数\n\n接口: index_kq_fashion\n\n目标地址: http://ss.kqindex.cn:9559/rinder_web_kqsszs/index/index_page.do\n\n描述: 指定 symbol 的柯桥时尚指数的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                                                                                                                              |\n|--------|-----|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"柯桥时尚指数\"; choice of {'柯桥时尚指数', '时尚创意指数', '时尚设计人才数', '新花型推出数', '创意产品成交数', '创意企业数量', '时尚活跃度指数', '电商运行数', '时尚平台拓展数', '新产品销售额占比', '企业合作占比', '品牌传播费用', '时尚推广度指数', '国际交流合作次数', '企业参展次数', '外商驻点数量变化', '时尚评价指数'} |\n\n输出参数-柯桥时尚指数\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 日期  | object  | -   |\n| 指数  | float64 | -   |\n| 涨跌值 | float64 | -   |\n| 涨跌幅 | float64 | -   |\n\n接口示例-柯桥时尚指数\n\n```python\nimport akshare as ak\n\nindex_kq_fashion_df = ak.index_kq_fashion(symbol='柯桥时尚指数')\nprint(index_kq_fashion_df)\n```\n\n数据示例-柯桥时尚指数\n\n```\n       日期          指数        涨跌值       涨跌幅\n0   2015-12-01  100.000000        NaN       NaN\n1   2016-03-01  107.702370   7.702370  0.077024\n2   2016-06-01  116.327075   8.624705  0.080079\n3   2016-09-01  124.746246   8.419171  0.072375\n4   2016-12-01  131.446198   6.699952  0.053709\n5   2017-03-01  115.246828 -16.199370 -0.123240\n6   2017-06-01  121.778800   6.531972  0.056678\n7   2017-09-01  137.934513  16.155713  0.132664\n8   2017-12-01  148.878758  10.944245  0.079344\n9   2018-03-01  129.129902 -19.748856 -0.132651\n10  2018-06-01  135.685608   6.555706  0.050768\n11  2018-09-30  147.089712  11.404103  0.084048\n12  2018-12-20  144.066155  -3.023557 -0.020556\n13  2019-03-29  134.076287  -9.989867 -0.069342\n14  2019-06-28  137.976039   3.899752  0.029086\n15  2019-09-25  145.249576   7.273537  0.052716\n16  2019-12-27  142.978397  -2.271179 -0.015636\n17  2020-03-12  115.442945 -27.535452 -0.192585\n18  2020-06-01  127.135395  11.692450  0.101283\n19  2020-09-30  138.919644  11.784249  0.092691\n20  2020-12-31  135.350774  -3.568870 -0.025690\n21  2021-03-31  130.154076  -5.196698 -0.038394\n22  2021-06-30  148.746904  18.592828  0.142852\n23  2021-09-30  151.610112   2.863208  0.019249\n24  2021-12-31  162.610118  11.000006  0.072555\n25  2022-03-31  175.577443  12.967325  0.079745\n26  2022-06-30  149.228725 -26.348719 -0.150069\n27  2022-09-30  132.967252 -16.261473 -0.108970\n28  2022-12-30  135.356038   2.388786  0.017965\n29  2023-03-31  126.944750  -8.411288 -0.062142\n```\n\n接口示例-时尚评价指数\n\n```python\nimport akshare as ak\n\nindex_kq_fashion_df = ak.index_kq_fashion(symbol='时尚评价指数')\nprint(index_kq_fashion_df)\n```\n\n数据示例-时尚评价指数\n\n```\n     日期          指数        涨跌值       涨跌幅\n0   2016-12-01  154.120000        NaN       NaN\n1   2017-03-01  154.120000   0.000000  0.000000\n2   2017-06-01  131.830000 -22.290000 -0.144628\n3   2017-09-01  129.720000  -2.110000 -0.016005\n4   2017-12-01  133.620000   3.900000  0.030065\n5   2018-03-01  115.280000 -18.340000 -0.137255\n6   2018-06-01  124.520000   9.240000  0.080153\n7   2018-09-30  116.717004  -7.802996 -0.062665\n8   2018-12-20  124.022727   7.305723  0.062593\n9   2019-03-29  124.403503   0.380776  0.003070\n10  2019-06-28  123.195409  -1.208094 -0.009711\n11  2019-09-25  122.680000  -0.515409 -0.004184\n12  2019-12-27  124.985000   2.305000  0.018789\n13  2020-03-12  126.970704   1.985704  0.015888\n14  2020-06-01  115.856237 -11.114467 -0.087536\n15  2020-09-30  128.100000  12.243763  0.105681\n16  2020-12-31  126.050000  -2.050000 -0.016003\n17  2021-03-31  123.630000  -2.420000 -0.019199\n18  2021-06-30  130.000000   6.370000  0.051525\n19  2021-09-30  121.579583  -8.420417 -0.064772\n20  2021-12-31  129.658713   8.079130  0.066451\n21  2022-03-31  128.103292  -1.555421 -0.011996\n22  2022-06-30  126.011779  -2.091513 -0.016327\n23  2022-09-30  127.401087   1.389308  0.011025\n24  2022-12-30  126.630927  -0.770160 -0.006045\n25  2023-03-31  127.061311   0.430384  0.003399\n```\n\n### 中国食糖指数\n\n接口: index_sugar_msweet\n\n目标地址: http://www.msweet.com.cn/mtkj/sjzx13/index.html\n\n描述: 沐甜科技数据中心-中国食糖指数\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 日期   | object  | -   |\n| 综合价格 | float64 | -   |\n| 原糖价格 | float64 | -   |\n| 现货价格 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_sugar_msweet_df = ak.index_sugar_msweet()\nprint(index_sugar_msweet_df)\n```\n\n数据示例\n\n```\n        日期    综合价格   原糖价格    现货价格\n0     2005-10-03  3927.0  15.51     NaN\n1     2005-10-04  3932.0  11.41     NaN\n2     2005-10-10  3950.0  11.62  3550.0\n3     2005-10-11  3986.0  11.79  3640.0\n4     2005-10-12  4020.0  11.67  3641.0\n          ...     ...    ...     ...\n4234  2023-06-08  7247.0  25.22  6966.0\n4235  2023-06-09  7262.0  24.94  7021.0\n4236  2023-06-12  7281.0  25.00  7051.0\n4237  2023-06-13  7300.0  24.70  7058.0\n4238  2023-06-14  7311.0  25.25  7036.0\n[4239 rows x 4 columns]\n```\n\n### 配额内进口糖估算指数\n\n接口: index_inner_quote_sugar_msweet\n\n目标地址: http://www.msweet.com.cn/mtkj/sjzx13/index.html\n\n描述: 沐甜科技数据中心-配额内进口糖估算指数\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 日期     | object  | -   |\n| 利润空间   | float64 | -   |\n| 泰国糖    | float64 | -   |\n| 泰国MA5  | float64 | -   |\n| 巴西MA5  | float64 | -   |\n| 利润MA5  | float64 | -   |\n| 巴西MA10 | float64 | -   |\n| 巴西糖    | float64 | -   |\n| 柳州现货价  | float64 | -   |\n| 广州现货价  | float64 | -   |\n| 泰国MA10 | float64 | -   |\n| 利润MA30 | float64 | -   |\n| 利润MA10 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_inner_quote_sugar_msweet_df = ak.index_inner_quote_sugar_msweet()\nprint(index_inner_quote_sugar_msweet_df)\n```\n\n数据示例\n\n```\n      日期      利润空间      泰国糖   泰国MA5  ...  广州现货价  泰国MA10      利润MA30  利润MA10\n0     2010-11-01 -1240.220  8913.09     NaN  ...   7400     NaN         NaN     NaN\n1     2010-11-02 -1247.110  9038.92     NaN  ...   7500     NaN         NaN     NaN\n2     2010-11-03 -1226.750  9043.47     NaN  ...   7500     NaN         NaN     NaN\n3     2010-11-04 -1544.135  9359.97     NaN  ...   7500     NaN         NaN     NaN\n4     2010-11-05 -1560.100  9375.66     NaN  ...   7500     NaN         NaN     NaN\n          ...       ...      ...     ...  ...    ...     ...         ...     ...\n2881  2023-01-17   611.500  5140.00  5139.2  ...   5785  5207.4  332.383333  581.95\n2882  2023-01-18   690.500  5071.00  5142.2  ...   5785  5179.9  351.883333  603.45\n2883  2023-01-19   718.500  5036.00  5114.4  ...   5785  5153.9  374.000000  624.70\n2884  2023-01-30   526.500  5336.00  5079.8  ...   5875  5129.7  395.450000  642.20\n2885  2023-01-31   429.500  5456.00  5123.8  ...   5910  5140.7  410.283333  636.70\n[2886 rows x 13 columns]\n```\n\n### 配额外进口糖估算指数\n\n接口: index_outer_quote_sugar_msweet\n\n目标地址: http://www.msweet.com.cn/mtkj/sjzx13/index.html\n\n描述: 沐甜科技数据中心-配额外进口糖估算指数\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称        | 类型      | 描述  |\n|-----------|---------|-----|\n| 日期        | object  | -   |\n| 巴西糖进口成本   | float64 | -   |\n| 泰国糖进口利润空间 | float64 | -   |\n| 巴西糖进口利润空间 | float64 | -   |\n| 泰国糖进口成本   | float64 | -   |\n| 日照现货价     | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_outer_quote_sugar_msweet_df = ak.index_outer_quote_sugar_msweet()\nprint(index_outer_quote_sugar_msweet_df)\n```\n\n数据示例\n\n```\n      日期  巴西糖进口成本  泰国糖进口利润空间  巴西糖进口利润空间  泰国糖进口成本  日照现货价\n0     2014-12-05   4637.0     4491.0       4770    133.0  279.0\n1     2014-12-08   4697.0     4549.0       4770     73.0  221.0\n2     2014-12-09   4774.0     4590.0       4770     -4.0  180.0\n3     2014-12-10   4782.0     4607.0       4820     38.0  213.0\n4     2014-12-11   4758.0     4772.0       4870    112.0   98.0\n          ...      ...        ...        ...      ...    ...\n1775  2023-01-13   6380.0     6416.0       6260   -156.0 -120.0\n1776  2023-01-17   6529.0     6552.0       6260   -292.0 -269.0\n1777  2023-01-18   6439.0     6462.0       6260   -202.0 -179.0\n1778  2023-01-30   6782.0     6808.0       6260   -548.0 -522.0\n1779  2023-01-31   6938.0     6964.0       6260   -704.0 -678.0\n[1780 rows x 6 columns]\n```\n\n### 排污权指数\n\n接口: index_eri\n\n目标地址: https://zs.zjpwq.net/\n\n描述: 浙江省排污权交易指数的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                  |\n|--------|-----|-------------------------------------|\n| symbol | str | symbol=\"月度\"; choice of {\"月度\", \"季度\"} |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 日期   | object  |         |\n| 交易指数 | float64 |         |\n| 成交量  | float64 | 注意单位: 吨 |\n| 成交额  | float64 | 注意单位: 元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_eri_df = ak.index_eri(symbol=\"月度\")\nprint(index_eri_df)\n```\n\n数据示例\n\n```\n       日期        交易指数     成交量         成交额\n0    2015-01-01  666.723178  1034.4964  1.947994e+07\n1    2015-02-01  331.931459  1432.3328  4.688527e+07\n2    2015-03-01  280.808046   368.7993  1.286788e+07\n3    2015-04-01  306.577138   847.2793  2.034412e+07\n4    2015-05-01  175.653651   914.9349  1.267447e+07\n..          ...         ...        ...           ...\n97   2023-02-01  496.845377   302.1130  1.710103e+07\n98   2023-03-01  422.643848   706.8660  3.102841e+07\n99   2023-04-01  209.456300  4374.7260  5.408741e+07\n100  2023-05-01  330.866173   622.0553  1.696480e+07\n101  2023-06-01  351.518957   836.3700  1.942974e+07\n[102 rows x 4 columns]\n```\n\n### 集装箱指数\n\n接口: drewry_wci_index\n\n目标地址: https://infogram.com/world-container-index-1h17493095xl4zj\n\n描述: Drewry 集装箱指数的数据\n\n限量: 返回指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                                                                                                                    |\n|--------|-----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"composite\"; choice of {\"composite\", \"shanghai-rotterdam\", \"rotterdam-shanghai\", \"shanghai-los angeles\", \"los angeles-shanghai\", \"shanghai-genoa\", \"new york-rotterdam\", \"rotterdam-new york\"} |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| date | object  |     |\n| wci  | float64 |     |\n\n接口示例\n\n```python\nimport akshare as ak\n\ndrewry_wci_index_df = ak.drewry_wci_index(symbol=\"composite\")\nprint(drewry_wci_index_df)\n```\n\n数据示例\n\n```\n           date      wci\n0    2016-03-10   700.57\n1    2016-03-17   674.41\n2    2016-03-24   666.27\n3    2016-03-31   849.08\n4    2016-04-07   868.06\n..          ...      ...\n437  2024-08-22  5319.00\n438  2024-08-29  5181.00\n439  2024-09-05  4775.00\n440  2024-09-12  4168.00\n441  2024-09-19  3970.00\n[442 rows x 2 columns]\n```\n\n### 公路物流指数\n\n#### 中国公路物流运价指数\n\n接口: index_price_cflp\n\n目标地址: http://index.0256.cn/expx.htm\n\n描述: 获取指定 symbol 的中国公路物流运价指数的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                     |\n|--------|-----|--------------------------------------------------------|\n| symbol | str | symbol=\"周指数\"; choice of {\"周指数\", \"月指数\", \"季度指数\", \"年度指数\"} |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 日期   | object  | -   |\n| 定基指数 | float64 | -   |\n| 环比指数 | float64 | -   |\n| 同比指数 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_price_cflp_df = ak.index_price_cflp(symbol=\"周指数\")\nprint(index_price_cflp_df)\n```\n\n数据示例\n\n```\n       日期     定基指数    环比指数   同比指数\n0    2015-02-11  1119.47  1000.00  1000.00\n1    2015-12-02  1051.89   988.25   960.54\n2    2015-12-09  1028.40   977.67   981.28\n3    2015-12-16   991.78   964.39   935.04\n4    2015-12-23   995.84  1004.10   956.45\n..          ...      ...      ...      ...\n432  2024-04-24  1040.15  1015.40  1001.07\n433  2024-05-01  1024.09   984.55   998.50\n434  2024-05-08  1024.10  1000.01   997.71\n435  2024-05-15  1024.11  1000.01   998.13\n436  2024-05-22  1051.10  1026.36  1024.44\n[437 rows x 4 columns]\n```\n\n#### 中国公路物流运量指数\n\n接口: index_volume_cflp\n\n目标地址: http://index.0256.cn/expx.htm\n\n描述: 指定 symbol 的中国公路物流运量指数的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                              |\n|--------|-----|-------------------------------------------------|\n| symbol | str | symbol=\"周指数\"; choice of {\"月指数\", \"季度指数\", \"年度指数\"} |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 日期   | object  | -   |\n| 定基指数 | float64 | -   |\n| 环比指数 | float64 | -   |\n| 同比指数 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_volume_cflp_df = ak.index_volume_cflp(symbol=\"月指数\")\nprint(index_volume_cflp_df)\n```\n\n数据示例\n\n```\n         日期    定基指数  环比指数  同比指数\n0   2016-01-31   94.61  100.00  100.00\n1   2016-02-29   52.46   55.45  100.00\n2   2016-03-31   93.90  178.99  100.00\n3   2016-04-30  102.13  108.76  100.00\n4   2016-05-31  105.71  103.51  100.00\n5   2016-06-30  103.30   97.72  100.00\n6   2016-07-31  102.52   99.24  100.00\n7   2016-08-31  106.86  104.23  100.00\n8   2016-09-30  111.76  104.59  100.00\n9   2016-10-31  108.68   97.24  100.00\n10  2016-11-30  116.28  106.99  100.00\n11  2016-12-31   99.89   85.90  100.00\n12  2017-01-31   96.58   96.69  102.08\n13  2017-02-28   56.95   58.97  108.56\n14  2017-03-31  102.52  180.02  109.18\n15  2017-04-30  110.03  107.33  107.74\n16  2017-05-31  114.33  103.91  108.15\n17  2017-06-30  110.40   96.56  106.87\n18  2017-08-31  120.08  108.77  112.37\n19  2017-09-30  125.06  104.15  111.90\n20  2017-10-31  119.66   95.68  110.10\n21  2017-11-30  125.06  104.51  107.55\n22  2017-12-31  119.66   95.68  119.79\n23  2018-01-31  125.06  104.51  129.49\n24  2018-02-28  125.06  100.00  219.60\n25  2018-03-31  125.06  100.00  121.99\n26  2018-04-30  120.08   96.02  109.13\n27  2018-05-31  115.96   96.57  101.43\n28  2018-06-30  125.06  107.85  113.28\n29  2018-07-04  125.83  115.84  120.89\n30  2018-08-30  130.12  120.15  129.61\n31  2018-09-30  135.20  120.64  126.81\n32  2018-10-30  131.18  123.25  121.94\n33  2018-11-30  126.35  120.28  121.55\n34  2018-12-30  133.17  119.12  125.31\n35  2019-01-30  126.81  125.38  125.67\n36  2019-02-27  130.84  116.89  121.12\n37  2019-03-30  132.42  121.11  127.49\n38  2019-04-30  127.29  116.83  121.46\n39  2019-05-30  128.32  117.60  122.26\n40  2019-06-30  130.92  123.20  122.43\n41  2019-07-31   94.61  100.00  100.00\n42  2019-08-31   52.46   55.45  100.00\n43  2019-09-30   93.90  178.99  100.00\n44  2019-10-31  102.13  108.76  100.00\n45  2019-11-30  105.71  103.51  100.00\n46  2019-12-31  103.30   97.72  100.00\n47  2020-01-31  102.52   99.24  100.00\n48  2020-02-29  106.86  104.23  100.00\n49  2020-03-31  111.76  104.59  100.00\n50  2020-04-30  108.68   97.24  100.00\n51  2020-05-31  116.28  106.99  100.00\n52  2020-06-30   99.89   85.90  100.00\n53  2020-07-31   96.58   96.69  102.08\n54  2020-08-31   56.95   58.97  108.56\n```\n\n### 中证指数\n\n接口: stock_zh_index_hist_csindex\n\n目标地址: https://www.csindex.com.cn/zh-CN/indices/index-detail/H30374#/indices/family/detail?indexCode=H30374\n\n描述: 中证指数日频率的数据\n\n限量: 该接口返回指定 symbol 的 start_date 和 end_date 的指数日频率数据\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| symbol     | str | symbol=\"000928\"; 指数代码 |\n| start_date | str | start_date=\"20180526\" |\n| end_date   | str | end_date=\"20240604\"   |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 日期     | object  | -        |\n| 指数代码   | object  | -        |\n| 指数中文全称 | object  | -        |\n| 指数中文简称 | object  | -        |\n| 指数英文全称 | object  | -        |\n| 指数英文简称 | object  | -        |\n| 开盘     | float64 | -        |\n| 最高     | float64 | -        |\n| 最低     | float64 | -        |\n| 收盘     | float64 | -        |\n| 涨跌     | float64 | -        |\n| 涨跌幅    | float64 | 注意单位: %  |\n| 成交量    | float64 | 注意单位: 万手 |\n| 成交金额   | float64 | 注意单位: 亿元 |\n| 样本数量   | float64 | -        |\n| 滚动市盈率  | float64 | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_index_hist_csindex_df = ak.stock_zh_index_hist_csindex(symbol=\"000928\", start_date=\"20100101\", end_date=\"20240604\")\nprint(stock_zh_index_hist_csindex_df)\n```\n\n数据示例\n\n```\n          日期    指数代码  指数中文全称 指数中文简称  ... 成交量   成交金额 样本数量 滚动市盈率\n0     2010-01-01  000928  中证能源指数  800能源  ...   189.61   19.89  38.0  11.51\n1     2012-08-31  000928  中证能源指数  800能源  ...   189.61   19.89  38.0  11.51\n2     2012-09-03  000928  中证能源指数  800能源  ...   256.16   27.91  38.0    NaN\n3     2012-09-04  000928  中证能源指数  800能源  ...   259.30   28.01  38.0  11.51\n4     2012-09-05  000928  中证能源指数  800能源  ...   230.82   26.39  38.0  11.43\n...          ...     ...     ...    ...  ...      ...     ...   ...    ...\n2851  2024-05-29  000928  中证能源指数  800能源  ...  1062.61  114.86  24.0  12.70\n2852  2024-05-30  000928  中证能源指数  800能源  ...  1209.83  112.27  24.0  12.45\n2853  2024-05-31  000928  中证能源指数  800能源  ...   954.20   94.05  24.0  12.37\n2854  2024-06-03  000928  中证能源指数  800能源  ...  1294.04  115.08  24.0  12.41\n2855  2024-06-04  000928  中证能源指数  800能源  ...  1169.28  127.39  24.0  12.20\n[2856 rows x 16 columns]\n```\n\n### 财新指数\n\n#### 综合 PMI\n\n接口: index_pmi_com_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/pmi\n\n描述: 财新数据-指数报告-财新中国 PMI-综合 PMI\n\n限量: 该接口返回所有历史数据，该数据更新至 202507 截止；\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| 日期    | object  | -   |\n| 综合PMI | float64 | -   |\n| 变化值   | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_pmi_com_cx_df = ak.index_pmi_com_cx()\nprint(index_pmi_com_cx_df)\n```\n\n数据示例\n\n```\n       日期     综合PMI 变化值\n0   2014-04-29   49.5  0.0\n1   2014-05-30   50.2  0.7\n2   2014-06-29   52.4  2.2\n3   2014-07-30   51.6 -0.8\n4   2014-08-30   52.8  1.2\n..         ...    ...  ...\n90  2021-09-29   51.4  4.2\n91  2021-10-30   51.5  0.1\n92  2021-11-29   51.2 -0.3\n93  2021-12-30   53.0  1.8\n94  2022-01-30   50.1 -2.9\n```\n\n#### 制造业 PMI\n\n接口: index_pmi_man_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/pmi\n\n描述: 财新数据-指数报告-财新中国 PMI-制造业 PMI\n\n限量: 该接口返回所有历史数据，该数据更新至 202507 截止；\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 日期     | object  | -   |\n| 制造业PMI | float64 | -   |\n| 变化值    | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_pmi_man_cx_df = ak.index_pmi_man_cx()\nprint(index_pmi_man_cx_df)\n```\n\n数据示例\n\n```\n       日期   制造业PMI  变化值\n0   2014-04-29    48.1  0.0\n1   2014-05-30    49.4  1.3\n2   2014-06-29    50.7  1.3\n3   2014-07-30    51.7  1.0\n4   2014-08-30    50.2 -1.5\n..         ...     ...  ...\n90  2021-09-29    50.0  0.8\n91  2021-10-30    50.6  0.6\n92  2021-11-29    49.9 -0.7\n93  2021-12-30    50.9  1.0\n94  2022-01-30    49.1 -1.8\n```\n\n#### 服务业 PMI\n\n接口: index_pmi_ser_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/pmi\n\n描述: 财新数据-指数报告-财新中国 PMI-服务业 PMI\n\n限量: 该接口返回所有历史数据，该数据更新至 202507 截止；\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 日期     | object  | -   |\n| 服务业PMI | float64 | -   |\n| 变化值    | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_pmi_ser_cx_df = ak.index_pmi_ser_cx()\nprint(index_pmi_ser_cx_df)\n```\n\n数据示例\n\n```\n       日期  服务业PMI  变化值\n0   2014-04-29    51.4  0.0\n1   2014-05-30    50.7 -0.7\n2   2014-06-29    53.1  2.4\n3   2014-07-30    50.0 -3.1\n4   2014-08-30    54.1  4.1\n..         ...     ...  ...\n90  2021-09-29    53.4  6.7\n91  2021-10-30    53.8  0.4\n92  2021-11-29    52.1 -1.7\n93  2021-12-30    53.1  1.0\n94  2022-01-30    51.4 -1.7\n```\n\n#### 数字经济指数\n\n接口: index_dei_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/dei\n\n描述: 财新指数-数字经济指数\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 日期     | object  | -   |\n| 数字经济指数 | float64 | -   |\n| 变化值    | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_dei_cx_df = ak.index_dei_cx()\nprint(index_dei_cx_df)\n```\n\n数据示例\n\n```\n     日期      数字经济指数 变化值\n0   2015-12-31  100.00    0.00\n1   2016-01-31   89.63  -10.37\n2   2016-02-29  107.70   18.07\n3   2016-03-31  116.13    8.43\n4   2016-04-30  126.67   10.54\n..         ...     ...     ...\n67  2021-07-31  585.00    6.00\n68  2021-08-31  439.00 -146.00\n69  2021-09-30  413.00  -26.00\n70  2021-10-31  593.00  180.00\n71  2021-11-30  435.00 -158.00\n```\n\n#### 产业指数\n\n接口: index_ii_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/dei\n\n描述: 财新指数-产业指数\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 日期   | object  | -   |\n| 产业指数 | float64 | -   |\n| 变化值  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_ii_cx_df = ak.index_ii_cx()\nprint(index_ii_cx_df)\n```\n\n数据示例\n\n```\n        日期    产业指数    变化值\n0   2015-12-31  100.00   0.00\n1   2016-01-31   83.97 -16.03\n2   2016-02-29  139.06  55.09\n3   2016-03-31  126.96 -12.10\n4   2016-04-30  138.11  11.15\n..         ...     ...    ...\n67  2021-07-31  434.87  -9.52\n68  2021-08-31  353.89 -80.98\n69  2021-09-30  260.27 -93.62\n70  2021-10-31  261.97   1.70\n71  2021-11-30  310.74  48.77\n```\n\n#### 溢出指数\n\n接口: index_si_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/dei\n\n描述: 财新指数-溢出指数\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 日期   | object  | -   |\n| 溢出指数 | float64 | -   |\n| 变化值  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_si_cx_df = ak.index_si_cx()\nprint(index_si_cx_df)\n```\n\n数据示例\n\n```\n        日期    溢出指数  变化值\n0   2015-12-31  100.00   0.00\n1   2016-01-31  137.07  37.07\n2   2016-02-29  127.53  -9.54\n3   2016-03-31  168.82  41.29\n4   2016-04-30  157.51 -11.31\n..         ...     ...    ...\n67  2021-07-31   70.23   9.28\n68  2021-08-31   25.26 -44.97\n69  2021-09-30   29.86   4.60\n70  2021-10-31   94.92  65.06\n71  2021-11-30   48.24 -46.68\n```\n\n#### 融合指数\n\n接口: index_fi_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/dei\n\n描述: 财新指数-融合指数\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 日期   | object  | -   |\n| 融合指数 | float64 | -   |\n| 变化值  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_fi_cx_df = ak.index_fi_cx()\nprint(index_fi_cx_df)\n```\n\n数据示例\n\n```\n      日期      融合指数    变化值\n0   2015-12-31  100.00   0.00\n1   2016-01-31   83.26 -16.74\n2   2016-02-29   86.49   3.23\n3   2016-03-31   80.90  -5.59\n4   2016-04-30   84.22   3.32\n..         ...     ...    ...\n67  2021-07-31  254.47  -6.94\n68  2021-08-31  244.25 -10.22\n69  2021-09-30  246.41   2.16\n70  2021-10-31  222.03 -24.38\n71  2021-11-30  253.82  31.79\n```\n\n#### 基础指数\n\n接口: index_bi_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/dei\n\n描述: 财新指数-基础指数\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 日期   | object  | -   |\n| 基础指数 | float64 | -   |\n| 变化值  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_bi_cx_df = ak.index_bi_cx()\nprint(index_bi_cx_df)\n```\n\n数据示例\n\n```\n        日期    基础指数    变化值\n0   2015-12-31  100.00   0.00\n1   2016-01-31   99.15  -0.85\n2   2016-02-29  122.47  23.32\n3   2016-03-31  106.72 -15.75\n4   2016-04-30  117.46  10.74\n..         ...     ...    ...\n67  2021-07-31   82.76  -5.40\n68  2021-08-31   77.20  -5.56\n69  2021-09-30   81.56   4.36\n70  2021-10-31   83.50   1.94\n71  2021-11-30   48.14 -35.36\n```\n\n#### 中国新经济指数\n\n接口: index_nei_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/nei\n\n描述: 财新指数-中国新经济指数\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述  |\n|---------|---------|-----|\n| 日期      | object  | -   |\n| 中国新经济指数 | float64 | -   |\n| 变化值     | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_nei_cx_df = ak.index_nei_cx()\nprint(index_nei_cx_df)\n```\n\n数据示例\n\n```\n     日期    中国新经济指数       变化值\n0   2016-04-30  32.030085  0.000000\n1   2016-05-31  34.687431  2.657346\n2   2016-06-30  32.163383 -2.524048\n3   2016-07-31  31.420723 -0.742660\n4   2016-08-31  32.140547  0.719824\n..         ...        ...       ...\n64  2021-08-31  28.225149 -0.311624\n65  2021-09-30  28.885370  0.660221\n66  2021-10-31  29.643365  0.757995\n67  2021-11-30  28.056617 -1.586748\n68  2021-12-31  29.464567  1.407950\n```\n\n#### 劳动力投入指数\n\n接口: index_li_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/nei\n\n描述: 财新指数-劳动力投入指数\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述  |\n|---------|---------|-----|\n| 日期      | object  | -   |\n| 劳动力投入指数 | float64 | -   |\n| 变化值     | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_li_cx_df = ak.index_li_cx()\nprint(index_li_cx_df)\n```\n\n数据示例\n\n```\n     日期       劳动力投入指数    变化值\n0   2015-07-31  29.741385   0.000000\n1   2015-08-31  28.091280  -1.650105\n2   2015-09-30  42.663765  14.572485\n3   2015-10-31  32.824430  -9.839335\n4   2015-11-30  38.791985   5.967555\n..         ...        ...        ...\n73  2021-08-31  20.802475  -3.385175\n74  2021-09-30  22.275790   1.473315\n75  2021-10-31  25.326500   3.050710\n76  2021-11-30  23.458940  -1.867560\n77  2021-12-31  22.587685  -0.871255\n```\n\n#### 资本投入指数\n\n接口: index_ci_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/nei\n\n描述: 财新指数-资本投入指数\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 日期     | object  | -   |\n| 资本投入指数 | float64 | -   |\n| 变化值    | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_ci_cx_df = ak.index_ci_cx()\nprint(index_ci_cx_df)\n```\n\n数据示例\n\n```\n    日期        资本投入指数      变化值\n0   2015-07-31  31.994724   0.000000\n1   2015-08-31  34.098210   2.103486\n2   2015-09-30  22.844344 -11.253866\n3   2015-10-31  35.136466  12.292122\n4   2015-11-30  28.143112  -6.993354\n..         ...        ...        ...\n73  2021-08-31  37.308966   3.053250\n74  2021-09-30  37.306790  -0.002176\n75  2021-10-31  35.004714  -2.302076\n76  2021-11-30  34.531942  -0.472772\n77  2021-12-31  39.438158   4.906216\n```\n\n#### 科技投入指数\n\n接口: index_ti_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/nei\n\n描述: 财新指数-科技投入指数\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 日期     | object  | -   |\n| 科技投入指数 | float64 | -   |\n| 变化值    | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_ti_cx_df = ak.index_ti_cx()\nprint(index_ti_cx_df)\n```\n\n数据示例\n\n```\n        日期     科技投入指数   变化值\n0   2015-07-31  27.562400  0.000000\n1   2015-08-31  23.012985 -4.549415\n2   2015-09-30  25.229635  2.216650\n3   2015-10-31  25.949450  0.719815\n4   2015-11-30  24.258245 -1.691205\n..         ...        ...       ...\n73  2021-08-31  27.384085 -0.104765\n74  2021-09-30  27.670710  0.286625\n75  2021-10-31  29.044460  1.373750\n76  2021-11-30  26.347445 -2.697015\n77  2021-12-31  26.504550  0.157105\n```\n\n#### 新经济行业入职平均工资水平\n\n接口: index_neaw_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/nei\n\n描述: 财新指数-新经济行业入职平均工资水平\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称            | 类型      | 描述  |\n|---------------|---------|-----|\n| 日期            | object  | -   |\n| 新经济行业入职平均工资水平 | float64 | -   |\n| 变化值           | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_neaw_cx_df = ak.index_neaw_cx()\nprint(index_neaw_cx_df)\n```\n\n数据示例\n\n```\n    日期    新经济行业入职平均工资水平  变化值\n0   2015-07-31      7409.0000    0.0000\n1   2015-08-31      7307.0000 -102.0000\n2   2015-09-30      7367.0000   60.0000\n3   2015-10-31      7298.0000  -69.0000\n4   2015-11-30      7494.0000  196.0000\n..         ...            ...       ...\n73  2021-08-31     12905.0505  -27.7426\n74  2021-09-30     13100.2551  195.2046\n75  2021-10-31     13112.4344   12.1793\n76  2021-11-30     13124.6137   12.1793\n77  2021-12-31     13241.5176  116.9039\n```\n\n#### 新经济入职工资溢价水平\n\n接口: index_awpr_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/nei\n\n描述: 财新指数-新经济入职工资溢价水平\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称          | 类型      | 描述  |\n|-------------|---------|-----|\n| 日期          | object  | -   |\n| 新经济入职工资溢价水平 | float64 | -   |\n| 变化值         | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_awpr_cx_df = ak.index_awpr_cx()\nprint(index_awpr_cx_df)\n```\n\n数据示例\n\n```\n      日期  新经济入职工资溢价水平  变化值\n0   2015-07-31   106.858500  0.000000\n1   2015-08-31   109.196100  2.337600\n2   2015-09-30   108.008300 -1.187800\n3   2015-10-31   106.994600 -1.013700\n4   2015-11-30   104.243100 -2.751500\n..         ...          ...       ...\n73  2021-08-31   102.576555 -0.202858\n74  2021-09-30   102.680842  0.104288\n75  2021-10-31   103.914771  1.233928\n76  2021-11-30   102.056202 -1.858569\n77  2021-12-31   104.185324  2.129122\n```\n\n#### 大宗商品指数\n\n接口: index_cci_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/nei\n\n描述: 财新指数-大宗商品指数\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 日期     | object  | -   |\n| 大宗商品指数 | float64 | -   |\n| 变化值    | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_cci_cx_df = ak.index_cci_cx()\nprint(index_cci_cx_df)\n```\n\n数据示例\n\n```\n          日期      大宗商品指数    变化值\n0     2009-01-09  100.000000  0.000000\n1     2009-01-12  101.643734  1.643734\n2     2009-01-13   98.992944 -2.607922\n3     2009-01-14  100.396208  1.417539\n4     2009-01-15  100.151055 -0.244186\n...          ...         ...       ...\n3735  2024-05-29  361.046067  0.890980\n3736  2024-05-30  356.980276 -1.126114\n3737  2024-05-31  355.491012 -0.417184\n3738  2024-06-03  350.137547 -1.505935\n3739  2024-06-04  347.889373 -0.642083\n[3740 rows x 3 columns]\n```\n\n#### 高质量因子\n\n接口: index_qli_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/qli\n\n描述: 财新指数-高质量因子\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 日期      | object  | -       |\n| 高质量因子指数 | float64 | -       |\n| 变化幅度    | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_qli_cx_df = ak.index_qli_cx()\nprint(index_qli_cx_df)\n```\n\n数据示例\n\n```\n        日期     高质量因子指数   变化幅度\n0     2018-05-02  100.015000  0.000000\n1     2018-05-03  100.336541  0.321493\n2     2018-05-04  101.048384  0.709455\n3     2018-05-07  101.663083  0.608322\n4     2018-05-08  103.734574  2.037603\n...          ...         ...       ...\n1475  2024-05-29  142.498375  0.345091\n1476  2024-05-30  141.457371 -0.730537\n1477  2024-05-31  140.915933 -0.382757\n1478  2024-06-03  141.537175  0.440860\n1479  2024-06-04  143.046574  1.066433\n[1480 rows x 3 columns]\n```\n\n#### AI策略指数\n\n接口: index_ai_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/ai\n\n描述: 财新指数-AI策略指数\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| AI策略指数 | float64 | -       |\n| 变化幅度   | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_ai_cx_df = ak.index_ai_cx()\nprint(index_ai_cx_df)\n```\n\n数据示例\n\n```\n      日期      AI策略指数      变化幅度\n0    2020-12-31  100.002000  0.000000\n1    2021-01-04  102.925670  2.923611\n2    2021-01-05  105.666833  2.663245\n3    2021-01-06  106.429747  0.722000\n4    2021-01-07  108.591207  2.030880\n..          ...         ...       ...\n823  2024-05-29  135.800485  0.101018\n824  2024-05-30  134.659844 -0.839939\n825  2024-05-31  134.193064 -0.346637\n826  2024-06-03  133.985240 -0.154869\n827  2024-06-04  135.034790  0.783333\n[828 rows x 3 columns]\n```\n\n#### 基石经济指数\n\n接口: index_bei_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/bei\n\n描述: 财新指数-基石经济指数\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 基石经济指数 | float64 | -       |\n| 变化幅度   | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_bei_cx_df = ak.index_bei_cx()\nprint(index_bei_cx_df)\n```\n\n数据示例\n\n```\n         日期      基石经济指数    变化幅度\n0     2016-12-26   8337.3924  0.000000\n1     2016-12-27   8337.7003  0.003693\n2     2016-12-28   8298.5135 -0.469995\n3     2016-12-29   8287.3093 -0.135015\n4     2016-12-30   8314.6532  0.329949\n...          ...         ...       ...\n1802  2024-05-29  10352.7516 -0.105441\n1803  2024-05-30  10279.0409 -0.711991\n1804  2024-05-31  10275.1080 -0.038261\n1805  2024-06-03  10217.6457 -0.559238\n1806  2024-06-04  10283.8398  0.647841\n[1807 rows x 3 columns]\n```\n\n#### 新动能指数\n\n接口: index_neei_cx\n\n目标地址: https://yun.ccxe.com.cn/indices/neei\n\n描述: 财新指数-新动能指数\n\n限量: 该接口返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 日期    | object  | -       |\n| 新动能指数 | float64 | -       |\n| 变化幅度  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_neei_cx_df = ak.index_neei_cx()\nprint(index_neei_cx_df)\n```\n\n数据示例\n\n```\n     日期      新动能指数      变化幅度\n0   2024-05-06  1643.4289  0.000000\n1   2024-05-07  1647.7533  0.263133\n2   2024-05-08  1625.7008 -1.338337\n3   2024-05-09  1651.9138  1.612412\n4   2024-05-10  1631.9608 -1.207872\n5   2024-05-13  1617.2608 -0.900757\n6   2024-05-14  1622.1573  0.302765\n7   2024-05-15  1602.1189 -1.235293\n8   2024-05-16  1596.2899 -0.363831\n9   2024-05-17  1610.1245  0.866672\n10  2024-05-20  1612.0331  0.118537\n11  2024-05-21  1597.0166 -0.931526\n12  2024-05-22  1604.2656  0.453909\n13  2024-05-23  1577.2796 -1.682140\n14  2024-05-24  1553.5113 -1.506917\n15  2024-05-27  1566.6758  0.847403\n16  2024-05-28  1553.4361 -0.845082\n17  2024-05-29  1554.3290  0.057479\n18  2024-05-30  1559.3384  0.322287\n19  2024-05-31  1557.3374 -0.128324\n20  2024-06-03  1557.0964 -0.015475\n21  2024-06-04  1572.3699  0.980896\n```\n\n### 指数估值\n\n#### 指数估值-中证\n\n接口: stock_zh_index_value_csindex\n\n目标地址: https://www.csindex.com.cn/zh-CN/indices/index-detail/H30374#/indices/family/detail?indexCode=H30374\n\n描述: 中证指数-指数估值数据\n\n限量: 该接口返回指定的指数的估值数据, 该接口只能返回近期的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"H30374\"; 指数代码 |\n\n输出参数\n\n| 名称     | 类型      | 描述              |\n|--------|---------|-----------------|\n| 日期     | object  | -               |\n| 指数代码   | object  | -               |\n| 指数中文全称 | object  | -               |\n| 指数中文简称 | object  | -               |\n| 指数英文全称 | object  | -               |\n| 指数英文简称 | object  | -               |\n| 市盈率1   | float64 | 注意: （总股本）P/E1   |\n| 市盈率2   | float64 | 注意: （计算用股本）P/E2 |\n| 股息率1   | float64 | 注意: （总股本）D/P1   |\n| 股息率2   | float64 | 注意: （计算用股本）D/P2 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_index_value_csindex_df = ak.stock_zh_index_value_csindex(symbol=\"H30374\")\nprint(stock_zh_index_value_csindex_df)\n```\n\n数据示例\n\n```\n         日期    指数代码           指数中文全称  指数中文简称  ...   市盈率1  市盈率2 股息率1 股息率2\n0   2025-01-02  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  14.34  14.86  2.64  2.41\n1   2025-01-01  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  14.72  15.25  2.51  2.28\n2   2024-12-31  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  14.72  15.25  2.51  2.28\n3   2024-12-30  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  14.93  15.48  2.45  2.23\n4   2024-12-27  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  14.94  15.49  2.45  2.22\n5   2024-12-26  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  14.93  15.49  2.44  2.22\n6   2024-12-25  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  14.89  15.43  2.45  2.23\n7   2024-12-24  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  14.92  15.49  2.44  2.22\n8   2024-12-23  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  14.75  15.32  2.47  2.24\n9   2024-12-20  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  14.83  15.43  2.45  2.22\n10  2024-12-19  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  14.82  15.41  2.47  2.26\n11  2024-12-18  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  14.83  15.40  2.47  2.26\n12  2024-12-17  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  14.75  15.33  2.48  2.27\n13  2024-12-16  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  14.86  15.44  2.46  2.25\n14  2024-12-13  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  15.07  15.67  2.46  2.24\n15  2024-12-12  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  15.37  16.00  2.41  2.19\n16  2024-12-11  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  15.21  15.84  2.43  2.22\n17  2024-12-10  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  15.18  15.80  2.44  2.22\n18  2024-12-09  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  15.16  15.80  2.44  2.22\n19  2024-12-06  H30374  中证中国内地企业全球综合指数  中国内地全指  ...  15.06  15.66  2.46  2.24\n[20 rows x 10 columns]\n```\n\n### 申万宏源研究\n\n#### 基金指数实时行情\n\n接口: index_realtime_fund_sw\n\n目标地址: https://www.swsresearch.com/institute_sw/allIndex/releasedIndex\n\n描述: 申万宏源研究-申万指数-指数发布-基金指数-实时行情\n\n限量: 该接口返回指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                        |\n|--------|-----|-----------------------------------------------------------|\n| symbol | str | symbol=\"基础一级\"; choice of {\"基础一级\", \"基础二级\", \"基础三级\", \"特色指数\"} |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 指数代码 | object  | -       |\n| 指数名称 | object  | -       |\n| 昨收盘  | float64 | -       |\n| 日涨跌幅 | float64 | 注意单位: % |\n| 年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_realtime_fund_sw_df = ak.index_realtime_fund_sw(symbol=\"基础一级\")\nprint(index_realtime_fund_sw_df)\n```\n\n数据示例\n\n```\n     指数代码          指数名称      昨收盘  日涨跌幅  年涨跌幅\n0  807100    申万宏源权益基金指数   770.47 -0.39 -1.40\n1  807200    申万宏源债券基金指数  1043.30  0.04  1.24\n2  807300    申万宏源混合基金指数   947.76 -0.04  0.70\n3  807400    申万宏源货币基金指数  1031.48  0.01  0.50\n4  807500    申万宏源另类基金指数  1119.82  0.09  4.45\n5  807600    申万宏源组合基金指数   874.51  0.46 -0.98\n6  807700  申万宏源QDII基金指数  1063.01  0.03  1.78\n```\n\n#### 基金指数历史行情\n\n接口: index_hist_fund_sw\n\n目标地址: https://www.swsresearch.com/institute_sw/allIndex/releasedIndex/fundDetail?code=807100\n\n描述: 申万宏源研究-申万指数-指数发布-基金指数-历史行情\n\n限量: 该接口返回指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                               |\n|--------|-----|--------------------------------------------------|\n| symbol | str | symbol=\"807200\"; 基金指数代码                          |\n| period | str | period=\"day\"; choice of {\"day\", \"week\", \"month\"} |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 日期   | object  | -       |\n| 收盘指数 | float64 | -       |\n| 开盘指数 | float64 | -       |\n| 最高指数 | float64 | -       |\n| 最低指数 | float64 | -       |\n| 涨跌幅  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_hist_fund_sw_df = ak.index_hist_fund_sw(symbol=\"807200\", period=\"day\")\nprint(index_hist_fund_sw_df)\n```\n\n数据示例\n\n```\n        日期     收盘指数  开盘指数  最高指数  最低指数   涨跌幅\n0     2005-12-30   369.78   0.0   0.0   0.0  0.00\n1     2006-01-04   370.80   0.0   0.0   0.0  0.27\n2     2006-01-05   371.72   0.0   0.0   0.0  0.25\n3     2006-01-06   372.28   0.0   0.0   0.0  0.15\n4     2006-01-09   372.64   0.0   0.0   0.0  0.10\n          ...      ...   ...   ...   ...   ...\n4430  2024-03-27  1041.49   0.0   0.0   0.0  0.01\n4431  2024-03-28  1041.83   0.0   0.0   0.0  0.03\n4432  2024-03-29  1042.52   0.0   0.0   0.0  0.07\n4433  2024-04-01  1042.91   0.0   0.0   0.0  0.04\n4434  2024-04-02  1043.30   0.0   0.0   0.0  0.04\n[4435 rows x 6 columns]\n```\n\n#### 申万指数实时行情\n\n接口: index_realtime_sw\n\n目标地址: https://www.swsresearch.com/institute_sw/allIndex/releasedIndex\n\n描述: 申万宏源研究-指数系列; 注意其中大类风格指数和金创指数的字段\n\n限量: 该接口返回指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                          |\n|--------|-----|-----------------------------------------------------------------------------|\n| symbol | str | symbol=\"市场表征\"; choice of {\"市场表征\", \"一级行业\", \"二级行业\", \"风格指数\", \"大类风格指数\", \"金创指数\"} |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 指数代码 | object  | -       |\n| 指数名称 | object  | -       |\n| 昨收盘  | float64 | -       |\n| 今开盘  | float64 | -       |\n| 最新价  | float64 | -       |\n| 成交额  | float64 | 注意: 百万元 |\n| 成交量  | float64 | 注意: 百万股 |\n| 最高价  | float64 | -       |\n| 最低价  | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_realtime_sw_df = ak.index_realtime_sw(symbol=\"市场表征\")\nprint(index_realtime_sw_df)\n```\n\n数据示例\n\n```\n   指数代码    指数名称  昨收盘    今开盘  ...     成交额      成交量    最高价    最低价\n0  801001     申万50   2845.16  2844.33  ...   89538.41   4310.15  2853.79  2833.67\n1  801002     申万中小  5717.78  5709.18  ...  149570.04  16788.79  5736.68  5697.45\n2  801003     申万Ａ指  3409.20  3407.15  ...  819763.29  78217.24  3420.04  3402.91\n3  801005     申万创业  2296.71  2295.44  ...  200968.64  13626.32  2319.26  2289.86\n4  801250     申万制造  3830.41  3828.93  ...  306683.14  21249.49  3868.12  3815.46\n5  801260     申万消费  6539.86  6537.97  ...  127630.86   9024.97  6544.94  6480.16\n6  801270     申万投资  3242.39  3240.25  ...  167726.08  21787.65  3262.87  3233.94\n7  801280     申万服务  2246.82  2244.55  ...  216829.66  25970.62  2258.63  2240.85\n8  801300  申万300指数  2644.59  2642.95  ...  247861.13  15722.26  2652.15  2635.43\n[9 rows x 9 columns]\n```\n\n#### 申万指数历史行情\n\n接口: index_hist_sw\n\n目标地址: https://www.swsresearch.com//institute_sw/allIndex/releasedIndex/releasedetail?code=801002&name=申万中小\n\n描述: 申万宏源研究-指数发布-指数详情-指数历史数据\n\n限量: 该接口返回指定 symbol 和 period 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                               |\n|--------|-----|--------------------------------------------------|\n| symbol | str | symbol=\"801030\"; 指数代码                            |\n| period | str | period=\"day\"; choice of {\"day\", \"week\", \"month\"} |\n\n输出参数\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 代码  | object  | -   |\n| 日期  | object  | -   |\n| 收盘  | float64 | -   |\n| 开盘  | float64 | -   |\n| 最高  | float64 | -   |\n| 最低  | float64 | -   |\n| 成交量 | float64 | -   |\n| 成交额 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_hist_sw_df = ak.index_hist_sw(symbol=\"801193\", period=\"day\")\nprint(index_hist_sw_df)\n```\n\n数据示例\n\n```\n        代码     日期       收盘  ...     最低        成交量          成交额\n0     801193  1999-12-30  1000.00  ...  1000.00    0.007658     0.084756\n1     801193  2000-01-04  1035.54  ...  1000.64    0.017623     0.199261\n2     801193  2000-01-05  1050.67  ...  1023.45    0.033997     0.391641\n3     801193  2000-01-06  1096.88  ...  1031.74    0.057862     0.681682\n4     801193  2000-01-07  1127.42  ...  1091.98    0.110529     1.353346\n...      ...         ...      ...  ...      ...         ...          ...\n4081  801193  2024-10-16  6271.85  ...  6103.77   81.423515   849.555269\n4082  801193  2024-10-17  6224.13  ...  6166.22   74.126046   793.383788\n4083  801193  2024-10-18  6667.02  ...  6152.42  138.155039  1648.638901\n4084  801193  2024-10-21  6532.56  ...  6441.85  103.932491  1157.084810\n4085  801193  2024-10-22  6591.44  ...  6472.62   78.312127   848.761688\n[4086 rows x 8 columns]\n```\n\n#### 申万指数分时行情\n\n接口: index_min_sw\n\n目标地址: https://www.swsresearch.com//institute_sw/allIndex/releasedIndex/releasedetail?code=801001&name=申万中小\n\n描述: 申万宏源研究-指数发布-指数详情-指数分时数据\n\n限量: 该接口返回指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                               |\n|--------|-----|--------------------------------------------------|\n| symbol | str | symbol=\"801030\"; 指数代码                            |\n\n输出参数\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 代码  | object  | -   |\n| 名称  | object  | -   |\n| 价格  | float64 | -   |\n| 日期  | object  | -   |\n| 时间  | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_min_sw_df = ak.index_min_sw(symbol=\"801001\")\nprint(index_min_sw_df)\n```\n\n数据示例\n\n```\n     代码    名称       价格       日期        时间\n0    801001  申万50  3076.03  2024-10-23  09:30:00\n1    801001  申万50  3074.62  2024-10-23  09:30:10\n2    801001  申万50  3072.27  2024-10-23  09:30:20\n3    801001  申万50  3070.98  2024-10-23  09:30:30\n4    801001  申万50  3068.14  2024-10-23  09:30:40\n..      ...   ...      ...         ...       ...\n968  801001  申万50  3105.32  2024-10-23  13:41:20\n969  801001  申万50  3104.96  2024-10-23  13:41:30\n970  801001  申万50  3105.10  2024-10-23  13:41:40\n971  801001  申万50  3104.75  2024-10-23  13:41:50\n972  801001  申万50  3104.46  2024-10-23  13:42:00\n[973 rows x 5 columns]\n```\n\n#### 申万指数成分股\n\n接口: index_component_sw\n\n目标地址: https://www.swsresearch.com//institute_sw/allIndex/releasedIndex/releasedetail?code=801001&name=申万中小\n\n描述: 申万宏源研究-指数发布-指数详情-成分股\n\n限量: 该接口返回指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                               |\n|--------|-----|--------------------------------------------------|\n| symbol | str | symbol=\"801001\"; 指数代码                            |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 序号   | int64   | -   |\n| 证券代码 | object  | -   |\n| 证券名称 | object  | -   |\n| 最新权重 | float64 | -   |\n| 计入日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_component_sw_df = ak.index_component_sw(symbol=\"801001\")\nprint(index_component_sw_df)\n```\n\n数据示例\n\n```\n      序号 证券代码  证券名称  最新权重  计入日期\n0      1  000001  平安银行  1.2094  2023-07-03\n1      2  000002   万科A  1.1122  2023-07-03\n2      3  000063  中兴通讯  1.1810  2023-07-03\n3      4  000333  美的集团  3.5702  2023-07-03\n4      5  000568  泸州老窖  2.2004  2023-07-03\n..   ...     ...   ...     ...         ...\n145  146  601919  中远海控  0.6996  2024-07-01\n146  147  603259  药明康德  1.2209  2024-07-01\n147  148  603993  洛阳钼业  0.7059  2024-07-01\n148  149  688041  海光信息  1.2586  2024-07-01\n149  150  688111  金山办公  0.6166  2024-07-01\n[150 rows x 5 columns]\n```\n\n#### 申万指数分析-日报表\n\n接口: index_analysis_daily_sw\n\n目标地址: https://www.swsresearch.com//institute_sw/allIndex/analysisIndex\n\n描述: 申万宏源研究-指数分析-日报表\n\n限量: 该接口返回指定参数的数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                        |\n|------------|-----|-----------------------------------------------------------|\n| symbol     | str | symbol=\"市场表征\"; choice of {\"市场表征\", \"一级行业\", \"二级行业\", \"风格指数\"} |\n| start_date | str | start_date=\"20221103\"                                     |\n| end_date   | str | end_date=\"20221103\"                                       |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 指数代码   | object  | -        |\n| 指数名称   | object  | -        |\n| 发布日期   | object  | -        |\n| 收盘指数   | float64 | -        |\n| 成交量    | float64 | 注意单位: 亿股 |\n| 涨跌幅    | float64 | 注意单位: %  |\n| 换手率    | float64 | 注意单位: %  |\n| 市盈率    | float64 | 注意单位: 倍  |\n| 市净率    | float64 | 注意单位: 倍  |\n| 均价     | float64 | 注意单位: 元  |\n| 成交额占比  | float64 | 注意单位: %  |\n| 流通市值   | float64 | 注意单位: 亿元 |\n| 平均流通市值 | float64 | 注意单位: 亿元 |\n| 股息率    | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_analysis_daily_sw_df = ak.index_analysis_daily_sw(symbol=\"市场表征\", start_date=\"20241025\", end_date=\"20241025\")\nprint(index_analysis_daily_sw_df)\n```\n\n数据示例\n\n```\n   指数代码    指数名称   发布日期    收盘指数  ...  成交额占比   流通市值 平均流通市值 股息率\n0  801001     申万50   2024-10-25  3073.15  ...    9.48   80271.53  1605.43  2.85\n1  801002     申万中小  2024-10-25  6137.80  ...   17.40   58574.66    63.39  1.47\n2  801003     申万Ａ指  2024-10-25  3694.53  ...  100.00  349595.86    74.51  1.86\n3  801005     申万创业  2024-10-25  2830.78  ...   32.76   58026.76    61.34  0.78\n4  801250     申万制造  2024-10-25  4513.51  ...   44.94  121638.16    63.35  1.01\n5  801260     申万消费  2024-10-25  6427.74  ...   13.15   72040.49    72.62  2.18\n6  801270     申万投资  2024-10-25  3117.80  ...   11.75   49872.16    60.67  2.32\n7  801280     申万服务  2024-10-25  2524.14  ...   29.99  112674.97    83.71  2.37\n8  801300  申万300指数  2024-10-25  2877.66  ...   31.51  169457.12   564.86  2.46\n[9 rows x 14 columns]\n```\n\n#### 申万指数分析-周报表\n\n接口: index_analysis_weekly_sw\n\n目标地址: https://www.swsresearch.com//institute_sw/allIndex/analysisIndex\n\n描述: 申万宏源研究-指数分析-周报表\n\n限量: 该接口返回指定参数的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                            |\n|--------|-----|-------------------------------------------------------------------------------|\n| symbol | str | symbol=\"市场表征\"; choice of {\"市场表征\", \"一级行业\", \"二级行业\", \"风格指数\"}                     |\n| date   | str | start_date=\"20221104\"; 通过调用 ak.index_analysis_week_month_sw(date=\"week\") 接口获取 |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 指数代码   | object  | -        |\n| 指数名称   | object  | -        |\n| 发布日期   | object  | -        |\n| 收盘指数   | float64 | -        |\n| 成交量    | float64 | 注意单位: 亿股 |\n| 涨跌幅    | float64 | 注意单位: %  |\n| 换手率    | float64 | 注意单位: %  |\n| 市盈率    | float64 | 注意单位: 倍  |\n| 市净率    | float64 | 注意单位: 倍  |\n| 均价     | float64 | 注意单位: 元  |\n| 成交额占比  | float64 | 注意单位: %  |\n| 流通市值   | float64 | 注意单位: 亿元 |\n| 平均流通市值 | float64 | 注意单位: 亿元 |\n| 股息率    | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_analysis_weekly_sw_df = ak.index_analysis_weekly_sw(symbol=\"市场表征\", date=\"20241025\")\nprint(index_analysis_weekly_sw_df)\n```\n\n数据示例\n\n```\n   指数代码     指数名称 发布日期     收盘指数  ...   成交额占比 流通市值  平均流通市值 股息率\n0  801001     申万50   2024-10-25  3073.15  ...   12.21   80271.53  1605.43  2.85\n1  801002     申万中小  2024-10-25  6137.80  ...   20.65   58574.66    63.39  1.47\n2  801003     申万Ａ指  2024-10-25  3694.53  ...  100.00  349595.86    74.51  1.86\n3  801005     申万创业  2024-10-25  2830.78  ...   42.01   58026.76    61.34  0.78\n4  801250     申万制造  2024-10-25  4513.51  ...   56.09  121638.16    63.35  1.01\n5  801260     申万消费  2024-10-25  6427.74  ...   15.56   72040.49    72.62  2.18\n6  801270     申万投资  2024-10-25  3117.80  ...   12.77   49872.16    60.67  2.32\n7  801280     申万服务  2024-10-25  2524.14  ...   38.88  112674.97    83.71  2.37\n8  801300  申万300指数  2024-10-25  2877.66  ...   33.49  169457.12   564.86  2.46\n[9 rows x 14 columns]\n```\n\n#### 申万指数分析-月报表\n\n接口: index_analysis_monthly_sw\n\n目标地址: https://www.swsresearch.com/institute_sw/allIndex/analysisIndex\n\n描述: 申万宏源研究-指数分析-月报表\n\n限量: 该接口返回指定参数的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                             |\n|--------|-----|--------------------------------------------------------------------------------|\n| symbol | str | symbol=\"市场表征\"; choice of {\"市场表征\", \"一级行业\", \"二级行业\", \"风格指数\"}                      |\n| date   | str | start_date=\"20221031\"; 通过调用 ak.index_analysis_week_month_sw(date=\"month\") 接口获取 |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 指数代码   | object  | -        |\n| 指数名称   | object  | -        |\n| 发布日期   | object  | -        |\n| 收盘指数   | float64 | -        |\n| 成交量    | float64 | 注意单位: 亿股 |\n| 涨跌幅    | float64 | 注意单位: %  |\n| 换手率    | float64 | 注意单位: %  |\n| 市盈率    | float64 | 注意单位: 倍  |\n| 市净率    | float64 | 注意单位: 倍  |\n| 均价     | float64 | 注意单位: 元  |\n| 成交额占比  | float64 | 注意单位: %  |\n| 流通市值   | float64 | 注意单位: 亿元 |\n| 平均流通市值 | float64 | 注意单位: 亿元 |\n| 股息率    | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_analysis_monthly_sw_df = ak.index_analysis_monthly_sw(symbol=\"市场表征\", date=\"20240930\")\nprint(index_analysis_monthly_sw_df)\n```\n\n数据示例\n\n```\n   指数代码    指数名称   发布日期    收盘指数  ...  成交额占比  流通市值 平均流通市值 股息率\n0  801001     申万50   2024-09-30  3152.14  ...   16.29   82379.30  1647.59  2.72\n1  801002     申万中小  2024-09-30  5988.52  ...   21.36   57060.17    61.75  1.47\n2  801003     申万Ａ指  2024-09-30  3636.02  ...  100.00  343958.32    73.31  1.84\n3  801005     申万创业  2024-09-30  2636.53  ...   30.85   53963.62    57.04  0.84\n4  801250     申万制造  2024-09-30  4218.84  ...   44.72  113449.40    59.06  1.04\n5  801260     申万消费  2024-09-30  6665.38  ...   20.02   74580.85    75.18  2.07\n6  801270     申万投资  2024-09-30  3193.45  ...   16.36   50974.14    62.16  2.22\n7  801280     申万服务  2024-09-30  2489.15  ...   39.48  110978.29    82.63  2.33\n8  801300  申万300指数  2024-09-30  2889.29  ...   35.97  170126.42   567.09  2.39\n[9 rows x 14 columns]\n```\n\n### 市场情绪指数\n\n#### A 股新闻情绪指数\n\n接口: index_news_sentiment_scope\n\n目标地址: https://www.chinascope.com/reasearch.html\n\n描述: 数库-A股新闻情绪指数\n\n限量: 该接口返回近一年的 A 股新闻情绪指数数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称      | 类型      | 描述 |\n|---------|---------|----|\n| 日期      | object  | -  |\n| 市场情绪指数  | float64 | -  |\n| 沪深300指数 | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_news_sentiment_scope_df = ak.index_news_sentiment_scope()\nprint(index_news_sentiment_scope_df)\n```\n\n数据示例\n\n```\n        日期    市场情绪指数  沪深300指数\n0    2023-10-31  0.986883  3607.2454\n1    2023-11-01  0.995480  3607.2454\n2    2023-11-02  1.005612  3607.2454\n3    2023-11-03  1.017992  3607.2454\n4    2023-11-06  1.017223  3607.2454\n..          ...       ...        ...\n236  2024-10-25  0.996452  3956.4210\n237  2024-10-28  1.001457  3964.1569\n238  2024-10-29  1.008418  3924.6490\n239  2024-10-30  1.004648  3889.4487\n240  2024-10-31  1.007300  3891.0396\n[241 rows x 3 columns]\n```\n"
  },
  {
    "path": "docs/data/index.rst",
    "content": "AKShare 数据字典\n=================\n\n数据字典主要介绍 AKShare 提供的数据接口的详细说明\n\n.. toctree::\n    :maxdepth: 6\n\n    stock/stock\n    futures/futures\n    bond/bond\n    option/option\n    fx/fx\n    currency/currency\n    spot/spot\n    interest_rate/interest_rate\n    fund/fund_private\n    fund/fund_public\n    index/index\n    macro/macro\n    dc/dc\n    bank/bank\n    article/article\n    energy/energy\n    event/event\n    hf/hf\n    nlp/nlp\n    qdii/qdii\n    others/others\n    qhkc/index\n    tool/tool\n"
  },
  {
    "path": "docs/data/interest_rate/interest_rate.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 利率数据\n\n### 主要央行利率\n\n#### 美联储利率决议报告\n\n接口: macro_bank_usa_interest_rate\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_interest_rate_decision\n\n描述: 美联储利率决议报告, 数据区间从 19820927-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_bank_usa_interest_rate_df = ak.macro_bank_usa_interest_rate()\nprint(macro_bank_usa_interest_rate_df)\n```\n\n数据示例\n\n```\n            商品          日期     今值   预测值     前值\n0    美联储利率决议报告  1982-09-28  10.25   NaN    NaN\n1    美联储利率决议报告  1982-10-02  10.00   NaN  10.25\n2    美联储利率决议报告  1982-10-08   9.50   NaN  10.00\n3    美联储利率决议报告  1982-11-20   9.00   NaN   9.50\n4    美联储利率决议报告  1982-12-15   8.50   NaN   9.00\n..         ...         ...    ...   ...    ...\n282  美联储利率决议报告  2024-06-13   5.50  5.50   5.50\n283  美联储利率决议报告  2024-08-01   5.50  5.50   5.50\n284  美联储利率决议报告  2024-09-19   5.00  5.25   5.50\n285  美联储利率决议报告  2024-11-08    NaN  4.75   5.00\n286  美联储利率决议报告  2024-12-19    NaN   NaN    NaN\n[287 rows x 5 columns]\n```\n\n#### 欧洲央行决议报告\n\n接口: macro_bank_euro_interest_rate\n\n目标地址: https://datacenter.jin10.com/reportType/dc_interest_rate_decision\n\n描述: 欧洲央行决议报告, 数据区间从 19990101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_bank_euro_interest_rate_df = ak.macro_bank_euro_interest_rate()\nprint(macro_bank_euro_interest_rate_df)\n```\n\n数据示例\n\n```\n           商品          日期    今值   预测值    前值\n0    欧洲央行决议报告  1999-01-01  3.00   NaN   NaN\n1    欧洲央行决议报告  1999-02-01  3.00   NaN  3.00\n2    欧洲央行决议报告  1999-03-01  3.00   NaN  3.00\n3    欧洲央行决议报告  1999-04-01  3.00   NaN  3.00\n4    欧洲央行决议报告  1999-05-01  2.50   NaN  3.00\n..        ...         ...   ...   ...   ...\n268  欧洲央行决议报告  2024-06-06  4.25  4.25  4.50\n269  欧洲央行决议报告  2024-07-18  4.25  4.25  4.25\n270  欧洲央行决议报告  2024-09-12  3.65  3.65  4.25\n271  欧洲央行决议报告  2024-10-17  3.40  3.40  3.65\n272  欧洲央行决议报告  2024-12-12   NaN   NaN   NaN\n[273 rows x 5 columns]\n```\n\n#### 新西兰联储决议报告\n\n接口: macro_bank_newzealand_interest_rate\n\n目标地址: https://datacenter.jin10.com/reportType/dc_newzealand_interest_rate_decision\n\n描述: 新西兰联储决议报告, 数据区间从 19990401-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_bank_newzealand_interest_rate_df = ak.macro_bank_newzealand_interest_rate()\nprint(macro_bank_newzealand_interest_rate_df)\n```\n\n数据示例\n\n```\n            商品          日期    今值   预测值    前值\n0    新西兰利率决议报告  1999-04-01  4.50   NaN   NaN\n1    新西兰利率决议报告  1999-05-01  4.50   NaN  4.50\n2    新西兰利率决议报告  1999-06-01  4.50   NaN  4.50\n3    新西兰利率决议报告  1999-07-01  4.50   NaN  4.50\n4    新西兰利率决议报告  1999-08-01  4.50   NaN  4.50\n..         ...         ...   ...   ...   ...\n230  新西兰利率决议报告  2024-05-22  5.50  5.50  5.50\n231  新西兰利率决议报告  2024-07-10  5.50  5.50  5.50\n232  新西兰利率决议报告  2024-08-14  5.25  5.50  5.50\n233  新西兰利率决议报告  2024-10-09  4.75  4.75  5.25\n234  新西兰利率决议报告  2024-11-27   NaN   NaN  4.75\n[235 rows x 5 columns]\n```\n\n#### 中国央行决议报告\n\n接口: macro_bank_china_interest_rate\n\n目标地址: https://datacenter.jin10.com/reportType/dc_china_interest_rate_decision\n\n描述: 中国央行决议报告, 数据区间从 19910105-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_bank_china_interest_rate_df = ak.macro_bank_china_interest_rate()\nprint(macro_bank_china_interest_rate_df)\n```\n\n数据示例\n\n```\n           商品          日期    今值  预测值    前值\n0    中国央行决议报告  1991-05-01  8.64  NaN   NaN\n1    中国央行决议报告  1991-06-01  8.64  NaN  8.64\n2    中国央行决议报告  1991-07-01  8.64  NaN  8.64\n3    中国央行决议报告  1991-08-01  8.64  NaN  8.64\n4    中国央行决议报告  1991-09-01  8.64  NaN  8.64\n..        ...         ...   ...  ...   ...\n213  中国央行决议报告  2015-08-25  4.60  NaN  4.85\n214  中国央行决议报告  2015-10-23  4.35  NaN  4.60\n215  中国央行决议报告  2019-09-20  4.20  NaN  4.25\n216  中国央行决议报告  2019-10-21  4.20  NaN  4.20\n217  中国央行决议报告  2019-11-20  4.15  4.2  4.20\n[218 rows x 5 columns]\n```\n\n#### 瑞士央行利率决议报告\n\n接口: macro_bank_switzerland_interest_rate\n\n目标地址: https://datacenter.jin10.com/reportType/dc_switzerland_interest_rate_decision\n\n描述: 瑞士央行利率决议报告, 数据区间从 20080313-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_bank_switzerland_interest_rate_df = ak.macro_bank_switzerland_interest_rate()\nprint(macro_bank_switzerland_interest_rate_df)\n```\n\n数据示例\n\n```\n          商品          日期    今值   预测值    前值\n0   瑞士央行决议报告  2008-03-13  2.75  2.75  2.75\n1   瑞士央行决议报告  2008-06-19  2.75  2.75  2.75\n2   瑞士央行决议报告  2008-09-18  2.75  2.75  2.75\n3   瑞士央行决议报告  2008-10-08  2.50   NaN  2.75\n4   瑞士央行决议报告  2008-12-11  0.50  0.50  1.00\n..       ...         ...   ...   ...   ...\n67  瑞士央行决议报告  2023-12-14  1.75  1.75  1.75\n68  瑞士央行决议报告  2024-03-21  1.50  1.75  1.75\n69  瑞士央行决议报告  2024-06-20  1.25  1.50  1.50\n70  瑞士央行决议报告  2024-09-26  1.00  1.00  1.25\n71  瑞士央行决议报告  2024-12-12   NaN   NaN   NaN\n[72 rows x 5 columns]\n```\n\n#### 英国央行决议报告\n\n接口: macro_bank_english_interest_rate\n\n目标地址: https://datacenter.jin10.com/reportType/dc_english_interest_rate_decision\n\n描述: 英国央行决议报告, 数据区间从 19700101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_bank_english_interest_rate_df = ak.macro_bank_english_interest_rate()\nprint(macro_bank_english_interest_rate_df)\n```\n\n数据示例\n\n```\n           商品          日期    今值   预测值    前值\n0    英国央行决议报告  1970-01-01  8.00   NaN   NaN\n1    英国央行决议报告  1970-02-01  8.00   NaN  8.00\n2    英国央行决议报告  1970-03-01  8.00   NaN  8.00\n3    英国央行决议报告  1970-04-01  7.50   NaN  8.00\n4    英国央行决议报告  1970-05-01  7.00   NaN  7.50\n..        ...         ...   ...   ...   ...\n627  英国央行决议报告  2024-06-20  5.25  5.25  5.25\n628  英国央行决议报告  2024-08-01  5.00  5.00  5.25\n629  英国央行决议报告  2024-09-19  5.00  5.00  5.00\n630  英国央行决议报告  2024-11-07   NaN  4.75  5.00\n631  英国央行决议报告  2024-12-19   NaN   NaN   NaN\n[632 rows x 5 columns]\n```\n\n#### 澳洲联储决议报告\n\n接口: macro_bank_australia_interest_rate\n\n目标地址: https://datacenter.jin10.com/reportType/dc_australia_interest_rate_decision\n\n描述: 澳洲联储决议报告, 数据区间从 19800201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_bank_australia_interest_rate_df = ak.macro_bank_australia_interest_rate()\nprint(macro_bank_australia_interest_rate_df)\n```\n\n数据示例\n\n```\n           商品          日期     今值   预测值    前值\n0    澳洲联储决议报告  1980-02-01   7.92   NaN   NaN\n1    澳洲联储决议报告  1980-03-01   8.20   NaN  7.92\n2    澳洲联储决议报告  1980-04-01   9.25   NaN  8.20\n3    澳洲联储决议报告  1980-05-01   8.98   NaN  9.25\n4    澳洲联储决议报告  1980-06-01  10.74   NaN  8.98\n..        ...         ...    ...   ...   ...\n517  澳洲联储决议报告  2024-06-18   4.35  4.35  4.35\n518  澳洲联储决议报告  2024-08-06   4.35  4.35  4.35\n519  澳洲联储决议报告  2024-09-24   4.35  4.35  4.35\n520  澳洲联储决议报告  2024-11-05   4.35  4.35  4.35\n521  澳洲联储决议报告  2024-12-10    NaN   NaN   NaN\n[522 rows x 5 columns]\n```\n\n#### 日本利率决议报告\n\n接口: macro_bank_japan_interest_rate\n\n目标地址: https://datacenter.jin10.com/reportType/dc_japan_interest_rate_decision\n\n描述: 日本利率决议报告, 数据区间从 20080214-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_bank_japan_interest_rate_df = ak.macro_bank_japan_interest_rate()\nprint(macro_bank_japan_interest_rate_df)\n```\n\n数据示例\n\n```\n           商品          日期    今值   预测值    前值\n0    日本央行决议报告  2008-02-14  0.50  0.50  0.50\n1    日本央行决议报告  2008-03-07  0.50  0.50  0.50\n2    日本央行决议报告  2008-04-09  0.50  0.50  0.50\n3    日本央行决议报告  2008-04-30  0.50  0.50  0.50\n4    日本央行决议报告  2008-06-13  0.50  0.50  0.50\n..        ...         ...   ...   ...   ...\n190  日本央行决议报告  2024-06-14  0.10  0.10  0.10\n191  日本央行决议报告  2024-07-31  0.25  0.10  0.10\n192  日本央行决议报告  2024-09-20  0.25  0.25  0.25\n193  日本央行决议报告  2024-10-31  0.25  0.25  0.25\n194  日本央行决议报告  2024-12-19   NaN   NaN  0.25\n[195 rows x 5 columns]\n```\n\n#### 俄罗斯利率决议报告\n\n接口: macro_bank_russia_interest_rate\n\n目标地址: https://datacenter.jin10.com/reportType/dc_russia_interest_rate_decision\n\n描述: 俄罗斯利率决议报告, 数据区间从 20030601-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_bank_russia_interest_rate_df = ak.macro_bank_russia_interest_rate()\nprint(macro_bank_russia_interest_rate_df)\n```\n\n数据示例\n\n```\n            商品          日期    今值   预测值    前值\n0    俄罗斯央行决议报告  2003-06-01   6.5   NaN   NaN\n1    俄罗斯央行决议报告  2003-07-01   6.5   NaN   6.5\n2    俄罗斯央行决议报告  2003-08-01   6.5   NaN   6.5\n3    俄罗斯央行决议报告  2003-09-01   6.5   NaN   6.5\n4    俄罗斯央行决议报告  2003-10-01   6.5   NaN   6.5\n..         ...         ...   ...   ...   ...\n214  俄罗斯央行决议报告  2024-04-26  16.0  16.0  16.0\n215  俄罗斯央行决议报告  2024-06-07  16.0  16.0  16.0\n216  俄罗斯央行决议报告  2024-07-26  18.0  18.0  16.0\n217  俄罗斯央行决议报告  2024-09-13  19.0  18.0  18.0\n218  俄罗斯央行决议报告  2024-10-25  21.0  20.0  19.0\n[219 rows x 5 columns]\n```\n\n#### 印度利率决议报告\n\n接口: macro_bank_india_interest_rate\n\n目标地址: https://datacenter.jin10.com/reportType/dc_india_interest_rate_decision\n\n描述: 印度利率决议报告, 数据区间从 20000801-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_bank_india_interest_rate_df = ak.macro_bank_india_interest_rate()\nprint(macro_bank_india_interest_rate_df)\n```\n\n数据示例\n\n```\n           商品          日期     今值  预测值     前值\n0    印度央行决议报告  2000-08-01   7.38  NaN    NaN\n1    印度央行决议报告  2000-09-01  13.35  NaN   7.38\n2    印度央行决议报告  2000-10-01  10.52  NaN  13.35\n3    印度央行决议报告  2000-11-01   8.61  NaN  10.52\n4    印度央行决议报告  2000-12-01   8.00  NaN   8.61\n..        ...         ...    ...  ...    ...\n222  印度央行决议报告  2024-02-08   6.50  6.5   6.50\n223  印度央行决议报告  2024-04-05   6.50  6.5   6.50\n224  印度央行决议报告  2024-06-07   6.50  6.5   6.50\n225  印度央行决议报告  2024-08-08   6.50  6.5   6.50\n226  印度央行决议报告  2024-10-09   6.50  6.5   6.50\n[227 rows x 5 columns]\n```\n\n#### 巴西利率决议报告\n\n接口: macro_bank_brazil_interest_rate\n\n目标地址: https://datacenter.jin10.com/reportType/dc_brazil_interest_rate_decision\n\n描述: 巴西利率决议报告, 数据区间从20080201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_bank_brazil_interest_rate_df = ak.macro_bank_brazil_interest_rate()\nprint(macro_bank_brazil_interest_rate_df)\n```\n\n数据示例\n\n```\n           商品          日期     今值    预测值     前值\n0    巴西央行决议报告  2008-02-01  11.25    NaN    NaN\n1    巴西央行决议报告  2008-04-01  11.25    NaN  11.25\n2    巴西央行决议报告  2008-05-01  11.75    NaN  11.25\n3    巴西央行决议报告  2008-07-01  12.25    NaN  11.75\n4    巴西央行决议报告  2008-08-01  13.00    NaN  12.25\n..        ...         ...    ...    ...    ...\n145  巴西央行决议报告  2024-06-20  10.50  10.50  10.50\n146  巴西央行决议报告  2024-08-01  10.50  10.50  10.50\n147  巴西央行决议报告  2024-09-19  10.75  10.75  10.50\n148  巴西央行决议报告  2024-11-07    NaN  11.25  10.75\n149  巴西央行决议报告  2024-12-12    NaN    NaN    NaN\n[150 rows x 5 columns]\n```\n\n### 银行间拆借利率\n\n接口: rate_interbank\n\n目标地址: https://data.eastmoney.com/shibor/shibor.aspx?m=sg&t=88&d=99333&cu=sgd&type=009065&p=79\n\n描述: 东方财富-拆借利率一览-具体市场的具体品种的具体指标的拆借利率数据\n\n限量: 返回所有历史数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                                                                                 |\n|-----------|-----|------------------------------------------------------------------------------------------------------------------------------------|\n| market    | str | market=\"上海银行同业拆借市场\"; 参见 **市场-品种-指标一览表**                                                                                            |\n| symbol    | str | symbol=\"Shibor人民币\"; 参见 **市场-品种-指标一览表**                                                                                             |\n| indicator | str | indicator=\"隔夜\"; 参见 **市场-品种-指标一览表**                                                                                                 |\n\n市场-品种-指标一览表\n\n| market      | symbol    | indicator |\n|-------------|-----------|-----------|\n| 上海银行同业拆借市场  | Shibor人民币 | 隔夜        |\n| 上海银行同业拆借市场  | Shibor人民币 | 1周        |\n| 上海银行同业拆借市场  | Shibor人民币 | 2周        |\n| 上海银行同业拆借市场  | Shibor人民币 | 1月        |\n| 上海银行同业拆借市场  | Shibor人民币 | 3月        |\n| 上海银行同业拆借市场  | Shibor人民币 | 6月        |\n| 上海银行同业拆借市场  | Shibor人民币 | 9月        |\n| 上海银行同业拆借市场  | Shibor人民币 | 1年        |\n| 中国银行同业拆借市场  | Chibor人民币 | 隔夜        |\n| 中国银行同业拆借市场  | Chibor人民币 | 1周        |\n| 中国银行同业拆借市场  | Chibor人民币 | 2周        |\n| 中国银行同业拆借市场  | Chibor人民币 | 3周        |\n| 中国银行同业拆借市场  | Chibor人民币 | 1月        |\n| 中国银行同业拆借市场  | Chibor人民币 | 2月        |\n| 中国银行同业拆借市场  | Chibor人民币 | 3月        |\n| 中国银行同业拆借市场  | Chibor人民币 | 4月        |\n| 中国银行同业拆借市场  | Chibor人民币 | 6月        |\n| 中国银行同业拆借市场  | Chibor人民币 | 9月        |\n| 中国银行同业拆借市场  | Chibor人民币 | 1年        |\n| 伦敦银行同业拆借市场  | Libor英镑   | 隔夜        |\n| 伦敦银行同业拆借市场  | Libor英镑   | 1周        |\n| 伦敦银行同业拆借市场  | Libor英镑   | 1月        |\n| 伦敦银行同业拆借市场  | Libor英镑   | 2月        |\n| 伦敦银行同业拆借市场  | Libor英镑   | 3月        |\n| 伦敦银行同业拆借市场  | Libor英镑   | 8月        |\n| 伦敦银行同业拆借市场  | Libor美元   | 隔夜        |\n| 伦敦银行同业拆借市场  | Libor美元   | 1周        |\n| 伦敦银行同业拆借市场  | Libor美元   | 1月        |\n| 伦敦银行同业拆借市场  | Libor美元   | 2月        |\n| 伦敦银行同业拆借市场  | Libor美元   | 3月        |\n| 伦敦银行同业拆借市场  | Libor美元   | 8月        |\n| 伦敦银行同业拆借市场  | Libor欧元   | 隔夜        |\n| 伦敦银行同业拆借市场  | Libor欧元   | 1周        |\n| 伦敦银行同业拆借市场  | Libor欧元   | 1月        |\n| 伦敦银行同业拆借市场  | Libor欧元   | 2月        |\n| 伦敦银行同业拆借市场  | Libor欧元   | 3月        |\n| 伦敦银行同业拆借市场  | Libor欧元   | 8月        |\n| 伦敦银行同业拆借市场  | Libor日元   | 隔夜        |\n| 伦敦银行同业拆借市场  | Libor日元   | 1周        |\n| 伦敦银行同业拆借市场  | Libor日元   | 1月        |\n| 伦敦银行同业拆借市场  | Libor日元   | 2月        |\n| 伦敦银行同业拆借市场  | Libor日元   | 3月        |\n| 伦敦银行同业拆借市场  | Libor日元   | 8月        |\n| 欧洲银行同业拆借市场  | Euribor欧元 | 1周        |\n| 欧洲银行同业拆借市场  | Euribor欧元 | 2周        |\n| 欧洲银行同业拆借市场  | Euribor欧元 | 3周        |\n| 欧洲银行同业拆借市场  | Euribor欧元 | 1月        |\n| 欧洲银行同业拆借市场  | Euribor欧元 | 2月        |\n| 欧洲银行同业拆借市场  | Euribor欧元 | 3月        |\n| 欧洲银行同业拆借市场  | Euribor欧元 | 4月        |\n| 欧洲银行同业拆借市场  | Euribor欧元 | 5月        |\n| 欧洲银行同业拆借市场  | Euribor欧元 | 6月        |\n| 欧洲银行同业拆借市场  | Euribor欧元 | 7月        |\n| 欧洲银行同业拆借市场  | Euribor欧元 | 8月        |\n| 欧洲银行同业拆借市场  | Euribor欧元 | 9月        |\n| 欧洲银行同业拆借市场  | Euribor欧元 | 10月       |\n| 欧洲银行同业拆借市场  | Euribor欧元 | 11月       |\n| 欧洲银行同业拆借市场  | Euribor欧元 | 1年        |\n| 香港银行同业拆借市场  | Hibor港币   | 隔夜        |\n| 香港银行同业拆借市场  | Hibor港币   | 1周        |\n| 香港银行同业拆借市场  | Hibor港币   | 2周        |\n| 香港银行同业拆借市场  | Hibor港币   | 1月        |\n| 香港银行同业拆借市场  | Hibor港币   | 2月        |\n| 香港银行同业拆借市场  | Hibor港币   | 3月        |\n| 香港银行同业拆借市场  | Hibor港币   | 4月        |\n| 香港银行同业拆借市场  | Hibor港币   | 5月        |\n| 香港银行同业拆借市场  | Hibor港币   | 6月        |\n| 香港银行同业拆借市场  | Hibor港币   | 7月        |\n| 香港银行同业拆借市场  | Hibor港币   | 8月        |\n| 香港银行同业拆借市场  | Hibor港币   | 9月        |\n| 香港银行同业拆借市场  | Hibor港币   | 10月       |\n| 香港银行同业拆借市场  | Hibor港币   | 11月       |\n| 香港银行同业拆借市场  | Hibor港币   | 1年        |\n| 香港银行同业拆借市场  | Hibor美元   | 隔夜        |\n| 香港银行同业拆借市场  | Hibor美元   | 1周        |\n| 香港银行同业拆借市场  | Hibor美元   | 2周        |\n| 香港银行同业拆借市场  | Hibor美元   | 1月        |\n| 香港银行同业拆借市场  | Hibor美元   | 2月        |\n| 香港银行同业拆借市场  | Hibor美元   | 3月        |\n| 香港银行同业拆借市场  | Hibor美元   | 4月        |\n| 香港银行同业拆借市场  | Hibor美元   | 5月        |\n| 香港银行同业拆借市场  | Hibor美元   | 6月        |\n| 香港银行同业拆借市场  | Hibor美元   | 7月        |\n| 香港银行同业拆借市场  | Hibor美元   | 8月        |\n| 香港银行同业拆借市场  | Hibor美元   | 9月        |\n| 香港银行同业拆借市场  | Hibor美元   | 10月       |\n| 香港银行同业拆借市场  | Hibor美元   | 11月       |\n| 香港银行同业拆借市场  | Hibor美元   | 1年        |\n| 香港银行同业拆借市场  | Hibor人民币  | 隔夜        |\n| 香港银行同业拆借市场  | Hibor人民币  | 1周        |\n| 香港银行同业拆借市场  | Hibor人民币  | 2周        |\n| 香港银行同业拆借市场  | Hibor人民币  | 1月        |\n| 香港银行同业拆借市场  | Hibor人民币  | 2月        |\n| 香港银行同业拆借市场  | Hibor人民币  | 3月        |\n| 香港银行同业拆借市场  | Hibor人民币  | 6月        |\n| 香港银行同业拆借市场  | Hibor人民币  | 1年        |\n| 新加坡银行同业拆借市场 | Sibor星元   | 1月        |\n| 新加坡银行同业拆借市场 | Sibor星元   | 2月        |\n| 新加坡银行同业拆借市场 | Sibor星元   | 3月        |\n| 新加坡银行同业拆借市场 | Sibor星元   | 6月        |\n| 新加坡银行同业拆借市场 | Sibor星元   | 9月        |\n| 新加坡银行同业拆借市场 | Sibor星元   | 1年        |\n| 新加坡银行同业拆借市场 | Sibor美元   | 1月        |\n| 新加坡银行同业拆借市场 | Sibor美元   | 2月        |\n| 新加坡银行同业拆借市场 | Sibor美元   | 3月        |\n| 新加坡银行同业拆借市场 | Sibor美元   | 6月        |\n| 新加坡银行同业拆借市场 | Sibor美元   | 9月        |\n| 新加坡银行同业拆借市场 | Sibor美元   | 1年        |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 日期  | object  | -        |\n| 利率  | float64 | 注意单位: %  |\n| 涨跌  | float64 | 注意单位: BP |\n\n示例代码\n\n```python\nimport akshare as ak\n\nrate_interbank_df = ak.rate_interbank(market=\"上海银行同业拆借市场\", symbol=\"Shibor人民币\", indicator=\"3月\")\nprint(rate_interbank_df)\n```\n\n数据示例\n\n```\n      报告日      利率    涨跌\n0     2006-10-08  2.6110  0.00\n1     2006-10-09  2.6248  1.38\n2     2006-10-10  2.6325  0.77\n3     2006-10-11  2.6338  0.13\n4     2006-10-12  2.6380  0.42\n...          ...     ...   ...\n4391  2024-05-07  1.9960 -0.50\n4392  2024-05-08  1.9900 -0.60\n4393  2024-05-09  1.9910  0.10\n4394  2024-05-10  1.9890 -0.20\n4395  2024-05-11  1.9880 -0.10\n[4396 rows x 3 columns]\n```\n\n### 回购定盘利率-历史\n\n接口: repo_rate_hist\n\n目标地址: https://www.chinamoney.com.cn/chinese/bkfrr/\n\n描述: 回购定盘利率数据\n\n限量: 单次返回指定日期间(一年)的所有历史数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                     |\n|------------|-----|----------------------------------------|\n| start_date | str | start_date=\"20200930\"; 开始时间与结束时间需要在一年内 |\n| end_date   | str | end_date=\"20201029\"; 开始时间与结束时间需要在一年内   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| date   | object  | -       |\n| FR001  | float64 | 注意单位: % |\n| FR007  | float64 | 注意单位: % |\n| FR014  | float64 | 注意单位: % |\n| FDR001 | float64 | 注意单位: % |\n| FDR007 | float64 | 注意单位: % |\n| FDR014 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nrepo_rate_hist_df = ak.repo_rate_hist(start_date=\"20231001\", end_date=\"20240101\")\nprint(repo_rate_hist_df)\n```\n\n数据示例\n\n```\n          date   FR001   FR007  FR014  FDR001  FDR007  FDR014\n0   2023-10-07  1.7000  1.8500   1.82  1.7000  1.8224    1.82\n1   2023-10-08  1.5600  1.8000   1.78  1.5300  1.7500    1.75\n2   2023-10-09  1.8100  2.0100   1.85  1.7400  1.8000    1.80\n3   2023-10-10  1.9300  2.0500   2.22  1.8400  1.8600    1.90\n4   2023-10-11  1.9600  2.1400   2.20  1.8700  1.9200    2.00\n..         ...     ...     ...    ...     ...     ...     ...\n57  2023-12-25  1.6210  1.8117   3.90  1.5900  1.8000    3.15\n58  2023-12-26  1.5500  4.3500   3.80  1.4969  1.8305    3.10\n59  2023-12-27  1.5100  4.0000   3.10  1.4400  1.8728    3.05\n60  2023-12-28  1.5000  3.2000   3.00  1.3900  1.9572    2.95\n61  2023-12-29  1.9149  2.4000   2.45  1.7400  2.3000    2.40\n[62 rows x 7 columns]\n```\n\n### 回购定盘利率-近期\n\n接口: repo_rate_query\n\n目标地址: https://www.chinamoney.com.cn/chinese/bkfrr/\n\n描述: 回购定盘利率数据\n\n限量: 单次返回指定 symbol 的近期数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                 |\n|--------|-----|----------------------------------------------------|\n| symbol | str | symbol=\"回购定盘利率\"; choice of {\"回购定盘利率\", \"银银间回购定盘利率\"} |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| date   | object  | -       |\n| FR001  | float64 | 注意单位: % |\n| FR007  | float64 | 注意单位: % |\n| FR014  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nrepo_rate_query_df = ak.repo_rate_query(symbol=\"回购定盘利率\")\nprint(repo_rate_query_df)\n```\n\n数据示例\n\n```\n           date   FR001  FR007  FR014\n0    2021-01-19  2.3000   2.46   2.55\n1    2021-01-20  2.5000   2.65   2.80\n2    2021-01-21  2.6500   2.60   2.70\n3    2021-01-22  2.5500   2.40   2.70\n4    2021-01-25  2.5000   2.50   2.78\n..          ...     ...    ...    ...\n746  2024-01-15  1.8300   2.25   2.20\n747  2024-01-16  1.9528   2.25   2.38\n748  2024-01-17  2.0107   2.30   2.55\n749  2024-01-18  1.8800   2.20   2.30\n750  2024-01-19  1.8600   2.15   2.40\n[751 rows x 4 columns]\n```\n"
  },
  {
    "path": "docs/data/macro/macro.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 宏观数据\n\n### 中国宏观\n\n#### 中国宏观杠杆率\n\n接口: macro_cnbs\n\n目标地址: http://114.115.232.154:8080/\n\n描述: 中国国家金融与发展实验室-中国宏观杠杆率数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 年份      | object  | 日期, 年-月 |\n| 居民部门    | float64 | -       |\n| 非金融企业部门 | float64 | -       |\n| 政府部门    | float64 | -       |\n| 中央政府    | float64 | -       |\n| 地方政府    | float64 | -       |\n| 实体经济部门  | float64 | -       |\n| 金融部门资产方 | float64 | -       |\n| 金融部门负债方 | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_cnbs_df = ak.macro_cnbs()\nprint(macro_cnbs_df)\n```\n\n数据示例\n\n```\n       年份  居民部门  非金融企业部门  政府部门 中央政府 地方政府 实体经济部门 金融部门资产方 金融部门负债方\n0    1992-12   7.5     90.0   8.3   4.4   3.9   105.8      7.8      7.2\n1    1993-03   7.5     91.1   8.1   4.2   3.9   106.7      7.8      7.3\n2    1993-06   7.4     91.1   8.2   4.4   3.8   106.7      7.7      7.3\n3    1993-09   7.3     90.2   8.3   4.6   3.7   105.8      7.7      7.3\n4    1993-12   7.0     87.8   7.8   4.2   3.6   102.6      8.9      7.1\n..       ...   ...      ...   ...   ...   ...     ...      ...      ...\n121  2023-03  63.6    167.7  51.7  21.5  30.2   283.0     52.9     65.9\n122  2023-06  63.6    168.4  52.1  21.5  30.6   284.1     53.8     66.8\n123  2023-09  63.9    169.2  53.9  22.7  31.2   287.0     52.1     65.5\n124  2023-12  63.5    168.4  56.1  23.8  32.3   288.0     52.5     67.2\n125  2024-03  64.0    174.1  56.7  23.9  32.8   294.8     53.6     68.8\n[126 rows x 9 columns]\n```\n\n#### 国民经济运行状况\n\n##### 经济状况\n\n###### 企业商品价格指数\n\n接口: macro_china_qyspjg\n\n目标地址: http://data.eastmoney.com/cjsj/qyspjg.html\n\n描述: 东方财富-经济数据一览-中国-企业商品价格指数, 数据区间从 20050101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 月份       | object  | -       |\n| 总指数-指数值  | float64 | -       |\n| 总指数-同比增长 | float64 | 注意单位: % |\n| 总指数-环比增长 | float64 | 注意单位: % |\n| 农产品-指数值  | float64 | -       |\n| 农产品-同比增长 | float64 | 注意单位: % |\n| 农产品-环比增长 | float64 | 注意单位: % |\n| 矿产品-指数值  | float64 | -       |\n| 矿产品-同比增长 | float64 | 注意单位: % |\n| 矿产品-环比增长 | float64 | 注意单位: % |\n| 煤油电-指数值  | float64 | -       |\n| 煤油电-同比增长 | float64 | 注意单位: % |\n| 煤油电-环比增长 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_qyspjg_df = ak.macro_china_qyspjg()\nprint(macro_china_qyspjg_df)\n```\n\n数据示例\n\n```\n     月份  总指数-指数值  总指数-同比增长  ...  煤油电-指数值   煤油电-同比增长  煤油电-环比增长\n0    2022年09月份   101.70 -5.746061  ...   111.80  -4.931973 -2.272727\n1    2022年08月份   102.30 -4.925651  ...   114.40  -0.608167 -1.970865\n2    2022年07月份   103.10 -4.448563  ...   116.70   1.214224 -3.233831\n3    2022年06月份   105.20 -2.682701  ...   120.60   4.960836  0.249377\n4    2022年05月份   105.10 -3.666361  ...   120.30   4.427083 -1.635323\n..         ...      ...       ...  ...      ...        ...       ...\n208  2005年05月份   103.16 -5.738304  ...   122.53  11.168572  1.625612\n209  2005年04月份   102.81 -5.903350  ...   120.57  12.640135  0.920733\n210  2005年03月份   103.48 -4.485878  ...   119.47  14.292548  0.538585\n211  2005年02月份   104.82 -2.046538  ...   118.83  13.974679  2.590003\n212  2005年01月份   104.67 -1.957662  ...   115.83   8.903723 -1.814021\n```\n\n###### 外商直接投资数据\n\n接口: macro_china_fdi\n\n目标地址: https://data.eastmoney.com/cjsj/fdi.html\n\n描述: 东方财富-经济数据一览-中国-外商直接投资数据, 数据区间从 200801-202307\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述       |\n|---------|---------|----------|\n| 月份      | object  | -        |\n| 当月      | int64   | -        |\n| 当月-同比增长 | float64 | 注意单位: 美元 |\n| 当月-环比增长 | float64 | 注意单位: %  |\n| 累计      | float64 | 注意单位: 美元 |\n| 累计-同比增长 | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_fdi_df = ak.macro_china_fdi()\nprint(macro_china_fdi_df)\n```\n\n数据示例\n\n```\n     月份          当月        当月-同比增长 当月-环比增长  累计  累计-同比增长\n0    2008年01月份  11200250.0  116.422424 -14.460445   11200250   109.78\n1    2008年02月份   6928190.0   52.801205 -38.142541   18128440    75.19\n2    2008年03月份   9285600.0   50.171752  34.026347   27414040    61.26\n3    2008年04月份   7602890.0   70.214971 -18.121715   35016930    59.32\n4    2008年05月份   7760960.0   58.421856   2.079078   42777890    54.97\n..         ...         ...         ...        ...        ...      ...\n180  2023年01月份  19020000.0   20.075758  72.126697   19020000    10.00\n181  2023年02月份  20690000.0   -6.039964   8.780231   39710000     1.00\n182  2023年04月份         NaN         NaN        NaN   73500000    -3.30\n183  2023年05月份  10850000.0  -18.421053        NaN   84350000    -5.60\n184  2023年07月份         NaN         NaN        NaN  111800000    -9.80\n[185 rows x 6 columns]\n```\n\n###### LPR品种数据\n\n接口: macro_china_lpr\n\n目标地址: https://data.eastmoney.com/cjsj/globalRateLPR.html\n\n描述: 中国 LPR 品种数据, 数据区间从 19910421-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称         | 类型      | 描述                  |\n|------------|---------|---------------------|\n| TRADE_DATE | object  | 日期                  |\n| LPR1Y      | float64 | LPR_1Y利率(%)         |\n| LPR5Y      | float64 | LPR_5Y利率(%)         |\n| RATE_1     | float64 | 短期贷款利率:6个月至1年(含)(%) |\n| RATE_2     | float64 | 中长期贷款利率:5年以上(%)     |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_lpr_df = ak.macro_china_lpr()\nprint(macro_china_lpr_df)\n```\n\n数据示例\n\n```\n      TRADE_DATE  LPR1Y  LPR5Y  RATE_1  RATE_2\n0     1991-04-21    NaN    NaN    8.64    9.72\n1     1993-05-15    NaN    NaN    9.36   12.24\n2     1993-07-11    NaN    NaN   10.98   14.04\n3     1995-01-01    NaN    NaN   10.98   14.76\n4     1995-07-01    NaN    NaN   12.06   15.30\n          ...    ...    ...     ...     ...\n1533  2023-03-20   3.65    4.3    4.35    4.90\n1534  2023-04-20   3.65    4.3    4.35    4.90\n1535  2023-05-22   3.65    4.3    4.35    4.90\n1536  2023-06-20   3.55    4.2    4.35    4.90\n1537  2023-07-20   3.55    4.2    4.35    4.90\n[1538 rows x 5 columns]\n```\n\n###### 城镇调查失业率\n\n接口: macro_china_urban_unemployment\n\n目标地址: https://data.stats.gov.cn/dg/website/page.html#/pc/national/monthData\n\n描述: 国家统计局-月度数据-城镇调查失业率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| date  | object  | 年月 |\n| item  | object  | -  |\n| value | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_urban_unemployment_df = ak.macro_china_urban_unemployment()\nprint(macro_china_urban_unemployment_df)\n```\n\n数据示例\n\n```\n       date               item value\n0    201801  全国城镇25—59岁劳动力失业率    4.4\n1    201801         全国城镇调查失业率    5.0\n2    201802         全国城镇调查失业率    5.0\n3    201802  全国城镇25—59岁劳动力失业率    4.5\n4    201803         全国城镇调查失业率    5.1\n..      ...                ...   ...\n283  202601    全国城镇本地户籍劳动力失业率    5.3\n284  202601         全国城镇调查失业率    5.2\n285  202602    全国城镇外来户籍劳动力失业率    5.0\n286  202602    全国城镇本地户籍劳动力失业率    5.4\n287  202602         全国城镇调查失业率    5.3\n[288 rows x 3 columns]\n```\n\n###### 社会融资规模增量统计\n\n接口: macro_china_shrzgm\n\n目标地址: http://data.mofcom.gov.cn/gnmy/shrzgm.shtml\n\n描述: 商务数据中心-国内贸易-社会融资规模增量统计, 数据区间从 201501-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称             | 类型      | 描述              |\n|----------------|---------|-----------------|\n| 月份             | object  | 年月              |\n| 社会融资规模增量       | float64 | 注意单位: 亿元        |\n| 其中-人民币贷款       | float64 | 注意单位: 亿元        |\n| 其中-委托贷款外币贷款    | float64 | 注意单位: 折合人民币, 亿元 |\n| 其中-委托贷款        | float64 | 注意单位: 亿元        |\n| 其中-信托贷款        | float64 | 注意单位: 亿元        |\n| 其中-未贴现银行承兑汇票   | float64 | 注意单位: 亿元        |\n| 其中-企业债券        | float64 | 注意单位: 亿元        |\n| 其中-非金融企业境内股票融资 | float64 | 注意单位: 亿元        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_shrzgm_df = ak.macro_china_shrzgm()\nprint(macro_china_shrzgm_df)\n```\n\n数据示例\n\n```\n        月份  社会融资规模增量  其中-人民币贷款  ...  其中-未贴现银行承兑汇票  其中-企业债券  其中-非金融企业境内股票融资\n0   201501     20516     14708  ...          1946     1868           526.0\n1   201502     13609     11437  ...          -592      716           542.0\n2   201503     12433      9920  ...          -910     1344           639.0\n3   201504     10582      8045  ...           -74     1616           597.0\n4   201505     12397      8510  ...           961     1710           584.0\n..     ...       ...       ...  ...           ...      ...             ...\n82  202111     25983     13021  ...          -383     4006          1294.0\n83  202112     23682     10350  ...         -1419     2167          2075.0\n84  202201     61750     41988  ...          4733     5829          1439.0\n85  202202     11928      9084  ...         -4228     3377           585.0\n86  202203     46531     32291  ...           287     3573           958.0\n```\n\n###### 中国 GDP 年率\n\n接口: macro_china_gdp_yearly\n\n目标地址: https://datacenter.jin10.com/reportType/dc_chinese_gdp_yoy\n\n描述: 金十数据中心-中国 GDP 年率报告, 数据区间从 20110120-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_gdp_yearly_df = ak.macro_china_gdp_yearly()\nprint(macro_china_gdp_yearly_df)\n```\n\n数据示例\n\n```\n           商品          日期    今值   预测值    前值\n0   中国GDP年率报告  2011-01-20   9.8   9.5   9.6\n1   中国GDP年率报告  2011-04-15   9.7   9.4   9.8\n2   中国GDP年率报告  2011-07-13   9.5   9.5   9.7\n3   中国GDP年率报告  2011-10-18   9.1   9.2   9.5\n4   中国GDP年率报告  2012-01-17   8.9   8.8   9.1\n5   中国GDP年率报告  2012-04-13   8.1   8.3   8.9\n6   中国GDP年率报告  2012-07-13   7.6   7.6   8.1\n7   中国GDP年率报告  2012-10-18   7.4   7.4   7.6\n8   中国GDP年率报告  2013-01-18   7.9   7.8   7.4\n9   中国GDP年率报告  2013-04-15   7.7   8.0   7.9\n10  中国GDP年率报告  2013-07-15   7.5   7.5   7.7\n11  中国GDP年率报告  2013-10-18   7.8   7.8   7.5\n12  中国GDP年率报告  2014-01-20   7.7   7.6   7.8\n13  中国GDP年率报告  2014-04-16   7.4   7.3   7.7\n14  中国GDP年率报告  2014-07-16   7.5   7.4   7.4\n15  中国GDP年率报告  2014-10-21   7.3   7.2   7.5\n16  中国GDP年率报告  2015-01-20   7.3   7.2   7.3\n17  中国GDP年率报告  2015-04-15   7.0   7.0   7.3\n18  中国GDP年率报告  2015-07-15   7.0   6.9   7.0\n19  中国GDP年率报告  2015-10-19   6.9   6.8   7.0\n20  中国GDP年率报告  2016-01-19   6.8   6.8   6.9\n21  中国GDP年率报告  2016-04-15   6.7   6.7   6.8\n22  中国GDP年率报告  2016-07-15   6.7   6.6   6.7\n23  中国GDP年率报告  2016-10-19   6.7   6.7   6.7\n24  中国GDP年率报告  2017-01-20   6.8   6.7   6.7\n25  中国GDP年率报告  2017-04-17   6.9   6.8   6.8\n26  中国GDP年率报告  2017-07-17   6.9   6.8   6.9\n27  中国GDP年率报告  2017-10-19   6.8   6.8   6.9\n28  中国GDP年率报告  2018-01-18   6.8   6.7   6.8\n29  中国GDP年率报告  2018-04-17   6.8   6.8   6.8\n30  中国GDP年率报告  2018-07-16   6.7   6.7   6.8\n31  中国GDP年率报告  2018-10-19   6.5   6.6   6.7\n32  中国GDP年率报告  2019-01-21   6.4   6.4   6.5\n33  中国GDP年率报告  2019-04-17   6.4   6.3   6.4\n34  中国GDP年率报告  2019-07-15   6.2   6.2   6.4\n35  中国GDP年率报告  2019-10-18   6.0   6.1   6.2\n36  中国GDP年率报告  2020-01-17   6.0   6.0   6.0\n37  中国GDP年率报告  2020-04-17  -6.8  -6.5   6.0\n38  中国GDP年率报告  2020-07-16   3.2   2.5  -6.8\n39  中国GDP年率报告  2020-10-19   4.9   5.2   3.2\n40  中国GDP年率报告  2021-01-18   6.5   6.1   4.9\n41  中国GDP年率报告  2021-04-16  18.3  19.0   6.5\n42  中国GDP年率报告  2021-07-15   7.9   8.1  18.3\n43  中国GDP年率报告  2021-10-18   4.9   5.2   7.9\n44  中国GDP年率报告  2022-01-17   4.0   3.6   4.9\n45  中国GDP年率报告  2022-04-18   4.8   4.4   4.0\n46  中国GDP年率报告  2022-07-15   0.4   1.0   4.8\n47  中国GDP年率报告  2022-10-18   NaN   3.4   0.4\n48  中国GDP年率报告  2022-10-24   3.9   3.4   0.4\n49  中国GDP年率报告  2022-10-26   NaN   3.4   0.4\n50  中国GDP年率报告  2023-01-17   2.9   1.8   3.9\n51  中国GDP年率报告  2023-04-18   4.5   4.0   2.9\n52  中国GDP年率报告  2023-07-17   6.3   7.3   4.5\n53  中国GDP年率报告  2023-10-18   4.9   4.4   6.3\n54  中国GDP年率报告  2024-01-17   5.2   5.3   4.9\n55  中国GDP年率报告  2024-04-16   NaN   NaN   5.2\n```\n\n##### 物价水平\n\n###### 中国 CPI 年率报告\n\n接口: macro_china_cpi_yearly\n\n目标地址: https://datacenter.jin10.com/reportType/dc_chinese_cpi_yoy\n\n描述: 中国年度 CPI 数据, 数据区间从 19860201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_cpi_yearly_df = ak.macro_china_cpi_yearly()\nprint(macro_china_cpi_yearly_df)\n```\n\n数据示例\n\n```\n            商品          日期   今值  预测值   前值\n0    中国CPI年率报告  1986-02-01  7.1  NaN  NaN\n1    中国CPI年率报告  1986-03-01  7.1  NaN  7.1\n2    中国CPI年率报告  1986-04-01  7.1  NaN  7.1\n3    中国CPI年率报告  1986-05-01  7.1  NaN  7.1\n4    中国CPI年率报告  1986-06-01  7.1  NaN  7.1\n..         ...         ...  ...  ...  ...\n454  中国CPI年率报告  2023-12-09 -0.5 -0.1 -0.2\n455  中国CPI年率报告  2024-01-12 -0.3 -0.4 -0.5\n456  中国CPI年率报告  2024-02-08 -0.8 -0.5 -0.3\n457  中国CPI年率报告  2024-03-09  0.7  0.3 -0.8\n458  中国CPI年率报告  2024-04-11  NaN  NaN  0.7\n[459 rows x 5 columns]\n```\n\n###### 中国 CPI 月率报告\n\n接口: macro_china_cpi_monthly\n\n目标地址: https://datacenter.jin10.com/reportType/dc_chinese_cpi_mom\n\n描述: 中国月度 CPI 数据, 数据区间从 19960201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_cpi_monthly_df = ak.macro_china_cpi_monthly()\nprint(macro_china_cpi_monthly_df)\n```\n\n数据示例\n\n```\n            商品          日期   今值  预测值   前值\n0    中国CPI月率报告  1996-02-01  2.1  NaN  NaN\n1    中国CPI月率报告  1996-03-01  2.3  NaN  2.1\n2    中国CPI月率报告  1996-04-01  0.6  NaN  2.3\n3    中国CPI月率报告  1996-05-01  0.7  NaN  0.6\n4    中国CPI月率报告  1996-06-01 -0.5  NaN  0.7\n..         ...         ...  ...  ...  ...\n334  中国CPI月率报告  2023-12-09 -0.5 -0.1 -0.1\n335  中国CPI月率报告  2024-01-12  0.1  0.2 -0.5\n336  中国CPI月率报告  2024-02-08  0.3  0.4  0.1\n337  中国CPI月率报告  2024-03-09  1.0  0.7  0.3\n338  中国CPI月率报告  2024-04-11  NaN  NaN  1.0\n[339 rows x 5 columns]\n```\n\n###### 中国 PPI 年率报告\n\n接口: macro_china_ppi_yearly\n\n目标地址: https://datacenter.jin10.com/reportType/dc_chinese_ppi_yoy\n\n描述: 中国年度 PPI 数据, 数据区间从 19950801-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_ppi_yearly_df = ak.macro_china_ppi_yearly()\nprint(macro_china_ppi_yearly_df)\n```\n\n数据示例\n\n```\n            商品          日期    今值  预测值    前值\n0    中国PPI年率报告  1995-08-01  13.5  NaN   NaN\n1    中国PPI年率报告  1995-09-01  13.0  NaN  13.5\n2    中国PPI年率报告  1995-10-01  12.9  NaN  13.0\n3    中国PPI年率报告  1995-11-01  12.5  NaN  12.9\n4    中国PPI年率报告  1995-12-01  11.1  NaN  12.5\n..         ...         ...   ...  ...   ...\n340  中国PPI年率报告  2023-12-09  -3.0 -2.8  -2.6\n341  中国PPI年率报告  2024-01-12  -2.7 -2.6  -3.0\n342  中国PPI年率报告  2024-02-08  -2.5 -2.6  -2.7\n343  中国PPI年率报告  2024-03-09  -2.7 -2.5  -2.5\n344  中国PPI年率报告  2024-04-11   NaN  NaN  -2.7\n[345 rows x 5 columns]\n```\n\n#### 贸易状况\n\n##### 以美元计算出口年率\n\n接口: macro_china_exports_yoy\n\n目标地址: https://datacenter.jin10.com/reportType/dc_chinese_exports_yoy\n\n描述: 中国以美元计算出口年率报告, 数据区间从 19820201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_exports_yoy_df = ak.macro_china_exports_yoy()\nprint(macro_china_exports_yoy_df)\n```\n\n数据示例\n\n```\n                商品          日期    今值  预测值    前值\n0    中国以美元计算出口年率报告  1982-02-01   8.7  NaN   NaN\n1    中国以美元计算出口年率报告  1982-03-01  23.2  NaN   8.7\n2    中国以美元计算出口年率报告  1982-04-01  12.2  NaN  23.2\n3    中国以美元计算出口年率报告  1982-05-01  -2.5  NaN  12.2\n4    中国以美元计算出口年率报告  1982-06-01  41.5  NaN  -2.5\n..             ...         ...   ...  ...   ...\n505  中国以美元计算出口年率报告  2023-12-07   0.5 -1.1  -6.4\n506  中国以美元计算出口年率报告  2024-01-12   2.3  1.7   0.5\n507  中国以美元计算出口年率报告  2024-01-13   NaN  NaN   0.5\n508  中国以美元计算出口年率报告  2024-03-07   7.1  1.9   2.3\n509  中国以美元计算出口年率报告  2024-04-12   NaN  NaN   7.1\n[510 rows x 5 columns]\n```\n\n##### 以美元计算进口年率\n\n接口: macro_china_imports_yoy\n\n目标地址: https://datacenter.jin10.com/reportType/dc_chinese_imports_yoy\n\n描述: 中国以美元计算进口年率报告, 数据区间从 19960201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_imports_yoy_df = ak.macro_china_imports_yoy()\nprint(macro_china_imports_yoy_df)\n```\n\n数据示例\n\n```\n                商品          日期    今值  预测值    前值\n0    中国以美元计算进口年率报告  1996-02-01  55.8  NaN   NaN\n1    中国以美元计算进口年率报告  1996-03-01  14.2  NaN  55.8\n2    中国以美元计算进口年率报告  1996-04-01   8.7  NaN  14.2\n3    中国以美元计算进口年率报告  1996-05-01   6.4  NaN   8.7\n4    中国以美元计算进口年率报告  1996-06-01   4.5  NaN   6.4\n..             ...         ...   ...  ...   ...\n343  中国以美元计算进口年率报告  2023-12-07  -0.6  3.3   3.0\n344  中国以美元计算进口年率报告  2024-01-12   0.2  0.3  -0.6\n345  中国以美元计算进口年率报告  2024-01-13   NaN  NaN  -0.6\n346  中国以美元计算进口年率报告  2024-03-07   3.5  1.5   0.2\n347  中国以美元计算进口年率报告  2024-04-12   NaN  NaN   3.5\n[348 rows x 5 columns]\n```\n\n##### 以美元计算贸易帐(亿美元)\n\n接口: macro_china_trade_balance\n\n目标地址: https://datacenter.jin10.com/reportType/dc_chinese_trade_balance\n\n描述: 中国以美元计算贸易帐报告, 数据区间从19810201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述        |\n|-----|---------|-----------|\n| 商品  | object  | -         |\n| 日期  | object  | -         |\n| 今值  | float64 | 注意单位: 亿美元 |\n| 预测值 | float64 | 注意单位: 亿美元 |\n| 前值  | float64 | 注意单位: 亿美元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_trade_balance_df = ak.macro_china_trade_balance()\nprint(macro_china_trade_balance_df)\n```\n\n数据示例\n\n```\n               商品          日期      今值     预测值      前值\n0    中国以美元计算贸易帐报告  1981-02-01    -2.2     NaN     NaN\n1    中国以美元计算贸易帐报告  1981-03-01    -4.9     NaN    -2.2\n2    中国以美元计算贸易帐报告  1981-04-01    -7.4     NaN    -4.9\n3    中国以美元计算贸易帐报告  1981-05-01    -4.8     NaN    -7.4\n4    中国以美元计算贸易帐报告  1981-06-01    -5.4     NaN    -4.8\n..            ...         ...     ...     ...     ...\n528  中国以美元计算贸易帐报告  2023-12-07   683.9   580.0   565.3\n529  中国以美元计算贸易帐报告  2024-01-12   753.4   747.5   683.9\n530  中国以美元计算贸易帐报告  2024-01-13     NaN     NaN   683.9\n531  中国以美元计算贸易帐报告  2024-03-07  1251.6  1103.0   753.4\n532  中国以美元计算贸易帐报告  2024-04-12     NaN     NaN  1251.6\n[533 rows x 5 columns]\n```\n\n#### 产业指标\n\n##### 工业增加值增长\n\n接口: macro_china_gyzjz\n\n目标地址: https://data.eastmoney.com/cjsj/gyzjz.html\n\n描述: 东方财富-中国工业增加值增长, 数据区间从 2008 - 至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 月份   | object  | -       |\n| 同比增长 | float64 | 注意单位: % |\n| 累计增长 | float64 | 注意单位: % |\n| 发布时间 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_gyzjz_df = ak.macro_china_gyzjz()\nprint(macro_china_gyzjz_df)\n```\n\n数据示例\n\n```\n           月份  同比增长  累计增长 发布时间\n0    2008年02月份  15.4  15.4  2008-02-01\n1    2008年03月份  17.8  16.4  2008-03-01\n2    2008年04月份  15.7  16.3  2008-04-01\n3    2008年05月份  16.0  16.3  2008-05-01\n4    2008年06月份  16.0  16.3  2008-06-01\n..         ...   ...   ...         ...\n165  2023年02月份   NaN   2.4  2023-02-01\n166  2023年03月份   3.9   3.0  2023-03-01\n167  2023年04月份   5.6   3.6  2023-04-01\n168  2023年05月份   3.5   3.6  2023-05-01\n169  2023年06月份   4.4   3.8  2023-06-01\n[170 rows x 4 columns]\n```\n\n##### 规模以上工业增加值年率\n\n接口: macro_china_industrial_production_yoy\n\n目标地址: https://datacenter.jin10.com/reportType/dc_chinese_industrial_production_yoy\n\n描述: 中国规模以上工业增加值年率报告, 数据区间从 19900301-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_industrial_production_yoy_df = ak.macro_china_industrial_production_yoy()\nprint(macro_china_industrial_production_yoy_df)\n```\n\n数据示例\n\n```\n                  商品          日期   今值  预测值   前值\n0    中国规模以上工业增加值年率报告  1990-03-01  5.0  NaN  NaN\n1    中国规模以上工业增加值年率报告  1990-04-01  0.8  NaN  5.0\n2    中国规模以上工业增加值年率报告  1990-05-01  1.7  NaN  0.8\n3    中国规模以上工业增加值年率报告  1990-06-01  3.3  NaN  1.7\n4    中国规模以上工业增加值年率报告  1990-07-01  5.0  NaN  3.3\n..               ...         ...  ...  ...  ...\n392  中国规模以上工业增加值年率报告  2023-11-15  4.6  4.4  4.5\n393  中国规模以上工业增加值年率报告  2023-12-15  6.6  5.6  4.6\n394  中国规模以上工业增加值年率报告  2024-01-17  6.8  6.6  6.6\n395  中国规模以上工业增加值年率报告  2024-03-18  7.0  5.3  6.8\n396  中国规模以上工业增加值年率报告  2024-04-16  NaN  NaN  7.0\n[397 rows x 5 columns]\n```\n\n##### 官方制造业 PMI\n\n接口: macro_china_pmi_yearly\n\n目标地址: https://datacenter.jin10.com/reportType/dc_chinese_manufacturing_pmi\n\n描述: 中国年度PMI数据, 数据区间从 20050201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 商品  | object  | -  |\n| 日期  | object  | -  |\n| 今值  | float64 | -  |\n| 预测值 | float64 | -  |\n| 前值  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_pmi_yearly_df = ak.macro_china_pmi_yearly()\nprint(macro_china_pmi_yearly_df)\n```\n\n数据示例\n\n```\n             商品        日期      今值   预测值 前值\n0    中国官方制造业PMI  2005-02-01  54.7   NaN   NaN\n1    中国官方制造业PMI  2005-03-01  54.5   NaN  54.7\n2    中国官方制造业PMI  2005-04-01  57.9   NaN  54.5\n3    中国官方制造业PMI  2005-05-01  56.7   NaN  57.9\n4    中国官方制造业PMI  2005-06-01  52.9   NaN  56.7\n..          ...         ...   ...   ...   ...\n228  中国官方制造业PMI  2023-11-30  49.4  49.7  49.5\n229  中国官方制造业PMI  2023-12-31  49.0  49.5  49.4\n230  中国官方制造业PMI  2024-01-31  49.2  49.2  49.0\n231  中国官方制造业PMI  2024-03-01  49.1  49.1  49.2\n232  中国官方制造业PMI  2024-03-31  50.8  50.1  49.1\n[233 rows x 5 columns]\n```\n\n##### 财新制造业PMI终值\n\n接口: macro_china_cx_pmi_yearly\n\n目标地址: https://datacenter.jin10.com/reportType/dc_chinese_caixin_manufacturing_pmi\n\n描述: 中国年度财新 PMI 数据, 数据区间从 20120120-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 商品  | object  | -  |\n| 日期  | object  | -  |\n| 今值  | float64 | -  |\n| 预测值 | float64 | -  |\n| 前值  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_cx_pmi_yearly_df = ak.macro_china_cx_pmi_yearly()\nprint(macro_china_cx_pmi_yearly_df)\n```\n\n数据示例\n\n```\n                 商品          日期    今值   预测值    前值\n0    中国财新制造业PMI终值报告  2012-01-20  48.8   NaN  48.7\n1    中国财新制造业PMI终值报告  2012-02-22  49.7   NaN  48.8\n2    中国财新制造业PMI终值报告  2012-03-22  48.1   NaN  49.6\n3    中国财新制造业PMI终值报告  2012-04-23  49.1   NaN  48.3\n4    中国财新制造业PMI终值报告  2012-05-02  49.3   NaN  49.1\n..              ...         ...   ...   ...   ...\n196  中国财新制造业PMI终值报告  2023-12-01  50.7  49.3  49.5\n197  中国财新制造业PMI终值报告  2024-01-02  50.8  50.4  50.7\n198  中国财新制造业PMI终值报告  2024-02-01  50.8  50.8  50.8\n199  中国财新制造业PMI终值报告  2024-03-01  50.9  50.7  50.8\n200  中国财新制造业PMI终值报告  2024-04-01  51.1  51.0  50.9\n[201 rows x 5 columns]\n```\n\n##### 财新服务业PMI\n\n接口: macro_china_cx_services_pmi_yearly\n\n目标地址: https://datacenter.jin10.com/reportType/dc_chinese_caixin_services_pmi\n\n描述: 中国财新服务业 PMI 报告, 数据区间从 20120405-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 商品  | object  | -  |\n| 日期  | object  | -  |\n| 今值  | float64 | -  |\n| 预测值 | float64 | -  |\n| 前值  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_cx_services_pmi_yearly_df = ak.macro_china_cx_services_pmi_yearly()\nprint(macro_china_cx_services_pmi_yearly_df)\n```\n\n数据示例\n\n```\n               商品          日期    今值   预测值    前值\n0    中国财新服务业PMI报告  2012-04-05  53.3   NaN  53.9\n1    中国财新服务业PMI报告  2012-05-04  54.1   NaN  53.3\n2    中国财新服务业PMI报告  2012-06-05  54.7   NaN  54.1\n3    中国财新服务业PMI报告  2012-07-04  52.3   NaN  54.7\n4    中国财新服务业PMI报告  2012-08-03  53.1   NaN  52.3\n..            ...         ...   ...   ...   ...\n143  中国财新服务业PMI报告  2023-12-05  51.5  50.7  50.4\n144  中国财新服务业PMI报告  2024-01-04  52.9  51.6  51.5\n145  中国财新服务业PMI报告  2024-02-05  52.7  53.0  52.9\n146  中国财新服务业PMI报告  2024-03-05  52.5  52.9  52.7\n147  中国财新服务业PMI报告  2024-04-03  52.7  52.7  52.5\n[148 rows x 5 columns]\n```\n\n##### 中国官方非制造业PMI\n\n接口: macro_china_non_man_pmi\n\n目标地址: https://datacenter.jin10.com/reportType/dc_chinese_non_manufacturing_pmi\n\n描述: 中国官方非制造业 PMI, 数据区间从 20160101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_non_man_pmi_df = ak.macro_china_non_man_pmi()\nprint(macro_china_non_man_pmi_df)\n```\n\n数据示例\n\n```\n                商品          日期    今值   预测值    前值\n0    中国官方非制造业PMI报告  2007-02-01  60.4   NaN   NaN\n1    中国官方非制造业PMI报告  2007-03-01  60.6   NaN  60.4\n2    中国官方非制造业PMI报告  2007-04-01  58.2   NaN  60.6\n3    中国官方非制造业PMI报告  2007-05-01  60.4   NaN  58.2\n4    中国官方非制造业PMI报告  2007-06-01  62.2   NaN  60.4\n..             ...         ...   ...   ...   ...\n204  中国官方非制造业PMI报告  2023-11-30  50.2  51.1  50.6\n205  中国官方非制造业PMI报告  2023-12-31  50.4  50.5  50.2\n206  中国官方非制造业PMI报告  2024-01-31  50.7  50.6  50.4\n207  中国官方非制造业PMI报告  2024-03-01  51.4  50.9  50.7\n208  中国官方非制造业PMI报告  2024-03-31  53.0  51.3  51.4\n[209 rows x 5 columns]\n```\n\n#### 金融指标\n\n##### 外汇储备(亿美元)\n\n接口: macro_china_fx_reserves_yearly\n\n目标地址: https://datacenter.jin10.com/reportType/dc_chinese_fx_reserves\n\n描述: 中国年度外汇储备数据, 数据区间从 20140115-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述        |\n|-----|---------|-----------|\n| 商品  | object  | -         |\n| 日期  | object  | -         |\n| 今值  | float64 | 注意单位: 亿美元 |\n| 预测值 | float64 | 注意单位: 亿美元 |\n| 前值  | float64 | 注意单位: 亿美元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_fx_reserves_yearly_df = ak.macro_china_fx_reserves_yearly()\nprint(macro_china_fx_reserves_yearly_df)\n```\n\n数据示例\n\n```\n           商品          日期       今值      预测值     前值\n0    中国外汇储备报告  2014-01-15  38200.0  38000.0  36600\n1    中国外汇储备报告  2014-07-15  39900.0  39800.0  39500\n2    中国外汇储备报告  2015-01-15  38400.0  39000.0  39900\n3    中国外汇储备报告  2016-03-07  32000.0  31900.0  32300\n4    中国外汇储备报告  2016-04-07  32100.0  32100.0  32000\n..        ...         ...      ...      ...    ...\n106  中国外汇储备报告  2023-12-07  31720.0  31200.0  31010\n107  中国外汇储备报告  2024-01-07  32380.0  32000.0  31720\n108  中国外汇储备报告  2024-02-07  32190.0  32170.0  32380\n109  中国外汇储备报告  2024-03-07  32260.0  32050.0  32190\n110  中国外汇储备报告  2024-04-07      NaN      NaN  32260\n[111 rows x 5 columns]\n```\n\n##### M2货币供应年率\n\n接口: macro_china_m2_yearly\n\n目标地址: https://datacenter.jin10.com/reportType/dc_chinese_m2_money_supply_yoy\n\n描述: 中国年度 M2 数据, 数据区间从 19980201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_m2_yearly_df = ak.macro_china_m2_yearly()\nprint(macro_china_m2_yearly_df)\n```\n\n数据示例\n\n```\n               商品          日期    今值  预测值    前值\n0    中国M2货币供应年率报告  1998-02-01  17.4  NaN   NaN\n1    中国M2货币供应年率报告  1998-03-01  16.7  NaN  17.4\n2    中国M2货币供应年率报告  1998-04-01  15.4  NaN  16.7\n3    中国M2货币供应年率报告  1998-05-01  14.6  NaN  15.4\n4    中国M2货币供应年率报告  1998-06-01  15.5  NaN  14.6\n..            ...         ...   ...  ...   ...\n349  中国M2货币供应年率报告  2024-03-12   NaN  8.8   8.7\n350  中国M2货币供应年率报告  2024-03-13   NaN  8.8   8.7\n351  中国M2货币供应年率报告  2024-03-14   NaN  8.8   8.7\n352  中国M2货币供应年率报告  2024-03-15   8.7  8.8   8.7\n353  中国M2货币供应年率报告  2024-04-11   NaN  NaN   8.7\n[354 rows x 5 columns]\n```\n\n##### 新房价指数\n\n接口: macro_china_new_house_price\n\n目标地址: http://data.eastmoney.com/cjsj/newhouse.html\n\n描述: 中国新房价指数月度数据, 数据区间从 201101-至今\n\n限量: 单次返回指定城市的所有历史数据\n\n输入参数\n\n| 名称          | 类型  | 描述                          |\n|-------------|-----|-----------------------------|\n| city_first  | str | city_first=\"北京\"; 城市列表见目标网站  |\n| city_second | str | city_second=\"上海\"; 城市列表见目标网站 |\n\n输出参数\n\n| 名称            | 类型      | 描述  |\n|---------------|---------|-----|\n| 日期            | object  | 日期  |\n| 城市            | object  | -   |\n| 新建商品住宅价格指数-环比 | float64 | -   |\n| 新建商品住宅价格指数-同比 | float64 | -   |\n| 新建商品住宅价格指数-定基 | float64 | -   |\n| 二手住宅价格指数-环比   | float64 | -   |\n| 二手住宅价格指数-同比   | float64 | -   |\n| 二手住宅价格指数-定基   | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_new_house_price_df = ak.macro_china_new_house_price(city_first=\"北京\", city_second=\"上海\")\nprint(macro_china_new_house_price_df)\n```\n\n数据示例\n\n```\n           日期  城市  新建商品住宅价格指数-同比  ... 二手住宅价格指数-同比 二手住宅价格指数-环比 二手住宅价格指数-定基\n0    2011-01-01  上海          101.8  ...        101.7        100.5        100.6\n1    2011-01-01  北京          109.1  ...        102.6        100.3        101.2\n2    2011-02-01  北京          108.4  ...        102.9        100.4        101.5\n3    2011-02-01  上海          102.8  ...        102.0        100.4        101.0\n4    2011-03-01  北京          106.2  ...        101.9         99.9        101.4\n..          ...  ..            ...  ...          ...          ...          ...\n327  2024-08-01  北京           96.4  ...         91.5         99.0          NaN\n328  2024-09-01  上海          104.9  ...         92.4         98.8          NaN\n329  2024-09-01  北京           95.4  ...         89.7         98.7          NaN\n330  2024-10-01  上海          105.0  ...         93.3        100.2          NaN\n331  2024-10-01  北京           95.1  ...         91.6        101.0          NaN\n[332 rows x 8 columns]\n```\n\n##### 企业景气及企业家信心指数\n\n接口: macro_china_enterprise_boom_index\n\n目标地址: http://data.eastmoney.com/cjsj/qyjqzs.html\n\n描述: 中国企业景气及企业家信心指数数据, 数据区间从 2005 一季度-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 季度         | object  | 日期      |\n| 企业景气指数-指数  | float64 | -       |\n| 企业景气指数-同比  | float64 | 注意单位: % |\n| 企业景气指数-环比  | float64 | 注意单位: % |\n| 企业家信心指数-指数 | float64 | -       |\n| 企业家信心指数-同比 | float64 | 注意单位: % |\n| 企业家信心指数-环比 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_enterprise_boom_index_df = ak.macro_china_enterprise_boom_index()\nprint(macro_china_enterprise_boom_index_df)\n```\n\n数据示例\n\n```\n           季度  企业景气指数-指数  企业景气指数-同比  ...  企业家信心指数-指数  企业家信心指数-同比  企业家信心指数-环比\n0   2022年第2季度     101.80       1.80  ...         NaN         NaN         NaN\n1   2022年第1季度     112.70      12.70  ...         NaN         NaN         NaN\n2   2021年第4季度     119.20      19.20  ...         NaN         NaN         NaN\n3   2021年第3季度     119.20      19.20  ...      120.90       20.90       -5.10\n4   2021年第2季度     123.80      23.80  ...      126.00       26.00       -1.80\n..        ...        ...        ...  ...         ...         ...         ...\n65  2006年第1季度     131.50      31.50  ...      133.10       33.10        7.70\n66  2005年第4季度     131.70      31.70  ...      125.40       25.40       -2.20\n67  2005年第3季度     132.00      32.00  ...      127.60       27.60       -0.90\n68  2005年第2季度     131.71      31.71  ...      128.50       28.50       -7.35\n69  2005年第1季度     132.46      32.46  ...      135.85       35.85        5.04\n```\n\n##### 全国税收收入\n\n接口: macro_china_national_tax_receipts\n\n目标地址: http://data.eastmoney.com/cjsj/nationaltaxreceipts.aspx\n\n描述: 中国全国税收收入数据, 数据区间从 2005 一季度-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 季度     | object  | 日期       |\n| 税收收入合计 | float64 | 注意单位: 亿元 |\n| 较上年同期  | float64 | 注意单位: %  |\n| 季度环比   | float64 | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_national_tax_receipts_df = ak.macro_china_national_tax_receipts()\nprint(macro_china_national_tax_receipts_df)\n```\n\n数据示例\n\n```\n             季度     税收收入合计  较上年同期      季度环比\n0   2022年第1-3季度  124365.00  -11.6  0.171811\n1   2022年第1-2季度   85564.00  -14.8 -0.368718\n2     2022年第1季度   52452.00    7.7  0.637641\n3   2021年第1-4季度  172731.00   11.9 -0.204070\n4   2021年第1-3季度  140702.00   18.4 -0.222216\n..          ...        ...    ...       ...\n64  2006年第1-2季度   18484.80   22.0  0.142837\n65    2006年第1季度    8626.32   19.0       NaN\n66  2005年第1-3季度   21855.35   15.9 -0.151249\n67  2005年第1-2季度   15149.73   13.4  0.089860\n68    2005年第1季度    7249.16   10.7       NaN\n```\n\n##### 银行理财产品发行数量\n\n接口: macro_china_bank_financing\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI01516267.html\n\n描述: 银行理财产品发行数量, 数据区间从 2000 一月-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_bank_financing_df = ak.macro_china_bank_financing()\nprint(macro_china_bank_financing_df)\n```\n\n数据示例\n\n```\n        日期   最新值         涨跌幅  ...   近1年涨跌幅   近2年涨跌幅  近3年涨跌幅\n0    2000-03-01     4         NaN  ...         NaN         NaN         NaN\n1    2004-02-01     2  -50.000000  ...  -50.000000  -50.000000  -50.000000\n2    2004-03-01     8  300.000000  ...  100.000000  100.000000  100.000000\n3    2004-04-01     3  -62.500000  ...  -25.000000  -25.000000  -25.000000\n4    2004-05-01     6  100.000000  ...   50.000000   50.000000   50.000000\n..          ...   ...         ...  ...         ...         ...         ...\n213  2021-10-01  2640  -27.829415  ...  -51.710262  -70.054446  -74.346516\n214  2021-11-01  3424   29.696970  ...  -45.347167  -59.541534  -70.644719\n215  2021-12-01  3876   13.200935  ...  -44.422139  -44.117647  -64.904020\n216  2022-01-01  2793  -27.941176  ...  -45.406568  -50.478723  -77.035027\n217  2022-02-01  1779  -36.305048  ...  -54.893509  -66.204407  -78.496313\n```\n\n##### 原保险保费收入\n\n接口: macro_china_insurance_income\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMM00088870.html\n\n描述: 原保险保费收入, 数据区间从 200407-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_insurance_income_df = ak.macro_china_insurance_income()\nprint(macro_china_insurance_income_df)\n```\n\n数据示例\n\n```\n      日期        最新值        涨跌幅  ...    近1年涨跌幅    近2年涨跌幅     近3年涨跌幅\n0    2004-07-01  0.000000e+00        NaN  ...       NaN       NaN        NaN\n1    2004-09-01  2.453616e+07        NaN  ...       NaN       NaN        NaN\n2    2004-10-01  2.704315e+07  10.217507  ...       NaN       NaN        NaN\n3    2004-11-01  2.956397e+07   9.321471  ...       NaN       NaN        NaN\n4    2004-12-01  3.193586e+07   8.022916  ...       NaN       NaN        NaN\n..          ...           ...        ...  ...       ...       ...        ...\n205  2021-09-01  1.979124e+08   9.327015  ... -1.959838  2.790277  -9.435956\n206  2021-10-01  2.094363e+08   5.822728  ... -2.107731  2.866552 -10.337719\n207  2021-11-01  2.205047e+08   5.284853  ... -2.053675  2.876131 -11.053454\n208  2021-12-01  2.357184e+08   6.899490  ... -1.710283  3.594269 -10.239691\n209  2022-01-01  7.049640e+07 -70.092958  ... -5.768089  5.429366  12.398597\n```\n\n##### 手机出货量\n\n接口: macro_china_mobile_number\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00225823.html\n\n描述: 手机出货量, 数据区间从 201201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_mobile_number_df = ak.macro_china_mobile_number()\nprint(macro_china_mobile_number_df)\n```\n\n数据示例\n\n```\n        日期     最新值     涨跌幅  ...     近1年涨跌幅      近2年涨跌幅     近3年涨跌幅\n0    2012-01-01  2400.6        NaN  ...        NaN         NaN        NaN\n1    2012-02-01  2998.9  24.922936  ...        NaN         NaN        NaN\n2    2012-03-01  3958.6  32.001734  ...        NaN         NaN        NaN\n3    2012-04-01  3528.7 -10.859900  ...        NaN         NaN        NaN\n4    2012-05-01  3586.8   1.646499  ...        NaN         NaN        NaN\n..          ...     ...        ...  ...        ...         ...        ...\n117  2021-10-01  3357.5  56.599813  ...  28.379153   -6.655731 -12.866893\n118  2021-11-01  3525.2   4.994788  ...  19.159005    1.176741  -0.333616\n119  2021-12-01  3340.1  -5.250766  ...  25.591277    9.712916  -6.371587\n120  2022-01-01  3302.2  -1.134697  ... -17.691924   58.660453  -3.013393\n121  2022-02-01  1486.4 -54.987584  ... -31.688037  132.832080   2.432637\n```\n\n##### 菜篮子产品批发价格指数\n\n接口: macro_china_vegetable_basket\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00009275.html\n\n描述: 菜篮子产品批发价格指数, 数据区间从 20050927-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_vegetable_basket_df = ak.macro_china_vegetable_basket()\nprint(macro_china_vegetable_basket_df)\n```\n\n数据示例\n\n```\n        日期     最新值       涨跌幅  ...    近1年涨跌幅  近2年涨跌幅  近3年涨跌幅\n0     2005-09-27  123.80       NaN  ...       NaN       NaN        NaN\n1     2005-09-28  123.00 -0.646204  ...       NaN       NaN        NaN\n2     2005-09-29  123.10  0.081301  ...       NaN       NaN        NaN\n3     2005-09-30  124.10  0.812348  ...       NaN       NaN        NaN\n4     2005-10-08  122.20 -1.531023  ...       NaN       NaN        NaN\n          ...     ...       ...  ...       ...       ...        ...\n4100  2022-03-28  137.93  0.561388  ...  6.026597  6.608440  15.470908\n4101  2022-03-29  138.45  0.377003  ...  6.952491  7.010357  15.712495\n4102  2022-03-30  138.85  0.288913  ...  7.410846  7.978847  16.046803\n4103  2022-03-31  139.38  0.381707  ...  8.180689  8.289954  16.489762\n4104  2022-04-01  139.70  0.229588  ...  8.775208  8.622969  16.484616\n```\n\n##### 农产品批发价格总指数\n\n接口: macro_china_agricultural_product\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00009274.html\n\n描述: 农产品批发价格总指数, 数据区间从 20050927-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_agricultural_product_df = ak.macro_china_agricultural_product()\nprint(macro_china_agricultural_product_df)\n```\n\n数据示例\n\n```\n          日期     最新值    涨跌幅  ...    近1年涨跌幅  近2年涨跌幅  近3年涨跌幅\n0     2005-09-27  125.50       NaN  ...       NaN       NaN        NaN\n1     2005-09-28  125.00 -0.398406  ...       NaN       NaN        NaN\n2     2005-09-29  125.00  0.000000  ...       NaN       NaN        NaN\n3     2005-09-30  125.80  0.640000  ...       NaN       NaN        NaN\n4     2005-10-08  124.20 -1.271860  ...       NaN       NaN        NaN\n          ...     ...       ...  ...       ...       ...        ...\n4100  2022-03-28  134.83  0.499404  ...  6.349582  7.374373  15.259019\n4101  2022-03-29  135.30  0.348587  ...  7.100451  7.748666  15.492958\n4102  2022-03-30  135.03 -0.199557  ...  7.098668  8.127803  15.262484\n4103  2022-03-31  136.10  0.792416  ...  8.265054  8.862582  16.175843\n4104  2022-04-01  136.38  0.205731  ...  8.790683  9.156395  16.176846\n```\n\n##### 农副指数\n\n接口: macro_china_agricultural_index\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00662543.html\n\n描述: 农副指数数据, 数据区间从 20111205-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_agricultural_index_df = ak.macro_china_agricultural_index()\nprint(macro_china_agricultural_index_df)\n```\n\n数据示例\n\n```\n          日期   最新值   涨跌幅  ...    近1年涨跌幅   近2年涨跌幅   近3年涨跌幅\n0     2011-12-05   995       NaN  ...       NaN        NaN        NaN\n1     2011-12-12   986 -0.904523  ...       NaN        NaN        NaN\n2     2011-12-19   990  0.405680  ...       NaN        NaN        NaN\n3     2011-12-26   988 -0.202020  ...       NaN        NaN        NaN\n4     2012-01-02   993  0.506073  ...       NaN        NaN        NaN\n          ...   ...       ...  ...       ...        ...        ...\n2971  2022-03-28  1316 -0.679245  ...  7.428571  24.385633  55.739645\n2972  2022-03-29  1311 -0.379939  ...  7.635468  23.913043  55.331754\n2973  2022-03-30  1305 -0.457666  ...  7.495881  22.881356  54.620853\n2974  2022-03-31  1303 -0.153257  ...  8.222591  22.347418  54.383886\n2975  2022-04-01  1289 -1.074444  ...  6.090535  21.489161  52.906287\n```\n\n##### 能源指数\n\n接口: macro_china_energy_index\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00662539.html\n\n描述: 能源指数数据, 数据区间从 20111205-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_energy_index_df = ak.macro_china_energy_index()\nprint(macro_china_energy_index_df)\n```\n\n数据示例\n\n```\n         日期   最新值    涨跌幅  ...     近1年涨跌幅    近2年涨跌幅  近3年涨跌幅\n0     2011-12-05  1003       NaN  ...        NaN        NaN        NaN\n1     2011-12-12   995 -0.797607  ...        NaN        NaN        NaN\n2     2011-12-19   987 -0.804020  ...        NaN        NaN        NaN\n3     2011-12-26   983 -0.405268  ...        NaN        NaN        NaN\n4     2012-01-02   984  0.101729  ...        NaN        NaN        NaN\n          ...   ...       ...  ...        ...        ...        ...\n2972  2022-03-29  1208 -0.247729  ...  48.220859  84.992343  48.768473\n2973  2022-03-30  1206 -0.165563  ...  47.252747  88.437500  48.522167\n2974  2022-03-31  1207  0.082919  ...  47.735618  90.378549  48.645320\n2975  2022-04-01  1207  0.000000  ...  48.098160  91.283677  48.828607\n2976  2022-04-02  1208  0.082850  ...  47.858017  91.442155  47.858017\n```\n\n##### 大宗商品价格\n\n接口: macro_china_commodity_price_index\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00662535.html\n\n描述: 大宗商品价格数据, 数据区间从 20111205-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_commodity_price_index_df = ak.macro_china_commodity_price_index()\nprint(macro_china_commodity_price_index_df)\n```\n\n数据示例\n\n```\n          日期   最新值    涨跌幅  ...     近1年涨跌幅   近2年涨跌幅   近3年涨跌幅\n0     2011-12-05   999       NaN  ...        NaN        NaN        NaN\n1     2011-12-12   991 -0.800801  ...        NaN        NaN        NaN\n2     2011-12-19   990 -0.100908  ...        NaN        NaN        NaN\n3     2011-12-26   988 -0.202020  ...        NaN        NaN        NaN\n4     2012-01-02   992  0.404858  ...        NaN        NaN        NaN\n          ...   ...       ...  ...        ...        ...        ...\n2975  2022-03-31  1213  0.000000  ...  21.543086  68.005540  40.556199\n2976  2022-04-01  1212 -0.082440  ...  20.958084  69.037657  40.277778\n2977  2022-04-02  1212  0.000000  ...  20.717131  70.224719  40.440324\n2978  2022-04-03  1212  0.000000  ...  20.837488  70.464135  40.440324\n2979  2022-04-04  1212  0.000000  ...  20.837488  70.704225  40.440324\n```\n\n##### 费城半导体指数\n\n接口: macro_global_sox_index\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00055562.html\n\n描述: 费城半导体指数数据, 数据区间从 19940504-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_global_sox_index_df = ak.macro_global_sox_index()\nprint(macro_global_sox_index_df)\n```\n\n数据示例\n\n```\n         日期     最新值    涨跌幅  ...     近1年涨跌幅   近2年涨跌幅      近3年涨跌幅\n0     1994-05-04   119.0       NaN  ...        NaN         NaN         NaN\n1     1994-05-05   118.3 -0.588235  ...        NaN         NaN         NaN\n2     1994-05-06   117.7 -0.507185  ...        NaN         NaN         NaN\n3     1994-05-09   115.6 -1.784197  ...        NaN         NaN         NaN\n4     1994-05-10   117.4  1.557093  ...        NaN         NaN         NaN\n          ...     ...       ...  ...        ...         ...         ...\n6957  2022-03-25  3525.3 -0.209472  ...  19.102801  139.397788  154.948472\n6958  2022-03-28  3547.2  0.621224  ...  14.194471  138.267003  158.203523\n6959  2022-03-29  3625.6  2.210194  ...  18.691953  143.533165  159.804659\n6960  2022-03-30  3508.6 -3.227052  ...  15.241990  127.048295  151.420628\n6961  2022-03-31  3429.0 -2.268711  ...   9.730107  126.997398  145.716620\n```\n\n##### 义乌小商品指数-电子元器件\n\n接口: macro_china_yw_electronic_index\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00055551.html\n\n描述: 义乌小商品指数-电子元器件数据, 数据区间从 20060911-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_yw_electronic_index_df = ak.macro_china_yw_electronic_index()\nprint(macro_china_yw_electronic_index_df)\n```\n\n数据示例\n\n```\n        日期     最新值   涨跌幅    近3月涨跌幅 近6月涨跌幅 近1年涨跌幅  近2年涨跌幅 近3年涨跌幅\n0    2006-09-11  101.34       NaN       NaN     NaN     NaN       NaN     NaN\n1    2006-09-18  102.94  1.578844       NaN     NaN     NaN       NaN     NaN\n2    2006-09-25  103.34  0.388576       NaN     NaN     NaN       NaN     NaN\n3    2006-10-02  103.21 -0.125798       NaN     NaN     NaN       NaN     NaN\n4    2006-10-09  103.06 -0.145335       NaN     NaN     NaN       NaN     NaN\n..          ...     ...       ...       ...     ...     ...       ...     ...\n755  2022-03-07  100.18 -0.169407  0.089919    0.18    0.18 -0.802060    0.18\n756  2022-03-14  100.09 -0.089838  0.039980    0.09    0.09 -0.407960    0.09\n757  2022-03-21  106.11  6.014587  0.463927    6.11    6.11  5.845387    6.11\n758  2022-03-28  103.06 -2.874376  0.243167    3.06    3.06  2.936476    3.06\n759  2022-04-04  101.53 -1.484572  0.118332    1.53    1.53  1.469119    1.53\n```\n\n##### 建材指数\n\n接口: macro_china_construction_index\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00662541.html\n\n描述: 建材指数数据, 数据区间从 20111205-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_construction_index_df = ak.macro_china_construction_index()\nprint(macro_china_construction_index_df)\n```\n\n数据示例\n\n```\n         日期   最新值       涨跌幅  ...    近1年涨跌幅     近2年涨跌幅     近3年涨跌幅\n0     2011-12-05  1014       NaN  ...       NaN        NaN        NaN\n1     2011-12-12  1013 -0.098619  ...       NaN        NaN        NaN\n2     2011-12-19  1005 -0.789733  ...       NaN        NaN        NaN\n3     2011-12-26   993 -1.194030  ...       NaN        NaN        NaN\n4     2012-01-02   991 -0.201410  ...       NaN        NaN        NaN\n          ...   ...       ...  ...       ...        ...        ...\n3179  2024-03-31   962  0.000000  ... -8.901515 -25.077882 -23.285486\n3180  2024-04-01   958 -0.415800  ... -9.280303 -25.505443 -23.726115\n3181  2024-04-02   960  0.208768  ... -9.090909 -25.407925 -24.170616\n3182  2024-04-03   960  0.000000  ... -9.176916 -25.407925 -24.170616\n3183  2024-04-04   960  0.000000  ... -8.745247 -25.407925 -24.170616\n[3184 rows x 8 columns]\n```\n\n##### 建材价格指数\n\n接口: macro_china_construction_price_index\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00237146.html\n\n描述: 建材价格指数数据, 数据区间从 20100615-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_construction_price_index_df = ak.macro_china_construction_price_index()\nprint(macro_china_construction_price_index_df)\n```\n\n数据示例\n\n```\n       日期        最新值    涨跌幅  ...    近1年涨跌幅   近2年涨跌幅  近3年涨跌幅\n0     2010-06-15  1230.40       NaN  ...       NaN       NaN       NaN\n1     2010-06-16  1245.10  1.194733  ...       NaN       NaN       NaN\n2     2010-08-01  1281.60  2.931491  ...       NaN       NaN       NaN\n3     2010-08-02  1214.90 -5.204432  ...       NaN       NaN       NaN\n4     2010-08-03  1218.90  0.329245  ...       NaN       NaN       NaN\n          ...      ...       ...  ...       ...       ...       ...\n3841  2022-02-25  1099.01  1.567395  ...  1.467995  1.493295  2.177410\n3842  2022-02-26  1088.05 -0.997261  ...  0.456094  0.481142  1.521824\n3843  2022-02-27  1097.41  0.860255  ...  1.120479  1.345536  2.198733\n3844  2022-02-28  1088.05 -0.852917  ...  0.977244  0.481142  1.549302\n3845  2022-03-01  1097.41  0.860255  ...  1.419528  0.749139  2.051425\n```\n\n##### 物流景气指数\n\n接口: macro_china_lpi_index\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00352262.html\n\n描述: 物流景气指数数据, 数据区间从 20130701-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_lpi_index_df = ak.macro_china_lpi_index()\nprint(macro_china_lpi_index_df)\n```\n\n数据示例\n\n```\n         日期   最新值   涨跌幅  ...    近1年涨跌幅   近2年涨跌幅 近3年涨跌幅\n0    2013-07-01  52.4       NaN  ...       NaN        NaN       NaN\n1    2013-08-01  52.9  0.954198  ...       NaN        NaN       NaN\n2    2013-09-01  53.3  0.756144  ...       NaN        NaN       NaN\n3    2013-10-01  53.6  0.562852  ...       NaN        NaN       NaN\n4    2013-11-01  53.0 -1.119403  ...       NaN        NaN       NaN\n..          ...   ...       ...  ...       ...        ...       ...\n100  2021-11-01  53.6  0.186916  ... -6.782609  -8.998302  7.200000\n101  2021-12-01  52.6 -1.865672  ... -7.557118 -10.238908 -3.839122\n102  2022-01-01  51.1 -2.851711  ... -6.066176   2.404810 -4.841713\n103  2022-02-01  51.2  0.195695  ...  2.811245  95.419847  3.225806\n104  2022-03-01  48.7 -4.882812  ... -6.165703  -5.436893 -7.414449\n```\n\n##### 原油运输指数\n\n接口: macro_china_bdti_index\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00107668.html\n\n描述: 原油运输指数数据, 数据区间从 20011227-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_bdti_index_df = ak.macro_china_bdti_index()\nprint(macro_china_bdti_index_df)\n```\n\n数据示例\n\n```\n           日期   最新值   涨跌幅  ...      近1年涨跌幅     近2年涨跌幅      近3年涨跌幅\n0     2001-12-27   849       NaN  ...         NaN        NaN         NaN\n1     2001-12-28   850  0.117786  ...         NaN        NaN         NaN\n2     2002-01-02   845 -0.588235  ...         NaN        NaN         NaN\n3     2002-01-03   826 -2.248521  ...         NaN        NaN         NaN\n4     2002-01-04   811 -1.815981  ...         NaN        NaN         NaN\n          ...   ...       ...  ...         ...        ...         ...\n4921  2022-04-05  1469  7.304602  ...  110.157368   6.218366  138.087520\n4922  2022-04-06  1547  5.309735  ...  125.839416  24.758065  150.729335\n4923  2022-04-07  1653  6.851972  ...  144.888889  47.326203  167.909238\n4924  2022-04-08  1677  1.451906  ...  154.863222  56.582633  174.918033\n4925  2022-04-11  1730  3.160405  ...  167.801858  55.296230  172.870662\n```\n\n##### 超灵便型船运价指数\n\n接口: macro_china_bsi_index\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00107667.html\n\n描述: 超灵便型船运价指数数据, 数据区间从 20060103-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_bsi_index_df = ak.macro_china_bsi_index()\nprint(macro_china_bsi_index_df)\n```\n\n数据示例\n\n```\n          日期   最新值   涨跌幅  ...     近1年涨跌幅    近2年涨跌幅    近3年涨跌幅\n0     2006-01-03  1819       NaN  ...        NaN         NaN         NaN\n1     2006-01-05  1825  0.329852  ...        NaN         NaN         NaN\n2     2006-01-09  1814 -0.602740  ...        NaN         NaN         NaN\n3     2006-01-11  1784 -1.653804  ...        NaN         NaN         NaN\n4     2006-01-12  1759 -1.401345  ...        NaN         NaN         NaN\n          ...   ...       ...  ...        ...         ...         ...\n3984  2022-04-06  2605 -2.067669  ...  44.002211  437.113402  251.078167\n3985  2022-04-07  2547 -2.226488  ...  42.131696  439.618644  243.261456\n3986  2022-04-08  2502 -1.766784  ...  40.089586  451.101322  241.336971\n3987  2022-04-11  2473 -1.159073  ...  38.932584  460.770975  245.874126\n3988  2022-04-12  2448 -1.010918  ...  37.993236  455.102041  244.303797\n```\n\n##### 海岬型运费指数\n\n接口: macro_shipping_bci\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00107666.html\n\n描述: 海岬型运费指数, 数据区间从 19990430-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_shipping_bci_df = ak.macro_shipping_bci()\nprint(macro_shipping_bci_df)\n```\n\n数据示例\n\n```\n      日期   最新值   涨跌幅  ...     近1年涨跌幅     近2年涨跌幅      近3年涨跌幅\n0     1999-04-30   940        NaN  ...        NaN        NaN         NaN\n1     1999-05-04   947   0.744681  ...        NaN        NaN         NaN\n2     1999-05-05   960   1.372756  ...        NaN        NaN         NaN\n3     1999-05-06   969   0.937500  ...        NaN        NaN         NaN\n4     1999-05-07   981   1.238390  ...        NaN        NaN         NaN\n          ...   ...        ...  ...        ...        ...         ...\n5988  2023-03-03  1195  19.500000  ... -27.089689 -28.741801  445.375723\n5989  2023-03-06  1329  11.213389  ... -18.715596 -25.504484  525.961538\n5990  2023-03-07  1471  10.684725  ... -15.894797 -17.544843  571.474359\n5991  2023-03-08  1550   5.370496  ... -18.248945 -15.068493  596.794872\n5992  2023-03-09  1662   7.225806  ... -27.169150 -14.769231  546.774194\n```\n\n##### 波罗的海干散货指数\n\n接口: macro_shipping_bdi\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00107664.html\n\n描述: 波罗的海干散货指数, 数据区间从 19881019-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_shipping_bdi_df = ak.macro_shipping_bdi()\nprint(macro_shipping_bdi_df)\n```\n\n数据示例\n\n```\n      日期   最新值    涨跌幅  ...     近1年涨跌幅     近2年涨跌幅      近3年涨跌幅\n0     1988-10-19  1317       NaN  ...        NaN        NaN         NaN\n1     1988-10-20  1316 -0.075930  ...        NaN        NaN         NaN\n2     1988-10-21  1328  0.911854  ...        NaN        NaN         NaN\n3     1988-10-24  1361  2.484940  ...        NaN        NaN         NaN\n4     1988-10-25  1363  0.146951  ...        NaN        NaN         NaN\n          ...   ...       ...  ...        ...        ...         ...\n8577  2023-03-03  1211  5.764192  ... -42.442966 -31.310267  120.582878\n8578  2023-03-06  1258  3.881090  ... -41.433892 -31.219245  103.889789\n8579  2023-03-07  1298  3.179650  ... -41.923937 -29.032258  110.372771\n8580  2023-03-08  1327  2.234206  ... -43.579932 -28.386400  115.072934\n8581  2023-03-09  1379  3.918613  ... -46.090696 -27.459232  123.863636\n```\n\n##### 巴拿马型运费指数\n\n接口: macro_shipping_bpi\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00107665.html\n\n描述: 巴拿马型运费指数, 数据区间从 19981231-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_shipping_bpi_df = ak.macro_shipping_bpi()\nprint(macro_shipping_bpi_df)\n```\n\n数据示例\n\n```\n     日期   最新值       涨跌幅  ...     近1年涨跌幅     近2年涨跌幅     近3年涨跌幅\n0     1998-12-31   732       NaN  ...        NaN        NaN        NaN\n1     1999-01-04   717 -2.049180  ...        NaN        NaN        NaN\n2     1999-01-05   709 -1.115760  ...        NaN        NaN        NaN\n3     1999-01-06   729  2.820874  ...        NaN        NaN        NaN\n4     1999-01-07   734  0.685871  ...        NaN        NaN        NaN\n          ...   ...       ...  ...        ...        ...        ...\n5951  2023-03-03  1565  0.578406  ... -42.015561 -27.579824  67.379679\n5952  2023-03-06  1582  1.086262  ... -43.195691 -29.406515  48.127341\n5953  2023-03-07  1580 -0.126422  ... -45.536022 -29.495761  47.940075\n5954  2023-03-08  1592  0.759494  ... -47.648800 -29.495128  49.063670\n5955  2023-03-09  1624  2.010050  ... -49.154665 -27.435210  52.202437\n```\n\n##### 成品油运输指数\n\n接口: macro_shipping_bcti\n\n目标地址: https://data.eastmoney.com/cjsj/hyzs_list_EMI00107669.html\n\n描述: 成品油运输指数, 数据区间从 20011217-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 最新值    | int64   | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 近3月涨跌幅 | float64 | 注意单位: % |\n| 近6月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅 | float64 | 注意单位: % |\n| 近2年涨跌幅 | float64 | 注意单位: % |\n| 近3年涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_shipping_bcti_df = ak.macro_shipping_bcti()\nprint(macro_shipping_bcti_df)\n```\n\n数据示例\n\n```\n    日期  最新值       涨跌幅  ...     近1年涨跌幅     近2年涨跌幅     近3年涨跌幅\n0     2001-12-27  693       NaN  ...        NaN        NaN        NaN\n1     2001-12-28  691 -0.288600  ...        NaN        NaN        NaN\n2     2002-01-02  688 -0.434153  ...        NaN        NaN        NaN\n3     2002-01-03  687 -0.145349  ...        NaN        NaN        NaN\n4     2002-01-04  687  0.000000  ...        NaN        NaN        NaN\n          ...  ...       ...  ...        ...        ...        ...\n5148  2023-03-03  789 -1.743462  ... -20.383451  62.012320  22.136223\n5149  2023-03-06  782 -0.887199  ... -20.930233  60.245902  14.160584\n5150  2023-03-07  784  0.255754  ... -26.797386  60.655738  14.452555\n5151  2023-03-08  827  5.484694  ... -21.163012  67.748479  20.729927\n5152  2023-03-09  871  5.320435  ... -15.682478  73.161034  21.478382\n```\n\n##### 新增信贷数据\n\n接口: macro_china_new_financial_credit\n\n目标地址: http://data.eastmoney.com/cjsj/xzxd.html\n\n描述: 中国新增信贷数据数据, 数据区间从 200801 至今, 月度数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述       |\n|---------|---------|----------|\n| 月份      | object  | -        |\n| 当月      | float64 | 注意单位: 亿元 |\n| 当月-同比增长 | float64 | 注意单位: %  |\n| 当月-环比增长 | float64 | 注意单位: %  |\n| 累计      | float64 | 注意单位: 亿元 |\n| 累计-同比增长 | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_new_financial_credit_df = ak.macro_china_new_financial_credit()\nprint(macro_china_new_financial_credit_df)\n```\n\n数据示例\n\n```\n     月份       当月    当月-同比增长      当月-环比增长        累计    累计-同比增长\n0    2022年10月份   4431.0 -42.840557   -82.749358  183298.0   4.127067\n1    2022年09月份  25686.0  44.669107    92.491007  178867.0   6.290669\n2    2022年08月份  13344.0   4.963423   226.418787  153181.0   1.763815\n3    2022年07月份   4088.0 -51.281135   -86.614276  139837.0   1.468657\n4    2022年06月份  30540.0  31.740143    67.526056  135749.0   4.888659\n..         ...      ...        ...          ...       ...        ...\n173  2008年05月份   3185.0  28.790942   -32.089552   21201.0   1.386830\n174  2008年04月份   4690.0  11.137441    65.490473   18016.0  -2.288751\n175  2008年03月份   2834.0 -35.838805    16.433854   13326.0  -6.273738\n176  2008年02月份   2434.0 -41.179314   -69.793994   10492.0   7.050301\n177  2008年01月份   8058.0  42.292071  1561.443299    8058.0  42.292071\n```\n\n##### 居民消费价格指数\n\n接口: macro_china_cpi\n\n目标地址: http://data.eastmoney.com/cjsj/cpi.html\n\n描述: 中国居民消费价格指数, 数据区间从 200801 至今, 月度数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 月份      | object  | -       |\n| 全国-当月   | float64 | -       |\n| 全国-同比增长 | float64 | 注意单位: % |\n| 全国-环比增长 | float64 | 注意单位: % |\n| 全国-累计   | float64 | -       |\n| 城市-当月   | float64 | -       |\n| 城市-同比增长 | float64 | 注意单位: % |\n| 城市-环比增长 | float64 | 注意单位: % |\n| 城市-累计   | float64 | -       |\n| 农村-当月   | float64 | -       |\n| 农村-同比增长 | float64 | 注意单位: % |\n| 农村-环比增长 | float64 | 注意单位: % |\n| 农村-累计   | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_cpi_df = ak.macro_china_cpi()\nprint(macro_china_cpi_df)\n```\n\n数据示例\n\n```\n     月份     全国-当月  全国-同比增长  ...  农村-同比增长  农村-环比增长     农村-累计\n0    2022年10月份  102.1000   2.1000  ...   2.5000      0.1  102.0000\n1    2022年09月份  102.8000   2.8000  ...   3.1000      0.4  102.0000\n2    2022年08月份  102.5000   2.5000  ...   2.7000     -0.1  101.8000\n3    2022年07月份  102.7000   2.7000  ...   3.0000      0.5  101.7000\n4    2022年06月份  102.5000   2.5000  ...   2.6000      0.0  101.5000\n..         ...       ...      ...  ...      ...      ...       ...\n173  2008年05月份  107.7163   7.7163  ...   8.5481     -0.3  108.7612\n174  2008年04月份  108.4829   8.4829  ...   9.2737      0.1  108.8147\n175  2008年03月份  108.3097   8.3097  ...   9.0330     -0.5  108.6618\n176  2008年02月份  108.7443   8.7443  ...   9.2344      2.4  108.4812\n177  2008年01月份  107.0781   7.0781  ...   7.7209      1.2  107.7209\n```\n\n##### 国内生产总值\n\n接口: macro_china_gdp\n\n目标地址: http://data.eastmoney.com/cjsj/gdp.html\n\n描述: 中国国内生产总值, 数据区间从 200601 至今, 月度数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称          | 类型      | 描述       |\n|-------------|---------|----------|\n| 季度          | object  | -        |\n| 国内生产总值-绝对值  | float64 | 注意单位: 亿元 |\n| 国内生产总值-同比增长 | float64 | 注意单位: %  |\n| 第一产业-绝对值    | float64 | 注意单位: 亿元 |\n| 第一产业-同比增长   | float64 | 注意单位: %  |\n| 第二产业-绝对值    | float64 | 注意单位: 亿元 |\n| 第二产业-同比增长   | float64 | 注意单位: %  |\n| 第三产业-绝对值    | float64 | 注意单位: 亿元 |\n| 第三产业-同比增长   | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_gdp_df = ak.macro_china_gdp()\nprint(macro_china_gdp_df)\n```\n\n数据示例\n\n```\n   季度  国内生产总值-绝对值  国内生产总值-同比增长  ...  第二产业-同比增长  第三产业-绝对值  第三产业-同比增长\n0   2021-03-01    249310.0         18.3  ...       24.4  145355.0       15.6\n1   2020-12-01   1015986.2          2.3  ...        2.6  553976.8        2.1\n2   2020-09-01    719688.4          0.7  ...        0.9  401249.1        0.4\n3   2020-06-01    454712.1         -1.6  ...       -1.9  258427.4       -1.6\n4   2020-03-01    205727.0         -6.8  ...       -9.6  123008.5       -5.2\n..         ...         ...          ...  ...        ...       ...        ...\n56  2007-03-01     57159.3         13.8  ...       14.8   27703.2       14.1\n57  2006-12-01    219438.5         12.7  ...       13.5   91762.2       14.1\n58  2006-09-01    155816.8         12.8  ...       13.7   67187.0       13.7\n59  2006-06-01     99752.2         13.1  ...       14.2   44996.5       13.6\n60  2006-03-01     47078.9         12.5  ...       13.1   22648.0       13.1\n```\n\n##### 工业品出厂价格指数\n\n接口: macro_china_ppi\n\n目标地址: http://data.eastmoney.com/cjsj/ppi.html\n\n描述: 工业品出厂价格指数, 数据区间从 200601 至今, 月度数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 月份     | object  | -       |\n| 当月     | float64 | -       |\n| 当月同比增长 | float64 | 注意单位: % |\n| 累计     | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_ppi_df = ak.macro_china_ppi()\nprint(macro_china_ppi_df)\n```\n\n数据示例\n\n```\n            月份       当月  当月同比增长        累计\n0    2022年10月份   98.700   -1.30  105.2000\n1    2022年09月份  100.948    0.90  105.9397\n2    2022年08月份  102.300    2.30  106.6000\n3    2022年07月份  104.200    4.20  107.2000\n4    2022年06月份  106.100    6.10  107.7000\n..         ...      ...     ...       ...\n197  2006年05月份  102.430    2.43  102.5700\n198  2006年04月份  101.870    1.87  102.6000\n199  2006年03月份  102.490    2.49  102.9000\n200  2006年02月份  103.010    3.01  103.0000\n201  2006年01月份  103.050    3.05  103.0500\n```\n\n##### 采购经理人指数\n\n接口: macro_china_pmi\n\n目标地址: http://data.eastmoney.com/cjsj/pmi.html\n\n描述: 采购经理人指数, 数据区间从 200801 至今, 月度数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称        | 类型      | 描述      |\n|-----------|---------|---------|\n| 月份        | object  | -       |\n| 制造业-指数    | float64 | -       |\n| 制造业-同比增长  | float64 | 注意单位: % |\n| 非制造业-指数   | float64 | -       |\n| 非制造业-同比增长 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_pmi_df = ak.macro_china_pmi()\nprint(macro_china_pmi_df)\n```\n\n数据示例\n\n```\n    月份  制造业-指数  制造业-同比增长  非制造业-指数  非制造业-同比增长\n0    2022年10月份    49.2  0.000000     48.7  -7.061069\n1    2022年09月份    50.1  1.008065     50.6  -4.887218\n2    2022年08月份    49.4 -1.397206     52.6  10.736842\n3    2022年07月份    49.0 -2.777778     53.8   0.938086\n4    2022年06月份    50.2 -1.375246     54.7   2.242991\n..         ...     ...       ...      ...        ...\n173  2008年05月份    53.3 -4.308797     57.4  -7.717042\n174  2008年04月份    59.2  1.023891     58.4  -3.311258\n175  2008年03月份    58.4  4.099822     58.9   1.202749\n176  2008年02月份    53.4  0.564972     59.3  -2.145215\n177  2008年01月份    53.0 -3.811252     60.2  -0.331126\n```\n\n##### 中国城镇固定资产投资\n\n接口: macro_china_gdzctz\n\n目标地址: http://data.eastmoney.com/cjsj/gdzctz.html\n\n描述: 中国城镇固定资产投资, 数据区间从 200802 至今, 月度数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 月份    | object  | -        |\n| 当月    | float64 | 注意单位: 亿元 |\n| 同比增长  | float64 | 注意单位: %  |\n| 环比增长  | float64 | 注意单位: %  |\n| 自年初累计 | float64 | 注意单位: 亿元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_gdzctz_df = ak.macro_china_gdzctz()\nprint(macro_china_gdzctz_df)\n```\n\n数据示例\n\n```\n        月份        当月   同比增长   环比增长      自年初累计\n0    2022年10月份  50047.00   4.27  -7.84  471459.00\n1    2022年09月份  54306.00   6.66  14.83  421412.00\n2    2022年08月份  47294.00   6.57  -2.25  367106.00\n3    2022年07月份  48382.00   3.75 -26.10  319812.00\n4    2022年06月份  65466.00   5.62  24.89  271430.00\n..         ...       ...    ...    ...        ...\n158  2008年06月份  18171.78  29.49  53.29   58435.98\n159  2008年05月份  11854.13  25.44  17.45   40264.20\n160  2008年04月份  10093.14  25.37  -1.01   28410.07\n161  2008年03月份  10195.65  27.31    NaN   18316.94\n162  2008年02月份       NaN    NaN    NaN    8121.29\n```\n\n##### 海关进出口增减情况\n\n接口: macro_china_hgjck\n\n目标地址: https://data.eastmoney.com/cjsj/hgjck.html\n\n描述: 中国海关进出口增减情况一览表, 数据区间从 200801 至今, 月度数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称         | 类型      | 描述        |\n|------------|---------|-----------|\n| 月份         | object  | -         |\n| 当月出口额-金额   | float64 | 注意单位: 亿美元 |\n| 当月出口额-同比增长 | float64 | 注意单位: %   |\n| 当月出口额-环比增长 | float64 | 注意单位: %   |\n| 当月进口额-金额   | float64 | 注意单位: 亿美元 |\n| 当月进口额-同比增长 | float64 | 注意单位: %   |\n| 当月进口额-环比增长 | float64 | 注意单位: %   |\n| 累计出口额-金额   | float64 | 注意单位: 亿美元 |\n| 累计出口额-同比增长 | float64 | 注意单位: %   |\n| 累计进口额-金额   | float64 | 注意单位: 亿美元 |\n| 累计进口额-同比增长 | float64 | 注意单位: %   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_hgjck_df = ak.macro_china_hgjck()\nprint(macro_china_hgjck_df)\n```\n\n数据示例\n\n```\n     月份      当月出口额-金额  当月出口额-同比增长  ...  累计出口额-同比增长      累计进口额-金额  累计进口额-同比增长\n0    2022年10月份  2.983717e+08        -0.3  ...        11.1  2.264551e+09         3.5\n1    2022年09月份  3.226903e+08         5.9  ...        12.5  2.051334e+09         4.0\n2    2022年08月份  3.143794e+08         7.2  ...        13.5  1.813451e+09         4.5\n3    2022年07月份  3.318411e+08        18.0  ...        14.5  1.578288e+09         5.2\n4    2022年06月份  3.281211e+08        17.1  ...        13.9  1.347358e+09         5.7\n..         ...           ...         ...  ...         ...           ...         ...\n173  2008年05月份  1.204965e+08        28.1  ...        22.9  4.670271e+08        30.4\n174  2008年04月份  1.187067e+08        21.8  ...        21.5  3.665725e+08        27.9\n175  2008年03月份  1.089629e+08        30.6  ...        21.4  2.644787e+08        28.6\n176  2008年02月份  8.736780e+07         6.5  ...        16.8  1.689377e+08        30.9\n177  2008年01月份  1.096400e+08        26.6  ...        26.6  9.017445e+07        27.6\n```\n\n##### 财政收入\n\n接口: macro_china_czsr\n\n目标地址: http://data.eastmoney.com/cjsj/czsr.html\n\n描述: 中国财政收入, 数据区间从 200801 至今, 月度数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述       |\n|---------|---------|----------|\n| 月份      | object  | -        |\n| 当月      | float64 | 注意单位: 亿元 |\n| 当月-同比增长 | float64 | 注意单位: %  |\n| 当月-环比增长 | float64 | 注意单位: %  |\n| 累计      | float64 | 注意单位: 亿元 |\n| 累计-同比增长 | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_czsr_df = ak.macro_china_czsr()\nprint(macro_china_czsr_df)\n```\n\n数据示例\n\n```\n       月份         当月    当月-同比增长  当月-环比增长  累计  累计-同比增长\n0    2008年01月份   7396.64  42.352305  135.212710    7396.64     42.4\n1    2008年02月份   4158.75  36.552139  -43.775147   11555.39     40.2\n2    2008年03月份   4415.95  24.671449    6.184551   15971.34     35.5\n3    2008年04月份   6824.88  17.016465   54.550663   22796.22     29.4\n4    2008年05月份   6268.15  52.602556   -8.157360   29064.37     33.8\n..         ...       ...        ...         ...        ...      ...\n201  2025年05月份  16007.00   0.131365  -21.638028   96623.00     -0.3\n202  2025年06月份  18943.00  -0.305247   18.341975  115566.00     -0.3\n203  2025年07月份  20273.00   2.648101    7.021063  135839.00      0.1\n204  2025年08月份  12359.00   2.030876  -39.037143  148198.00      0.3\n205  2025年09月份  15678.00   2.584571   26.854924  163876.00      0.5\n[206 rows x 6 columns]\n```\n\n##### 外汇贷款数据\n\n接口: macro_china_whxd\n\n目标地址: http://data.eastmoney.com/cjsj/whxd.html\n\n描述: 外汇贷款数据, 数据区间从 200802 至今, 月度数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述        |\n|------|---------|-----------|\n| 月份   | object  | -         |\n| 当月   | float64 | 注意单位: 亿美元 |\n| 同比增长 | float64 | 注意单位: %   |\n| 环比增长 | float64 | 注意单位: %   |\n| 累计   | float64 | 注意单位: 亿美元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_whxd_df = ak.macro_china_whxd()\nprint(macro_china_whxd_df)\n```\n\n数据示例\n\n```\n        月份       当月     同比增长   环比增长    累计\n0    2008年01月份  169.28  4508.33  1789.29  2367.31\n1    2008年02月份  217.02   754.75    28.20  2584.33\n2    2008年03月份  103.62   279.28   -52.25  2687.95\n3    2008年04月份   21.35    39.82   -79.40  2709.30\n4    2008年05月份   30.04   -13.15    40.70  2739.34\n..         ...     ...      ...      ...      ...\n208  2025年05月份   61.00   191.04   354.17  5394.00\n209  2025年06月份  215.00   226.47   252.46  5609.00\n210  2025年07月份  -51.00    77.33  -123.72  5558.00\n211  2025年08月份  -41.00    61.68    19.61  5517.00\n212  2025年09月份   27.00   131.76   165.85  5544.00\n[213 rows x 5 columns]\n```\n\n##### 本外币存款\n\n接口: macro_china_wbck\n\n目标地址: http://data.eastmoney.com/cjsj/wbck.html\n\n描述: 本外币存款, 数据区间从 200802 至今, 月度数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述       |\n|------|---------|----------|\n| 月份   | object  | -        |\n| 当月   | float64 | 注意单位: 亿元 |\n| 同比增长 | float64 | 注意单位: %  |\n| 环比增长 | float64 | 注意单位: %  |\n| 累计   | float64 | 注意单位: 亿元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_wbck_df = ak.macro_china_wbck()\nprint(macro_china_wbck_df)\n```\n\n数据示例\n\n```\n      月份        当月        同比增长        环比增长          累计\n0    2022年10月份  -2650.78 -132.917535 -110.068013  2610227.88\n1    2022年09月份  26328.73   14.546846  134.206364  2612878.66\n2    2022年08月份  11241.68  -19.737487  871.473473  2586549.93\n3    2022年07月份  -1457.17   88.621966 -102.976736  2575308.25\n4    2022年06月份  48951.94   22.914621   63.520287  2576765.42\n..         ...       ...         ...         ...         ...\n173  2008年05月份   8763.12  370.965835   22.035258   442540.86\n174  2008年04月份   7180.81   69.117415  -33.125126   433777.74\n175  2008年03月份  10737.68   25.845804  -19.689339   426596.93\n176  2008年02月份  13370.18  152.665137  829.976560   415859.25\n177  2008年01月份   1437.69  -72.142704  -59.893939   402489.07\n```\n\n##### 新债发行\n\n接口: macro_china_bond_public\n\n目标地址: https://www.chinamoney.com.cn/chinese/xzjfx/\n\n描述: 中国外汇交易中心暨全国银行间同业拆借中心-债券信息披露-新债发行; 近期债券发行数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 债券全称  | object  | -        |\n| 债券类型  | object  | -        |\n| 发行日期  | object  | -        |\n| 计息方式  | object  | -        |\n| 价格    | float64 | 注意单位: 元  |\n| 债券期限  | object  | -        |\n| 计划发行量 | float64 | 注意单位: 亿元 |\n| 债券评级  | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_bond_public_df = ak.macro_china_bond_public()\nprint(macro_china_bond_public_df)\n```\n\n数据示例\n\n```\n                                   债券全称    债券类型   发行日期  ...  债券期限  计划发行量  债券评级\n0          江苏金融租赁股份有限公司2024年绿色金融债券(第一期)   普通金融债  01-16  ...    3年   15.0   AAA\n1            杭银消费金融股份有限公司2024年金融债券(第一期)   普通金融债  01-12  ...    3年   10.0   AAA\n2                      2024年记账式附息(一期)国债      国债  01-12  ...    5年  990.0  None\n3              湖南银行股份有限公司2024年第006期同业存单    同业存单  01-12  ...    6月   11.0  None\n4          北京农村商业银行股份有限公司2024年第012期同业存单    同业存单  01-12  ...    6月   19.0  None\n..                                  ...     ...    ...  ...   ...    ...   ...\n376    江西省国有资本运营控股集团有限公司2024年度第一期超短期融资券  超短期融资券  01-10  ...  180日   30.0  None\n377  中国建筑第八工程局有限公司2024年度第二期超短期融资券(科创票据)  超短期融资券  01-10  ...   44日   30.0  None\n378         厦门国贸集团股份有限公司2024年度第二期超短期融资券  超短期融资券  01-10  ...  120日   20.0  None\n379          广东省环保集团有限公司2024年度第一期超短期融资券  超短期融资券  01-10  ...  260日    5.0  None\n380  台州市路桥公共资产投资管理集团有限公司2024年度第一期超短期融资券  超短期融资券  01-10  ...  252日    6.3  None\n[381 rows x 8 columns]\n```\n\n##### 消费者信心指数\n\n接口: macro_china_xfzxx\n\n目标地址: https://data.eastmoney.com/cjsj/xfzxx.html\n\n描述: 东方财富网-消费者信心指数\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 月份           | object  | -       |\n| 消费者信心指数-指数值  | float64 | -       |\n| 消费者信心指数-同比增长 | float64 | 注意单位: % |\n| 消费者信心指数-环比增长 | float64 | 注意单位: % |\n| 消费者满意指数-指数值  | float64 | -       |\n| 消费者满意指数-同比增长 | float64 | 注意单位: % |\n| 消费者满意指数-环比增长 | float64 | 注意单位: % |\n| 消费者预期指数-指数值  | float64 | -       |\n| 消费者预期指数-同比增长 | float64 | 注意单位: % |\n| 消费者预期指数-环比增长 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_xfzxx_df = ak.macro_china_xfzxx()\nprint(macro_china_xfzxx_df)\n```\n\n数据示例\n\n```\n      月份  消费者信心指数-指数值  ...  消费者预期指数-同比增长  消费者预期指数-环比增长\n0    2022年09月份         87.2  ...    -28.995984      0.568828\n1    2022年08月份         87.0  ...    -26.134454     -1.897321\n2    2022年07月份         87.9  ...    -25.581395     -1.538462\n3    2022年06月份         88.9  ...    -27.949327      3.762828\n4    2022年05月份         86.8  ...    -30.063796      1.036866\n..         ...          ...  ...           ...           ...\n184  2007年05月份        112.8  ...      2.975654      0.351494\n185  2007年04月份        112.3  ...      2.430243      1.426025\n186  2007年03月份        111.0  ...      0.718133     -1.232394\n187  2007年02月份        111.8  ...      2.805430     -0.525394\n188  2007年01月份        112.4  ...      3.442029     -0.609225\n```\n\n##### 存款准备金率\n\n接口: macro_china_reserve_requirement_ratio\n\n目标地址: https://data.eastmoney.com/cjsj/ckzbj.html\n\n描述: 国家统计局-存款准备金率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称            | 类型      | 描述      |\n|---------------|---------|---------|\n| 公布时间          | object  | XXXX年X月 |\n| 生效时间          | object  | XXXX年X月 |\n| 大型金融机构-调整前    | float64 | 注意单位: % |\n| 大型金融机构-调整后    | float64 | 注意单位: % |\n| 大型金融机构-调整幅度   | float64 | 注意单位: % |\n| 中小金融机构-调整前    | float64 | 注意单位: % |\n| 中小金融机构-调整后    | float64 | 注意单位: % |\n| 中小金融机构-调整幅度   | float64 | 注意单位: % |\n| 消息公布次日指数涨跌-上证 | float64 | 注意单位: % |\n| 消息公布次日指数涨跌-深证 | float64 | 注意单位: % |\n| 备注            | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_reserve_requirement_ratio_df = ak.macro_china_reserve_requirement_ratio()\nprint(macro_china_reserve_requirement_ratio_df)\n```\n\n数据示例\n\n```\n           公布时间  ...                                                 备注\n0   2022年11月25日  ...  为保持流动性合理充裕,促进综合融资成本稳中有降,落实稳经济一揽子政策措施,巩固经济回稳向上基...\n1   2022年04月15日  ...  为支持实体经济发展,促进综合融资成本稳中有降,中国人民银行决定于2022年4月25日下调金融...\n2   2021年12月06日  ...  为支持实体经济发展,促进综合融资成本稳中有降,中国人民银行决定于2021年12月15日下调金...\n3   2021年07月09日  ...  为支持实体经济发展,促进综合融资成本稳中有降,中国人民银行决定于2021年7月15日下调金融...\n4   2020年04月03日  ...  为支持实体经济发展,促进加大对中小微企业的支持力度,降低社会融资实际成本,中国人民银行决定对...\n5   2020年04月03日  ...  为支持实体经济发展,促进加大对中小微企业的支持力度,降低社会融资实际成本,中国人民银行决定对...\n6   2020年01月01日  ...  为支持实体经济发展,降低社会融资实际成本,中国人民银行决定于2020年1月6日下调金融机构存...\n7   2019年09月06日  ...  为支持实体经济发展,降低社会融资实际成本,中国人民银行决定于2019年9月16日全面下调金融...\n8   2019年01月04日  ...  为进一步支持实体经济发展,优化流动性结构,降低融资成本,中国人民银行决定下调金融机构存款准备...\n9   2019年01月04日  ...  为进一步支持实体经济发展,优化流动性结构,降低融资成本,中国人民银行决定下调金融机构存款准备...\n10  2018年10月07日  ...  从2018年10月15日起,下调大型商业银行、股份制商业银行、城市商业银行、非县域农村商业银...\n11  2018年06月24日  ...  从2018年7月5日起,下调大型商业银行、股份制商业银行、邮政储蓄银行、城市商业银行、非县域...\n12  2018年04月17日  ...  从2018年4月25日起,下调大型商业银行、股份制商业银行、城市商业银行、非县域农村商业银行...\n13  2016年02月29日  ...  自2016年3月1日起,普遍下调金融机构人民币存款准备金率0.5个百分点,以保持金融体系流动...\n14  2015年10月23日  ...  2015-10-24,自同日起,下调金融机构人民币存款准备金率0.5个百分点,以保持银行体系...\n15  2015年08月25日  ...  自2015年9月6日起,为进一步增强金融机构支持“三农”和小微企业的能力,额外降低县域农村商...\n16  2015年04月19日  ...  自4月20日起对农信社、村镇银行等农村金融机构额外降低人民币存款准备金率1个百分点,并统一下...\n17  2015年02月04日  ...  同时,为进一步增强金融机构支持结构调整的能力,加大对小微企业、“三农”以及重大水利工程建设的...\n18  2012年05月12日  ...                                               None\n19  2012年02月18日  ...                                               None\n20  2011年11月30日  ...                                               None\n21  2011年06月14日  ...                                               None\n22  2011年05月12日  ...                                               None\n23  2011年04月17日  ...                                               None\n24  2011年03月18日  ...                                               None\n25  2011年02月18日  ...                                               None\n26  2011年01月14日  ...                                               None\n27  2010年12月10日  ...                                               None\n28  2010年11月19日  ...                                               None\n29  2010年11月10日  ...                                               None\n30  2010年05月02日  ...  从2010年5月10日起,上调存款类金融机构人民币存款准备金率0.5个百分点,农村信用社、村...\n31  2010年02月12日  ...  从2010年2月25日起,上调存款类金融机构人民币存款准备金率0.5个百分点。为加大对“三农...\n32  2010年01月12日  ...  从2010年1月18日起,上调存款类金融机构人民币存款准备金率0.5个百分点。为增强支农资金...\n33  2008年12月22日  ...                                               None\n34  2008年11月26日  ...                                               None\n35  2008年10月08日  ...                                               None\n36  2008年09月15日  ...  从2008年9月25日起,除工商银行、农业银行、中国银行、建设银行、交通银行、邮政储蓄银行暂...\n37  2008年06月07日  ...                                               None\n38  2008年06月07日  ...  中国人民银行决定上调存款类金融机构人民币存款准备金率1个百分点,于2008年6月15日和25...\n39  2008年05月12日  ...                                               None\n40  2008年04月16日  ...                                               None\n41  2008年03月18日  ...                                               None\n42  2008年01月16日  ...                                               None\n43  2007年12月08日  ...                                               None\n44  2007年11月10日  ...                                               None\n45  2007年10月13日  ...                                               None\n46  2007年09月06日  ...                                               None\n47  2007年07月30日  ...                                               None\n48  2007年05月18日  ...                                               None\n49  2007年04月29日  ...                                               None\n50  2007年04月05日  ...                                               None\n51  2007年02月16日  ...                                               None\n52  2007年01月05日  ...                                               None\n```\n\n##### 社会消费品零售总额\n\n接口: macro_china_consumer_goods_retail\n\n目标地址: http://data.eastmoney.com/cjsj/xfp.html\n\n描述: 东方财富-经济数据-社会消费品零售总额\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述       |\n|---------|---------|----------|\n| 月份      | object  | -        |\n| 当月      | float64 | 注意单位: 亿元 |\n| 同比增长    | float64 | 注意单位: %  |\n| 环比增长    | float64 | 注意单位: %  |\n| 累计      | float64 | 注意单位: 亿元 |\n| 累计-同比增长 | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_consumer_goods_retail_df = ak.macro_china_consumer_goods_retail()\nprint(macro_china_consumer_goods_retail_df)\n```\n\n数据示例\n\n```\n     月份       当月  同比增长       环比增长        累计  累计-同比增长\n0    2022年10月份  40271.0  -0.5   6.692277  360575.0      0.6\n1    2022年09月份  37745.0   2.5   4.101164  320305.0      0.7\n2    2022年08月份  36258.0   5.4   1.081684  282560.0      0.5\n3    2022年07月份  35870.0   2.7  -7.413143  246302.0     -0.2\n4    2022年06月份  38742.0   3.1  15.485736  210432.0     -0.7\n..         ...      ...   ...        ...       ...      ...\n162  2008年05月份   8703.5  21.6   6.896340   42400.7     21.1\n163  2008年04月份   8142.0  22.0   0.231436   33697.2     21.0\n164  2008年03月份   8123.2  21.5  -2.770895   25555.2     20.6\n165  2008年02月份   8354.7  19.1  -7.960517   17432.0     20.2\n166  2008年01月份   9077.3  21.2   0.687720    9077.3     21.2\n```\n\n##### 全社会用电分类情况表\n\n接口: macro_china_society_electricity\n\n目标地址: http://finance.sina.com.cn/mac/#industry-6-0-31-1\n\n描述: 国家统计局-全社会用电分类情况表\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称            | 类型      | 描述         |\n|---------------|---------|------------|\n| 统计时间          | object  | -          |\n| 全社会用电量        | float64 | 注意单位: 万千瓦时 |\n| 全社会用电量同比      | float64 | 注意单位: %    |\n| 各行业用电量合计      | float64 | 注意单位: 万千瓦时 |\n| 各行业用电量合计同比    | float64 | 注意单位: %    |\n| 第一产业用电量       | float64 | 注意单位: 万千瓦时 |\n| 第一产业用电量同比     | float64 | 注意单位: %    |\n| 第二产业用电量       | float64 | 注意单位: 万千瓦时 |\n| 第二产业用电量同比     | float64 | 注意单位: %    |\n| 第三产业用电量       | float64 | 注意单位: 万千瓦时 |\n| 第三产业用电量同比     | float64 | 注意单位: %    |\n| 城乡居民生活用电量合计   | float64 | 注意单位: 万千瓦时 |\n| 城乡居民生活用电量合计同比 | float64 | 注意单位: %    |\n| 城镇居民用电量       | float64 | 注意单位: 万千瓦时 |\n| 城镇居民用电量同比     | float64 | 注意单位: %    |\n| 乡村居民用电量       | float64 | 注意单位: 万千瓦时 |\n| 乡村居民用电量同比     | float64 | 注意单位: %    |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_society_electricity_df = ak.macro_china_society_electricity()\nprint(macro_china_society_electricity_df)\n```\n\n数据示例\n\n```\n      统计时间   全社会用电量  全社会用电量同比  ...  城镇居民用电量同比    乡村居民用电量  乡村居民用电量同比\n0    2003.12  188912117.0     15.29  ...      16.12  8806708.0       5.79\n1    2004.10  175828690.0     15.17  ...       8.74  7652223.0       8.99\n2    2004.11  194584023.0     15.13  ...       8.95  8408040.0      10.48\n3     2004.3   48045510.0     15.70  ...       9.85  2187609.0      11.68\n4     2004.9  157131146.0     14.92  ...       8.58  6814158.0       9.80\n..       ...          ...       ...  ...        ...        ...        ...\n209   2023.6  430760000.0      5.00  ...        NaN        NaN        NaN\n210   2023.7  519650000.0      5.20  ...        NaN        NaN        NaN\n211   2023.8  608260000.0      5.00  ...        NaN        NaN        NaN\n212   2023.9  686370000.0      5.60  ...        NaN        NaN        NaN\n213   2024.2  153160000.0     11.00  ...        NaN        NaN        NaN\n[214 rows x 17 columns]\n```\n\n##### 全社会客货运输量\n\n接口: macro_china_society_traffic_volume\n\n目标地址: http://finance.sina.com.cn/mac/#industry-10-0-31-1\n\n描述: 国家统计局-全社会客货运输量-非累计\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称              | 类型      | 描述       |\n|-----------------|---------|----------|\n| 统计时间            | object  | 年月       |\n| 统计对象            | object  | -        |\n| 货运量             | float64 | 注意单位: 亿吨 |\n| 货运量同比增长         | float64 | 注意单位: %  |\n| 货物周转量           | float64 | 注意单位: 亿  |\n| 公里货物周转量同比增长     | float64 | 注意单位: %  |\n| 客运量             | float64 | 注意单位: 亿人 |\n| 客运量同比增长         | float64 | 注意单位: %  |\n| 旅客周转量           | float64 | 注意单位: 亿  |\n| 公里旅客周转量同比增长     | float64 | 注意单位: %  |\n| 沿海主要港口货物吞吐量     | float64 | 注意单位: 亿吨 |\n| 沿海主要港口货物吞吐量同比增长 | float64 | 注意单位: %  |\n| 其中:外贸货物吞吐量      | float64 | 注意单位: 亿吨 |\n| 其中:外贸货物吞吐量同比增长  | float64 | 注意单位: %  |\n| 民航总周转量          | float64 | 注意单位: 亿  |\n| 公里民航总周转         | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_society_traffic_volume_df = ak.macro_china_society_traffic_volume()\nprint(macro_china_society_traffic_volume_df)\n```\n\n数据示例\n\n```\n         统计时间    统计对象    货运量  ...  其中:外贸货物吞吐量同比增长  民航总周转量  公里民航总周转\n0      2023.7    国际航线  23.60  ...             NaN    29.9     74.9\n1      2023.7  港澳地区航线   1.40  ...             NaN     1.0    488.6\n2      2023.7    国内航线  36.50  ...             NaN    83.8     64.6\n3      2023.7      民航  60.11  ...             NaN   113.7     67.1\n4      2023.7      水运   7.90  ...             NaN     NaN      NaN\n       ...     ...    ...  ...             ...     ...      ...\n2403  1952.12      水运    NaN  ...             NaN     NaN      NaN\n2404  1952.12      公路    NaN  ...             NaN     NaN      NaN\n2405  1952.12      铁路    NaN  ...             NaN     NaN      NaN\n2406  1952.12      合计    NaN  ...             NaN     NaN      NaN\n2407  1952.12      民航    NaN  ...             NaN     NaN      NaN\n[2408 rows x 16 columns]\n```\n\n##### 邮电业务基本情况\n\n接口: macro_china_postal_telecommunicational\n\n目标地址: http://finance.sina.com.cn/mac/#industry-11-0-31-1\n\n描述: 国家统计局-邮电业务基本情况-非累计\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称            | 类型    | 描述       |\n|---------------|-------|----------|\n| 统计时间          | str   | 年月       |\n| 邮电业务总量        | float | 注意单位: 亿元 |\n| 邮电业务总量同比增长    | float | 注意单位: %  |\n| 邮政业务总量        | float | 注意单位: 亿元 |\n| 邮政业务总量同比增长    | float | 注意单位: %  |\n| 电信业务总量        | float | 注意单位: 亿元 |\n| 电信业务总量同比增长    | float | 注意单位: %  |\n| 函件总数          | float | 注意单位: 万件 |\n| 函件总数同比增长      | float | 注意单位: %  |\n| 包件            | float | 注意单位: 万件 |\n| 包件同比增长        | float | 注意单位: %  |\n| 特快专递          | float | 注意单位: 万件 |\n| 特快专递同比增长      | float | 注意单位: %  |\n| 汇票            | float | 注意单位: 万张 |\n| 汇票同比增长        | float | 注意单位: %  |\n| 订销报纸累计数       | float | 注意单位: 万份 |\n| 订销报纸累计数同比增长   | float | 注意单位: %  |\n| 订销杂志累计数       | float | 注意单位: 万份 |\n| 订销杂志累计数同比增长   | float | 注意单位: %  |\n| 集邮业务          | float | 注意单位: 万枚 |\n| 集邮业务同比增长      | float | 注意单位: %  |\n| 邮政储蓄期末余额      | float | 注意单位: 亿元 |\n| 邮政储蓄期末余额同比增长  | float | 注意单位: %  |\n| 长途电话通话时长      | float | 注意单位: 万  |\n| 钟长途电话通话时长同比增长 | float | 注意单位: %  |\n| 本地电话期末用户数     | float | 注意单位: %  |\n| 本地电话期末用户数同比增长 | float | 注意单位: %  |\n| 城市电话用户数       | float | 注意单位: 万户 |\n| 城市电话用户数同比增长   | float | 注意单位: %  |\n| 乡村电话用户数       | float | 注意单位: 万户 |\n| 乡村电话用户数同比增长   | float | 注意单位: %  |\n| 无线寻呼用户数       | float | 注意单位: 万户 |\n| 无线寻呼用户数同比增长   | float | 注意单位: %  |\n| 移动电话用户数       | float | 注意单位: 万户 |\n| 移动电话用户数同比增长   | float | 注意单位: %  |\n| 固定电话用         | float | 注意单位: 万户 |\n| 固定电话用户数同比增长   | float | 注意单位: %  |\n| 城市住宅电话用户      | float | 注意单位: 万户 |\n| 城市住宅电话用户同比增长  | float | 注意单位: %  |\n| 乡村住宅电话用户      | float | 注意单位: 万户 |\n| 乡村住宅电话用户同比增长  | float | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_postal_telecommunicational_df = ak.macro_china_postal_telecommunicational()\nprint(macro_china_postal_telecommunicational_df)\n```\n\n数据示例\n\n```\n        统计时间  邮电业务总量  邮电业务总量同比增长  ...  城市住宅电话用户同比增长  乡村住宅电话用户  乡村住宅电话用户同比增长\n0     2023.7     NaN         NaN  ...           NaN       NaN           NaN\n1     2023.6     NaN         NaN  ...           NaN       NaN           NaN\n2     2023.5     NaN         NaN  ...           NaN       NaN           NaN\n3     2023.4     NaN         NaN  ...           NaN       NaN           NaN\n4     2023.3     NaN         NaN  ...           NaN       NaN           NaN\n..       ...     ...         ...  ...           ...       ...           ...\n299  1970.12     NaN         NaN  ...           NaN       NaN           NaN\n300  1965.12     NaN         NaN  ...           NaN       NaN           NaN\n301  1962.12     NaN         NaN  ...           NaN       NaN           NaN\n302  1957.12     NaN         NaN  ...           NaN       NaN           NaN\n303  1952.12     NaN         NaN  ...           NaN       NaN           NaN\n[304 rows x 41 columns]\n```\n\n##### 国际旅游外汇收入构成\n\n接口: macro_china_international_tourism_fx\n\n目标地址: http://finance.sina.com.cn/mac/#industry-15-0-31-3\n\n描述: 国家统计局-国际旅游外汇收入构成\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型      | 描述         |\n|------|---------|------------|\n| 统计年度 | object  | 年          |\n| 指标   | object  | -          |\n| 数量   | float64 | 注意单位: 百万美元 |\n| 比重   | float64 | 注意单位: %    |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_international_tourism_fx_df = ak.macro_china_international_tourism_fx()\nprint(macro_china_international_tourism_fx_df)\n```\n\n数据示例\n\n```\n     统计年度    指标        数量     比重\n0    2019    餐饮   16041.0   12.2\n1    2019    总计  131254.0  100.0\n2    2019  市内交通    3453.0    2.6\n3    2019  其他服务   10189.0    7.8\n4    2019    汽车    1593.0    1.2\n..    ...   ...       ...    ...\n251  1996    餐饮    1376.0   13.5\n252  1995    总计    8733.0  100.0\n253  1994    总计    7323.0  100.0\n254  1993    总计    4683.0  100.0\n255  1992    总计    3947.0  100.0\n[256 rows x 4 columns]\n```\n\n##### 民航客座率及载运率\n\n接口: macro_china_passenger_load_factor\n\n目标地址: http://finance.sina.com.cn/mac/#industry-20-0-31-1\n\n描述: 国家统计局-民航客座率及载运率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 统计年度 | object  | 年月      |\n| 客座率  | float64 | 注意单位: % |\n| 载运率  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_passenger_load_factor_df = ak.macro_china_passenger_load_factor()\nprint(macro_china_passenger_load_factor_df)\n```\n\n数据示例\n\n```\n     统计时间    客座率    载运率\n0    2023.7  81.20  68.50\n1    2023.6  78.60  69.30\n2    2023.5  74.30  65.90\n3    2023.4  75.90  66.10\n4    2023.3  74.70  66.20\n..      ...    ...    ...\n202  2006.6  72.00  64.60\n203  2006.5  71.30  64.40\n204  2006.4  76.30  69.00\n205  2006.3  72.40  67.50\n206  2006.2  72.70  64.60\n[207 rows x 3 columns]\n```\n\n##### 航贸运价指数\n\n接口: macro_china_freight_index\n\n目标地址: http://finance.sina.com.cn/mac/#industry-22-0-31-2\n\n描述: 新浪财经-中国宏观经济数据-航贸运价指数\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称                | 类型      | 描述 |\n|-------------------|---------|----|\n| 截止日期              | object  | 年月 |\n| 波罗的海好望角型船运价指数BCI  | float64 | -  |\n| 灵便型船综合运价指数BHMI    | float64 | -  |\n| 波罗的海超级大灵便型船BSI指数  | float64 | -  |\n| 波罗的海综合运价指数BDI     | float64 | -  |\n| HRCI国际集装箱租船指数     | float64 | -  |\n| 油轮运价指数成品油运价指数BCTI | float64 | -  |\n| 油轮运价指数原油运价指数BDTI  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_freight_index_df = ak.macro_china_freight_index()\nprint(macro_china_freight_index_df)\n```\n\n数据示例\n\n```\n      截止日期  波罗的海好望角型船运价指数BCI  ...  油轮运价指数成品油运价指数BCTI  油轮运价指数原油运价指数BDTI\n0     2021-08-10            4328.0  ...                NaN               NaN\n1     2021-08-09            4342.0  ...                NaN               NaN\n2     2021-08-06            4359.0  ...                NaN               NaN\n3     2021-08-05            4414.0  ...                NaN               NaN\n4     2021-08-04            4302.0  ...                NaN               NaN\n          ...               ...  ...                ...               ...\n3845  2005-12-13            3459.0  ...             1326.0            2063.0\n3846  2005-12-12            3476.0  ...             1286.0            2051.0\n3847  2005-12-09            3509.0  ...             1261.0            2061.0\n3848  2005-12-08            3553.0  ...                NaN               NaN\n3849  2005-12-07            3709.0  ...                NaN               NaN\n```\n\n##### 央行货币当局资产负债\n\n接口: macro_china_central_bank_balance\n\n目标地址: http://finance.sina.com.cn/mac/#fininfo-8-0-31-2\n\n描述: 新浪财经-中国宏观经济数据-央行货币当局资产负债\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称         | 类型      | 描述       |\n|------------|---------|----------|\n| 统计时间       | object  | 年月       |\n| 国外资产       | float64 | 注意单位: 亿元 |\n| 外汇         | float64 | 注意单位: 亿元 |\n| 货币黄金       | float64 | 注意单位: 亿元 |\n| 其他国外资产     | float64 | 注意单位: 亿元 |\n| 对政府债权      | float64 | 注意单位: 亿元 |\n| 其中:中央政府    | float64 | 注意单位: 亿元 |\n| 对其他存款性公司债权 | float64 | 注意单位: 亿元 |\n| 对其他金融性公司债权 | float64 | 注意单位: 亿元 |\n| 对非货币金融机构债权 | float64 | 注意单位: 亿元 |\n| 对非金融性公司债权  | float64 | 注意单位: 亿元 |\n| 其他资产       | float64 | 注意单位: 亿元 |\n| 总资产        | float64 | 注意单位: 亿元 |\n| 储备货币       | float64 | 注意单位: 亿元 |\n| 发行货币       | float64 | 注意单位: 亿元 |\n| 金融性公司存款    | float64 | 注意单位: 亿元 |\n| 其他存款性公司    | float64 | 注意单位: 亿元 |\n| 其他金融性公司    | float64 | 注意单位: 亿元 |\n| 对金融机构负债    | float64 | 注意单位: 亿元 |\n| 准备金存款      | float64 | 注意单位: 亿元 |\n| 非金融性公司存款   | float64 | 注意单位: 亿元 |\n| 活期存款       | float64 | 注意单位: 亿元 |\n| 债券         | float64 | 注意单位: 亿元 |\n| 国外负债       | float64 | 注意单位: 亿元 |\n| 政府存款       | float64 | 注意单位: 亿元 |\n| 自有资金       | float64 | 注意单位: 亿元 |\n| 其他负债       | float64 | 注意单位: 亿元 |\n| 总负债        | float64 | 注意单位: 亿元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_central_bank_balance_df = ak.macro_china_central_bank_balance()\nprint(macro_china_central_bank_balance_df)\n```\n\n数据示例\n\n```\n        统计时间  国外资产         外汇  ...    自有资金     其他负债        总负债\n0     2023.7  231736.57  217824.72  ...  219.75  6064.21  408091.68\n1     2023.6  231574.38  217733.71  ...  219.75  6544.37  418062.84\n2     2023.5  231469.31  217822.22  ...  219.75  6674.58  406420.84\n3     2023.4  231338.37  217895.06  ...  219.75  6784.49  412654.20\n4     2023.3  230941.18  217893.63  ...  219.75  6690.57  421007.27\n..       ...        ...        ...  ...     ...      ...        ...\n314   1994.3    2437.60    2253.80  ...  280.50  -298.60        NaN\n315  1993.12    1549.50    1431.80  ...  310.30  -255.00        NaN\n316   1993.9    1451.00    1332.20  ...  310.30  -286.50        NaN\n317   1993.6    1286.50    1183.00  ...  310.30  -411.60        NaN\n318   1993.3    1324.00    1222.00  ...  310.30  -384.10        NaN\n[319 rows x 28 columns]\n```\n\n##### 保险业经营情况\n\n接口: macro_china_insurance\n\n目标地址: http://finance.sina.com.cn/mac/#fininfo-19-0-31-3\n\n描述: 新浪财经-中国宏观经济数据-保险业经营情况\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称               | 类型      | 描述       |\n|------------------|---------|----------|\n| 统计时间             | object  | 年月       |\n| 省市地区             | object  | 地区       |\n| 原保险保费收入          | float64 | 注意单位: 万元 |\n| 财产险保费收入          | float64 | 注意单位: 万元 |\n| 人身险保费收入          | float64 | 注意单位: 万元 |\n| 人身险-寿险保费收入       | float64 | 注意单位: 万元 |\n| 人身险-健康险保费收入      | float64 | 注意单位: 万元 |\n| 人身险-意外险保费收入      | float64 | 注意单位: 万元 |\n| 养老保险公司企业年金缴费     | float64 | 注意单位: 万元 |\n| 原保险赔付支出          | float64 | 注意单位: 万元 |\n| 财产险保费赔付支出        | float64 | 注意单位: 万元 |\n| 人身险保费赔付支出        | float64 | 注意单位: 万元 |\n| 人身险-寿险赔付支出       | float64 | 注意单位: 万元 |\n| 人身险-健康险赔付支出      | float64 | 注意单位: 万元 |\n| 人身险-意外险赔付支出      | float64 | 注意单位: 万元 |\n| 业务及管理费           | float64 | 注意单位: 万元 |\n| 银行存款             | float64 | 注意单位: 万元 |\n| 投资               | float64 | 注意单位: 万元 |\n| 资产总额             | float64 | 注意单位: 万元 |\n| 养老保险公司企业年金受托管理资产 | float64 | 注意单位: 万元 |\n| 养老保险公司企业年金投资管理资产 | float64 | 注意单位: 万元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_insurance_df = ak.macro_china_insurance()\nprint(macro_china_insurance_df)\n```\n\n数据示例\n\n```\n        统计时间 省市地区     原保险保费收入  ...  资产总额  养老保险公司企业年金受托管理资产  养老保险公司企业年金投资管理资产\n0     2023.7   新疆   5361100.0  ...   NaN               NaN               NaN\n1     2023.7   宁夏   1718300.0  ...   NaN               NaN               NaN\n2     2023.7   青海    806100.0  ...   NaN               NaN               NaN\n3     2023.7   甘肃   3886700.0  ...   NaN               NaN               NaN\n4     2023.7   陕西   8311200.0  ...   NaN               NaN               NaN\n..       ...  ...         ...  ...   ...               ...               ...\n305  2022.11   宁夏   2020200.0  ...   NaN               NaN               NaN\n306  2022.11   青海    978500.0  ...   NaN               NaN               NaN\n307  2022.11   甘肃   4591900.0  ...   NaN               NaN               NaN\n308  2022.11   陕西  10225900.0  ...   NaN               NaN               NaN\n309  2022.11   西藏    370100.0  ...   NaN               NaN               NaN\n[310 rows x 21 columns]\n```\n\n##### 货币供应量\n\n接口: macro_china_supply_of_money\n\n目标地址: http://finance.sina.com.cn/mac/#fininfo-1-0-31-1\n\n描述: 新浪财经-中国宏观经济数据-货币供应量\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称                 | 类型      | 描述       |\n|--------------------|---------|----------|\n| 统计时间               | object  | 年月       |\n| 货币和准货币（广义货币M2）     | float64 | 注意单位: 亿元 |\n| 货币和准货币（广义货币M2）同比增长 | float64 | 注意单位: %  |\n| 货币(狭义货币M1)         | float64 | 注意单位: 亿元 |\n| 货币(狭义货币M1)同比增长     | float64 | 注意单位: %  |\n| 流通中现金(M0)          | float64 | 注意单位: 亿元 |\n| 流通中现金(M0)同比增长      | float64 | 注意单位: %  |\n| 活期存款               | float64 | 注意单位: 亿元 |\n| 活期存款同比增长           | float64 | 注意单位: %  |\n| 准货币                | float64 | 注意单位: 亿元 |\n| 准货币同比增长            | float64 | 注意单位: %  |\n| 定期存款               | float64 | 注意单位: 亿元 |\n| 定期存款同比增长           | float64 | 注意单位: %  |\n| 储蓄存款出              | float64 | 注意单位: 亿元 |\n| 储蓄存款同比增长           | float64 | 注意单位: %  |\n| 其他存款               | float64 | 注意单位: 亿元 |\n| 其他存款同比增长           | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_supply_of_money_df = ak.macro_china_supply_of_money()\nprint(macro_china_supply_of_money_df)\n```\n\n数据示例\n\n```\n       统计时间 货币和准货币（广义货币M2） 货币和准货币（广义货币M2）同比增长  ... 储蓄存款同比增长       其他存款 其他存款同比增长\n0    2020.8     2136800.00              10.40  ...     None  235344.24     None\n1    2020.7     2125458.46              10.70  ...     None  240538.49     None\n2    2020.6     2134948.66              11.10  ...     None  228402.91     None\n3    2020.5     2100183.74              11.10  ...     None  233222.73     None\n4    2020.4     2093533.83              11.10  ...     None  241313.38     None\n..      ...            ...                ...  ...      ...        ...      ...\n507  1978.5           None               None  ...     None       None     None\n508  1978.4           None               None  ...     None       None     None\n509  1978.3           None               None  ...     None       None     None\n510  1978.2           None               None  ...     None       None     None\n511  1978.1           None               None  ...     None       None     None\n```\n\n##### FR007利率互换曲线历史数据\n\n接口: macro_china_swap_rate\n\n目标地址: https://www.chinamoney.com.cn/chinese/bkcurvfxhis/?cfgItemType=72&curveType=FR007\n\n描述: 国家统计局-FR007利率互换曲线历史数据\n\n限量: 单次返回所有历史数据, 该接口只能获取近一年的数据的数据，其中每次只能获取一个月的数据\n\n输入参数\n\n| 名称         | 类型  | 描述                           |\n|------------|-----|------------------------------|\n| start_date | str | start_date=\"20231128\"；注意时间间隔 |\n| end_date   | str | end_date=\"20231130\"          |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 日期   | object  | -   |\n| 曲线名称 | object  | -   |\n| 时刻   | object  | -   |\n| 价格类型 | object  | -   |\n| 1M   | float64 | -   |\n| 3M   | float64 | -   |\n| 6M   | float64 | -   |\n| 9M   | float64 | -   |\n| 1Y   | float64 | -   |\n| 2Y   | float64 | -   |\n| 3Y   | float64 | -   |\n| 4Y   | float64 | -   |\n| 5Y   | float64 | -   |\n| 7Y   | float64 | -   |\n| 10Y  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_swap_rate_df = ak.macro_china_swap_rate(start_date=\"20240501\", end_date=\"20240531\")\nprint(macro_china_swap_rate_df)\n```\n\n数据示例\n\n```\n             日期           曲线名称    时刻 价格类型  ...      4Y      5Y      7Y     10Y\n0    2024-05-06  FR007利率互换行情曲线   9:30   报卖  ...  2.1375  2.1652  2.5000  2.5000\n1    2024-05-06  FR007利率互换行情曲线  13:30   报买  ...  2.0750  2.1350  2.1650  2.2650\n2    2024-05-06  FR007利率互换行情曲线  14:00   报卖  ...  2.0944  2.1543  2.2512  2.3263\n3    2024-05-06  FR007利率互换行情曲线  14:00   均值  ...  2.0864  2.1530  2.2369  2.3106\n4    2024-05-06  FR007利率互换行情曲线  14:00   报买  ...  2.0784  2.1518  2.2225  2.2950\n..          ...            ...    ...  ...  ...     ...     ...     ...     ...\n940  2024-05-31  FR007利率互换行情曲线  12:30   报卖  ...  2.0000  2.0650  2.2450  2.3350\n941  2024-05-31  FR007利率互换行情曲线  12:30   均值  ...  1.9800  2.0450  2.1450  2.2350\n942  2024-05-31  FR007利率互换行情曲线  12:30   报买  ...  1.9600  2.0250  2.0450  2.1350\n943  2024-05-31  FR007利率互换行情曲线  11:00   均值  ...  1.9775  2.0476  2.1721  2.2687\n944  2024-05-31  FR007利率互换收盘曲线  16:30   报买  ...  1.9853  2.0569  2.1525  2.2425\n[945 rows x 15 columns]\n```\n\n##### 央行黄金和外汇储备\n\n接口: macro_china_foreign_exchange_gold\n\n目标地址: http://finance.sina.com.cn/mac/#fininfo-5-0-31-2\n\n描述: 国家统计局-央行黄金和外汇储备, 比东财接口数据时间长\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称     | 类型      | 描述        |\n|--------|---------|-----------|\n| 统计时间   | object  | 年月        |\n| 黄金储备   | float64 | 注意单位: 万盎司 |\n| 国家外汇储备 | float64 | 注意单位: 亿美元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_foreign_exchange_gold_df = ak.macro_china_foreign_exchange_gold()\nprint(macro_china_foreign_exchange_gold_df)\n```\n\n数据示例\n\n```\n        统计时间     黄金储备    国家外汇储备\n0    1978.12  1280.00      1.67\n1    1979.12  1280.00      8.40\n2    1980.12  1280.00    -12.96\n3    1981.12  1267.00     27.08\n4    1982.12  1267.00     69.86\n..       ...      ...       ...\n384   2023.7  6869.00  32042.70\n385   2023.8  6962.00  31600.98\n386   2023.9  7046.00  31150.70\n387   2024.1  7219.00  32193.20\n388   2024.2  7258.00  32258.17\n[389 rows x 3 columns]\n```\n\n##### 商品零售价格指数\n\n接口: macro_china_retail_price_index\n\n目标地址: http://finance.sina.com.cn/mac/#price-12-0-31-1\n\n描述: 国家统计局-商品零售价格指数\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称       | 类型      | 描述 |\n|----------|---------|----|\n| 统计月份     | object  | 年月 |\n| 居民消费项目   | object  | -  |\n| 零售商品价格指数 | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_retail_price_index_df = ak.macro_china_retail_price_index()\nprint(macro_china_retail_price_index_df)\n```\n\n数据示例\n\n```\n     统计月份       居民消费项目 零售商品价格指数\n0     2020.8    建筑材料及五金电料   100.10\n1     2020.8           燃料    90.70\n2     2020.8   书报杂志及电子出版物   101.70\n3     2020.8  中西药品及医疗保健用品   100.30\n4     2020.8         金银珠宝   122.90\n      ...          ...      ...\n3777  2002.1         机电产品    94.10\n3778  2002.1    家用电器及音像器材    94.20\n3779  2002.1       体育娱乐用品    98.80\n3780  2002.1  中西药品及医疗保健用品    97.30\n3781  2002.1   书报杂志及电子出版物   101.00\n```\n\n##### 国房景气指数\n\n接口: macro_china_real_estate\n\n目标地址: http://data.eastmoney.com/cjsj/hyzs_list_EMM00121987.html\n\n描述: 国家统计局-国房景气指数\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 日期     | object  | -   |\n| 最新值    | float64 | -   |\n| 涨跌幅    | float64 | -   |\n| 近3月涨跌幅 | float64 | -   |\n| 近6月涨跌幅 | float64 | -   |\n| 近1年涨跌幅 | float64 | -   |\n| 近2年涨跌幅 | float64 | -   |\n| 近3年涨跌幅 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_real_estate_df = ak.macro_china_real_estate()\nprint(macro_china_real_estate_df)\n```\n\n数据示例\n\n```\n     日期     最新值       涨跌幅  ...    近1年涨跌幅    近2年涨跌幅    近3年涨跌幅\n0    1998-01-01   98.60       NaN  ...       NaN       NaN       NaN\n1    1998-02-01   98.99  0.395538  ...       NaN       NaN       NaN\n2    1998-03-01   99.05  0.060612  ...       NaN       NaN       NaN\n3    1998-04-01  100.81  1.776880  ...       NaN       NaN       NaN\n4    1998-05-01  101.68  0.863010  ...       NaN       NaN       NaN\n..          ...     ...       ...  ...       ...       ...       ...\n280  2022-03-01   96.66 -0.278552  ... -4.618117 -1.598290 -4.306504\n281  2022-04-01   95.89 -0.796607  ... -5.349916 -3.023867 -5.190825\n282  2022-05-01   95.60 -0.302430  ... -5.533597 -3.774534 -5.402731\n283  2022-06-01   95.40 -0.209205  ... -5.619311 -4.456685 -5.628648\n284  2022-07-01   95.26 -0.146751  ... -5.683168 -4.825657 -5.757816\n```\n\n##### 外汇和黄金储备\n\n接口: macro_china_fx_gold\n\n目标地址: http://data.eastmoney.com/cjsj/hjwh.html\n\n描述: 中国外汇和黄金储备, 数据区间从 200801 至今, 月度数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称        | 类型      | 描述        |\n|-----------|---------|-----------|\n| 月份        | object  | 年度和月份     |\n| 黄金储备-数值   | float64 | 注意单位: 万盎司 |\n| 黄金储备-同比   | float64 | 注意单位: 万盎司 |\n| 黄金储备-环比   | float64 | 注意单位: 万盎司 |\n| 国家外汇储备-数值 | float64 | 注意单位: 亿美元 |\n| 国家外汇储备-同比 | float64 | 注意单位: 亿美元 |\n| 国家外汇储备-环比 | float64 | 注意单位: 亿美元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_fx_gold_df = ak.macro_china_fx_gold()\nprint(macro_china_fx_gold_df)\n```\n\n数据示例\n\n```\n       月份  黄金储备-数值    黄金储备-同比   黄金储备-环比   国家外汇储备-数值  国家外汇储备-同比  国家外汇储备-环比\n0    2008年01月份      NaN        NaN       NaN  15898.1040  43.914387   4.028224\n1    2008年02月份      NaN        NaN       NaN  16471.3371  42.316677   3.605670\n2    2008年03月份      NaN        NaN       NaN  16821.7700  39.944557   2.127532\n3    2008年04月份      NaN        NaN       NaN  17566.5514  40.919594   4.427485\n4    2008年05月份      NaN        NaN       NaN  17969.6074  39.011455   2.294451\n..         ...      ...        ...       ...         ...        ...        ...\n170  2022年03月份  1216.63  14.849008  1.690906  31879.9400   0.566714  -0.803808\n171  2022年04月份  1197.31   8.126829 -1.587993  31197.2000  -2.453270  -2.141598\n172  2022年05月份  1151.83  -3.223828 -3.798515  31277.8000  -2.918335   0.258357\n173  2022年06月份  1138.23   3.053871 -1.180730  30712.7200  -4.441119  -1.806649\n174  2022年07月份  1098.39  -3.963383 -3.500171  31040.7100  -4.073655   1.067929\n```\n\n##### 中国货币供应量\n\n接口: macro_china_money_supply\n\n目标地址: http://data.eastmoney.com/cjsj/hbgyl.html\n\n描述: 东方财富-经济数据-中国宏观-中国货币供应量; 数据区间从 200801 至今, 月度数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称                | 类型      | 描述    |\n|-------------------|---------|-------|\n| 月份                | object  | 年度和月份 |\n| 货币和准货币(M2)-数量(亿元) | float64 | -     |\n| 货币和准货币(M2)-同比增长   | float64 | -     |\n| 货币和准货币(M2)-环比增长   | float64 | -     |\n| 货币(M1)-数量(亿元)     | float64 | -     |\n| 货币(M1)-同比增长       | float64 | -     |\n| 货币(M1)-环比增长       | float64 | -     |\n| 流通中的现金(M0)-数量(亿元) | float64 | -     |\n| 流通中的现金(M0)-同比增长   | float64 | -     |\n| 流通中的现金(M0)-环比增长   | float64 | -     |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_money_supply_df = ak.macro_china_money_supply()\nprint(macro_china_money_supply_df)\n```\n\n数据示例\n\n```\n            月份  货币和准货币(M2)-数量(亿元)  ...  流通中的现金(M0)-同比增长  流通中的现金(M0)-环比增长\n0    2022年10月份         2612914.57  ...            14.30        -0.258787\n1    2022年09月份         2626600.92  ...            13.60         1.482068\n2    2022年08月份         2595068.27  ...            14.30         0.747950\n3    2022年07月份         2578078.57  ...            13.90         0.518710\n4    2022年06月份         2581451.20  ...            13.80         0.485950\n..         ...                ...  ...              ...              ...\n173  2008年05月份          436221.60  ...            12.88        -2.014673\n174  2008年04月份          429313.72  ...            10.70         1.171555\n175  2008年03月份          423054.53  ...            11.12        -6.228418\n176  2008年02月份          421037.84  ...             5.96       -11.503457\n177  2008年01月份          417846.17  ...            31.21        20.896562\n```\n\n##### 全国股票交易统计表\n\n接口: macro_china_stock_market_cap\n\n目标地址: http://data.eastmoney.com/cjsj/gpjytj.html\n\n描述: 全国股票交易统计表, 数据区间从 200801 至今, 月度数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称            | 类型      | 描述       |\n|---------------|---------|----------|\n| 数据日期          | object  | 年度和月份    |\n| 发行总股本-上海      | float64 | 注意单位: 亿元 |\n| 发行总股本-深圳      | float64 | 注意单位: 亿元 |\n| 市价总值-上海       | float64 | 注意单位: 亿元 |\n| 市价总值-深圳       | float64 | 注意单位: 亿元 |\n| 成交金额-上海       | float64 | 注意单位: 亿元 |\n| 成交金额-深圳       | float64 | 注意单位: 亿元 |\n| 成交量-上海        | float64 | -        |\n| 成交量-深圳        | float64 | -        |\n| A股最高综合股价指数-上海 | float64 | -        |\n| A股最高综合股价指数-深圳 | float64 | -        |\n| A股最低综合股价指数-上海 | float64 | -        |\n| A股最低综合股价指数-深圳 | float64 | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_stock_market_cap_df = ak.macro_china_stock_market_cap()\nprint(macro_china_stock_market_cap_df)\n```\n\n数据示例\n\n```\n          数据日期  发行总股本-上海  ...  A股最低综合股价指数-上海  A股最低综合股价指数-深圳\n0    2022年11月份       NaN  ...      2896.7572      2032.0920\n1    2022年10月份  47240.00  ...      2885.0894      1974.9663\n2    2022年09月份  47205.00  ...      3021.9309      2032.3677\n3    2022年08月份  47038.00  ...      3155.1866      2231.3209\n4    2022年07月份  46908.00  ...      3226.2315      2284.0597\n..         ...       ...  ...            ...            ...\n174  2008年05月份  14980.19  ...      3333.9510      1086.0100\n175  2008年04月份  14785.95  ...      2990.7880       963.8400\n176  2008年03月份  14476.47  ...      3357.2290      1186.6000\n177  2008年02月份  14300.84  ...      4123.3050      1385.0400\n178  2008年01月份  14198.16  ...      4330.6970      1424.3500\n```\n\n##### 上海银行业同业拆借报告\n\n接口: macro_china_shibor_all\n\n目标地址: https://datacenter.jin10.com/reportType/dc_shibor\n\n描述: 上海银行业同业拆借报告, 数据区间从 20170317-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称      | 类型      | 默 描述  |\n|---------|---------|-------|\n| 日期      | object  | -     |\n| O/N-定价  | float64 | -     |\n| O/N-涨跌幅 | float64 | 单位: 点 |\n| 1W-定价   | float64 | -     |\n| 1W-涨跌幅  | float64 | 单位: 点 |\n| 2W-定价   | float64 | -     |\n| 2W-涨跌幅  | float64 | 单位: 点 |\n| 1M-定价   | float64 | -     |\n| 1M-涨跌幅  | float64 | 单位: 点 |\n| 3M-定价   | float64 | -     |\n| 3M-涨跌幅  | float64 | 单位: 点 |\n| 6M-定价   | float64 | -     |\n| 6M-涨跌幅  | float64 | 单位: 点 |\n| 9M-定价   | float64 | -     |\n| 9M-涨跌幅  | float64 | 单位: 点 |\n| 1Y-定价   | float64 | -     |\n| 1Y-涨跌幅  | float   | 单位: 点 |\n| ON-定价   | float64 | -     |\n| ON-涨跌幅  | float64 | 单位: 点 |\n| 2M-定价   | float64 | -     |\n| 2M-涨跌幅  | float64 | 单位: 点 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_shibor_all_df = ak.macro_china_shibor_all()\nprint(macro_china_shibor_all_df)\n```\n\n数据示例\n\n```\n              日期  O/N-定价  O/N-涨跌幅   1W-定价  ...   9M-定价  9M-涨跌幅   1Y-定价  1Y-涨跌幅\n0     2015-05-08  1.4430      NaN  2.3340  ...  4.3960     NaN  4.5000     NaN\n1     2017-03-17  2.6330   119.00  2.7250  ...  4.1340  -26.20  4.1246  -37.54\n2     2017-03-20  2.6325    -0.05  2.7471  ...  4.1504    1.64  4.1435    1.89\n3     2017-03-21  2.6477     1.52  2.7680  ...  4.1621    1.17  4.1559    1.24\n4     2017-03-22  2.6507     0.30  2.7910  ...  4.1713    0.92  4.1649    0.90\n          ...     ...      ...     ...  ...     ...     ...     ...     ...\n1753  2024-03-28  1.7340    -3.60  1.9480  ...  2.2380    0.00  2.2670    0.10\n1754  2024-03-29  1.7180    -1.60  1.9670  ...  2.2380    0.00  2.2680    0.10\n1755  2024-04-01  1.7280     1.00  1.8570  ...  2.2350   -0.30  2.2650   -0.30\n1756  2024-04-02  1.7040    -2.40  1.8330  ...  2.2330   -0.20  2.2620   -0.30\n1757  2024-04-03  1.6850    -1.90  1.8210  ...  2.2270   -0.60  2.2560   -0.60\n[1758 rows x 17 columns]\n```\n\n##### 人民币香港银行同业拆息\n\n接口: macro_china_hk_market_info\n\n目标地址: https://datacenter.jin10.com/reportType/dc_hk_market_info\n\n描述: 香港同业拆借报告, 数据区间从 20170320-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述    |\n|---------|---------|-------|\n| 日期      | object  | 日期    |\n| O/N-定价  | float64 | -     |\n| O/N-涨跌幅 | float64 | 单位: 点 |\n| 1W-定价   | float64 | -     |\n| 1W-涨跌幅  | float64 | 单位: 点 |\n| 2W-定价   | float64 | -     |\n| 2W-涨跌幅  | float64 | 单位: 点 |\n| 1M-定价   | float64 | -     |\n| 1M-涨跌幅  | float64 | 单位: 点 |\n| 3M-定价   | float64 | -     |\n| 3M-涨跌幅  | float64 | 单位: 点 |\n| 6M-定价   | float64 | -     |\n| 6M-涨跌幅  | float64 | 单位: 点 |\n| 9M-定价   | float64 | -     |\n| 9M-涨跌幅  | float64 | 单位: 点 |\n| 1Y-定价   | float64 | -     |\n| 1Y-涨跌幅  | float64 | 单位: 点 |\n| ON-定价   | float64 | -     |\n| ON-涨跌幅  | float64 | 单位: 点 |\n| 2M-定价   | float64 | -     |\n| 2M-涨跌幅  | float64 | 单位: 点 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_hk_market_info_df = ak.macro_china_hk_market_info()\nprint(macro_china_hk_market_info_df)\n```\n\n数据示例\n\n```\n         日期   1W-定价  1W-涨跌幅   2W-定价  ...   ON-定价  ON-涨跌幅   2M-定价  2M-涨跌幅\n0     2017-03-20  3.9428     NaN  4.2417  ...  2.0283     NaN  4.5915     NaN\n1     2017-03-21  3.9094   -3.34  4.1647  ...  2.3883   36.00  4.6113    1.98\n2     2017-03-22  4.3795   47.01  4.5853  ...  2.3100   -7.83  4.8365   22.52\n3     2017-03-23  4.3538   -2.57  4.3930  ...  2.2263   -8.37  4.5410  -29.55\n4     2017-03-24  4.3542    0.03  4.4410  ...  2.2438    1.75  4.6405    9.95\n          ...     ...     ...     ...  ...     ...     ...     ...     ...\n1729  2024-03-27  3.9303   26.59  3.9194  ...  5.9838  170.12  3.7000    7.86\n1730  2024-03-28  4.6167   68.64  4.4297  ...  5.4012  -58.26  3.7000    0.00\n1731  2024-04-02  4.7386   12.20  4.5751  ...  5.1127  -28.85  3.9600   26.00\n1732  2024-04-03  4.7218   -1.68  4.5127  ...  5.0232   -8.96  4.0177    5.77\n1733  2024-04-05  4.4933  -22.85  4.3118  ...  3.1500 -187.32  3.9300   -8.77\n[1734 rows x 17 columns]\n```\n\n#### 其他指标\n\n##### 中国日度沿海六大电库存\n\n接口: macro_china_daily_energy\n\n目标地址: https://datacenter.jin10.com/reportType/dc_qihuo_energy_report\n\n描述: 中国日度沿海六大电库存数据, 数据区间从20160101-至今, 不再更新, 只能获得历史数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称      | 类型      | 描述 |\n|---------|---------|----|\n| 日期      | object  | -  |\n| 沿海六大电库存 | float64 | -  |\n| 日耗      | float64 | -  |\n| 存煤可用天数  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_daily_energy_df = ak.macro_china_daily_energy()\nprint(macro_china_daily_energy_df)\n```\n\n数据示例\n\n```\n              日期  沿海六大电库存     日耗  存煤可用天数\n0     2016-01-01  1167.60  64.20   18.19\n1     2016-01-02  1162.90  63.40   18.34\n2     2016-01-03  1160.80  62.60   18.54\n3     2016-01-04  1185.30  57.60   20.58\n4     2016-01-05  1150.20  57.20   20.11\n          ...      ...    ...     ...\n1202  2019-05-17  1639.47  61.71   26.56\n1203  2019-05-21  1591.92  62.67   25.40\n1204  2019-05-22  1578.63  59.54   26.51\n1205  2019-05-24  1671.83  60.65   27.56\n1206  2019-06-21  1786.64  66.57   26.84\n[1207 rows x 4 columns]\n```\n\n##### 人民币汇率中间价报告\n\n接口: macro_china_rmb\n\n目标地址: https://datacenter.jin10.com/reportType/dc_rmb_data\n\n描述: 中国人民币汇率中间价报告, 数据区间从 20170103-20210513\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称              | 类型      | 描述     |\n|-----------------|---------|--------|\n| 日期              | object  | 日期     |\n| 美元/人民币_中间价      | float64 | -      |\n| 美元/人民币_涨跌幅      | float64 | 单位: 点  |\n| 欧元/人民币_中间价      | float64 | -      |\n| 欧元/人民币_涨跌幅      | float64 | 单位: 点  |\n| 100日元/人民币_中间价   | float64 | -      |\n| 100日元/人民币_涨跌幅   | float64 | 单位: 点对 |\n| 港元/人民币_中间价      | float64 | -      |\n| 港元/人民币_涨跌幅      | float64 | 单位: 点  |\n| 英镑/人民币_中间价      | float64 | -      |\n| 英镑/人民币_涨跌幅      | float64 | 单位: 点  |\n| 澳元/人民币_中间价      | float64 | -      |\n| 澳元/人民币_涨跌幅      | float64 | 单位: 点  |\n| 新西兰元/人民币_中间价    | float64 | -      |\n| 新西兰元/人民币_涨跌幅    | float64 | 单位: 点  |\n| 新加坡元/人民币_中间价    | float64 | -      |\n| 新加坡元/人民币_涨跌幅    | float64 | 单位: 点  |\n| 瑞郎/人民币_中间价      | float64 | -      |\n| 瑞郎/人民币_涨跌幅      | float64 | 单位: 点  |\n| 加元/人民币_中间价      | float64 | -      |\n| 加元/人民币_涨跌幅      | float64 | 单位: 点  |\n| 人民币/马来西亚林吉特_中间价 | float64 | -      |\n| 人民币/马来西亚林吉特_涨跌幅 | float64 | 单位: 点  |\n| 人民币/俄罗斯卢布_中间价   | float64 | -      |\n| 人民币/俄罗斯卢布_涨跌幅   | float64 | 单位: 点  |\n| 人民币/南非兰特_中间价    | float64 | -      |\n| 人民币/南非兰特_涨跌幅    | float64 | 单位: 点  |\n| 人民币/韩元_中间价      | float64 | -      |\n| 人民币/韩元_涨跌幅      | float64 | 单位: 点  |\n| 人民币/阿联酋迪拉姆_中间价  | float64 | -      |\n| 人民币/阿联酋迪拉姆_涨跌幅  | float64 | 单位: 点  |\n| 人民币/沙特里亚尔_中间价   | float64 | -      |\n| 人民币/沙特里亚尔_涨跌幅   | float64 | 单位: 点  |\n| 人民币/匈牙利福林_中间价   | float64 | -      |\n| 人民币/匈牙利福林_涨跌幅   | float64 | 单位: 点  |\n| 人民币/波兰兹罗提_中间价   | float64 | -      |\n| 人民币/波兰兹罗提_涨跌幅   | float64 | 单位: 点  |\n| 人民币/丹麦克朗_中间价    | float64 | -      |\n| 人民币/丹麦克朗_涨跌幅    | float64 | 单位: 点  |\n| 人民币/瑞典克朗_中间价    | float64 | -      |\n| 人民币/瑞典克朗_涨跌幅    | float64 | 单位: 点  |\n| 人民币/丹麦克朗_中间价    | float64 | -      |\n| 人民币/丹麦克朗_涨跌幅    | float64 | 单位: 点  |\n| 人民币/挪威克朗_中间价    | float64 | -      |\n| 人民币/挪威克朗_涨跌幅    | float64 | 单位: 点  |\n| 人民币/土耳其里拉_中间价   | float64 | -      |\n| 人民币/土耳其里拉_涨跌幅   | float64 | 单位: 点  |\n| 人民币/墨西哥比索_中间价   | float64 | -      |\n| 人民币/墨西哥比索_涨跌幅   | float64 | 单位: 点  |\n| 人民币/泰铢_中间价      | float64 | -      |\n| 人民币/泰铢_涨跌幅      | float64 | 单位: 点  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_rmb_df = ak.macro_china_rmb()\nprint(macro_china_rmb_df)\n```\n\n数据示例\n\n```\n     日期  美元/人民币_中间价  美元/人民币_涨跌幅  ...  人民币/墨西哥比索_涨跌幅  人民币/泰铢_定价  人民币/泰铢_涨跌幅\n0    2018-02-06      6.3072         0.0  ...            0.0     5.0191         0.0\n1    2018-02-07      6.2882      -190.0  ...         -184.0     5.0178       -13.0\n2    2018-02-08      6.2822       -60.0  ...          286.0     5.0429       251.0\n3    2018-02-09      6.3194       372.0  ...          -64.0     5.0406       -23.0\n4    2018-02-12      6.3001      -193.0  ...         -146.0     5.0310       -96.0\n..          ...         ...         ...  ...            ...        ...         ...\n786  2021-05-07      6.4678      -217.0  ...         -118.0     4.8283       310.0\n787  2021-05-10      6.4425      -253.0  ...         -171.0     4.8333        50.0\n788  2021-05-11      6.4254      -171.0  ...           85.0     4.8434       101.0\n789  2021-05-12      6.4258         4.0  ...           65.0     4.8503        69.0\n790  2021-05-13      6.4612       354.0  ...          107.0     4.8427       -76.0\n```\n\n##### 深圳融资融券报告\n\n接口: macro_china_market_margin_sz\n\n目标地址: https://datacenter.jin10.com/reportType/dc_market_margin_sz\n\n描述: 深圳融资融券报告, 数据区间从 20100331-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 日期     | object  | -       |\n| 融资买入额  | float64 | 注意单位: 元 |\n| 融资余额   | float64 | 注意单位: 元 |\n| 融券卖出量  | float64 | 注意单位: 股 |\n| 融券余量   | float64 | 注意单位: 股 |\n| 融券余额   | float64 | 注意单位: 元 |\n| 融资融券余额 | float64 | 注意单位: 元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_market_margin_sz_df = ak.macro_china_market_margin_sz()\nprint(macro_china_market_margin_sz_df)\n```\n\n数据示例\n\n```\n         日期       融资买入额  ...          融券余额        融资融券余额\n0     2010-03-31  6.845690e+05  ...  7.089500e+04  7.416910e+05\n1     2010-04-08  6.713260e+06  ...  5.602300e+04  1.452378e+07\n2     2010-04-09  9.357095e+06  ...  1.083620e+05  1.984136e+07\n3     2010-04-12  1.040656e+07  ...  8.100000e+03  2.482113e+07\n4     2010-04-15  1.660717e+07  ...  9.767600e+04  4.807796e+07\n          ...           ...  ...           ...           ...\n3374  2024-03-27  3.589356e+10  ...  1.500044e+10  7.222717e+11\n3375  2024-03-28  4.240178e+10  ...  1.527372e+10  7.247246e+11\n3376  2024-03-29  3.843272e+10  ...  1.540008e+10  7.220648e+11\n3377  2024-04-01  5.034045e+10  ...  1.579884e+10  7.264701e+11\n3378  2024-04-02  4.460770e+10  ...  1.577416e+10  7.271902e+11\n[3379 rows x 7 columns]\n```\n\n##### 上海融资融券报告\n\n接口: macro_china_market_margin_sh\n\n目标地址: https://datacenter.jin10.com/reportType/dc_market_margin_sse\n\n描述: 上海融资融券报告, 数据区间从 20100331-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型     | 描述     |\n|--------|--------|--------|\n| 日期     | object | 日期     |\n| 融资余额   | int64  | 注意单位：元 |\n| 融资买入额  | int64  | 注意单位：元 |\n| 融券余量   | int64  | 注意单位：股 |\n| 融券余额   | int64  | 注意单位：元 |\n| 融券卖出量  | int64  | 注意单位：股 |\n| 融资融券余额 | int64  | 注意单位：元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_market_margin_sh_df = ak.macro_china_market_margin_sh()\nprint(macro_china_market_margin_sh_df)\n```\n\n数据示例\n\n```\n       日期        融资买入额  ...         融券余额        融资融券余额\n0     2010-03-31      5866316  ...        24142       5848955\n1     2010-04-01      1054024  ...        17325       6859439\n2     2010-04-02       207516  ...        11929       6774710\n3     2010-04-06      3329461  ...        10267      10101510\n4     2010-04-07     15141395  ...        38418      25125244\n          ...          ...  ...          ...           ...\n3352  2024-01-18  31033922602  ...  43743457679  862765876243\n3353  2024-01-19  21406253320  ...  43641546854  859359188408\n3354  2024-01-22  25940316396  ...  42027262985  851323826307\n3355  2024-01-23  24325476838  ...  42650470550  849682914607\n3356  2024-01-24  30879941897  ...  43796442043  849741276211\n[3357 rows x 7 columns]\n```\n\n##### 上海黄金交易所报告\n\n接口: macro_china_au_report\n\n目标地址: https://datacenter.jin10.com/reportType/dc_sge_report\n\n描述: 上海黄金交易所报告, 数据区间从 20140905-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| 日期    | object  | -   |\n| 商品    | object  | -   |\n| 开盘价   | float64 | -   |\n| 最高价   | float64 | -   |\n| 最低价   | float64 | -   |\n| 收盘价   | float64 | -   |\n| 涨跌    | float64 | -   |\n| 涨跌幅   | float64 | -   |\n| 加权平均价 | float64 | -   |\n| 成交量   | float64 | -   |\n| 成交金额  | float64 | -   |\n| 持仓量   | float64 | -   |\n| 交收方向  | object  | -   |\n| 交收量   | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_au_report_df = ak.macro_china_au_report()\nprint(macro_china_au_report_df)\n```\n\n数据示例\n\n```\n               日期        商品      开盘价  ...        持仓量   交收方向      交收量\n0      2014-09-05    Pt9995   293.50  ...        NaN             NaN\n1      2014-09-05   Ag(T+D)  4159.00  ...  5252236.0   空支付多      NaN\n2      2014-09-05   Ag99.99  4218.00  ...      322.0             NaN\n3      2014-09-05   Au(T+D)   250.52  ...   144574.0   多支付空  11848.0\n4      2014-09-05  mAu(T+D)   250.87  ...   130808.0   多支付空  23644.0\n           ...       ...      ...  ...        ...    ...      ...\n24389  2023-03-23  NYAuTN12   437.60  ...    28328.0             NaN\n24390  2023-03-23    PGC30g   444.00  ...        NaN             NaN\n24391  2023-03-23   Pt99.95   227.20  ...        NaN             NaN\n24392  2023-03-23   Au99.99   434.00  ...        NaN             NaN\n24393  2023-03-23   Ag(T+D)  5108.00  ...  4965526.0  空支付给多  17670.0\n```\n\n#### 国家统计局通用接口\n\n##### 国家统计局全国数据\n\n接口: macro_china_nbs_nation\n\n目标地址: https://data.stats.gov.cn/easyquery.htm\n\n描述: 国家统计局全国数据通用接口，包括月度数据、季度数据、年度数据，具体指标见数据官网。\n\n限量: 根据参数返回指定数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                                                                 |\n|--------|-----|----------------------------------------------------------------------------------------------------------------------------------------------------|\n| kind   | str | 数据类别，包括：月度数据、季度数据、年度数据。                                                                                                                            |\n| path   | str | 数据路径， 需与kind参数匹配，具体见官网，多层级之间使用  > 连接 。<br> 示例：<br>    国民经济核算 > 支出法国内生产总值<br>   人口 > 总人口<br>   金融业 > 保险系统机构、人员数 > 保险系统机构数                           |\n| period | str | 时间区间 <br/>参考格式如下(英文逗号分割，且不能有多余空格)：<br/>    月：201201,201205<br/>    季：2012A,2012B,2012C,2012D<br/>    年：2012,2013 <br>    至今：2013-<br>    最近：last10 |\n\n输出参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_nbs_nation_df = ak.macro_china_nbs_nation(kind=\"年度数据\", path=\"人口 > 总人口\", period=\"LAST5\")\nprint(macro_china_nbs_nation_df)\n```\n\n数据示例\n\n```\n                  2022年    2021年    2020年      2019年        2018年\n年末总人口(万人)  141175.0  141260.0  141212.0  141008.0000  140541.000000\n男性人口(万人)    72206.0   72311.0   72357.0   72039.0000   71863.871426\n女性人口(万人)    68969.0   68949.0   68855.0   68969.0000   68677.128574\n城镇人口(万人)    92071.0   91425.0   90220.0   88426.1168   86432.715000\n乡村人口(万人)    49104.0   49835.0   50992.0   52581.8832   54108.285000\n```\n\n##### 国家统计局地区数据\n\n接口: macro_china_nbs_region\n\n目标地址: https://data.stats.gov.cn/easyquery.htm\n\n描述: 国家统计局地区数据通用接口，包括分省月度数据、分省季度数据、分省年度数据、主要城市月度价格、主要城市年度数据、港澳台月度数据、港澳台年度数据，具体指标见数据官网。\n\n限量: 根据参数返回指定数据\n\n输入参数\n\n| 名称        | 类型               | 描述                                                                                                                                                |\n|-----------|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|\n| kind      | str              | 数据类别，包括：分省月度数据、分省季度数据、分省年度数据、主要城市月度价格、主要城市年度数据、港澳台月度数据、港澳台年度数据。                                                                                   |\n| path      | str              | 数据路径， 需与kind匹配，具体见官网，多层级之间使用  > 连接 。<br> 示例：<br>   国民经济核算 > 地区生产总值<br>   财政 > 地方财政收入                                                              |\n| indicator | Union[str, None] | 指定指标，表示在当前path下可选择的指标。在指定region参数的情况下，此参数可以设置为None，此时将获取指定地区下所有可选指标的值。indicator和region参数不能同时为None。                                                |\n| region    | Union[str, None] | 指定地区，为可选指标。指定时表示仅获取当前地区下的数据。                                                                                                                      |\n| period    | str              | 时间区间<br/>参考格式如下(英文逗号分割，且不能有多余空格)：<br/>    月：201201,201205<br/>    季：2012A,2012B,2012C,2012D<br/>    年：2012,2013 <br>    至今：2013-<br>    最近：last10 |\n\n输出参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_nbs_region_df = ak.macro_china_nbs_region(kind=\"分省季度数据\", path=\"国民经济核算 > 地区生产总值\", period=\"last3\", indicator=None, region=\"河北省\")\nprint(macro_china_nbs_region_df)\n\nmacro_china_nbs_region_df = ak.macro_china_nbs_region(kind=\"分省季度数据\", path=\"人民生活 > 居民人均可支配收入\", indicator='居民人均可支配收入_累计值(元)', period=\"2022\")\nprint(macro_china_nbs_region_df)\n```\n\n数据示例\n\n```\nregion_gdp_df\n河北省                                2023年第二季度   2023年第一季度  2022年第四季度\n地区生产总值_累计值(亿元)                 20779.0        10041.0        42370.0\n地区生产总值指数(上年同期=100)_累计值(%)    106.1         105.1          103.8\n\nregion_income_df\n居民人均可支配收入_累计值(元)      2022年第四季度     2022年第三季度     2022年第二季度  2022年第一季度\n北京市                            77414.548842      58596.590041     39391.260057    20630.0\n天津市                            48976.122565      38934.695987     25453.536929    14082.0\n河北省                            30867.016699      22783.082852     14998.243977     7863.0\n...                               ...               ...              ...              ...\n新疆维吾尔自治区                   27062.738782      16553.955250     10747.883634     5713.0\n```\n\n#### 金融市场\n\n##### 股票筹资\n\n接口: macro_stock_finance\n\n目标地址: https://data.10jqka.com.cn/macro/finance/\n\n描述: 同花顺-数据中心-宏观数据-股票筹资\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称     | 类型      | 描述 |\n|--------|---------|----|\n| 月份     | object  | -  |\n| 募集资金   | float64 | -  |\n| 首发募集资金 | float64 | -  |\n| 增发募集资金 | float64 | -  |\n| 配股募集资金 | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_stock_finance_df = ak.macro_stock_finance()\nprint(macro_stock_finance_df)\n```\n\n数据示例\n\n```\n    月份     募集资金  首发募集资金 增发募集资金  配股募集资金\n0   2023-05   567.67  368.03   199.64     NaN\n1   2023-06   600.62  313.84   189.56   97.22\n2   2023-07  1145.38  602.19   543.19     NaN\n3   2023-08   890.07  244.96   632.60   12.51\n4   2023-09   310.89  142.20   168.69     NaN\n5   2023-10   318.26   57.45   260.81     NaN\n6   2023-11   416.35   81.24   317.13   17.98\n7   2023-12   439.66  110.33   329.33     NaN\n8   2024-01   497.90  116.16   381.74     NaN\n9   2024-02    44.83   18.00    26.83     NaN\n10  2024-03   306.71   53.24   253.47     NaN\n11  2024-04   182.98    9.31   173.67     NaN\n12  2024-05    84.48   21.49    62.99     NaN\n13  2024-06   109.70   38.76    70.93     NaN\n14  2024-07   185.47   42.12   143.35     NaN\n15  2024-08   104.06   45.85    58.21     NaN\n16  2024-09    53.19   39.66    13.53     NaN\n17  2024-10   107.17   37.35    69.83     NaN\n18  2024-11   190.44   52.66   137.79     NaN\n19  2024-12   402.63   79.51   323.12     NaN\n20  2025-01   847.32   41.09   806.23     NaN\n21  2025-02    78.43   34.50    43.93     NaN\n22  2025-03  1360.01   58.11  1301.91     NaN\n23  2025-04   219.92   56.44   163.48     NaN\n24  2025-05   221.00   88.37   132.63     NaN\n25  2025-06  5392.38   44.93  5347.45     NaN\n26  2025-07   510.08  219.44   290.63     NaN\n27  2025-08   193.42   13.56   179.86     NaN\n28  2025-09  1543.38   98.45  1444.93     NaN\n29  2025-10   313.78  112.92   200.86     NaN\n```\n\n##### 新增人民币贷款\n\n接口: macro_rmb_loan\n\n目标地址: https://data.10jqka.com.cn/macro/loan/\n\n描述: 同花顺-数据中心-宏观数据-新增人民币贷款\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称         | 类型      | 描述 |\n|------------|---------|----|\n| 月份         | object  | -  |\n| 新增人民币贷款-总额 | float64 | -  |\n| 新增人民币贷款-同比 | object  | -  |\n| 新增人民币贷款-环比 | object  | -  |\n| 累计人民币贷款-总额 | float64 | -  |\n| 累计人民币贷款-同比 | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_rmb_loan_df = ak.macro_rmb_loan()\nprint(macro_rmb_loan_df)\n```\n\n数据示例\n\n```\n   月份  新增人民币贷款-总额 新增人民币贷款-同比 新增人民币贷款-环比 累计人民币贷款-总额 累计人民币贷款-同比\n0   2023-04      7188.0     11.37%    -81.52%  2261643.47     12.15%\n1   2023-05     13600.0    -28.04%     89.20%  2275271.41     11.78%\n2   2023-06     30500.0      8.54%    124.26%  2305766.69     11.74%\n3   2023-07      3459.0    -49.06%    -88.66%  2309226.18     11.54%\n4   2023-08     13600.0      8.80%    293.18%  2322806.64     11.52%\n5   2023-09     23100.0     -6.48%     69.85%  2345924.92     11.31%\n6   2023-10      7384.0     20.03%    -68.03%  2353309.12     11.33%\n7   2023-11     10900.0     -9.92%     47.62%  2364196.44     11.21%\n8   2023-12     11700.0    -16.43%      7.34%  2375905.37     11.03%\n9   2024-01     49200.0      0.41%    320.51%  2425047.89     10.36%\n10  2024-02     14500.0    -19.89%    -70.53%  2439604.04     10.11%\n11  2024-03     30900.0    -20.57%    113.10%  2470492.81      9.58%\n12  2024-04      7300.0      1.56%    -76.38%  2477817.72      9.56%\n13  2024-05      9500.0    -30.15%     30.14%  2487269.61      9.32%\n14  2024-06     21300.0    -30.16%    124.21%  2508526.52      8.79%\n15  2024-07      2600.0    -24.83%    -87.79%  2511136.90      8.74%\n16  2024-08      9000.0    -33.82%    246.15%  2520166.54      8.50%\n17  2024-09     15900.0    -31.17%     76.67%  2536108.31      8.11%\n18  2024-10      5000.0    -32.29%    -68.55%  2541043.57      7.98%\n19  2024-11      5800.0    -46.79%     16.00%  2546826.79      7.72%\n20  2024-12      9900.0    -15.38%     70.69%  2556778.21      7.61%\n21  2025-01     51300.0      4.27%    418.18%  2607690.85      7.53%\n22  2025-02     10100.0    -30.34%    -80.31%  2617778.05      7.30%\n23  2025-03     36400.0     17.80%    260.40%  2654136.68      7.43%\n24  2025-04      2800.0    -61.64%    -92.31%  2656987.42      7.23%\n25  2025-05      6200.0    -34.74%    121.43%  2663212.50      7.07%\n26  2025-06     22400.0      5.16%    261.29%  2685590.16      7.06%\n27  2025-07      -500.0   -119.23%   -102.23%  2685099.78      6.93%\n28  2025-08      5900.0    -34.44%   1280.00%  2690987.15      6.78%\n29  2025-09     12900.0    -18.87%    118.64%  2703902.22      6.62%\n```\n\n##### 人民币存款余额\n\n接口: macro_rmb_deposit\n\n目标地址: https://data.10jqka.com.cn/macro/rmb/\n\n描述: 同花顺-数据中心-宏观数据-人民币存款余额\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称        | 类型      | 描述 |\n|-----------|---------|----|\n| 月份        | object  | -  |\n| 新增存款-数量   | float64 | -  |\n| 新增存款-同比   | object  | -  |\n| 新增存款-环比   | object  | -  |\n| 新增企业存款-数量 | float64 | -  |\n| 新增企业存款-同比 | object  | -  |\n| 新增企业存款-环比 | object  | -  |\n| 新增储蓄存款-数量 | float64 | -  |\n| 新增储蓄存款-同比 | object  | -  |\n| 新增储蓄存款-环比 | object  | -  |\n| 新增其他存款-数量 | float64 | -  |\n| 新增其他存款-同比 | object  | -  |\n| 新增其他存款-环比 | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_rmb_deposit_df = ak.macro_rmb_deposit()\nprint(macro_rmb_deposit_df)\n```\n\n数据示例\n\n```\n    月份     新增存款-数量 新增存款-同比  ... 新增其他存款-数量  新增其他存款-同比 新增其他存款-环比\n0   2023-04  2734467.18  12.44%  ...  58014.72      6.58%     9.49%\n1   2023-05  2749085.32  11.65%  ...  60384.07      0.59%     4.08%\n2   2023-06  2786204.53  10.98%  ...  49888.25    -10.37%   -17.38%\n3   2023-07  2774993.33  10.51%  ...  58965.86     -2.57%    18.20%\n4   2023-08  2787610.76  10.45%  ...  58878.32      1.60%    -0.15%\n5   2023-09  2810037.37  10.20%  ...  56750.59      6.77%    -3.61%\n6   2023-10  2816483.21  10.53%  ...  70411.12      9.02%    24.07%\n7   2023-11  2841754.85  10.24%  ...  67118.35     10.21%    -4.68%\n8   2023-12  2842623.30   9.97%  ...  57937.13     15.84%   -13.68%\n9   2024-01  2897428.50   9.18%  ...  66540.81     17.07%    14.85%\n10  2024-02  2906999.38   8.39%  ...  62743.55      2.19%    -5.71%\n11  2024-03  2955054.17   7.89%  ...  55082.19      3.95%   -12.21%\n12  2024-04  2915852.23   6.63%  ...  56062.80     -3.36%     1.78%\n13  2024-05  2932599.27   6.68%  ...  63696.00      5.48%    13.62%\n14  2024-06  2957172.45   6.14%  ...  55502.91     11.25%   -12.86%\n15  2024-07  2949199.49   6.28%  ...  61956.34      5.07%    11.63%\n16  2024-08  2971425.35   6.59%  ...  67543.21     14.72%     9.02%\n17  2024-09  3008822.65   7.07%  ...  65185.15     14.86%    -3.49%\n18  2024-10  3014771.89   7.04%  ...  71149.19      1.05%     9.15%\n19  2024-11  3036481.15   6.85%  ...  72557.14      8.10%     1.98%\n20  2024-12  3022537.95   6.33%  ...  55812.16     -3.67%   -23.08%\n21  2025-01  3065512.47   5.80%  ...  59562.94    -10.49%     6.72%\n22  2025-02  3109697.90   6.97%  ...  72116.15     14.94%    21.08%\n23  2025-03  3152232.44   6.67%  ...  64428.49     16.97%   -10.66%\n24  2025-04  3147793.38   7.95%  ...  68100.96     21.47%     5.70%\n25  2025-05  3169624.01   8.08%  ...  76942.86     20.80%    12.98%\n26  2025-06  3201739.92   8.27%  ...  68776.60     23.92%   -10.61%\n27  2025-07  3206702.75   8.73%  ...  76452.86     23.40%    11.16%\n28  2025-08  3227265.78   8.61%  ...  78348.39     16.00%     2.48%\n29  2025-09  3249387.56   8.00%  ...  69906.51      7.24%   -10.77%\n[30 rows x 13 columns]\n```\n\n### 中国香港宏观\n\n#### 消费者物价指数\n\n接口: macro_china_hk_cpi\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_8_0.html\n\n描述: 东方财富-经济数据一览-中国香港-消费者物价指数\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_hk_cpi_df = ak.macro_china_hk_cpi()\nprint(macro_china_hk_cpi_df)\n```\n\n数据示例\n\n```\n      时间        前值  现值        发布日期\n0    2008年01月   78.4   77.9  2008-02-21\n1    2008年02月   77.9   79.0  2008-03-23\n2    2008年03月   79.0   79.0  2008-04-21\n3    2008年04月   79.0   79.5  2008-05-22\n4    2008年05月   79.5   79.7  2008-06-21\n..        ...    ...    ...         ...\n167  2021年12月  102.0  102.2  2022-01-20\n168  2022年01月  102.2  102.3  2022-02-22\n169  2022年02月  102.3  103.1  2022-03-21\n170  2022年03月  103.1  103.3  2022-04-22\n171  2022年04月  103.3  103.1  2022-05-23\n[172 rows x 4 columns]\n```\n\n#### 消费者物价指数年率\n\n接口: macro_china_hk_cpi_ratio\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_8_1.html\n\n描述: 东方财富-经济数据一览-中国香港-消费者物价指数年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_hk_cpi_ratio_df = ak.macro_china_hk_cpi_ratio()\nprint(macro_china_hk_cpi_ratio_df)\n```\n\n数据示例\n\n```\n           时间   前值   现值        发布日期\n0    2008年01月  3.8  3.2  2008-02-21\n1    2008年02月  3.2  6.3  2008-03-23\n2    2008年03月  6.3  4.2  2008-04-21\n3    2008年04月  4.2  5.4  2008-05-22\n4    2008年05月  5.4  5.7  2008-06-21\n..        ...  ...  ...         ...\n167  2021年12月  1.8  2.4  2022-01-20\n168  2022年01月  2.4  1.2  2022-02-22\n169  2022年02月  1.2  1.6  2022-03-21\n170  2022年03月  1.6  1.7  2022-04-22\n171  2022年04月  1.7  1.3  2022-05-23\n[172 rows x 4 columns]\n```\n\n#### 失业率\n\n接口: macro_china_hk_rate_of_unemployment\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_8_2.html\n\n描述: 东方财富-经济数据一览-中国香港-失业率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_hk_rate_of_unemployment_df = ak.macro_china_hk_rate_of_unemployment()\nprint(macro_china_hk_rate_of_unemployment_df)\n```\n\n数据示例\n\n```\n           时间   前值   现值        发布日期\n0    2008年01月  3.4  3.4  2008-02-18\n1    2008年02月  3.4  3.3  2008-03-20\n2    2008年03月  3.3  3.3  2008-04-18\n3    2008年04月  3.3  3.3  2008-05-19\n4    2008年05月  3.3  3.3  2008-06-18\n..        ...  ...  ...         ...\n190  2023年11月  2.9  2.9  2023-12-19\n191  2023年12月  2.9  2.9  2024-01-18\n192  2024年01月  2.9  2.9  2024-02-20\n193  2024年02月  2.9  2.9  2024-03-18\n194  2024年03月  2.9  NaN  2024-04-18\n[195 rows x 4 columns]\n```\n\n#### GDP\n\n接口: macro_china_hk_gbp\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_8_3.html\n\n描述: 东方财富-经济数据一览-中国香港-香港 GDP\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型      | 描述        |\n|------|---------|-----------|\n| 时间   | object  | -         |\n| 前值   | float64 | 注意单位: 亿港元 |\n| 现值   | float64 | 注意单位: 亿港元 |\n| 发布日期 | object  | -         |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_hk_gbp_df = ak.macro_china_hk_gbp()\nprint(macro_china_hk_gbp_df)\n```\n\n数据示例\n\n```\n          时间    前值      现值       发布日期\n0   2008第1季度  458870  418762.0  2008-05-15\n1   2008第2季度  418762  409388.0  2008-08-15\n2   2008第3季度  409388  436152.0  2008-11-15\n3   2008第4季度  436152  443186.0  2009-02-14\n4   2009第1季度  443186  389033.0  2009-05-15\n..       ...     ...       ...         ...\n60  2023第1季度  732062  720760.0  2023-05-12\n61  2023第2季度  720760  707502.0  2023-08-11\n62  2023第3季度  707502  768426.0  2023-11-10\n63  2023第4季度  768426  794640.0  2024-02-28\n64  2024第1季度  794640       NaN  2024-05-17\n```\n\n#### GDP 同比\n\n接口: macro_china_hk_gbp_ratio\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_8_4.html\n\n描述: 东方财富-经济数据一览-中国香港-香港 GDP 同比\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_hk_gbp_ratio_df = ak.macro_china_hk_gbp_ratio()\nprint(macro_china_hk_gbp_ratio_df)\n```\n\n数据示例\n\n```\n        时间    前值   现值      发布日期\n0   2008第1季度  12.3  9.7  2008-05-15\n1   2008第2季度   9.7  6.0  2008-08-15\n2   2008第3季度   6.0  2.9  2008-11-15\n3   2008第4季度   2.9 -3.4  2009-02-14\n4   2009第1季度  -3.4 -7.1  2009-05-15\n..       ...   ...  ...         ...\n60  2023第1季度  -2.9  5.2  2023-05-12\n61  2023第2季度   5.2  4.9  2023-08-11\n62  2023第3季度   4.9  7.1  2023-11-10\n63  2023第4季度   7.1  8.5  2024-02-28\n64  2024第1季度   8.5  NaN  2024-05-17\n[65 rows x 4 columns]\n```\n\n#### 香港楼宇买卖合约数量\n\n接口: macro_china_hk_building_volume\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_8_5.html\n\n描述: 东方财富-经济数据一览-中国香港-香港楼宇买卖合约数量\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_hk_building_volume_df = ak.macro_china_hk_building_volume()\nprint(macro_china_hk_building_volume_df)\n```\n\n数据示例\n\n```\n          时间    前值     现值      发布日期\n0    2008年01月  15592  16984.0  2008-02-04\n1    2008年02月  16984  14384.0  2008-03-06\n2    2008年03月  14384  10993.0  2008-04-04\n3    2008年04月  10993  10945.0  2008-05-05\n4    2008年05月  10945  10138.0  2008-06-04\n..        ...    ...      ...         ...\n190  2023年11月   2938   3532.0  2023-12-04\n191  2023年12月   3532   3764.0  2024-01-04\n192  2024年01月   3764   4401.0  2024-02-02\n193  2024年02月   4401   3189.0  2024-03-04\n194  2024年03月   3189      NaN  2024-04-04\n[195 rows x 4 columns]\n```\n\n#### 香港楼宇买卖合约成交金额\n\n接口: macro_china_hk_building_amount\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_8_6.html\n\n描述: 东方财富-经济数据一览-中国香港-香港楼宇买卖合约成交金额\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型      | 描述        |\n|------|---------|-----------|\n| 时间   | object  | -         |\n| 前值   | float64 | 注意单位: 亿港元 |\n| 现值   | float64 | 注意单位: 亿港元 |\n| 发布日期 | object  | -         |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_hk_building_amount_df = ak.macro_china_hk_building_amount()\nprint(macro_china_hk_building_amount_df)\n```\n\n数据示例\n\n```\n           时间   前值     现值       发布日期\n0    2008年01月  64449  67774.0  2008-02-04\n1    2008年02月  67774  51974.0  2008-03-06\n2    2008年03月  51974  44017.0  2008-04-04\n3    2008年04月  44017  33509.0  2008-05-05\n4    2008年05月  33509  33972.0  2008-06-04\n..        ...    ...      ...         ...\n190  2023年11月  29008  24537.0  2023-12-04\n191  2023年12月  24537  33585.0  2024-01-04\n192  2024年01月  33585  33669.0  2024-02-02\n193  2024年02月  33669  22579.0  2024-03-04\n194  2024年03月  22579      NaN  2024-04-04\n[195 rows x 4 columns]\n```\n\n#### 香港商品贸易差额年率\n\n接口: macro_china_hk_trade_diff_ratio\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_8_7.html\n\n描述: 东方财富-经济数据一览-中国香港-香港商品贸易差额年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_hk_trade_diff_ratio_df = ak.macro_china_hk_trade_diff_ratio()\nprint(macro_china_hk_trade_diff_ratio_df)\n```\n\n数据示例\n\n```\n           时间      前值         现值        发布日期\n0    2008年01月  -31.654573  -69.070295  2008-02-27\n1    2008年02月  -69.070295 -109.659467  2008-03-29\n2    2008年03月 -109.659467    0.699128  2008-04-27\n3    2008年04月    0.699128   21.249636  2008-05-28\n4    2008年05月   21.249636  -92.302304  2008-06-27\n..        ...         ...         ...         ...\n189  2023年10月  -43.766696  -23.398342  2023-11-27\n190  2023年11月  -23.398342   -3.056591  2023-12-28\n191  2023年12月   -3.056591  -15.908299  2024-01-25\n192  2024年01月  -15.908299  114.357782  2024-02-27\n193  2024年02月  114.357782    8.186928  2024-03-26\n[194 rows x 4 columns]\n```\n\n#### 香港制造业 PPI 年率\n\n接口: macro_china_hk_ppi\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_8_8.html\n\n描述: 东方财富-经济数据一览-中国香港-香港制造业PPI年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_china_hk_ppi_df = ak.macro_china_hk_ppi()\nprint(macro_china_hk_ppi_df)\n```\n\n数据示例\n\n```\n       时间   前值   现值     发布日期\n0   2008第1季度  4.4  5.9  2008-06-13\n1   2008第2季度  5.9  6.9  2008-09-12\n2   2008第3季度  6.9  5.8  2008-12-12\n3   2008第4季度  5.8  3.9  2009-03-13\n4   2009第1季度  3.9 -1.4  2009-06-12\n..       ...  ...  ...         ...\n60  2023第1季度 -0.3  0.9  2023-06-15\n61  2023第2季度  0.9 -0.2  2023-09-13\n62  2023第3季度 -0.2  3.0  2023-12-14\n63  2023第4季度  3.0  2.7  2024-03-14\n64  2024第1季度  2.7  NaN  2024-06-14\n[65 rows x 4 columns]\n```\n\n### 美国宏观\n\n#### 经济状况\n\n##### 美国GDP\n\n接口: macro_usa_gdp_monthly\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_gdp\n\n描述: 美国国内生产总值(GDP)报告, 数据区间从 20080228-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_gdp_monthly_df = ak.macro_usa_gdp_monthly()\nprint(macro_usa_gdp_monthly_df)\n```\n\n数据示例\n\n```\n                商品          日期   今值  预测值   前值\n0    美国国内生产总值(GDP)  2008-02-28  0.6  0.7  0.6\n1    美国国内生产总值(GDP)  2008-03-27  0.6  0.6  0.6\n2    美国国内生产总值(GDP)  2008-04-30  0.6  0.2  0.6\n3    美国国内生产总值(GDP)  2008-06-26  2.7  1.0  0.9\n4    美国国内生产总值(GDP)  2008-07-31  1.9  2.0  1.0\n..             ...         ...  ...  ...  ...\n188  美国国内生产总值(GDP)  2023-12-21  4.9  5.2  2.1\n189  美国国内生产总值(GDP)  2024-01-25  3.3  2.0  4.9\n190  美国国内生产总值(GDP)  2024-02-28  3.2  3.3  4.9\n191  美国国内生产总值(GDP)  2024-03-28  3.4  3.2  4.9\n192  美国国内生产总值(GDP)  2024-04-25  NaN  NaN  3.4\n[193 rows x 5 columns]\n```\n\n#### 物价水平\n\n##### 美国CPI月率报告\n\n接口: macro_usa_cpi_monthly\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_cpi\n\n描述: 美国 CPI 月率报告, 数据区间从 19700101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_cpi_monthly_df = ak.macro_usa_cpi_monthly()\nprint(macro_usa_cpi_monthly_df)\n```\n\n数据示例\n\n```\n          商品        日期   今值  预测值   前值\n0    美国CPI月率  1970-01-01  0.5  NaN  NaN\n1    美国CPI月率  1970-02-01  0.5  NaN  0.5\n2    美国CPI月率  1970-03-01  0.5  NaN  0.5\n3    美国CPI月率  1970-04-01  0.5  NaN  0.5\n4    美国CPI月率  1970-05-01  0.5  NaN  0.5\n..       ...         ...  ...  ...  ...\n647  美国CPI月率  2023-12-12  0.1  0.0  0.1\n648  美国CPI月率  2024-01-11  0.3  0.2  0.2\n649  美国CPI月率  2024-02-13  0.3  0.2  0.2\n650  美国CPI月率  2024-03-12  0.4  0.4  0.3\n651  美国CPI月率  2024-04-10  NaN  0.3  0.4\n[652 rows x 5 columns]\n```\n\n##### 美国CPI年率报告\n\n接口: macro_usa_cpi_yoy\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_0_12.html\n\n描述: 东方财富-经济数据一览-美国-CPI年率, 数据区间从2008-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 发布日期 | object  | -       |\n| 现值   | float64 | 注意单位: % |\n| 前值   | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_cpi_yoy_df = ak.macro_usa_cpi_yoy()\nprint(macro_usa_cpi_yoy_df)\n```\n\n数据示例\n\n```\n       时间        发布日期   现值   前值\n0    2008-01-01  2008-02-14  4.3  4.1\n1    2008-02-01  2008-03-16  4.0  4.3\n2    2008-03-01  2008-04-14  4.0  4.0\n3    2008-04-01  2008-05-15  3.9  4.0\n4    2008-05-01  2008-06-14  4.2  3.9\n..          ...         ...  ...  ...\n181  2023-03-01  2023-04-12  5.0  6.0\n182  2023-04-01  2023-05-10  4.9  5.0\n183  2023-05-01  2023-06-13  4.0  4.9\n184  2023-06-01  2023-07-12  3.0  4.0\n185  2023-07-01  2023-08-10  NaN  3.0\n[186 rows x 4 columns]\n```\n\n##### 美国核心CPI月率报告\n\n接口: macro_usa_core_cpi_monthly\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_core_cpi\n\n描述: 美国核心 CPI 月率报告, 数据区间从 19700101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_core_cpi_monthly_df = ak.macro_usa_core_cpi_monthly()\nprint(macro_usa_core_cpi_monthly_df)\n```\n\n数据示例\n\n```\n            商品          日期   今值  预测值   前值\n0    美国核心CPI月率  1970-01-01  0.5  NaN  NaN\n1    美国核心CPI月率  1970-02-01  0.5  NaN  0.5\n2    美国核心CPI月率  1970-03-01  0.5  NaN  0.5\n3    美国核心CPI月率  1970-04-01  0.8  NaN  0.5\n4    美国核心CPI月率  1970-05-01  0.7  NaN  0.8\n..         ...         ...  ...  ...  ...\n647  美国核心CPI月率  2023-12-12  0.3  0.3  0.2\n648  美国核心CPI月率  2024-01-11  0.3  0.3  0.3\n649  美国核心CPI月率  2024-02-13  0.4  0.3  0.3\n650  美国核心CPI月率  2024-03-12  0.4  0.3  0.4\n651  美国核心CPI月率  2024-04-10  NaN  0.3  0.4\n[652 rows x 5 columns]\n```\n\n##### 美国个人支出月率报告\n\n接口: macro_usa_personal_spending\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_personal_spending\n\n描述: 美国个人支出月率报告, 数据区间从 19700101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_personal_spending_df = ak.macro_usa_personal_spending()\nprint(macro_usa_personal_spending_df)\n```\n\n数据示例\n\n```\n           商品          日期   今值  预测值   前值\n0    美国个人支出月率  1970-01-01  0.4  NaN  NaN\n1    美国个人支出月率  1970-02-01  1.0  NaN  0.4\n2    美国个人支出月率  1970-03-01  0.8  NaN  1.0\n3    美国个人支出月率  1970-04-01 -0.3  NaN  0.8\n4    美国个人支出月率  1970-05-01  0.6  NaN -0.3\n..        ...         ...  ...  ...  ...\n645  美国个人支出月率  2023-11-30  0.2  0.2  0.7\n646  美国个人支出月率  2023-12-22  0.2  0.2  0.1\n647  美国个人支出月率  2024-01-26  0.7  0.4  0.4\n648  美国个人支出月率  2024-02-29  0.2  0.2  0.7\n649  美国个人支出月率  2024-03-29  0.8  0.5  0.2\n[650 rows x 5 columns]\n```\n\n##### 美国零售销售月率报告\n\n接口: macro_usa_retail_sales\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_retail_sales\n\n描述: 美国零售销售月率报告, 数据区间从 19920301-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型   | 描述 |\n|----|------|----|\n| -  | -  - |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_retail_sales_df = ak.macro_usa_retail_sales()\nprint(macro_usa_retail_sales_df)\n```\n\n数据示例\n\n```\n           商品          日期   今值  预测值   前值\n0    美国零售销售月率  1992-03-01  0.1  NaN  NaN\n1    美国零售销售月率  1992-04-01 -0.3  NaN  0.1\n2    美国零售销售月率  1992-05-01  0.6  NaN -0.3\n3    美国零售销售月率  1992-06-01  0.5  NaN  0.6\n4    美国零售销售月率  1992-07-01  0.3  NaN  0.5\n..        ...         ...  ...  ...  ...\n381  美国零售销售月率  2023-12-14  0.3 -0.1 -0.2\n382  美国零售销售月率  2024-01-17  0.6  0.4  0.3\n383  美国零售销售月率  2024-02-15 -0.8 -0.2  0.4\n384  美国零售销售月率  2024-03-14  0.6  0.8 -1.1\n385  美国零售销售月率  2024-04-15  NaN  NaN  0.6\n[386 rows x 5 columns]\n```\n\n##### 美国进口物价指数报告\n\n接口: macro_usa_import_price\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_import_price\n\n描述: 美国进口物价指数报告, 数据区间从 19890201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型   | 描述 |\n|----|------|----|\n| -  | -  - |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_import_price_df = ak.macro_usa_import_price()\nprint(macro_usa_import_price_df)\n```\n\n数据示例\n\n```\n           商品          日期   今值  预测值   前值\n0    美国进口物价指数  1989-02-01  2.0  NaN  NaN\n1    美国进口物价指数  1989-03-01 -0.5  NaN  2.0\n2    美国进口物价指数  1989-04-01  0.8  NaN -0.5\n3    美国进口物价指数  1989-05-01  0.8  NaN  0.8\n4    美国进口物价指数  1989-06-01  0.7  NaN  0.8\n..        ...         ...  ...  ...  ...\n420  美国进口物价指数  2023-12-14 -0.4 -0.8 -0.6\n421  美国进口物价指数  2024-01-17  0.0 -0.5 -0.5\n422  美国进口物价指数  2024-02-15  0.8  0.0 -0.7\n423  美国进口物价指数  2024-03-15  0.3  0.3  0.8\n424  美国进口物价指数  2024-04-12  NaN  0.2  0.3\n[425 rows x 5 columns]\n```\n\n##### 美国出口价格指数报告\n\n接口: macro_usa_export_price\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_export_price\n\n描述: 美国出口价格指数报告, 数据区间从 19890201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型   | 描述 |\n|----|------|----|\n| -  | -  - |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_export_price_df = ak.macro_usa_export_price()\nprint(macro_usa_export_price_df)\n```\n\n数据示例\n\n```\n           商品          日期   今值  预测值   前值\n0    美国出口价格指数  1989-02-01  1.2  NaN  NaN\n1    美国出口价格指数  1989-03-01 -0.3  NaN  1.2\n2    美国出口价格指数  1989-04-01  0.6  NaN -0.3\n3    美国出口价格指数  1989-05-01 -0.2  NaN  0.6\n4    美国出口价格指数  1989-06-01  0.4  NaN -0.2\n..        ...         ...  ...  ...  ...\n420  美国出口价格指数  2023-12-14 -0.9 -1.0 -0.9\n421  美国出口价格指数  2024-01-17 -0.9 -0.6 -0.9\n422  美国出口价格指数  2024-02-15  0.8 -0.1 -0.7\n423  美国出口价格指数  2024-03-15  0.8  0.2  0.9\n424  美国出口价格指数  2024-04-12  NaN  0.1  0.8\n[425 rows x 5 columns]\n```\n\n#### 劳动力市场\n\n##### LMCI\n\n接口: macro_usa_lmci\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_lmci\n\n描述: 美联储劳动力市场状况指数报告, 数据区间从 20141006-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型   | 描述 |\n|----|------|----|\n| -  | -  - |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_lmci_df = ak.macro_usa_lmci()\nprint(macro_usa_lmci_df)\n```\n\n数据示例\n\n```\n              商品          日期   今值  预测值   前值\n0   美联储劳动力市场状况指数  2014-10-06  2.5  NaN  NaN\n1   美联储劳动力市场状况指数  2014-11-10  4.0  NaN  4.0\n2   美联储劳动力市场状况指数  2014-12-08  2.9  NaN  3.9\n3   美联储劳动力市场状况指数  2015-01-12  6.1  NaN  5.5\n4   美联储劳动力市场状况指数  2015-02-09  4.9  NaN  7.3\n5   美联储劳动力市场状况指数  2015-03-09  4.0  NaN  4.9\n6   美联储劳动力市场状况指数  2015-04-06 -0.3  NaN  2.0\n7   美联储劳动力市场状况指数  2015-05-11 -1.9  NaN -1.8\n8   美联储劳动力市场状况指数  2015-06-08  1.3  NaN -0.5\n9   美联储劳动力市场状况指数  2015-07-06  0.8  2.0  0.9\n10  美联储劳动力市场状况指数  2015-08-10  1.1  1.0  1.4\n11  美联储劳动力市场状况指数  2015-09-08  2.1  1.5  1.8\n12  美联储劳动力市场状况指数  2015-10-05  0.0  NaN  1.2\n13  美联储劳动力市场状况指数  2015-11-09  1.6  0.9  1.3\n14  美联储劳动力市场状况指数  2015-12-07  0.5  1.6  2.2\n15  美联储劳动力市场状况指数  2016-01-11  2.9  0.0  2.7\n16  美联储劳动力市场状况指数  2016-02-08  0.4  2.5  2.3\n17  美联储劳动力市场状况指数  2016-03-07 -2.4  1.0 -0.8\n18  美联储劳动力市场状况指数  2016-04-04 -2.1  1.5 -2.5\n19  美联储劳动力市场状况指数  2016-05-09 -0.9 -1.0 -2.1\n20  美联储劳动力市场状况指数  2016-06-06 -4.8 -0.8 -3.4\n21  美联储劳动力市场状况指数  2016-07-11 -1.9  0.0 -3.6\n22  美联储劳动力市场状况指数  2016-08-08  1.0  NaN -0.1\n23  美联储劳动力市场状况指数  2016-09-06 -0.7  0.0  1.0\n24  美联储劳动力市场状况指数  2016-10-11 -2.2  NaN -1.3\n25  美联储劳动力市场状况指数  2016-11-07  0.7  NaN -0.1\n26  美联储劳动力市场状况指数  2016-12-05  1.5  NaN  1.4\n27  美联储劳动力市场状况指数  2017-01-09 -0.3  NaN  2.1\n28  美联储劳动力市场状况指数  2017-02-06  1.3  NaN  0.6\n29  美联储劳动力市场状况指数  2017-03-17  1.3  NaN  1.3\n30  美联储劳动力市场状况指数  2017-04-10  0.4  NaN  1.5\n31  美联储劳动力市场状况指数  2017-05-08  3.5  NaN  3.6\n32  美联储劳动力市场状况指数  2017-06-16  2.3  3.0  3.5\n33  美联储劳动力市场状况指数  2017-07-10  1.5  2.5  3.3\n```\n\n##### 失业率\n\n###### 美国失业率报告\n\n接口: macro_usa_unemployment_rate\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_unemployment_rate\n\n描述: 美国失业率报告, 数据区间从 19700101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型   | 描述 |\n|----|------|----|\n| -  | -  - |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_unemployment_rate_df = ak.macro_usa_unemployment_rate()\nprint(macro_usa_unemployment_rate_df)\n```\n\n数据示例\n\n```\n        商品          日期   今值  预测值   前值\n0    美国失业率  1970-01-01  3.5  NaN  3.5\n1    美国失业率  1970-02-01  3.9  NaN  3.5\n2    美国失业率  1970-03-01  4.2  NaN  3.9\n3    美国失业率  1970-04-01  4.4  NaN  4.2\n4    美国失业率  1970-05-01  4.6  NaN  4.4\n..     ...         ...  ...  ...  ...\n647  美国失业率  2023-12-08  3.7  3.9  3.9\n648  美国失业率  2024-01-05  3.7  3.8  3.7\n649  美国失业率  2024-02-02  3.7  3.8  3.7\n650  美国失业率  2024-03-08  3.9  3.7  3.7\n651  美国失业率  2024-04-05  NaN  3.9  3.9\n[652 rows x 5 columns]\n```\n\n###### 美国挑战者企业裁员人数报告\n\n接口: macro_usa_job_cuts\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_job_cuts\n\n描述: 美国挑战者企业裁员人数报告, 数据区间从 19940201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型   | 描述 |\n|----|------|----|\n| -  | -  - |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 商品  | object  | -        |\n| 日期  | object  | -        |\n| 今值  | float64 | 注意单位: 万人 |\n| 预测值 | float64 | 注意单位: 万人 |\n| 前值  | float64 | 注意单位: 万人 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_job_cuts_df = ak.macro_usa_job_cuts()\nprint(macro_usa_job_cuts_df)\n```\n\n数据示例\n\n```\n              商品          日期       今值  预测值       前值\n0    美国挑战者企业裁员人数  1994-02-01  10.8900  NaN      NaN\n1    美国挑战者企业裁员人数  1994-03-01   3.4600  NaN  10.8900\n2    美国挑战者企业裁员人数  1994-04-01   4.9000  NaN   3.4600\n3    美国挑战者企业裁员人数  1994-05-01   3.6100  NaN   4.9000\n4    美国挑战者企业裁员人数  1994-06-01   3.6300  NaN   3.6100\n..           ...         ...      ...  ...      ...\n360  美国挑战者企业裁员人数  2023-12-07   4.5510  NaN   3.6836\n361  美国挑战者企业裁员人数  2024-01-04   3.4817  NaN   4.5510\n362  美国挑战者企业裁员人数  2024-02-01   8.2307  NaN   3.4817\n363  美国挑战者企业裁员人数  2024-03-07   8.4638  NaN   8.2307\n364  美国挑战者企业裁员人数  2024-04-04   9.0309  NaN   8.4638\n[365 rows x 5 columns]\n```\n\n##### 就业人口\n\n###### 美国非农就业人数报告\n\n接口: macro_usa_non_farm\n\n目标地址: https://datacenter.jin10.com/reportType/dc_nonfarm_payrolls\n\n描述: 美国非农就业人数报告, 数据区间从 19700102-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型   | 描述 |\n|----|------|----|\n| -  | -  - |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 商品  | object  | -        |\n| 日期  | object  | -        |\n| 今值  | float64 | 注意单位: 万人 |\n| 预测值 | float64 | 注意单位: 万人 |\n| 前值  | float64 | 注意单位: 万人 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_non_farm_df = ak.macro_usa_non_farm()\nprint(macro_usa_non_farm_df)\n```\n\n数据示例\n\n```\n           商品          日期    今值   预测值    前值\n0    美国非农就业人数  1970-01-02  15.3   NaN  -3.3\n1    美国非农就业人数  1970-02-06  -6.4   NaN  15.3\n2    美国非农就业人数  1970-03-06  12.8   NaN  -6.4\n3    美国非农就业人数  1970-04-03  14.8   NaN  12.8\n4    美国非农就业人数  1970-05-01 -10.4   NaN  14.8\n..        ...         ...   ...   ...   ...\n647  美国非农就业人数  2023-12-08  19.9  18.0  15.0\n648  美国非农就业人数  2024-01-05  21.6  17.0  17.3\n649  美国非农就业人数  2024-02-02  35.3  18.7  33.3\n650  美国非农就业人数  2024-03-08  27.5  19.8  22.9\n651  美国非农就业人数  2024-04-05   NaN  21.2  27.5\n[652 rows x 5 columns]\n```\n\n###### 美国ADP就业人数报告\n\n接口: macro_usa_adp_employment\n\n目标地址: https://datacenter.jin10.com/reportType/dc_adp_nonfarm_employment\n\n描述: 美国 ADP 就业人数报告, 数据区间从 20010601-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型   | 描述 |\n|----|------|----|\n| -  | -  - |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 商品  | object  | -        |\n| 日期  | object  | -        |\n| 今值  | float64 | 注意单位: 万人 |\n| 预测值 | float64 | 注意单位: 万人 |\n| 前值  | float64 | 注意单位: 万人 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_adp_employment_df = ak.macro_usa_adp_employment()\nprint(macro_usa_adp_employment_df)\n```\n\n数据示例\n\n```\n            商品          日期    今值   预测值    前值\n0    美国ADP就业人数  2001-06-01 -17.5   NaN   NaN\n1    美国ADP就业人数  2001-07-01 -23.0   NaN -17.5\n2    美国ADP就业人数  2001-08-01 -20.3   NaN -23.0\n3    美国ADP就业人数  2001-09-01 -24.6   NaN -20.3\n4    美国ADP就业人数  2001-10-01 -26.1   NaN -24.6\n..         ...         ...   ...   ...   ...\n271  美国ADP就业人数  2023-12-06  10.3  13.0  10.6\n272  美国ADP就业人数  2024-01-04  16.4  11.5  10.1\n273  美国ADP就业人数  2024-01-31  10.7  14.5  15.8\n274  美国ADP就业人数  2024-03-06  14.0  14.9  11.1\n275  美国ADP就业人数  2024-04-03  18.4  14.8  15.5\n[276 rows x 5 columns]\n```\n\n##### 消费者收入与支出\n\n###### 美国核心PCE物价指数年率报告\n\n接口: macro_usa_core_pce_price\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_core_pce_price\n\n描述: 美国核心 PCE 物价指数年率报告, 数据区间从 19700101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型   | 描述 |\n|----|------|----|\n| -  | -  - |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_core_pce_price_df = ak.macro_usa_core_pce_price()\nprint(macro_usa_core_pce_price_df)\n```\n\n数据示例\n\n```\n                商品          日期   今值  预测值   前值\n0    美国核心PCE物价指数年率  1970-01-01  4.8  NaN  NaN\n1    美国核心PCE物价指数年率  1970-02-01  4.7  NaN  4.8\n2    美国核心PCE物价指数年率  1970-03-01  4.8  NaN  4.7\n3    美国核心PCE物价指数年率  1970-04-01  4.7  NaN  4.8\n4    美国核心PCE物价指数年率  1970-05-01  4.7  NaN  4.7\n..             ...         ...  ...  ...  ...\n649  美国核心PCE物价指数年率  2023-11-30  3.5  3.5  3.7\n650  美国核心PCE物价指数年率  2023-12-22  3.2  3.3  3.4\n651  美国核心PCE物价指数年率  2024-01-26  2.9  3.0  3.2\n652  美国核心PCE物价指数年率  2024-02-29  2.8  2.8  2.9\n653  美国核心PCE物价指数年率  2024-03-29  2.8  2.8  2.9\n[654 rows x 5 columns]\n```\n\n###### 美国实际个人消费支出季率初值报告\n\n接口: macro_usa_real_consumer_spending\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_real_consumer_spending\n\n描述: 美国实际个人消费支出季率初值报告, 数据区间从 20131107-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型   | 描述 |\n|----|------|----|\n| -  | -  - |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_real_consumer_spending_df = ak.macro_usa_real_consumer_spending()\nprint(macro_usa_real_consumer_spending_df)\n```\n\n数据示例\n\n```\n                 商品          日期   今值  预测值   前值\n0    美国实际个人消费支出季率初值  2013-11-07  1.5  1.6  1.8\n1    美国实际个人消费支出季率初值  2013-12-05  1.4  1.5  1.5\n2    美国实际个人消费支出季率初值  2013-12-20  2.0  1.4  1.4\n3    美国实际个人消费支出季率初值  2014-01-30  3.3  3.7  2.0\n4    美国实际个人消费支出季率初值  2014-02-28  2.6  2.9  3.3\n..              ...         ...  ...  ...  ...\n124  美国实际个人消费支出季率初值  2023-12-21  3.1  3.6  3.6\n125  美国实际个人消费支出季率初值  2024-01-25  2.8  NaN  3.1\n126  美国实际个人消费支出季率初值  2024-02-28  3.0  2.8  3.1\n127  美国实际个人消费支出季率初值  2024-03-28  3.3  3.0  3.1\n128  美国实际个人消费支出季率初值  2024-04-25  NaN  NaN  3.3\n[129 rows x 5 columns]\n```\n\n#### 贸易状况\n\n##### 美国贸易帐报告\n\n接口: macro_usa_trade_balance\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_trade_balance\n\n描述: 美国贸易帐报告, 数据区间从 19700101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型   | 描述 |\n|----|------|----|\n| -  | -  - |\n\n输出参数\n\n| 名称  | 类型      | 描述        |\n|-----|---------|-----------|\n| 商品  | object  | -         |\n| 日期  | object  | -         |\n| 今值  | float64 | 注意单位: 亿美元 |\n| 预测值 | float64 | 注意单位: 亿美元 |\n| 前值  | float64 | 注意单位: 亿美元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_trade_balance_df = ak.macro_usa_trade_balance()\nprint(macro_usa_trade_balance_df)\n```\n\n数据示例\n\n```\n          商品          日期     今值    预测值     前值\n0    美国贸易帐报告  1970-01-01    2.0    NaN    NaN\n1    美国贸易帐报告  1970-02-01    1.0    NaN    2.0\n2    美国贸易帐报告  1970-03-01    2.0    NaN    1.0\n3    美国贸易帐报告  1970-04-01    1.0    NaN    2.0\n4    美国贸易帐报告  1970-05-01    1.0    NaN    1.0\n..       ...         ...    ...    ...    ...\n648  美国贸易帐报告  2023-12-06 -643.0 -642.0 -612.0\n649  美国贸易帐报告  2024-01-09 -632.0 -650.0 -645.0\n650  美国贸易帐报告  2024-02-07 -622.0 -620.0 -619.0\n651  美国贸易帐报告  2024-03-07 -674.0 -634.0 -642.0\n652  美国贸易帐报告  2024-04-04 -689.0 -669.0 -676.0\n[653 rows x 5 columns]\n```\n\n##### 美国经常帐报告\n\n接口: macro_usa_current_account\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_current_account\n\n描述: 美国经常帐报告, 数据区间从 20080317-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型   | 描述 |\n|----|------|----|\n| -  | -  - |\n\n输出参数\n\n| 名称  | 类型      | 描述        |\n|-----|---------|-----------|\n| 商品  | object  | -         |\n| 日期  | object  | -         |\n| 今值  | float64 | 注意单位: 亿美元 |\n| 预测值 | float64 | 注意单位: 亿美元 |\n| 前值  | float64 | 注意单位: 亿美元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_current_account_df = ak.macro_usa_current_account()\nprint(macro_usa_current_account_df)\n```\n\n数据示例\n\n```\n         商品          日期    今值     预测值    前值\n0   美国经常账报告  2008-03-17 -1730 -1840.0 -1790\n1   美国经常账报告  2008-06-17 -1760     NaN -1730\n2   美国经常账报告  2008-09-17 -1830 -1800.0 -1760\n3   美国经常账报告  2008-12-17 -1740 -1800.0 -1830\n4   美国经常账报告  2009-03-18 -1330 -1370.0 -1740\n..      ...         ...   ...     ...   ...\n60  美国经常账报告  2023-03-23 -2068 -2132.0 -2190\n61  美国经常账报告  2023-06-22 -2193 -2169.0 -2162\n62  美国经常账报告  2023-09-21 -2121 -2210.0 -2145\n63  美国经常账报告  2023-12-20 -2003 -1970.0 -2168\n64  美国经常账报告  2024-03-21 -1948 -2090.0 -1964\n[65 rows x 5 columns]\n```\n\n#### 产业指标\n\n##### 制造业\n\n###### 贝克休斯钻井报告\n\n接口: macro_usa_rig_count\n\n目标地址: https://datacenter.jin10.com/reportType/dc_rig_count_summary\n\n描述: 贝克休斯钻井报告, 数据区间从 19870717-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称          | 类型      | 描述 |\n|-------------|---------|----|\n| 日期          | object  | -  |\n| 钻井总数_钻井数    | float64 | -  |\n| 钻井总数_变化     | float64 | -  |\n| 美国石油钻井_钻井数  | float64 | -  |\n| 美国石油钻井_变化   | float64 | -  |\n| 混合钻井_钻井数    | float64 | -  |\n| 混合钻井_变化     | float64 | -  |\n| 美国天然气钻井_钻井数 | float64 | -  |\n| 美国天然气钻井_变化  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_rig_count_df = ak.macro_usa_rig_count()\nprint(macro_usa_rig_count_df)\n```\n\n数据示例\n\n```\n              日期  钻井总数_钻井数  钻井总数_变化  ...  混合钻井_变化  美国天然气钻井_钻井数  美国天然气钻井_变化\n0     1987-07-17     922.0      NaN  ...      NaN        337.0         NaN\n1     1987-07-24     917.0     -5.0  ...     -5.0        331.0        -6.0\n2     1987-07-31     973.0     56.0  ...      1.0        346.0        15.0\n3     1987-08-07     983.0     10.0  ...     -1.0        349.0         3.0\n4     1987-08-14     998.0     15.0  ...      5.0        352.0         3.0\n          ...       ...      ...  ...      ...          ...         ...\n1891  2024-01-26     621.0      1.0  ...      0.0        119.0        -1.0\n1892  2024-02-02     619.0     -2.0  ...      0.0        117.0        -2.0\n1893  2024-02-09     623.0      4.0  ...      0.0        121.0         4.0\n1894  2024-02-16     621.0     -2.0  ...      0.0        121.0         0.0\n1895  2024-02-23     626.0      5.0  ...      0.0        120.0        -1.0\n[1896 rows x 9 columns]\n```\n\n###### 美国生产者物价指数(PPI)报告\n\n接口: macro_usa_ppi\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_ppi\n\n描述: 美国生产者物价指数(PPI)报告, 数据区间从 20080226-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型   | 描述 |\n|----|------|----|\n| -  | -  - |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_ppi_df = ak.macro_usa_ppi()\nprint(macro_usa_ppi_df)\n```\n\n数据示例\n\n```\n            商品          日期   今值  预测值   前值\n0    美国生产者物价指数  2008-02-26  1.0  0.4 -0.3\n1    美国生产者物价指数  2008-03-18  0.3  0.3  1.0\n2    美国生产者物价指数  2008-04-15  1.1  0.6  0.3\n3    美国生产者物价指数  2008-05-20  0.2  0.4  1.1\n4    美国生产者物价指数  2008-06-17  1.4  1.0  0.2\n..         ...         ...  ...  ...  ...\n191  美国生产者物价指数  2023-12-13  0.0  0.1 -0.4\n192  美国生产者物价指数  2024-01-12 -0.1  0.1 -0.1\n193  美国生产者物价指数  2024-02-16  0.3  0.1 -0.1\n194  美国生产者物价指数  2024-03-14  0.6  0.3  0.3\n195  美国生产者物价指数  2024-04-11  NaN  0.3  0.6\n[196 rows x 5 columns]\n```\n\n###### 美国核心生产者物价指数(PPI)报告\n\n接口: macro_usa_core_ppi\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_core_ppi\n\n描述: 美国核心生产者物价指数(PPI)报告, 数据区间从 20080318-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型   | 描述 |\n|----|------|----|\n| -  | -  - |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_core_ppi_df = ak.macro_usa_core_ppi()\nprint(macro_usa_core_ppi_df)\n```\n\n数据示例\n\n```\n              商品          日期   今值  预测值   前值\n0    美国核心生产者物价指数  2008-03-18  0.5  0.2  0.4\n1    美国核心生产者物价指数  2008-04-15  0.2  0.2  0.5\n2    美国核心生产者物价指数  2008-05-20  0.4  0.2  0.2\n3    美国核心生产者物价指数  2008-06-17  0.2  0.2  0.4\n4    美国核心生产者物价指数  2008-08-19  0.7  0.2  0.2\n..           ...         ...  ...  ...  ...\n188  美国核心生产者物价指数  2023-12-13  0.0  0.2  0.0\n189  美国核心生产者物价指数  2024-01-12  0.0  0.2  0.0\n190  美国核心生产者物价指数  2024-02-16  0.5  0.1 -0.1\n191  美国核心生产者物价指数  2024-03-14  0.3  0.2  0.5\n192  美国核心生产者物价指数  2024-04-11  NaN  0.2  0.3\n[193 rows x 5 columns]\n```\n\n###### 美国 API 原油库存报告\n\n接口: macro_usa_api_crude_stock\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_api_crude_stock\n\n描述: 美国 API 原油库存报告, 数据区间从 20120328-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 商品  | object  | -        |\n| 日期  | object  | -        |\n| 今值  | float64 | 注意单位: 万桶 |\n| 预测值 | float64 | 注意单位: 万桶 |\n| 前值  | float64 | 注意单位: 万桶 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_api_crude_stock_df = ak.macro_usa_api_crude_stock()\nprint(macro_usa_api_crude_stock_df)\n```\n\n数据示例\n\n```\n            商品          日期     今值    预测值     前值\n0    美国API原油库存  2012-03-28  360.0  277.0 -137.0\n1    美国API原油库存  2012-04-04  785.0  221.0  360.0\n2    美国API原油库存  2012-04-11  658.0  208.0  785.0\n3    美国API原油库存  2012-04-18  341.0  157.0  658.0\n4    美国API原油库存  2012-04-25  -99.0  293.0  341.0\n..         ...         ...    ...    ...    ...\n624  美国API原油库存  2024-03-13 -552.1   40.0   42.3\n625  美国API原油库存  2024-03-20 -151.9    7.7 -552.1\n626  美国API原油库存  2024-03-27  933.7    NaN -151.9\n627  美国API原油库存  2024-04-03 -228.6 -200.0  933.7\n628  美国API原油库存  2024-04-10    NaN    NaN -228.6\n[629 rows x 5 columns]\n```\n\n###### 美国Markit制造业PMI初值报告\n\n接口: macro_usa_pmi\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_pmi\n\n描述: 美国 Markit 制造业 PMI 初值报告, 数据区间从 20120601-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型   | 描述 |\n|----|------|----|\n| -  | -  - |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 商品  | object  | -  |\n| 日期  | object  | -  |\n| 今值  | float64 | -  |\n| 预测值 | float64 | -  |\n| 前值  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_pmi_df = ak.macro_usa_pmi()\nprint(macro_usa_pmi_df)\n```\n\n数据示例\n\n```\n                   商品          日期    今值   预测值    前值\n0    美国Markit制造业PMI报告  2012-06-01  54.0   NaN  53.9\n1    美国Markit制造业PMI报告  2012-07-02  52.5  53.0  52.9\n2    美国Markit制造业PMI报告  2012-07-24  51.8  52.1  52.5\n3    美国Markit制造业PMI报告  2012-08-01  51.4  51.9  51.8\n4    美国Markit制造业PMI报告  2012-08-23  51.9  51.3  51.4\n..                ...         ...   ...   ...   ...\n280  美国Markit制造业PMI报告  2024-02-22  51.5  50.5  50.7\n281  美国Markit制造业PMI报告  2024-03-01  52.2  51.5  50.7\n282  美国Markit制造业PMI报告  2024-03-21  52.5  51.8  52.2\n283  美国Markit制造业PMI报告  2024-04-01  51.9  52.5  52.2\n284  美国Markit制造业PMI报告  2024-04-23   NaN   NaN  51.9\n[285 rows x 5 columns]\n```\n\n###### 美国ISM制造业PMI报告\n\n接口: macro_usa_ism_pmi\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_ism_pmi\n\n描述: 美国 ISM 制造业 PMI 报告, 数据区间从 19700101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 商品  | object  | -  |\n| 日期  | object  | -  |\n| 今值  | float64 | -  |\n| 预测值 | float64 | -  |\n| 前值  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_ism_pmi_df = ak.macro_usa_ism_pmi()\nprint(macro_usa_ism_pmi_df)\n```\n\n数据示例\n\n```\n                商品          日期    今值   预测值    前值\n0    美国ISM制造业PMI报告  1970-01-01  52.0   NaN   NaN\n1    美国ISM制造业PMI报告  1970-02-01  48.7   NaN  52.0\n2    美国ISM制造业PMI报告  1970-03-01  47.4   NaN  48.7\n3    美国ISM制造业PMI报告  1970-04-01  46.9   NaN  47.4\n4    美国ISM制造业PMI报告  1970-05-01  45.0   NaN  46.9\n..             ...         ...   ...   ...   ...\n648  美国ISM制造业PMI报告  2023-12-01  46.7  47.6  46.7\n649  美国ISM制造业PMI报告  2024-01-03  47.4  47.1  46.7\n650  美国ISM制造业PMI报告  2024-02-01  49.1  47.2  47.1\n651  美国ISM制造业PMI报告  2024-03-01  47.8  49.5  49.1\n652  美国ISM制造业PMI报告  2024-04-01  50.3  48.5  47.8\n[653 rows x 5 columns]\n```\n\n##### 工业\n\n###### 美国工业产出月率报告\n\n接口: macro_usa_industrial_production\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_industrial_production\n\n描述: 美国工业产出月率报告, 数据区间从 19700101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_industrial_production_df = ak.macro_usa_industrial_production()\nprint(macro_usa_industrial_production_df)\n```\n\n数据示例\n\n```\n             商品          日期   今值  预测值   前值\n0    美国工业产出月率报告  1970-01-01 -0.3  NaN  NaN\n1    美国工业产出月率报告  1970-02-01 -1.9  NaN -0.3\n2    美国工业产出月率报告  1970-03-01 -0.1  NaN -1.9\n3    美国工业产出月率报告  1970-04-01 -0.1  NaN -0.1\n4    美国工业产出月率报告  1970-05-01 -0.3  NaN -0.1\n..          ...         ...  ...  ...  ...\n647  美国工业产出月率报告  2023-12-15  0.2  0.3 -0.9\n648  美国工业产出月率报告  2024-01-17  0.1  0.0  0.0\n649  美国工业产出月率报告  2024-02-15 -0.1  0.2  0.1\n650  美国工业产出月率报告  2024-03-15  0.1  0.0 -0.5\n651  美国工业产出月率报告  2024-04-16  NaN  NaN  0.1\n[652 rows x 5 columns]\n```\n\n###### 美国耐用品订单月率报告\n\n接口: macro_usa_durable_goods_orders\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_durable_goods_orders\n\n描述: 美国耐用品订单月率报告, 数据区间从 20080227-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_durable_goods_orders_df = ak.macro_usa_durable_goods_orders()\nprint(macro_usa_durable_goods_orders_df)\n```\n\n数据示例\n\n```\n              商品          日期   今值  预测值   前值\n0    美国耐用品订单月率报告  2008-02-27 -5.3 -4.0  5.0\n1    美国耐用品订单月率报告  2008-03-26 -1.7  0.8 -5.3\n2    美国耐用品订单月率报告  2008-04-24 -0.3  0.0 -1.1\n3    美国耐用品订单月率报告  2008-05-28 -0.5 -1.5 -0.3\n4    美国耐用品订单月率报告  2008-06-25  0.0  0.0 -0.6\n..           ...         ...  ...  ...  ...\n198  美国耐用品订单月率报告  2023-12-22  5.4  1.7 -5.1\n199  美国耐用品订单月率报告  2024-01-25  0.0  1.1  5.5\n200  美国耐用品订单月率报告  2024-02-27 -6.1 -4.9 -0.3\n201  美国耐用品订单月率报告  2024-03-26  1.4  1.2 -6.9\n202  美国耐用品订单月率报告  2024-04-24  NaN  NaN  1.3\n[203 rows x 5 columns]\n```\n\n###### 美国工厂订单月率报告\n\n接口: macro_usa_factory_orders\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_factory_orders\n\n描述: 美国工厂订单月率报告, 数据区间从 19920401-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_factory_orders_df = ak.macro_usa_factory_orders()\nprint(macro_usa_factory_orders_df)\n```\n\n数据示例\n\n```\n             商品          日期   今值  预测值   前值\n0    美国工厂订单月率报告  1992-04-01  4.6  NaN  NaN\n1    美国工厂订单月率报告  1992-05-01  1.9  NaN  4.6\n2    美国工厂订单月率报告  1992-06-01  1.6  NaN  1.9\n3    美国工厂订单月率报告  1992-07-01 -0.5  NaN  1.6\n4    美国工厂订单月率报告  1992-08-01 -0.9  NaN -0.5\n..          ...         ...  ...  ...  ...\n381  美国工厂订单月率报告  2023-12-04 -3.6 -2.8  2.3\n382  美国工厂订单月率报告  2024-01-05  2.6  2.1 -3.4\n383  美国工厂订单月率报告  2024-02-02  0.2  0.3  2.6\n384  美国工厂订单月率报告  2024-03-05 -3.6 -3.1 -0.3\n385  美国工厂订单月率报告  2024-04-02  1.4  1.1 -3.8\n[386 rows x 5 columns]\n```\n\n##### 服务业\n\n###### 美国Markit服务业PMI初值报告\n\n接口: macro_usa_services_pmi\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_services_pmi\n\n描述: 美国Markit服务业PMI初值报告, 数据区间从 20120701-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 商品  | object  | -  |\n| 日期  | object  | -  |\n| 今值  | float64 | -  |\n| 预测值 | float64 | -  |\n| 前值  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_services_pmi_df = ak.macro_usa_services_pmi()\nprint(macro_usa_services_pmi_df)\n```\n\n数据示例\n\n```\n                     商品          日期    今值   预测值    前值\n0    美国Markit服务业PMI初值报告  2012-07-01  53.2   NaN   NaN\n1    美国Markit服务业PMI初值报告  2012-08-01  51.2   NaN  53.2\n2    美国Markit服务业PMI初值报告  2012-09-01  52.0   NaN  51.2\n3    美国Markit服务业PMI初值报告  2012-10-01  50.7   NaN  52.0\n4    美国Markit服务业PMI初值报告  2012-11-01  52.7   NaN  50.7\n..                  ...         ...   ...   ...   ...\n262  美国Markit服务业PMI初值报告  2024-02-22  51.3  52.4  52.5\n263  美国Markit服务业PMI初值报告  2024-03-05  52.3  51.3  52.5\n264  美国Markit服务业PMI初值报告  2024-03-21  51.7  52.0  52.3\n265  美国Markit服务业PMI初值报告  2024-04-03  51.7  51.7  52.3\n266  美国Markit服务业PMI初值报告  2024-04-23   NaN   NaN  51.7\n[267 rows x 5 columns]\n```\n\n###### 美国商业库存月率报告\n\n接口: macro_usa_business_inventories\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_business_inventories\n\n描述: 美国商业库存月率报告, 数据区间从 19920301-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_business_inventories_df = ak.macro_usa_business_inventories()\nprint(macro_usa_business_inventories_df)\n```\n\n数据示例\n\n```\n             商品          日期   今值  预测值   前值\n0    美国商业库存月率报告  1992-03-01  0.2  NaN  NaN\n1    美国商业库存月率报告  1992-04-01  0.4  NaN  0.2\n2    美国商业库存月率报告  1992-05-01  0.3  NaN  0.4\n3    美国商业库存月率报告  1992-06-01 -0.1  NaN  0.3\n4    美国商业库存月率报告  1992-07-01  0.7  NaN -0.1\n..          ...         ...  ...  ...  ...\n381  美国商业库存月率报告  2023-12-14 -0.1  0.0  0.2\n382  美国商业库存月率报告  2024-01-17 -0.1 -0.1 -0.1\n383  美国商业库存月率报告  2024-02-15  0.4  0.4 -0.1\n384  美国商业库存月率报告  2024-03-14  0.0  0.2  0.3\n385  美国商业库存月率报告  2024-04-15  NaN  NaN  0.3\n[386 rows x 5 columns]\n```\n\n###### 美国ISM非制造业PMI报告\n\n接口: macro_usa_ism_non_pmi\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_ism_non_pmi\n\n描述: 美国 ISM 非制造业 PMI 报告, 数据区间从 19970801-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 商品  | object  | -  |\n| 日期  | object  | -  |\n| 今值  | float64 | -  |\n| 预测值 | float64 | -  |\n| 前值  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_ism_non_pmi_df = ak.macro_usa_ism_non_pmi()\nprint(macro_usa_ism_non_pmi_df)\n```\n\n数据示例\n\n```\n                 商品          日期    今值   预测值    前值\n0    美国ISM非制造业PMI报告  1997-08-01  56.7   NaN   NaN\n1    美国ISM非制造业PMI报告  1997-09-01  62.0   NaN  56.7\n2    美国ISM非制造业PMI报告  1997-10-01  56.2   NaN  62.0\n3    美国ISM非制造业PMI报告  1997-11-01  56.6   NaN  56.2\n4    美国ISM非制造业PMI报告  1997-12-01  58.5   NaN  56.6\n..              ...         ...   ...   ...   ...\n319  美国ISM非制造业PMI报告  2023-12-05  52.7  52.0  51.8\n320  美国ISM非制造业PMI报告  2024-01-05  50.6  52.6  52.7\n321  美国ISM非制造业PMI报告  2024-02-05  53.4  52.0  50.5\n322  美国ISM非制造业PMI报告  2024-03-05  52.6  53.0  53.4\n323  美国ISM非制造业PMI报告  2024-04-03  51.4  52.8  52.6\n[324 rows x 5 columns]\n```\n\n##### 房地产\n\n###### 美国NAHB房产市场指数报告\n\n接口: macro_usa_nahb_house_market_index\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_nahb_house_market_index\n\n描述: 美国 NAHB 房产市场指数报告, 数据区间从 19850201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 商品  | object  | -  |\n| 日期  | object  | -  |\n| 今值  | float64 | -  |\n| 预测值 | float64 | -  |\n| 前值  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_nahb_house_market_index_df = ak.macro_usa_nahb_house_market_index()\nprint(macro_usa_nahb_house_market_index_df)\n```\n\n数据示例\n\n```\n                 商品          日期    今值   预测值    前值\n0    美国NAHB房产市场指数报告  1985-02-01  50.0   NaN   NaN\n1    美国NAHB房产市场指数报告  1985-03-01  58.0   NaN  50.0\n2    美国NAHB房产市场指数报告  1985-04-01  54.0   NaN  58.0\n3    美国NAHB房产市场指数报告  1985-05-01  49.0   NaN  54.0\n4    美国NAHB房产市场指数报告  1985-06-01  51.0   NaN  49.0\n..              ...         ...   ...   ...   ...\n467  美国NAHB房产市场指数报告  2023-12-18  37.0  36.0  34.0\n468  美国NAHB房产市场指数报告  2024-01-17  44.0  39.0  37.0\n469  美国NAHB房产市场指数报告  2024-02-15  48.0  46.0  44.0\n470  美国NAHB房产市场指数报告  2024-03-18  51.0  48.0  48.0\n471  美国NAHB房产市场指数报告  2024-04-15   NaN   NaN  51.0\n[472 rows x 5 columns]\n```\n\n###### 美国新屋开工总数年化报告\n\n接口: macro_usa_house_starts\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_house_starts\n\n描述: 美国新屋开工总数年化报告, 数据区间从 19700101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 商品  | object  | -        |\n| 日期  | object  | -        |\n| 今值  | float64 | 注意单位: 万户 |\n| 预测值 | float64 | 注意单位: 万户 |\n| 前值  | float64 | 注意单位: 万户 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_house_starts_df = ak.macro_usa_house_starts()\nprint(macro_usa_house_starts_df)\n```\n\n数据示例\n\n```\n               商品          日期     今值    预测值     前值\n0    美国新屋开工总数年化报告  1970-01-01  133.0    NaN    NaN\n1    美国新屋开工总数年化报告  1970-02-01  109.0    NaN  133.0\n2    美国新屋开工总数年化报告  1970-03-01  131.0    NaN  109.0\n3    美国新屋开工总数年化报告  1970-04-01  132.0    NaN  131.0\n4    美国新屋开工总数年化报告  1970-05-01  126.0    NaN  132.0\n..            ...         ...    ...    ...    ...\n645  美国新屋开工总数年化报告  2023-12-19  156.0  136.0  135.9\n646  美国新屋开工总数年化报告  2024-01-18  146.0  142.6  152.5\n647  美国新屋开工总数年化报告  2024-02-16  133.1  145.0  156.2\n648  美国新屋开工总数年化报告  2024-03-19  152.1  143.0  137.4\n649  美国新屋开工总数年化报告  2024-04-16    NaN    NaN  152.1\n[650 rows x 5 columns]\n```\n\n###### 美国新屋销售总数年化报告\n\n接口: macro_usa_new_home_sales\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_new_home_sales\n\n描述: 美国新屋销售总数年化报告, 数据区间从 19700101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 商品  | object  | -        |\n| 日期  | object  | -        |\n| 今值  | float64 | 注意单位: 万户 |\n| 预测值 | float64 | 注意单位: 万户 |\n| 前值  | float64 | 注意单位: 万户 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_new_home_sales_df = ak.macro_usa_new_home_sales()\nprint(macro_usa_new_home_sales_df)\n```\n\n数据示例\n\n```\n               商品          日期    今值   预测值    前值\n0    美国新屋销售总数年化报告  1970-01-01  45.2   NaN   NaN\n1    美国新屋销售总数年化报告  1970-02-01  46.1   NaN  45.2\n2    美国新屋销售总数年化报告  1970-03-01  37.3   NaN  46.1\n3    美国新屋销售总数年化报告  1970-04-01  38.9   NaN  37.3\n4    美国新屋销售总数年化报告  1970-05-01  44.5   NaN  38.9\n..            ...         ...   ...   ...   ...\n646  美国新屋销售总数年化报告  2023-12-22  59.0  69.5  67.2\n647  美国新屋销售总数年化报告  2024-01-25  66.4  64.5  61.5\n648  美国新屋销售总数年化报告  2024-02-26  66.1  68.0  65.1\n649  美国新屋销售总数年化报告  2024-03-25  66.2  67.5  66.4\n650  美国新屋销售总数年化报告  2024-04-23   NaN   NaN  66.2\n[651 rows x 5 columns]\n```\n\n###### 美国营建许可总数报告\n\n接口: macro_usa_building_permits\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_building_permits\n\n描述: 美国营建许可总数报告, 数据区间从 20080220-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 商品  | object  | -        |\n| 日期  | object  | -        |\n| 今值  | float64 | 注意单位: 万户 |\n| 预测值 | float64 | 注意单位: 万户 |\n| 前值  | float64 | 注意单位: 万户 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_building_permits_df = ak.macro_usa_building_permits()\nprint(macro_usa_building_permits_df)\n```\n\n数据示例\n\n```\n             商品          日期     今值    预测值     前值\n0    美国营建许可总数报告  2008-02-20  105.0  105.0  107.0\n1    美国营建许可总数报告  2008-03-18   98.0  105.0  106.0\n2    美国营建许可总数报告  2008-04-16   93.0   97.0   98.0\n3    美国营建许可总数报告  2008-05-16   98.0   92.0   93.0\n4    美国营建许可总数报告  2008-06-17   97.0   96.0   98.0\n..          ...         ...    ...    ...    ...\n206  美国营建许可总数报告  2024-02-16  147.0  150.9  149.3\n207  美国营建许可总数报告  2024-02-26  148.9  147.0  149.3\n208  美国营建许可总数报告  2024-03-19  151.8  150.0  148.9\n209  美国营建许可总数报告  2024-03-25  152.4  151.8  148.9\n210  美国营建许可总数报告  2024-04-16    NaN    NaN  152.4\n[211 rows x 5 columns]\n```\n\n###### 美国成屋销售总数年化报告\n\n接口: macro_usa_exist_home_sales\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_exist_home_sales\n\n描述: 美国成屋销售总数年化报告, 数据区间从 19700101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 商品  | object  | -        |\n| 日期  | object  | -        |\n| 今值  | float64 | 注意单位: 万户 |\n| 预测值 | float64 | 注意单位: 万户 |\n| 前值  | float64 | 注意单位: 万户 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_exist_home_sales_df = ak.macro_usa_exist_home_sales()\nprint(macro_usa_exist_home_sales_df)\n```\n\n数据示例\n\n```\n               商品          日期     今值    预测值     前值\n0    美国成屋销售总数年化报告  1970-01-01  160.0    NaN    NaN\n1    美国成屋销售总数年化报告  1970-02-01  153.0    NaN  160.0\n2    美国成屋销售总数年化报告  1970-03-01  146.0    NaN  153.0\n3    美国成屋销售总数年化报告  1970-04-01  137.0    NaN  146.0\n4    美国成屋销售总数年化报告  1970-05-01  151.0    NaN  137.0\n..            ...         ...    ...    ...    ...\n647  美国成屋销售总数年化报告  2023-12-20  382.0  378.0  379.0\n648  美国成屋销售总数年化报告  2024-01-19  378.0  382.0  382.0\n649  美国成屋销售总数年化报告  2024-02-22  400.0  396.0  388.0\n650  美国成屋销售总数年化报告  2024-03-21  438.0  395.0  400.0\n651  美国成屋销售总数年化报告  2024-04-18    NaN    NaN  438.0\n[652 rows x 5 columns]\n```\n\n###### 美国FHFA房价指数月率报告\n\n接口: macro_usa_house_price_index\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_house_price_index\n\n描述: 美国 FHFA 房价指数月率报告, 数据区间从 19910301-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_house_price_index_df = ak.macro_usa_house_price_index()\nprint(macro_usa_house_price_index_df)\n```\n\n数据示例\n\n```\n                 商品          日期   今值  预测值   前值\n0    美国FHFA房价指数月率报告  1991-03-01  0.5  NaN  NaN\n1    美国FHFA房价指数月率报告  1991-04-01  0.0  NaN  0.5\n2    美国FHFA房价指数月率报告  1991-05-01 -0.2  NaN  0.0\n3    美国FHFA房价指数月率报告  1991-06-01  0.1  NaN -0.2\n4    美国FHFA房价指数月率报告  1991-07-01  0.1  NaN  0.1\n..              ...         ...  ...  ...  ...\n392  美国FHFA房价指数月率报告  2023-11-28  0.6  0.4  0.7\n393  美国FHFA房价指数月率报告  2023-12-26  0.3  0.5  0.7\n394  美国FHFA房价指数月率报告  2024-01-30  0.3  0.2  0.3\n395  美国FHFA房价指数月率报告  2024-02-27  0.1  0.3  0.4\n396  美国FHFA房价指数月率报告  2024-03-26 -0.1  0.2  0.1\n[397 rows x 5 columns]\n```\n\n###### 美国S&P/CS20座大城市房价指数年率报告\n\n接口: macro_usa_spcs20\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_spcs20\n\n描述: 美国S&P/CS20座大城市房价指数年率报告, 数据区间从 20010201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_spcs20_df = ak.macro_usa_spcs20()\nprint(macro_usa_spcs20_df)\n```\n\n数据示例\n\n```\n                       商品          日期    今值  预测值    前值\n0    美国S&P/CS20座大城市房价指数年率  2001-02-01  12.4  NaN   NaN\n1    美国S&P/CS20座大城市房价指数年率  2001-03-01  12.2  NaN  12.4\n2    美国S&P/CS20座大城市房价指数年率  2001-04-01  12.0  NaN  12.2\n3    美国S&P/CS20座大城市房价指数年率  2001-05-01  11.4  NaN  12.0\n4    美国S&P/CS20座大城市房价指数年率  2001-06-01  10.5  NaN  11.4\n..                    ...         ...   ...  ...   ...\n275  美国S&P/CS20座大城市房价指数年率  2023-11-28   3.9  4.0   2.1\n276  美国S&P/CS20座大城市房价指数年率  2023-12-26   4.9  5.0   3.9\n277  美国S&P/CS20座大城市房价指数年率  2024-01-30   5.4  5.8   4.9\n278  美国S&P/CS20座大城市房价指数年率  2024-02-27   6.1  6.0   5.4\n279  美国S&P/CS20座大城市房价指数年率  2024-03-26   6.6  6.6   6.2\n[280 rows x 5 columns]\n```\n\n###### 美国成屋签约销售指数月率报告\n\n接口: macro_usa_pending_home_sales\n\n目标地址: https://datacenter.jin10.com/reportType/dc_usa_pending_home_sales\n\n描述: 美国成屋签约销售指数月率报告, 数据区间从 20010301-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_pending_home_sales_df = ak.macro_usa_pending_home_sales()\nprint(macro_usa_pending_home_sales_df)\n```\n\n数据示例\n\n```\n                 商品          日期   今值  预测值   前值\n0    美国成屋签约销售指数月率报告  2001-03-01  5.1  NaN  NaN\n1    美国成屋签约销售指数月率报告  2001-04-01 -4.7  NaN  5.1\n2    美国成屋签约销售指数月率报告  2001-05-01 -2.9  NaN -4.7\n3    美国成屋签约销售指数月率报告  2001-06-01  2.7  NaN -2.9\n4    美国成屋签约销售指数月率报告  2001-07-01 -3.4  NaN  2.7\n..              ...         ...  ...  ...  ...\n274  美国成屋签约销售指数月率报告  2023-12-28  0.0  1.0 -1.2\n275  美国成屋签约销售指数月率报告  2024-01-26  8.3  1.5  0.0\n276  美国成屋签约销售指数月率报告  2024-02-29 -4.9  1.4  5.7\n277  美国成屋签约销售指数月率报告  2024-03-28  1.6  1.4 -4.7\n278  美国成屋签约销售指数月率报告  2024-04-25  NaN  NaN  1.6\n[279 rows x 5 columns]\n```\n\n#### 领先指标\n\n##### 未决房屋销售月率\n\n接口: macro_usa_phs\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_0_5.html\n\n描述: 东方财富-经济数据一览-美国-未决房屋销售月率, 数据区间从 20080201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_phs_df = ak.macro_usa_phs()\nprint(macro_usa_phs_df)\n```\n\n数据示例\n\n```\n      时间   前值   现值        发布日期\n0    2022年10月 -1.5 -5.9  2022-11-18\n1    2022年09月 -0.4 -1.5  2022-10-20\n2    2022年08月 -5.9 -0.4  2022-09-21\n3    2022年07月 -5.4 -5.9  2022-08-18\n4    2022年06月 -3.4 -5.4  2022-07-20\n..        ...  ...  ...         ...\n166  2008年07月  5.3 -3.2  2008-08-28\n167  2008年06月 -4.7  5.3  2008-07-29\n168  2008年05月  6.3 -4.7  2008-06-28\n169  2008年04月  0.0  6.3  2008-05-29\n170  2008年01月 -1.5  0.0  2008-02-28\n```\n\n##### 美国谘商会消费者信心指数报告\n\n接口: macro_usa_cb_consumer_confidence\n\n目标地址: https://cdn.jin10.com/dc/reports/dc_usa_cb_consumer_confidence_all.js?v=1578576859\n\n描述: 美国谘商会消费者信心指数报告, 数据区间从 19700101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 商品  | object  | -  |\n| 日期  | object  | -  |\n| 今值  | float64 | -  |\n| 预测值 | float64 | -  |\n| 前值  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_cb_consumer_confidence_df = ak.macro_usa_cb_consumer_confidence()\nprint(macro_usa_cb_consumer_confidence_df)\n```\n\n数据示例\n\n```\n               商品          日期     今值    预测值     前值\n0    美国谘商会消费者信心指数  1970-01-01  126.0    NaN    NaN\n1    美国谘商会消费者信心指数  1970-02-01  126.0    NaN  126.0\n2    美国谘商会消费者信心指数  1970-03-01  101.7    NaN  126.0\n3    美国谘商会消费者信心指数  1970-04-01  101.7    NaN  101.7\n4    美国谘商会消费者信心指数  1970-05-01   98.0    NaN  101.7\n..            ...         ...    ...    ...    ...\n650  美国谘商会消费者信心指数  2023-11-28  102.0  101.0   99.1\n651  美国谘商会消费者信心指数  2023-12-20  110.7  103.8  101.0\n652  美国谘商会消费者信心指数  2024-01-30  114.8  114.2  108.0\n653  美国谘商会消费者信心指数  2024-02-27  106.7  114.8  110.9\n654  美国谘商会消费者信心指数  2024-03-26  104.7  106.9  104.8\n[655 rows x 5 columns]\n```\n\n##### 美国NFIB小型企业信心指数报告\n\n接口: macro_usa_nfib_small_business\n\n目标地址: https://cdn.jin10.com/dc/reports/dc_usa_nfib_small_business_all.js?v=1578576631\n\n描述: 美国NFIB小型企业信心指数报告, 数据区间从 19750201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 商品  | object  | -  |\n| 日期  | object  | -  |\n| 今值  | float64 | -  |\n| 预测值 | float64 | -  |\n| 前值  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_nfib_small_business_df = ak.macro_usa_nfib_small_business()\nprint(macro_usa_nfib_small_business_df)\n```\n\n数据示例\n\n```\n                   商品          日期      今值   预测值      前值\n0    美国NFIB小型企业信心指数报告  1975-02-01   86.67   NaN     NaN\n1    美国NFIB小型企业信心指数报告  1975-05-01   95.16   NaN   86.67\n2    美国NFIB小型企业信心指数报告  1975-08-01   99.36   NaN   95.16\n3    美国NFIB小型企业信心指数报告  1975-11-01  100.37   NaN   99.36\n4    美国NFIB小型企业信心指数报告  1976-02-01  102.01   NaN  100.37\n..                ...         ...     ...   ...     ...\n501  美国NFIB小型企业信心指数报告  2023-12-12   90.60  90.7   90.70\n502  美国NFIB小型企业信心指数报告  2024-01-09   91.90  90.7   90.60\n503  美国NFIB小型企业信心指数报告  2024-02-13   89.90  92.3   91.90\n504  美国NFIB小型企业信心指数报告  2024-03-12   89.40  90.5   89.90\n505  美国NFIB小型企业信心指数报告  2024-04-09     NaN   NaN   89.40\n[506 rows x 5 columns]\n```\n\n##### 美国密歇根大学消费者信心指数初值报告\n\n接口: macro_usa_michigan_consumer_sentiment\n\n目标地址: https://cdn.jin10.com/dc/reports/dc_usa_michigan_consumer_sentiment_all.js?v=1578576228\n\n描述: 美国密歇根大学消费者信心指数初值报告, 数据区间从 19700301-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 商品  | object  | -  |\n| 日期  | object  | -  |\n| 今值  | float64 | -  |\n| 预测值 | float64 | -  |\n| 前值  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_michigan_consumer_sentiment_df = ak.macro_usa_michigan_consumer_sentiment()\nprint(macro_usa_michigan_consumer_sentiment_df)\n```\n\n数据示例\n\n```\n                     商品          日期    今值   预测值    前值\n0    美国密歇根大学消费者信心指数初值报告  1970-03-01  78.1   NaN   NaN\n1    美国密歇根大学消费者信心指数初值报告  1970-06-01  75.4   NaN  78.1\n2    美国密歇根大学消费者信心指数初值报告  1970-09-01  77.6   NaN  75.4\n3    美国密歇根大学消费者信心指数初值报告  1970-12-01  72.4   NaN  77.6\n4    美国密歇根大学消费者信心指数初值报告  1971-03-01  78.1   NaN  72.4\n..                  ...         ...   ...   ...   ...\n772  美国密歇根大学消费者信心指数初值报告  2024-02-16  79.6  80.0  79.0\n773  美国密歇根大学消费者信心指数初值报告  2024-03-01  76.9  79.6  79.0\n774  美国密歇根大学消费者信心指数初值报告  2024-03-15  76.5  77.1  76.9\n775  美国密歇根大学消费者信心指数初值报告  2024-03-28  79.4  76.5  76.9\n776  美国密歇根大学消费者信心指数初值报告  2024-04-12   NaN   NaN  79.4\n[777 rows x 5 columns]\n```\n\n#### 其他\n\n##### 美国EIA原油库存报告\n\n接口: macro_usa_eia_crude_rate\n\n目标地址: https://cdn.jin10.com/dc/reports/dc_usa_michigan_consumer_sentiment_all.js?v=1578576228\n\n描述: 美国EIA原油库存报告, 数据区间从 19950801-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 商品  | object  | -        |\n| 日期  | object  | -        |\n| 今值  | float64 | 注意单位: 万桶 |\n| 预测值 | float64 | 注意单位: 万桶 |\n| 前值  | float64 | 注意单位: 万桶 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_eia_crude_rate_df = ak.macro_usa_eia_crude_rate()\nprint(macro_usa_eia_crude_rate_df)\n```\n\n数据示例\n\n```\n             商品          日期     今值   预测值     前值\n0     美国EIA原油库存  1982-09-01 -263.0   NaN    NaN\n1     美国EIA原油库存  1982-10-01   -8.0   NaN -263.0\n2     美国EIA原油库存  1982-11-01  -41.0   NaN   -8.0\n3     美国EIA原油库存  1982-12-01  -88.0   NaN  -41.0\n4     美国EIA原油库存  1983-01-01   51.0   NaN  -88.0\n         ...         ...    ...   ...    ...\n1147  美国EIA原油库存  2024-03-13 -153.6  90.0  136.7\n1148  美国EIA原油库存  2024-03-20 -195.2 -90.0 -153.6\n1149  美国EIA原油库存  2024-03-27  316.5 -70.0 -195.2\n1150  美国EIA原油库存  2024-04-03  321.0 -30.0  316.5\n1151  美国EIA原油库存  2024-04-10    NaN   NaN  321.0\n[1152 rows x 5 columns]\n```\n\n##### 美国初请失业金人数报告\n\n接口: macro_usa_initial_jobless\n\n目标地址: https://cdn.jin10.com/dc/reports/dc_usa_michigan_consumer_sentiment_all.js?v=1578576228\n\n描述: 美国初请失业金人数报告, 数据区间从 19700101-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 商品  | object  | -        |\n| 日期  | object  | -        |\n| 今值  | float64 | 注意单位: 万人 |\n| 预测值 | float64 | 注意单位: 万人 |\n| 前值  | float64 | 注意单位: 万人 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_initial_jobless_df = ak.macro_usa_initial_jobless()\nprint(macro_usa_initial_jobless_df)\n```\n\n数据示例\n\n```\n             商品          日期      今值   预测值      前值\n0     美国初请失业金人数  1970-01-01  22.109   NaN     NaN\n1     美国初请失业金人数  1970-02-01  24.932   NaN  22.109\n2     美国初请失业金人数  1970-03-01  25.850   NaN  24.932\n3     美国初请失业金人数  1970-04-01  26.868   NaN  25.850\n4     美国初请失业金人数  1970-05-01  33.159   NaN  26.868\n         ...         ...     ...   ...     ...\n1293  美国初请失业金人数  2024-03-14  20.900  21.8  21.000\n1294  美国初请失业金人数  2024-03-21  21.000  21.2  21.200\n1295  美国初请失业金人数  2024-03-28  21.000  21.2  21.200\n1296  美国初请失业金人数  2024-04-04  22.100  21.3  21.200\n1297  美国初请失业金人数  2024-04-11     NaN   NaN  22.100\n[1298 rows x 5 columns]\n```\n\n##### 美国原油产量报告\n\n接口: macro_usa_crude_inner\n\n目标地址: https://datacenter.jin10.com/reportType/dc_eia_crude_oil_produce\n\n描述: 美国原油产量报告, 数据区间从 19830107-至今, 每周三公布(美国节假日除外), 美国能源信息署(EIA)\n\n限量: 单次返回所有历史数据\n\n1. 报告内容: 美国能源信息署（EIA）在北京时间每周三晚公布EIA报告，除了公布美国原油库存、汽油库存等数据外，报告还包含美国上周国内原油产量的数据。\n2. 报告组成：美国国内原油产量、美国本土48州原油产量和美国阿拉斯加州原油产量。\n3. 数据关系：美国国内原油产量=美国本土48州原油产量+美国阿拉斯加州原油产量 单位均为万桶/日。\n4. 数据解读: 该数据反映了美国原油供应侧的情况，理论而言，当美国国内原油产量录得增加，通常导致油价下跌；当产量减少，则通常导致油价上扬。\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称             | 类型      | 描述 |\n|----------------|---------|----|\n| 日期             | object  | -  |\n| 美国国内原油总量-产量    | float64 | -  |\n| 美国国内原油总量-变化    | float64 | -  |\n| 美国本土48州原油产量-产量 | float64 | -  |\n| 美国本土48州原油产量-变化 | float64 | -  |\n| 美国阿拉斯加州原油产量-产量 | float64 | -  |\n| 美国阿拉斯加州原油产量-变化 | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_crude_inner_df = ak.macro_usa_crude_inner()\nprint(macro_usa_crude_inner_df)\n```\n\n数据示例\n\n```\n       日期  美国国内原油总量-产量  ...  美国阿拉斯加州原油产量-产量  美国阿拉斯加州原油产量-变化\n0     1983-01-07        863.4  ...             0.0             NaN\n1     1983-01-14        863.4  ...             0.0             0.0\n2     1983-01-21        863.4  ...             0.0             0.0\n3     1983-01-28        863.4  ...             0.0             0.0\n4     1983-02-04        866.0  ...             0.0             0.0\n          ...          ...  ...             ...             ...\n2144  2024-03-01       1320.0  ...            43.6             0.4\n2145  2024-03-08       1310.0  ...            43.2            -0.4\n2146  2024-03-15       1310.0  ...            44.1             0.9\n2147  2024-03-22       1310.0  ...            43.2            -0.9\n2148  2024-03-29       1310.0  ...            43.2             0.0\n[2149 rows x 7 columns]\n```\n\n### 欧元区宏观\n\n#### 国民经济运行状况\n\n##### 经济状况\n\n###### 欧元区季度GDP年率报告\n\n接口: macro_euro_gdp_yoy\n\n目标地址: https://datacenter.jin10.com/reportType/dc_eurozone_gdp_yoy\n\n描述: 欧元区季度 GDP 年率报告, 数据区间从 20131114-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_gdp_yoy_df = ak.macro_euro_gdp_yoy()\nprint(macro_euro_gdp_yoy_df)\n```\n\n数据示例\n\n```\n             商品          日期   今值  预测值   前值\n0    欧元区季度GDP年率  2013-11-14 -0.4 -0.3 -0.5\n1    欧元区季度GDP年率  2013-12-04 -0.4 -0.4 -0.4\n2    欧元区季度GDP年率  2014-01-10 -0.3 -0.4 -0.4\n3    欧元区季度GDP年率  2014-02-14  0.5  0.4 -0.3\n4    欧元区季度GDP年率  2014-03-05  0.5  0.5  0.5\n..          ...         ...  ...  ...  ...\n97   欧元区季度GDP年率  2022-07-29  4.0  3.4  5.4\n98   欧元区季度GDP年率  2022-08-17  3.9  4.0  4.0\n99   欧元区季度GDP年率  2022-09-07  4.1  3.9  5.4\n100  欧元区季度GDP年率  2022-10-31  2.1  NaN  4.3\n101  欧元区季度GDP年率  2022-11-15  NaN  4.0  2.1\n```\n\n##### 物价水平\n\n###### 欧元区CPI月率报告\n\n接口: macro_euro_cpi_mom\n\n目标地址: https://datacenter.jin10.com/reportType/dc_eurozone_cpi_mom\n\n描述: 欧元区 CPI 月率报告, 数据区间从 19900301-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_cpi_mom_df = ak.macro_euro_cpi_mom()\nprint(macro_euro_cpi_mom_df)\n```\n\n数据示例\n\n```\n          商品          日期   今值  预测值   前值\n0    欧元区CPI月率  1990-03-01  0.4  NaN  NaN\n1    欧元区CPI月率  1990-04-01  0.2  NaN  0.4\n2    欧元区CPI月率  1990-05-01  0.4  NaN  0.2\n3    欧元区CPI月率  1990-06-01  0.2  NaN  0.4\n4    欧元区CPI月率  1990-07-01  0.1  NaN  0.2\n..        ...         ...  ...  ...  ...\n421  欧元区CPI月率  2022-09-16  0.6  0.5  0.1\n422  欧元区CPI月率  2022-09-30  1.2  0.9  0.6\n423  欧元区CPI月率  2022-10-19  1.2  1.2  0.6\n424  欧元区CPI月率  2022-10-31  1.5  NaN  1.2\n425  欧元区CPI月率  2022-11-17  NaN  1.2  1.2\n```\n\n###### 欧元区CPI年率报告\n\n接口: macro_euro_cpi_yoy\n\n目标地址: https://datacenter.jin10.com/reportType/dc_eurozone_cpi_yoy\n\n描述: 欧元区 CPI 年率报告, 数据区间从 19910201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_cpi_yoy_df = ak.macro_euro_cpi_yoy()\nprint(macro_euro_cpi_yoy_df)\n```\n\n数据示例\n\n```\n           商品          日期    今值   预测值    前值\n0    欧元区CPI年率  1991-02-01   0.0   NaN   NaN\n1    欧元区CPI年率  1991-03-01   4.1   NaN   3.9\n2    欧元区CPI年率  1991-04-01   3.9   NaN   4.1\n3    欧元区CPI年率  1991-05-01   3.9   NaN   3.9\n4    欧元区CPI年率  1991-06-01   4.1   NaN   3.9\n..        ...         ...   ...   ...   ...\n556  欧元区CPI年率  2022-09-16   9.1   9.1   9.1\n557  欧元区CPI年率  2022-09-30  10.0   9.7   9.1\n558  欧元区CPI年率  2022-10-19   9.9  10.0   9.1\n559  欧元区CPI年率  2022-10-31  10.7  10.2   9.9\n560  欧元区CPI年率  2022-11-17   NaN  10.0  10.7\n```\n\n###### 欧元区PPI月率报告\n\n接口: macro_euro_ppi_mom\n\n目标地址: https://datacenter.jin10.com/reportType/dc_eurozone_ppi_mom\n\n描述: 欧元区 PPI 月率报告, 数据区间从 19810301-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_ppi_mom_df = ak.macro_euro_ppi_mom()\nprint(macro_euro_ppi_mom_df)\n```\n\n数据示例\n\n```\n           商品          日期   今值  预测值   前值\n0    欧元区PPI月率  1981-03-01  1.0  NaN  NaN\n1    欧元区PPI月率  1981-04-01  0.7  NaN  1.0\n2    欧元区PPI月率  1981-05-01  1.5  NaN  0.7\n3    欧元区PPI月率  1981-06-01  0.7  NaN  1.5\n4    欧元区PPI月率  1981-07-01  0.6  NaN  0.7\n..        ...         ...  ...  ...  ...\n499  欧元区PPI月率  2022-07-04  0.7  1.0  1.2\n500  欧元区PPI月率  2022-08-03  1.1  1.0  0.5\n501  欧元区PPI月率  2022-09-02  4.0  2.5  1.3\n502  欧元区PPI月率  2022-10-04  5.0  4.9  4.0\n503  欧元区PPI月率  2022-11-04  NaN  1.7  5.0\n```\n\n###### 欧元区零售销售月率报告\n\n接口: macro_euro_retail_sales_mom\n\n目标地址: https://datacenter.jin10.com/reportType/dc_eurozone_retail_sales_mom\n\n描述: 欧元区零售销售月率报告, 数据区间从 20000301-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_retail_sales_mom_df = ak.macro_euro_retail_sales_mom()\nprint(macro_euro_retail_sales_mom_df)\n```\n\n数据示例\n\n```\n            商品          日期   今值  预测值   前值\n0    欧元区零售销售月率  2000-03-01  0.7  NaN  NaN\n1    欧元区零售销售月率  2000-04-01 -0.3  NaN  0.7\n2    欧元区零售销售月率  2000-05-01  0.7  NaN -0.3\n3    欧元区零售销售月率  2000-06-01  0.3  NaN  0.7\n4    欧元区零售销售月率  2000-07-01  0.1  NaN  0.3\n..         ...         ...  ...  ...  ...\n271  欧元区零售销售月率  2022-07-06  0.2  0.4 -1.4\n272  欧元区零售销售月率  2022-08-03 -1.2  0.1  0.4\n273  欧元区零售销售月率  2022-09-05  0.3  0.4 -1.0\n274  欧元区零售销售月率  2022-10-06 -0.3 -0.4 -0.4\n275  欧元区零售销售月率  2022-11-08  NaN -0.4 -0.3\n```\n\n##### 劳动力市场\n\n###### 欧元区季调后就业人数季率报告\n\n接口: macro_euro_employment_change_qoq\n\n目标地址: https://datacenter.jin10.com/reportType/dc_eurozone_employment_change_qoq\n\n描述: 欧元区季调后就业人数季率报告, 数据区间从 20083017-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_employment_change_qoq_df = ak.macro_euro_employment_change_qoq()\nprint(macro_euro_employment_change_qoq_df)\n```\n\n数据示例\n\n```\n              商品          日期   今值  预测值   前值\n0   欧元区季调后就业人数季率  2008-03-17  0.2  0.0  0.3\n1   欧元区季调后就业人数季率  2008-06-13  0.3  0.0  0.2\n2   欧元区季调后就业人数季率  2008-09-12  0.2  NaN  0.3\n3   欧元区季调后就业人数季率  2008-12-16 -0.1  NaN  0.2\n4   欧元区季调后就业人数季率  2009-03-16 -0.3  NaN -0.1\n..           ...         ...  ...  ...  ...\n70  欧元区季调后就业人数季率  2022-03-08  0.5  0.5  0.9\n71  欧元区季调后就业人数季率  2022-05-17  0.5  NaN  0.4\n72  欧元区季调后就业人数季率  2022-06-08  0.6  0.5  0.4\n73  欧元区季调后就业人数季率  2022-08-17  0.3  NaN  0.6\n74  欧元区季调后就业人数季率  2022-09-07  0.4  0.3  0.7\n```\n\n###### 欧元区失业率报告\n\n接口: macro_euro_unemployment_rate_mom\n\n目标地址: https://datacenter.jin10.com/reportType/dc_eurozone_unemployment_rate_mom\n\n描述: 欧元区失业率报告, 数据区间从 19980501-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_unemployment_rate_mom_df = ak.macro_euro_unemployment_rate_mom()\nprint(macro_euro_unemployment_rate_mom_df)\n```\n\n数据示例\n\n```\n         商品          日期    今值  预测值    前值\n0    欧元区失业率  1998-05-01  10.6  NaN   NaN\n1    欧元区失业率  1998-06-01  10.5  NaN  10.6\n2    欧元区失业率  1998-07-01  10.5  NaN  10.5\n3    欧元区失业率  1998-08-01  10.4  NaN  10.5\n4    欧元区失业率  1998-09-01  10.4  NaN  10.4\n..      ...         ...   ...  ...   ...\n290  欧元区失业率  2022-06-30   6.6  6.8   6.7\n291  欧元区失业率  2022-08-01   6.6  6.6   6.6\n292  欧元区失业率  2022-09-01   6.6  6.6   6.7\n293  欧元区失业率  2022-09-30   6.6  6.6   6.6\n294  欧元区失业率  2022-11-03   6.6  6.6   6.7\n```\n\n#### 贸易状况\n\n##### 欧元区未季调贸易帐报告\n\n接口: macro_euro_trade_balance\n\n目标地址: https://datacenter.jin10.com/reportType/dc_eurozone_trade_balance_mom\n\n描述: 欧元区未季调贸易帐报告, 数据区间从 19990201-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_trade_balance_df = ak.macro_euro_trade_balance()\nprint(macro_euro_trade_balance_df)\n```\n\n数据示例\n\n```\n            商品          日期     今值    预测值     前值\n0    欧元区未季调贸易帐  1999-02-01  -27.0    NaN    NaN\n1    欧元区未季调贸易帐  1999-03-01   19.0    NaN  -27.0\n2    欧元区未季调贸易帐  1999-04-01   27.0    NaN   19.0\n3    欧元区未季调贸易帐  1999-05-01   21.0    NaN   27.0\n4    欧元区未季调贸易帐  1999-06-01   -9.0    NaN   21.0\n..         ...         ...    ...    ...    ...\n281  欧元区未季调贸易帐  2022-07-15 -263.0    NaN -328.0\n282  欧元区未季调贸易帐  2022-08-16 -246.0 -200.0 -284.0\n283  欧元区未季调贸易帐  2022-09-15 -340.0 -200.0 -254.0\n284  欧元区未季调贸易帐  2022-10-14 -509.0    NaN -339.0\n285  欧元区未季调贸易帐  2022-11-15    NaN    NaN -509.0\n```\n\n##### 欧元区经常帐报告\n\n接口: macro_euro_current_account_mom\n\n目标地址: https://datacenter.jin10.com/reportType/dc_eurozone_current_account_mom\n\n描述: 欧元区经常帐报告, 数据区间从 20080221-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_current_account_mom_df = ak.macro_euro_current_account_mom()\nprint(macro_euro_current_account_mom_df)\n```\n\n数据示例\n\n```\n         商品          日期     今值    预测值     前值\n0    欧元区经常帐  1999-02-01 -150.0    NaN    NaN\n1    欧元区经常帐  2003-07-01   10.0    NaN    0.0\n2    欧元区经常帐  2008-02-21 -103.0    2.0    7.0\n3    欧元区经常帐  2008-03-26 -106.0    0.0 -103.0\n4    欧元区经常帐  2008-04-24   43.0    0.0 -106.0\n..      ...         ...    ...    ...    ...\n175  欧元区经常帐  2022-07-20  -45.0    NaN  -58.0\n176  欧元区经常帐  2022-08-19   42.0    NaN  -45.0\n177  欧元区经常帐  2022-09-20 -199.0   53.0   42.0\n178  欧元区经常帐  2022-10-20 -263.0 -203.0 -199.0\n179  欧元区经常帐  2022-11-22    NaN    NaN -263.0\n```\n\n#### 产业指标\n\n##### 欧元区工业产出月率报告\n\n接口: macro_euro_industrial_production_mom\n\n目标地址: https://datacenter.jin10.com/reportType/dc_eurozone_industrial_production_mom\n\n描述: 欧元区工业产出月率报告, 数据区间从 19910301-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_industrial_production_mom_df = ak.macro_euro_industrial_production_mom()\nprint(macro_euro_industrial_production_mom_df)\n```\n\n数据示例\n\n```\n            商品          日期   今值  预测值   前值\n0    欧元区工业产出月率  1991-03-01 -1.1  NaN  NaN\n1    欧元区工业产出月率  1991-04-01 -1.0  NaN -1.1\n2    欧元区工业产出月率  1991-05-01 -0.5  NaN -1.0\n3    欧元区工业产出月率  1991-06-01 -0.1  NaN -0.5\n4    欧元区工业产出月率  1991-07-01  1.9  NaN -0.1\n..         ...         ...  ...  ...  ...\n380  欧元区工业产出月率  2022-07-13  0.8  0.3  0.5\n381  欧元区工业产出月率  2022-08-12  0.7  0.2  2.1\n382  欧元区工业产出月率  2022-09-14 -2.3 -1.0  1.1\n383  欧元区工业产出月率  2022-10-12  1.5  0.6 -2.3\n384  欧元区工业产出月率  2022-11-14  NaN  NaN  1.5\n```\n\n##### 欧元区制造业PMI初值报告\n\n接口: macro_euro_manufacturing_pmi\n\n目标地址: https://datacenter.jin10.com/reportType/dc_eurozone_manufacturing_pmi\n\n描述: 欧元区制造业 PMI 初值报告, 数据区间从 20080222-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_manufacturing_pmi_df = ak.macro_euro_manufacturing_pmi()\nprint(macro_euro_manufacturing_pmi_df)\n```\n\n数据示例\n\n```\n              商品          日期    今值   预测值    前值\n0    欧元区制造业PMI初值  2008-02-22  52.3  52.5  52.8\n1    欧元区制造业PMI初值  2008-03-03  52.3  52.3  52.3\n2    欧元区制造业PMI初值  2008-03-20  52.0  52.0  52.3\n3    欧元区制造业PMI初值  2008-04-01  52.0  52.0  52.0\n4    欧元区制造业PMI初值  2008-04-23  51.8  51.6  52.0\n..           ...         ...   ...   ...   ...\n353  欧元区制造业PMI初值  2022-09-23  48.5  48.7  49.6\n354  欧元区制造业PMI初值  2022-10-03  48.4  48.5  49.6\n355  欧元区制造业PMI初值  2022-10-24  46.6  47.8  48.4\n356  欧元区制造业PMI初值  2022-11-02  46.4  46.6  48.4\n357  欧元区制造业PMI初值  2022-11-23   NaN   NaN  46.4\n```\n\n##### 欧元区服务业PMI终值报告\n\n接口: macro_euro_services_pmi\n\n目标地址: https://datacenter.jin10.com/reportType/dc_eurozone_services_pmi\n\n描述: 欧元区服务业 PMI 终值报告, 数据区间从 20080222-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_services_pmi_df = ak.macro_euro_services_pmi()\nprint(macro_euro_services_pmi_df)\n```\n\n数据示例\n\n```\n              商品          日期    今值   预测值    前值\n0    欧元区服务业PMI终值  2008-02-22  52.3  51.0  50.6\n1    欧元区服务业PMI终值  2008-03-05  52.3  52.3  52.3\n2    欧元区服务业PMI终值  2008-04-03  51.6   0.0  51.7\n3    欧元区服务业PMI终值  2008-04-23  51.8  51.4  51.6\n4    欧元区服务业PMI终值  2008-05-06  52.0  51.8  51.8\n..           ...         ...   ...   ...   ...\n351  欧元区服务业PMI终值  2022-09-23  48.9  49.0  49.8\n352  欧元区服务业PMI终值  2022-10-05  48.8  48.9  49.8\n353  欧元区服务业PMI终值  2022-10-24  48.2  48.2  48.8\n354  欧元区服务业PMI终值  2022-11-04   NaN  48.2  48.2\n355  欧元区服务业PMI终值  2022-11-23   NaN  48.2  48.8\n```\n\n#### 领先指标\n\n##### 欧元区ZEW经济景气指数报告\n\n接口: macro_euro_zew_economic_sentiment\n\n目标地址: https://datacenter.jin10.com/reportType/dc_eurozone_zew_economic_sentiment\n\n描述: 欧元区 ZEW 经济景气指数报告, 数据区间从 20080212-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_zew_economic_sentiment_df = ak.macro_euro_zew_economic_sentiment()\nprint(macro_euro_zew_economic_sentiment_df)\n```\n\n数据示例\n\n```\n               商品          日期    今值   预测值    前值\n0    欧元区ZEW经济景气指数  2008-02-12 -41.4 -43.0 -41.7\n1    欧元区ZEW经济景气指数  2008-03-11 -35.0 -42.0 -41.4\n2    欧元区ZEW经济景气指数  2008-04-15 -44.8 -33.0 -35.0\n3    欧元区ZEW经济景气指数  2008-05-20 -43.6 -44.2 -44.8\n4    欧元区ZEW经济景气指数  2008-06-17 -52.7 -43.9 -43.6\n..            ...         ...   ...   ...   ...\n174  欧元区ZEW经济景气指数  2022-07-12  51.1   NaN -28.0\n175  欧元区ZEW经济景气指数  2022-08-16 -54.9 -57.0 -51.1\n176  欧元区ZEW经济景气指数  2022-09-13 -60.7 -58.3 -54.9\n177  欧元区ZEW经济景气指数  2022-10-18 -59.7 -61.2 -60.7\n178  欧元区ZEW经济景气指数  2022-11-15   NaN   NaN -59.7\n```\n\n##### 欧元区Sentix投资者信心指数报告\n\n接口: macro_euro_sentix_investor_confidence\n\n目标地址: https://datacenter.jin10.com/reportType/dc_eurozone_sentix_investor_confidence\n\n描述: 欧元区 Sentix 投资者信心指数报告, 数据区间从 20020801-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 商品  | object  | -       |\n| 日期  | object  | -       |\n| 今值  | float64 | 注意单位: % |\n| 预测值 | float64 | 注意单位: % |\n| 前值  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_sentix_investor_confidence_df = ak.macro_euro_sentix_investor_confidence()\nprint(macro_euro_sentix_investor_confidence_df)\n```\n\n数据示例\n\n```\n                   商品          日期    今值   预测值    前值\n0    欧元区Sentix投资者信心指数  2002-08-01  13.0   NaN   NaN\n1    欧元区Sentix投资者信心指数  2002-10-01  -8.5   NaN  13.0\n2    欧元区Sentix投资者信心指数  2003-02-01 -21.8   NaN  -8.5\n3    欧元区Sentix投资者信心指数  2003-03-01 -22.8   NaN -21.8\n4    欧元区Sentix投资者信心指数  2003-04-01 -19.4   NaN -22.8\n..                ...         ...   ...   ...   ...\n239  欧元区Sentix投资者信心指数  2022-07-04 -26.4 -19.9 -15.8\n240  欧元区Sentix投资者信心指数  2022-08-08 -25.2 -24.7 -26.4\n241  欧元区Sentix投资者信心指数  2022-09-05 -31.8 -27.5 -25.2\n242  欧元区Sentix投资者信心指数  2022-10-10 -38.3 -34.7 -31.8\n243  欧元区Sentix投资者信心指数  2022-11-07   NaN -34.7 -38.3\n```\n\n### 德国宏观\n\n#### IFO商业景气指数\n\n接口: macro_germany_ifo\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_1_0.html\n\n描述: 东方财富-数据中心-经济数据一览-IFO商业景气指数\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_germany_ifo_df = ak.macro_germany_ifo()\nprint(macro_germany_ifo_df)\n```\n\n数据示例\n\n```\n       时间      前值    现值    发布日期\n0    2008年01月  98.3  97.9  2008-01-25\n1    2008年02月  97.9  97.8  2008-02-25\n2    2008年03月  97.8  97.9  2008-03-25\n3    2008年04月  97.9  97.1  2008-04-25\n4    2008年05月  97.1  96.6  2008-05-25\n..        ...   ...   ...         ...\n173  2022年06月  93.3  92.3  2022-06-24\n174  2022年07月  92.3  88.6  2022-07-25\n175  2022年08月  88.6  88.6  2022-08-25\n176  2022年09月  88.6  84.4  2022-09-26\n177  2022年10月  84.4  84.3  2022-10-25\n```\n\n#### 消费者物价指数月率终值\n\n接口: macro_germany_cpi_monthly\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_1_1.html\n\n描述: 东方财富-数据中心-经济数据一览-德国-消费者物价指数月率终值\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_germany_cpi_monthly_df = ak.macro_germany_cpi_monthly()\nprint(macro_germany_cpi_monthly_df)\n```\n\n数据示例\n\n```\n      时间   前值   现值        发布日期\n0    2008年01月  0.7 -0.4  2008-02-16\n1    2008年02月 -0.4  0.6  2008-03-18\n2    2008年03月  0.6  0.5  2008-04-16\n3    2008年04月  0.5 -0.3  2008-05-17\n4    2008年05月 -0.3  0.7  2008-06-16\n..        ...  ...  ...         ...\n171  2022年05月  0.7  1.1  2022-06-17\n172  2022年06月  1.1 -0.1  2022-07-19\n173  2022年07月 -0.1  0.8  2022-08-18\n174  2022年08月  0.8  0.4  2022-09-16\n175  2022年09月  0.4  2.2  2022-10-19\n```\n\n#### 消费者物价指数年率终值\n\n接口: macro_germany_cpi_yearly\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_1_2.html\n\n描述: 东方财富-数据中心-经济数据一览-德国-消费者物价指数年率终值\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_germany_cpi_yearly_df = ak.macro_germany_cpi_yearly()\nprint(macro_germany_cpi_yearly_df)\n```\n\n数据示例\n\n```\n     时间   前值    现值        发布日期\n0    2008年01月  3.1   2.9  2008-02-16\n1    2008年02月  2.9   3.0  2008-03-18\n2    2008年03月  3.0   3.3  2008-04-16\n3    2008年04月  3.3   2.6  2008-05-17\n4    2008年05月  2.6   3.1  2008-06-16\n..        ...  ...   ...         ...\n172  2022年05月  7.8   8.7  2022-06-17\n173  2022年06月  8.7   8.2  2022-07-19\n174  2022年07月  8.2   8.5  2022-08-18\n175  2022年08月  8.5   8.8  2022-09-16\n176  2022年09月  8.8  10.9  2022-10-19\n```\n\n#### 贸易帐-季调后\n\n接口: macro_germany_trade_adjusted\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_1_3.html\n\n描述: 东方财富-数据中心-经济数据一览-德国-贸易帐(季调后)\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_germany_trade_adjusted_df = ak.macro_germany_trade_adjusted()\nprint(macro_germany_trade_adjusted_df)\n```\n\n数据示例\n\n```\n      时间    前值    现值        发布日期\n0    2008年01月  15.5  17.2  2008-03-10\n1    2008年02月  17.2  16.3  2008-04-10\n2    2008年03月  16.3  16.8  2008-05-09\n3    2008年04月  16.8  16.8  2008-06-09\n4    2008年05月  16.8  15.3  2008-07-09\n..        ...   ...   ...         ...\n173  2022年06月   3.2   5.7  2022-08-03\n174  2022年07月   5.7   3.4  2022-09-02\n175  2022年08月   3.4   1.2  2022-10-05\n176  2022年09月   1.2   3.7  2022-11-02\n177  2022年10月   3.7   NaN  2022-12-02\n```\n\n#### GDP\n\n接口: macro_germany_gdp\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_1_4.html\n\n描述: 东方财富-数据中心-经济数据一览-德国-GDP\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_germany_gdp_df = ak.macro_germany_gdp()\nprint(macro_germany_gdp_df)\n```\n\n数据示例\n\n```\n      时间         前值         现值        发布日期\n0   2008第1季度   3.911156   2.891346  2008-05-27\n1   2008第2季度   2.891346   4.008347  2008-08-27\n2   2008第3季度   4.008347   1.783758  2008-11-27\n3   2008第4季度   1.783758  -1.075182  2009-02-26\n4   2009第1季度  -1.075182  -5.727010  2009-05-27\n5   2009第2季度  -5.727010  -6.526663  2009-08-27\n6   2009第3季度  -6.526663  -3.618978  2009-11-27\n7   2009第4季度  -3.618978  -0.203077  2010-02-26\n8   2010第1季度  -0.203077   3.679816  2010-05-27\n9   2010第2季度   3.679816   5.068024  2010-08-27\n10  2010第3季度   5.068024   4.369179  2010-11-27\n11  2010第4季度   4.369179   4.120271  2011-02-26\n12  2011第1季度   4.120271   5.333064  2011-05-27\n13  2011第2季度   5.333064   3.859840  2011-08-27\n14  2011第3季度   3.859840   3.531578  2011-11-27\n15  2011第4季度   3.531578   2.565706  2012-02-26\n16  2012第1季度   2.565706   2.984836  2012-05-27\n17  2012第2季度   2.984836   7.174241  2012-08-27\n18  2012第3季度   7.174241   1.725317  2012-11-27\n19  2012第4季度   1.725317   0.945122  2013-02-26\n20  2013第1季度   0.945122   5.768754  2013-05-27\n21  2013第2季度   5.768754   2.757222  2013-08-27\n22  2013第3季度   2.757222   7.362522  2013-11-27\n23  2013第4季度   7.362522   7.864693  2014-02-26\n24  2014第1季度   7.864693   4.547053  2014-05-27\n25  2014第2季度   4.547053   2.828708  2014-08-27\n26  2014第3季度   2.828708   2.900608  2014-11-27\n27  2014第4季度   2.900608   3.192026  2015-02-26\n28  2015第1季度   3.192026   2.961665  2015-05-27\n29  2015第2季度   2.961665   4.127740  2015-08-27\n30  2015第3季度   4.127740   4.167399  2015-11-27\n31  2015第4季度   4.167399   4.862430  2016-02-26\n32  2016第1季度   4.862430   3.862071  2016-05-27\n33  2016第2季度   3.862071   4.796750  2016-08-27\n34  2016第3季度   4.796750   2.448969  2016-11-27\n35  2016第4季度   2.448969   3.986182  2017-02-26\n36  2017第1季度   3.986182   4.704109  2017-05-26\n37  2017第2季度   4.704109   2.837963  2017-08-28\n38  2017第3季度   2.837963   4.431038  2017-11-23\n39  2017第4季度   4.431038   4.909609  2018-02-26\n40  2018第1季度   4.909609   3.089480  2018-05-29\n41  2018第2季度   3.089480   4.038992  2018-08-14\n42  2018第3季度   4.038992   2.223463  2018-11-26\n43  2018第4季度   2.223463   2.719435  2019-02-25\n44  2019第1季度   2.719435   3.407325  2019-05-16\n45  2019第2季度   3.407325   2.314198  2019-08-14\n46  2019第3季度   2.314198   4.201790  2019-11-14\n47  2019第4季度   4.201790   2.894518  2020-02-14\n48  2020第1季度   2.894518   1.800183  2020-05-15\n49  2020第2季度   1.800183  -7.679049  2020-08-14\n50  2020第3季度  -7.679049  -1.829887  2020-11-24\n51  2020第4季度  -1.829887  -0.180657  2021-02-24\n52  2021第1季度  -0.180657  -0.562919  2021-05-25\n53  2021第2季度  -0.562919  11.520925  2021-08-27\n54  2021第3季度  11.520925   6.313908  2021-11-23\n55  2021第4季度   6.313908   6.305223  2022-02-25\n56  2022第1季度   6.305223   8.602949  2022-05-25\n57  2022第2季度   8.602949   7.763706  2022-08-25\n```\n\n#### 实际零售销售月率\n\n接口: macro_germany_retail_sale_monthly\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_1_5.html\n\n描述: 东方财富-数据中心-经济数据一览-德国-实际零售销售月率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_germany_retail_sale_monthly_df = ak.macro_germany_retail_sale_monthly()\nprint(macro_germany_retail_sale_monthly_df)\n```\n\n数据示例\n\n```\n      时间    前值    现值        发布日期\n0    2008年01月   4.5   4.4  2008-02-13\n1    2008年02月   4.4   4.5  2008-03-15\n2    2008年03月   4.5   5.1  2008-04-13\n3    2008年04月   5.1   4.4  2008-05-14\n4    2008年05月   4.4   4.8  2008-06-13\n..        ...   ...   ...         ...\n173  2022年06月   9.1  10.2  2022-07-13\n174  2022年07月  10.2  11.5  2022-08-10\n175  2022年08月  11.5  12.7  2022-09-13\n176  2022年09月  12.7  14.1  2022-10-13\n177  2022年10月  14.1   NaN  2022-11-11\n```\n\n#### 实际零售销售年率\n\n接口: macro_germany_retail_sale_yearly\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_1_6.html\n\n描述: 东方财富-数据中心-经济数据一览-德国-实际零售销售年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_germany_retail_sale_yearly_df = ak.macro_germany_retail_sale_yearly()\nprint(macro_germany_retail_sale_yearly_df)\n```\n\n数据示例\n\n```\n     时间   前值   现值        发布日期\n0   2008年12月  3.2  3.9  2009-04-13\n1   2009年12月  3.9 -0.1  2010-04-13\n2   2010年12月 -0.1  0.4  2011-04-13\n3   2011年12月  0.4  2.0  2012-04-12\n4   2012年12月  2.0  2.5  2013-04-13\n5   2013年12月  2.5  2.5  2014-11-18\n6   2014年12月  2.5  1.0  2015-01-16\n7   2015年12月  1.0  0.1  2016-01-16\n8   2016年12月  0.1  0.6  2017-01-16\n9   2017年12月  0.6  2.0  2018-01-16\n10  2018年12月  2.0  1.9  2019-01-16\n11  2019年12月  1.9  0.7  2020-01-16\n12  2020年12月  0.7 -0.1  2021-01-19\n13  2021年12月 -0.1  5.3  2022-01-19\n14  2022年12月  5.3  NaN  2023-01-17\n```\n\n#### ZEW 经济景气指数\n\n接口: macro_germany_zew\n\n目标地址: https://data.eastmoney.com/cjsj/foreign_1_7.html\n\n描述: 东方财富-数据中心-经济数据一览-德国-ZEW 经济景气指数\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_germany_zew_df = ak.macro_germany_zew()\nprint(macro_germany_zew_df)\n```\n\n数据示例\n\n```\n     时间    前值    现值        发布日期\n0    2008年01月 -37.2 -41.6  2008-01-16\n1    2008年02月 -41.6 -39.5  2008-02-16\n2    2008年03月 -39.5 -32.0  2008-03-16\n3    2008年04月 -32.0 -40.7  2008-04-16\n4    2008年05月 -40.7 -41.4  2008-05-16\n..        ...   ...   ...         ...\n174  2022年07月 -28.0 -53.8  2022-07-12\n175  2022年08月 -53.8 -55.3  2022-08-16\n176  2022年09月 -55.3 -61.9  2022-09-13\n177  2022年10月 -61.9 -59.2  2022-10-18\n178  2022年11月 -59.2   NaN  2022-11-15\n```\n\n### 瑞士宏观\n\n#### SVME 采购经理人指数\n\n接口: macro_swiss_svme\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_2_0.html\n\n描述: 东方财富-经济数据-瑞士-SVME采购经理人指数\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_swiss_svme_df = ak.macro_swiss_svme()\nprint(macro_swiss_svme_df)\n```\n\n数据示例\n\n```\n     时间    前值    现值        发布日期\n0    2007年12月   NaN  62.2  2008-01-01\n1    2008年01月  62.2  62.3  2008-02-01\n2    2008年02月  62.3  60.5  2008-03-03\n3    2008年03月  60.5  55.3  2008-04-01\n4    2008年04月  55.3  56.7  2008-05-02\n..        ...   ...   ...         ...\n174  2022年06月  60.0  59.1  2022-07-01\n175  2022年07月  59.1  58.0  2022-08-02\n176  2022年08月  58.0  56.4  2022-09-01\n177  2022年09月  56.4  57.1  2022-10-03\n178  2022年10月  57.1  54.9  2022-11-01\n```\n\n#### 贸易帐\n\n接口: macro_swiss_trade\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_2_1.html\n\n描述: 东方财富-经济数据-瑞士-贸易帐\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_swiss_trade_df = ak.macro_swiss_trade()\nprint(macro_swiss_trade_df)\n```\n\n数据示例\n\n```\n     时间      前值      现值        发布日期\n0   2007第4季度     NaN   1.980  2008-01-20\n1   2008第1季度   1.980  12.500  2008-04-20\n2   2008第2季度  12.500  24.128  2008-07-21\n3   2008第3季度  24.128  14.400  2008-10-21\n4   2008第4季度  14.400   2.200  2009-01-20\n5   2009第1季度   2.200   1.210  2009-04-20\n6   2009第2季度   1.210  15.700  2009-07-21\n7   2009第3季度  15.700  19.200  2009-10-21\n8   2009第4季度  19.200  14.000  2010-01-20\n9   2010第1季度  14.000  20.000  2010-04-20\n10  2010第2季度  20.000  18.000  2010-07-21\n11  2010第3季度  18.000  17.000  2010-10-21\n12  2010第4季度  17.000  12.600  2011-01-20\n13  2011第1季度  12.600  11.000  2011-04-20\n14  2011第2季度  11.000  17.000  2011-07-21\n15  2011第3季度  17.000  19.000  2011-10-21\n16  2011第4季度  19.000  20.000  2012-01-20\n17  2012第1季度  20.000  17.000  2012-04-20\n18  2012第2季度  17.000  22.000  2012-07-21\n19  2012第3季度  22.000  20.100  2012-10-21\n20  2012第4季度  20.100  10.000  2013-01-20\n21  2013第1季度  10.000  19.000  2013-04-20\n22  2013第2季度  19.000  27.000  2013-07-21\n23  2013第3季度  27.000  25.000  2013-10-21\n24  2013第4季度  25.000   5.000  2014-01-20\n25  2014第1季度   5.000  21.000  2014-04-20\n26  2014第2季度  21.000  14.000  2014-07-21\n27  2014第3季度  14.000  24.500  2014-10-21\n28  2014第4季度  24.500  15.000  2015-01-20\n29  2015第1季度  15.000  25.000  2015-04-20\n30  2015第2季度  25.000  35.800  2015-07-21\n31  2015第3季度  35.800  30.500  2015-10-20\n32  2015第4季度  30.500  25.400  2016-01-26\n33  2016第1季度  25.400  21.630  2016-04-21\n34  2016第2季度  21.630  35.460  2016-07-21\n35  2016第3季度  35.460  43.740  2016-10-20\n36  2016第4季度  43.740  27.160  2017-01-26\n37  2017第1季度  27.160  31.010  2017-04-27\n38  2017第2季度  31.010  28.130  2017-07-20\n39  2017第3季度  28.130  29.200  2017-10-19\n40  2017第4季度  29.200  26.320  2018-01-30\n41  2018第1季度  26.320  17.680  2018-04-24\n42  2018第2季度  17.680  26.000  2018-07-19\n43  2018第3季度  26.000  24.340  2018-10-18\n44  2018第4季度  24.340  18.970  2019-01-29\n45  2019第1季度  18.970  31.790  2019-04-18\n46  2019第2季度  31.790  40.960  2019-07-18\n47  2019第3季度  40.960  40.200  2019-10-17\n48  2019第4季度  40.200  19.640  2020-01-28\n49  2020第1季度  19.640  40.200  2020-04-21\n50  2020第2季度  40.200  32.160  2020-07-21\n51  2020第3季度  32.160  32.790  2020-10-20\n52  2020第4季度  32.790  28.810  2021-01-28\n53  2021第1季度  28.810  58.160  2021-04-22\n54  2021第2季度  58.160  55.300  2021-07-20\n55  2021第3季度  55.300  50.520  2021-10-19\n56  2021第4季度  50.520  36.930  2022-01-27\n57  2022第1季度  36.930  29.880  2022-04-26\n58  2022第2季度  29.880  38.030  2022-07-19\n59  2022第3季度  38.030  40.030  2022-10-20\n```\n\n#### 消费者物价指数年率\n\n接口: macro_swiss_cpi_yearly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_2_2.html\n\n描述: 东方财富-经济数据-瑞士-消费者物价指数年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_swiss_cpi_yearly_df = ak.macro_swiss_cpi_yearly()\nprint(macro_swiss_cpi_yearly_df)\n```\n\n数据示例\n\n```\n    时间   前值   现值        发布日期\n0   2007第4季度  NaN  2.0  2008-01-08\n1   2008第4季度  2.0  0.7  2009-01-08\n2   2009第4季度  0.7  0.3  2010-01-08\n3   2010第4季度  0.3  0.5  2011-01-08\n4   2011第4季度  0.5 -0.7  2012-01-08\n5   2012第4季度 -0.7 -0.4  2013-01-08\n6   2013第4季度 -0.4  0.1  2014-01-08\n7   2015第4季度 -0.3 -1.3  2016-01-08\n8   2016第4季度 -1.3  0.0  2017-01-05\n9   2017第4季度  0.0  0.8  2018-01-08\n10  2018第4季度  0.8  0.7  2019-01-09\n11  2014第4季度  0.1 -0.3  2019-01-09\n12  2019第4季度  0.7  0.2  2020-01-07\n13  2020第4季度  0.2 -0.8  2021-01-05\n14  2021第4季度 -0.8  1.5  2022-01-04\n```\n\n#### GDP 季率\n\n接口: macro_swiss_gdp_quarterly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_2_3.html\n\n描述: 东方财富-经济数据-瑞士-GDP 季率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_swiss_gdp_quarterly_df = ak.macro_swiss_gdp_quarterly()\nprint(macro_swiss_gdp_quarterly_df)\n```\n\n数据示例\n\n```\n    时间   前值   现值        发布日期\n0   2007年12月  NaN  1.0  2008-03-01\n1   2008年03月  1.0  0.3  2008-05-31\n2   2008年06月  0.3  0.4  2008-08-31\n3   2008年09月  0.4  0.0  2008-12-01\n4   2008年12月  0.0 -0.3  2009-03-02\n5   2009年03月 -0.3 -0.8  2009-05-31\n6   2009年06月 -0.8 -0.3  2009-08-31\n7   2009年09月 -0.3  0.3  2009-12-01\n8   2009年12月  0.3  0.7  2010-03-02\n9   2010年03月  0.7  0.4  2010-05-31\n10  2010年06月  0.4  0.9  2010-08-31\n11  2010年09月  0.9  0.7  2010-12-01\n12  2010年12月  0.7  0.9  2011-03-02\n13  2011年03月  0.9  0.3  2011-05-31\n14  2011年06月  0.3  0.4  2011-08-31\n15  2011年09月  0.4  0.2  2011-12-01\n16  2011年12月  0.2  0.1  2012-03-01\n17  2012年03月  0.1  0.7  2012-05-31\n18  2012年06月  0.7 -0.1  2012-08-31\n19  2012年09月 -0.1  0.6  2012-12-01\n20  2012年12月  0.6  0.2  2013-03-02\n21  2013年03月  0.2  0.6  2013-05-31\n22  2013年06月  0.6  0.5  2013-08-31\n23  2013年09月  0.5  0.5  2013-12-01\n24  2013年12月  0.5  0.2  2014-03-02\n25  2014年03月  0.2  0.5  2014-05-31\n26  2014年06月  0.5  0.0  2014-08-31\n27  2014年09月  0.0  0.6  2014-12-01\n28  2014年12月  0.6  0.6  2015-03-02\n29  2015年03月  0.6 -0.2  2015-05-29\n30  2015年06月 -0.2  0.2  2015-08-28\n31  2015年09月  0.2  0.0  2015-12-01\n32  2015年12月  0.0  0.4  2016-03-02\n33  2016年03月  0.4  0.1  2016-06-01\n34  2016年06月  0.1  0.6  2016-09-06\n35  2016年09月  0.6  0.0  2016-12-02\n36  2016年12月  0.0  0.1  2017-03-02\n37  2017年03月  0.1  0.3  2017-06-01\n38  2017年06月  0.3  0.3  2017-09-05\n39  2017年09月  0.3  0.6  2017-11-30\n40  2017年12月  0.6  0.6  2018-03-01\n41  2018年03月  0.6  0.6  2018-05-31\n42  2018年06月  0.6  0.7  2018-09-06\n43  2018年09月  0.7 -0.2  2018-11-29\n44  2018年12月 -0.2  0.2  2019-02-28\n45  2019年03月  0.2  0.6  2019-05-28\n46  2019年06月  0.6  0.3  2019-09-05\n47  2019年09月  0.3  0.4  2019-11-28\n48  2019年12月  0.4  0.3  2020-03-03\n49  2020年03月  0.3 -2.6  2020-06-03\n50  2020年06月 -2.6 -8.2  2020-08-27\n51  2020年09月 -8.2  7.2  2020-12-01\n52  2020年12月  7.2  0.3  2021-03-03\n53  2021年03月  0.3 -0.5  2021-06-01\n54  2021年09月  1.8  1.7  2021-09-07\n55  2021年06月 -0.5  1.8  2022-01-10\n56  2021年12月  1.7  0.3  2022-02-28\n57  2022年03月  0.3  0.5  2022-05-31\n58  2022年06月  0.5  0.3  2022-09-05\n```\n\n#### GDP 年率\n\n接口: macro_swiss_gbd_yearly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_2_4.html\n\n描述: 东方财富-经济数据-瑞士-GDP 年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_swiss_gbd_yearly_df = ak.macro_swiss_gbd_yearly()\nprint(macro_swiss_gbd_yearly_df)\n```\n\n数据示例\n\n```\n    时间   前值   现值        发布日期\n0   2007年12月  NaN  3.6  2008-03-02\n1   2008年12月  3.6 -0.6  2009-03-03\n2   2009年12月 -0.6  0.6  2010-03-03\n3   2010年12月  0.6  3.1  2011-03-03\n4   2011年12月  3.1  1.3  2012-03-02\n5   2012年12月  1.3  1.4  2013-03-03\n6   2013年12月  1.4  1.7  2014-03-03\n7   2014年12月  1.7  1.9  2015-03-03\n8   2015年12月  1.9  0.4  2016-03-02\n9   2016年12月  0.4  0.6  2017-03-02\n10  2017年12月  0.6  1.9  2018-03-01\n11  2018年12月  1.9  1.4  2019-02-28\n12  2019年12月  1.4  1.5  2020-03-03\n13  2020年12月  1.5 -1.6  2021-03-03\n14  2021年12月 -1.6  3.7  2022-02-28\n```\n\n#### 央行公布利率决议\n\n接口: macro_swiss_gbd_bank_rate\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_2_5.html\n\n描述: 东方财富-经济数据-瑞士-央行公布利率决议\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_swiss_gbd_bank_rate_df = ak.macro_swiss_gbd_bank_rate()\nprint(macro_swiss_gbd_bank_rate_df)\n```\n\n数据示例\n\n```\n     时间    前值    现值        发布日期\n0   2008年03月   NaN  2.75  2008-03-16\n1   2008年06月  2.75  2.75  2008-06-16\n2   2008年09月  2.75  2.75  2008-09-16\n3   2008年12月  2.75  0.50  2008-12-16\n4   2009年03月  0.50  0.25  2009-03-16\n5   2009年06月  0.25  0.25  2009-06-16\n6   2009年09月  0.25  0.25  2009-09-16\n7   2009年12月  0.25  0.25  2009-12-16\n8   2010年03月  0.25  0.25  2010-03-16\n9   2010年06月  0.25  0.25  2010-06-16\n10  2010年09月  0.25  0.25  2010-09-16\n11  2010年12月  0.25  0.25  2010-12-16\n12  2011年03月  0.25  0.25  2011-03-16\n13  2011年06月  0.25  0.25  2011-06-16\n14  2011年09月  0.25  0.00  2011-09-16\n15  2011年12月  0.00  0.00  2011-12-16\n16  2012年03月  0.00  0.00  2012-03-16\n17  2012年06月  0.00  0.00  2012-06-16\n18  2012年09月  0.00  0.00  2012-09-16\n19  2012年12月  0.00  0.00  2012-12-16\n20  2013年03月  0.00  0.00  2013-03-16\n21  2013年06月  0.00  0.00  2013-06-16\n22  2013年09月  0.00  0.00  2013-09-16\n23  2013年12月  0.00  0.00  2013-12-16\n24  2014年03月  0.00  0.00  2014-03-16\n25  2014年06月  0.00  0.00  2014-06-16\n26  2014年09月  0.00  0.00  2014-09-16\n27  2014年12月  0.00 -0.25  2014-12-11\n28  2015年03月 -0.25 -0.75  2015-03-19\n29  2015年06月 -0.75 -0.75  2015-06-18\n30  2015年09月 -0.75 -0.75  2015-09-17\n31  2015年12月 -0.75 -0.75  2015-12-10\n32  2016年03月 -0.75 -0.75  2016-03-17\n33  2016年06月 -0.75 -0.75  2016-06-16\n34  2016年09月 -0.75 -0.75  2016-09-15\n35  2016年12月 -0.75 -0.75  2016-12-15\n36  2017年03月 -0.75 -0.75  2017-03-16\n37  2017年06月 -0.75 -0.75  2017-06-15\n38  2017年09月 -0.75 -0.75  2017-09-14\n39  2017年12月 -0.75 -0.75  2017-12-14\n40  2018年03月 -0.75 -0.75  2018-03-15\n41  2018年06月 -0.75 -0.75  2018-06-21\n42  2018年09月 -0.75 -0.75  2018-09-20\n43  2018年12月 -0.75 -0.75  2018-12-13\n44  2019年03月 -0.75 -0.75  2019-03-21\n45  2019年06月 -0.75 -0.75  2019-06-13\n46  2019年09月 -0.75 -0.75  2019-09-19\n47  2019年12月 -0.75 -0.75  2019-12-12\n48  2020年03月 -0.75 -0.75  2020-03-19\n49  2020年06月 -0.75 -0.75  2020-06-18\n50  2020年09月 -0.75 -0.75  2020-09-24\n51  2020年12月 -0.75 -0.75  2020-12-14\n52  2021年03月 -0.75 -0.75  2021-03-25\n53  2021年06月 -0.75 -0.75  2021-06-17\n54  2021年09月 -0.75 -0.75  2021-09-23\n55  2021年12月 -0.75 -0.75  2021-12-16\n56  2022年03月 -0.75 -0.75  2022-03-24\n57  2022年06月 -0.75 -0.25  2022-06-16\n58  2022年09月 -0.25  0.50  2022-09-22\n59  2022年12月  0.50   NaN  2022-12-15\n```\n\n### 日本宏观\n\n#### 央行公布利率决议\n\n接口: macro_japan_bank_rate\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_3_0.html\n\n描述: 东方财富-经济数据-日本-央行公布利率决议\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_japan_bank_rate_df = ak.macro_japan_bank_rate()\nprint(macro_japan_bank_rate_df)\n```\n\n数据示例\n\n```\n     时间   前值   现值        发布日期\n0    2008年01月  NaN  0.5  2008-01-21\n1    2008年02月  0.5  0.5  2008-02-21\n2    2008年03月  0.5  0.5  2008-03-21\n3    2008年04月  0.5  0.5  2008-04-21\n4    2008年05月  0.5  0.5  2008-05-21\n..        ...  ...  ...         ...\n148  2022年05月 -0.1 -0.1  2022-06-17\n149  2022年06月 -0.1 -0.1  2022-06-17\n150  2022年07月 -0.1  NaN  2022-07-21\n151  2022年09月  NaN -0.1  2022-09-22\n152  2022年10月 -0.1 -0.1  2022-10-28\n```\n\n#### 全国消费者物价指数年率\n\n接口: macro_japan_cpi_yearly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_3_1.html\n\n描述: 东方财富-经济数据-日本-全国消费者物价指数年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_japan_cpi_yearly_df = ak.macro_japan_cpi_yearly()\nprint(macro_japan_cpi_yearly_df)\n```\n\n数据示例\n\n```\n      时间   前值   现值        发布日期\n0    2008年01月  0.7  0.7  2008-02-25\n1    2008年02月  0.7  1.0  2008-03-27\n2    2008年03月  1.0  1.2  2008-04-25\n3    2008年04月  1.2  0.8  2008-05-26\n4    2008年05月  0.8  1.3  2008-06-25\n..        ...  ...  ...         ...\n173  2022年06月  2.5  2.4  2022-07-22\n174  2022年07月  2.4  2.6  2022-08-19\n175  2022年08月  2.6  3.0  2022-09-20\n176  2022年09月  3.0  3.0  2022-10-21\n177  2022年10月  3.0  NaN  2022-11-18\n```\n\n#### 全国核心消费者物价指数年率\n\n接口: macro_japan_core_cpi_yearly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_2_2.html\n\n描述: 东方财富-经济数据-日本-全国核心消费者物价指数年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_japan_core_cpi_yearly_df = ak.macro_japan_core_cpi_yearly()\nprint(macro_japan_core_cpi_yearly_df)\n```\n\n数据示例\n\n```\n     时间   前值   现值        发布日期\n0    2008年01月 -0.1 -0.1  2008-02-25\n1    2008年02月 -0.1 -0.1  2008-03-27\n2    2008年03月 -0.1  0.1  2008-04-25\n3    2008年04月  0.1 -0.1  2008-05-26\n4    2008年05月 -0.1 -0.1  2008-06-25\n..        ...  ...  ...         ...\n173  2022年06月  0.2  0.2  2022-07-22\n174  2022年07月  0.2  0.4  2022-08-19\n175  2022年08月  0.4  0.7  2022-09-20\n176  2022年09月  0.7  0.9  2022-10-21\n177  2022年10月  0.9  NaN  2022-11-18\n```\n\n#### 失业率\n\n接口: macro_japan_unemployment_rate\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_2_3.html\n\n描述: 东方财富-经济数据-日本-失业率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_japan_unemployment_rate_df = ak.macro_japan_unemployment_rate()\nprint(macro_japan_unemployment_rate_df)\n```\n\n数据示例\n\n```\n      时间   前值   现值        发布日期\n0    2008年01月  3.7  3.9  2008-02-29\n1    2008年02月  3.9  4.0  2008-03-31\n2    2008年03月  4.0  3.8  2008-04-29\n3    2008年04月  3.8  3.9  2008-05-30\n4    2008年05月  3.9  4.0  2008-06-29\n..        ...  ...  ...         ...\n173  2022年06月  2.6  2.6  2022-07-29\n174  2022年07月  2.6  2.6  2022-08-30\n175  2022年08月  2.6  2.5  2022-09-30\n176  2022年09月  2.5  2.7  2022-10-28\n177  2022年10月  2.7  NaN  2022-11-29\n```\n\n#### 领先指标终值\n\n接口: macro_japan_head_indicator\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_3_4.html\n\n描述: 东方财富-经济数据-日本-领先指标终值\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_japan_head_indicator_df = ak.macro_japan_head_indicator()\nprint(macro_japan_head_indicator_df)\n```\n\n数据示例\n\n```\n     时间     前值     现值        发布日期\n0    2008年01月  102.1  102.1  2008-03-08\n1    2008年02月  102.1  102.4  2008-04-08\n2    2008年03月  102.4  100.3  2008-05-07\n3    2008年04月  100.3  100.4  2008-06-07\n4    2008年05月  100.4  100.0  2008-07-07\n..        ...    ...    ...         ...\n171  2022年04月  100.8  102.9  2022-06-27\n172  2022年05月  102.9  101.2  2022-07-27\n173  2022年06月  101.2  100.9  2022-08-29\n174  2022年07月  100.9   98.9  2022-09-28\n175  2022年08月   98.9  101.3  2022-10-26\n```\n\n### 英国宏观\n\n#### Halifax 房价指数月率\n\n接口: macro_uk_halifax_monthly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_4_0.html\n\n描述: 东方财富-经济数据-英国-Halifax 房价指数月率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_uk_halifax_monthly_df = ak.macro_uk_halifax_monthly()\nprint(macro_uk_halifax_monthly_df)\n```\n\n数据示例\n\n```\n     时间   前值   现值        发布日期\n0    2008年01月  NaN -0.4  2008-02-07\n1    2008年02月 -0.4  0.1  2008-03-09\n2    2008年03月  0.1 -2.5  2008-04-07\n3    2008年04月 -2.5 -1.5  2008-05-08\n4    2008年05月 -1.5 -2.5  2008-06-07\n..        ...  ...  ...         ...\n174  2022年07月  1.4 -0.1  2022-08-05\n175  2022年08月 -0.1  0.3  2022-09-07\n176  2022年09月  0.3 -0.1  2022-10-07\n177  2022年10月 -0.1 -0.4  2022-11-07\n178  2022年11月 -0.4  NaN  2022-12-07\n```\n\n#### Halifax 房价指数年率\n\n接口: macro_uk_halifax_yearly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_4_1.html\n\n描述: 东方财富-经济数据-英国-Halifax 房价指数年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_uk_halifax_yearly_df = ak.macro_uk_halifax_yearly()\nprint(macro_uk_halifax_yearly_df)\n```\n\n数据示例\n\n```\n      时间    前值    现值        发布日期\n0    2008年01月   5.2   4.5  2008-02-07\n1    2008年02月   4.5   4.2  2008-03-09\n2    2008年03月   4.2   1.1  2008-04-07\n3    2008年04月   1.1  -0.9  2008-05-08\n4    2008年05月  -0.9  -3.8  2008-06-07\n..        ...   ...   ...         ...\n174  2022年07月  12.5  11.8  2022-08-05\n175  2022年08月  11.8  11.4  2022-09-07\n176  2022年09月  11.4   9.8  2022-10-07\n177  2022年10月   9.8   8.3  2022-11-07\n178  2022年11月   8.3   NaN  2022-12-07\n```\n\n#### 贸易帐\n\n接口: macro_uk_trade\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_4_2.html\n\n描述: 东方财富-经济数据-英国-贸易帐\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_uk_trade_df = ak.macro_uk_trade()\nprint(macro_uk_trade_df)\n```\n\n数据示例\n\n```\n           时间     前值     现值        发布日期\n0    2008年01月  -3157  -3750  2008-03-11\n1    2008年02月  -3750  -3749  2008-04-11\n2    2008年03月  -3749  -3194  2008-05-10\n3    2008年04月  -3194  -3182  2008-06-10\n4    2008年05月  -3182  -2696  2008-07-10\n..        ...    ...    ...         ...\n171  2022年04月 -11881  -9266  2022-06-13\n172  2022年05月  -9266  -9119  2022-07-13\n173  2022年06月  -9119 -11387  2022-08-12\n174  2022年07月 -11387  -7793  2022-09-12\n175  2022年08月  -7793  -7080  2022-10-12\n```\n\n#### 央行公布利率决议\n\n接口: macro_uk_bank_rate\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_4_3.html\n\n描述: 东方财富-经济数据-英国-央行公布利率决议\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_uk_bank_rate_df = ak.macro_uk_bank_rate()\nprint(macro_uk_bank_rate_df)\n```\n\n数据示例\n\n```\n      时间    前值    现值        发布日期\n0    2008年01月   NaN  5.50  2008-01-15\n1    2008年02月  5.50  5.25  2008-02-15\n2    2008年03月  5.25  5.25  2008-03-15\n3    2008年04月  5.25  5.00  2008-04-15\n4    2008年05月  5.00  5.00  2008-05-15\n..        ...   ...   ...         ...\n150  2022年05月  0.75  1.00  2022-05-05\n151  2022年06月  1.00  1.25  2022-06-16\n152  2022年08月  1.25  1.75  2022-08-04\n153  2022年09月  1.75  2.25  2022-09-22\n154  2022年11月  2.25  3.00  2022-11-03\n```\n\n#### 核心消费者物价指数年率\n\n接口: macro_uk_core_cpi_yearly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_4_4.html\n\n描述: 东方财富-经济数据-英国-核心消费者物价指数年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_uk_core_cpi_yearly_df = ak.macro_uk_core_cpi_yearly()\nprint(macro_uk_core_cpi_yearly_df)\n```\n\n数据示例\n\n```\n     时间   前值   现值        发布日期\n0    2008年01月  1.4  1.3  2008-02-16\n1    2008年02月  1.3  1.2  2008-03-18\n2    2008年03月  1.2  1.2  2008-04-16\n3    2008年04月  1.2  1.4  2008-05-17\n4    2008年05月  1.4  1.5  2008-06-16\n..        ...  ...  ...         ...\n172  2022年05月  6.2  5.9  2022-06-22\n173  2022年06月  5.9  5.8  2022-07-20\n174  2022年07月  5.8  6.2  2022-08-17\n175  2022年08月  6.2  6.3  2022-09-14\n176  2022年09月  6.3  6.5  2022-10-19\n```\n\n#### 核心消费者物价指数月率\n\n接口: macro_uk_core_cpi_monthly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_4_7.html\n\n描述: 东方财富-经济数据-英国-核心消费者物价指数月率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_uk_cpi_monthly_df = ak.macro_uk_cpi_monthly()\nprint(macro_uk_cpi_monthly_df)\n```\n\n数据示例\n\n```\n           时间   前值   现值        发布日期\n0    2008年01月  0.6 -1.0  2008-02-16\n1    2008年02月 -1.0  0.3  2008-03-18\n2    2008年03月  0.3  0.4  2008-04-16\n3    2008年04月  0.4  0.5  2008-05-17\n4    2008年05月  0.5  0.3  2008-06-16\n..        ...  ...  ...         ...\n170  2022年05月  0.7  0.5  2022-06-22\n171  2022年06月  0.5  0.4  2022-07-20\n172  2022年07月  0.4  0.3  2022-08-17\n173  2022年08月  0.3  0.8  2022-09-14\n174  2022年09月  0.8  0.6  2022-10-19\n```\n\n#### 消费者物价指数年率\n\n接口: macro_uk_cpi_yearly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_4_6.html\n\n描述: 东方财富-经济数据-英国-消费者物价指数年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_uk_cpi_yearly_df = ak.macro_uk_cpi_yearly()\nprint(macro_uk_cpi_yearly_df)\n```\n\n数据示例\n\n```\n           时间         前值         现值        发布日期\n0    2008年01月   2.115385   2.228682  2008-02-16\n1    2008年02月   2.228682   2.507232  2008-03-18\n2    2008年03月   2.507232   2.399232  2008-04-16\n3    2008年04月   2.399232   2.966507  2008-05-17\n4    2008年05月   2.966507   3.339695  2008-06-16\n..        ...        ...        ...         ...\n172  2022年05月   9.000000   9.100000  2022-06-22\n173  2022年06月   9.100000   9.400000  2022-07-20\n174  2022年07月   9.400000  10.100000  2022-08-17\n175  2022年08月  10.100000   9.900000  2022-09-14\n176  2022年09月   9.900000  10.100000  2022-10-19\n```\n\n#### 消费者物价指数月率\n\n接口: macro_uk_cpi_monthly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_4_7.html\n\n描述: 东方财富-经济数据-英国-消费者物价指数月率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_uk_cpi_monthly_df = ak.macro_uk_cpi_monthly()\nprint(macro_uk_cpi_monthly_df)\n```\n\n数据示例\n\n```\n      时间   前值   现值        发布日期\n0    2008年01月  0.6 -1.0  2008-02-16\n1    2008年02月 -1.0  0.3  2008-03-18\n2    2008年03月  0.3  0.4  2008-04-16\n3    2008年04月  0.4  0.5  2008-05-17\n4    2008年05月  0.5  0.3  2008-06-16\n..        ...  ...  ...         ...\n170  2022年05月  0.7  0.5  2022-06-22\n171  2022年06月  0.5  0.4  2022-07-20\n172  2022年07月  0.4  0.3  2022-08-17\n173  2022年08月  0.3  0.8  2022-09-14\n174  2022年09月  0.8  0.6  2022-10-19\n```\n\n#### 零售销售月率\n\n接口: macro_uk_retail_monthly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_4_8.html\n\n描述: 东方财富-经济数据-英国-零售销售月率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_uk_retail_monthly_df = ak.macro_uk_retail_monthly()\nprint(macro_uk_retail_monthly_df)\n```\n\n数据示例\n\n```\n           时间   前值   现值        发布日期\n0    2008年01月 -0.4  0.8  2008-02-20\n1    2008年02月  0.8  1.0  2008-03-22\n2    2008年03月  1.0 -0.4  2008-04-20\n3    2008年04月 -0.4 -0.2  2008-05-21\n4    2008年05月 -0.2  3.5  2008-06-20\n..        ...  ...  ...         ...\n172  2022年06月 -0.5 -0.1  2022-07-22\n173  2022年07月 -0.1  0.3  2022-08-19\n174  2022年08月  0.3 -1.6  2022-09-16\n175  2022年09月 -1.6 -1.5  2022-10-21\n176  2022年10月 -1.5  NaN  2022-11-18\n```\n\n#### 零售销售年率\n\n接口: macro_uk_retail_yearly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_4_9.html\n\n描述: 东方财富-经济数据-英国-零售销售年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_uk_retail_yearly_df = ak.macro_uk_retail_yearly()\nprint(macro_uk_retail_yearly_df)\n```\n\n数据示例\n\n```\n     时间   前值   现值        发布日期\n0    2008年01月  2.7  5.6  2008-02-20\n1    2008年02月  5.6  5.5  2008-03-22\n2    2008年03月  5.5  4.6  2008-04-20\n3    2008年04月  4.6  4.2  2008-05-21\n4    2008年05月  4.2  8.1  2008-06-20\n..        ...  ...  ...         ...\n170  2022年06月 -4.7 -5.8  2022-07-22\n171  2022年07月 -5.8 -3.4  2022-08-19\n172  2022年08月 -3.4 -5.4  2022-09-16\n173  2022年09月 -5.4 -0.4  2022-10-21\n174  2022年10月 -0.4  NaN  2022-11-18\n```\n\n#### Rightmove 房价指数年率\n\n接口: macro_uk_rightmove_yearly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_4_10.html\n\n描述: 东方财富-经济数据-英国-Rightmove 房价指数年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_uk_rightmove_yearly_df = ak.macro_uk_rightmove_yearly()\nprint(macro_uk_rightmove_yearly_df)\n```\n\n数据示例\n\n```\n     时间    前值    现值        发布日期\n0    2008年01月   NaN   3.4  2008-01-20\n1    2008年02月   3.4   5.8  2008-02-20\n2    2008年03月   5.8   5.0  2008-03-20\n3    2008年04月   5.0   1.3  2008-04-20\n4    2008年05月   1.3   2.2  2008-05-20\n..        ...   ...   ...         ...\n148  2022年05月   9.9  10.2  2022-05-24\n149  2022年06月  10.2   9.7  2022-06-20\n150  2022年07月   9.7   9.3  2022-07-18\n151  2022年08月   9.3   8.2  2022-08-16\n152  2022年09月   8.2   8.7  2022-09-26\n```\n\n#### Rightmove 房价指数月率\n\n接口: macro_uk_rightmove_monthly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_4_11.html\n\n描述: 东方财富-经济数据-英国-Rightmove 房价指数月率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_uk_rightmove_monthly_df = ak.macro_uk_rightmove_monthly()\nprint(macro_uk_rightmove_monthly_df)\n```\n\n数据示例\n\n```\n           时间   前值   现值        发布日期\n0    2008年01月  NaN -0.8  2008-01-20\n1    2008年02月 -0.8  3.2  2008-02-20\n2    2008年03月  3.2  0.8  2008-03-20\n3    2008年04月  0.8 -0.1  2008-04-20\n4    2008年05月 -0.1  1.2  2008-05-20\n..        ...  ...  ...         ...\n148  2022年05月  1.6  2.1  2022-05-24\n149  2022年06月  2.1  0.3  2022-06-20\n150  2022年07月  0.3  0.4  2022-07-18\n151  2022年08月  0.4 -1.3  2022-08-16\n152  2022年09月 -1.3  0.7  2022-09-26\n```\n\n#### GDP 季率初值\n\n接口: macro_uk_gdp_quarterly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_4_12.html\n\n描述: 东方财富-经济数据-英国-GDP 季率初值\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_uk_gdp_quarterly_df = ak.macro_uk_gdp_quarterly()\nprint(macro_uk_gdp_quarterly_df)\n```\n\n数据示例\n\n```\n    时间    前值    现值        发布日期\n0   2008第1季度   0.6   0.4  2008-06-29\n1   2008第2季度   0.4   0.2  2008-09-29\n2   2008第4季度   0.2  -1.5  2009-03-31\n3   2009第1季度  -1.5  -1.9  2009-06-29\n4   2009第2季度  -1.9  -0.8  2009-09-29\n5   2009第3季度  -0.8   0.4  2009-12-30\n6   2009第4季度   0.4   1.6  2010-03-31\n7   2010第1季度   1.6   0.5  2010-06-29\n8   2010第2季度   0.5   0.7  2010-09-29\n9   2010第3季度   0.7   1.9  2010-12-30\n10  2010第4季度   1.9  -0.1  2011-03-31\n11  2011第1季度  -0.1   0.5  2011-06-29\n12  2011第2季度   0.5   0.2  2011-09-29\n13  2011第3季度   0.2   0.7  2011-12-30\n14  2011第4季度   0.7   0.0  2012-03-30\n15  2012第1季度   0.0   0.1  2012-06-29\n16  2012第2季度   0.1  -0.2  2012-09-29\n17  2012第3季度  -0.2   0.8  2012-12-30\n18  2012第4季度   0.8  -0.3  2013-03-31\n19  2013第1季度  -0.3   0.5  2013-06-29\n20  2013第2季度   0.5   0.5  2013-09-29\n21  2013第3季度   0.5   0.8  2013-12-30\n22  2013第4季度   0.8   0.5  2014-03-31\n23  2014第1季度   0.5   0.8  2014-06-29\n24  2014第2季度   0.8   0.9  2014-09-29\n25  2014第3季度   0.9   0.8  2014-12-30\n26  2014第4季度   0.8   0.8  2015-03-31\n27  2015第1季度   0.8   0.3  2015-06-30\n28  2015第2季度   0.3   0.5  2015-09-30\n29  2015第3季度   0.5   0.3  2015-12-23\n30  2015第4季度   0.3   0.7  2016-03-31\n31  2016第1季度   0.7   0.3  2016-06-30\n32  2016第2季度   0.3   0.6  2016-09-30\n33  2016第3季度   0.6   0.4  2016-12-23\n34  2016第4季度   0.4   0.7  2017-03-31\n35  2017第1季度   0.7   0.3  2017-06-30\n36  2017第2季度   0.3   0.2  2017-09-29\n37  2017第3季度   0.2   0.4  2017-12-22\n38  2017第4季度   0.4   0.4  2018-03-29\n39  2018第1季度   0.4   0.2  2018-06-29\n40  2018第2季度   0.2   0.4  2018-09-28\n41  2018第3季度   0.4   0.6  2018-12-28\n42  2018第4季度   0.6   0.2  2019-03-29\n43  2019第1季度   0.2   0.5  2019-06-28\n44  2019第2季度   0.5  -0.2  2019-08-09\n45  2019第3季度  -0.2   0.4  2019-12-20\n46  2019第4季度   0.4   NaN  2020-03-31\n47  2020第1季度   NaN  -2.5  2020-06-30\n48  2020第2季度  -2.5 -19.4  2020-09-30\n49  2020第3季度 -19.4  17.6  2020-12-22\n50  2020第4季度  17.6   1.5  2021-03-31\n51  2021第1季度   1.5  -1.2  2021-06-30\n52  2021第2季度  -1.2   5.6  2021-09-30\n53  2021第3季度   5.6   0.9  2021-12-22\n54  2021第4季度   0.9   1.3  2022-03-31\n55  2022第1季度   1.3   0.8  2022-06-30\n56  2022第2季度   0.8   0.2  2022-09-30\n57  2022第3季度   0.2   NaN  2022-12-22\n```\n\n#### GDP 年率初值\n\n接口: macro_uk_gdp_yearly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_4_13.html\n\n描述: 东方财富-经济数据-英国-GDP 年率初值\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_uk_gdp_yearly_df = ak.macro_uk_gdp_yearly()\nprint(macro_uk_gdp_yearly_df)\n```\n\n数据示例\n\n```\n     时间   前值   现值        发布日期\n0   2009第4季度  NaN  1.1  2010-03-31\n1   2010第4季度  1.1  3.0  2011-03-31\n2   2011第4季度  3.0  1.5  2012-03-30\n3   2012第4季度  1.5  0.4  2013-03-31\n4   2013第4季度  0.4  2.4  2014-03-31\n5   2014第4季度  2.4  3.5  2015-03-31\n6   2015第4季度  3.5  1.7  2016-03-31\n7   2016第4季度  1.7  2.0  2017-03-31\n8   2017第4季度  2.0  1.3  2018-03-29\n9   2018第4季度  1.3  1.4  2019-03-29\n10  2019第4季度  1.4  1.1  2020-03-31\n11  2020第4季度  1.1 -6.3  2021-03-31\n12  2021第4季度 -6.3  6.6  2022-03-31\n```\n\n#### 失业率\n\n接口: macro_uk_unemployment_rate\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_4_14.html\n\n描述: 东方财富-经济数据-英国-失业率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 前值   | float64 | -   |\n| 现值   | float64 | -   |\n| 发布日期 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_uk_unemployment_rate_df = ak.macro_uk_unemployment_rate()\nprint(macro_uk_unemployment_rate_df)\n```\n\n数据示例\n\n```\n     时间    前值    现值        发布日期\n0    2008年01月  5.19  5.21  2008-02-16\n1    2008年02月  5.21  5.21  2008-03-18\n2    2008年03月  5.21  5.20  2008-04-16\n3    2008年04月  5.20  5.30  2008-05-17\n4    2008年05月  5.30  5.20  2008-06-16\n..        ...   ...   ...         ...\n172  2022年05月  3.80  3.80  2022-07-19\n173  2022年06月  3.80  3.80  2022-08-16\n174  2022年07月  3.80  3.60  2022-09-13\n175  2022年08月  3.60  3.50  2022-10-11\n176  2022年09月  3.50   NaN  2022-11-15\n```\n\n### 澳大利亚宏观\n\n#### 零售销售月率\n\n接口: macro_australia_retail_rate_monthly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_5_0.html\n\n描述: 东方财富-经济数据-澳大利亚-零售销售月率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_australia_retail_rate_monthly_df = ak.macro_australia_retail_rate_monthly()\nprint(macro_australia_retail_rate_monthly_df)\n```\n\n数据示例\n\n```\n       时间    前值    现值      发布日期\n0    2008年01月  23.4 -23.6  2008-03-06\n1    2008年02月 -23.6  -7.7  2008-04-06\n2    2008年03月  -7.7   6.1  2008-05-05\n3    2008年04月   6.1  -1.5  2008-06-05\n4    2008年05月  -1.5   3.7  2008-07-05\n..        ...   ...   ...         ...\n199  2024年08月   1.2   2.2  2024-10-01\n200  2024年09月   2.2  -1.7  2024-10-31\n201  2024年10月  -1.7   5.7  2024-12-02\n202  2024年11月   5.7   7.8  2025-01-09\n203  2024年12月   7.8   NaN  2025-02-03\n[204 rows x 4 columns]\n```\n\n#### 贸易帐\n\n接口: macro_australia_trade\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_5_1.html\n\n描述: 东方财富-经济数据-澳大利亚-贸易帐\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述        |\n|------|---------|-----------|\n| 时间   | object  | -         |\n| 前值   | float64 | 注意单位: 亿澳元 |\n| 现值   | float64 | 注意单位: 亿澳元 |\n| 发布日期 | object  | -         |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_australia_trade_df = ak.macro_australia_trade()\nprint(macro_australia_trade_df)\n```\n\n数据示例\n\n```\n     时间     前值     现值        发布日期\n0    2008年01月  -1148  -3854  2008-03-06\n1    2008年02月  -3854  -2677  2008-04-06\n2    2008年03月  -2677  -1434  2008-05-05\n3    2008年04月  -1434  -1939  2008-06-05\n4    2008年05月  -1939  -1285  2008-07-05\n..        ...    ...    ...         ...\n183  2023年04月  16759  11789  2023-06-08\n184  2023年05月  11789   9382  2023-07-06\n185  2023年06月   9382  10846  2023-08-03\n186  2023年07月  10846   6209  2023-09-07\n187  2023年08月   6209   7892  2023-10-05\n[188 rows x 4 columns]\n```\n\n#### 失业率\n\n接口: macro_australia_unemployment_rate\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_5_2.html\n\n描述: 东方财富-经济数据-澳大利亚-失业率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_australia_unemployment_rate_df = ak.macro_australia_unemployment_rate()\nprint(macro_australia_unemployment_rate_df)\n```\n\n数据示例\n\n```\n      时间        前值        现值        发布日期\n0    2008年01月  4.309566  4.221168  2008-02-15\n1    2008年02月  4.221168  3.981161  2008-03-17\n2    2008年03月  3.981161  4.058254  2008-04-15\n3    2008年04月  4.058254  4.266881  2008-05-16\n4    2008年05月  4.266881  4.266643  2008-06-15\n..        ...       ...       ...         ...\n200  2024年09月  4.131262  4.067827  2024-10-17\n201  2024年10月  4.067827  4.105942  2024-11-14\n202  2024年11月  4.105942  3.926610  2024-12-12\n203  2024年12月  3.926610  3.977499  2025-01-16\n204  2025年01月  3.977499       NaN  2025-02-20\n[205 rows x 4 columns]\n```\n\n#### 生产者物价指数季率\n\n接口: macro_australia_ppi_quarterly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_5_3.html\n\n描述: 东方财富-经济数据-澳大利亚-生产者物价指数季率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_australia_ppi_quarterly_df = ak.macro_australia_ppi_quarterly()\nprint(macro_australia_ppi_quarterly_df)\n```\n\n数据示例\n\n```\n    时间   前值   现值        发布日期\n0   2008年03月  0.7  1.9  2008-04-29\n1   2008年06月  1.9  1.0  2008-07-30\n2   2008年09月  1.0  1.9  2008-10-30\n3   2008年12月  1.9  1.4  2009-01-29\n4   2009年03月  1.4 -0.3  2009-04-29\n..       ...  ...  ...         ...\n63  2023年12月  1.8  0.9  2024-02-02\n64  2024年03月  0.9  0.9  2024-04-26\n65  2024年06月  0.9  1.0  2024-08-02\n66  2024年09月  1.0  0.9  2024-11-01\n67  2024年12月  0.9  NaN  2025-01-31\n[68 rows x 4 columns]\n```\n\n#### 消费者物价指数季率\n\n接口: macro_australia_cpi_quarterly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_5_4.html\n\n描述: 东方财富-经济数据-澳大利亚-消费者物价指数季率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_australia_cpi_quarterly_df = ak.macro_australia_cpi_quarterly()\nprint(macro_australia_cpi_quarterly_df)\n```\n\n数据示例\n\n```\n     时间   前值   现值        发布日期\n0   2008第1季度  0.9  1.3  2008-06-07\n1   2008第2季度  1.3  1.4  2008-09-07\n2   2008第3季度  1.4  1.2  2008-12-08\n3   2008第4季度  1.2 -0.3  2009-03-09\n4   2009第1季度 -0.3  0.1  2009-06-07\n..       ...  ...  ...         ...\n63  2023第4季度  1.2  0.6  2024-01-31\n64  2024第1季度  0.6  1.0  2024-04-24\n65  2024第2季度  1.0  1.0  2024-07-31\n66  2024第3季度  1.0  0.2  2024-10-30\n67  2024第4季度  0.2  NaN  2025-01-29\n[68 rows x 4 columns]\n```\n\n#### 消费者物价指数年率\n\n接口: macro_australia_cpi_yearly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_5_5.html\n\n描述: 东方财富-经济数据-澳大利亚-消费者物价指数年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_australia_cpi_yearly_df = ak.macro_australia_cpi_yearly()\nprint(macro_australia_cpi_yearly_df)\n```\n\n数据示例\n\n```\n    时间   前值   现值        发布日期\n0   2008年03月  2.9  4.3  2008-04-26\n1   2008年06月  4.3  4.4  2008-07-27\n2   2008年09月  4.4  5.0  2008-10-27\n3   2008年12月  5.0  3.7  2009-01-26\n4   2009年03月  3.7  2.4  2009-04-26\n..       ...  ...  ...         ...\n63  2023年12月  5.4  4.1  2024-01-31\n64  2024年03月  4.1  3.6  2024-04-24\n65  2024年06月  3.6  3.8  2024-07-31\n66  2024年09月  3.8  2.8  2024-10-30\n67  2024年12月  2.8  NaN  2025-01-29\n[68 rows x 4 columns]\n```\n\n#### 央行公布利率决议\n\n接口: macro_australia_bank_rate\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_5_6.html\n\n描述: 东方财富-经济数据-澳大利亚-央行公布利率决议\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_australia_bank_rate_df = ak.macro_australia_bank_rate()\nprint(macro_australia_bank_rate_df)\n```\n\n数据示例\n\n```\n     时间    前值    现值        发布日期\n0    2008年01月   NaN  7.00  2008-01-05\n1    2008年02月  7.00  7.00  2008-02-05\n2    2008年03月  7.00  7.25  2008-03-05\n3    2008年04月  7.25  7.25  2008-04-05\n4    2008年05月  7.25  7.25  2008-05-05\n..        ...   ...   ...         ...\n186  2024年08月  4.35  4.35  2024-08-06\n187  2024年09月  4.35  4.35  2024-09-24\n188  2024年11月  4.35  4.35  2024-11-05\n189  2024年12月  4.35  4.35  2024-12-10\n190  2025年02月  4.35   NaN  2025-02-04\n[191 rows x 4 columns]\n```\n\n### 加拿大宏观\n\n#### 新屋开工\n\n接口: macro_canada_new_house_rate\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_7_0.html\n\n描述: 东方财富-经济数据-加拿大-新屋开工\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: 万 |\n| 现值   | float64 | 注意单位: 万 |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_canada_new_house_rate_df = ak.macro_canada_new_house_rate()\nprint(macro_canada_new_house_rate_df)\n```\n\n数据示例\n\n```\n     时间     前值     现值        发布日期\n0    2022年10月  29.96  26.71  2022-11-16\n1    2022年09月  26.74  29.96  2022-10-14\n2    2022年08月  27.53  26.74  2022-09-16\n3    2022年07月  27.37  27.53  2022-08-16\n4    2022年06月  28.73  27.37  2022-07-18\n..        ...    ...    ...         ...\n173  2008年05月  21.39  22.13  2008-06-09\n174  2008年04月  25.47  21.39  2008-05-10\n175  2008年03月  25.69  25.47  2008-04-09\n176  2008年02月  22.27  25.69  2008-03-11\n177  2008年01月  18.75  22.27  2008-02-09\n```\n\n#### 失业率\n\n接口: macro_canada_unemployment_rate\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_7_1.html\n\n描述: 东方财富-经济数据-加拿大-失业率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_canada_unemployment_rate_df = ak.macro_canada_unemployment_rate()\nprint(macro_canada_unemployment_rate_df)\n```\n\n数据示例\n\n```\n     时间   前值   现值        发布日期\n0    2022年11月  5.2  NaN  2022-12-02\n1    2022年10月  5.2  5.2  2022-11-04\n2    2022年09月  5.4  5.2  2022-10-07\n3    2022年08月  4.9  5.4  2022-09-09\n4    2022年07月  4.9  4.9  2022-08-05\n..        ...  ...  ...         ...\n174  2008年05月  6.1  6.1  2008-06-08\n175  2008年04月  6.0  6.1  2008-05-09\n176  2008年03月  5.8  6.0  2008-04-08\n177  2008年02月  5.8  5.8  2008-03-10\n178  2008年01月  5.9  5.8  2008-02-08\n```\n\n#### 贸易帐\n\n接口: macro_canada_trade\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_7_2.html\n\n描述: 东方财富-经济数据-加拿大-贸易帐\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述        |\n|------|---------|-----------|\n| 时间   | object  | -         |\n| 前值   | float64 | 注意单位: 亿加元 |\n| 现值   | float64 | 注意单位: 亿加元 |\n| 发布日期 | object  | -         |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_canada_trade_df = ak.macro_canada_trade()\nprint(macro_canada_trade_df)\n```\n\n数据示例\n\n```\n       时间    前值      现值        发布日期\n0    2022年10月  1138     NaN  2022-12-06\n1    2022年09月   550  1138.0  2022-11-03\n2    2022年08月  2373   550.0  2022-10-05\n3    2022年07月  4881  2373.0  2022-09-07\n4    2022年06月  4769  4881.0  2022-08-04\n..        ...   ...     ...         ...\n173  2008年05月  5110  5540.0  2008-07-06\n174  2008年04月  5530  5110.0  2008-06-06\n175  2008年03月  4940  5530.0  2008-05-06\n176  2008年02月  3260  4940.0  2008-04-07\n177  2008年01月  2350  3260.0  2008-03-07\n```\n\n#### 零售销售月率\n\n接口: macro_canada_retail_rate_monthly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_7_3.html\n\n描述: 东方财富-经济数据-加拿大-零售销售月率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_canada_retail_rate_monthly_df = ak.macro_canada_retail_rate_monthly()\nprint(macro_canada_retail_rate_monthly_df)\n```\n\n数据示例\n\n```\n           时间   前值   现值        发布日期\n0    2022年10月  1.2  NaN  2022-12-20\n1    2022年09月  0.5  1.2  2022-11-22\n2    2022年08月 -0.1  0.5  2022-10-21\n3    2022年07月  1.9 -0.1  2022-09-23\n4    2022年06月  5.2  1.9  2022-08-19\n..        ...  ...  ...         ...\n167  2008年05月  0.6  0.4  2008-07-22\n168  2008年04月  0.1  0.6  2008-06-22\n169  2008年03月 -0.7  0.1  2008-05-22\n170  2008年02月  1.5 -0.7  2008-04-23\n171  2008年01月  0.6  1.5  2008-03-23\n```\n\n#### 央行公布利率决议\n\n接口: macro_canada_bank_rate\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_7_4.html\n\n描述: 东方财富-经济数据-加拿大-央行公布利率决议\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_canada_bank_rate_df = ak.macro_canada_bank_rate()\nprint(macro_canada_bank_rate_df)\n```\n\n数据示例\n\n```\n     时间    前值    现值        发布日期\n0    2022年12月  3.75   NaN  2022-12-07\n1    2022年10月  3.25  3.75  2022-10-26\n2    2022年09月  2.50  3.25  2022-09-07\n3    2022年07月  1.50  2.50  2022-07-13\n4    2022年06月  1.00  1.50  2022-06-01\n..        ...   ...   ...         ...\n145  2008年05月  3.00  3.00  2008-05-15\n146  2008年04月  3.50  3.00  2008-04-15\n147  2008年03月  4.00  3.50  2008-03-15\n148  2008年02月  4.00  4.00  2008-02-15\n149  2008年01月   NaN  4.00  2008-01-15\n```\n\n#### 核心消费者物价指数年率\n\n接口: macro_canada_core_cpi_yearly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_7_5.html\n\n描述: 东方财富-经济数据-加拿大-核心消费者物价指数年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_canada_core_cpi_yearly_df = ak.macro_canada_core_cpi_yearly()\nprint(macro_canada_core_cpi_yearly_df)\n```\n\n数据示例\n\n```\n      时间        前值        现值        发布日期\n0    2022年11月  5.800000       NaN  2022-12-21\n1    2022年10月  6.000000  5.800000  2022-11-16\n2    2022年09月  5.800000  6.000000  2022-10-19\n3    2022年08月  6.100000  5.800000  2022-09-20\n4    2022年07月  6.200000  6.100000  2022-08-16\n..        ...       ...       ...         ...\n173  2008年05月  1.459854  1.455869  2008-06-21\n174  2008年04月  1.278539  1.459854  2008-05-22\n175  2008年03月  1.466544  1.278539  2008-04-21\n176  2008年02月  1.381215  1.466544  2008-03-23\n177  2008年01月  1.476015  1.381215  2008-02-21\n```\n\n#### 核心消费者物价指数月率\n\n接口: macro_canada_core_cpi_monthly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_7_6.html\n\n描述: 东方财富-经济数据-加拿大-核心消费者物价指数月率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_canada_core_cpi_monthly_df = ak.macro_canada_core_cpi_monthly()\nprint(macro_canada_core_cpi_monthly_df)\n```\n\n数据示例\n\n```\n     时间        前值        现值        发布日期\n0    2022年11月  0.400000       NaN  2022-12-21\n1    2022年10月  0.400000  0.400000  2022-11-16\n2    2022年09月  0.000000  0.400000  2022-10-19\n3    2022年08月  0.500000  0.000000  2022-09-20\n4    2022年07月  0.300000  0.500000  2022-08-16\n..        ...       ...       ...         ...\n173  2008年05月  0.270514  0.269784  2008-06-21\n174  2008年04月  0.180668  0.270514  2008-05-22\n175  2008年03月  0.544959  0.180668  2008-04-21\n176  2008年02月  0.090909  0.544959  2008-03-23\n177  2008年01月 -0.271985  0.090909  2008-02-21\n```\n\n#### 消费者物价指数年率\n\n接口: macro_canada_cpi_yearly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_7_7.html\n\n描述: 东方财富-经济数据-加拿大-消费者物价指数年率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_canada_cpi_yearly_df = ak.macro_canada_cpi_yearly()\nprint(macro_canada_cpi_yearly_df)\n```\n\n数据示例\n\n```\n      时间        前值        现值        发布日期\n0    2022年11月  6.900000       NaN  2022-12-21\n1    2022年10月  6.900000  6.900000  2022-11-16\n2    2022年09月  7.000000  6.900000  2022-10-19\n3    2022年08月  7.600000  7.000000  2022-09-20\n4    2022年07月  8.100000  7.600000  2022-08-16\n..        ...       ...       ...         ...\n174  2008年05月  1.702509  2.230152  2008-06-20\n175  2008年04月  1.350135  1.702509  2008-05-21\n176  2008年03月  1.814882  1.350135  2008-04-20\n177  2008年02月  2.193784  1.814882  2008-03-22\n178  2008年01月  2.376600  2.193784  2008-02-20\n```\n\n#### 消费者物价指数月率\n\n接口: macro_canada_cpi_monthly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_7_8.html\n\n描述: 东方财富-经济数据-加拿大-消费者物价指数月率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_canada_cpi_monthly_df = ak.macro_canada_cpi_monthly()\nprint(macro_canada_cpi_monthly_df)\n```\n\n数据示例\n\n```\n           时间        前值        现值        发布日期\n0    2022年10月  0.065531  0.720367  2022-11-16\n1    2022年09月 -0.326584  0.065531  2022-10-19\n2    2022年08月  0.130804 -0.326584  2022-09-20\n3    2022年07月  0.658328  0.130804  2022-08-16\n4    2022年06月  1.401869  0.658328  2022-07-20\n..        ...       ...       ...         ...\n172  2008年05月  0.799290  0.969163  2008-06-20\n173  2008年04月  0.356506  0.799290  2008-05-21\n174  2008年03月  0.357782  0.356506  2008-04-20\n175  2008年02月 -0.178571  0.357782  2008-03-22\n176  2008年01月  0.089366 -0.178571  2008-02-20\n```\n\n#### GDP 月率\n\n接口: macro_canada_gdp_monthly\n\n目标地址: http://data.eastmoney.com/cjsj/foreign_7_9.html\n\n描述: 东方财富-经济数据-加拿大-GDP 月率\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 时间   | object  | -       |\n| 前值   | float64 | 注意单位: % |\n| 现值   | float64 | 注意单位: % |\n| 发布日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_canada_gdp_monthly_df = ak.macro_canada_gdp_monthly()\nprint(macro_canada_gdp_monthly_df)\n```\n\n数据示例\n\n```\n           时间   前值   现值        发布日期\n0    2022年09月  0.1  NaN  2022-11-29\n1    2022年08月  0.1  0.1  2022-10-28\n2    2022年07月  0.1  0.1  2022-09-29\n3    2022年06月  0.0  0.1  2022-08-31\n4    2022年05月  0.3  0.0  2022-07-29\n..        ...  ...  ...         ...\n167  2008年05月  0.4 -0.1  2008-07-31\n168  2008年04月 -0.2  0.4  2008-07-01\n169  2008年03月 -0.2 -0.2  2008-05-31\n170  2008年02月  0.6 -0.2  2008-05-02\n171  2008年01月 -0.7  0.6  2008-04-01\n```\n\n### 重要机构\n\n#### 全球最大黄金 ETF—SPDR Gold Trust 持仓报告\n\n接口: macro_cons_gold\n\n目标地址: https://datacenter.jin10.com/reportType/dc_etf_gold\n\n描述: 全球最大黄金 ETF—SPDR Gold Trust 持仓报告, 数据区间从 20041119-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 商品    | object  | -        |\n| 日期    | object  | -        |\n| 总库存   | float64 | 注意单位: 吨  |\n| 增持/减持 | float64 | 注意单位: 吨  |\n| 总价值   | float64 | 注意单位: 美元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_cons_gold_df = ak.macro_cons_gold()\nprint(macro_cons_gold_df)\n```\n\n数据示例\n\n```\n      商品      日期     总库存  增持/减持  总价值\n0     黄金  2004-11-19   57.85  49.76  8.288069e+08\n1     黄金  2004-11-22   87.09  29.24  1.253785e+09\n2     黄金  2004-11-24   96.42   9.33  1.390569e+09\n3     黄金  2004-11-26  100.46   4.04  1.456603e+09\n4     黄金  2004-11-29  103.57   3.11  1.502482e+09\n   ..         ...     ...    ...           ...\n2401  黄金  2024-03-22  835.33  -3.17  5.830850e+10\n2402  黄金  2024-03-26  830.15  -5.18  5.816290e+10\n2403  黄金  2024-04-01  826.98  -3.17  5.885568e+10\n2404  黄金  2024-04-02  829.00   2.02  6.033517e+10\n2405  黄金  2024-04-03  830.73   1.73  6.087828e+10\n[2406 rows x 5 columns]\n```\n\n#### 全球最大白银ETF--iShares Silver Trust持仓报告\n\n接口: macro_cons_silver\n\n目标地址: https://datacenter.jin10.com/reportType/dc_etf_sliver\n\n描述: 全球最大白银 ETF--iShares Silver Trust 持仓报告, 数据区间从 20041202-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 商品    | object  | -        |\n| 日期    | object  | -        |\n| 总库存   | float64 | 注意单位: 吨  |\n| 增持/减持 | float64 | 注意单位: 吨  |\n| 总价值   | float64 | 注意单位: 美元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_cons_silver_df = ak.macro_cons_silver()\nprint(macro_cons_silver_df)\n```\n\n数据示例\n\n```\n      商品      日期      总库存   增持/减持   总价值\n0     白银  2014-12-02  10891.14   68.54   5505643206\n1     白银  2014-12-03  10806.20  -84.94   5614273871\n2     白银  2014-12-05  10737.66  -68.54   5626921446\n3     白银  2014-12-11  10648.28  -89.38   5839725280\n4     白银  2014-12-13  10606.57  -41.71   5820097631\n   ..         ...       ...     ...          ...\n1183  白银  2024-03-26  13159.26   52.62  10392678118\n1184  白银  2024-03-27  13190.55   31.29  10392678118\n1185  白银  2024-04-01  13399.59  209.04  10567503086\n1186  白银  2024-04-02  13487.76   88.17  11118260677\n1187  白银  2024-04-03  13601.92  114.16  11476815280\n[1188 rows x 5 columns]\n```\n\n#### 欧佩克报告\n\n接口: macro_cons_opec_month\n\n目标地址: https://datacenter.jin10.com/reportType/dc_opec_report\n\n描述: 欧佩克报告, 数据区间从 20170118-至今\n\n限量: 单次返回所有历史数据, 以网页数据为准.\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| 日期    | object  | -   |\n| 阿尔及利亚 | float64 | -   |\n| 安哥拉   | float64 | -   |\n| 厄瓜多尔  | float64 | -   |\n| 加蓬    | float64 | -   |\n| 伊朗    | float64 | -   |\n| 伊拉克   | float64 | -   |\n| 科威特   | float64 | -   |\n| 利比亚   | float64 | -   |\n| 尼日利亚  | float64 | -   |\n| 沙特    | float64 | -   |\n| 阿联酋   | float64 | -   |\n| 委内瑞拉  | float64 | -   |\n| 欧佩克产量 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_cons_opec_month_df = ak.macro_cons_opec_month()\nprint(macro_cons_opec_month_df)\n```\n\n数据示例\n\n```\n      日期  阿尔及利亚  安哥拉 加蓬  伊朗  ...   尼日利亚  沙特    阿联酋  委内瑞拉 欧佩克产量\n0   2016/12  108.7  167.4  20.9  372.5  ...  147.4  1044.3  309.0  203.4  3302.9\n1   2017/01  105.3  165.8  20.3  378.0  ...  153.3   980.9  295.8  200.7  3202.6\n2   2017/02  105.7  163.9  19.8  381.9  ...  156.4   995.2  293.3  199.8  3208.6\n3   2017/03  105.1  159.9  20.2  379.2  ...  145.6   990.5  290.9  198.2  3177.0\n4   2017/04  105.6  166.7  20.5  379.2  ...  149.6   993.4  290.6  196.7  3197.4\n..      ...    ...    ...   ...    ...  ...    ...     ...    ...    ...     ...\n70  2023/01  101.5  115.5  18.3  255.7  ...  133.6  1031.9  304.5   68.6  2887.6\n71  2023/02  101.7  108.4  19.6  257.1  ...  138.0  1036.1  304.2   70.0  2892.4\n72  2023/03  101.3  100.7  20.3  256.7  ...  135.4  1040.5  303.8   69.5  2879.7\n73  2023/04  100.5  108.5  20.5  263.0  ...  118.0  1050.0  302.8   72.4  2860.3\n74  2023/05   97.4  114.5  21.0  267.9  ...  126.9   997.7  289.4   73.5  2806.5\n[75 rows x 13 columns]\n```\n\n#### 伦敦金属交易所\n\n##### 持仓报告\n\n接口: macro_euro_lme_holding\n\n目标地址: https://datacenter.jin10.com/reportType/dc_lme_traders_report\n\n描述: 伦敦金属交易所(LME)-持仓报告, 数据区间从 20151022-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称     | 类型 | 描述  |\n|--------|----|-----|\n| 日期     | -  | -   |\n| 铜-多头仓位 | -  | -   |\n| ...    | -  | ... |\n| 铝-净仓位  | -  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_lme_holding_df = ak.macro_euro_lme_holding()\nprint(macro_euro_lme_holding_df)\n```\n\n数据示例\n\n```\n        日期     铜-多头仓位    铜-空头仓位  ...     铝-多头仓位     铝-空头仓位      铝-净仓位\n0    2015-10-22  107991.00 -84529.00  ...  327120.00 -304606.00  631726.00\n1    2015-10-23  107881.00 -85003.00  ...  326996.00 -304797.00  631793.00\n2    2015-10-26  108904.00 -84484.00  ...  327814.00 -305974.00  633788.00\n3    2015-10-27  108818.00 -83438.00  ...  331239.00 -305348.00  636587.00\n4    2015-10-28  109631.00 -84558.00  ...  331586.00 -302432.00  634018.00\n..          ...        ...       ...  ...        ...        ...        ...\n751  2021-08-06    8785.16  12656.84  ...   37711.94   42438.71   -4726.77\n752  2021-08-13    8872.87  12349.74  ...   37007.09   41819.17   -4812.08\n753  2021-08-20    7676.48  10610.98  ...   35348.31   41029.67   -5681.36\n754  2021-08-27    8262.28  11853.99  ...   36410.21   40359.70   -3949.49\n755  2021-09-03    7453.93  10574.36  ...   35312.19   42067.01   -6754.82\n[756 rows x 19 columns]\n```\n\n##### 库存报告\n\n接口: macro_euro_lme_stock\n\n目标地址: https://datacenter.jin10.com/reportType/dc_lme_report\n\n描述: 伦敦金属交易所(LME)-库存报告, 数据区间从 20140702-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称     | 类型  | 描述  |\n|--------|-----|-----|\n| 日期     | -   | -   |\n| 铜-库存   | -   | -   |\n| ...    | ... | ... |\n| 镍-注销仓单 | -   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_euro_lme_stock_df = ak.macro_euro_lme_stock()\nprint(macro_euro_lme_stock_df)\n```\n\n数据示例\n\n```\n        日期    铜-库存  铜-注册仓单  铜-注销仓单  ...   铝-注销仓单    镍-库存  镍-注册仓单  镍-注销仓单\n0     2014-07-02  156775  128475   28300  ...  2990950  305394  192672  112722\n1     2014-07-03  157050  129250   27800  ...  2983375  304938  192972  111966\n2     2014-07-04  156500  129250   27250  ...  2974775  304536  192900  111636\n3     2014-07-07  159350  126350   33000  ...  2965600  305394  194334  111060\n4     2014-07-08  158050  126975   31075  ...  2963275  305280  196404  108876\n          ...     ...     ...     ...  ...      ...     ...     ...     ...\n2144  2024-03-25  117900   99250   18650  ...   218650   77454   71178    6276\n2145  2024-03-26  117400   97725   19675  ...   214825   77076   71148    5928\n2146  2024-03-27  113100   97725   15375  ...   214075   76836   70716    6120\n2147  2024-03-28  112475   97775   14700  ...   212025   77148   70374    6774\n2148  2024-04-02  111925   97775   14150  ...   209175   77772   68916    8856\n[2149 rows x 19 columns]\n```\n\n#### 美国商品期货交易委员会\n\n##### 外汇类非商业持仓报告\n\n接口: macro_usa_cftc_nc_holding\n\n目标地址: https://datacenter.jin10.com/reportType/dc_cftc_nc_report\n\n描述: 美国商品期货交易委员会CFTC外汇类非商业持仓报告, 数据区间从 19830107-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称      | 类型      | 描述 |\n|---------|---------|----|\n| 日期      | object  | -  |\n| 美元-多头仓位 | float64 | -  |\n| ...     | ...     | -  |\n| 澳元-净仓位  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_cftc_nc_holding_df = ak.macro_usa_cftc_nc_holding()\nprint(macro_usa_cftc_nc_holding_df)\n```\n\n数据示例\n\n```\n              日期   美元-多头仓位   美元-空头仓位  ...  澳元-多头仓位   澳元-空头仓位    澳元-净仓位\n0     1986-01-15       0.0       0.0  ...      0.0       0.0       0.0\n1     1986-01-31       0.0       0.0  ...      0.0       0.0       0.0\n2     1986-02-14       0.0       0.0  ...      0.0       0.0       0.0\n3     1986-02-28       0.0       0.0  ...      0.0       0.0       0.0\n4     1986-03-14       0.0       0.0  ...      0.0       0.0       0.0\n          ...       ...       ...  ...      ...       ...       ...\n1802  2024-02-27  577840.0  509268.0  ...  49640.0  128816.0  -79176.0\n1803  2024-03-05  608135.0  540058.0  ...  53966.0  138709.0  -84743.0\n1804  2024-03-12  581059.0  517852.0  ...  41591.0  132431.0  -90840.0\n1805  2024-03-19  632995.0  528809.0  ...  38207.0  145745.0 -107538.0\n1806  2024-03-26  656753.0  513199.0  ...  34438.0  139890.0 -105452.0\n[1807 rows x 28 columns]\n```\n\n##### 商品类非商业持仓报告\n\n接口: macro_usa_cftc_c_holding\n\n目标地址: https://datacenter.jin10.com/reportType/dc_cftc_c_report\n\n描述: 美国商品期货交易委员会CFTC商品类非商业持仓报告, 数据区间从 19830107-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称        | 类型      | 描述 |\n|-----------|---------|----|\n| 日期        | object  | -  |\n| 纽约原油-多头仓位 | float64 | -  |\n| ...       | ...     | -  |\n| 玉米-净仓位    | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_cftc_c_holding_df = ak.macro_usa_cftc_c_holding()\nprint(macro_usa_cftc_c_holding_df)\n```\n\n数据示例\n\n```\n            日期  纽约原油-多头仓位  纽约原油-空头仓位  ...   玉米-多头仓位   玉米-空头仓位    玉米-净仓位\n0     1986-01-15        0.0        0.0  ...   45615.0   16565.0   29050.0\n1     1986-01-31        0.0        0.0  ...   32135.0   34145.0   -2010.0\n2     1986-02-14        0.0        0.0  ...   14030.0   50275.0  -36245.0\n3     1986-02-28        0.0        0.0  ...   17735.0   59835.0  -42100.0\n4     1986-03-14        0.0        0.0  ...   18725.0   58090.0  -39365.0\n          ...        ...        ...  ...       ...       ...       ...\n1802  2024-02-27   353996.0   129206.0  ...  295676.0  528280.0 -232604.0\n1803  2024-03-05   342161.0   103649.0  ...  291829.0  522716.0 -230887.0\n1804  2024-03-12   329318.0    95530.0  ...  297244.0  486274.0 -189030.0\n1805  2024-03-19   366016.0    88259.0  ...  294129.0  469642.0 -175513.0\n1806  2024-03-26   376903.0    98876.0  ...  293932.0  471953.0 -178021.0\n[1807 rows x 37 columns]\n```\n\n##### 外汇类商业持仓报告\n\n接口: macro_usa_cftc_merchant_currency_holding\n\n目标地址: https://datacenter.jin10.com/reportType/dc_cftc_merchant_currency\n\n描述: 美国商品期货交易委员会CFTC外汇类商业持仓报告, 数据区间从 19860115-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称      | 类型      | 描述 |\n|---------|---------|----|\n| 日期      | object  | -  |\n| 美元-多头仓位 | float64 | -  |\n| ...     | ...     | -  |\n| 澳元-净仓位  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_cftc_merchant_currency_holding_df = ak.macro_usa_cftc_merchant_currency_holding()\nprint(macro_usa_cftc_merchant_currency_holding_df)\n```\n\n数据示例\n\n```\n           日期    美元-多头仓位    美元-空头仓位  ...   澳元-多头仓位  澳元-空头仓位    澳元-净仓位\n0     1986-01-15        0.0        0.0  ...       0.0      0.0       0.0\n1     1986-01-31        0.0        0.0  ...       0.0      0.0       0.0\n2     1986-02-14        0.0        0.0  ...       0.0      0.0       0.0\n3     1986-02-28        0.0        0.0  ...       0.0      0.0       0.0\n4     1986-03-14        0.0        0.0  ...       0.0      0.0       0.0\n          ...        ...        ...  ...       ...      ...       ...\n1802  2024-02-27   919724.0   975823.0  ...  129292.0  39515.0   89777.0\n1803  2024-03-05   969755.0  1022287.0  ...  151903.0  56158.0   95745.0\n1804  2024-03-12  1024121.0  1063261.0  ...  151731.0  54053.0   97678.0\n1805  2024-03-19   945525.0  1044421.0  ...  158919.0  42857.0  116062.0\n1806  2024-03-26   887615.0  1034843.0  ...  162079.0  44539.0  117540.0\n[1807 rows x 28 columns]\n```\n\n##### 商品类商业持仓报告\n\n接口: macro_usa_cftc_merchant_goods_holding\n\n目标地址: https://datacenter.jin10.com/reportType/dc_cftc_merchant_goods\n\n描述: 美国商品期货交易委员会 CFTC 商品类商业持仓报告, 数据区间从 19860115-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称        | 类型      | 描述 |\n|-----------|---------|----|\n| 日期        | object  | -  |\n| 纽约原油-多头仓位 | float64 | -  |\n| ...       | ...     | -  |\n| 玉米-净仓位    | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_cftc_merchant_goods_holding_df = ak.macro_usa_cftc_merchant_goods_holding()\nprint(macro_usa_cftc_merchant_goods_holding_df)\n```\n\n数据示例\n\n```\n      日期  纽约原油-多头仓位  纽约原油-空头仓位  ...   玉米-多头仓位   玉米-空头仓位    玉米-净仓位\n0     1986-01-15        0.0        0.0  ...  307790.0  307815.0     -25.0\n1     1986-01-31        0.0        0.0  ...  323200.0  247390.0   75810.0\n2     1986-02-14        0.0        0.0  ...  303885.0  205150.0   98735.0\n3     1986-02-28        0.0        0.0  ...  288625.0  204725.0   83900.0\n4     1986-03-14        0.0        0.0  ...  276865.0  220480.0   56385.0\n          ...        ...        ...  ...       ...       ...       ...\n1802  2024-02-27   584071.0   832325.0  ...  670777.0  420149.0  250628.0\n1803  2024-03-05   555705.0   827360.0  ...  646676.0  407215.0  239461.0\n1804  2024-03-12   600736.0   865790.0  ...  658122.0  459072.0  199050.0\n1805  2024-03-19   568958.0   877361.0  ...  683677.0  500187.0  183490.0\n1806  2024-03-26   592280.0   907819.0  ...  697082.0  502483.0  194599.0\n[1807 rows x 37 columns]\n```\n\n#### 芝加哥交易所\n\n##### 贵金属\n\n接口: macro_usa_cme_merchant_goods_holding\n\n目标地址: https://datacenter.jin10.com/org\n\n描述: CME-贵金属, 数据区间从 20180405-至今\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 日期  | object  | -  |\n| 品种  | object  | -  |\n| 成交量 | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_usa_cme_merchant_goods_holding_df = ak.macro_usa_cme_merchant_goods_holding()\nprint(macro_usa_cme_merchant_goods_holding_df)\n```\n\n数据示例\n\n```\n               日期     品种     成交量\n0      2018-04-05   铜-看跌     597\n1      2018-04-05  黄金-期货  288119\n2      2018-04-05  黄金-期权   54434\n3      2018-04-05  黄金-看涨   36821\n4      2018-04-05  黄金-看跌   17613\n           ...    ...     ...\n30184  2024-04-04   铜-看跌    5704\n30185  2024-04-04   铜-看涨   17858\n30186  2024-04-04   铜-期权   23562\n30187  2024-04-04  铂金-看涨    1077\n30188  2024-04-04  黄金-期货  245856\n[30189 rows x 3 columns]\n```\n\n### 全球宏观\n\n#### 宏观日历\n\n接口: macro_info_ws\n\n目标地址: https://wallstreetcn.com/calendar\n\n描述: 华尔街见闻-日历-宏观\n\n限量: 单次返回指定 date 的数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date=\"20240514\" |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 时间  | object  | -  |\n| 地区  | object  | -  |\n| 事件  | object  | -  |\n| 重要性 | int64   | -  |\n| 今值  | float64 | -  |\n| 预期  | float64 | -  |\n| 前值  | float64 | -  |\n| 链接  | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmacro_info_ws_df = ak.macro_info_ws(date=\"20240514\")\nprint(macro_info_ws_df)\n```\n\n数据示例\n\n```\n                     时间  ...                                                 链接\n0   2024-05-14 01:00:00  ...\n1   2024-05-14 07:50:00  ...  https://wallstreetcn.com/calendar/JP111746/ove...\n2   2024-05-14 07:50:00  ...  https://wallstreetcn.com/calendar/JP111747/ove...\n3   2024-05-14 10:00:00  ...\n4   2024-05-14 12:02:00  ...\n5   2024-05-14 14:00:00  ...  https://wallstreetcn.com/calendar/UK121576/ove...\n6   2024-05-14 14:00:00  ...  https://wallstreetcn.com/calendar/UK121563/ove...\n7   2024-05-14 14:00:00  ...  https://wallstreetcn.com/calendar/UK121574/ove...\n8   2024-05-14 14:00:00  ...  https://wallstreetcn.com/calendar/UK121573/ove...\n9   2024-05-14 14:00:00  ...  https://wallstreetcn.com/calendar/UK121578/ove...\n10  2024-05-14 14:00:00  ...  https://wallstreetcn.com/calendar/UK121577/ove...\n11  2024-05-14 14:00:00  ...  https://wallstreetcn.com/calendar/DE112128/ove...\n12  2024-05-14 14:00:00  ...  https://wallstreetcn.com/calendar/DE112139/ove...\n13  2024-05-14 14:00:00  ...  https://wallstreetcn.com/calendar/DE112152/ove...\n14  2024-05-14 14:00:00  ...  https://wallstreetcn.com/calendar/DE112151/ove...\n15  2024-05-14 17:00:00  ...  https://wallstreetcn.com/calendar/EA152021/ove...\n16  2024-05-14 17:00:00  ...  https://wallstreetcn.com/calendar/DE152230/ove...\n17  2024-05-14 17:00:00  ...  https://wallstreetcn.com/calendar/DE152229/ove...\n18  2024-05-14 18:00:00  ...  https://wallstreetcn.com/calendar/US151153/ove...\n19  2024-05-14 20:30:00  ...  https://wallstreetcn.com/calendar/US111043/ove...\n20  2024-05-14 20:30:00  ...  https://wallstreetcn.com/calendar/US111042/ove...\n21  2024-05-14 20:30:00  ...  https://wallstreetcn.com/calendar/US111049/ove...\n22  2024-05-14 20:30:00  ...  https://wallstreetcn.com/calendar/US111048/ove...\n23  2024-05-14 20:30:00  ...  https://wallstreetcn.com/calendar/CA173202/ove...\n24  2024-05-14 21:15:00  ...\n25  2024-05-14 22:00:00  ...\n26  2024-05-15 00:00:00  ...\n27  2024-05-15 00:00:00  ...\n[28 rows x 8 columns]\n```\n\n#### 全球宏观事件\n\n接口: news_economic_baidu\n\n目标地址: https://gushitong.baidu.com/calendar\n\n描述: 全球宏观指标重大事件\n\n限量: 单次返回指定 date 的所有历史数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date=\"20241107\" |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 日期  | object  | -       |\n| 时间  | object  | -       |\n| 地区  | object  | -       |\n| 事件  | object  | -       |\n| 公布  | float64 | -       |\n| 预期  | float64 | -       |\n| 前值  | float64 | -       |\n| 重要性 | float64 | 数值越大越重要 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nnews_economic_baidu_df = ak.news_economic_baidu(date=\"20241107\")\nprint(news_economic_baidu_df)\n```\n\n数据示例\n\n```\n        日期     时间   地区  ...      预期       前值  重要性\n0   2024-11-07  01:30   巴西  ...     NaN      -16.72    1\n1   2024-11-07  02:00   巴西  ...   49.76       50.23    1\n2   2024-11-07  05:30   巴西  ...   11.25       10.75    1\n3   2024-11-07  06:30   美国  ...     NaN  3091171.16    1\n4   2024-11-07  06:30   美国  ...     NaN     6004.39    1\n..         ...    ...  ...  ...     ...         ...  ...\n95  2024-11-07  20:00   英国  ...    4.75        5.00    2\n96  2024-11-07  21:00  俄罗斯  ...     NaN     6285.00    1\n97  2024-11-07  21:00   巴西  ...     NaN      -11.40    1\n98  2024-11-07  21:00   巴西  ...     NaN       -0.40    1\n99  2024-11-07  21:30   美国  ...  187.50      186.20    2\n[100 rows x 8 columns]\n```\n"
  },
  {
    "path": "docs/data/nlp/nlp.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 自然语言处理\n\n### 知识图谱\n\n接口: nlp_ownthink\n\n目标地址: https://ownthink.com/\n\n描述: 思知-知识图谱的接口, 以此来查询知识图谱数据\n\n限量: 单次返回查询的数据结果\n\n输入参数\n\n| 名称        | 类型  | 描述                                                        |\n|-----------|-----|-----------------------------------------------------------|\n| word      | str | word=\"人工智能\"                                               |\n| indicator | str | indicator=\"entity\"; Please refer **Indicator Info** table |\n\nIndicator Info\n\n| fields | type             | description                    |\n|--------|------------------|--------------------------------|\n| entity | str              | \t实体名                           |\n| desc   | str              | \t实体简介                          |\n| tag    | list             | \t实体标签                          |\n| avg    | pandas.DataFrame | \t实体属性值，第一列为实体的属性，第二列为实体属性所对应的值 |\n\n输出参数-entity\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | str | 结果  |\n\n接口示例-entity\n\n```python\nimport akshare as ak\n\nnlp_ownthink_df = ak.nlp_ownthink(word=\"人工智能\", indicator=\"entity\")\nprint(nlp_ownthink_df)\n```\n\n数据示例-entity\n\n```\n人工智能[计算机科学的一个分支]\n```\n\n输出参数-desc\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | str | 结果  |\n\n接口示例-desc\n\n```python\nimport akshare as ak\n\nnlp_ownthink_df = ak.nlp_ownthink(word=\"人工智能\", indicator=\"desc\")\nprint(nlp_ownthink_df)\n```\n\n数据示例-desc\n\n```\n人工智能（Artificial Intelligence），英文缩写为AI。\n```\n\n输出参数-avg\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | str | 结果  |\n\n接口示例-avg\n\n```python\nimport akshare as ak\n\nnlp_ownthink_df = ak.nlp_ownthink(word=\"人工智能\", indicator=\"avg\")\nprint(nlp_ownthink_df)\n```\n\n数据示例-avg\n\n```\n     字段                       值\n0   中文名                    人工智能\n1   外文名  ARTIFICIALINTELLIGENCE\n2    简称                      AI\n3  提出时间                   1956年\n4  提出地点             DARTMOUTH学会\n5  名称来源             雨果·德·加里斯的著作\n```\n\n输出参数-tag\n\n| 名称  | 类型   | 描述  |\n|-----|------|-----|\n| -   | list | 结果  |\n\n接口示例-tag\n\n```python\nimport akshare as ak\n\nnlp_ownthink_df = ak.nlp_ownthink(word=\"人工智能\", indicator=\"tag\")\nprint(nlp_ownthink_df)\n```\n\n数据示例-tag\n\n```\n['中国通信学会', '学科']\n```\n\n### 智能问答\n\n接口: nlp_answer\n\n目标地址: https://ownthink.com/robot.html\n\n描述: 思知-对话机器人的接口, 以此来进行智能问答\n\n限量: 单次返回查询的数据结果\n\n输入参数\n\n| 名称       | 类型  | 描述               |\n|----------|-----|------------------|\n| question | str | question=\"姚明的身高\" |\n\n输出参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | str | 答案  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nnlp_answer_df = ak.nlp_answer(question=\"姚明的身高\")\nprint(nlp_answer_df)\n```\n\n数据示例\n\n```\n姚明的身高是226厘米\n```\n"
  },
  {
    "path": "docs/data/option/option.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 期权数据\n\n### 期权基础信息\n\n主要提供股指期权、ETF 期权和商品期货期权相关的数据\n\n#### 期权交易所\n\n此表包括目前所有具有期权品种的交易所\n\n| 交易所名称                                | 交易所代码 | 首页地址                    |\n|--------------------------------------|-------|-------------------------|\n| [中国金融期货交易所](http://www.cffex.com.cn) | CFFEX | http://www.cffex.com.cn |\n| [上海期货交易所](https://www.shfe.com.cn)   | SHFE  | https://www.shfe.com.cn |\n| [上海国际能源交易中心](https://www.ine.cn)     | INE   | https://www.ine.cn      |\n| [郑州商品交易所](http://www.czce.com.cn)    | CZCE  | http://www.czce.com.cn  |\n| [大连商品交易所](http://www.dce.com.cn)     | DCE   | http://www.dce.com.cn   |\n| [广州期货交易所](http://www.gfex.com.cn)    | GFEX  | http://www.gfex.com.cn  |\n| [上海证券交易所](https://www.sse.com.cn)    | SSE   | https://www.sse.com.cn  |\n| [深圳证券交易所](https://www.szse.cn)       | SZSE  | https://www.szse.cn     |\n\n#### 期权交易时间\n\n##### 商品期权\n\n| 交易所        | 交易所代码 | 品种名称    | 品种代码 | 集合竞价                     | 日盘时间                                  | 夜盘时间        |\n|------------|-------|---------|------|--------------------------|---------------------------------------|-------------|\n| 上海期货交易所    | SHFE  | 铝期权     | al-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海期货交易所    | SHFE  | 氧化铝期权   | ao-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海期货交易所    | SHFE  | 铜期权     | cu-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海期货交易所    | SHFE  | 镍期权     | ni-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海期货交易所    | SHFE  | 铅期权     | pb-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海期货交易所    | SHFE  | 锡期权     | sn-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海期货交易所    | SHFE  | 锌期权     | zn-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-01:00 |\n| 上海期货交易所    | SHFE  | 螺纹钢期权   | rb-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 上海期货交易所    | SHFE  | 天然橡胶期权  | ru-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 上海期货交易所    | SHFE  | 合成橡胶期权  | br-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 上海期货交易所    | SHFE  | 白银期权    | ag-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-02:30 |\n| 上海期货交易所    | SHFE  | 黄金期权    | au-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-02:30 |\n| 上海国际能源交易中心 | INE   | 原油期权    | sc-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-02:30 |\n| 上海国际能源交易中心 | INE   | 20号胶期权  | nr-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 黄大豆1号期权 | a-o  | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 黄大豆2号期权 | b-o  | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 玉米期权    | c-o  | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 玉米淀粉期权  | cs-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 苯乙烯期权   | eb-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 乙二醇期权   | eg-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 铁矿石期权   | i-o  | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 聚乙烯期权   | l-o  | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 豆粕期权    | m-o  | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 棕榈油期权   | p-o  | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 液化石油气期权 | pg-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 聚丙烯期权   | pp-o | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 聚氯乙烯期权  | v-o  | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 豆油期权    | y-o  | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 大连商品交易所    | DCE   | 鸡蛋期权    | jd-o | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 大连商品交易所    | DCE   | 生猪期权    | lh-o | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 大连商品交易所    | DCE   | 原木期权    | lg-o | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 棉花期权    | CF-O | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 玻璃期权    | FG-O | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 甲醇期权    | MA-O | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 菜籽油期权   | OI-O | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 短纤期权    | PF-O | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 菜粕期权    | RM-O | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 纯碱期权    | SA-O | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 白糖期权    | SR-O | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | PTA期权   | TA-O | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 动力煤期权   | ZC-O | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 对二甲苯期权  | PX-O | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 烧碱期权    | SH-O | 20:55-21:00, 08:55-09:00 | 09:00-10:15, 10:30-11:30, 13:30-15:00 | 21:00-23:00 |\n| 郑州商品交易所    | CZCE  | 苹果期权    | AP-O | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 红枣期权    | CJ-O | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 花生期权    | PK-O | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 硅铁期权    | SF-O | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 硅锰期权    | SM-O | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 郑州商品交易所    | CZCE  | 尿素期权    | UR-O | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 广州期货交易所    | GFEX  | 工业硅期权   | SI-O | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 广州期货交易所    | GFEX  | 碳酸锂期权   | LC-O | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n| 广州期货交易所    | GFEX  | 多晶硅期权   | PS-O | 08:55-09:00              | 09:00-10:15, 10:30-11:30, 13:30-15:00 | -           |\n\n*郑州商品交易所：夜盘品种不参加竞价，夜盘未成交的申报单可在 8：55-8：59 分撤单*\n\n##### 股指期权\n\n| 交易所       | 交易所代码 | 品种名称       | 品种代码 | 集合竞价                     | 交易时间                     | 夜盘时间 |\n|-----------|-------|------------|------|--------------------------|--------------------------|------|\n| 中国金融期货交易所 | CFFEX | 沪深300股指期权  | IO   | 09:25-09:30, 14:57-15:00 | 09:30-11:30, 13:00-14:57 | -    |\n| 中国金融期货交易所 | CFFEX | 上证50股指期权   | HO   | 09:25-09:30, 14:57-15:00 | 09:30-11:30, 13:00-14:57 | -    |\n| 中国金融期货交易所 | CFFEX | 中证1000股指期权 | MO   | 09:25-09:30, 14:57-15:00 | 09:30-11:30, 13:00-14:57 | -    |\n\n##### ETF期权\n\n| 交易所     | 交易所代码 | 品种名称           | 品种代码   | 集合竞价                     | 交易时间                     | 夜盘时间 |\n|---------|-------|----------------|--------|--------------------------|--------------------------|------|\n| 上海证券交易所 | SSE   | 华夏上证50ETF期权    | 510050 | 09:15-09:25, 14:57-15:00 | 09:30-11:30, 13:00-14:57 | -    |\n| 上海证券交易所 | SSE   | 华泰柏瑞沪深300ETF期权 | 510300 | 09:15-09:25, 14:57-15:00 | 09:30-11:30, 13:00-14:57 | -    |\n| 上海证券交易所 | SSE   | 南方中证500ETF期权   | 510500 | 09:15-09:25, 14:57-15:00 | 09:30-11:30, 13:00-14:57 | -    |\n| 上海证券交易所 | SSE   | 华夏科创50ETF期权    | 588000 | 09:15-09:25, 14:57-15:00 | 09:30-11:30, 13:00-14:57 | -    |\n| 上海证券交易所 | SSE   | 易方达科创50ETF期权   | 588080 | 09:15-09:25, 14:57-15:00 | 09:30-11:30, 13:00-14:57 | -    |\n| 深圳证券交易所 | SZSE  | 嘉实沪深300ETF期权   | 159919 | 09:15-09:25, 14:57-15:00 | 09:30-11:30, 13:00-14:57 | -    |\n| 深圳证券交易所 | SZSE  | 嘉实中证500ETF期权   | 159922 | 09:15-09:25, 14:57-15:00 | 09:30-11:30, 13:00-14:57 | -    |\n| 深圳证券交易所 | SZSE  | 易方达创业板ETF期权    | 159915 | 09:15-09:25, 14:57-15:00 | 09:30-11:30, 13:00-14:57 | -    |\n| 深圳证券交易所 | SZSE  | 易方达深证100ETF    | 159901 | 09:15-09:25, 14:57-15:00 | 09:30-11:30, 13:00-14:57 | -    |\n\n#### 期权上市时间\n\n##### 金融期权\n\n###### 中国金融期货交易所\n\n| 名称             | 类型    | 交易所       | 上市时间       |\n|----------------|-------|-----------|------------|\n| 沪深300股指期权      | 股指期权  | 中国金融期货交易所 | 2019-12-23 |\n| 中证1000股指期权     | 股指期权  | 中国金融期货交易所 | 2022-07-22 |\n| 上证50股指期权       | 股指期权  | 中国金融期货交易所 | 2022-12-19 |\n\n###### 上海证券交易所\n\n| 名称             | 类型    | 交易所       | 上市时间       |\n|----------------|-------|-----------|------------|\n| 华夏上证50ETF期权    | ETF期权 | 上海证券交易所   | 2015-02-09 |\n| 华泰柏瑞沪深300ETF期权 | ETF期权 | 上海证券交易所   | 2019-12-23 |\n| 南方中证500ETF期权   | ETF期权 | 上海证券交易所   | 2022-09-19 |\n| 华夏科创50ETF期权    | ETF期权 | 上海证券交易所   | 2023-06-05 |\n| 易方达科创50ETF期权   | ETF期权 | 上海证券交易所   | 2023-06-05 |\n\n###### 深圳证券交易所\n\n| 名称             | 类型    | 交易所       | 上市时间       |\n|----------------|-------|-----------|------------|\n| 嘉实沪深300ETF期权   | ETF期权 | 深圳证券交易所   | 2019-12-23 |\n| 嘉实中证500ETF期权   | ETF期权 | 深圳证券交易所   | 2022-09-19 |\n| 易方达创业板ETF期权    | ETF期权 | 深圳证券交易所   | 2022-09-19 |\n| 易方达深证100ETF    | ETF期权 | 深圳证券交易所   | 2022-12-12 |\n\n##### 商品期权\n\n###### 上海期货交易所\n\n| 交易所     | 对应名称   | 上市时间       |\n|---------|--------|------------|\n| 上海期货交易所 | 铜期权    | 2018-09-21 |\n| 上海期货交易所 | 天然橡胶期权 | 2019-01-28 |\n| 上海期货交易所 | 黄金期权   | 2019-12-20 |\n| 上海期货交易所 | 铝期权    | 2020-08-10 |\n| 上海期货交易所 | 锌期权    | 2020-08-10 |\n| 上海期货交易所 | 原油期权   | 2021-06-21 |\n| 上海期货交易所 | 螺纹钢期权  | 2022-12-26 |\n| 上海期货交易所 | 白银期权   | 2022-12-26 |\n| 上海期货交易所 | 合成橡胶期权 | 2023-07-28 |\n| 上海期货交易所 | 铅期权    | 2024-09-02 |\n| 上海期货交易所 | 镍期权    | 2024-09-02 |\n| 上海期货交易所 | 锡期权    | 2024-09-02 |\n| 上海期货交易所 | 氧化铝期权  | 2024-09-02 |\n\n###### 大连商品交易所\n\n| 交易所     | 对应名称    | 上市时间       |\n|---------|---------|------------|\n| 大连商品交易所 | 豆粕期权    | 2017-03-31 |\n| 大连商品交易所 | 玉米期权    | 2019-01-28 |\n| 大连商品交易所 | 铁矿石期权   | 2019-12-09 |\n| 大连商品交易所 | 液化石油气期权 | 2020-03-30 |\n| 大连商品交易所 | 聚乙烯期权   | 2020-07-06 |\n| 大连商品交易所 | 聚氯乙烯期权  | 2020-07-06 |\n| 大连商品交易所 | 聚丙烯期权   | 2020-07-06 |\n| 大连商品交易所 | 棕榈油期权   | 2021-06-18 |\n| 大连商品交易所 | 黄大豆1号期权 | 2022-08-08 |\n| 大连商品交易所 | 黄大豆2号期权 | 2022-08-08 |\n| 大连商品交易所 | 豆油期权    | 2022-08-08 |\n| 大连商品交易所 | 乙二醇期权   | 2023-05-15 |\n| 大连商品交易所 | 苯乙烯期权   | 2023-05-15 |\n| 大连商品交易所 | 鸡蛋期权    | 2024-08-23 |\n| 大连商品交易所 | 玉米淀粉期权  | 2024-08-23 |\n| 大连商品交易所 | 生猪期权    | 2024-08-23 |\n| 大连商品交易所 | 原木期权    | 2024-11-19 |\n\n###### 郑州商品交易所\n\n| 交易所     | 品种名称  | 行权方式 | 上市时间       |\n|---------|-------|------|------------|\n| 郑州商品交易所 | 白糖期权  | 美式   | 2017-04-19 |\n| 郑州商品交易所 | 棉花期权  | 美式   | 2019-01-28 |\n| 郑州商品交易所 | 甲醇期权  | 美式   | 2019-12-16 |\n| 郑州商品交易所 | PTA期权 | 美式   | 2019-12-16 |\n| 郑州商品交易所 | 菜籽粕期权 | 美式   | 2020-01-16 |\n| 郑州商品交易所 | 动力煤期权 | 美式   | 2020-06-30 |\n| 郑州商品交易所 | 菜籽油期权 | 美式   | 2022-08-26 |\n| 郑州商品交易所 | 花生期权  | 美式   | 2022-08-26 |\n| 郑州商品交易所 | 烧碱期权  | 美式   | 2023-09-15 |\n| 郑州商品交易所 | 二甲苯期权 | 美式   | 2023-09-15 |\n| 郑州商品交易所 | 短纤期权  | 美式   | 2023-10-20 |\n| 郑州商品交易所 | 纯碱期权  | 美式   | 2023-10-20 |\n| 郑州商品交易所 | 锰硅期权  | 美式   | 2023-10-20 |\n| 郑州商品交易所 | 硅铁期权  | 美式   | 2023-10-20 |\n| 郑州商品交易所 | 尿素期权  | 美式   | 2023-10-20 |\n| 郑州商品交易所 | 苹果期权  | 美式   | 2023-10-20 |\n| 郑州商品交易所 | 红枣期权  | 美式   | 2024-06-21 |\n| 郑州商品交易所 | 玻璃期权  | 美式   | 2024-06-21 |\n| 郑州商品交易所 | 瓶片期权  | 美式   | 2024-12-27 |\n\n###### 广州期货交易所\n\n| 交易所     | 品种名称  | 行权方式 | 上市时间       |\n|---------|-------|------|------------|\n| 广州期货交易所 | 工业硅期权 | 美式   | 2022-12-23 |\n| 广州期货交易所 | 碳酸锂期权 | 美式   | 2023-07-24 |\n| 广州期货交易所 | 多晶硅期权 | 美式   | 2024-12-26 |\n\n### 期权合约信息\n\n接口: option_contract_info_ctp\n\n目标地址: http://openctp.cn/instruments.html\n\n描述: openctp 期权合约信息\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称      | 类型      | 描述 |\n|---------|---------|----|\n| 交易所ID   | object  | -  |\n| 合约ID    | object  | -  |\n| 合约名称    | object  | -  |\n| 商品类别    | object  | -  |\n| 品种ID    | object  | -  |\n| 合约乘数    | int64   | -  |\n| 最小变动价位  | float64 | -  |\n| 做多保证金率  | float64 | -  |\n| 做空保证金率  | float64 | -  |\n| 做多保证金/手 | float64 | -  |\n| 做空保证金/手 | float64 | -  |\n| 开仓手续费率  | float64 | -  |\n| 开仓手续费/手 | float64 | -  |\n| 平仓手续费率  | float64 | -  |\n| 平仓手续费/手 | float64 | -  |\n| 平今手续费率  | float64 | -  |\n| 平今手续费/手 | float64 | -  |\n| 交割年份    | int64   | -  |\n| 交割月份    | int64   | -  |\n| 上市日期    | object  | -  |\n| 最后交易日   | object  | -  |\n| 交割日     | object  | -  |\n| 标的合约ID  | object  | -  |\n| 标的合约乘数  | int64   | -  |\n| 期权类型    | object  | -  |\n| 行权价     | float64 | -  |\n| 合约状态    | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_contract_info_ctp_df = ak.option_contract_info_ctp()\nprint(option_contract_info_ctp_df)\n```\n\n数据示例\n\n```\n       交易所ID     合约ID      合约名称 商品类别  ... 标的合约乘数  期权类型  行权价 合约状态\n0      CFFEX  HO2511-C-2500   HO2511-C-2500    2  ...      1     1  2500.0     1\n1      CFFEX  HO2511-C-2550   HO2511-C-2550    2  ...      1     1  2550.0     1\n2      CFFEX  HO2511-C-2600   HO2511-C-2600    2  ...      1     1  2600.0     1\n3      CFFEX  HO2511-C-2650   HO2511-C-2650    2  ...      1     1  2650.0     1\n4      CFFEX  HO2511-C-2700   HO2511-C-2700    2  ...      1     1  2700.0     1\n...      ...            ...             ...  ...  ...    ...   ...     ...   ...\n18741   SZSE       90006532  创业板ETF沽12月3700    2  ...      1     2     3.7     1\n18742   SZSE       90006533   创业板ETF购3月3700    2  ...      1     1     3.7     1\n18743   SZSE       90006534   创业板ETF沽3月3700    2  ...      1     2     3.7     1\n18744   SZSE       90006535   创业板ETF购6月3700    2  ...      1     1     3.7     1\n18745   SZSE       90006536   创业板ETF沽6月3700    2  ...      1     2     3.7     1\n[18746 rows x 27 columns]\n```\n\n### 金融期权-三大交易所\n\n#### 行情数据\n\n接口: option_finance_board\n\n目标地址:\n\n1. http://www.sse.com.cn/assortment/options/price/\n2. http://www.szse.cn/market/derivative/derivative_list/index.html\n3. http://www.cffex.com.cn/hs300gzqq/\n4. http://www.cffex.com.cn/zz1000gzqq/\n\n描述: 上海证券交易所、深圳证券交易所、中国金融期货交易所的金融期权行情数据\n\n限量: 单次返回当前交易日指定合约期权行情数据\n\nP.S. 可以通过调用 ak.option_finance_sse_underlying(symbol=\"华夏上证50ETF期权\") 来获取上海证券交易所\n金融期权标的物当日行情数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                |\n|-----------|-----|---------------------------------------------------|\n| symbol    | str | symbol=\"华泰柏瑞沪深300ETF期权\"; 合约名称: **期权基础信息-金融期权**    |\n| end_month | str | end_month=\"2306\"; 合约到期月份: 2023 年 6 月, 只能获取近期合约的数据 |\n\n输出参数\n\n华夏上证 50ETF 期权\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 日期     | object  | 日期时间     |\n| 合约交易代码 | object  |          |\n| 当前价    | float64 |          |\n| 涨跌幅    | float64 |          |\n| 前结价    | float64 |          |\n| 行权价    | float64 |          |\n| 数量     | int64   | 当前总的合约数量 |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_finance_board_df = ak.option_finance_board(symbol=\"华夏上证50ETF期权\", end_month=\"2212\")\nprint(option_finance_board_df)\n```\n\n数据示例\n\n```\n       日期             合约交易代码     当前价    涨跌幅  前结价   行权价  数量\n0   20220810122215  510050C2212M02500  0.3278  -6.48  0.3505  2.50  32\n1   20220810122215  510050C2212M02550  0.2870  -6.97  0.3085  2.55  32\n2   20220810122215  510050C2212M02600  0.2481  -8.38  0.2708  2.60  32\n3   20220810122215  510050C2212M02650  0.2167  -8.33  0.2364  2.65  32\n4   20220810122215  510050C2212M02700  0.1866  -7.81  0.2024  2.70  32\n5   20220810122215  510050C2212M02750  0.1566  -9.22  0.1725  2.75  32\n6   20220810122215  510050C2212M02800  0.1312  -9.89  0.1456  2.80  32\n7   20220810122215  510050C2212M02850  0.1092 -10.34  0.1218  2.85  32\n8   20220810122215  510050C2212M02900  0.0896 -11.37  0.1011  2.90  32\n9   20220810122215  510050P2212M02500  0.0342  14.00  0.0300  2.50  32\n10  20220810122215  510050P2212M02550  0.0449  13.38  0.0396  2.55  32\n11  20220810122215  510050P2212M02600  0.0578  11.80  0.0517  2.60  32\n12  20220810122215  510050P2212M02650  0.0725  10.86  0.0654  2.65  32\n13  20220810122215  510050P2212M02700  0.0910  10.98  0.0820  2.70  32\n14  20220810122215  510050P2212M02750  0.1126  10.83  0.1016  2.75  32\n15  20220810122215  510050P2212M02800  0.1369   9.87  0.1246  2.80  32\n16  20220810122215  510050P2212M02850  0.1648   9.72  0.1502  2.85  32\n17  20220810122215  510050P2212M02900  0.1948   9.13  0.1785  2.90  32\n18  20220810122215  510050C2212M02950  0.0735 -11.34  0.0829  2.95  32\n19  20220810122215  510050P2212M02950  0.2274   8.08  0.2104  2.95  32\n20  20220810122215  510050C2212M03000  0.0597 -11.03  0.0671  3.00  32\n21  20220810122215  510050P2212M03000  0.2631   7.78  0.2441  3.00  32\n22  20220810122215  510050C2212M03100  0.0388 -11.62  0.0439  3.10  32\n23  20220810122215  510050P2212M03100  0.3440   7.40  0.3203  3.10  32\n24  20220810122215  510050C2212M03200  0.0257  -8.21  0.0280  3.20  32\n25  20220810122215  510050P2212M03200  0.4283   5.62  0.4055  3.20  32\n26  20220810122215  510050C2212M03300  0.0155 -14.36  0.0181  3.30  32\n27  20220810122215  510050P2212M03300  0.5200   4.21  0.4990  3.30  32\n28  20220810122215  510050C2212M03400  0.0104 -11.86  0.0118  3.40  32\n29  20220810122215  510050P2212M03400  0.6100   1.84  0.5990  3.40  32\n30  20220810122215  510050C2212M03500  0.0077 -10.47  0.0086  3.50  32\n31  20220810122215  510050P2212M03500  0.7047   0.82  0.6990  3.50  32\n```\n\n华泰柏瑞沪深300ETF期权\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 日期     | object  | -   |\n| 合约交易代码 | object  | -   |\n| 当前价    | float64 | -   |\n| 涨跌幅    | float64 | -   |\n| 前结价    | float64 | -   |\n| 行权价    | float64 | -   |\n| 数量     | int64   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_finance_board_df = ak.option_finance_board(symbol=\"华泰柏瑞沪深300ETF期权\", end_month=\"2212\")\nprint(option_finance_board_df)\n```\n\n数据示例\n\n```\n     日期             合约交易代码     当前价    涨跌幅     前结价  行权价  数量\n0   20220810122445  510300C2212M03500  0.6766  -5.13  0.7132  3.5  30\n1   20220810122445  510300C2212M03600  0.0000   0.00  0.6240  3.6  30\n2   20220810122445  510300C2212M03700  0.5100  -5.36  0.5389  3.7  30\n3   20220810122445  510300C2212M03800  0.4318  -5.64  0.4576  3.8  30\n4   20220810122445  510300C2212M03900  0.3600  -6.15  0.3836  3.9  30\n5   20220810122445  510300C2212M04000  0.2925  -7.05  0.3147  4.0  30\n6   20220810122445  510300C2212M04100  0.2361  -7.16  0.2543  4.1  30\n7   20220810122445  510300C2212M04200  0.1848  -7.88  0.2006  4.2  30\n8   20220810122445  510300C2212M04300  0.1427  -8.88  0.1566  4.3  30\n9   20220810122445  510300P2212M03500  0.0263  15.86  0.0227  3.5  30\n10  20220810122445  510300P2212M03600  0.0367  13.27  0.0324  3.6  30\n11  20220810122445  510300P2212M03700  0.0520  11.59  0.0466  3.7  30\n12  20220810122445  510300P2212M03800  0.0717  11.34  0.0644  3.8  30\n13  20220810122445  510300P2212M03900  0.0979   8.90  0.0899  3.9  30\n14  20220810122445  510300P2212M04000  0.1322  10.07  0.1201  4.0  30\n15  20220810122445  510300P2212M04100  0.1732   9.55  0.1581  4.1  30\n16  20220810122445  510300P2212M04200  0.2231   9.52  0.2037  4.2  30\n17  20220810122445  510300P2212M04300  0.2805   7.80  0.2602  4.3  30\n18  20220810122445  510300C2212M04400  0.1088  -9.71  0.1205  4.4  30\n19  20220810122445  510300P2212M04400  0.3411   5.15  0.3244  4.4  30\n20  20220810122445  510300C2212M04500  0.0812  -9.68  0.0899  4.5  30\n21  20220810122445  510300P2212M04500  0.4150   5.38  0.3938  4.5  30\n22  20220810122445  510300C2212M04600  0.0601 -10.03  0.0668  4.6  30\n23  20220810122445  510300P2212M04600  0.4695   0.00  0.4695  4.6  30\n24  20220810122445  510300C2212M04700  0.0442  -9.98  0.0491  4.7  30\n25  20220810122445  510300P2212M04700  0.0000   0.00  0.5516  4.7  30\n26  20220810122445  510300C2212M04800  0.0328  -9.64  0.0363  4.8  30\n27  20220810122445  510300P2212M04800  0.0000   0.00  0.6373  4.8  30\n28  20220810122445  510300C2212M04900  0.0237  -7.78  0.0257  4.9  30\n29  20220810122445  510300P2212M04900  0.7510   3.43  0.7261  4.9  30\n```\n\n南方中证500ETF期权\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 日期     | object  | -   |\n| 合约交易代码 | object  | -   |\n| 当前价    | float64 | -   |\n| 涨跌幅    | float64 | -   |\n| 前结价    | float64 | -   |\n| 行权价    | float64 | -   |\n| 数量     | int64   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_finance_board_df = ak.option_finance_board(symbol=\"南方中证500ETF期权\", end_month=\"2306\")\nprint(option_finance_board_df)\n```\n\n数据示例\n\n```\n     日期             合约交易代码     当前价    涨跌幅     前结价   行权价  数量\n0   20230605155959  510500C2306M05000  1.1560  -0.42  1.1609  5.00  24\n1   20230605155959  510500C2306M05250  0.9084  -0.33  0.9114  5.25  24\n2   20230605155959  510500C2306M05500  0.6543  -1.76  0.6660  5.50  24\n3   20230605155959  510500C2306M05750  0.4063  -2.68  0.4175  5.75  24\n4   20230605155959  510500C2306M06000  0.1789  -6.63  0.1916  6.00  24\n5   20230605155959  510500C2306M06250  0.0385 -15.75  0.0457  6.25  24\n6   20230605155959  510500C2306M06500  0.0042 -19.23  0.0052  6.50  24\n7   20230605155959  510500C2306M06750  0.0011 -15.38  0.0013  6.75  24\n8   20230605155959  510500C2306M07000  0.0006 -14.29  0.0007  7.00  24\n9   20230605155959  510500P2306M05000  0.0006  20.00  0.0005  5.00  24\n10  20230605155959  510500P2306M05250  0.0005   0.00  0.0005  5.25  24\n11  20230605155959  510500P2306M05500  0.0014 -17.65  0.0017  5.50  24\n12  20230605155959  510500P2306M05750  0.0055  -3.51  0.0057  5.75  24\n13  20230605155959  510500P2306M06000  0.0295  -0.67  0.0297  6.00  24\n14  20230605155959  510500P2306M06250  0.1371   4.26  0.1315  6.25  24\n15  20230605155959  510500P2306M06500  0.3483   0.66  0.3460  6.50  24\n16  20230605155959  510500P2306M06750  0.5948  -0.20  0.5960  6.75  24\n17  20230605155959  510500P2306M07000  0.8468   0.09  0.8460  7.00  24\n18  20230605155959  510500C2306M04900  1.2372  -1.92  1.2614  4.90  24\n19  20230605155959  510500P2306M04900  0.0006  20.00  0.0005  4.90  24\n20  20230605155959  510500C2306M07250  0.0005 -16.67  0.0006  7.25  24\n21  20230605155959  510500P2306M07250  1.0960   0.00  1.0960  7.25  24\n22  20230605155959  510500C2306M07500  0.0003   0.00  0.0003  7.50  24\n23  20230605155959  510500P2306M07500  1.3660   0.00  1.3460  7.50  24\n```\n\n华夏科创50ETF期权\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 日期     | object  | -   |\n| 合约交易代码 | object  | -   |\n| 当前价    | float64 | -   |\n| 涨跌幅    | float64 | -   |\n| 前结价    | float64 | -   |\n| 行权价    | float64 | -   |\n| 数量     | int64   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_finance_board_df = ak.option_finance_board(symbol=\"华夏科创50ETF期权\", end_month=\"2306\")\nprint(option_finance_board_df)\n```\n\n数据示例\n\n```\n     日期             合约交易代码     当前价    涨跌幅     前结价   行权价  数量\n0   20230605155959  588000C2306M00900  0.1983  -1.78  0.2019  0.90  18\n1   20230605155959  588000C2306M00950  0.1475  -3.02  0.1521  0.95  18\n2   20230605155959  588000C2306M01000  0.0990  -3.88  0.1030  1.00  18\n3   20230605155959  588000C2306M01050  0.0528  -9.74  0.0585  1.05  18\n4   20230605155959  588000C2306M01100  0.0200 -21.57  0.0255  1.10  18\n5   20230605155959  588000C2306M01150  0.0055 -31.25  0.0080  1.15  18\n6   20230605155959  588000C2306M01200  0.0015 -16.67  0.0018  1.20  18\n7   20230605155959  588000C2306M01250  0.0006 -33.33  0.0009  1.25  18\n8   20230605155959  588000C2306M01300  0.0004   0.00  0.0004  1.30  18\n9   20230605155959  588000P2306M00900  0.0002   0.00  0.0002  0.90  18\n10  20230605155959  588000P2306M00950  0.0003 -25.00  0.0004  0.95  18\n11  20230605155959  588000P2306M01000  0.0009   0.00  0.0009  1.00  18\n12  20230605155959  588000P2306M01050  0.0053 -15.87  0.0063  1.05  18\n13  20230605155959  588000P2306M01100  0.0220  -5.17  0.0232  1.10  18\n14  20230605155959  588000P2306M01150  0.0582   4.68  0.0556  1.15  18\n15  20230605155959  588000P2306M01200  0.1034   3.40  0.1000  1.20  18\n16  20230605155959  588000P2306M01250  0.1515   1.00  0.1500  1.25  18\n17  20230605155959  588000P2306M01300  0.2019   0.95  0.2000  1.30  18\n```\n\n易方达科创50ETF期权\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 日期     | object  | -   |\n| 合约交易代码 | object  | -   |\n| 当前价    | float64 | -   |\n| 涨跌幅    | float64 | -   |\n| 前结价    | float64 | -   |\n| 行权价    | float64 | -   |\n| 数量     | int64   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_finance_board_df = ak.option_finance_board(symbol=\"易方达科创50ETF期权\", end_month=\"2306\")\nprint(option_finance_board_df)\n```\n\n数据示例\n\n```\n     日期             合约交易代码     当前价    涨跌幅     前结价   行权价  数量\n0   20230605160009  588080C2306M00900  0.1768  -1.72  0.1799  0.90  18\n1   20230605160009  588080C2306M00950  0.1285  -1.31  0.1302  0.95  18\n2   20230605160009  588080C2306M01000  0.0807  -1.82  0.0822  1.00  18\n3   20230605160009  588080C2306M01050  0.0369 -11.30  0.0416  1.05  18\n4   20230605160009  588080C2306M01100  0.0123 -20.65  0.0155  1.10  18\n5   20230605160009  588080C2306M01150  0.0032 -20.00  0.0040  1.15  18\n6   20230605160009  588080C2306M01200  0.0009  28.57  0.0007  1.20  18\n7   20230605160009  588080C2306M01250  0.0005   0.00  0.0005  1.25  18\n8   20230605160009  588080C2306M01300  0.0003   0.00  0.0003  1.30  18\n9   20230605160009  588080P2306M00900  0.0001 -50.00  0.0002  0.90  18\n10  20230605160009  588080P2306M00950  0.0003 -50.00  0.0006  0.95  18\n11  20230605160009  588080P2306M01000  0.0015 -28.57  0.0021  1.00  18\n12  20230605160009  588080P2306M01050  0.0096 -15.79  0.0114  1.05  18\n13  20230605160009  588080P2306M01100  0.0352   0.00  0.0352  1.10  18\n14  20230605160009  588080P2306M01150  0.0747   1.49  0.0736  1.15  18\n15  20230605160009  588080P2306M01200  0.1227   0.57  0.1220  1.20  18\n16  20230605160009  588080P2306M01250  0.1692  -1.63  0.1720  1.25  18\n17  20230605160009  588080P2306M01300  0.2198  -0.99  0.2220  1.30  18\n```\n\n嘉实沪深300ETF期权\n\n| 名称    | 类型      | 描述       |\n|-------|---------|----------|\n| 合约编码  | object  | -        |\n| 合约简称  | object  | -        |\n| 标的名称  | object  | -        |\n| 类型    | float64 | -        |\n| 行权价   | float64 | 注意单位: 元  |\n| 合约单位  | float64 | 注意单位:  份 |\n| 期权行权日 | object  | -        |\n| 行权交收日 | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_finance_board_df = ak.option_finance_board(symbol=\"嘉实沪深300ETF期权\", end_month=\"2003\")\nprint(option_finance_board_df)\n```\n\n数据示例\n\n```\n         合约编码            合约简称    标的名称  类型   行权价   合约单位      期权行权日       行权交收日\n0    90000335  300ETF购3月4260A  300ETF  认购  4.26  10330 2021-03-24  2021-03-25\n1    90000336  300ETF购3月4356A  300ETF  认购  4.36  10330 2021-03-24  2021-03-25\n2    90000337  300ETF购3月4453A  300ETF  认购  4.45  10330 2021-03-24  2021-03-25\n3    90000338  300ETF购3月4550A  300ETF  认购  4.55  10330 2021-03-24  2021-03-25\n4    90000339  300ETF购3月4647A  300ETF  认购  4.65  10330 2021-03-24  2021-03-25\n5    90000340  300ETF购3月4744A  300ETF  认购  4.74  10330 2021-03-24  2021-03-25\n6    90000341  300ETF购3月4840A  300ETF  认购  4.84  10330 2021-03-24  2021-03-25\n7    90000342  300ETF购3月5082A  300ETF  认购  5.08  10330 2021-03-24  2021-03-25\n8    90000343  300ETF购3月5325A  300ETF  认购  5.33  10330 2021-03-24  2021-03-25\n9    90000344  300ETF沽3月4260A  300ETF  认沽  4.26  10330 2021-03-24  2021-03-25\n10   90000345  300ETF沽3月4356A  300ETF  认沽  4.36  10330 2021-03-24  2021-03-25\n11   90000346  300ETF沽3月4453A  300ETF  认沽  4.45  10330 2021-03-24  2021-03-25\n12   90000347  300ETF沽3月4550A  300ETF  认沽  4.55  10330 2021-03-24  2021-03-25\n13   90000348  300ETF沽3月4647A  300ETF  认沽  4.65  10330 2021-03-24  2021-03-25\n14   90000349  300ETF沽3月4744A  300ETF  认沽  4.74  10330 2021-03-24  2021-03-25\n15   90000350  300ETF沽3月4840A  300ETF  认沽  4.84  10330 2021-03-24  2021-03-25\n16   90000351  300ETF沽3月5082A  300ETF  认沽  5.08  10330 2021-03-24  2021-03-25\n17   90000352  300ETF沽3月5325A  300ETF  认沽  5.33  10330 2021-03-24  2021-03-25\n18   90000353  300ETF购3月4066A  300ETF  认购  4.07  10330 2021-03-24  2021-03-25\n19   90000354  300ETF购3月4163A  300ETF  认购  4.16  10330 2021-03-24  2021-03-25\n20   90000355  300ETF沽3月4066A  300ETF  认沽  4.07  10330 2021-03-24  2021-03-25\n21   90000356  300ETF沽3月4163A  300ETF  认沽  4.16  10330 2021-03-24  2021-03-25\n22   90000357  300ETF购3月5567A  300ETF  认购  5.57  10330 2021-03-24  2021-03-25\n23   90000358  300ETF沽3月5567A  300ETF  认沽  5.57  10330 2021-03-24  2021-03-25\n24   90000359  300ETF购3月5809A  300ETF  认购  5.81  10330 2021-03-24  2021-03-25\n25   90000360  300ETF沽3月5809A  300ETF  认沽  5.81  10330 2021-03-24  2021-03-25\n26   90000439   300ETF购3月4200  300ETF  认购  4.20  10000 2021-03-24  2021-03-25\n27   90000440   300ETF购3月4300  300ETF  认购  4.30  10000 2021-03-24  2021-03-25\n28   90000441   300ETF购3月4400  300ETF  认购  4.40  10000 2021-03-24  2021-03-25\n29   90000442   300ETF购3月4500  300ETF  认购  4.50  10000 2021-03-24  2021-03-25\n30   90000443   300ETF购3月4600  300ETF  认购  4.60  10000 2021-03-24  2021-03-25\n31   90000444   300ETF购3月4700  300ETF  认购  4.70  10000 2021-03-24  2021-03-25\n32   90000445   300ETF购3月4800  300ETF  认购  4.80  10000 2021-03-24  2021-03-25\n33   90000446   300ETF购3月4900  300ETF  认购  4.90  10000 2021-03-24  2021-03-25\n34   90000447   300ETF购3月5000  300ETF  认购  5.00  10000 2021-03-24  2021-03-25\n35   90000448   300ETF沽3月4200  300ETF  认沽  4.20  10000 2021-03-24  2021-03-25\n36   90000449   300ETF沽3月4300  300ETF  认沽  4.30  10000 2021-03-24  2021-03-25\n37   90000450   300ETF沽3月4400  300ETF  认沽  4.40  10000 2021-03-24  2021-03-25\n38   90000451   300ETF沽3月4500  300ETF  认沽  4.50  10000 2021-03-24  2021-03-25\n39   90000452   300ETF沽3月4600  300ETF  认沽  4.60  10000 2021-03-24  2021-03-25\n40   90000453   300ETF沽3月4700  300ETF  认沽  4.70  10000 2021-03-24  2021-03-25\n41   90000454   300ETF沽3月4800  300ETF  认沽  4.80  10000 2021-03-24  2021-03-25\n42   90000455   300ETF沽3月4900  300ETF  认沽  4.90  10000 2021-03-24  2021-03-25\n43   90000456   300ETF沽3月5000  300ETF  认沽  5.00  10000 2021-03-24  2021-03-25\n44   90000463   300ETF购3月5250  300ETF  认购  5.25  10000 2021-03-24  2021-03-25\n45   90000464   300ETF沽3月5250  300ETF  认沽  5.25  10000 2021-03-24  2021-03-25\n46   90000491   300ETF购3月5500  300ETF  认购  5.50  10000 2021-03-24  2021-03-25\n47   90000492   300ETF沽3月5500  300ETF  认沽  5.50  10000 2021-03-24  2021-03-25\n68   90000517   300ETF购3月5750  300ETF  认购  5.75  10000 2021-03-24  2021-03-25\n69   90000518   300ETF沽3月5750  300ETF  认沽  5.75  10000 2021-03-24  2021-03-25\n72   90000525   300ETF购3月6000  300ETF  认购  6.00  10000 2021-03-24  2021-03-25\n73   90000526   300ETF沽3月6000  300ETF  认沽  6.00  10000 2021-03-24  2021-03-25\n118  90000571   300ETF购3月6250  300ETF  认购  6.25  10000 2021-03-24  2021-03-25\n119  90000572   300ETF沽3月6250  300ETF  认沽  6.25  10000 2021-03-24  2021-03-25\n126  90000579   300ETF购3月6500  300ETF  认购  6.50  10000 2021-03-24  2021-03-25\n127  90000580   300ETF沽3月6500  300ETF  认沽  6.50  10000 2021-03-24  2021-03-25\n```\n\n沪深300股指期权\n\n| 名称         | 类型      | 描述  |\n|------------|---------|-----|\n| instrument | object  | 期权  |\n| position   | float64 |     |\n| volume     | float64 |     |\n| lastprice  | float64 |     |\n| updown     | float64 |     |\n| bprice     | float64 |     |\n| bamount    | float64 |     |\n| sprice     | float64 |     |\n| samount    | float64 |     |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_finance_board_df = ak.option_finance_board(symbol=\"沪深300股指期权\", end_month=\"2306\")\nprint(option_finance_board_df)\n```\n\n数据示例\n\n```\n       instrument  position  volume  ...  bamount  sprice  samount\n0   IO2306-C-3100       138       0  ...        1   741.2        1\n1   IO2306-C-3200       162      11  ...        1   640.8        1\n2   IO2306-C-3300        99       3  ...        2   540.6        1\n3   IO2306-C-3400       107       3  ...        1   440.8        2\n4   IO2306-C-3450        25       6  ...        1   390.8        1\n..            ...       ...     ...  ...      ...     ...      ...\n59  IO2306-P-4600       148       0  ...        1   769.4        1\n60  IO2306-P-4700       165       9  ...        1   869.2        1\n61  IO2306-P-4800       119       2  ...        1   969.6        1\n62  IO2306-P-4900       169       2  ...        1  1069.6        1\n63  IO2306-P-5000       541       6  ...        1  1170.2        1\n```\n\n中证1000股指期权\n\n| 名称         | 类型      | 描述  |\n|------------|---------|-----|\n| instrument | object  | 期权  |\n| position   | float64 |     |\n| volume     | float64 |     |\n| lastprice  | float64 |     |\n| updown     | float64 |     |\n| bprice     | float64 |     |\n| bamount    | float64 |     |\n| sprice     | float64 |     |\n| samount    | float64 |     |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_finance_board_df = ak.option_finance_board(symbol=\"中证1000股指期权\", end_month=\"2306\")\nprint(option_finance_board_df)\n```\n\n数据示例\n\n```\n       instrument  position  volume  ...  bamount  sprice  samount\n0   MO2306-C-5200       161       1  ...        1  1426.8        1\n1   MO2306-C-5400       108       0  ...        1  1226.8        1\n2   MO2306-C-5600        46       2  ...        1  1024.0        1\n3   MO2306-C-5800        79       0  ...        1   824.2        1\n4   MO2306-C-5900        43       1  ...        1   725.8        1\n5   MO2306-C-6000       114       1  ...        2   625.2        1\n6   MO2306-C-6100        92       9  ...        1   520.8        1\n7   MO2306-C-6200       277      29  ...        1   422.4        1\n8   MO2306-C-6300       292      58  ...        1   320.4        1\n9   MO2306-C-6400       804     390  ...        1   227.8        1\n10  MO2306-C-6500      1950    1823  ...        2   144.2        1\n11  MO2306-C-6600      4701    6212  ...        2    75.8        2\n12  MO2306-C-6700      5208    5370  ...        1    34.0        2\n13  MO2306-C-6800      4182    3258  ...       19    12.2       10\n14  MO2306-C-6900      3573     746  ...        2     4.0       11\n15  MO2306-C-7000      3835     201  ...       11     2.0        9\n16  MO2306-C-7100      1048      56  ...        3     1.0        9\n17  MO2306-C-7200      1233      45  ...        9     1.0       13\n18  MO2306-C-7300       220      49  ...        2     0.8       14\n19  MO2306-C-7400       399      16  ...        2     0.6        3\n20  MO2306-C-7500       262      71  ...        3     0.8       13\n21  MO2306-C-7600       541      80  ...        2     0.8       37\n22  MO2306-C-7700       146      79  ...        2     0.6        9\n23  MO2306-C-7800       405      40  ...        3     0.6       10\n24  MO2306-C-8000       702      91  ...        3     0.6       10\n25  MO2306-C-8200       683      46  ...       43     0.4       10\n26  MO2306-P-5200       432      35  ...       81     0.6       17\n27  MO2306-P-5400       286      15  ...        6     0.6       10\n28  MO2306-P-5600       620      59  ...       12     0.8       11\n29  MO2306-P-5800       386     134  ...        2     0.8       11\n30  MO2306-P-5900      1206      94  ...        4     1.0        3\n31  MO2306-P-6000      1383     221  ...        4     1.0        2\n32  MO2306-P-6100       967     168  ...        1     1.6       10\n33  MO2306-P-6200      2744     556  ...       30     2.8        3\n34  MO2306-P-6300      2669    1307  ...        9     5.0        2\n35  MO2306-P-6400      3238    2406  ...        3    12.2        4\n36  MO2306-P-6500      2759    4260  ...        7    27.2        1\n37  MO2306-P-6600      2613    5091  ...        1    62.8        1\n38  MO2306-P-6700      1532    2160  ...        1   118.0        1\n39  MO2306-P-6800      1334     424  ...        1   198.2        1\n40  MO2306-P-6900      1708      35  ...        1   293.0        1\n41  MO2306-P-7000       754       2  ...        2   388.4        1\n42  MO2306-P-7100       230       1  ...        1   488.0        1\n43  MO2306-P-7200       139       2  ...        2   594.4        1\n44  MO2306-P-7300        73       0  ...        1   693.4        1\n45  MO2306-P-7400        56       0  ...        1   794.0        1\n46  MO2306-P-7500        28       0  ...        1   885.2        2\n47  MO2306-P-7600        72       0  ...        1   992.4        1\n48  MO2306-P-7700        30       0  ...        1  1095.8        1\n49  MO2306-P-7800        77       0  ...        1  1196.0        1\n50  MO2306-P-8000        61       0  ...        1  1395.8        1\n51  MO2306-P-8200       148       0  ...        1  1596.0        1\n```\n\n上证50股指期权\n\n| 名称         | 类型      | 描述  |\n|------------|---------|-----|\n| instrument | object  | 期权  |\n| position   | float64 |     |\n| volume     | float64 |     |\n| lastprice  | float64 |     |\n| updown     | float64 |     |\n| bprice     | float64 |     |\n| bamount    | float64 |     |\n| sprice     | float64 |     |\n| samount    | float64 |     |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_finance_board_df = ak.option_finance_board(symbol=\"上证50股指期权\", end_month=\"2306\")\nprint(option_finance_board_df)\n```\n\n数据示例\n\n```\n       instrument  position  volume  ...  bamount  sprice  samount\n0   HO2306-C-2225         0       0  ...        1   300.0        1\n1   HO2306-C-2250         6       0  ...        1   275.0        1\n2   HO2306-C-2275         6       0  ...        1   249.2        1\n3   HO2306-C-2300        54       2  ...        1   224.4        2\n4   HO2306-C-2325        10       0  ...        1   199.4        1\n5   HO2306-C-2350        42       0  ...        1   174.6        1\n6   HO2306-C-2375        49      38  ...        1   150.2        1\n7   HO2306-C-2400        80      47  ...        1   126.0        1\n8   HO2306-C-2425       206     159  ...        1   101.2        1\n9   HO2306-C-2450       498     650  ...        1    79.4        1\n10  HO2306-C-2475       672     636  ...        1    59.6        1\n11  HO2306-C-2500      1814    3399  ...        4    41.8        1\n12  HO2306-C-2550      3060    4613  ...        1    18.6        2\n13  HO2306-C-2600      5316    2978  ...        8     7.4        5\n14  HO2306-C-2650      5612    1086  ...       27     2.8        5\n15  HO2306-C-2700      6334    1357  ...        8     1.4       24\n16  HO2306-C-2750      3295     449  ...        1     0.8       42\n17  HO2306-C-2800      3100     133  ...        3     0.6       57\n18  HO2306-C-2850      1294       8  ...       17     0.6        8\n19  HO2306-C-2900       900      41  ...       51     0.6       19\n20  HO2306-C-2950       481      66  ...       14     0.4        1\n21  HO2306-C-3000      1095      62  ...       36     0.6       49\n22  HO2306-C-3050       552       0  ...       14     0.4        2\n23  HO2306-C-3100       663     102  ...       18     0.4       41\n24  HO2306-C-3200       831      60  ...       14     0.4        2\n25  HO2306-P-2225        14       6  ...       13     0.4        2\n26  HO2306-P-2250        30       0  ...       14     0.4        2\n27  HO2306-P-2275        61      12  ...       13     0.4        2\n28  HO2306-P-2300       228      32  ...        5     0.6        7\n29  HO2306-P-2325       153      51  ...        2     0.6        3\n30  HO2306-P-2350       489      51  ...       47     0.8        7\n31  HO2306-P-2375       505     157  ...       27     1.0        1\n32  HO2306-P-2400      1055     369  ...       14     2.0        4\n33  HO2306-P-2425      1114     361  ...        5     3.6        8\n34  HO2306-P-2450      2034    1590  ...        8     6.8        5\n35  HO2306-P-2475      1448    1996  ...        1    11.8        2\n36  HO2306-P-2500      2125    5050  ...        4    20.0        3\n37  HO2306-P-2550      1711    2878  ...        6    47.4        1\n38  HO2306-P-2600      1525     561  ...        1    87.2        1\n39  HO2306-P-2650      1137     158  ...        2   134.2        1\n40  HO2306-P-2700       913      73  ...        2   182.6        1\n41  HO2306-P-2750       399       4  ...        3   229.0        1\n42  HO2306-P-2800       389       3  ...        1   283.2        1\n43  HO2306-P-2850       160       0  ...        1   333.4        1\n44  HO2306-P-2900        95       0  ...        1   383.2        1\n45  HO2306-P-2950        47       0  ...        1   433.6        1\n46  HO2306-P-3000        73       0  ...        1   483.6        1\n47  HO2306-P-3050        28       0  ...        1   533.6        1\n48  HO2306-P-3100        46       0  ...        1   583.4        1\n49  HO2306-P-3200        58       0  ...        1   684.0        1\n```\n\n#### 风险指标-上海证券交易所\n\n接口: option_risk_indicator_sse\n\n目标地址: http://www.sse.com.cn/assortment/options/risk/\n\n描述: 上海证券交易所-产品-股票期权-期权风险指标数据\n\n限量: 单次返回指定 date 的数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                  |\n|------|-----|-------------------------------------|\n| date | str | date=\"20240626\"; 交易日; 从 20150209 开始 |\n\n输出参数\n\n| 名称              | 类型      | 描述  |\n|-----------------|---------|-----|\n| TRADE_DATE      | object  | -   |\n| SECURITY_ID     | object  | -   |\n| CONTRACT_ID     | object  | -   |\n| CONTRACT_SYMBOL | object  | -   |\n| DELTA_VALUE     | float64 | -   |\n| THETA_VALUE     | float64 | -   |\n| GAMMA_VALUE     | float64 | -   |\n| VEGA_VALUE      | float64 | -   |\n| RHO_VALUE       | float64 | -   |\n| IMPLC_VOLATLTY  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_risk_indicator_sse_df = ak.option_risk_indicator_sse(date=\"20240626\")\nprint(option_risk_indicator_sse_df)\n```\n\n数据示例\n\n```\n     TRADE_DATE SECURITY_ID  ... RHO_VALUE IMPLC_VOLATLTY\n0    2024-06-26    10007437  ...     0.163          0.182\n1    2024-06-26    10007425  ...     0.164          0.149\n2    2024-06-26    10007333  ...     0.152          0.141\n3    2024-06-26    10007334  ...     0.128          0.131\n4    2024-06-26    10007335  ...     0.089          0.129\n..          ...         ...  ...       ...            ...\n391  2024-06-26    10007225  ...    -0.253          0.279\n392  2024-06-26    10007226  ...    -0.308          0.306\n393  2024-06-26    10007227  ...    -0.353          0.336\n394  2024-06-26    10007228  ...    -0.392          0.367\n395  2024-06-26    10007238  ...    -0.426          0.401\n[396 rows x 10 columns]\n```\n\n#### 当日合约-上海证券交易所\n\n接口: option_current_day_sse\n\n目标地址: https://www.sse.com.cn/assortment/options/disclo/preinfo/\n\n描述: 上海证券交易所-产品-股票期权-信息披露-当日合约\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称       | 类型     | 描述 |\n|----------|--------|----|\n| 合约编码     | object | -  |\n| 合约交易代码   | object | -  |\n| 合约简称     | object | -  |\n| 标的券名称及代码 | object | -  |\n| 类型       | object | -  |\n| 行权价      | object | -  |\n| 合约单位     | object | -  |\n| 期权行权日    | object | -  |\n| 行权交收日    | object | -  |\n| 到期日      | object | -  |\n| 开始日期     | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_current_day_sse_df = ak.option_current_day_sse()\nprint(option_current_day_sse_df)\n```\n\n数据示例\n\n```\n      合约编码  合约交易代码         合约简称  ...     行权交收日      到期日     开始日期\n0    10009163  510050C2509M02350  50ETF购9月2350  ...  20250925  20250924  20250408\n1    10008793  510050C2509M02400  50ETF购9月2400  ...  20250925  20250924  20250123\n2    10008794  510050C2509M02450  50ETF购9月2450  ...  20250925  20250924  20250123\n3    10008795  510050C2509M02500  50ETF购9月2500  ...  20250925  20250924  20250123\n4    10008796  510050C2509M02550  50ETF购9月2550  ...  20250925  20250924  20250123\n..        ...                ...           ...  ...       ...       ...       ...\n639  10009808  588080P2603M01400  科创板50沽3月1400  ...  20260326  20260325  20250821\n640  10009863  588080P2603M01450  科创板50沽3月1450  ...  20260326  20260325  20250825\n641  10009864  588080P2603M01500  科创板50沽3月1500  ...  20260326  20260325  20250825\n642  10009888  588080P2603M01550  科创板50沽3月1550  ...  20260326  20260325  20250826\n643  10010006  588080P2603M01600  科创板50沽3月1600  ...  20260326  20260325  20250829\n[644 rows x 11 columns]\n```\n\n#### 当日合约-深圳证券交易所\n\n接口: option_current_day_szse\n\n目标地址: https://www.sse.org.cn/option/quotation/contract/daycontract/index.html\n\n描述: 深圳证券交易所-期权子网-行情数据-当日合约\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称           | 类型      | 描述 |\n|--------------|---------|----|\n| 序号           | int64   | -  |\n| 合约编码         | int64   | -  |\n| 合约代码         | object  | -  |\n| 合约简称         | object  | -  |\n| 标的证券简称(代码)   | object  | -  |\n| 合约类型         | object  | -  |\n| 行权价          | float64 | -  |\n| 合约单位         | int64   | -  |\n| 最后交易日        | object  | -  |\n| 行权日          | object  | -  |\n| 到期日          | object  | -  |\n| 交收日          | object  | -  |\n| 新挂           | object  | -  |\n| 涨停价格         | float64 | -  |\n| 跌停价格         | float64 | -  |\n| 前结算价         | float64 | -  |\n| 合约调整         | object  | -  |\n| 停牌           | object  | -  |\n| 合约总持仓        | float64 | -  |\n| 挂牌原因         | object  | -  |\n| 原合约代码        | object  | -  |\n| 原合约简称        | object  | -  |\n| 原行权价格        | float64 | -  |\n| 原合约单位        | int64   | -  |\n| 合约到期剩余交易天数   | int64   | -  |\n| 合约到期剩余自然天数   | int64   | -  |\n| 下次合约调整剩余交易天数 | int64   | -  |\n| 下次合约调整剩余自然天数 | int64   | -  |\n| 交易日期         | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_current_day_szse_df = ak.option_current_day_szse()\nprint(option_current_day_szse_df)\n```\n\n数据示例\n\n```\n      序号 合约编码   合约代码  ... 下次合约调整剩余交易天数 下次合约调整剩余自然天数 交易日期\n0      1  90005043  159901C2509M002500  ...            0            0  2025-09-12\n1      2  90005044  159901C2509M002550  ...            0            0  2025-09-12\n2      3  90005045  159901C2509M002600  ...            0            0  2025-09-12\n3      4  90005046  159901C2509M002650  ...            0            0  2025-09-12\n4      5  90005047  159901C2509M002700  ...            0            0  2025-09-12\n..   ...       ...                 ...  ...          ...          ...         ...\n651  652  90006280  159915P2510M003400  ...            0            0  2025-09-12\n652  653  90006281  159915C2512M003400  ...            0            0  2025-09-12\n653  654  90006282  159915P2512M003400  ...            0            0  2025-09-12\n654  655  90006283  159915C2603M003400  ...            0            0  2025-09-12\n655  656  90006284  159915P2603M003400  ...            0            0  2025-09-12\n[656 rows x 29 columns]\n```\n\n#### 每日统计-上海证券交易所\n\n接口: option_daily_stats_sse\n\n目标地址: http://www.sse.com.cn/assortment/options/date/\n\n描述: 上海证券交易所-产品-股票期权-每日统计\n\n限量: 单次返回指定 date 的数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20240626\"; 交易日 |\n\n输出参数\n\n| 名称       | 类型           | 描述       |\n|----------|--------------|----------|\n| 合约标的代码   | object       | -        |\n| 合约标的名称   | object       | -        |\n| 合约数量     | int64        | -        |\n| 总成交额     | int64        | 注意单位: 万元 |\n| 总成交量     | int64        | 注意单位: 张  |\n| 认购成交量    | int64        | 注意单位: 张  |\n| 认沽成交量    | int64        | 注意单位: 张  |\n| 认沽/认购    | float64      | 注意单位: %  |\n| 未平仓合约总数  | int64        | -        |\n| 未平仓认购合约数 | floaint64t64 | -        |\n| 未平仓认沽合约数 | int64        | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_daily_stats_sse_df = ak.option_daily_stats_sse(date=\"20240626\")\nprint(option_daily_stats_sse_df)\n```\n\n数据示例\n\n```\n   合约标的代码 合约标的名称 合约数量 总成交额  ... 未平仓合约总数  未平仓认购合约数  未平仓认沽合约数   交易日\n0  510050   上证50ETF   126   47808  ...  1162840    623212    539628  2024-06-26\n1  510300  沪深300ETF   126   60857  ...   963032    540989    422043  2024-06-26\n2  510500  中证500ETF   178  127869  ...   803581    434857    368724  2024-06-26\n3  588000   科创50ETF    92   15273  ...   790569    526095    264474  2024-06-26\n4  588080  科创板50ETF    92    7633  ...   377438    232943    144495  2024-06-26\n[5 rows x 12 columns]\n```\n\n#### 每日统计-深圳证券交易所\n\n接口: option_daily_stats_szse\n\n目标地址: https://investor.szse.cn/market/option/day/index.html\n\n描述: 深圳证券交易所-市场数据-期权数据-日度概况\n\n限量: 单次返回指定 date 的数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20240626\"; 交易日 |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 合约标的代码   | object  | -       |\n| 合约标的名称   | object  | -       |\n| 成交量      | int64   | 注意单位: 张 |\n| 认购成交量    | int64   | 注意单位: 张 |\n| 认沽成交量    | int64   | 注意单位: 张 |\n| 认沽/认购持仓比 | float64 | 注意单位: % |\n| 未平仓合约总数  | int64   | 注意单位: 张 |\n| 未平仓认购合约数 | int64   | 注意单位: 张 |\n| 未平仓认沽合约数 | int64   | 注意单位: 张 |\n| 交易日      | object  | -       |\n\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_daily_stats_szse_df = ak.option_daily_stats_szse(date=\"20240626\")\nprint(option_daily_stats_szse_df)\n```\n\n数据示例\n\n```\n   合约标的代码 合约标的名称 成交量 认购成交量  ... 未平仓合约总数 未平仓认购合约数 未平仓认沽合约数  交易日\n0  159901  深证100ETF    87949   47218  ...    89303     45316     43987  2024-06-26\n1  159915    创业板ETF  1059560  578092  ...   772281    429029    343252  2024-06-26\n2  159919  沪深300ETF   249020  122046  ...   178740     96555     82185  2024-06-26\n3  159922  中证500ETF   313967  155196  ...   206706    113215     93491  2024-06-26\n[4 rows x 10 columns]\n```\n\n### 金融期权-新浪\n\n#### 中金所\n\n##### 上证50指数列表\n\n接口: option_cffex_sz50_list_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php/ho/cffex\n\n描述: 中金所-上证50指数-所有合约, 返回的第一个合约为主力合约\n\n限量: 单次返回所有合约\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_cffex_sz50_list_sina_df = ak.option_cffex_sz50_list_sina()\nprint(option_cffex_sz50_list_sina_df)\n```\n\n数据示例\n\n```\n{'上证50指数': ['ho2301', 'ho2303', 'ho2302', 'ho2306', 'ho2312', 'ho2309']}\n```\n\n##### 沪深300指数列表\n\n接口: option_cffex_hs300_list_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n\n描述: 中金所-沪深300指数-所有合约, 返回的第一个合约为主力合约\n\n限量: 单次返回所有合约\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_cffex_hs300_list_sina_df = ak.option_cffex_hs300_list_sina()\nprint(option_cffex_hs300_list_sina_df)\n```\n\n数据示例\n\n```\n{'沪深300指数': ['io2003', 'io2002', 'io2004', 'io2006', 'io2012', 'io2009']}\n```\n\n##### 中证1000指数列表\n\n接口: option_cffex_zz1000_list_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n\n描述: 中金所-中证1000指数-所有合约, 返回的第一个合约为主力合约\n\n限量: 单次返回所有合约\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_cffex_zz1000_list_sina_df = ak.option_cffex_zz1000_list_sina()\nprint(option_cffex_zz1000_list_sina_df)\n```\n\n数据示例\n\n```\n{'中证1000指数': ['mo2208', 'mo2209', 'mo2212', 'mo2210', 'mo2306', 'mo2303']}\n```\n\n##### 实时行情-上证50指数\n\n接口: option_cffex_sz50_spot_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php/ho/cffex\n\n描述: 新浪财经-中金所-上证50指数-指定合约-实时行情\n\n限量: 单次返回指定合约的实时行情\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| symbol | str | symbol=\"ho2303\" |\n\n输出参数\n\n| 名称       | 类型      | 描述     |\n|----------|---------|--------|\n| 看涨合约-买量  | int64   | -      |\n| 看涨合约-买价  | float64 | -      |\n| 看涨合约-最新价 | float64 | -      |\n| 看涨合约-卖价  | float   | -      |\n| 看涨合约-卖量  | int64   | -      |\n| 看涨合约-持仓量 | int64   | -      |\n| 看涨合约-涨跌  | float64 | -      |\n| 行权价      | int64   | -      |\n| 看涨合约-标识  | object  | 看涨合约代码 |\n| 看跌合约-买量  | int64   | -      |\n| 看跌合约-买价  | float64 | -      |\n| 看跌合约-最新价 | float64 | -      |\n| 看跌合约-卖价  | float64 | -      |\n| 看跌合约-卖量  | int64   | -      |\n| 看跌合约-持仓量 | int64   | -      |\n| 看跌合约-涨跌  | float64 | -      |\n| 看跌合约-标识  | object  | 看跌合约代码 |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_cffex_sz50_spot_sina_df = ak.option_cffex_sz50_spot_sina(symbol=\"ho2303\")\nprint(option_cffex_sz50_spot_sina_df)\n```\n\n数据示例\n\n```\n    看涨合约-买量  看涨合约-买价  看涨合约-最新价  ...  看跌合约-持仓量  看跌合约-涨跌      看跌合约-标识\n0         1    301.2     318.4  ...        82    10.71  ho2303P2325\n1         6    302.4     306.0  ...        86    -7.89  ho2303P2350\n2         1    270.8     276.2  ...        67   -19.67  ho2303P2375\n3         1    265.6     269.8  ...        45    14.67  ho2303P2400\n4         1    222.2     219.0  ...        18    -5.06  ho2303P2425\n5         1    225.2     234.6  ...        29    -3.09  ho2303P2450\n6         1    184.0     188.0  ...        13   -14.40  ho2303P2475\n7         1    184.2     178.0  ...        50    19.02  ho2303P2500\n8         1    148.6     157.0  ...        42    -5.96  ho2303P2550\n9         1    117.0     115.8  ...       117    -9.39  ho2303P2600\n10        1     91.2      94.4  ...        74    -0.68  ho2303P2650\n11       28     69.2      74.0  ...       670    -5.25  ho2303P2700\n12        1     52.0      53.0  ...        11    -3.49  ho2303P2750\n13        1     38.0      38.8  ...         9    -2.91  ho2303P2800\n14       22     26.8      28.0  ...        14     9.94  ho2303P2850\n15       32     19.0      20.4  ...         3    -5.88  ho2303P2900\n16       10     13.6      13.6  ...         6    -3.05  ho2303P2950\n17        6     10.0      10.4  ...         6    15.58  ho2303P3000\n```\n\n##### 实时行情-沪深300指数\n\n接口: option_cffex_hs300_spot_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n\n描述: 新浪财经-中金所-沪深300指数-指定合约-实时行情\n\n限量: 单次返回指定合约的实时行情\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| symbol | str | symbol=\"io2104\" |\n\n输出参数\n\n| 名称       | 类型      | 描述     |\n|----------|---------|--------|\n| 看涨合约-买量  | int64   | -      |\n| 看涨合约-买价  | float64 | -      |\n| 看涨合约-最新价 | float64 | -      |\n| 看涨合约-卖价  | float   | -      |\n| 看涨合约-卖量  | int64   | -      |\n| 看涨合约-持仓量 | int64   | -      |\n| 看涨合约-涨跌  | float64 | -      |\n| 行权价      | int64   | -      |\n| 看涨合约-标识  | object  | 看涨合约代码 |\n| 看跌合约-买量  | int64   | -      |\n| 看跌合约-买价  | float64 | -      |\n| 看跌合约-最新价 | float64 | -      |\n| 看跌合约-卖价  | float64 | -      |\n| 看跌合约-卖量  | int64   | -      |\n| 看跌合约-持仓量 | int64   | -      |\n| 看跌合约-涨跌  | float64 | -      |\n| 看跌合约-标识  | object  | 看跌合约代码 |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_cffex_hs300_spot_sina_df = ak.option_cffex_hs300_spot_sina(symbol=\"io2104\")\nprint(option_cffex_hs300_spot_sina_df)\n```\n\n数据示例\n\n```\n   看涨合约_买量  看涨合约_买价 看涨合约_最新价  看涨合约_卖价  ... 看跌合约_卖量 看跌合约_持仓量  看跌合约_涨跌      看跌合约_标识\n0        1  587.800  597.000  598.200  ...      12     1150    50.00  io2202P4250\n1        1  505.400  501.200  516.000  ...      41     2238    50.00  io2202P4300\n2        1  489.400  498.600  494.400  ...       7     1715    58.33  io2202P4350\n3        1  440.400  450.000  445.600  ...       3     2980    48.39  io2202P4400\n4        1  361.000  369.600  365.600  ...       9     2261    43.24  io2202P4450\n5        1  313.800  313.200  318.600  ...       6     1941    33.33  io2202P4500\n6        1  267.600  271.400  272.800  ...       1     1485    38.33  io2202P4550\n7        2  226.400  226.400  226.600  ...       1     1865    29.27  io2202P4600\n8        1  185.000  185.200  187.200  ...       1     1251    30.00  io2202P4650\n9        1  144.600  144.800  145.000  ...       3     2641    25.79  io2202P4700\n10       8  112.000  113.400  114.200  ...       4     2134    21.72  io2202P4750\n11       4   83.200   83.400   83.600  ...       1     4509    23.79  io2202P4800\n12       2   59.000   59.200   59.600  ...       4     2765    20.69  io2202P4850\n13       3   43.200   43.200   43.400  ...       1     3977    17.75  io2202P4900\n14      13   29.200   29.200   31.000  ...       1     1773    18.36  io2202P4950\n15      10   21.200   21.400   21.600  ...       1     2492    17.74  io2202P5000\n16       5   10.400   10.400   10.600  ...       1     1873    11.90  io2202P5100\n17       2    6.400    6.400    6.600  ...       1      858     9.74  io2202P5200\n18       5    3.800    4.000    4.000  ...       1      635     4.63  io2202P5300\n19       5    2.800    3.000    3.000  ...       1       49     7.23  io2202P5400\n20       3    2.400    2.400    2.600  ...       1       71    -6.37  io2202P5500\n21       2    1.600    1.800    2.000  ...       1      196     5.18  io2202P5600\n```\n\n##### 实时行情-中证1000指数\n\n接口: option_cffex_zz1000_spot_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n\n描述: 新浪财经-中金所-中证1000指数-指定合约-实时行情\n\n限量: 单次返回指定合约的实时行情\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| symbol | str | symbol=\"mo2208\" |\n\n输出参数\n\n| 名称       | 类型      | 描述     |\n|----------|---------|--------|\n| 看涨合约-买量  | int64   | -      |\n| 看涨合约-买价  | float64 | -      |\n| 看涨合约-最新价 | float64 | -      |\n| 看涨合约-卖价  | float   | -      |\n| 看涨合约-卖量  | int64   | -      |\n| 看涨合约-持仓量 | int64   | -      |\n| 看涨合约-涨跌  | float64 | -      |\n| 行权价      | int64   | -      |\n| 看涨合约-标识  | object  | 看涨合约代码 |\n| 看跌合约-买量  | int64   | -      |\n| 看跌合约-买价  | float64 | -      |\n| 看跌合约-最新价 | float64 | -      |\n| 看跌合约-卖价  | float64 | -      |\n| 看跌合约-卖量  | int64   | -      |\n| 看跌合约-持仓量 | int64   | -      |\n| 看跌合约-涨跌  | float64 | -      |\n| 看跌合约-标识  | object  | 看跌合约代码 |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_cffex_zz1000_spot_sina_df = ak.option_cffex_zz1000_spot_sina(symbol=\"mo2208\")\nprint(option_cffex_zz1000_spot_sina_df)\n```\n\n数据示例\n\n```\n    看涨合约-买量  看涨合约-买价  看涨合约-最新价  ...  看跌合约-持仓量  看跌合约-涨跌      看跌合约-标识\n0         1    760.4     783.2  ...       644   353.13  mo2208P6200\n1         1    666.8     690.0  ...       719   304.65  mo2208P6300\n2         1    575.0     644.0  ...       586   265.00  mo2208P6400\n3         1    494.4     491.4  ...      1018   236.90  mo2208P6500\n4         1    408.4     405.6  ...       829   210.34  mo2208P6600\n5         1    329.8     321.2  ...       894   179.04  mo2208P6700\n6         1    257.8     257.6  ...      1081   147.93  mo2208P6800\n7         1    197.4     197.4  ...      1155   122.44  mo2208P6900\n8         1    138.6     138.6  ...      1295   106.80  mo2208P7000\n9         1     96.6      96.8  ...       846    87.83  mo2208P7100\n10        1     63.8      63.8  ...       356    78.02  mo2208P7200\n11        1     40.2      40.2  ...       146    64.20  mo2208P7300\n12        2     26.0      26.0  ...       129    54.71  mo2208P7400\n13        1     16.2      16.4  ...       104    49.04  mo2208P7500\n14        1     10.6      10.6  ...        39    33.54  mo2208P7600\n15        1      6.8       7.0  ...        41    21.32  mo2208P7700\n16       14      5.0       5.2  ...        37    34.30  mo2208P7800\n17        6      3.4       3.6  ...        21    30.39  mo2208P7900\n```\n\n##### 日频行情-上证50指数\n\n接口: option_cffex_sz50_daily_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php/ho/cffex\n\n描述: 中金所-上证50指数-指定合约-日频行情\n\n限量: 单次返回指定合约的日频行情\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                         |\n|--------|-----|--------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"ho2303P2350\"; 具体合约代码(包括看涨和看跌标识), 可以通过 ak.option_cffex_sz50_spot_sina 中的 call-标识 获取 |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| date   | object  | -   |\n| open   | float64 | -   |\n| high   | float64 | -   |\n| low    | float64 | -   |\n| close  | float64 | -   |\n| volume | int64   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_cffex_sz50_daily_sina_df = ak.option_cffex_sz50_daily_sina(symbol=\"ho2303P2350\")\nprint(option_cffex_sz50_daily_sina_df)\n```\n\n数据示例\n\n```\n         date  open  high   low  close  volume\n0  2022-12-21  16.8  16.8  16.8   16.8       6\n1  2022-12-22  11.2  14.0  11.2   14.0      64\n2  2022-12-23  14.0  17.8  14.0   16.0      14\n3  2022-12-26  14.0  14.6  12.2   14.6      41\n4  2022-12-27  11.2  11.4   9.6    9.6      62\n5  2022-12-28   9.0  11.0   9.0   10.4     126\n6  2022-12-29  10.4  13.0  10.2   10.8      63\n7  2022-12-30   9.8  11.8   9.6    9.8      83\n8  2023-01-03  10.6  12.0   7.4    7.6       4\n```\n\n##### 日频行情-沪深300指数\n\n接口: option_cffex_hs300_daily_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n\n描述: 中金所-沪深300指数-指定合约-日频行情\n\n限量: 单次返回指定合约的日频行情\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                          |\n|--------|-----|---------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"io2202P4350\"; 具体合约代码(包括看涨和看跌标识), 可以通过 ak.option_cffex_hs300_spot_sina 中的 call-标识 获取 |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| date   | object  | -   |\n| open   | float64 | -   |\n| high   | float64 | -   |\n| low    | float64 | -   |\n| close  | float64 | -   |\n| volume | int64   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_cffex_hs300_daily_sina_df = ak.option_cffex_hs300_daily_sina(symbol=\"io2004C4450\")\nprint(option_cffex_hs300_daily_sina_df)\n```\n\n数据示例\n\n```\n          date  open  high   low  close  volume\n0   2021-11-29  15.0  17.0  15.0   15.8      49\n1   2021-11-30  14.6  18.8  14.6   18.6      36\n2   2021-12-01  16.8  16.8  14.2   14.2      38\n3   2021-12-02  16.0  16.0  12.6   13.6      98\n4   2021-12-03  10.6  11.0   9.0    9.6     234\n5   2021-12-06   9.4  11.4   8.2   10.8     112\n6   2021-12-07  10.2  12.6  10.2   10.6     133\n7   2021-12-08  10.6  11.2   8.4    8.4     215\n8   2021-12-09   8.2  10.0   7.0    7.0     241\n9   2021-12-10   8.6  10.0   6.0    6.0      95\n10  2021-12-13   4.8   9.2   4.8    6.2     135\n11  2021-12-14   6.6   8.4   5.2    5.2      92\n12  2021-12-15   6.0   7.4   2.0    7.4     102\n13  2021-12-16   7.2   7.6   6.0    6.0     104\n14  2021-12-17   6.4   8.8   6.4    6.8      92\n15  2021-12-20   7.4  10.6   7.2    9.8     188\n16  2021-12-21   8.6   8.8   6.8    8.6     206\n17  2021-12-22   8.2  10.4   7.6    9.6     120\n18  2021-12-23   8.8   8.8   5.2    5.2     186\n19  2021-12-24   5.2   6.0   4.8    5.6     240\n20  2021-12-27   5.2   6.0   4.8    4.8      49\n21  2021-12-28   4.8   5.0   4.0    4.0      29\n22  2021-12-29   4.2   7.6   4.2    7.4      89\n23  2021-12-30   7.2   7.2   5.2    0.0     119\n24  2021-12-31   4.6   5.6   4.4    5.2     126\n25  2022-01-04   4.6   7.2   4.6    5.2     180\n26  2022-01-05   5.4   7.2   4.8    7.0     217\n27  2022-01-06   7.2  14.0   7.2   10.4     274\n28  2022-01-07   8.8   8.8   6.6    8.0     161\n29  2022-01-10   7.2  10.6   6.6    8.0     351\n30  2022-01-11   8.2  11.0   6.2   10.2     342\n31  2022-01-12   8.8   8.8   5.4    5.4     440\n32  2022-01-13   5.8  11.8   5.2   11.2     377\n33  2022-01-14  11.2  16.6  10.8   14.4     862\n34  2022-01-17  13.0  13.0   8.4    9.2     806\n35  2022-01-18   8.8  10.4   6.4    6.6     420\n36  2022-01-19   6.8   8.8   6.2    7.2     369\n37  2022-01-20   7.0   7.2   4.6    4.8     366\n38  2022-01-21   5.8   7.6   5.4    7.6     265\n```\n\n##### 日频行情-中证1000指数\n\n接口: option_cffex_zz1000_daily_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n\n描述: 中金所-中证1000指数-指定合约-日频行情\n\n限量: 单次返回指定合约的日频行情\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                           |\n|--------|-----|----------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"mo2208P6200\"; 具体合约代码(包括看涨和看跌标识), 可以通过 ak.option_cffex_zz1000_spot_sina 中的 call-标识 获取 |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| date   | object  | -   |\n| open   | float64 | -   |\n| high   | float64 | -   |\n| low    | float64 | -   |\n| close  | float64 | -   |\n| volume | int64   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_cffex_zz1000_daily_sina_df = ak.option_cffex_zz1000_daily_sina(symbol=\"mo2208P6200\")\nprint(option_cffex_zz1000_daily_sina_df)\n```\n\n数据示例\n\n```\n         date  open  high  low  close  volume\n0  2022-07-26  17.2  20.2  7.8    7.8     460\n1  2022-07-27   7.8   8.2  6.4    6.8     475\n2  2022-07-28   5.4   6.8  4.4    5.6     779\n3  2022-07-29   5.4   8.8  4.6    8.4     462\n4  2022-08-01   8.4  12.4  6.0    6.4     572\n```\n\n#### 上交所\n\n##### 合约到期月份列表\n\n接口: option_sse_list_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n\n描述: 获取期权-上交所-50ETF-合约到期月份列表\n\n限量: 单次返回指定品种的到期月份列表\n\n输入参数\n\n| 名称       | 类型  | 描述                                  |\n|----------|-----|-------------------------------------|\n| symbol   | str | symbol=\"50ETF\"; \"50ETF\" or \"300ETF\" |\n| exchange | str | exchange=\"null\"                     |\n\n输出参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_sse_list_sina_df = ak.option_sse_list_sina(symbol=\"50ETF\", exchange=\"null\")\nprint(option_sse_list_sina_df)\n```\n\n数据示例\n\n```\n['202002', '202003', '202006', '202009']\n```\n\n##### 合约到期月份列表\n\n接口: option_sse_expire_day_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n\n描述: 获取指定到期月份指定品种的剩余到期时间\n\n限量: 单次返回指定品种的品种的剩余到期时间\n\n输入参数\n\n| 名称         | 类型  | 描述                                  |\n|------------|-----|-------------------------------------|\n| trade_date | str | trade_date=\"202002\";                |\n| symbol     | str | symbol=\"50ETF\"; \"50ETF\" or \"300ETF\" |\n| exchange   | str | exchange=\"null\"                     |\n\n输出参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_sse_expire_day_sina_df = ak.option_sse_expire_day_sina(trade_date=\"202002\", symbol=\"50ETF\", exchange=\"null\")\nprint(option_sse_expire_day_sina_df)\n```\n\n数据示例\n\n```\n('2020-02-26', 3)\n```\n\n##### 所有合约的代码\n\n接口: option_sse_codes_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n\n描述: 新浪期权-看涨看跌合约合约的代码\n\n限量: 单次返回指定 symbol 合约的代码\n\n输入参数\n\n| 名称         | 类型  | 描述                                        |\n|------------|-----|-------------------------------------------|\n| symbol     | str | symbol=\"看涨期权\"; choice of {\"看涨期权\", \"看跌期权\"} |\n| trade_date | str | trade_date=\"202002\";                      |\n| underlying | str | underlying=\"510300\"                       |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| 序号   | int64  | -   |\n| 期权代码 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_sse_codes_sina_df = ak.option_sse_codes_sina(trade_date=\"202002\", underlying=\"510300\")\nprint(option_sse_codes_sina_df)\n```\n\n数据示例\n\n```\n    序号   期权代码\n0    1  10003887\n1    2  10003765\n2    3  10003709\n3    4  10003766\n4    5  10003710\n5    6  10003767\n6    7  10003711\n7    8  10003768\n8    9  10003712\n9   10  10003769\n10  11  10003713\n11  12  10003770\n12  13  10003714\n13  14  10003771\n14  15  10003715\n15  16  10003772\n16  17  10003716\n17  18  10003773\n18  19  10003717\n19  20  10003821\n20  21  10003829\n```\n\n##### 实时数据\n\n接口: option_sse_spot_price_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n\n描述: 期权实时数据\n\n限量: 单次返回期权实时数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"10002273\" |\n\n输出参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| 字段  | str | -   |\n| 值   | str | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_sse_spot_price_sina_df = ak.option_sse_spot_price_sina(symbol=\"10002273\")\nprint(option_sse_spot_price_sina_df)\n```\n\n数据示例\n\n```\n        字段                    值\n0       买量                    1\n1       买价               0.4518\n2      最新价               0.4550\n3       卖价               0.4590\n4       卖量                    1\n5      持仓量                  979\n6       涨幅                -2.57\n7      行权价               2.5000\n8      昨收价               0.4585\n9      开盘价               0.4550\n10     涨停价               0.7637\n11     跌停价               0.1703\n12    申卖价五               0.4735\n13    申卖量五                    1\n14    申卖价四               0.4700\n15    申卖量四                    1\n16    申卖价三               0.4684\n17    申卖量三                    1\n18    申卖价二               0.4600\n19    申卖量二                    2\n20    申卖价一               0.4590\n21    申卖量一                    1\n22    申买价一               0.4518\n23   申买量一                     1\n24    申买价二               0.4500\n25    申买量二                    3\n26    申买价三               0.4467\n27    申买量三                    1\n28    申买价四               0.4426\n29    申买量四                    1\n30    申买价五               0.4419\n31    申买量五                    1\n32    行情时间  2020-02-21 14:56:45\n33  主力合约标识                    0\n34     状态码                 E 01\n35  标的证券类型                  EBS\n36    标的股票               510050\n37  期权合约简称         50ETF购2月2500\n38      振幅                 7.02\n39     最高价               0.4799\n40     最低价               0.4477\n41     成交量                  626\n42     成交额           2851394.00\n```\n\n##### 期权标的物的实时数据\n\n接口: option_sse_underlying_spot_price_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n\n描述: 获取期权标的物的实时数据\n\n限量: 单次返回期权标的物的实时数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"sh510300\" |\n\n输出参数\n\n| 名称 | 类型     | 描述 |\n|----|--------|----|\n| 字段 | object | -  |\n| 值  | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_sse_underlying_spot_price_sina_df = ak.option_sse_underlying_spot_price_sina(symbol=\"sh510300\")\nprint(option_sse_underlying_spot_price_sina_df)\n```\n\n数据示例\n\n```\n       字段               值\n0    证券简称          300ETF\n1   今日开盘价           4.123\n2   昨日收盘价           4.131\n3   最近成交价           4.145\n4   最高成交价           4.178\n5   最低成交价           4.117\n6     买入价           4.144\n7     卖出价           4.146\n8    成交数量       444470153\n9    成交金额  1839049777.000\n10   买数量一          364200\n11   买价位一           4.144\n12   买数量二          659700\n13   买价位二           4.143\n14   买数量三           82400\n15   买价位三           4.142\n16   买数量四            2600\n17   买价位四           4.141\n18   买数量五          864800\n19   买价位五           4.140\n20   卖数量一            2400\n21   卖价位一           4.146\n22   卖数量二          763100\n23   卖价位二           4.147\n24   卖数量三          556300\n25   卖价位三           4.148\n26   卖数量四           86500\n27   卖价位四           4.149\n28   卖数量五          351400\n29   卖价位五           4.150\n30   行情日期      2020-02-21\n31   行情时间        15:00:00\n32   停牌状态              00\n```\n\n##### 期权希腊字母信息表\n\n接口: option_sse_greeks_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n\n描述: 新浪财经-期权希腊字母信息表\n\n限量: 单次返回当前交易日的期权希腊字母信息表\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"10002273\" |\n\n输出参数\n\n| 名称  | 类型     | 描述  |\n|-----|--------|-----|\n| 字段  | object | -   |\n| 值   | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_sse_greeks_sina_df = ak.option_sse_greeks_sina(symbol=\"10002273\")\nprint(option_sse_greeks_sina_df)\n```\n\n数据示例\n\n```\n        字段                  值\n0   期权合约简称       50ETF购2月2500\n1      成交量                626\n2    Delta                  1\n3    Gamma                  0\n4    Theta               -0.1\n5     Vega                  0\n6    隐含波动率             0.0008\n7      最高价             0.4799\n8      最低价             0.4477\n9     交易代码  510050C2002M02500\n10     行权价             2.5000\n11     最新价             0.4550\n12    理论价值             0.4591\n```\n\n##### 期权行情分钟数据\n\n接口: option_sse_minute_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n\n描述: 期权行情分钟数据, 只能返还当天的分钟数据\n\n限量: 单次返回期权行情分钟数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"10002273\" |\n\n输出参数\n\n| 名称  | 类型      | 描述    |\n|-----|---------|-------|\n| 日期  | object  | 当前交易日 |\n| 时间  | object  | -     |\n| 价格  | float64 | -     |\n| 成交  | int64   | -     |\n| 持仓  | int64   | -     |\n| 均价  | float64 | -     |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_sse_minute_sina_df = ak.option_sse_minute_sina(symbol=\"10003720\")\nprint(option_sse_minute_sina_df)\n```\n\n数据示例\n\n```\n      日期        时间      价格  成交     持仓      均价\n0    2022-01-21  09:26:00  0.0000   0      0  0.0000\n1    2022-01-21  09:27:00  0.0000   0      0  0.0000\n2    2022-01-21  09:28:00  0.0000   0      0  0.0000\n3    2022-01-21  09:29:00  0.0000   0      0  0.0000\n4    2022-01-21  09:30:00  0.0011  14  32758  0.0011\n..          ...       ...     ...  ..    ...     ...\n330  2022-01-21  14:56:00  0.0009  40  31816  0.0010\n331  2022-01-21  14:57:00  0.0008   0  31866  0.0010\n332  2022-01-21  14:58:00  0.0008   0      0  0.0010\n333  2022-01-21  14:59:00  0.0008   0      0  0.0010\n334  2022-01-21  15:00:00  0.0008   0  31866  0.0010\n```\n\n##### 期权行情日数据\n\n接口: option_sse_daily_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsCffexDP.php\n\n描述: 期权行情日数据\n\n限量: 单次返回期权行情日数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"10002273\" |\n\n输出参数\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 时间  | object  | -   |\n| 开盘  | float64 | -   |\n| 最高  | float64 | -   |\n| 最低  | float64 | -   |\n| 收盘  | float64 | -   |\n| 成交  | int64   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_sse_daily_sina_df = ak.option_sse_daily_sina(symbol=\"10002273\")\nprint(option_sse_daily_sina_df)\n```\n\n数据示例\n\n```\n     日期      开盘      最高      最低      收盘        成交\n0   2020-02-04  0.2200  0.2870  0.2151  0.2850  13729899\n1   2020-02-05  0.2868  0.3159  0.2711  0.3010  10716172\n2   2020-02-06  0.3050  0.3581  0.2939  0.3420   8849637\n3   2020-02-07  0.3265  0.3416  0.3110  0.3410   3538617\n4   2020-02-10  0.3251  0.3389  0.3117  0.3390   3569910\n5   2020-02-11  0.3402  0.3737  0.3391  0.3621   4518172\n6   2020-02-12  0.3600  0.3776  0.3550  0.3721   1020605\n7   2020-02-13  0.3756  0.3898  0.3556  0.3610   1956981\n8   2020-02-14  0.3662  0.3848  0.3626  0.3833   1130476\n9   2020-02-17  0.3800  0.4415  0.3800  0.4359   2606707\n10  2020-02-18  0.4250  0.4334  0.4042  0.4121    827370\n11  2020-02-19  0.4066  0.4300  0.4051  0.4122    720243\n12  2020-02-20  0.4200  0.4666  0.4050  0.4585   2621812\n13  2020-02-21  0.4550  0.4799  0.4477  0.4550   1892291\n```\n\n##### 期权行情分时数据-新浪\n\n接口: option_finance_minute_sina\n\n目标地址: https://stock.finance.sina.com.cn/option/quotes.html\n\n描述: 新浪财经-金融期权-股票期权分时行情数据\n\n限量: 单次返回指定期权的分时行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                      |\n|--------|-----|---------------------------------------------------------|\n| symbol | str | symbol=\"10002530\"; 通过 **ak.option_sse_codes_sina()** 获取 |\n\n输出参数\n\n| 名称            | 类型      | 描述  |\n|---------------|---------|-----|\n| date          | object  | -   |\n| time          | object  | -   |\n| price         | float64 | -   |\n| average_price | float64 | -   |\n| volume        | int64   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_finance_minute_sina_df = ak.option_finance_minute_sina(symbol=\"10002415\")\nprint(option_finance_minute_sina_df)\n```\n\n数据示例\n\n```\n            date      time   price average_price volume\n0     2020-07-13  09:26:00  0.0000        0.0000      0\n1     2020-07-13  09:27:00  0.0000        0.0000      0\n2     2020-07-13  09:28:00  0.0000        0.0000      0\n3     2020-07-13  09:29:00  0.0000        0.0000      0\n4     2020-07-13  09:30:00  0.0000        0.0000      0\n          ...       ...     ...           ...    ...\n1219  2020-07-17  14:56:00  1.3699        1.3677      0\n1220  2020-07-17  14:57:00  1.3699        1.3677      0\n1221  2020-07-17  14:58:00  1.3699        1.3677      0\n1222  2020-07-17  14:59:00  1.3699        1.3677      0\n1223  2020-07-17  15:00:00  1.3757        1.3679      1\n```\n\n##### 期权行情分时数据-东财\n\n接口: option_minute_em\n\n目标地址: https://wap.eastmoney.com/quote/stock/151.cu2404P61000.html\n\n描述: 东方财富网-行情中心-期权市场-分时行情\n\n限量: 单次返回指定 symbol 的分时行情数据; 只能获取近期合约的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                       |\n|--------|-----|----------------------------------------------------------|\n| symbol | str | symbol=\"MO2402-C-5400\"; 通过 **ak.option_current_em()** 获取 |\n\n输出参数\n\n| 名称     | 类型     | 描述      |\n|--------|--------|---------|\n| time   | object | -       |\n| close  | int64  | -       |\n| high   | int64  | -       |\n| low    | int64  | -       |\n| volume | int64  | 注意单位: 手 |\n| amount | int64  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_minute_em_df = ak.option_minute_em(symbol=\"MO2402-C-5400\")\nprint(option_minute_em_df)\n```\n\n数据示例\n\n```\n                 time  close  high   low  volume    amount\n0    2024-01-31 09:30   16.4  16.4  16.4       0       0.0\n1    2024-01-31 09:31   20.8  21.6  16.2     103  193580.0\n2    2024-01-31 09:32   20.8  21.6  20.0      63  130940.0\n3    2024-01-31 09:33   21.2  21.8  20.4      97  206420.0\n4    2024-01-31 09:34   21.0  21.0  20.0      63  130580.0\n..                ...    ...   ...   ...     ...       ...\n236  2024-01-31 14:56    9.2   9.8   9.2      19   18060.0\n237  2024-01-31 14:57    9.4   9.4   9.2      25   23380.0\n238  2024-01-31 14:58    9.4   9.4   9.4       0       0.0\n239  2024-01-31 14:59    9.4   9.4   9.4       0       0.0\n240  2024-01-31 15:00    9.2   9.2   9.2      64   92200.0\n[241 rows x 6 columns]\n```\n\n### 期权实时行情-东方财富\n\n接口: option_current_em\n\n目标地址: https://quote.eastmoney.com/center/qqsc.html\n\n描述: 东方财富网-行情中心-期权市场\n\n限量: 单次返回全部合约的实时行情\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 代码   | object  | -       |\n| 名称   | object  | -       |\n| 最新价  | float64 | -       |\n| 涨跌额  | float64 | -       |\n| 涨跌幅  | float64 | 注意单位: % |\n| 成交量  | float64 | -       |\n| 成交额  | float64 | -       |\n| 持仓量  | float64 | -       |\n| 行权价  | float64 | -       |\n| 剩余日  | float64 | -       |\n| 日增   | float64 | -       |\n| 昨结   | float64 | -       |\n| 今开   | float64 | -       |\n| 市场标识 | int64   | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_current_em_df = ak.option_current_em()\nprint(option_current_em_df)\n```\n\n数据示例\n\n```\n          序号     代码                名称   最新价  ...      日增    昨结    今开  市场标识\n0          1    pg2406p3500     LPG24年06月沽3500  19.0  ...    16.0   0.2   9.8   140\n1          2     b2406c4500      豆二24年06月购4500  40.5  ...     1.0   0.5  40.5   140\n2          3    pg2406p3600     LPG24年06月沽3600  11.8  ...     0.0   0.2  11.8   140\n3          4    pg2406p3550     LPG24年06月沽3550   9.6  ...     0.0   0.2   9.6   140\n4          5    pg2403p3800     LPG24年03月沽3800   9.2  ...   511.0   0.2   1.2   140\n      ...            ...                ...   ...  ...     ...   ...   ...   ...\n16835  16836  MO2402-C-5500  中证1000购24年02月5500   5.8  ...   381.0  11.4  10.0   221\n16836  16837  MO2402-C-5100  中证1000购24年02月5100  38.2  ...   982.0  75.6  71.0   221\n16837  16838  MO2402-C-5200  中证1000购24年02月5200  24.6  ...  1606.0  50.0  45.2   221\n16838  16839  MO2402-C-5600  中证1000购24年02月5600   3.2  ...   448.0   6.6   6.6   221\n16839  16840  MO2402-C-5400  中证1000购24年02月5400   9.2  ...    32.0  19.0  16.4   221\n[16840 rows x 15 columns]\n```\n\n### 期权龙虎榜-金融期权\n\n接口: option_lhb_em\n\n目标地址: https://data.eastmoney.com/other/qqlhb.html\n\n描述: 东方财富网-数据中心-期货期权-期权龙虎榜单-金融期权\n\n限量: 单次返回指定 symbol, indicator 和 trade_date 的所有数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                                                  |\n|------------|-----|-----------------------------------------------------------------------------------------------------|\n| symbol     | str | symbol=\"510050\"; choice of {\"510050\", \"510300\", \"159919\"}                                           |\n| indicator  | str | indicator=\"期权交易情况-认沽交易量\"; choice of {\"期权交易情况-认沽交易量\",\"期权持仓情况-认沽持仓量\", \"期权交易情况-认购交易量\", \"期权持仓情况-认购持仓量\"} |\n| trade_date | str | trade_date=\"20220121\"                                                                               |\n\n输出参数\n\n| 名称      | 类型      | 描述                   |\n|---------|---------|----------------------|\n| 交易类型    | object  | -                    |\n| 交易日期    | object  | -                    |\n| 证券代码    | object  | -                    |\n| 标的名称    | object  | -                    |\n| 名次      | float64 | -                    |\n| 机构      | object  | -                    |\n| XX量     | float64 | 注意: 根据 indicator 而变化 |\n| 增减      | float64 | -                    |\n| 净XX量    | float64 | 注意: 根据 indicator 而变化 |\n| 占总交易量比例 | float64 | -                    |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_lhb_em_df = ak.option_lhb_em(symbol=\"510300\", indicator=\"期权持仓情况-认沽持仓量\", trade_date=\"20220121\")\nprint(option_lhb_em_df)\n```\n\n数据示例\n\n```\n    交易类型        交易日期    证券代码    标的名称  ...      持仓量    增减   净持仓量  占总交易量比例\n0  认沽持仓量  2022-01-21  510300  300ETF  ...   173021.0 -11602.0   -4494.0  0.083968\n1  认沽持仓量  2022-01-21  510300  300ETF  ...   153486.0  14177.0  -35428.0  0.074487\n2  认沽持仓量  2022-01-21  510300  300ETF  ...   127108.0  -4549.0  -29379.0  0.061686\n3  认沽持仓量  2022-01-21  510300  300ETF  ...   125984.0    -20.0       NaN  0.061140\n4  认沽持仓量  2022-01-21  510300  300ETF  ...   121145.0  -2193.0       NaN  0.058792\n5  认沽持仓量  2022-01-21  510300  300ETF  ...  2060568.0 -25036.0 -350814.0  1.000000\n6  认沽持仓量  2022-01-21  510300  300ETF  ...   700744.0  -4187.0  -65535.0  0.340073\n```\n\n### 期权价值分析-金融期权\n\n接口: option_value_analysis_em\n\n目标地址: https://data.eastmoney.com/other/valueAnal.html\n\n描述: 东方财富网-数据中心-特色数据-期权价值分析\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型      | 描述                                                        |\n|----------|---------|-----------------------------------------------------------|\n| 期权代码     | object  | -                                                         |\n| 期权名称     | object  | -                                                         |\n| 最新价      | float64 | -                                                         |\n| 时间价值     | float64 | 注意: 指在期权剩余有效期内，合约标的价格变动有利于期权权利方的可能性。时间价值和内在价值共同构成期权的总价值。  |\n| 内在价值     | float64 | 注意: 指假如期权立即履行时该期权的价值，只能为正数或者为零。内在价值与时间价值共同构成期权的总价值。       |\n| 隐含波动率    | float64 | 注意: 指期权市场投资者在进行期权交易时对未来波动率的认识，且该认识已反映在期权的定价过程中。           |\n| 理论价格     | float64 | 注意: 采用 Black-Scholes 期权定价模型，推导出的期权理论价格。                   |\n| 标的名称     | object  | -                                                         |\n| 标的最新价    | float64 | -                                                         |\n| 标的近一年波动率 | float64 | 注意: 指一种衡量股票价格变化剧烈程度的指标，一般用百分数表示。股价波动率与认购期权、认沽期权价值均为正相关关系。 |\n| 到期日      | object  | -                                                         |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_value_analysis_em_df = ak.option_value_analysis_em()\nprint(option_value_analysis_em_df)\n```\n\n数据示例\n\n```\n     期权代码       期权名称     最新价  ...  标的最新价  标的近一年波动率  到期日\n0    10008904  500ETF沽9月7000  1.1278  ...  6.054     26.54  2025-09-24\n1    10008903  500ETF购9月7000  0.0863  ...  6.054     26.54  2025-09-24\n2    10008896   50ETF沽9月2900  0.2159  ...  2.744     19.41  2025-09-24\n3    10008895   50ETF购9月2900  0.0998  ...  2.744     19.41  2025-09-24\n4    10008894    科创50沽9月1300  0.2361  ...  1.157     41.15  2025-09-24\n..        ...            ...     ...  ...    ...       ...         ...\n659  10008577   50ETF购2月2750  0.0153  ...  2.744     19.41  2025-02-26\n660  10008576   50ETF购2月2700  0.0479  ...  2.744     19.41  2025-02-26\n661  10008575   50ETF购2月2650  0.0946  ...  2.744     19.41  2025-02-26\n662  10008574   50ETF购2月2600  0.1445  ...  2.744     19.41  2025-02-26\n663  10008573   50ETF购2月2550  0.1933  ...  2.744     19.41  2025-02-26\n[664 rows x 11 columns]\n```\n\n### 期权风险分析-金融期权\n\n接口: option_risk_analysis_em\n\n目标地址: https://data.eastmoney.com/other/riskanal.html\n\n描述: 东方财富网-数据中心-特色数据-期权风险分析\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述                                                                                 |\n|--------|---------|------------------------------------------------------------------------------------|\n| 期权代码   | object  | -                                                                                  |\n| 期权名称   | object  | -                                                                                  |\n| 最新价    | float64 | -                                                                                  |\n| 涨跌幅    | float64 | 注意单位: %;                                                                           |\n| 杠杆比率   | float64 | 注意: 杠杆比率=标价价格÷期权价格，杠杆反映投资标的相对投资期权的成本比例。                                            |\n| 实际杠杆比率 | float64 | 注意: 实际杠杆比率=对冲值×杠杆比率，透过实际杠杆比率，投资者可知道当标的涨跌1%时，期权的理论价格会变动多少个百分点。                      |\n| Delta  | float64 | 注意: 指期权标的股票价格变化对期权价格的影响程度。Delta=期权价格变化/期权标的股票价格变化。股票价格与认购期权价值为正相关关系，与认沽期权价值为负相关关系。 |\n| Gamma  | float64 | 注意: 指期权标的股票价格变化对Delta值的影响程度。Gamma=Delta的变化／期权标的股票价格变化。                             |\n| Vega   | float64 | 注意: 指合约标的证券价格波动率变化对期权价值的影响程度。Vega=期权价值变化/波动率的变化。波动率与认购、认沽期权价值均为正相关关系。              |\n| Rho    | float64 | 注意: 指无风险利率变化对期权价格的影响程度。Rho=期权价格的变化／无风险利率的变化。市场无风险利率与认购期权价值为正相关，与认沽期权为负相关。          |\n| Theta  | float64 | 注意: 指到期时间变化对期权价值的影响程度。Theta=期权价值变化/到期时间变化。到期期限与认购、认沽期权价值均为正相关关系。                   |\n| 到期日    | object  | -                                                                                  |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_risk_analysis_em_df = ak.option_risk_analysis_em()\nprint(option_risk_analysis_em_df)\n```\n\n数据示例\n\n```\n       期权代码        期权名称     最新价  ...     Rho   Theta         到期日\n0    10008665     科创50购2月1300  0.0024  ...  0.0003 -0.0692  2025-02-26\n1    10008653    科创板50购2月1250  0.0027  ...  0.0004 -0.0891  2025-02-26\n2    10008633     科创50购2月1150  0.0216  ...  0.0101 -0.7413  2025-02-26\n3    10008634     科创50购2月1200  0.0087  ...  0.0047 -0.5992  2025-02-26\n4    10008651    科创板50购2月1150  0.0105  ...  0.0059 -0.6495  2025-02-26\n..        ...             ...     ...  ...     ...     ...         ...\n659  10008583    50ETF沽2月2600  0.0001  ... -0.0006 -0.0748  2025-02-26\n660  10008621  500ETF沽2月5657A  0.0006  ... -0.0021 -0.3251  2025-02-26\n661  10008658    科创板50沽2月1050  0.0013  ... -0.0017 -0.3033  2025-02-26\n662  10008641     科创50沽2月1100  0.0022  ... -0.0031 -0.4518  2025-02-26\n663  10008744   500ETF沽2月5500  0.0001  ... -0.0001 -0.0435  2025-02-26\n[664 rows x 12 columns]\n```\n\n### 期权折溢价-金融期权\n\n接口: option_premium_analysis_em\n\n目标地址: https://data.eastmoney.com/other/premium.html\n\n描述: 东方财富网-数据中心-特色数据-期权折溢价\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述                                                  |\n|-------|---------|-----------------------------------------------------|\n| 期权代码  | object  | -                                                   |\n| 期权名称  | object  | -                                                   |\n| 最新价   | float64 | -                                                   |\n| 涨跌幅   | float64 | 注意单位: %;                                            |\n| 行权价   | float64 | -                                                   |\n| 折溢价率  | float64 | 注意: 折溢价反映的是投资者以现价买入某期权并持有至到期时，标的需要上升或下跌多少才能使这笔投资保本。 |\n| 标的名称  | object  | -                                                   |\n| 标的最新价 | float64 | -                                                   |\n| 标的涨跌幅 | float64 | -                                                   |\n| 盈亏平衡价 | float64 | 注意: 指期权投资者实现投资收益为零时标的证券的价格。                         |\n| 到期日   | object  | -                                                   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_premium_analysis_em_df = ak.option_premium_analysis_em()\nprint(option_premium_analysis_em_df)\n```\n\n数据示例\n\n```\n     期权代码       期权名称     最新价   涨跌幅  ... 标的最新价  标的涨跌幅 盈亏平衡价 到期日\n0    10007852     科创50沽3月450  0.0002   0.00  ...  1.157   6.05  0.450  2025-03-26\n1    10007830    科创板50沽3月450  0.0002   0.00  ...  1.122   6.05  0.450  2025-03-26\n2    10007708     科创50沽3月500  0.0003  50.00  ...  1.157   6.05  0.500  2025-03-26\n3    10007688    科创板50沽3月500  0.0003  50.00  ...  1.122   6.05  0.500  2025-03-26\n4    10007658     科创50沽3月550  0.0005  66.67  ...  1.157   6.05  0.550  2025-03-26\n..        ...            ...     ...    ...  ...    ...    ...    ...         ...\n659  10007651     科创50购3月650  0.4869  10.41  ...  1.157   6.05  1.137  2025-03-26\n660  10008359    科创板50购6月750  0.3520  14.29  ...  1.122   6.05  1.102  2025-06-25\n661  10008357     科创50购6月800  0.3361  15.50  ...  1.157   6.05  1.136  2025-06-25\n662  10008883     科创50购9月800  0.3339  14.74  ...  1.157   6.05  1.134  2025-09-24\n663  10008768  500ETF购6月4900  0.9787  -6.97  ...  6.054   1.71  5.879  2025-06-25\n[664 rows x 11 columns]\n```\n\n### 商品期权-新浪\n\n#### 当前合约\n\n接口: option_commodity_contract_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsDP.php\n\n描述: 新浪财经-商品期权当前在交易的合约\n\n限量: 单次返回指定 symbol 的所有合约数据\n\n输入参数\n\n| 名称     | 类型  | 描述            |\n|--------|-----|---------------|\n| symbol | str | symbol=\"玉米期权\" |\n\n输出参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| 序号  | str | -   |\n| 合约  | str | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_commodity_contract_sina_df = ak.option_commodity_contract_sina(symbol=\"黄金期权\")\nprint(option_commodity_contract_sina_df)\n```\n\n数据示例\n\n```\n   序号   合约\n0   1  au2204\n1   2  au2202\n2   3  au2206\n3   4  au2203\n```\n\n#### 当前合约\n\n接口: option_commodity_contract_table_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsDP.php\n\n描述: 新浪财经-商品期权的 T 型报价表\n\n限量: 单次返回指定 symbol 和 contract 的所有数据\n\n输入参数\n\n| 名称       | 类型  | 描述                                                               |\n|----------|-----|------------------------------------------------------------------|\n| symbol   | str | symbol=\"玉米期权\"                                                    |\n| contract | str | contract=\"au2204\"; 可以通过 ak.option_commodity_contract_sina() 接口获取 |\n\n输出参数\n\n| 名称          | 类型      | 描述     |\n|-------------|---------|--------|\n| 看涨合约-买量     | int64   | -      |\n| 看涨合约-买价     | float64 | -      |\n| 看涨合约-最新价    | float64 | -      |\n| 看涨合约-卖价     | float   | -      |\n| 看涨合约-卖量     | int64   | -      |\n| 看涨合约-持仓量    | int64   | -      |\n| 看涨合约-涨跌     | float64 | -      |\n| 行权价         | int64   | -      |\n| 看涨合约-看涨期权合约 | object  | 看涨合约代码 |\n| 看跌合约-买量     | int64   | -      |\n| 看跌合约-买价     | float64 | -      |\n| 看跌合约-最新价    | float64 | -      |\n| 看跌合约-卖价     | float64 | -      |\n| 看跌合约-卖量     | int64   | -      |\n| 看跌合约-持仓量    | int64   | -      |\n| 看跌合约-涨跌     | float64 | -      |\n| 看跌合约-看跌期权合约 | object  | 看跌合约代码 |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_commodity_contract_table_sina_df = ak.option_commodity_contract_table_sina(symbol=\"动力煤期权\", contract=\"zc2103\")\nprint(option_commodity_contract_table_sina_df)\n```\n\n数据示例\n\n```\n    看涨合约-买量  看涨合约-买价  看涨合约-最新价  看涨合约-卖价  ...  看跌合约-卖量  看跌合约-持仓量  看跌合约-涨跌  看跌合约-看跌期权合约\n0       0.0      0.0      52.0      0.0  ...       91       540     0.00   zc2103P500\n1       1.0     41.1      51.8      0.0  ...        1       305     0.00   zc2103P510\n2       1.0     20.2      45.3     67.0  ...       18       255     0.00   zc2103P520\n3       0.0      0.0      53.0      0.0  ...        1       260     0.00   zc2103P530\n4       1.0    145.4     196.0    210.2  ...        9       280     0.00   zc2103P540\n5       0.0      0.0      57.1      0.0  ...        1       277     0.00   zc2103P550\n6       0.0      0.0      46.9      0.0  ...        0       252     0.00   zc2103P560\n7       1.0      7.4      45.3      0.0  ...       21       174     0.00   zc2103P570\n8       1.0      1.6      32.0      0.0  ...        5       479     0.00   zc2103P580\n9       1.0      1.3      23.4      0.0  ...        1       293     0.00   zc2103P590\n10      5.0      4.9       4.9     21.7  ...      504      1145   -66.67   zc2103P600\n11      2.0      2.9       3.0      3.0  ...       96       451   -83.33   zc2103P610\n12      0.0      0.0       0.1      0.1  ...       58       758   -81.82   zc2103P620\n13      0.0      0.0       0.1      0.1  ...      103       840   -96.00   zc2103P630\n14      0.0      0.0       0.1      0.1  ...       18       414   -98.21   zc2103P640\n15      0.0      0.0       0.1      0.1  ...        0       276   -33.64   zc2103P650\n16      0.0      0.0       0.1      0.1  ...        6       218    -5.49   zc2103P660\n17      0.0      0.0       0.1      0.1  ...        0       164     1.87   zc2103P670\n18      0.0      0.0       0.1      0.1  ...        0       199    -3.05   zc2103P680\n19      0.0      0.0       0.1      0.1  ...        0       138     1.53   zc2103P690\n20      0.0      0.0       0.1      0.1  ...        0       283     0.36   zc2103P700\n21      0.0      0.0       0.1      0.1  ...        0       183     0.00   zc2103P710\n22      0.0      0.0       0.1      0.1  ...        0       215    88.25   zc2103P720\n23      0.0      0.0       0.1      0.1  ...        0       140    52.98   zc2103P730\n24      0.0      0.0       0.1      0.1  ...        0       112     1.46   zc2103P740\n25      0.0      0.0       0.1      0.1  ...        0       120    18.85   zc2103P750\n26      0.0      0.0       0.1      0.1  ...        0       111    48.73   zc2103P760\n27      0.0      0.0       0.1      0.1  ...        0       190    37.22   zc2103P770\n28      0.0      0.0       0.1      0.1  ...        0       161    -2.29   zc2103P780\n29      0.0      0.0       0.1      0.1  ...        0        79     7.46   zc2103P790\n30      0.0      0.0       0.1      0.1  ...        1       141    -0.53   zc2103P800\n31      0.0      0.0       0.1      0.1  ...        1        83     1.94   zc2103P810\n32      0.0      0.0       0.1      0.1  ...        0       113   -10.08   zc2103P820\n33      0.0      0.0       0.1      0.1  ...        0        40    25.82   zc2103P830\n34      0.0      0.0       0.1      0.1  ...        0        36     6.71   zc2103P840\n35      0.0      0.0       0.1      0.1  ...        0        17    16.98   zc2103P850\n36      NaN      NaN       NaN      NaN  ...        1        25    16.06   zc2103P860\n37      NaN      NaN       NaN      NaN  ...        0         0    14.76   zc2103P870\n38      NaN      NaN       NaN      NaN  ...        0         0    13.83   zc2103P880\n```\n\n#### 历史行情\n\n接口: option_commodity_hist_sina\n\n目标地址: https://stock.finance.sina.com.cn/futures/view/optionsDP.php\n\n描述: 新浪财经-商品期权的历史行情数据-日频率\n\n限量: 单次返回指定合约的历史行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                           |\n|--------|-----|------------------------------------------------------------------------------|\n| symbol | str | symbol=\"au2012C328\"; 可以通过 ak.option_commodity_contract_table_sina() 获取具体合约代码 |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| date   | object  | -   |\n| open   | float64 | -   |\n| high   | float64 | -   |\n| low    | float64 | -   |\n| close  | float64 | -   |\n| volume | int64   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_commodity_hist_sina_df = ak.option_commodity_hist_sina(symbol=\"au2012C328\")\nprint(option_commodity_hist_sina_df)\n```\n\n数据示例\n\n```\n         date     open     high      low    close volume\n0  2019-12-20   0.0000   0.0000   0.0000  22.9200      0\n1  2019-12-23   0.0000   0.0000   0.0000  25.9000      0\n2  2019-12-24  25.0600  25.0600  25.0600  25.0600      2\n3  2019-12-25  27.8400  27.8400  23.4400  27.2000     12\n4  2020-01-07  38.1800  38.1800  38.1800  38.1800      1\n5  2020-02-11  40.2200  40.2200  35.6000  35.6000      2\n6  2020-03-16  33.2800  33.2800  33.2800  33.2800      2\n7  2020-03-24  46.0400  46.0400  46.0400  46.0400      1\n8  2020-05-07  58.3200  58.3200  57.1400  58.2200      3\n```\n\n### 商品期权\n\n#### 商品期权手续费\n\n接口: option_comm_info\n\n目标地址: https://www.9qihuo.com/qiquanshouxufei\n\n描述: 九期网-商品期权手续费数据\n\n限量: 单次返回指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                     |\n|--------|-----|--------------------------------------------------------|\n| symbol | str | symbol=\"工业硅期权\"; 可以通过 ak.option_comm_symbol() 所有 symbol |\n\n输出参数\n\n| 名称       | 类型     | 描述 |\n|----------|--------|----|\n| 期权品种     | object | -  |\n| 现价       | int64  | -  |\n| 涨/跌停板    | object | -  |\n| 成交量      | int64  | -  |\n| 类型       | object | -  |\n| 权利金      | object | -  |\n| 开仓       | object | -  |\n| 平昨       | object | -  |\n| 平今       | object | -  |\n| 行权       | object | -  |\n| 每跳毛利/元   | int64  | -  |\n| 手续费(开+平) | object | -  |\n| 每跳净利/元   | int64  | -  |\n| 备注       | object | -  |\n| 交易所      | object | -  |\n| 手续费更新时间  | object | -  |\n| 价格更新时间   | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_comm_info_df = ak.option_comm_info(symbol=\"工业硅期权\")\nprint(option_comm_info_df)\n```\n\n数据示例\n\n```\n                                  期权品种  ...                   价格更新时间\n0    工业硅期权2409--10000 (si2409-C-10000)  ...  2024-07-05 15:00:49.769\n1    工业硅期权2409--10200 (si2409-C-10200)  ...  2024-07-05 15:00:49.769\n2    工业硅期权2409--10400 (si2409-C-10400)  ...  2024-07-05 15:00:49.769\n3    工业硅期权2409--10600 (si2409-C-10600)  ...  2024-07-05 15:00:49.769\n4    工业硅期权2409--10800 (si2409-C-10800)  ...  2024-07-05 15:00:49.769\n..                                 ...  ...                      ...\n303  工业硅期权2506--14400 (si2506-P-14400)  ...  2024-07-05 15:00:49.769\n304  工业硅期权2506--16000 (si2506-P-16000)  ...  2024-07-05 15:00:49.769\n305  工业硅期权2506--16200 (si2506-P-16200)  ...  2024-07-05 15:00:49.769\n306  工业硅期权2506--16400 (si2506-P-16400)  ...  2024-07-05 15:00:49.769\n307  工业硅期权2506--16600 (si2506-P-16600)  ...  2024-07-05 15:00:49.769\n[308 rows x 17 columns]\n```\n\n#### 商品期权保证金\n\n接口: option_margin\n\n目标地址: https://www.iweiai.com/qiquan/yuanyou\n\n描述: 唯爱期货-期权保证金\n\n限量: 单次返回指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                    |\n|--------|-----|-------------------------------------------------------|\n| symbol | str | symbol=\"原油\"; 可以通过 ak.option_margin_symbol() 所有 symbol |\n\n输出参数\n\n| 名称        | 类型      | 描述 |\n|-----------|---------|----|\n| 合约标的      | object  | -  |\n| 合约代码      | object  | -  |\n| 结算价       | float64 | -  |\n| 交易乘数      | int64   | -  |\n| 买方权利金     | int64   | -  |\n| 卖方保证金     | float64 | -  |\n| 手续费单位     | object  | -  |\n| 开仓手续费     | int64   | -  |\n| 平今手续费     | int64   | -  |\n| 平昨手续费     | int64   | -  |\n| 手续费(开+平今) | int64   | -  |\n| 更新时间      | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_margin_df = ak.option_margin(symbol=\"原油期权\")\nprint(option_margin_df)\n```\n\n数据示例\n\n```\n     合约标的     合约代码     结算价  ...  平昨手续费  手续费(开+平今)  更新时间\n0    原油sc2508  sc2508C385  129.45  ...     10         10  2025-06-13 20:33:52\n1    原油sc2508  sc2508C390  124.50  ...     10         10  2025-06-13 20:33:52\n2    原油sc2508  sc2508C395  119.60  ...     10         10  2025-06-13 20:33:52\n3    原油sc2508  sc2508C400  114.70  ...     10         10  2025-06-13 20:33:52\n4    原油sc2508  sc2508C405  109.80  ...     10         10  2025-06-13 20:33:52\n..        ...         ...     ...  ...    ...        ...                  ...\n101  原油sc2509  sc2509P510   31.80  ...     10         10  2025-06-13 20:33:52\n102  原油sc2509  sc2509P520   37.20  ...     10         10  2025-06-13 20:33:52\n103  原油sc2509  sc2509P530   43.10  ...     10         10  2025-06-13 20:33:52\n104  原油sc2509  sc2509P540   49.40  ...     10         10  2025-06-13 20:33:52\n105  原油sc2509  sc2509P550   56.10  ...     10         10  2025-06-13 20:33:52\n[106 rows x 12 columns]\n```\n\n#### 上海期货交易所\n\n接口: option_hist_shfe\n\n目标地址: https://www.shfe.com.cn/reports/tradedata/dailyandweeklydata/\n\n描述: 上海期货交易所-商品期权数据\n\n限量: 单次返回指定 symbol 和 trade_date 的期权行情数据, 只能获取 20200824 之后的数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                                                                              |\n|------------|-----|---------------------------------------------------------------------------------------------------------------------------------|\n| symbol     | str | symbol=\"铜期权\"; choice of {'原油期权', '铜期权', '铝期权', '锌期权', '铅期权', '螺纹钢期权', '镍期权', '锡期权', '氧化铝期权', '黄金期权', '白银期权', '丁二烯橡胶期权', '天胶期权'} |\n| trade_date | str | trade_date=\"20191017\"                                                                                                           |\n\n输出参数\n\nPart-1: 上海期货交易所期权合约行情\n\n| 名称    | 类型      | 描述    |\n|-------|---------|-------|\n| 合约代码  | object  |       |\n| 开盘价   | float64 |       |\n| 最高价   | float64 |       |\n| 最低价   | float64 |       |\n| 收盘价   | float64 |       |\n| 前结算价  | float64 |       |\n| 结算价   | float64 |       |\n| 涨跌1   | float64 |       |\n| 涨跌2   | float64 |       |\n| 成交量   | float64 |       |\n| 持仓量   | float64 |       |\n| 持仓量变化 | float64 |       |\n| 成交额   | float64 |       |\n| 德尔塔   | float64 | Delta |\n| 行权量   | float64 |       |\n\n注:\n1. 期权报价单位: 铜、天然橡胶为元/吨.\n2. 期权交易单位: 铜为 5 吨/手；天然橡胶为 10 吨/手.\n3. 成交量、持仓量、持仓量变化单位为手, 双边计算；成交额双边计算.\n4. 涨跌1=收盘价-前结算价, 涨跌2=结算价-前结算价.\n5. 合约系列: 具有相同月份标的期货合约的所有期权合约的统称.\n6. 隐含波动率: 根据期权市场交易价格, 利用期权定价模型计算出来的标的期货合约的价格波动率数值.\n\nPart-2: 上海期货交易所隐含波动参考值\n\n| 名称    | 类型      | 描述     |\n|-------|---------|--------|\n| 合约系列  | object  |        |\n| 成交量   | float64 | 注意单位：手 |\n| 持仓量   | float64 | 注意单位：手 |\n| 持仓量变化 | float64 | 注意单位：手 |\n| 成交额   | float64 | 注意单位：手 |\n| 行权量   | float64 | 注意单位：手 |\n| 隐含波动率 | float64 |        |\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_hist_shfe_df = ak.option_hist_shfe(symbol=\"铝期权\", trade_date=\"20200827\")\nprint(option_hist_shfe_df)\n\noption_vol_shfe_df = ak.option_vol_shfe(symbol=\"天胶期权\", trade_date=\"20250418\")\nprint(option_vol_shfe_df)\n```\n\n数据示例\n\npart_1: 上海期货交易所期权合约行情\n\n```\n     合约代码 开盘价 最高价 最低价  ...  持仓量变化  成交额       德尔塔  行权量\n588  al2010C12400                                ...      0  0.0  0.999999    0\n589  al2010C12500                                ...      0  0.0  0.999999    0\n590  al2010C12600                                ...      0  0.0  0.999842    0\n591  al2010C12700                                ...      0  0.0  0.998645    0\n592  al2010C12800                                ...      0  0.0  0.996855    0\n..                              ...  ..  ..  ..  ...    ...  ...       ...  ...\n901  al2101P15500                                ...      0  0.0 -0.835443    0\n902  al2101P15600                                ...      0  0.0 -0.853291    0\n903  al2101P15700                                ...      0  0.0 -0.869626    0\n904  al2101P15800                                ...      0  0.0 -0.884810    0\n905  al2101P15900                                ...      0  0.0 -0.898378    0\n```\n\npart_2: 上海期货交易所隐含波动参考值\n\n```\n   合约系列   成交量   持仓量  持仓量变化       成交额 行权量     隐含波动率\n11  al2010                          2008  8373    435  135.3745   0  0.178040\n12  al2011                           292   906      0   12.1665   0  0.150241\n13  al2012                             0    66      0    0.0000   0  0.150241\n14  al2101                             0    66      0    0.0000   0  0.150241\n```\n\n#### 大连商品交易所\n\n接口: option_hist_dce\n\n目标地址: http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/rtj/rxq/index.html\n\n描述: 大连商品交易所-商品期权数据\n\n限量: 单次返回指定 symbol 和 trade_date 的期权日行情数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                                                                                                                                    |\n|------------|-----|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| symbol     | str | symbol=\"聚丙烯期权\"; choice of {\"玉米期权\", \"豆粕期权\", \"铁矿石期权\", \"液化石油气期权\", \"聚乙烯期权\", \"聚氯乙烯期权\", \"聚丙烯期权\", \"棕榈油期权\", \"黄大豆1号期权\", \"黄大豆2号期权\", \"豆油期权\", \"乙二醇期权\", \"苯乙烯期权\", \"鸡蛋期权\", \"玉米淀粉期权\", \"生猪期权\", \"原木期权\"} |\n| trade_date | str | trade_date=\"20251016\"                                                                                                                                                                 |\n\n输出参数\n\nPart-1: 大连商品交易所期权合约行情\n\n| 名称       | 类型      | 描述 |\n|----------|---------|----|\n| 品种名称     | object  |    |\n| 合约       | object  |    |\n| 开盘价      | float64 |    |\n| 最高价      | float64 |    |\n| 最低价      | float64 |    |\n| 收盘价      | float64 |    |\n| 前结算价     | float64 |    |\n| 结算价      | float64 |    |\n| 涨跌       | float64 |    |\n| 涨跌1      | float64 |    |\n| Delta    | float64 |    |\n| 隐含波动率(%) | float64 |    |\n| 成交量      | int64   |    |\n| 持仓量      | int64   |    |\n| 持仓量变化    | int64   |    |\n| 成交额      | float64 |    |\n| 行权量      | int64   |    |\n\n说明:\n\n1. 价格：自2019年12月02日起，纤维板报价单位由元/张改为元/立方米\n2. 价格：元/吨，鸡蛋为元/500千克，纤维板为元/立方米，胶合板为元/张，原木为元/立方米\n3. 成交量、持仓量：手（按单边计算）\n4. 成交额：万元（按单边计算）\n5. 涨跌＝收盘价-前结算价\n6. 涨跌1=今结算价-前结算价\n7. 合约系列：具有相同月份标的期货合约的所有期权合约的统称\n8. 隐含波动率：根据期权市场价格，利用期权定价模型计算的标的期货合约价格波动率\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_hist_dce_df = ak.option_hist_dce(symbol=\"聚丙烯期权\", trade_date=\"20251016\")\nprint(option_hist_dce_df)\n```\n\n数据示例\n\n```\n    品种名称       合约       开盘价  最高价   最低价 ...  成交量 持仓量 持仓量变化 成交额 行权量\n0    聚丙烯  pp2511-C-5900     0      0     0  ...      0       0     0     0.00   0\n1    聚丙烯  pp2511-C-6000     0      0     0  ...      0       0     0     0.00   0\n2    聚丙烯  pp2511-C-6100     0      0     0  ...      0       0     0     0.00   0\n3    聚丙烯  pp2511-C-6200   338    362   301  ...    305     185    92    51.00   0\n4    聚丙烯  pp2511-C-6300   241  262.5   200  ...    353     203    59    40.73   0\n..   ...            ...   ...    ...   ...  ...    ...     ...   ...      ...  ..\n350  聚丙烯  pp2609-P-7200     0      0     0  ...      0       0     0     0.00   0\n351  聚丙烯  pp2609-P-7400     0      0     0  ...      0       0     0     0.00   0\n352  聚丙烯  pp2609-P-7600     0      0     0  ...      0       0     0     0.00   0\n353  聚丙烯  pp2609-P-7800     0      0     0  ...      0       0     0     0.00   0\n354   总计           None  None   None  None  ...  62945  125168  8929  1082.37   0\n[355 rows x 17 columns]\n```\n\n#### 郑州商品交易所\n\n接口: option_hist_czce\n\n目标地址: http://www.czce.com.cn/cn/jysj/mrhq/H770301index_1.htm\n\n描述: 郑州商品交易所-商品期权数据\n\n限量: 单次返回指定 symbol 和 trade_date 的期权行情数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                              |\n|------------|-----|-------------------------------------------------|\n| symbol     | str | symbol=\"白糖期权\"; 交易所上市的期权品种，最早上市的为 20170419 的白糖期权 |\n| trade_date | str | trade_date=\"20191017\"                           |\n\n输出参数\n\n郑州商品交易所-期权合约行情\n\n| 名称      | 类型      | 描述  |\n|---------|---------|-----|\n| 品种代码    | object  |     |\n| 昨结算     | float64 |     |\n| 今开盘     | float64 |     |\n| 最高价     | float64 |     |\n| 最低价     | float64 |     |\n| 今收盘     | float64 |     |\n| 今结算     | float64 |     |\n| 涨跌1     | float64 |     |\n| 涨跌2     | float64 |     |\n| 成交量(手)  | float64 |     |\n| 空盘量     | float64 |     |\n| 增减量     | float64 |     |\n| 成交额(万元) | float64 |     |\n| DELTA   | float64 |     |\n| 隐含波动率   | float64 |     |\n| 行权量     | float64 |     |\n\n说明:\n\n1. 价格: 元/吨\n2. 成交量、空盘量: 手\n3. 成交额: 万元\n4. 涨跌一: 今收盘-昨结算\n5. 涨跌二: 今结算-昨结算\n6. 隐含波动率: 将当日期权合约的结算价代入期权定价模型, 反推出来的波动率数值\n7. 交易所早期的字段名不统一，本接口字段统一为最新值\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_hist_czce_df = ak.option_hist_czce(symbol=\"白糖期权\", trade_date=\"20240711\")\nprint(option_hist_czce_df)\n```\n\n数据示例\n\n```\n      合约代码    昨结算   今开盘   最高价 最低价  ... 增减量 成交额(万元) DELTA 隐含波动率 行权量\n0    SR409C5400  774.5    0.0    0.0    0.0  ...  0.0     0.00  0.9888  20.73  0.0\n1    SR409C5500  675.0  691.0  696.0  691.0  ... -1.0     2.77  0.9814  19.42  0.0\n2    SR409C5600  576.0    0.0    0.0    0.0  ...  0.0     0.00  0.9701  18.06  0.0\n3    SR409C5700  478.0  507.0  509.0  507.0  ... -2.0     1.51  0.9529  16.65  0.0\n4    SR409C5800  381.5  382.5  411.0  382.5  ... -8.0    60.66  0.9259  15.18  0.0\n..          ...    ...    ...    ...    ...  ...  ...      ...     ...    ...  ...\n177  SR505P6100  375.5    0.0    0.0    0.0  ...  0.0     0.00 -0.6236  11.80  0.0\n178  SR505P6200  446.5    0.0    0.0    0.0  ...  0.0     0.00 -0.6807  11.86  0.0\n179  SR505P6300  522.5    0.0    0.0    0.0  ...  0.0     0.00 -0.7318  11.97  0.0\n180  SR505P6400  604.0    0.0    0.0    0.0  ...  0.0     0.00 -0.7763  12.18  0.0\n181  SR505P6500  686.5    0.0    0.0    0.0  ...  0.0     0.00 -0.8193  12.18  0.0\n[182 rows x 16 columns]\n```\n\n#### 广州期货交易所\n\n接口: option_hist_gfex\n\n目标地址: http://www.gfex.com.cn/gfex/rihq/hqsj_tjsj.shtml\n\n描述: 广州期货交易所-商品期权数据\n\n限量: 单次返回指定 symbol 和 trade_date 的期权行情数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                     |\n|------------|-----|----------------------------------------|\n| symbol     | str | symbol=\"工业硅\"; choice of {\"工业硅\", \"碳酸锂\"} |\n| trade_date | str | trade_date=\"20230724\"; 交易日             |\n\n输出参数\n\n广州期货交易所期权合约行情\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| 商品名称  | object  |    |\n| 合约名称  | object  |    |\n| 开盘价   | float64 |    |\n| 最高价   | float64 |    |\n| 最低价   | float64 |    |\n| 收盘价   | float64 |    |\n| 前结算价  | float64 |    |\n| 结算价   | float64 |    |\n| 涨跌    | float64 |    |\n| 涨跌1   | float64 |    |\n| Delta | float64 |    |\n| 成交量   | int64   |    |\n| 持仓量   | int64   |    |\n| 持仓量变化 | int64   |    |\n| 成交额   | float64 |    |\n| 行权量   | int64   |    |\n| 隐含波动率 | float64 |    |\n\n说明:\n\n1. 价格：元/吨\n2. 成交量、持仓量、持仓量变化：手（按单边计算）\n3. 成交额：万元（按单边计算）\n4. 涨跌＝收盘价-前结算价\n5. 涨跌1=今结算价-前结算价\n6. 合约系列：具有相同月份标的期货合约的所有期权合约的统称\n7. 隐含波动率：根据期权市场价格，利用期权定价模型计算的标的期货合约价格波动率\n\n接口示例-广州期货交易所期权合约行情(工业硅)\n\n```python\nimport akshare as ak\n\noption_hist_gfex_df = ak.option_hist_gfex(symbol=\"工业硅\", trade_date=\"20230418\")\nprint(option_hist_gfex_df)\n```\n\n数据示例-广州期货交易所期权合约行情(工业硅)\n\n```\n      商品名称  合约名称  开盘价  最高价  ...  持仓量变化      成交额  行权量      隐含波动率\n0      工业硅  si2308-C-13000  0.0  0.0  ...      0    0.000    0  22.436477\n1      工业硅  si2308-C-13200  0.0  0.0  ...      0    0.000    0  22.538374\n2      工业硅  si2308-C-13400  0.0  0.0  ...      0    0.000    0  22.493164\n3      工业硅  si2308-C-13600  0.0  0.0  ...      0    0.000    0  22.467333\n4      工业硅  si2308-C-13800  0.0  0.0  ...      0    0.000    0  22.530720\n..     ...             ...  ...  ...  ...    ...      ...  ...        ...\n597    工业硅  si2403-P-17800  0.0  0.0  ...      0    0.000    0  19.727143\n598    工业硅  si2403-P-18000  0.0  0.0  ...      0    0.000    0  19.728669\n599    工业硅  si2403-P-18200  0.0  0.0  ...      0    0.000    0  19.719663\n600  工业硅小计                  NaN  NaN  ...   -427  494.246    1        NaN\n601     总计                  NaN  NaN  ...   -427  494.246    1        NaN\n```\n\n#### 广州期货交易所-隐含波动参考值\n\n接口: option_vol_gfex\n\n目标地址: http://www.gfex.com.cn/gfex/rihq/hqsj_tjsj.shtml\n\n描述: 广州期货交易所-商品期权数据-隐含波动参考值\n\n限量: 单次返回指定 symbol 和 trade_date 的期权行情数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                     |\n|------------|-----|----------------------------------------|\n| symbol     | str | symbol=\"工业硅\"; choice of {\"工业硅\", \"碳酸锂\"} |\n| trade_date | str | trade_date=\"20230724\"                  |\n\n输出参数\n\n广州期货交易所-隐含波动参考值\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| 合约系列  | object  |    |\n| 隐含波动率 | float64 |    |\n\n说明:\n\n1. 价格：元/吨\n2. 成交量、持仓量、持仓量变化：手（按单边计算）\n3. 成交额：万元（按单边计算）\n4. 涨跌＝收盘价-前结算价\n5. 涨跌1=今结算价-前结算价\n6. 合约系列：具有相同月份标的期货合约的所有期权合约的统称\n7. 隐含波动率：根据期权市场价格，利用期权定价模型计算的标的期货合约价格波动率\n\n接口示例-广州期货交易所-隐含波动参考值(工业硅)\n\n```python\nimport akshare as ak\n\noption_vol_gfex_df = ak.option_vol_gfex(symbol=\"工业硅\", trade_date=\"20230418\")\nprint(option_vol_gfex_df)\n```\n\n数据示例-广州期货交易所-隐含波动参考值(工业硅)\n\n```\n   合约系列  隐含波动率\n0  si2308  22.542314\n1  si2309  21.018517\n2  si2310  21.018517\n3  si2311  21.018517\n4  si2312  19.894257\n5  si2401  19.894257\n6  si2402  19.894257\n7  si2403  19.729307\n```\n\n#### 历史数据\n\n接口: option_czce_hist\n\n目标地址: http://www.czce.com.cn/cn/jysj/lshqxz/H770319index_1.htm\n\n描述: 郑州商品交易所的商品期权历史行情数据\n\n限量: 单次返回指定年份指定品种期权历史行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                                                                                                                                                                                |\n|--------|-----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| year   | str | year=\"2019\"; 指定年份                                                                                                                                                                                                                                                 |\n| symbol | str | symbol=\"SR\"; choice of {\"白糖\": \"SR\", \"棉花\": \"CF\", \"PTA\": \"TA\", \"甲醇\": \"MA\", \"菜籽粕\": \"RM\", \"动力煤\": \"ZC\", \"菜籽油\": \"OI\", \"花生\": \"PK\", \"对二甲苯\": \"PX\", \"烧碱\": \"SH\", \"纯碱\": \"SA\", \"短纤\": \"PF\", \"锰硅\": \"SM\", \"硅铁\": \"SF\", \"尿素\": \"UR\", \"苹果\": \"AP\", \"红枣\": \"CJ\", \"玻璃\": \"FG\", \"瓶片\": \"PR\"} |\n\n输出参数\n\n| 名称      | 类型      | 描述  |\n|---------|---------|-----|\n| 交易日期    | object  |     |\n| 品种代码    | object  |     |\n| 昨结算     | float64 |     |\n| 今开盘     | float64 |     |\n| 最高价     | float64 |     |\n| 最低价     | float64 |     |\n| 今收盘     | float64 |     |\n| 今结算     | float64 |     |\n| 涨跌1     | float64 |     |\n| 涨跌2     | float64 |     |\n| 成交量(手)  | object  |     |\n| 空盘量     | object  |     |\n| 增减量     | object  |     |\n| 成交额(万元) | object  |     |\n| DELTA   | float64 |     |\n| 隐含波动率   | float64 |     |\n| 行权量     | float64 |     |\n\n说明:\n\n1. 价格: 元/吨\n2. 成交量、空盘量: 手\n3. 成交额: 万元\n4. 涨跌一: 今收盘-昨结算\n5. 涨跌二: 今结算-昨结算\n6. 隐含波动率: 将当日期权合约的结算价代入期权定价模型, 反推出来的波动率数值\n\n接口示例\n\n```python\nimport akshare as ak\n\noption_hist_yearly_czce_df = ak.option_hist_yearly_czce(symbol=\"RM\", year=\"2025\")\nprint(option_hist_yearly_czce_df)\n```\n\n数据示例\n\n```\n       交易日期     合约代码     ...  隐含波动率                       行权量\n0      2025-01-02  RM503C1925  ...  22.64  0\n1      2025-01-02  RM503C1950  ...  22.42  0\n2      2025-01-02  RM503C1975  ...  22.25  0\n3      2025-01-02  RM503C2000  ...  22.12  0\n4      2025-01-02  RM503C2025  ...  22.05  0\n...           ...         ...  ...    ...                              ...\n16067  2025-03-21  RM601P2600  ...  21.49  0\n16068  2025-03-21  RM601P2650  ...  21.78  0\n16069  2025-03-21  RM601P2700  ...  22.11  0\n16070  2025-03-21  RM601P2750  ...  22.48  0\n16071  2025-03-21  RM601P2800  ...  22.90  0\n[16072 rows x 17 columns]\n```\n"
  },
  {
    "path": "docs/data/others/others.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 另类数据\n\n### 汽车销量排行\n\n#### 乘联会-统计数据-总体市场\n\n接口: car_market_total_cpca\n\n目标地址: http://data.cpcadata.com/TotalMarket\n\n描述: 乘联会-统计数据-总体市场\n\n限量: 单次返回指定 symbol 和 indicator 的数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                 |\n|-----------|-----|----------------------------------------------------|\n| symbol    | str | symbol=\"狭义乘用车\"; choice of {\"狭义乘用车\", \"广义乘用车\"}       |\n| indicator | str | indicator=\"产量\"; choice of {\"产量\", \"批发\", \"零售\", \"出口\"} |\n\n输出参数\n\n| 名称       | 类型      | 描述       |\n|----------|---------|----------|\n| 月份       | object  | -        |\n| {前一个年份}年 | float64 | 注意单位: 万辆 |\n| {当前年份}年  | float64 | 注意单位: 万辆 |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncar_market_total_cpca_df = ak.car_market_total_cpca(symbol=\"狭义乘用车\", indicator=\"产量\")\nprint(car_market_total_cpca_df)\n```\n\n数据示例\n\n```\n     月份   2023年     2024年\n0    1月  134.6266  202.0941\n1    2月  166.4180  123.4852\n2    3月  208.7694       NaN\n3    4月  172.8825       NaN\n4    5月  198.9448       NaN\n5    6月  219.4569       NaN\n6    7月  208.9492       NaN\n7    8月  223.7048       NaN\n8    9月  243.6938       NaN\n9   10月  244.8691       NaN\n10  11月  264.3703       NaN\n11  12月  267.8423       NaN\n```\n\n#### 乘联会-统计数据-厂商排名\n\n接口: car_market_man_rank_cpca\n\n目标地址: http://data.cpcadata.com/ManRank\n\n描述: 乘联会-统计数据-厂商排名\n\n限量: 单次返回指定 symbol 和 indicator 的数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                            |\n|-----------|-----|-------------------------------------------------------------------------------|\n| symbol    | str | symbol=\"狭义乘用车-单月\"; choice of {\"狭义乘用车-单月\", \"狭义乘用车-累计\", \"广义乘用车-单月\", \"广义乘用车-累计\"} |\n| indicator | str | indicator=\"批发\"; choice of {\"批发\", \"零售\"}                                        |\n\n输出参数\n\n| 名称       | 类型      | 描述       |\n|----------|---------|----------|\n| 月份       | object  | -        |\n| {前一个年份}年 | float64 | 注意单位: 万辆 |\n| {当前年份}年  | float64 | 注意单位: 万辆 |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncar_market_man_rank_cpca_df = ak.car_market_man_rank_cpca(symbol=\"狭义乘用车-单月\", indicator=\"批发\")\nprint(car_market_man_rank_cpca_df)\n```\n\n数据示例\n\n```\n       厂商  2023年2月  2024年2月\n0    奇瑞汽车   9.6553  13.7819\n1   比亚迪汽车  19.1664  12.1748\n2    吉利汽车  10.8701  11.1398\n3    一汽大众  10.5007   8.4073\n4    长安汽车  11.6407   8.3550\n5    上汽大众   7.3303   6.3003\n6    长城汽车   5.1053   6.0550\n7   特斯拉中国   7.4402   6.0365\n8  上汽通用五菱   3.7029   4.9366\n9    华晨宝马   5.2871   4.1604\n```\n\n#### 乘联会-统计数据-车型大类\n\n接口: car_market_cate_cpca\n\n目标地址: http://data.cpcadata.com/CategoryMarket\n\n描述: 乘联会-统计数据-车型大类\n\n限量: 单次返回指定 symbol 和 indicator 的数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                |\n|-----------|-----|---------------------------------------------------|\n| symbol    | str | symbol=\"轿车\"; choice of {\"轿车\", \"MPV\", \"SUV\", \"占比\"} |\n| indicator | str | indicator=\"批发\"; choice of {\"批发\", \"零售\"}            |\n\n输出参数\n\n| 名称       | 类型      | 描述       |\n|----------|---------|----------|\n| 月份       | object  | -        |\n| {前一个年份}年 | float64 | 注意单位: 万辆 |\n| {当前年份}年  | float64 | 注意单位: 万辆 |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncar_market_cate_cpca_df = ak.car_market_cate_cpca(symbol=\"轿车\", indicator=\"批发\")\nprint(car_market_cate_cpca_df)\n```\n\n数据示例\n\n```\n     月份   2023年    2024年\n0    1月   63.2478  87.1795\n1    2月   72.2022  54.5316\n2    3月   90.4165      NaN\n3    4月   79.3741      NaN\n4    5月   89.9973      NaN\n5    6月   98.1894      NaN\n6    7月   91.2119      NaN\n7    8月   97.8467      NaN\n8    9月  106.0477      NaN\n9   10月  105.2851      NaN\n10  11月  110.8935      NaN\n11  12月  122.1150      NaN\n```\n\n#### 乘联会-统计数据-国别细分市场\n\n接口: car_market_country_cpca\n\n目标地址: http://data.cpcadata.com/CountryMarket\n\n描述: 乘联会-统计数据-国别细分市场\n\n限量: 单次返回指定 symbol 和 indicator 的数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型      | 描述       |\n|------|---------|----------|\n| 月份   | object  | -        |\n| 自主   | float64 | 注意单位: 万辆 |\n| 德系   | float64 | 注意单位: 万辆 |\n| 日系   | float64 | 注意单位: 万辆 |\n| 法系   | float64 | 注意单位: 万辆 |\n| 美系   | float64 | 注意单位: 万辆 |\n| 韩系   | float64 | 注意单位: 万辆 |\n| 其他欧系 | float64 | 注意单位: 万辆 |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncar_market_country_cpca_df = ak.car_market_country_cpca()\nprint(car_market_country_cpca_df)\n```\n\n数据示例\n\n```\n     月份         自主      德系  ...        美系       韩系     其他欧系\n0    2023-3月  52.937614  18.783411  ...  8.944649  1.841395  0.656085\n1    2023-4月  56.117973  17.591091  ...  9.997354  1.454204  0.767231\n2    2023-5月  54.849330  17.672825  ...  9.739207  1.441945  0.856578\n3    2023-6月  53.630800  18.637491  ...  9.731017  1.782815  0.873428\n4    2023-7月  58.120550  17.234150  ...  8.402960  1.375989  0.825758\n5    2023-8月  57.429867  17.205738  ...  8.894298  1.640349  0.783967\n6    2023-9月  56.517770  17.429178  ...  8.500368  1.590704  0.753809\n7   2023-10月  59.985280  15.645699  ...  7.352488  1.470236  0.694709\n8   2023-11月  59.638090  16.112440  ...  7.439157  1.567490  0.624859\n9   2023-12月  57.890274  17.040712  ...  8.136273  1.738795  0.650838\n10   2024-1月  60.437893  17.406410  ...  6.315318  1.404617  0.804964\n11   2024-2月  60.124140  17.637665  ...  6.854863  1.837663  0.695454\n[12 rows x 8 columns]\n```\n\n#### 乘联会-统计数据-级别细分市场\n\n接口: car_market_segment_cpca\n\n目标地址: http://data.cpcadata.com/SegmentMarket\n\n描述: 乘联会-统计数据-级别细分市场\n\n限量: 单次返回指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                          |\n|--------|-----|---------------------------------------------|\n| symbol | str | symbol=\"轿车\"; choice of {\"轿车\", \"MPV\", \"SUV\"} |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 月份  | object  | -        |\n| A00 | float64 | 注意单位: 万辆 |\n| A0  | float64 | 注意单位: 万辆 |\n| A   | float64 | 注意单位: 万辆 |\n| B   | float64 | 注意单位: 万辆 |\n| C   | float64 | 注意单位: 万辆 |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncar_market_segment_cpca_df = ak.car_market_segment_cpca(symbol=\"轿车\")\nprint(car_market_segment_cpca_df)\n```\n\n数据示例\n\n```\n          月份        A00         A0          A          B          C\n0    2023-3月   5.456084   8.219518  42.917168  34.389297   9.017934\n1    2023-4月   5.164784  10.342795  44.179653  30.211243  10.101533\n2    2023-5月   4.764809   9.978744  46.005154  28.248846  11.002440\n3    2023-6月   4.684416   9.713371  44.913500  30.345741  10.342969\n4    2023-7月   4.699168  10.649708  45.020990  28.368778  11.261360\n5    2023-8月   4.059616  11.460070  45.084000  29.152237  10.244087\n6    2023-9月   7.940861   7.592339  43.092026  30.093441  11.281339\n7   2023-10月   9.530694   8.313237  42.630062  28.593506  10.932507\n8   2023-11月  11.200026   8.195070  40.859290  29.682444  10.063169\n9   2023-12月  12.457766   8.930598  37.996150  30.184662  10.430823\n10   2024-1月   9.581266   5.019070  41.158417  35.134407   9.106843\n11   2024-2月   7.976292   7.585693  36.759968  36.646090  11.031953\n```\n\n#### 乘联会-统计数据-新能源细分市场\n\n接口: car_market_fuel_cpca\n\n目标地址: http://data.cpcadata.com/FuelMarket\n\n描述: 乘联会-统计数据-车型大类\n\n限量: 单次返回指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                 |\n|--------|-----|--------------------------------------------------------------------|\n| symbol | str | symbol=\"整体市场\"; choice of {\"整体市场\", \"销量占比-PHEV-BEV\", \"销量占比-ICE-NEV\"} |\n\n输出参数\n\n| 名称       | 类型      | 描述       |\n|----------|---------|----------|\n| 月份       | object  | -        |\n| {前一个年份}年 | float64 | 注意单位: 万辆 |\n| {当前年份}年  | float64 | 注意单位: 万辆 |\n\n接口示例\n\n```python\nimport akshare as ak\n\ncar_market_fuel_cpca_df = ak.car_market_fuel_cpca()\nprint(car_market_fuel_cpca_df)\n```\n\n数据示例\n\n```\n     月份    2023年    2024年\n0    1月  33.1542  66.7653\n1    2月  43.9068  38.8294\n2    3月  54.6472      NaN\n3    4月  52.4730      NaN\n4    5月  57.9938      NaN\n5    6月  66.5066      NaN\n6    7月  64.1005      NaN\n7    8月  71.6335      NaN\n8    9月  74.6305      NaN\n9   10月  77.1797      NaN\n10  11月  84.0500      NaN\n11  12月  94.7347      NaN\n```\n\n#### 盖世研究院\n\n接口: car_sale_rank_gasgoo\n\n目标地址: https://i.gasgoo.com/data/ranking\n\n描述: 盖世汽车资讯的汽车销量排行榜数据\n\n限量: 单次返回指定 symbol 和 date 的汽车销量排行榜数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                            |\n|--------|-----|-----------------------------------------------|\n| symbol | str | symbol=\"车型榜\"; choice of {\"车企榜\", \"品牌榜\", \"车型榜\"} |\n| date   | str | date=\"202104\"; 指定到月份即可                        |\n\n输出参数-品牌\n\n| 名称               | 类型      | 描述      |\n|------------------|---------|---------|\n| 品牌               | object  | -       |\n| {当前年份}-{当前月份}    | int64   | -       |\n| {当前月份}月同比        | object  | 注意单位: % |\n| {当前月份}月环比        | object  | 注意单位: % |\n| {年份}-1到{当前年份}    | int64   | -       |\n| {前一年年份}-1到{当前年份} | float64 | -       |\n| {前二年年份}-1到{当前年份} | float64 | -       |\n\n接口示例-品牌\n\n```python\nimport akshare as ak\n\ncar_sale_rank_gasgoo_df = ak.car_sale_rank_gasgoo(symbol=\"品牌榜\", date=\"202311\")\nprint(car_sale_rank_gasgoo_df)\n```\n\n数据示例-品牌\n\n```\n        品牌  2023-11     11月同比    11月环比  2023-1到11  2022-1到11  2021-1到11\n0      比亚迪   288501    27.38%  -88.71%    2555783  1624029.0   632103.0\n1       大众   221777    21.99%   -88.8%    1980099  2121093.0  1919352.0\n2       丰田   147329    -1.78%  -90.55%    1559377  1702881.0  1469092.0\n3       奇瑞   139740   108.22%  -87.68%    1134561   816824.0   574646.0\n4       本田   134117    61.18%  -87.74%    1093812  1270576.0  1376184.0\n5       吉利   120547    21.71%  -87.63%     974251   926424.0   951106.0\n6       长安    95311    -0.09%  -91.29%    1094738   992620.0   933211.0\n7      特斯拉    82432   -17.81%  -90.34%     853603   655069.0   402256.0\n8       MG    78270    34.39%  -87.73%     638034   456532.0   385893.0\n9       哈弗    75012    39.11%  -88.45%     649610   572224.0   675621.0\n10      日产    73018     68.3%  -87.87%     602037   761575.0   912243.0\n11      宝马    69383    18.55%  -89.26%     645834   604931.0   602558.0\n12      奥迪    65884    58.94%  -88.75%     585474   545416.0   456250.0\n13      别克    55035     4.39%  -89.79%     539012   630581.0   737814.0\n14  五菱（银标）    49087    70.89%  -85.34%     334780   166310.0    95086.0\n15      理想    41030   172.91%   -87.4%     325677   112013.0    76404.0\n16      捷途    41027   139.69%  -84.98%     273109   158025.0   133941.0\n17      埃安    39785    27.79%  -91.16%     450061   256482.0   106684.0\n18      奔驰    37822   -26.89%  -93.34%     567773   577944.0   541329.0\n19      传祺    37216    43.97%  -89.98%     371396   326970.0   297541.0\n20      红旗    36458    44.45%  -88.67%     321851   270656.0   261465.0\n21      五菱    33674   -60.14%  -78.26%     154915   623255.0   603066.0\n22      领克    29657    70.39%  -84.39%     189935   149007.0   194518.0\n23      宝骏    25374    98.59%  -86.85%     192905   165377.0   199681.0\n24      荣威    24352    97.98%   -87.2%     190307   271754.0   318099.0\n25      现代    21661     0.51%  -89.87%     213916   225368.0   320232.0\n26      欧尚    21438    31.61%  -90.66%     229442   194186.0   183196.0\n27      问界    20977   153.44%  -71.22%      72886    67901.0        0.0\n28      小鹏    20935   260.27%  -83.12%     124054   109465.0    82155.0\n29      几何    20057    92.62%  -87.63%     162196   106314.0    22652.0\n30      零跑    18508      130%     -84%     115704   102675.0    37099.0\n31      起亚    18245    89.13%  -87.69%     148164   120301.0   137916.0\n32     雪佛兰    16965   -35.93%  -91.65%     203194   256671.0   225789.0\n33      蔚来    15959    12.56%  -88.76%     142026   106670.0    80940.0\n34      福特    15941    -7.17%  -92.57%     214618   202684.0   222890.0\n35      星途    15296   173.34%  -86.26%     111352    48518.0    32039.0\n36    凯迪拉克    15000   -36.97%  -90.26%     154053   188654.0   207341.0\n37    东风风神    14761   -35.05%  -88.31%     126292   197831.0   111713.0\n38      坦克    14386    31.75%  -88.64%     126643   112859.0    72630.0\n39      银河    13770  1377000%  -80.72%      71409        NaN        NaN\n40      深蓝    13242   101.09%  -88.02%     110527    21704.0        0.0\n41      极氪    13104    19.01%  -87.54%     105209    60604.0     2211.0\n42      江淮    12517  1278.52%  -82.04%      69697    15863.0    32147.0\n43      哪吒    12506   -17.02%  -89.78%     122361   144278.0    59547.0\n44      奔腾    12473    55.78%  -87.93%     103380    62845.0    57952.0\n45      腾势    11843   243.18%  -89.78%     115911     3976.0     4268.0\n46     沃尔沃    11524    19.19%  -91.35%     133154   130017.0   127395.0\n47      北京    11017    28.27%  -88.54%      96124    63546.0    57260.0\n48      捷达    10031    -6.25%  -92.88%     140886   140599.0   158024.0\n49      欧拉    10025    47.95%  -89.82%      98492    97069.0   114102.0\n```\n\n输出参数-车型\n\n| 名称               | 类型      | 描述      |\n|------------------|---------|---------|\n| 车型               | object  | -       |\n| {当前年份}-{当前月份}    | int64   | -       |\n| {当前月份}月同比        | object  | 注意单位: % |\n| {当前月份}月环比        | object  | 注意单位: % |\n| {年份}-1到{当前年份}    | int64   | -       |\n| {前一年年份}-1到{当前年份} | float64 | -       |\n| {前二年年份}-1到{当前年份} | float64 | -       |\n\n接口示例-车型\n\n```python\nimport akshare as ak\n\ncar_sale_rank_gasgoo_df = ak.car_sale_rank_gasgoo(symbol=\"车型榜\", date=\"202311\")\nprint(car_sale_rank_gasgoo_df)\n```\n\n数据示例-车型\n\n```\n                  车型  2023-11     11月同比  ... 2023-1到11  2022-1到11  2021-1到11\n0            Model Y    58433   -15.43%  ...    584687   419341.0   159573.0\n1                 海鸥    44603  4460300%  ...    229692        NaN        NaN\n2              元PLUS    40798    38.76%  ...    371187   172590.0        0.0\n3                 轩逸    37790    54.93%  ...    321318   394270.0   453422.0\n4                 海豚    35246    35.23%  ...    330905   179343.0    19582.0\n5                 速腾    33142    90.75%  ...    259438   180872.0   212128.0\n6               五菱缤果    31844  3184400%  ...    184756        NaN        NaN\n7                 朗逸    30494     5.64%  ...    309728   342740.0   355451.0\n8           宋PLUS DM    30298   -46.98%  ...    296624   349338.0    64388.0\n9               哈弗H6    30050    42.09%  ...    241702   261106.0   327651.0\n10          秦PLUS DM    28952   129.27%  ...    297911   182769.0    96370.0\n11            本田CR-V    26197   108.46%  ...    175263   198756.0   180645.0\n12               瑞虎7    25924   126.39%  ...    217862   146335.0    78371.0\n13               星越L    25198   117.47%  ...    171504   120192.0    31402.0\n14         宏光MINI EV    24027   -64.96%  ...     68273   481058.0   370742.0\n15           Model 3    23999   -23.06%  ...    268916   235728.0   242683.0\n16               瑞虎8    22835    98.32%  ...    199775   170637.0   142371.0\n17             MG ZS    22763     2.89%  ...    171950   120701.0   115075.0\n18            Aion Y    22640    95.85%  ...    205537   105376.0    28088.0\n19                帝豪    22441    33.44%  ...    161565   146803.0   158902.0\n20  长安CS75/CS75 PLUS    21331     6.18%  ...    240522   210197.0   266699.0\n21           宋Pro DM    20317  2031700%  ...    180180        0.0        0.0\n22               帕萨特    19756    10.36%  ...    178451   158503.0   100236.0\n23               凯美瑞    18868     -5.3%  ...    178870   205322.0   157253.0\n24              MG 5    18393    25.53%  ...    129196   154682.0   120284.0\n25                缤越    17954     1.21%  ...    179121   168534.0   126381.0\n26                迈腾    17860    76.73%  ...    170408   139776.0   116435.0\n27              问界M7    17542   397.08%  ...     42919    17269.0        0.0\n28             奥迪A6L    17289   174.52%  ...    147624   102698.0   132483.0\n29              艾瑞泽8    17198   164.46%  ...     96986    16915.0        0.0\n30               锋兰达    17067     39.5%  ...    145091    88045.0        0.0\n31            丰田RAV4    16828    76.78%  ...    144088   132580.0   148556.0\n32              宝马5系    16692   100.22%  ...    125570   144766.0   138789.0\n33                星瑞    16632    30.21%  ...    110288   100359.0   120481.0\n34              理想L7    16599  1659900%  ...    113661        NaN        NaN\n35          奔驰C级 48V    16000    13.45%  ...    145691   122143.0    70559.0\n36             捷途X70    15936    41.92%  ...    138254   121603.0   107899.0\n37                雅阁    15915    -4.48%  ...    121787   166329.0   150189.0\n38                思域    15859    56.23%  ...    142072   137032.0   142701.0\n39            MG4 EV    15824   141.96%  ...    135732    27769.0        0.0\n40               途观L    15799     59.2%  ...    117049   139337.0   117218.0\n41              瑞虎5X    15789     80.1%  ...    147678   103524.0    88171.0\n42               威兰达    15425    52.48%  ...    121522   111790.0    84454.0\n43              ID.3    15307   332.16%  ...     66762    23055.0     4090.0\n44            熊猫mini    15188  1518800%  ...     97104        NaN        NaN\n45           长安Lumin    14943    12.91%  ...    130944    57799.0        0.0\n46             奥迪A4L    14250    43.95%  ...    124693   123037.0   111849.0\n47              宝马3系    13879    28.27%  ...    136511   130519.0   158939.0\n48                逍客    13784    79.76%  ...     92625   139157.0   141591.0\n49          奥迪Q5/Q5L    13777    34.65%  ...    137290   127375.0    16057.0\n[50 rows x 7 columns]\n```\n\n输出参数-车企\n\n| 名称               | 类型      | 描述      |\n|------------------|---------|---------|\n| 厂商               | object  | -       |\n| {当前年份}-{当前月份}    | int64   | -       |\n| {当前月份}月同比        | object  | 注意单位: % |\n| {当前月份}月环比        | object  | 注意单位: % |\n| {年份}-1到{当前年份}    | int64   | -       |\n| {前一年年份}-1到{当前年份} | float64 | -       |\n| {前二年年份}-1到{当前年份} | float64 | -       |\n\n接口示例-车企\n\n```python\nimport akshare as ak\n\ncar_sale_rank_gasgoo_df = ak.car_sale_rank_gasgoo(symbol=\"车企榜\", date=\"202311\")\nprint(car_sale_rank_gasgoo_df)\n```\n\n数据示例-车企\n\n```\n         厂商  2023-11     11月同比    11月环比  2023-1到11  2022-1到11  2021-1到11\n0     比亚迪汽车   301378    31.07%  -88.72%    2672728  1628005.0   636371.0\n1      吉利汽车   198086     42.2%  -86.93%    1515954  1258013.0  1183520.0\n2      奇瑞汽车   185361    106.4%   -87.6%    1494624  1023335.0   744148.0\n3      一汽大众   178679    43.95%  -89.17%    1649213  1647343.0  1479988.0\n4      长安汽车   137767    16.48%  -90.68%    1478251  1208510.0  1116407.0\n5      上汽大众   120013     7.32%  -88.81%    1072354  1199332.0  1105439.0\n6     上汽乘用车   113367    53.62%  -87.07%     876474   756808.0   719710.0\n7    上汽通用五菱   108135   -14.17%  -84.16%     682600   954942.0   897833.0\n8      长城汽车   106480    44.42%  -88.57%     931419   817153.0   910651.0\n9      上汽通用    87000   -15.53%  -90.29%     896259  1075906.0  1170944.0\n10     广汽丰田    86000     0.94%  -89.91%     852600   930808.0   729477.0\n11    特斯拉汽车    82432   -17.81%  -90.34%     853603   655069.0   402256.0\n12     东风日产    78038    58.18%  -88.16%     658924   851754.0   971111.0\n13     东风本田    72876    93.51%  -86.53%     540836   603695.0   686996.0\n14     华晨宝马    69383    18.55%  -89.26%     645834   604931.0   602558.0\n15     广汽本田    61778    34.68%  -88.86%     554516   678771.0   699191.0\n16     一汽丰田    61648    -6.36%  -91.32%     710409   774196.0   743246.0\n17  广汽埃安新能源    41738    34.05%  -90.79%     453113   256580.0   106933.0\n18     理想汽车    41030   172.91%   -87.4%     325677   112013.0    76404.0\n19    广汽乘用车    37565    45.56%  -89.89%     371596   324566.0   292050.0\n20     北京奔驰    35400   -28.63%  -93.41%     537270   547001.0   508425.0\n21     一汽红旗    32428    28.48%  -89.32%     303546   270656.0   261465.0\n22     北京现代    21661     0.51%  -89.87%     213916   225368.0   320232.0\n23      赛力斯    21170   155.74%  -72.23%      76243    67952.0     7080.0\n24     小鹏汽车    20935   260.27%  -83.12%     124054   109465.0    82155.0\n25    东风乘用车    20668    17.93%  -85.21%     139755   187717.0   110939.0\n26   江苏悦达起亚    18941    96.34%  -87.57%     152429   120301.0   137916.0\n27     零跑汽车    18508      130%     -84%     115704   102675.0    37099.0\n28     长安福特    16576   -12.07%  -91.76%     201208   225077.0   268196.0\n29     江淮蔚来    14046     25.3%  -86.41%     103345   102451.0    80940.0\n30     江淮汽车    13126     8.21%  -92.87%     184220   150072.0   143871.0\n31     合众汽车    12506   -17.02%  -89.78%     122361   144278.0    59547.0\n32     一汽奔腾    10995    37.32%  -88.51%      95676    62845.0    57952.0\n33     开瑞汽车    10851  6436.75%  -57.34%      25438     1517.0     2233.0\n34    吉利沃尔沃    10573    28.31%   -91.2%     120200   114353.0   114362.0\n35    长安马自达     9360    69.44%  -86.66%      70190    86847.0   123827.0\n36     东风柳汽     9199    14.94%  -88.31%      78675   110896.0   113336.0\n37     凯翼汽车     7137   126.21%   -86.9%      54464    24828.0    14020.0\n38     神龙汽车     6127   -36.89%  -91.91%      75711   114721.0    86519.0\n39    北汽新能源     5741    10.77%  -88.37%      49343    28716.0    17186.0\n40     一汽轿车     5508   550800%  -78.82%      26009        0.0        0.0\n41     上汽大通     4521    13.56%  -90.92%      49791    42714.0    48073.0\n42   奇瑞捷豹路虎     4384   -10.18%   -90.6%      46650    47502.0    51128.0\n43    智马达汽车     4302   430200%  -93.02%      61609        NaN        NaN\n44     开沃汽车     3936   119.77%  -83.97%      24547    14399.0     2866.0\n45     东风小康     3878   -35.22%   -90.6%      41256    83981.0   102497.0\n46    北汽麦格纳     3849   384900%  -82.51%      22012     9829.0     4933.0\n47     北汽越野     3522    32.31%  -87.87%      29043    21515.0    23858.0\n48     江铃汽车     3513    47.85%  -95.03%      70651    44282.0    30558.0\n49     睿蓝汽车     2861   -32.82%  -90.86%      31290    26141.0        0.0\n```\n\n### 新闻联播文字稿\n\n接口: news_cctv\n\n目标地址: https://tv.cctv.com/lm/xwlb\n\n描述: 新闻联播文字稿, 数据区间从 20160330-至今\n\n限量: 单次返回指定日期新闻联播文字稿数据\n\n输入参数\n\n| 名称   | 类型  | 描述                            |\n|------|-----|-------------------------------|\n| date | str | date=\"20240424\";  20160330-至今 |\n\n输出参数\n\n| 名称      | 类型     | 描述   |\n|---------|--------|------|\n| date    | object | 新闻日期 |\n| title   | object | 新闻标题 |\n| content | object | 新闻内容 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nnews_cctv_df = ak.news_cctv(date=\"20240424\")\nprint(news_cctv_df)\n```\n\n数据示例\n\n```\n      date  ...                                            content\n0   20240424  ...  中共中央总书记、国家主席、中央军委主席习近平近日在重庆考察时强调，重庆要对标新时代新征程党的...\n1   20240424  ...                   本台今天（4月24日）播发央视快评《奋力谱写西部大开发新篇章》。\n2   20240424  ...  4月24日，国家主席习近平向首届“中国－拉美和加勒比国家航天合作论坛”致贺信。习近平指出，今...\n3   20240424  ...  中共中央政治局常委、国务院总理李强4月24日在贵州调研。他强调，要深入贯彻习近平总书记关于巩...\n4   20240424  ...  十四届全国人大常委会第二十四次委员长会议24日下午在北京人民大会堂举行。赵乐际委员长主持。会...\n5   20240424  ...  应墨西哥参议长里维拉邀请，全国人大常委会委员长赵乐际于墨西哥当地时间23日在墨参议院成立20...\n6   20240424  ...  全国政协主席王沪宁24日在京会见哈萨克斯坦议会下院议长科沙诺夫。王沪宁表示，在习近平主席和托...\n7   20240424  ...  国家副主席韩正24日在京会见哈萨克斯坦议会下院议长科沙诺夫。韩正表示，去年，习近平主席同托卡...\n8   20240424  ...  今天（4月24日），神舟十八号载人飞行任务新闻发布会在酒泉卫星发射中心举行，计划于4月25日...\n9   20240424  ...  日前，中央纪委国家监委对八起违规吃喝典型问题进行公开通报。江西省人大常委会原党组副书记、副主...\n10  20240424  ...  国务院新闻办公室今天（4月24日）举行发布会，国家知识产权局介绍，已经会同中国贸促会设立国家...\n11  20240424  ...  全国多地举行中国航天日活动今天（4月24日）是第九个中国航天日，以“极目楚天，共襄星汉”为主...\n[12 rows x 3 columns]\n```\n\n### 日出和日落\n\n#### 日出和日落-天\n\n接口: sunrise_daily\n\n目标地址: https://www.timeanddate.com/sun/china/\n\n描述: 中国各大城市-日出和日落时间, 数据区间从 19990101-至今, 推荐使用代理访问\n\n限量: 单次返回指定日期和指定城市的数据\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20240428\"            |\n| city | str | city=\"beijing\"; 注意输入的城市的拼音 |\n\n输出参数\n\n| 名称         | 类型     | 描述                          |\n|------------|--------|-----------------------------|\n| date       | object | 日期                          |\n| Sunrise    | object | 日出                          |\n| Sunset     | object | 日落                          |\n| Length     | object | Daylength-Length            |\n| Difference | object | Daylength-Difference        |\n| Start      | object | Astronomical Twilight-Start |\n| End        | object | Astronomical Twilight-End   |\n| Start.1    | object | Nautical Twilight-Start     |\n| End.1      | object | Nautical Twilight-End       |\n| Start.2    | object | Civil Twilight-Start        |\n| End.2      | object | Civil Twilight-End          |\n| Time       | object | Solar Noon-Time             |\n| Mil. km    | object | Solar Noon-Mil. km          |\n\n接口示例\n\n```python\nimport akshare as ak\n\nsunrise_daily_df = ak.sunrise_daily(date=\"20240428\", city=\"beijing\")\nprint(sunrise_daily_df)\n```\n\n数据示例\n\n```\n         date Apr          Sunrise  ...    End.2              Time Mil. mi\n0  2024-04-28  28  5:18 am ↑ (71°)  ...  7:35 pm  12:11 pm (64.4°)  93.588\n[1 rows x 14 columns]\n```\n\n#### 日出和日落-月\n\n接口: sunrise_monthly\n\n目标地址: https://www.timeanddate.com/sun/china/\n\n描述: 中国各大城市-日出和日落时间, 数据区间从 19990101-至今, 推荐使用代理访问\n\n限量: 单次返回指定日期所在月份每天的数据, 如果是未来日期则为预测值\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20240428\"            |\n| city | str | city=\"beijing\"; 注意输入的城市的拼音 |\n\n输出参数\n\n| 名称         | 类型     | 描述                          |\n|------------|--------|-----------------------------|\n| date       | object | 日期-索引; XXXX-XX 格式           |\n| feb        | object | 月份简称-随月份变化                  |\n| Sunrise    | object | 日出                          |\n| Sunset     | object | 日落                          |\n| Length     | object | Daylength-Length            |\n| Difference | object | Daylength-Difference        |\n| Start      | object | Astronomical Twilight-Start |\n| End        | object | Astronomical Twilight-End   |\n| Start.1    | object | Nautical Twilight-Start     |\n| End.1      | object | Nautical Twilight-End       |\n| Start.2    | object | Civil Twilight-Start        |\n| End.2      | object | Civil Twilight-End          |\n| Time       | object | Solar Noon-Time             |\n| Mil. km    | object | Solar Noon-Mil. km          |\n\n接口示例\n\n```python\nimport akshare as ak\n\nsunrise_monthly_df = ak.sunrise_monthly(date=\"20240428\", city=\"beijing\")\nprint(sunrise_monthly_df)\n```\n\n数据示例\n\n```\n    date Apr          Sunrise  ...    End.2              Time Mil. mi\n0   202404   1  5:58 am ↑ (83°)  ...  7:06 pm  12:18 pm (54.8°)  92.891\n1   202404   2  5:56 am ↑ (83°)  ...  7:07 pm  12:17 pm (55.2°)  92.918\n2   202404   3  5:55 am ↑ (82°)  ...  7:08 pm  12:17 pm (55.6°)  92.945\n3   202404   4  5:53 am ↑ (82°)  ...  7:09 pm  12:17 pm (56.0°)  92.972\n4   202404   5  5:52 am ↑ (81°)  ...  7:10 pm  12:17 pm (56.3°)  93.000\n5   202404   6  5:50 am ↑ (81°)  ...  7:11 pm  12:16 pm (56.7°)  93.027\n6   202404   7  5:48 am ↑ (80°)  ...  7:12 pm  12:16 pm (57.1°)  93.054\n7   202404   8  5:47 am ↑ (80°)  ...  7:13 pm  12:16 pm (57.5°)  93.080\n8   202404   9  5:45 am ↑ (79°)  ...  7:14 pm  12:15 pm (57.8°)  93.107\n9   202404  10  5:44 am ↑ (79°)  ...  7:15 pm  12:15 pm (58.2°)  93.133\n10  202404  11  5:42 am ↑ (78°)  ...  7:16 pm  12:15 pm (58.6°)  93.159\n11  202404  12  5:41 am ↑ (78°)  ...  7:17 pm  12:15 pm (58.9°)  93.185\n12  202404  13  5:39 am ↑ (77°)  ...  7:18 pm  12:14 pm (59.3°)  93.211\n13  202404  14  5:38 am ↑ (77°)  ...  7:19 pm  12:14 pm (59.7°)  93.237\n14  202404  15  5:36 am ↑ (76°)  ...  7:20 pm  12:14 pm (60.0°)  93.262\n15  202404  16  5:35 am ↑ (76°)  ...  7:22 pm  12:14 pm (60.4°)  93.288\n16  202404  17  5:33 am ↑ (75°)  ...  7:23 pm  12:13 pm (60.7°)  93.313\n17  202404  18  5:32 am ↑ (75°)  ...  7:24 pm  12:13 pm (61.1°)  93.338\n18  202404  19  5:30 am ↑ (75°)  ...  7:25 pm  12:13 pm (61.4°)  93.364\n19  202404  20  5:29 am ↑ (74°)  ...  7:26 pm  12:13 pm (61.8°)  93.389\n20  202404  21  5:27 am ↑ (74°)  ...  7:27 pm  12:13 pm (62.1°)  93.414\n21  202404  22  5:26 am ↑ (73°)  ...  7:28 pm  12:12 pm (62.4°)  93.439\n22  202404  23  5:25 am ↑ (73°)  ...  7:29 pm  12:12 pm (62.8°)  93.464\n23  202404  24  5:23 am ↑ (72°)  ...  7:30 pm  12:12 pm (63.1°)  93.489\n24  202404  25  5:22 am ↑ (72°)  ...  7:31 pm  12:12 pm (63.4°)  93.514\n25  202404  26  5:21 am ↑ (71°)  ...  7:32 pm  12:12 pm (63.8°)  93.539\n26  202404  27  5:19 am ↑ (71°)  ...  7:33 pm  12:12 pm (64.1°)  93.563\n27  202404  28  5:18 am ↑ (71°)  ...  7:35 pm  12:11 pm (64.4°)  93.588\n28  202404  29  5:17 am ↑ (70°)  ...  7:36 pm  12:11 pm (64.7°)  93.613\n29  202404  30  5:15 am ↑ (70°)  ...  7:37 pm  12:11 pm (65.0°)  93.637\n[30 rows x 14 columns]\n```\n\n### 空气质量-河北\n\n#### 近期空气质量\n\n接口: air_quality_hebei\n\n目标地址: http://218.11.10.130:8080/#/application/home\n\n描述: 河北省实时空气质量数据\n\n限量: 单次返回所有城市数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称         | 类型      | 描述            |\n|------------|---------|---------------|\n| 城市         | object  | 城市名称          |\n| 区域         | object  | 城市下属行政区域      |\n| 监测点        | object  | 监测站点名称        |\n| 时间         | object  | 监测时间          |\n| AQI        | float64 | 空气质量指数        |\n| 空气质量等级     | object  | 空气质量级别(优、良等)  |\n| 首要污染物      | object  | 主要污染物         |\n| 经度         | float64 | 监测站点经度        |\n| 纬度         | float64 | 监测站点纬度        |\n| PM10_IAQI  | float64 | PM10空气质量分指数   |\n| PM10_浓度    | float64 | PM10浓度值       |\n| PM2.5_IAQI | float64 | PM2.5空气质量分指数  |\n| PM2.5_浓度   | float64 | PM2.5浓度值      |\n| 一氧化碳_IAQI  | float64 | CO空气质量分指数     |\n| 一氧化碳_浓度    | float64 | CO浓度值         |\n| 二氧化氮_IAQI  | float64 | NO2空气质量分指数    |\n| 二氧化氮_浓度    | float64 | NO2浓度值        |\n| 二氧化硫_IAQI  | float64 | SO2空气质量分指数    |\n| 二氧化硫_浓度    | float64 | SO2浓度值        |\n| 臭氧1小时_IAQI | float64 | O3 1小时空气质量分指数 |\n| 臭氧1小时_浓度   | float64 | O3 1小时浓度值     |\n| 臭氧8小时_IAQI | float64 | O3 8小时空气质量分指数 |\n| 臭氧8小时_浓度   | float64 | O3 8小时浓度值     |\n\n接口示例\n\n```python\nimport akshare as ak\n\nair_quality_hebei_df = ak.air_quality_hebei()\nprint(air_quality_hebei_df)\n```\n\n数据示例\n\n```\n       城市   区域         监测点  ... 臭氧1小时_浓度  臭氧8小时_IAQI 臭氧8小时_浓度\n0    石家庄市  长安区    市区22中南校区  ...     15.0         0.0     40.0\n1    石家庄市  栾城区      栾城区星河路  ...      8.0         0.0     40.0\n2    石家庄市  鹿泉区    鹿泉住建局(*)  ...     29.0         0.0     41.0\n3    石家庄市  藁城区     藁城九中(*)  ...     16.0         0.0     43.0\n4    石家庄市  桥西区      市区西南高教  ...      7.0         0.0     41.0\n..    ...  ...         ...  ...      ...         ...      ...\n359   衡水市  武强县   武强实验学校(*)  ...     11.0         0.0     38.0\n360   衡水市   景县    景县交通局(*)  ...     28.0         0.0     48.0\n361   衡水市  武邑县   武邑县委党校(*)  ...     16.0         0.0     36.0\n362   衡水市   景县  景县市场监管局(*)  ...     33.0         0.0     58.0\n363   衡水市  阜城县    阜城交通局(*)  ...     30.0         0.0     48.0\n[364 rows x 23 columns]\n```\n\n### 空气质量-全国\n\n#### 城市列表\n\n接口: air_city_table\n\n目标地址: https://www.aqistudy.cn/\n\n描述: 所有能获取空气质量数据的城市表\n\n限量: 单次返回所有可以获取的城市表数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述  |\n|---------|---------|-----|\n| 序号      | int64   | -   |\n| 省份      | object  | -   |\n| 城市      | object  | -   |\n| AQI     | float64 | -   |\n| 空气质量    | object  | -   |\n| PM2.5浓度 | object  | -   |\n| 首要污染物   | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nair_city_table_df = ak.air_city_table()\nprint(air_city_table_df)\n```\n\n数据示例\n\n```\n      序号  省份  城市    AQI  空气质量    PM2.5浓度 首要污染物\n0      1  北京  北京  204.0  重度污染  108 ug/m3    O3\n1      2  河北  廊坊  199.0  中度污染   54 ug/m3    O3\n2      3  河北  承德  198.0  中度污染   59 ug/m3    O3\n3      4  河北  唐山  176.0  中度污染   74 ug/m3    O3\n4      5  山西  晋城  164.0  中度污染   51 ug/m3    O3\n..   ...  ..  ..    ...   ...        ...   ...\n163  164  广东  中山   40.0     优   19 ug/m3   NaN\n164  165  广东  东莞   39.0     优   20 ug/m3   NaN\n165  166  广东  深圳   38.0     优   21 ug/m3   NaN\n166  167  广东  珠海   34.0     优   17 ug/m3   NaN\n167  168  海南  海口   32.0     优   14 ug/m3   NaN\n```\n\n#### 空气质量历史数据\n\n接口: air_quality_hist\n\n目标地址: https://www.zq12369.com/\n\n描述: 指定城市和数据频率下并且在指定时间段内的空气质量数据\n\n限量: 单次返回所有的数据, 在提取一小时频率数据时请注意时间跨度不宜过长, 提取日频率数据的早年数据请分段提取\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                             |\n|------------|-----|--------------------------------------------------------------------------------|\n| city       | str | city=\"北京\"; 调用 ak.air_city_table() 接口获取所有城市列表                                   |\n| period     | str | period=\"day\"; \"hour\": 每小时一个数据, 由于数据量比较大, 下载较慢; \"day\": 每天一个数据; \"month\": 每个月一个数据 |\n| start_date | str | start_date=\"20200320\"; 注意 **start_date** 和 **end_date** 跨度不宜过长                 |\n| end_date   | str | end_date=\"20200427\"; 注意 **start_date** 和 **end_date** 跨度不宜过长                   |\n\n输出参数\n\n| 名称                | 类型      | 描述     |\n|-------------------|---------|--------|\n| time              | object  | 日期时间索引 |\n| aqi               | object  | AQI    |\n| pm2_5             | float64 | PM2.5  |\n| pm10              | object  | PM10   |\n| co                | float64 | CO     |\n| no2               | object  | NO2    |\n| o3                | object  | O3     |\n| so2               | object  | SO2    |\n| complexindex      | object  | 综合指数   |\n| rank              | object  | 排名     |\n| primary_pollutant | object  | 主要污染物  |\n| temp              | object  | 温度     |\n| humi              | object  | 湿度     |\n| windlevel         | object  | 风级     |\n| winddirection     | object  | 风向     |\n| weather           | object  | 天气     |\n\n接口示例-小时频率\n\n```python\nimport akshare as ak\n\nair_quality_hist_df = ak.air_quality_hist(city=\"北京\", period=\"hour\", start_date=\"20200425\", end_date=\"20200427\")\nprint(air_quality_hist_df)\n```\n\n数据示例-小时频率\n\n```\n                   time  aqi pm2_5 pm10  ... humi windlevel winddirection weather\n0   2020-04-25 00:00:00  111    27  172  ...   16         4           东北风    晴转多云\n1   2020-04-25 01:00:00  103    20  156  ...   16         4           东北风    晴转多云\n2   2020-04-25 02:00:00  110    14  170  ...   18         3            北风    晴转多云\n3   2020-04-25 03:00:00   87    11  123  ...   18         4            北风    晴转多云\n4   2020-04-25 04:00:00   68     9   85  ...   16         4            北风    晴转多云\n..                  ...  ...   ...  ...  ...  ...       ...           ...     ...\n67  2020-04-27 19:00:00   68    48   85  ...   25         2           西南风       晴\n68  2020-04-27 20:00:00   66    47   82  ...   25         2           西南风       晴\n69  2020-04-27 21:00:00   67    46   84  ...   30         2           西南风       晴\n70  2020-04-27 22:00:00   68    42   86  ...   28         3           西南风       晴\n71  2020-04-27 23:00:00   69    43   87  ...   32         2           西南风       晴\n```\n\n接口示例-天频率\n\n```python\nimport akshare as ak\n\nair_quality_hist_df = ak.air_quality_hist(city=\"北京\", period=\"day\", start_date=\"20200320\", end_date=\"20200427\")\nprint(air_quality_hist_df)\n```\n\n数据示例-天频率\n\n```\n          time  aqi pm2_5 pm10  ...    humi windlevel winddirection weather\n0   2020-03-20   60    29   70  ...  28.667     1.542\n1   2020-03-21   72    27   94  ...  25.250     2.042\n2   2020-03-22   62    30   74  ...  32.375     2.167\n3   2020-03-23   53    28   55  ...  35.333     1.542\n4   2020-03-24   70    51   68  ...  36.958     1.458\n5   2020-03-25  153   117  111  ...  49.833     1.792\n6   2020-03-26   39     8   24  ...  41.500     3.125\n7   2020-03-27   40     5   21  ...  15.083     2.500\n8   2020-03-28   39    10   28  ...  23.917     1.792\n9   2020-03-29   63    45   72  ...  35.292     1.958\n10  2020-03-30   92    68   87  ...  48.208     2.208\n11  2020-03-31   87    64   75  ...  53.826     2.130\n12  2020-04-01   42     9   21  ...  19.250     2.250\n13  2020-04-02   42    16   34  ...  34.458     1.500\n14  2020-04-03   47    14   36  ...  28.000     2.000\n15  2020-04-04  102    23  154  ...  24.708     2.500\n16  2020-04-05   69    30   88  ...  32.250     1.667\n17  2020-04-06   86    62  122  ...  42.500     1.667\n18  2020-04-07   77    45  103  ...  34.167     2.042\n19  2020-04-08   55    21   60  ...  33.042     1.750\n20  2020-04-09   49    34   47  ...  56.500     1.875\n21  2020-04-10   70    39   50  ...  46.542     1.417\n22  2020-04-11   51    20   38  ...  30.083     1.708\n23  2020-04-12   54    17   52  ...  13.333     1.958\n24  2020-04-13   59    26   67  ...  31.435     1.391\n25  2020-04-14  104    66  102  ...  35.500     1.750\n26  2020-04-15   95    63   93  ...  45.292     1.875\n27  2020-04-16   63    23   75  ...  54.583     2.250\n28  2020-04-17   78    23   37  ...  36.292     2.167\n29  2020-04-18   75    33   45  ...  40.000     1.500\n30  2020-04-19   94    39   54  ...  49.227     2.546\n31  2020-04-20   45     7   31  ...  23.708     3.167\n32  2020-04-21   42     7   33  ...  18.917     2.833\n33  2020-04-22   43     6   24  ...  12.125     2.667\n34  2020-04-23   45     7   21  ...  13.727     2.091\n35  2020-04-24   91    19  132  ...  12.375     2.875\n36  2020-04-25   52    10   53  ...  16.375     2.458\n37  2020-04-26   50    14   33  ...  25.375     1.792\n38  2020-04-27   76    41   63  ...  35.958     1.875\n```\n\n接口示例-月频率\n\n```python\nimport akshare as ak\n\nair_quality_hist_df = ak.air_quality_hist(city=\"北京\", period=\"month\", start_date=\"20190425\", end_date=\"20200427\")\nprint(air_quality_hist_df)\n```\n\n数据示例-月频率\n\n```\n     aqi cityname     time  ... complexindex fcomplexindex primary_pollutant\n0    94       北京  2019-05  ...         None         4.596              None\n1   123       北京  2019-06  ...         None         4.629              None\n2   106       北京  2019-07  ...         None         4.150              None\n3    71       北京  2019-08  ...         None         3.206              None\n4    97       北京  2019-09  ...         None         4.295              None\n5    68       北京  2019-10  ...         None         3.829              None\n6    76       北京  2019-11  ...         None         4.402              None\n7    74       北京  2019-12  ...         None         4.225              None\n8    87       北京  2020-01  ...         None         4.774              None\n9    88       北京  2020-02  ...         None         4.349              None\n10   62       北京  2020-03  ...         None         3.174              None\n```\n\n#### 空气质量排名\n\n接口: air_quality_rank\n\n目标地址: https://www.zq12369.com/environment.php\n\n描述: 获取指定 date 时间点上所有城市(168个)的空气质量数据\n\n限量: 单次返回所有的数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                                       |\n|------|-----|------------------------------------------------------------------------------------------|\n| date | str | date=\"\"; \"\": 当前时刻空气质量排名, 默认; \"20200312\": 当日空气质量排名; \"202003\": 当月空气质量排名; \"2019\": 当年空气质量排名; |\n\n输出参数\n\n| 名称      | 类型    | 描述  |\n|---------|-------|-----|\n| 降序      | str   | 排名  |\n| 省份      | str   | -   |\n| 城市      | str   | -   |\n| AQI     | float | -   |\n| 空气质量    | str   | -   |\n| PM2.5浓度 | str   | -   |\n| 首要污染物   | str   | -   |\n\n接口示例-实时\n\n```python\nimport akshare as ak\n\nair_quality_rank_df = ak.air_quality_rank(date=\"\")\nprint(air_quality_rank_df)\n```\n\n数据示例-实时\n\n```\n        降序  省份  城市    AQI  空气质量   PM2.5浓度  首要污染物\n1      1.0  山西  太原  123.0  轻度污染  93 ug/m3  PM2.5\n2      2.0  山东  德州  116.0  轻度污染  33 ug/m3   PM10\n3      3.0  河南  安阳  111.0  轻度污染  60 ug/m3   PM10\n4      4.0  吉林  长春  108.0  轻度污染  81 ug/m3  PM2.5\n5      5.0  广东  佛山  100.0     良  55 ug/m3     O3\n..     ...  ..  ..    ...   ...       ...    ...\n164  164.0  广东  珠海   34.0     优  16 ug/m3    NaN\n165  165.0  江苏  南通   34.0     优  23 ug/m3    NaN\n166  166.0  浙江  舟山   30.0     优  11 ug/m3    NaN\n167  167.0  四川  雅安   30.0     优  13 ug/m3    NaN\n168  168.0  西藏  拉萨   29.0     优   9 ug/m3    NaN\n```\n\n接口示例-具体某天\n\n```python\nimport akshare as ak\nair_quality_rank_df = ak.air_quality_rank(date=\"2020-03-20\")\nprint(air_quality_rank_df)\n```\n\n数据示例-具体某天\n\n```\n        降序   省份    城市    AQI  空气质量   PM2.5浓度 首要污染物\n1      1.0   山西    晋城  124.0  轻度污染  42 ug/m3  PM10\n2      2.0   山东    德州  120.0  轻度污染  36 ug/m3  PM10\n3      3.0   河南    焦作  118.0  轻度污染  42 ug/m3  PM10\n4      4.0   山东    菏泽  118.0  轻度污染  33 ug/m3  PM10\n5      5.0   河南    安阳  118.0  轻度污染  44 ug/m3  PM10\n..     ...  ...   ...    ...   ...       ...   ...\n164  164.0   广东    深圳   45.0     优  29 ug/m3   NaN\n165  165.0  黑龙江   哈尔滨   43.0     优  30 ug/m3   NaN\n166  166.0   广东    惠州   43.0     优  30 ug/m3   NaN\n167  167.0   新疆  乌鲁木齐   32.0     优  17 ug/m3   NaN\n168  168.0   海南    海口   29.0     优  13 ug/m3   NaN\n```\n\n接口示例-具体某月\n\n```python\nimport akshare as ak\nair_quality_rank_df = ak.air_quality_rank(date=\"2020-03\")\nprint(air_quality_rank_df)\n```\n\n数据示例-具体某月\n\n```\n        降序  省份  城市  综合指数  最大指数  首要污染物\n1      1.0  河南  安阳  5.29  1.60  PM2.5\n2      2.0  山东  淄博  5.27  1.51  PM2.5\n3      3.0  山东  枣庄  5.19  1.54  PM2.5\n4      4.0  河南  焦作  5.16  1.54   PM10\n5      5.0  陕西  西安  5.11  1.59   PM10\n..     ...  ..  ..   ...   ...    ...\n164  164.0  广东  惠州  2.52  0.69     O3\n165  165.0  广东  中山  2.51  0.74     O3\n166  166.0  浙江  舟山  2.27  0.70     O3\n167  167.0  海南  海口  1.84  0.58     O3\n168  168.0  西藏  拉萨  1.78  0.72     O3\n```\n\n接口示例-具体某年\n\n```python\nimport akshare as ak\nair_quality_rank_df = ak.air_quality_rank(date=\"2019\")\nprint(air_quality_rank_df)\n```\n\n数据示例-具体某年\n\n```\n        降序  省份   城市  综合指数  最大指数  首要污染物\n1      1.0  河南   安阳  6.91  2.03  PM2.5\n2      2.0  河北   邢台  6.85  1.86  PM2.5\n3      3.0  河北  石家庄  6.80  1.80  PM2.5\n4      4.0  河北   邯郸  6.77  1.89  PM2.5\n5      5.0  山西   临汾  6.74  1.77  PM2.5\n..     ...  ..  ...   ...   ...    ...\n164  164.0  福建   厦门  2.98  0.84     O3\n165  165.0  安徽   黄山  2.95  0.84     O3\n166  166.0  浙江   舟山  2.68  0.82     O3\n167  167.0  海南   海口  2.47  0.90     O3\n168  168.0  西藏   拉萨  2.39  0.81     O3\n```\n\n#### 监测点空气质量\n\n接口: air_quality_watch_point\n\n目标地址: https://www.zq12369.com/environment.php\n\n描述: 获取每个城市的所有空气质量监测点的数据\n\n限量: 单次返回指定城市指定日期区间的所有监测点的空气质量数据\n\n输入参数\n\n| 名称         | 类型     | 描述                                           |\n|------------|--------|----------------------------------------------|\n| city       | object | city=\"杭州\"; 调用 ak.air_city_table() 接口获取所有城市列表 | |\n| start_date | object | start_date=\"2018-01-01\"                      |\n| end_date   | object | end_date=\"2020-04-27\"                        |\n\n输出参数\n\n| 名称        | 类型      | 描述    |\n|-----------|---------|-------|\n| pointname | object  | 监测点名称 |\n| aqi       | float64 | AQI   |\n| pm2_5     | float64 | PM2.5 |\n| pm10      | float64 | PM10  |\n| no2       | float64 | NO2   |\n| so2       | float64 | SO2   |\n| o3        | float64 | O3    |\n| co        | float64 | CO    |\n\n接口示例\n\n```python\nimport akshare as ak\n\nair_quality_watch_point_df = ak.air_quality_watch_point(city=\"杭州\", start_date=\"2018-01-01\", end_date=\"2020-04-27\")\nprint(air_quality_watch_point_df)\n```\n\n数据示例\n\n```\n   pointname      aqi  ...                  o3                  co\n0       朝晖五区  83.9315  ...               162.4  1.3581999999999999\n1       浙江农大  82.7099  ...                 183                 1.3\n2        城厢镇  82.2618  ...                 175              1.2643\n3         下沙  81.5554  ...                 175                 1.2\n4        临平镇  80.2429  ...               174.6              1.2182\n5       和睦小学  79.7488  ...                 170              1.2209\n6         西溪  78.5832  ...                 173                 1.1\n7         滨江  77.9729  ...                 172                 1.3\n8        卧龙桥  71.1863  ...                 161             1.13265\n9         云栖  70.4404  ...                 168                 1.2\n10       千岛湖  55.8762  ...  143.00000000000003                   1\n```\n\n### 财富排行榜-中文\n\n接口: fortune_rank\n\n目标地址: https://www.fortunechina.com/fortune500/node_65.htm\n\n描述: 指定年份财富世界 500 强公司排行榜\n\n限量: 单次返回某一个年份的所有历史数据\n\n输入参数\n\n| 名称   | 类型  | 描述          |\n|------|-----|-------------|\n| year | str | year=\"2023\" |\n\n输出参数\n\n| 名称  | 类型  | 描述                |\n|-----|-----|-------------------|\n| -   | -   | 以当年的数据为准, 输出的字段不一 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nfortune_rank_df = ak.fortune_rank(year=\"2023\")\nprint(fortune_rank_df)\n```\n\n数据示例\n\n```\n      排名                                         公司名称(中文)  ...     国家  关键数据\n0      1                                       沃尔玛（WALMART)  ...     美国     +\n1      2                               沙特阿美公司（SAUDI ARAMCO)  ...  沙特阿拉伯     +\n2      3                               国家电网有限公司（STATE GRID)  ...     中国     +\n3      4                                    亚马逊（AMAZON.COM)  ...     美国     +\n4      5            中国石油天然气集团有限公司（CHINA NATIONAL PETROLEUM)  ...     中国     +\n..   ...                                                ...  ...    ...   ...\n495  496                     三星人寿保险（SAMSUNG LIFE INSURANCE)  ...     韩国     +\n496  497                  住友生命保险公司（SUMITOMO LIFE INSURANCE)  ...     日本     +\n497  498                                   CarMax公司（CARMAX)  ...     美国     +\n498  499         日本三菱重工业股份有限公司（MITSUBISHI HEAVY INDUSTRIES)  ...     日本     +\n499  500  新疆广汇实业投资（集团）有限责任公司（XINJIANG GUANGHUI INDUSTRY ...  ...     中国     +\n[500 rows x 6 columns]\n```\n\n### 福布斯中国榜单\n\n接口: forbes_rank\n\n目标地址: https://www.forbeschina.com/lists\n\n描述: 福布斯中国-榜单数据, 一共 87 个指标的数据可以获取\n\n限量: 单次返回指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                  |\n|--------|-----|-----------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"2020年福布斯中国400富豪榜\"; 参考 **福布斯中国指标一览表**, 也可以访问 https://www.forbeschina.com/lists 获取所需要的 symbol |\n\n福布斯中国指标一览表\n\n|     | name                     | url                                    |\n|----:|:-------------------------|:---------------------------------------|\n|   0 | 2020福布斯中国400富豪榜          | https://www.forbeschina.com/lists/1750 |\n|   1 | 2020福布斯菲律宾富豪榜            | https://www.forbeschina.com/lists/1746 |\n|   2 | 2020福布斯美国富豪榜             | https://www.forbeschina.com/lists/1745 |\n|   3 | 2020福布斯中国名人榜             | https://www.forbeschina.com/lists/1744 |\n|   4 | 2020福布斯新加坡富豪榜            | https://www.forbeschina.com/lists/1743 |\n|   5 | 2020福布斯中国最佳CEO榜          | https://www.forbeschina.com/lists/1741 |\n|   6 | 2020福布斯中国医疗健康富豪榜         | https://www.forbeschina.com/lists/1740 |\n|   7 | 2020福布斯中国慈善榜             | https://www.forbeschina.com/lists/1739 |\n|   8 | 2020福布斯韩国富豪榜             | https://www.forbeschina.com/lists/1738 |\n|   9 | 2020福布斯中国科技女性榜           | https://www.forbeschina.com/lists/1737 |\n|  10 | 2020福布斯全球亿万富豪榜中国子榜       | https://www.forbeschina.com/lists/1734 |\n|  11 | 2020福布斯全球亿万富豪榜           | https://www.forbeschina.com/lists/1733 |\n|  12 | 2019福布斯中国400富豪榜          | https://www.forbeschina.com/lists/1728 |\n|  13 | 2019福布斯中国最佳创投人TOP100     | https://www.forbeschina.com/lists/1747 |\n|  14 | 2019福布斯全球最有影响力体育经纪人      | https://www.forbeschina.com/lists/1727 |\n|  15 | 2019福布斯中国30位30岁以下精英榜     | https://www.forbeschina.com/lists/1725 |\n|  16 | 2019福布斯美国400富豪榜          | https://www.forbeschina.com/lists/1722 |\n|  17 | 2019福布斯菲律宾富豪榜            | https://www.forbeschina.com/lists/1721 |\n|  18 | 2019福布斯中国慈善榜             | https://www.forbeschina.com/lists/1718 |\n|  19 | 2019福布斯100名人榜            | https://www.forbeschina.com/lists/1717 |\n|  20 | 2019福布斯韩国富豪榜             | https://www.forbeschina.com/lists/1716 |\n|  21 | 2019福布斯马来西亚50富豪榜         | https://www.forbeschina.com/lists/19   |\n|  22 | 2019福布斯中国最杰出商界女性排行榜      | https://www.forbeschina.com/lists/1165 |\n|  23 | 2019福布斯全球亿万富豪榜           | https://www.forbeschina.com/lists/21   |\n|  24 | 2018福布斯中国商界25位潜力女性       | https://www.forbeschina.com/lists/13   |\n|  25 | 2018福布斯中国慈善榜             | https://www.forbeschina.com/lists/1156 |\n|  26 | 2018福布斯中国最佳创投人TOP100     | https://www.forbeschina.com/lists/1258 |\n|  27 | 2018福布斯中国最富有女性Top25      | https://www.forbeschina.com/lists/11   |\n|  28 | 2018福布斯中国最佳女性创投人TOP25    | https://www.forbeschina.com/lists/12   |\n|  29 | 2018中国最杰出商界女性排行榜         | https://www.forbeschina.com/lists/1145 |\n|  30 | 2018中国分析师最佳价值发现榜         | https://www.forbeschina.com/lists/1147 |\n|  31 | 2018中国最佳分析师50强榜          | https://www.forbeschina.com/lists/1148 |\n|  32 | 2018福布斯中国分析师最佳预测盈利能力榜    | https://www.forbeschina.com/lists/1149 |\n|  33 | 2018全球亿万富豪榜              | https://www.forbeschina.com/lists/1151 |\n|  34 | 2018福布斯中国30位30岁以下精英榜     | https://www.forbeschina.com/lists/1157 |\n|  35 | 2018福布斯中国上市公司最佳CEO       | https://www.forbeschina.com/lists/1159 |\n|  36 | 2018福布斯中国400富豪榜          | https://www.forbeschina.com/lists/1162 |\n|  37 | 2017福布斯全球科技界100富豪榜       | https://www.forbeschina.com/lists/1618 |\n|  38 | 2017福布斯中国30位30岁以下精英榜     | https://www.forbeschina.com/lists/1617 |\n|  39 | 2017华人富豪榜                | https://www.forbeschina.com/lists/1131 |\n|  40 | 2017全球亿万富豪榜              | https://www.forbeschina.com/lists/1132 |\n|  41 | 2017福布斯全球运动员收入榜          | https://www.forbeschina.com/lists/1644 |\n|  42 | 2017福布斯台湾50富豪榜           | https://www.forbeschina.com/lists/1133 |\n|  43 | 2017福布斯中国上市公司最佳CEO       | https://www.forbeschina.com/lists/1134 |\n|  44 | 2017福布斯中国名人榜             | https://www.forbeschina.com/lists/1135 |\n|  45 | 2017中国慈善榜                | https://www.forbeschina.com/lists/1681 |\n|  46 | 2017分析师最佳预测盈利能力榜         | https://www.forbeschina.com/lists/1253 |\n|  47 | 2017福布斯中国最佳创投人TOP100     | https://www.forbeschina.com/lists/1254 |\n|  48 | 2017中国最佳分析师50强榜          | https://www.forbeschina.com/lists/1252 |\n|  49 | 2020年福布斯世界最佳雇主TOP100     | https://www.forbeschina.com/lists/1749 |\n|  50 | 2020福布斯中国上市公司潜力企业榜       | https://www.forbeschina.com/lists/1748 |\n|  51 | 2020福布斯亚州中小上市企业榜         | https://www.forbeschina.com/lists/1742 |\n|  52 | 2020福布斯中国最具创新力企业榜        | https://www.forbeschina.com/lists/1736 |\n|  53 | 2020福布斯全球企业2000强榜        | https://www.forbeschina.com/lists/1735 |\n|  54 | 2019福布斯全球最具价值的体育经纪机构     | https://www.forbeschina.com/lists/1726 |\n|  55 | 2019福布斯全球数字经济100强榜       | https://www.forbeschina.com/lists/1724 |\n|  56 | 2019福布斯中国最具创新力企业榜        | https://www.forbeschina.com/lists/1715 |\n|  57 | 2018福布斯中国新三板企业融资能力榜TOP50 | https://www.forbeschina.com/lists/14   |\n|  58 | 2018福布斯中国最具创新力企业榜        | https://www.forbeschina.com/lists/17   |\n|  59 | 2018非上市公司潜力企业榜           | https://www.forbeschina.com/lists/18   |\n|  60 | 2018福布斯中国最佳创投机构          | https://www.forbeschina.com/lists/20   |\n|  61 | 2018上市公司潜力企业榜            | https://www.forbeschina.com/lists/1152 |\n|  62 | 2018福布斯中国新三板TOP100       | https://www.forbeschina.com/lists/1155 |\n|  63 | 2018福布斯中国最佳PE机构          | https://www.forbeschina.com/lists/1257 |\n|  64 | 2017福布斯中国家族企业            | https://www.forbeschina.com/lists/1136 |\n|  65 | 2017福布斯全球企业2000强         | https://www.forbeschina.com/lists/1139 |\n|  66 | 2017值得关注的新三板企业           | https://www.forbeschina.com/lists/1459 |\n|  67 | 2017中国非上市公司潜力企业榜         | https://www.forbeschina.com/lists/1460 |\n|  68 | 2017福布斯中国最佳PE机构          | https://www.forbeschina.com/lists/1255 |\n|  69 | 2017福布斯中国最佳创投机构          | https://www.forbeschina.com/lists/1256 |\n|  70 | 2019福布斯美国大学排行榜           | https://www.forbeschina.com/lists/1720 |\n|  71 | 2018福布斯创新力最强的30个城市       | https://www.forbeschina.com/lists/15   |\n|  72 | 2018福布斯最适合新生活的宜居城市       | https://www.forbeschina.com/lists/16   |\n|  73 | 2018福布斯中国大陆最佳商业城市        | https://www.forbeschina.com/lists/1163 |\n|  74 | 2017福布斯中国大陆最佳商业城市        | https://www.forbeschina.com/lists/1138 |\n|  75 | 2017福布斯中国大陆最佳地级城市30强     | https://www.forbeschina.com/lists/1140 |\n|  76 | 2017福布斯中国大陆最佳县级城市30强     | https://www.forbeschina.com/lists/1141 |\n|  77 | 2017福布斯创新力最强的30个城市       | https://www.forbeschina.com/lists/1142 |\n|  78 | 2017福布斯经营成本最高的30个城市      | https://www.forbeschina.com/lists/1143 |\n|  79 | 2015福布斯全球最适宜经商的国家和地区     | https://www.forbeschina.com/lists/1120 |\n|  80 | 2015美国最适宜经商和就业的城市        | https://www.forbeschina.com/lists/1453 |\n|  81 | 2015美国就业增长最快城市100强       | https://www.forbeschina.com/lists/1525 |\n|  82 | 2015美国最适合经商和就业的州         | https://www.forbeschina.com/lists/1526 |\n|  83 | 2014美国最适宜经商和就业的地区        | https://www.forbeschina.com/lists/1515 |\n|  84 | 2014福布斯美国最适合经商和就业的州      | https://www.forbeschina.com/lists/1516 |\n|  85 | 2014年世界最负盛名城市榜           | https://www.forbeschina.com/lists/1517 |\n|  86 | 2014福布斯全球最适宜经商的国家和地区     | https://www.forbeschina.com/lists/1524 |\n\n输出参数\n\n| 名称  | 类型  | 描述              |\n|-----|-----|-----------------|\n| 排名  | str | -               |\n| -   | -   | 根据不同的 symbol 而异 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nforbes_rank_df = ak.forbes_rank(symbol=\"2020福布斯中国400富豪榜\")\nprint(forbes_rank_df)\n```\n\n数据示例\n\n```\n      排名     姓名  财富（亿元）       财富来源  年龄 居住城市\n0      1     马云  4377.2       阿里巴巴  56   杭州\n1      2    马化腾  3683.2         腾讯  49   深圳\n2      3    钟睒睒  3596.5  农夫山泉/万泰生物  65   杭州\n3      4  孙飘扬家族  2335.4  恒瑞医药/翰森制药  62  连云港\n4      5  何享健家族  2148.5       美的集团  78   佛山\n..   ...    ...     ...        ...  ..  ...\n395  394  李文美家族   105.4       万孚生物  58   广州\n396  397    郭梓文   104.8       中国奥园  56   香港\n397  398  袁建栋家族   104.1       博瑞医药  50   苏州\n398  399     王帅   103.4       蚂蚁集团   /   杭州\n399  399    卢竑岩   103.4        吉比特  43   厦门\n```\n\n### 新财富富豪榜\n\n接口: xincaifu_rank\n\n目标地址: http://www.xcf.cn/zhuanti/ztzz/hdzt1/500frb/index.html\n\n描述: 新财富 500 富豪榜, 从 2003 年至今\n\n限量: 单次返回指定年份的富豪榜数据\n\n输入参数\n\n| 名称   | 类型  | 描述                      |\n|------|-----|-------------------------|\n| year | str | year=\"2020\"; 从 2003 年至今 |\n\n输出参数\n\n| 名称   | 类型      | 描述       |\n|------|---------|----------|\n| 排名   | int64   | -        |\n| 财富   | float64 | 注意单位: 亿元 |\n| 姓名   | object  | -        |\n| 主要公司 | object  | -        |\n| 相关行业 | object  | -        |\n| 公司总部 | object  | -        |\n| 性别   | object  | -        |\n| 年龄   | object  | -        |\n| 年份   | int64   | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nxincaifu_rank_df = ak.xincaifu_rank(year=\"2022\")\nprint(xincaifu_rank_df)\n```\n\n数据示例\n\n```\n      排名      财富       姓名       主要公司        相关行业     公司总部   性别     年龄    年份\n0      1  4983.5      钟睒睒  农夫山泉/万泰生物  矿泉水饮料、医药生物  浙江杭州/北京    男     68  2022\n1      2  3348.2      曾毓群       宁德时代        动力电池     福建宁德    男     54  2022\n2      3  3010.8      马化腾       腾讯控股     互联网综合服务     广东深圳    男     51  2022\n3      4  2916.0      张一鸣       今日头条  推荐引擎产品、短视频       北京    男     39  2022\n4      5  1972.0       黄峥        拼多多          电商       上海    男     42  2022\n..   ...     ...      ...        ...         ...      ...  ...    ...   ...\n495  496    94.7      崔志祥     方圆有色金属     铜、金、银生产     山东东营    男     59  2022\n496  497    94.6    胡成中家族        德力西  低压电器、仪器仪表等     浙江温州    男     61  2022\n497  498    94.2  张宏亮/张秀根       曙光股份        汽车整车     辽宁丹东  男/男  38,61  2022\n498  499    94.0       金磊       长春高新        生长激素     吉林长春    男     57  2022\n499  500    93.7    赵轶/徐昕       长川科技    集成电路测试装备     浙江杭州  男/女  56,56  2022\n```\n\n### 胡润排行榜\n\n接口: hurun_rank\n\n目标地址: https://www.hurun.net/zh-CN/Rank/HsRankDetails?num=QWDD234E\n\n描述: 胡润百富榜单；富豪榜系列，创业系列，500强系列，特色系列\n\n限量: 单次返回指定 indicator 和 year 的榜单数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                                                                                                                                                          |\n|-----------|-----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| indicator | str | indicator=\"胡润百富榜\"; choice of {\"胡润百富榜\", \"胡润全球富豪榜\", \"胡润印度榜\", \"胡润全球独角兽榜\", \"全球瞪羚企业榜\", \"胡润Under30s创业领袖榜\", \"胡润世界500强\", \"胡润艺术榜\"}                                                                                   |\n| year      | str | year=\"2020\"; choice of {\"胡润百富榜\": \"2014-至今\", \"胡润全球富豪榜\": \"2019-至今\", \"胡润印度榜\": \"2018-至今\", \"胡润全球独角兽榜\": \"2019-至今\", \"全球瞪羚企业榜\": \"2021-至今\", \"胡润Under30s创业领袖榜\": \"2019-至今\", \"胡润世界500强\": \"2020-至今\", \"胡润艺术榜\": \"2019-至今\"} |\n\n输出参数-胡润百富榜\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 排名  | int64   | -        |\n| 财富  | float64 | 注意单位: 亿元 |\n| 姓名  | object  | -        |\n| 企业  | object  | -        |\n| 行业  | object  | -        |\n\n接口示例-胡润百富榜\n\n```python\nimport akshare as ak\n\nhurun_rank_df = ak.hurun_rank(indicator=\"胡润百富榜\", year=\"2023\")\nprint(hurun_rank_df)\n```\n\n数据示例-胡润百富榜\n\n```\n        排名      财富       姓名    企业       行业\n0        1  4500.0      钟睒睒   养生堂  饮料、医疗保健\n1        2  2800.0      马化腾    腾讯    互联网服务\n2        3  2700.0       黄峥   拼多多     购物网站\n3        4  2500.0      曾毓群  宁德时代      锂电池\n4        5  2450.0      张一鸣  字节跳动     社交媒体\n    ...     ...      ...   ...      ...\n1236  1179    50.0  周富裕、唐建芳   周黑鸭       食品\n1237  1179    50.0  周华松、吴文利  松霖科技     淋浴设备\n1238  1179    50.0      周明华  华海药业       医药\n1239  1179    50.0      周文起    华北   铜业、房地产\n1240  1179    50.0      庄辰超  斑马投资       投资\n[1241 rows x 5 columns]\n```\n\n输出参数-胡润全球富豪榜\n\n| 名称  | 类型      | 描述        |\n|-----|---------|-----------|\n| 排名  | int64   | -         |\n| 财富  | float64 | 注意单位: 亿美元 |\n| 姓名  | object  | -         |\n| 企业  | object  | -         |\n| 行业  | object  | -         |\n\n接口示例-胡润全球富豪榜\n\n```python\nimport akshare as ak\n\nhurun_rank_df = ak.hurun_rank(indicator=\"胡润全球富豪榜\", year=\"2023\")\nprint(hurun_rank_df)\n```\n\n数据示例-胡润全球富豪榜\n\n```\n        排名       财富       姓名            企业       行业\n0        1  13500.0  伯纳德·阿诺特  酩悦·轩尼诗-路易·威登      奢侈品\n1        2  10500.0   埃隆·马斯克           特斯拉    新能源汽车\n2        3   9000.0  贝特朗·皮埃奇           爱马仕      奢侈品\n3        4   7900.0   杰夫·贝佐斯           亚马逊     电子商务\n4        5   7800.0   沃伦·巴菲特      伯克希尔·哈撒韦       投资\n    ...      ...      ...           ...      ...\n3107  2923     67.0      钟宝申            隆基     绿色能源\n3108  2923     67.0      钟培峰          晶晨股份      半导体\n3109  2923     67.0       周剑           优必选      机器人\n3110  2923     67.0      周明华          华海药业       医药\n3111  2923     67.0   邹伟民、陈敏          传艺科技  消费电子零部件\n[3112 rows x 5 columns]\n```\n\n输出参数-胡润全球独角兽榜\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 排名  | int64   | -        |\n| 财富  | float64 | 注意单位: 亿元 |\n| 姓名  | object  | -        |\n| 企业  | object  | -        |\n| 行业  | object  | -        |\n\n接口示例-胡润全球独角兽榜\n\n```python\nimport akshare as ak\n\nhurun_rank_df = ak.hurun_rank(indicator=\"胡润全球独角兽榜\", year=\"2023\")\nprint(hurun_rank_df)\n```\n\n数据示例-胡润全球独角兽榜\n\n```\n        排名       财富  ...      企业    行业\n0        1  13800.0  ...    字节跳动  社交媒体\n1        2   9450.0  ...  SpaceX    航天\n2        3   8300.0  ...    蚂蚁集团  金融科技\n3        4   4500.0  ...   Shein  电子商务\n4        5   3800.0  ...  Stripe  金融科技\n    ...      ...  ...     ...   ...\n1355  1039     69.0  ...     云学堂  企业服务\n1356  1039     69.0  ...   Zebec  金融科技\n1357  1039     69.0  ...    Zeta  金融科技\n1358  1039     69.0  ...    Zopa  金融科技\n1359  1039     69.0  ...   Zwift  健康科技\n[1360 rows x 5 columns]\n```\n\n输出参数-胡润世界500强\n\n| 名称   | 类型      | 描述       |\n|------|---------|----------|\n| 排名   | int64   | -        |\n| 排名变化 | int64   | -        |\n| 企业估值 | float64 | 注意单位: 亿元 |\n| 企业信息 | object  | -        |\n| CEO  | object  | -        |\n| 行业   | object  | -        |\n\n接口示例-胡润世界500强\n\n```python\nimport akshare as ak\n\nhurun_rank_df = ak.hurun_rank(indicator=\"胡润世界500强\", year=\"2022\")\nprint(hurun_rank_df)\n```\n\n数据示例-胡润世界500强\n\n```\n      排名  排名变化      企业估值      企业信息                   CEO        行业\n0      1     0  171540.0        苹果                 蒂姆·库克       消费品\n1      2     0  130860.0        微软               萨提亚·纳德拉     软件与服务\n2      3     1   95770.0  Alphabet               桑达尔·皮查伊     传媒和娱乐\n3      4    -1   88090.0       亚马逊                 安迪·贾西        零售\n4      5     3   48720.0       特斯拉                埃隆·马斯克  汽车及汽车零部件\n..   ...   ...       ...       ...                   ...       ...\n495  495  -258    2100.0   Coupang           Bom Suk Kim        零售\n496  495  -166    2100.0      东方财富                    其实      金融服务\n497  495  -190    2100.0       爱德士  Jonathan J. Mazelsky      医疗健康\n498  495  -176    2100.0      联发科技                   陈冠州       半导体\n499  500  -247    2030.0        百度                   李彦宏     传媒和娱乐\n[500 rows x 6 columns]\n```\n\n输出参数-胡润艺术榜\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 排名   | int64   | -       |\n| 排名   | int64   | -       |\n| 成交额  | float64 | 注意单位: 万 |\n| 姓名   | object  | -       |\n| 年龄   | object  | -       |\n| 艺术类别 | object  | -       |\n\n接口示例-胡润艺术榜\n\n```python\nimport akshare as ak\n\nhurun_rank_df = ak.hurun_rank(indicator=\"胡润艺术榜\", year=\"2023\")\nprint(hurun_rank_df)\n```\n\n数据示例-胡润艺术榜\n\n```\n     排名 排名变化      成交额   姓名  年龄     艺术类别\n0     1    1  14371.0  曾梵志  59       油画\n1     2   -1  11106.0  崔如琢  79     中国书画\n2     3    4  10148.0  黄建南  71  油画/中国书画\n3     4    6   9405.0   范曾  85     中国书画\n4     5    4   9058.0  黄宇兴  48       油画\n..  ...  ...      ...  ...  ..      ...\n95   96  New    388.0   邵帆  59     中国书画\n96   97  -36    385.0   喻红  57       油画\n97   98  -24    369.0   薛松  58     中国书画\n98   99  New    362.0  陈文骥  69       油画\n99  100  -27    358.0   林墉  82     中国书画\n[100 rows x 6 columns]\n```\n\n### 电影票房\n\n#### 实时票房\n\n接口: movie_boxoffice_realtime\n\n目标地址: https://ys.endata.cn/BoxOffice/Movie\n\n描述: 当前时刻的实时电影票房数据, 每 5 分钟更新一次数据, 实时票房包含今天未开映场次已售出的票房\n\n限量: 当前时刻的实时票房数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 排序   | int64   | 票房排名    |\n| 影片名称 | object  | -       |\n| 实时票房 | float64 | 注意单位: 万 |\n| 票房占比 | float64 | 注意单位: % |\n| 上映天数 | int64   | -       |\n| 累计票房 | float64 | 注意单位: 万 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmovie_boxoffice_realtime_df = ak.movie_boxoffice_realtime()\nprint(movie_boxoffice_realtime_df)\n```\n\n数据示例\n\n```\n    排序            影片名称 实时票房   票房占比  上映天数  累计票房\n0    1             第二十条  2773.21  27.29    11  160845.76\n1    2            飞驰人生2  2499.77  24.60    11  267199.76\n2    3         熊出没·逆转时空  2429.72  23.91    11  159079.03\n3    4             热辣滚烫  2413.96  23.76    11  300038.28\n4    5               孤军    11.60   0.11    55    2528.30\n5    6           年会不能停！     7.36   0.07    54  128760.85\n6    7  泰勒·斯威夫特：时代巡回演唱会     4.73   0.05    52    9594.50\n7    8         还是觉得你最好2     4.45   0.04    -3      82.60\n8    9          八戒之天蓬下界     2.98   0.03    11     345.28\n9   10        舒克贝塔·五角飞碟     2.87   0.03    53    6548.90\n10  11               其它    10.25   1.00     0       0.00\n```\n\n#### 单日票房\n\n接口: movie_boxoffice_daily\n\n目标地址: https://www.endata.com.cn/BoxOffice/BO/Day/index.html\n\n描述: 指定日期的电影票房数据, 每日 10:30, 12:30更新日票房，16:30 同时补充前 7 日票房\n\n限量: 只能指定最近的日期\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20240219\"; 只能选择最近的日期 |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 排序   | int64   | 票房排名    |\n| 影片名称 | object  | -       |\n| 单日票房 | int64   | 注意单位: 万 |\n| 环比变化 | float64 | 注意单位: % |\n| 累计票房 | int64   | 注意单位: 万 |\n| 平均票价 | int64   | 注意单位: 元 |\n| 场均人次 | int64   | -       |\n| 口碑指数 | float64 | -       |\n| 上映天数 | int64   | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmovie_boxoffice_daily_df = ak.movie_boxoffice_daily(date=\"20240219\")\nprint(movie_boxoffice_daily_df)\n```\n\n数据示例\n\n```\n   排序             影片名称   单日票房  环比变化    累计票房  平均票价  场均人次  口碑指数  上映天数\n0   1             第二十条  12808 -23.0  158075    45    10  8.99    21\n1   2            飞驰人生2  12693 -26.0  264702    46    10  9.04    17\n2   3             热辣滚烫  13094 -29.0  297624    45    10  8.98    17\n3   4         熊出没·逆转时空   9263 -27.0  156650    44    10  8.78    22\n4   5               秋田     15  47.0      68    42    26  0.00    27\n5   6           年会不能停！     17  18.0  128754    41    53  9.05     3\n6   7        海王2：失落的王国     10  10.0   46449    39    62   NaN     6\n7   8               孤军      7  14.0    2516    41    54  0.00   102\n8   9  泰勒·斯威夫特：时代巡回演唱会      6   0.0    9590    48    51  0.00    11\n9  10          八戒之天蓬下界     14 -64.0     342    42    10  0.00     2\n```\n\n#### 单周票房\n\n接口: movie_boxoffice_weekly\n\n目标地址: https://www.endata.com.cn/BoxOffice/BO/Week/oneWeek.html\n\n描述: 指定日期所在完整周的票房数据, 影片周票房数据初始更新周期为每周二，下周二补充数据\n\n限量: 指定日期所在完整周的票房数据\n\n输入参数\n\n| 名称   | 类型  | 描述                             |\n|------|-----|--------------------------------|\n| date | str | date=\"20240218\"; 指定日期所在周必须已经完整 |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 排序   | int64   | 票房排名    |\n| 影片名称 | object  | -       |\n| 排名变化 | int64   | -       |\n| 单周票房 | int64   | 注意单位: 万 |\n| 环比变化 | int64   | 注意单位: % |\n| 累计票房 | int64   | 注意单位: 万 |\n| 平均票价 | int64   | -       |\n| 场均人次 | int64   | -       |\n| 口碑指数 | float64 | -       |\n| 上映天数 | int64   | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmovie_boxoffice_weekly_df = ak.movie_boxoffice_weekly(date=\"20240218\")\nprint(movie_boxoffice_weekly_df)\n```\n\n数据示例\n\n```\n   排序     影片名称  排名变化  单周票房 环比变化 累计票房  平均票价 场均人次 口碑指数 上映天数\n0   1       热辣滚烫  9999  208829  163  288355    49    40  9.02     9\n1   2      飞驰人生2  9999  180105  139  255362    49    39  9.08     9\n2   3       第二十条     1  114864  244  148245    48    39  9.03     9\n3   4   熊出没·逆转时空    -1  106105  142  149889    47    41  8.98     9\n4   5    我们一起摇太阳     2    4926    7    9512    49    16  9.20     9\n5   6       红毯先生  9999    2977  -46    8488    54     8  8.52     9\n6   7     年会不能停！    -2     264  -96  128733    45     9  9.06    52\n7   8    八戒之天蓬下界    15     225  102     337    43     3   NaN     9\n8   9  海王2：失落的王国     1     119  -88   46438    41    12  8.10    61\n9  10   还是觉得你最好2     0      75    0      75    61    95   NaN    -5\n```\n\n#### 单月票房\n\n接口: movie_boxoffice_monthly\n\n目标地址: https://www.endata.com.cn/BoxOffice/BO/Month/oneMonth.html\n\n描述: 获取指定日期所在月份的票房数据, 每月5号更新上月票房，并补充之前两个月票房\n\n限量: 指定日期所在月份的票房数据, 只能获取最近月份的数据\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20201019\"; 输入具体的日期即可 |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 排序   | int64   | 票房排名    |\n| 影片名称 | object  | -       |\n| 单月票房 | int64   | 注意单位: 万 |\n| 月度占比 | float64 | 注意单位: % |\n| 平均票价 | int64   | -       |\n| 场均人次 | int64   | -       |\n| 上映日期 | object  | -       |\n| 口碑指数 | float64 | -       |\n| 月内天数 | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmovie_boxoffice_monthly_df = ak.movie_boxoffice_monthly(date=\"20240218\")\nprint(movie_boxoffice_monthly_df)\n```\n\n数据示例\n\n```\n     排序      影片名称 单月票房  月度占比 平均票价  场均人次  上映日期  口碑指数  月内天数\n0     1       热辣滚烫  297624  31.8    49    42  2024-02-10  9.05  20.0\n1     2      飞驰人生2  264702  28.3    49    40  2024-02-10  9.12  20.0\n2     3       第二十条  158075  16.9    48    36  2024-02-10  9.06  20.0\n3     4   熊出没·逆转时空  156645  16.8    47    43  2024-02-10  9.03  20.0\n4     5     年会不能停！   14940   1.6    38     5  2023-12-29  9.07  29.0\n5     6    我们一起摇太阳    9513   1.0    50    14  2024-02-10  9.24  20.0\n6     7       红毯先生    8492   0.9    52    11  2024-02-10  8.54  20.0\n7     8        金手指    5326   0.6    39     4  2023-12-30  8.10  29.0\n8     9       临时劫案    5295   0.6    38     2  2024-01-19  7.95  29.0\n9    10  海王2：失落的王国    2021   0.2    38     4  2023-12-20  8.12  29.0\n10  999         其他   12222   1.3    38     2        None   NaN   NaN\n```\n\n#### 年度票房\n\n接口: movie_boxoffice_yearly\n\n目标地址: https://www.endata.com.cn/BoxOffice/BO/Year/index.html\n\n描述: 指定日期所在年度的票房数据\n\n限量: 指定日期所在年度的票房数据, 只能获取最近年度的数据\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20240218\"; 输入具体的日期即可 |\n\n输出参数\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 排序    | int64   | 票房排名    |\n| 影片名称  | object  | -       |\n| 类型    | object  | -       |\n| 总票房   | int64   | 注意单位: 万 |\n| 平均票价  | int64   | -       |\n| 场均人次  | float64 | -       |\n| 国家及地区 | object  | -       |\n| 上映日期  | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmovie_boxoffice_yearly_df = ak.movie_boxoffice_yearly(date=\"20240218\")\nprint(movie_boxoffice_yearly_df)\n```\n\n数据示例\n\n```\n    排序           影片名称   类型  总票房  平均票价  场均人次  国家及地区   上映日期\n0    1             热辣滚烫   剧情  299473    49  39.0       中国  2024-02-10\n1    2            飞驰人生2   剧情  266592    49  37.0       中国  2024-02-10\n2    3             第二十条   剧情  160201    48  33.0       中国  2024-02-10\n3    4         熊出没·逆转时空   动画  158538    47  40.0       中国  2024-02-10\n4    5           年会不能停！   剧情  105635    39   7.0       中国  2023-12-29\n5    6              金手指   剧情   41595    40   6.0  中国/中国香港  2023-12-30\n6    7             临时劫案   剧情   23658    38   4.0       中国  2024-01-19\n7    8               潜行   剧情   20261    39   5.0       中国  2023-12-29\n8    9          一闪一闪亮星星   爱情   14900    39   4.0       中国  2023-12-30\n9   10              三大队   剧情   14518    42   5.0       中国  2023-12-15\n10  11        海王2：失落的王国   动作   12891    39   6.0       美国  2023-12-20\n11  12              养蜂人   动作   11342    41   4.0    美国/英国  2024-01-12\n12  13         动物园里有什么？   喜剧   10802    37   3.0       中国  2024-01-12\n13  14          我们一起摇太阳   剧情    9513    50  14.0       中国  2024-02-10\n14  15             红毯先生   剧情    8492    52  11.0       中国  2024-02-10\n15  16            非诚勿扰3   喜剧    5877    41   4.0       中国  2023-12-30\n16  17  泰勒·斯威夫特：时代巡回演唱会  纪录片    5582    48   8.0       美国  2023-12-31\n17  18        舒克贝塔·五角飞碟   动画    4270    37   4.0       中国  2023-12-30\n18  19             天降大任   动画    3181    43   4.0       中国  2024-01-06\n19  20      名侦探柯南：黑铁的鱼影   动画    3063    33   5.0       日本  2023-12-16\n20  21        开心超人之时空营救   动画    2576    33   2.0       中国  2024-01-20\n21  22               孤军   剧情    2334    46  65.0       中国  2023-12-28\n22  23             照明商店   剧情    1809    40   3.0       中国  2023-12-08\n23  24               大雨   动画    1718    41   2.0       中国  2024-01-12\n24  25         志愿军：雄兵出击   战争    1047    96  55.0       中国  2023-09-28\n```\n\n#### 年度首周票房\n\n接口: movie_boxoffice_yearly_first_week\n\n目标地址: https://www.endata.com.cn/BoxOffice/BO/Year/firstWeek.html\n\n描述: 指定日期所在年度的年度首周票房数据\n\n限量: 指定日期所在年度的年度首周票房数据, 只能获取最近年度的数据\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20201018\"; 输入具体的日期即可 |\n\n输出参数\n\n| 名称     | 类型     | 描述      |\n|--------|--------|---------|\n| 排序     | int64  | 票房排名    |\n| 影片名称   | object | -       |\n| 类型     | object | -       |\n| 首周票房   | int64  | 注意单位: 万 |\n| 占总票房比重 | int64  | 注意单位: % |\n| 场均人次   | int64  | -       |\n| 国家及地区  | object | -       |\n| 上映日期   | object | -       |\n| 首周天数   | int64  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmovie_boxoffice_yearly_first_week_df = ak.movie_boxoffice_yearly_first_week(date=\"20201018\")\nprint(movie_boxoffice_yearly_first_week_df)\n```\n\n数据示例\n\n```\n   排序                 影片名称  类型  首周票房  占总票房比重  场均人次  国家及地区        上映日期  首周天数\n0   1                 鲨海逃生  灾难  2473      52     5  美国/英国  2020-01-10     3\n1   2  紫罗兰永恒花园外传：永远与自动手记人偶  剧情  2342      48     6     日本  2020-01-10     3\n2   3                动物特工局  动画  1489      33     6  中国/法国  2020-01-11     2\n3   4                 为家而战  动作  1364      79     3  美国/英国  2020-01-10     3\n4   5                   灭绝  科幻   997      62    10     美国  2020-01-18     2\n5   6                 别告诉她  剧情   205      50     5  美国/中国  2020-01-10     3\n6   7                 致敬英雄  剧情   199      54     6     中国  2020-01-10     3\n7   8                格萨尔藏戏  剧情     0       0     1     中国  2020-08-21  -186\n```\n\n#### 影院票房-日票房排行\n\n接口: movie_boxoffice_cinema_daily\n\n目标地址: https://www.endata.com.cn/BoxOffice/BO/Cinema/day.html\n\n描述: 指定日期的每日各影院的票房数据\n\n限量: 指定日期各影院的票房数据, 注意当前日期的数据需要第二日才可以获取\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20240219\"; 输入具体的日期即可 |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 排序   | int64   | 票房排名    |\n| 影院名称 | object  | -       |\n| 单日票房 | float64 | 注意单位: 元 |\n| 单日场次 | int64   | -       |\n| 场均人次 | float64 | -       |\n| 场均票价 | float64 | -       |\n| 上座率  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmovie_boxoffice_cinema_daily_df = ak.movie_boxoffice_cinema_daily(date=\"20240219\")\nprint(movie_boxoffice_cinema_daily_df)\n```\n\n数据示例\n\n```\n     排序            影院名称       单日票房  单日场次   场均人次    场均票价    上座率\n0     1       廊坊市橙天国际影城  381255.31    46  56.61  146.41  42.69\n1     2       阜阳颍州万达广场店  254175.95    72  68.56   51.49  34.26\n2     3       庆阳市M3电影城堡  234791.42    49  85.02   56.36  61.32\n3     4  北京耀莱成龙影城（五棵松店）  231814.17   107  41.48   52.23  22.59\n4     5     厦门万达影城SM广场店  218179.01    84  51.15   50.77  28.54\n..  ...             ...        ...   ...    ...     ...    ...\n95   96      长垣县艾影汇国际影城  127034.18    54  43.65   53.90  34.51\n96   97       呼和浩特万达广场店  126514.62    58  41.71   52.30  24.82\n97   98       西安高新万达广场店  126260.37   109  21.03   55.09  17.56\n98   99  阜阳市星轶影城（吾悦广场店）  126209.61    34  61.76   60.10  38.07\n99  100     中影国际影城燕郊永旺店  126176.63    52  46.17   52.55  23.97\n[100 rows x 7 columns]\n```\n\n#### 影院票房-周票房排行\n\n接口: movie_boxoffice_cinema_weekly\n\n目标地址: https://www.endata.com.cn/BoxOffice/BO/Cinema/week.html\n\n描述: 指定日期的完整周各影院的票房数据\n\n限量: 指定日期的完整周各影院的票房数据, 注意当前日期的数据只能返回上周的数据\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20240219\"; 输入具体的日期即可 |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 排序     | int64   | 票房排名    |\n| 影院名称   | object  | -       |\n| 当周票房   | float64 | 注意单位: 万 |\n| 单银幕票房  | float64 | 注意单位: 元 |\n| 场均人次   | float64 | -       |\n| 单日单厅票房 | float64 | -       |\n| 单日单厅场次 | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nmovie_boxoffice_cinema_weekly_df = ak.movie_boxoffice_cinema_weekly(date=\"20240219\")\nprint(movie_boxoffice_cinema_weekly_df)\n```\n\n数据示例\n\n```\n     排序     影院名称   当周票房   单银幕票房   场均人次  单日单厅票房  单日单厅场次\n0     1      鄢陵奥斯卡国际影城  672.0  112.00   4.00   22.40    0.20\n1     2      睢县奥斯卡天空影城  528.0  528.00  22.00   88.00    0.17\n2     3         台山天悦影城  489.3   69.90   1.00   13.98    0.20\n3     4  东莞中影南方国际影城地王店  462.0   33.00   1.00    9.43    0.29\n4     5      三明永安华夏大剧院  454.0   75.67   1.67   15.13    0.20\n..  ...            ...    ...     ...    ...     ...     ...\n95   96  乳源瑶族自治县华景汇聚影城    0.0    0.00   0.00    0.00    0.20\n96   97      来宾金秀县秀河影院    0.0    0.00   0.00    0.00    1.00\n97   98        灵川县大唐影院    0.0    0.00   0.00    0.00    0.33\n98   99      闽清县六都国际影城    0.0    0.00   0.00    0.00    0.33\n99  100         建瓯市电影院    0.0    0.00   0.00    0.00    0.25\n[100 rows x 7 columns]\n```\n\n### 视频播映\n\n#### 电视剧集\n\n接口: video_tv\n\n目标地址: https://www.endata.com.cn/Video/index.html\n\n描述: 艺恩-视频放映-电视剧集\n\n限量: 返回前一日的电视剧播映数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 排序   | int64   | -   |\n| 名称   | object  | -   |\n| 类型   | object  | -   |\n| 播映指数 | float64 | -   |\n| 媒体热度 | float64 | -   |\n| 用户热度 | float64 | -   |\n| 好评度  | float64 | -   |\n| 观看度  | float64 | -   |\n| 统计日期 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nvideo_tv_df = ak.video_tv()\nprint(video_tv_df)\n```\n\n数据示例\n\n```\n   排序    名称     类型   播映指数   媒体热度  用户热度 好评度  观看度     统计日期\n0   1    在暴雪时分  爱情/都市  79.44  74.46  75.72  68.00  80.43  2024-02-18\n1   2     南来北往     爱情  78.67  76.24  75.63  53.39  83.90  2024-02-18\n2   3     烟火人家  剧情/爱情  72.98  72.04  71.43  52.47  74.73  2024-02-18\n3   4      莲花楼     古装  72.84  68.92  76.22  85.00  56.97  2024-02-18\n4   5       繁花  剧情/爱情  72.40  75.92  65.39  86.00  63.16  2024-02-18\n5   6     一念关山     古装  69.52  60.02  79.51  64.00  57.42  2024-02-18\n6   7     要久久爱     剧情  69.45  63.88  71.14  72.00  60.50  2024-02-18\n7   8   长相思第一季  爱情/奇幻  68.41  62.20  67.88  78.00  59.09  2024-02-18\n8   9   乡村爱情16  喜剧/乡村  67.16  65.22  62.70  52.07  70.66  2024-02-18\n9  10  繁花[沪语版]     剧情  66.96  75.93  65.39  51.32  63.16  2024-02-18\n```\n\n#### 综艺节目\n\n接口: video_variety_show\n\n目标地址: https://www.endata.com.cn/Video/index.html\n\n描述: 艺恩-视频放映-综艺节目\n\n限量: 返回前一日的综艺播映数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 排序   | int64   | -   |\n| 名称   | object  | -   |\n| 类型   | object  | -   |\n| 播映指数 | float64 | -   |\n| 媒体热度 | float64 | -   |\n| 用户热度 | float64 | -   |\n| 好评度  | float64 | -   |\n| 观看度  | float64 | -   |\n| 统计日期 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nvideo_variety_show_df = ak.video_variety_show()\nprint(video_variety_show_df)\n```\n\n数据示例\n\n```\n   排序         名称      类型   播映指数   媒体热度   用户热度    好评度  观看度    统计日期\n0   1         声生不息家年华     真人秀  81.62  73.82  94.64  68.00  67.75  2024-02-18\n1   2       你好星期六2024     真人秀  71.46  66.35  78.16  51.66  66.63  2024-02-18\n2   3  声生不息·家年华 舞台纯享版  真人秀/衍生  71.35  73.82  94.64  49.75  47.48  2024-02-18\n3   4          奔跑吧第七季     真人秀  70.35  73.40  73.98  72.00  56.05  2024-02-18\n4   5        名侦探学院第七季     真人秀  64.80  73.86  68.72  50.51  55.14  2024-02-18\n5   6     花儿与少年丝路季第五季     真人秀  63.89  64.07  65.74  91.00  42.49  2024-02-18\n6   7         极限挑战第九季     真人秀  63.42  70.93  71.96  54.00  47.89  2024-02-18\n7   8             毛雪汪     真人秀  62.93  41.64  65.67  74.00  56.81  2024-02-18\n8   9        王牌对王牌第八季     真人秀  62.48  63.42  64.12  53.00  56.81  2024-02-18\n9  10      极限挑战宝藏行第四季     真人秀  62.34  56.96  67.96  50.64  56.37  2024-02-18\n```\n\n### 艺人\n\n#### 艺人商业价值\n\n接口: business_value_artist\n\n目标地址: https://www.endata.com.cn/Marketing/Artist/business.html\n\n描述: 艺恩-艺人-艺人商业价值\n\n限量: 返回当前的艺人商业价值数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述                                                                                                         |\n|------|---------|------------------------------------------------------------------------------------------------------------|\n| 排名   | int64   | -                                                                                                          |\n| 艺人   | object  | -                                                                                                          |\n| 商业价值 | float64 | 商业价值由专业度，关注度，预测热度加权汇总计算后得出，分值范围0~100，综合反映明星作品、代言表现、近期热度及舆情口碑。                                              |\n| 专业热度 | float64 | 艺人专业热度主要表现艺人历史作品及品牌代言的效果情况，参与计算的指标维度包括历史主演电影票房表现，历史主演视频节目播映热度，电影作品豆瓣评分，作品相关微博内容评论正负向，历史代言品牌数量，品牌热度，艺人获奖数量。 |\n| 关注热度 | float64 | 艺人关注热度主要表现艺人网络中的舆情声量，参与计算的指标维度包括百度搜索指数，百度新闻数量，今日头条新闻数，微博转发量，微博评论量，微博点赞量，微博粉丝数量，贴吧关注数量，微博话题数量。              |\n| 预测热度 | float64 | 预测热度的数值反映明星的未来发展潜力，包括粉丝增长规模，作品口碑以及未来作品预测。                                                                  |\n| 美誉度  | float64 | 根据艺人近三年参演电影、视频作品在豆瓣等平台的评分、微博正向评价，以及微博好评率等指标综合加权得出。                                                         |\n| 统计日期 | object  | -                                                                                                          |\n\n接口示例\n\n```python\nimport akshare as ak\n\nbusiness_value_artist_df = ak.business_value_artist()\nprint(business_value_artist_df)\n```\n\n数据示例\n\n```\n     排名  艺人 商业价值 专业热度 关注热 预测热度  美誉度     统计日期\n0     1    杨幂  88.90  88.80  78.47  78.36  63.00  2021-11-16\n1     2   朱一龙  85.09  92.40  71.17  13.76  72.00  2021-11-16\n2     3  易烊千玺  84.65  85.73  75.19  57.26  65.67  2021-11-16\n3     4   黄晓明  82.81  88.81  66.14  48.59  59.00  2021-11-16\n4     5    刘涛  82.62  83.44  71.61  71.27  49.33  2021-11-16\n..  ...   ...    ...    ...    ...    ...    ...         ...\n95   96   张涵予  72.06  74.19  63.89  34.97  58.67  2021-11-16\n96   97   胡一天  72.02  73.85  59.71  67.64  53.33  2021-11-16\n97   98    徐峥  71.95  72.16  61.45  74.32  79.67  2021-11-16\n98   99    魏晨  71.91  75.15  63.19  25.54  73.00  2021-11-16\n99  100   钟楚曦  71.87  72.61  63.14  55.64  44.00  2021-11-16\n```\n\n#### 艺人流量价值\n\n接口: online_value_artist\n\n目标地址: https://www.endata.com.cn/Marketing/Artist/business.html\n\n描述: 艺恩-艺人-艺人流量价值\n\n限量: 返回当前的艺人流量价值数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述                                                                                                         |\n|------|---------|------------------------------------------------------------------------------------------------------------|\n| 排名   | int64   | -                                                                                                          |\n| 艺人   | object  | -                                                                                                          |\n| 流量价值 | float64 | 流量价值由专业度，关注度，预测热度，带货力加权汇总计算后得出，分值范围0~100，在商业价值的基础上增加了明星近期热度及带货力的权重。                                        |\n| 专业热度 | float64 | 艺人专业热度主要表现艺人历史作品及品牌代言的效果情况，参与计算的指标维度包括历史主演电影票房表现，历史主演视频节目播映热度，电影作品豆瓣评分，作品相关微博内容评论正负向，历史代言品牌数量，品牌热度，艺人获奖数量。 |\n| 关注热度 | float64 | 艺人关注热度主要表现艺人网络中的舆情声量，参与计算的指标维度包括百度搜索指数，百度新闻数量，今日头条新闻数，微博转发量，微博评论量，微博点赞量，微博粉丝数量，贴吧关注数量，微博话题数量。              |\n| 预测热度 | float64 | 预测热度的数值反映明星的未来发展潜力，包括粉丝增长规模，作品口碑以及未来作品预测。                                                                  |\n| 带货力  | float64 | 带货力的数值代表艺人的带货号召力，包括艺人的铁杆粉丝规模，超话粉丝规模。                                                                       |\n| 统计日期 | object  | -                                                                                                          |\n\n接口示例\n\n```python\nimport akshare as ak\n\nonline_value_artist_df = ak.online_value_artist()\nprint(online_value_artist_df)\n```\n\n数据示例\n\n```\n     排名  艺人 流量价值 专业热度 关注热度 预测热度 带货力    统计日期\n0     1   杨紫  85.47  74.30  76.06  97.80  83.95  2021-11-16\n1     2   杨幂  85.15  88.80  78.47  78.36  89.24  2021-11-16\n2     3  王一博  82.18  81.34  71.35  87.57  94.60  2021-11-16\n3     4   龚俊  80.94  70.46  72.67  87.62  88.60  2021-11-16\n4     5  陈伟霆  79.42  80.35  74.84  73.49  77.83  2021-11-16\n..  ...  ...    ...    ...    ...    ...    ...         ...\n95   96  佟丽娅  67.11  81.30  60.15  57.87  73.44  2021-11-16\n96   97  郭麒麟  67.09  81.95  62.45  44.96  76.56  2021-11-16\n97   98   杨迪  67.06  65.26  63.42  55.52  73.07  2021-11-16\n98   99  钟楚曦  67.03  72.61  63.14  55.64  68.99  2021-11-16\n99  100  张子枫  67.02  74.36  65.76  41.24  71.71  2021-11-16\n```\n\n### 微博舆情报告\n\n接口: stock_js_weibo_report\n\n目标地址: https://datacenter.jin10.com/market\n\n描述: 微博舆情报告中近期受关注的股票\n\n限量: 单次返回指定时间内微博舆情报告中近期受关注的股票\n\n输入参数\n\n| 名称          | 类型  | 描述                                                                                     |\n|-------------|-----|----------------------------------------------------------------------------------------|\n| time_period | str | time_period=\"CNHOUR12\"; 详见下表**time_period参数一览表**, 可通过调用 **stock_js_weibo_nlp_time** 获取 |\n\ntime_period 参数一览表\n\n| 参数       | 说明   |\n|----------|------|\n| CNHOUR2  | 2小时  |\n| CNHOUR6  | 6小时  |\n| CNHOUR12 | 12小时 |\n| CNHOUR24 | 1天   |\n| CNDAY7   | 1周   |\n| CNDAY30  | 1月   |\n\n输出参数\n\n| 名称   | 类型  | 描述     |\n|------|-----|--------|\n| name | str | 股票名称   |\n| rate | str | 人气排行指数 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_js_weibo_report_df = ak.stock_js_weibo_report(time_period=\"CNHOUR12\")\nprint(stock_js_weibo_report_df)\n```\n\n数据示例\n\n```\n    name   rate\n0   黄河旋风   9.86\n1   东方财富   6.91\n2   海王生物  10.09\n3   秀强股份   4.56\n4   江淮汽车  10.08\n5    欧菲光  10.00\n6   中兴通讯   9.98\n7   鲁抗医药   9.97\n8   海陆重工  10.07\n9   中通客车   9.75\n10  华天科技  10.02\n11  亚星客车   7.70\n12  中国平安  -0.66\n13  新日恒力   9.98\n14   同花顺  -0.90\n15  赣锋锂业  10.00\n16  北玻股份  10.09\n17   比亚迪   7.02\n18  沪电股份  10.00\n19   太平洋   9.92\n20  深康佳A  -8.02\n21  天齐锂业   9.34\n22  泰达股份   9.99\n23  中信证券   0.68\n24  欣龙控股  10.00\n25  均胜电子  10.00\n26   安居宝   9.98\n27  联环药业  10.00\n28  乾照光电   2.93\n29  山东黄金  -3.38\n30  国海证券   7.20\n31  永鼎股份  10.00\n32   漫步者  -4.51\n33  江苏吴中  10.03\n34  国农科技  10.00\n35  中环股份   9.98\n36  阳普医疗  10.01\n37   新宙邦   8.91\n38  兴森科技   9.98\n39  南大光电   7.46\n40  四环生物   9.98\n41  海特高新  10.01\n42  光环新网   7.97\n43  晶方科技  -2.73\n44  铜峰电子  10.04\n45  华力创通  10.00\n46  复星医药   9.41\n47  力帆股份  10.14\n48  永太科技   9.65\n49  四维图新   8.76\n```\n\n### 彭博亿万富豪指数\n\n#### 彭博实时亿万富豪指数\n\n接口: index_bloomberg_billionaires\n\n目标地址: https://www.bloomberg.com/billionaires/\n\n描述: 彭博亿万富豪指数, 全球前 500 名; 该接口需要使用代理访问\n\n限量: 单次返回所有数据彭博亿万富豪排名数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称              | 类型  | 描述              |\n|-----------------|-----|-----------------|\n| rank            | str | Rank            |\n| name            | str | Name            |\n| total_net_worth | str | Total net worth |\n| last_change     | str | $ Last change   |\n| YTD_change      | str | $ YTD change    |\n| country         | str | Country         |\n| industry        | str | Industry        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_bloomberg_billionaires_df = ak.index_bloomberg_billionaires()\nprint(index_bloomberg_billionaires_df)\n```\n\n数据示例\n\n```\n    rank                        name  ...             country     industry\n0      1                  Jeff Bezos  ...       United States   Technology\n1      2                  Bill Gates  ...       United States   Technology\n2      3             Mark Zuckerberg  ...       United States   Technology\n3      4             Bernard Arnault  ...              France     Consumer\n4      5               Steve Ballmer  ...       United States   Technology\n..   ...                         ...  ...                 ...          ...\n494  496                 Ira Rennert  ...       United States  Commodities\n495  497  Traudl Engelhorn-Vechiatto  ...         Switzerland  Diversified\n496  498            Sergey Galitskiy  ...  Russian Federation       Retail\n497  499                  Xu Jingren  ...               China  Health Care\n498  500                Shi Yonghong  ...           Singapore     Consumer\n```\n\n#### 历史彭博亿万富豪指数\n\n接口: index_bloomberg_billionaires_hist\n\n目标地址: https://stats.areppim.com/stats/links_billionairexlists.htm\n\n描述: 按照年份查询彭博亿万富豪指数; 该接口需要使用代理访问\n\n限量: 单次返回当年所有数据彭博亿万富豪排名数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                   |\n|------|-----|------------------------------------------------------|\n| year | str | year=\"2021\"; choice of {\"2021\", \"2019\", \"2018\", ...} |\n\n输出参数\n\n| 名称              | 类型  | 描述              |\n|-----------------|-----|-----------------|\n| rank            | str | Rank            |\n| name            | str | Name            |\n| total_net_worth | str | Total net worth |\n| last_change     | str | $ Last change   |\n| YTD_change      | str | $ YTD change    |\n| country         | str | Country         |\n| industry        | str | Industry        |\n| age             | str | Age             |\n\n接口示例\n\n```python\nimport akshare as ak\n\nindex_bloomberg_billionaires_hist_df=ak.index_bloomberg_billionaires_hist(year='2019')\nprint(index_bloomberg_billionaires_hist_df)\n```\n\n数据示例\n\n```\n    rank                        name  ...             country     industry\n0      1                  Jeff Bezos  ...       United States   Technology\n1      2                  Bill Gates  ...       United States   Technology\n2      3             Mark Zuckerberg  ...       United States   Technology\n3      4             Bernard Arnault  ...              France     Consumer\n4      5               Steve Ballmer  ...       United States   Technology\n..   ...                         ...  ...                 ...          ...\n494  496                 Ira Rennert  ...       United States  Commodities\n495  497  Traudl Engelhorn-Vechiatto  ...         Switzerland  Diversified\n496  498            Sergey Galitskiy  ...  Russian Federation       Retail\n497  499                  Xu Jingren  ...               China  Health Care\n498  500                Shi Yonghong  ...           Singapore     Consumer\n```\n"
  },
  {
    "path": "docs/data/qdii/qdii.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) QDII 数据\n\n### T+0 QDII 欧美市场\n\n#### 欧美指数\n\n接口: qdii_e_index_jsl\n\n目标地址: https://www.jisilu.cn/data/qdii/#qdiia\n\n描述: 集思录-T+0 QDII-欧美市场-欧美指数\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| cookie | str | 需要传入用户登录后的 cookie |\n\n输出参数\n\n| 名称      | 类型      | 描述       |\n|---------|---------|----------|\n| 代码      | object  |          |\n| 名称      | object  |          |\n| 现价      | float64 |          |\n| 涨幅      | object  |          |\n| 成交      | float64 | 注意单位: 万元 |\n| 场内份额    | int64   | 注意单位: 万份 |\n| 场内新增    | int64   | 注意单位: 万份 |\n| T-2净值   | float64 |          |\n| 净值日期    | object  |          |\n| T-1估值   | float64 |          |\n| 估值日期    | object  |          |\n| T-1溢价率  | object  |          |\n| 相关标的    | object  |          |\n| T-1指数涨幅 | object  |          |\n| 申购费     | object  |          |\n| 赎回费     | object  |          |\n| 托管费     | float64 |          |\n| 基金公司    | object  |          |\n\n接口示例\n\n```python\nimport akshare as ak\n\nqdii_e_index_jsl_df = ak.qdii_e_index_jsl()\nprint(qdii_e_index_jsl_df)\n```\n\n数据示例\n\n```\n     代码            名称     现价      涨幅  ...   申购费   赎回费 托管费 基金公司\n0   513220       中概互联ETF  1.235   9.97%  ...      -      -  0.65   招商基金\n1   513360         教育ETF  0.537  10.04%  ...  0.50%  0.50%  0.65   博时基金\n2   159605       中概互联ETF  1.020   7.94%  ...      -      -  0.60   广发基金\n3   159607      中概互联网ETF  1.009   7.80%  ...  0.00%  0.00%  0.60   嘉实基金\n4   513050      中概互联网ETF  1.306   7.22%  ...  0.50%  0.50%  0.85    易方达\n5   164906      中概互联网LOF  1.180   8.76%  ...  1.20%  1.50%  1.45  交银施罗德\n6   159822        新经济ETF  0.682   7.06%  ...      -      -  0.35   银华基金\n7   159509       纳指科技ETF  1.454  -1.69%  ...      -      -  1.05   景顺长城\n8   161128     标普信息科技LOF  4.609  -1.77%  ...  1.20%  1.50%  1.05    易方达\n9   159518       标普油气ETF  0.910   2.59%  ...  0.50%   0.5%  0.60   嘉实基金\n10  513300       纳斯达克ETF  1.770  -1.17%  ...  0.50%  0.50%  0.80   华夏基金\n11  513350       标普油气ETF  0.947   2.71%  ...   0.5%   0.5%  0.60   富国基金\n12  513500      标普500ETF  1.908  -0.57%  ...  0.50%  0.50%  0.85   博时基金\n13  159502     标普生物科技ETF  1.036   0.88%  ...  0.50%   0.5%  0.60   嘉实基金\n14  513290     纳指生物科技ETF  1.217   1.25%  ...      -      -  0.65    汇添富\n15  159655         标普ETF  1.461  -0.14%  ...  0.50%  0.50%  0.75   华夏基金\n16  159612      标普500ETF  1.497  -0.86%  ...  0.50%   0.5%  0.75   国泰基金\n17  513730      东南亚科技ETF  1.238   0.65%  ...      -      -  0.50   华泰柏瑞\n18  159529       标普消费ETF  1.151   1.41%  ...      -      -  0.70   景顺长城\n19  161126     标普医疗保健LOF  1.955   0.26%  ...  1.20%  1.50%  1.05    易方达\n20  513850       美国50ETF  1.266   0.00%  ...      -      -  0.60    易方达\n21  513650    标普500ETF基金  1.447   0.35%  ...      -      -  0.75   南方基金\n22  159632       纳斯达克ETF  1.607   0.25%  ...      -      -  0.80   华安基金\n23  159941         纳指ETF  1.064  -0.47%  ...      -      -  1.05   广发基金\n24  159659    纳斯达克100ETF  1.505  -0.13%  ...      -      -  0.65   招商基金\n25  159696      纳指ETF易方达  1.300  -0.38%  ...      -      -  0.60    易方达\n26  513030         德国ETF  1.449   1.54%  ...      -      -  1.00   华安基金\n27  513100         纳指ETF  1.409  -0.35%  ...  0.50%  0.50%  0.80   国泰基金\n28  513400        道琼斯ETF  1.060   1.05%  ...      -      -  0.65   鹏华基金\n29  159561         德国ETF  1.059   1.05%  ...      -      -  0.60   嘉实基金\n30  513080    法国CAC40ETF  1.594   1.40%  ...      -      -  0.65   华安基金\n31  513390      纳指100ETF  1.568  -0.32%  ...      -      -  0.65   博时基金\n32  159501     纳斯达克指数ETF  1.315  -0.38%  ...  0.50%   0.5%  0.60   嘉实基金\n33  159577       美国50ETF  1.135  -0.26%  ...      -      -  0.65    汇添富\n34  513110    纳斯达克100ETF  1.615  -0.19%  ...  0.50%  0.50%  1.00   华泰柏瑞\n35  159660      纳指100ETF  1.529  -0.39%  ...      -      -  0.65    汇添富\n36  513870       纳指ETF富国  1.329   0.00%  ...      -      -  0.60   富国基金\n37  159513  纳斯达克100指数ETF  1.182  -0.08%  ...      -      -  1.05   大成基金\n38  161127     标普生物科技LOF  1.399   0.21%  ...  1.20%  1.50%  1.05    易方达\n39  501300        美元债LOF  0.936  -0.32%  ...  0.80%  1.50%  0.80    海富通\n40  161125      标普500LOF  2.449   0.00%  ...  1.20%  1.50%  1.05    易方达\n41  162415       美国消费LOF  2.553   0.20%  ...  1.20%  1.50%  1.25   华宝基金\n42  161130    纳斯达克100LOF  3.159  -0.63%  ...  1.20%  1.50%  0.60    易方达\n43  160140   美国REIT精选LOF  1.307   0.08%  ...  1.20%  1.50%  1.05   南方基金\n44  501312       海外科技LOF  1.368   0.74%  ...  1.20%  1.50%  1.20   华宝基金\n45  164824       印度基金LOF  1.596  -1.54%  ...  1.20%  1.50%  1.80   工银瑞信\n46  501225       全球芯片LOF  1.353   3.28%  ...  1.50%  1.50%  1.45   景顺长城\n47  160644      港美互联网LOF  1.265   1.04%  ...  1.50%  1.50%  1.80   鹏华基金\n48  159329         沙特ETF  1.008  -0.88%  ...      -      -  0.60   南方基金\n49  159687       亚太精选ETF  1.285  -0.16%  ...      -      -  0.25   南方基金\n50  520830         沙特ETF  1.002  -0.40%  ...      -      -  0.60   华泰柏瑞\n[51 rows x 18 columns]\n```\n\n#### 欧美商品\n\n接口: qdii_e_comm_jsl\n\n目标地址: https://www.jisilu.cn/data/qdii/#qdiia\n\n描述: 集思录-T+0 QDII-欧美市场-欧美商品\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| cookie | str | 需要传入用户登录后的 cookie |\n\n输出参数\n\n| 名称      | 类型      | 描述       |\n|---------|---------|----------|\n| 代码      | object  |          |\n| 名称      | object  |          |\n| 现价      | float64 |          |\n| 涨幅      | object  |          |\n| 成交      | float64 | 注意单位: 万元 |\n| 场内份额    | int64   | 注意单位: 万份 |\n| 场内新增    | int64   | 注意单位: 万份 |\n| T-2净值   | float64 |          |\n| 净值日期    | object  |          |\n| T-1估值   | float64 |          |\n| 估值日期    | object  |          |\n| T-1溢价率  | object  |          |\n| 相关标的    | object  |          |\n| T-1指数涨幅 | object  |          |\n| 申购费     | object  |          |\n| 赎回费     | object  |          |\n| 托管费     | float64 |          |\n| 基金公司    | object  |          |\n\n接口示例\n\n```python\nimport akshare as ak\n\nqdii_e_comm_jsl_df = ak.qdii_e_comm_jsl()\nprint(qdii_e_comm_jsl_df)\n```\n\n数据示例\n\n```\n    代码         名称     现价      涨幅  ...    申购费  赎回费  托管费 基金公司\n0   161129   原油LOF易方达  1.341   2.60%  ...  1.20%  1.50%  1.25   易方达\n1   161116    黄金主题LOF  1.082  -0.46%  ...      0  1.50%  1.40   易方达\n2   501018    南方原油LOF  1.194   2.58%  ...  1.20%  1.50%  1.28  南方基金\n3   160723    嘉实原油LOF  1.387   2.06%  ...  1.20%  1.50%  1.28  嘉实基金\n4   161815     抗通胀LOF  0.753   0.40%  ...  1.60%  1.50%  2.15  银华基金\n5   164701      黄金LOF  1.111  -0.45%  ...  0.80%  1.50%  1.26   汇添富\n6   160216    国泰商品LOF  0.513   0.20%  ...  1.50%  1.50%  1.85  国泰基金\n7   160416    石油基金LOF  1.615   0.56%  ...  0.00%  1.50%  1.28  华安基金\n8   163208  全球油气能源LOF  0.983   2.93%  ...  1.50%  1.50%  1.85  诺安基金\n9   165513  中信保诚商品LOF  0.704  -0.14%  ...  1.60%  1.50%  2.05  信诚基金\n10  162719      石油LOF  2.222   2.44%  ...  1.20%  1.50%  1.30  广发基金\n11  160719    嘉实黄金LOF  1.285  -0.16%  ...  0.80%  1.50%  1.26  嘉实基金\n12  162411    华宝油气LOF  0.719   3.01%  ...  1.50%  1.50%  1.28  华宝基金\n[13 rows x 18 columns]\n```\n\n### T+0 QDII 亚洲市场\n\n#### 亚洲指数\n\n接口: qdii_a_index_jsl\n\n目标地址: https://www.jisilu.cn/data/qdii/#qdiia\n\n描述: 集思录-T+0 QDII-亚洲市场-亚洲指数\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| cookie | str | 需要传入用户登录后的 cookie |\n\n输出参数\n\n| 名称   | 类型      | 描述       |\n|------|---------|----------|\n| 代码   | object  |          |\n| 名称   | object  |          |\n| 现价   | float64 |          |\n| 涨幅   | object  |          |\n| 成交   | float64 | 注意单位: 万元 |\n| 场内份额 | int64   | 注意单位: 万份 |\n| 场内新增 | int64   | 注意单位: 万份 |\n| 净值   | float64 |          |\n| 净值日期 | object  |          |\n| 估值   | float64 |          |\n| 溢价率  | object  |          |\n| 相关标的 | object  |          |\n| 指数涨幅 | object  |          |\n| 申购费  | object  |          |\n| 赎回费  | object  |          |\n| 托管费  | float64 |          |\n| 基金公司 | object  |          |\n\n接口示例\n\n```python\nimport akshare as ak\n\nqdii_a_index_jsl_df = ak.qdii_a_index_jsl()\nprint(qdii_a_index_jsl_df)\n```\n\n数据示例\n\n```\n      代码          名称    现价   涨幅  ...    申购费    赎回费   托管费  基金公司\n0    164705       恒生LOF  1.089  10.00%  ...  1.20%  1.50%  1.05   汇添富\n1    513230     港股消费ETF  0.970   9.98%  ...   0.5%   0.5%  0.60  华夏基金\n2    513990      港股通ETF  1.001  10.00%  ...      -      -  0.25  招商基金\n3    159850     恒生国企ETF  0.791  10.01%  ...  0.50%  0.50%  0.65  华夏基金\n4    159567    港股创新药ETF  1.111  10.00%  ...      -      -  0.60  银华基金\n..      ...         ...    ...     ...  ...    ...    ...   ...   ...\n104  520890  港股通红利低波ETF  1.128   5.32%  ...  0.50%  0.50%  0.60  华泰柏瑞\n105  501307    银河高股息LOF  1.059   5.37%  ...  1.00%  1.50%  0.68  银河基金\n106  501310     价值基金LOF  1.118   4.39%  ...  1.20%  1.50%  0.90  华宝基金\n107  513090     香港证券ETF  1.279   9.97%  ...  0.50%  0.50%  0.20   易方达\n108  513800   日本东证指数ETF  1.387  -0.07%  ...      -      -  0.25  南方基金\n[109 rows x 17 columns]\n```\n"
  },
  {
    "path": "docs/data/qhkc/broker.md",
    "content": "# 席位\n\n## 席位持仓数据\n\n### 接口名称\n\nbroker_positions\n\n### 接口描述\n\n席位持仓数据接口\n\n### 请求参数\n\n| 参数名    | 说明   | 举例         |\n|:-------|:-----|------------|\n| broker | 席位   | 永安期货       |\n| date   | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名        | 类型     | 说明      |\n|:-----------|:-------|---------|\n| code       | string | 合约代号    |\n| long       | int    | 多头持仓    |\n| short      | int    | 空头持仓    |\n| long_chge  | int    | 多头持仓变化量 |\n| short_chge | int    | 空头持仓变化量 |\n| symbol     | string | 品种编码    |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nbroker_positions_df = pro.broker_positions(broker=\"永安期货\", date=\"2018-08-08\")\nprint(broker_positions_df)\n```\n\n### 返回示例\n\n```\n       code   long  long_chge  short  short_chge symbol\n0     a1809   2354       -175      0           0      A\n1     a1901   4247        426   5159         493      A\n2    ag1812   6155        212  13692          99     AG\n3    al1808    455         -5      0           0     AL\n4    al1809   2284       -181      0           0     AL\n5    al1810   2451        158      0           0     AL\n6    al1811    633          0    544         544     AL\n7    al1812    419          8      0           0     AL\n8    ap1810   1311        -38   1506        -205     AP\n9    ap1811      0          0    194         -14     AP\n10   ap1901   4090         58   4735         233     AP\n11   ap1905   4017         65   2386         -17     AP\n12   au1812   2381       -226    837          98     AU\n13    b1809      0      -1153      0           0      B\n14    b1901      0          0    175         175      B\n15   bu1812  18412       -654  24973        -689     BU\n16    c1809   9137        966  11309        -613      C\n17    c1811     23         16      0           0      C\n18    c1901  13987     -12150  47226        5144      C\n19    c1905   1928        429   6739          15      C\n20   cf1809   7983        729   2337         -40     CF\n21   cf1901  10338       -336  35354        -798     CF\n22   cf1905  14971       1429   9244        2901     CF\n23   cs1809   1768       -654   2343         629     CS\n24   cs1901   2169        939   1108         -22     CS\n25   cu1808      0          0      0           0     CU\n26   cu1809   4197       -104   2658         -11     CU\n27   cu1810   2288        436   3520         167     CU\n28   cu1811   1021         33   2057           6     CU\n29   cu1812    391          7      0           0     CU\n..      ...    ...        ...    ...         ...    ...\n82   ru1905    553        -33   2218         149     RU\n83   sf1809   2117        161   4946         269     SF\n84   sf1901   1373        351     74          74     SF\n85   sm1809   2794       -609      0           0     SM\n86   sm1901    958        135    816          91     SM\n87   sn1809    401        -15    152           8     SN\n88   sr1809      0          0  14071       -1029     SR\n89   sr1901  16912      -1215  12602         634     SR\n90   sr1905   3261       -263    920          -2     SR\n91    t1809   3784        606    729        -992      T\n92    t1812    376         -4   3688         855      T\n93   ta1809  23345       2469   9325       -1143     TA\n94   ta1811   3180       -165   3441       -1042     TA\n95   ta1901  57249     -12008  22708        7136     TA\n96   ta1903    373         69    338          34     TA\n97   ta1905    451          5    401        -241     TA\n98   tf1809   1264        375      0           0     TF\n99    v1809   3182       -485  15277       -7299      V\n100   v1901   7957       3085   7496        2581      V\n101  wh1809     20          8    150           0     WH\n102   y1809   2575       -326   7995         520      Y\n103   y1901  25191        838  13977        1369      Y\n104   y1905   2615        132   9344          53      Y\n105  zc1809   5558      -6447   2611         616     ZC\n106  zc1811    690        -81    710        -115     ZC\n107  zc1901   3908      -2077   4385         769     ZC\n108  zn1808    175        -15   1465        -230     ZN\n109  zn1809   3858       -335   3482         353     ZN\n110  zn1810   6913       1081   4272         -79     ZN\n111  zn1811   1463          5   1057          34     ZN\n```\n\n## 席位盈亏数据\n\n### 接口名称\n\nbroker_calendar\n\n### 接口描述\n\n席位盈亏数据接口\n\n### 请求参数\n\n| 参数名        | 说明     | 举例         |\n|:-----------|:-------|------------|\n| broker     | 席位     | 永安期货       |\n| start_date | 查询开始日期 | 2018-07-08 |\n| end_date   | 查询结束日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名        | 类型    | 说明       |\n|:-----------|:------|----------|\n| trans_date | date  | 查询日期     |\n| profit     | float | 席位盈亏，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nbroker_calendar_df = pro.broker_calendar(broker=\"永安期货\", start_date=\"2018-07-08\", end_date=\"2018-08-08\")\nprint(broker_calendar_df)\n```\n\n### 返回示例\n\n```\n       profit  trans_date\n0    28534980  2018-07-09\n1     -793730  2018-07-10\n2   116090590  2018-07-11\n3    71637460  2018-07-12\n4   -67672690  2018-07-13\n5  -101844070  2018-07-16\n6    12677005  2018-07-17\n7    28082910  2018-07-18\n8    13328330  2018-07-19\n9   152125816  2018-07-20\n10   85702590  2018-07-23\n11  111615970  2018-07-24\n12   66728815  2018-07-25\n13  -20638805  2018-07-26\n14  106367725  2018-07-27\n15  170801705  2018-07-30\n16   16650180  2018-07-31\n17  -11149860  2018-08-01\n18    7460090  2018-08-02\n19  153065340  2018-08-03\n20  157935930  2018-08-06\n21   95817915  2018-08-07\n22   34925715  2018-08-08\n```\n\n## 席位每日大资金流动数据\n\n### 接口名称\n\nbroker_flow\n\n### 接口描述\n\n席位每日大资金流动数据接口\n\n### 请求参数\n\n| 参数名    | 说明            | 举例         |\n|:-------|:--------------|------------|\n| broker | 席位            | 永安期货       |\n| date   | 查询日期          | 2018-08-08 |\n| offset | 查询阈值，大于这个值才返回 | 1000000    |\n\n### 返回参数\n\n| 参数名     | 类型     | 说明                     |\n|:--------|:-------|------------------------|\n| variety | string | 品种编码                   |\n| money   | float  | 保证金流动量，正数为流多，负数为流空，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nbroker_flow_df = pro.broker_flow(broker=\"永安期货\", date=\"2018-08-08\", offset=\"1000000\")\nprint(broker_flow_df)\n```\n\n### 返回示例\n\n```\n          money variety\n0  -52131000.00      焦炭\n1  -36507715.20     动力煤\n2  -28648310.40     PTA\n3   28275580.00      十债\n4   26149929.30     螺纹钢\n5   21465962.40      沪镍\n6  -17617080.00     铁矿石\n7   14739000.00      五债\n8  -14430302.50      玉米\n9   13557552.50     PVC\n10  12419352.00      IC\n11  -8928432.00      菜粕\n12   8908188.00      焦煤\n13   8834167.50      豆粕\n14   5643888.00      沪锌\n15   5459755.20      热卷\n16  -4566014.60      甲醇\n17  -4448322.00      IF\n18  -4361850.00      沪金\n19   3838632.00      沪铜\n20  -3736382.00      豆油\n21  -3677985.00      PP\n22  -3081456.00      IH\n23  -2878634.00      白糖\n24  -2866627.75      沪铝\n25  -2269088.00      豆二\n26  -2136599.00     棕榈油\n27  -1830276.00     燃料油\n28  -1723621.90      锰硅\n29   1565850.00      塑料\n30   1551873.50      菜油\n31  -1518107.50      棉花\n32   1409305.80      鸡蛋\n33  -1308532.50      橡胶\n34  -1168420.00      玻璃\n```\n\n## 席位多空比数据\n\n### 接口名称\n\nbroker_bbr\n\n### 接口描述\n\n席位多空比数据接口\n\n### 请求参数\n\n| 参数名    | 说明   | 举例         |\n|:-------|:-----|------------|\n| broker | 席位   | 永安期货       |\n| date   | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名 | 类型    | 说明  |\n|:----|:------|-----|\n| bbr | float | 多空比 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nbroker_bbr_df = pro.broker_bbr(broker=\"永安期货\", date=\"2018-08-08\")\nprint(broker_bbr_df)\n```\n\n### 返回示例\n\n```\n     broker_bbr\nbbr    54.36208\n```\n\n## 席位净持仓保证金变化数据\n\n### 接口名称\n\nbroker_net_money_chge\n\n### 接口描述\n\n席位净持仓保证金变化数据接口\n\n### 请求参数\n\n| 参数名    | 说明   | 举例         |\n|:-------|:-----|------------|\n| broker | 席位   | 永安期货       |\n| date   | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名    | 类型     | 说明                        |\n|:-------|:-------|---------------------------|\n| symbol | string | 品种编码                      |\n| value  | float  | 净持仓保证金变化量，正数为流多，负数为流空，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nbroker_net_money_chge_df = pro.broker_net_money_chge(broker=\"永安期货\", date=\"2018-08-08\")\nprint(broker_net_money_chge_df)\n```\n\n### 返回示例\n\n```\n   symbol        value\n0       J -52131000.00\n1      ZC -36507715.20\n2      TA -28648310.40\n3       I -17617080.00\n4       C -14430302.50\n5      RM  -8928432.00\n6      MA  -4566014.60\n7      IF  -4448322.00\n8      AU  -4361850.00\n9       Y  -3736382.00\n10     PP  -3677985.00\n11     IH  -3081456.00\n12     SR  -2878634.00\n13     AL  -2866627.75\n14      B  -2269088.00\n15      P  -2136599.00\n16     FU  -1830276.00\n17     SM  -1723621.90\n18     CF  -1518107.50\n19     RU  -1308532.50\n20     FG  -1168420.00\n21      A   -438953.50\n22     CS   -356861.00\n23     SN   -236251.40\n24     PM         0.00\n25     WH     79808.00\n26     BU     95480.00\n27     PB    167724.00\n28     AG    374357.70\n29     SF    402589.60\n30     AP    980350.80\n31     JD   1409305.80\n32     OI   1551873.50\n33      L   1565850.00\n34     CU   3838632.00\n35     HC   5459755.20\n36     ZN   5643888.00\n37      M   8834167.50\n38     JM   8908188.00\n39     IC  12419352.00\n40      V  13557552.50\n41     TF  14739000.00\n42     NI  21465962.40\n43     RB  26149929.30\n44      T  28275580.00\n```\n\n## 席位净持仓保证金数据\n\n### 接口名称\n\nbroker_net_money\n\n### 接口描述\n\n席位净持仓保证金数据接口\n\n### 请求参数\n\n| 参数名    | 说明   | 举例         |\n|:-------|:-----|------------|\n| broker | 席位   | 永安期货       |\n| date   | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名    | 类型     | 说明                     |\n|:-------|:-------|------------------------|\n| symbol | string | 品种编码                   |\n| value  | float  | 净持仓保证金，正数为净多，负数为净空，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nbroker_net_money_df = pro.broker_net_money(broker=\"永安期货\", date=\"2018-08-08\")\nprint(broker_net_money_df)\n```\n\n### 返回示例\n\n```\n   symbol      value\n0      RU -126518247\n1      IC  -73082712\n2      CF  -59002530\n3       L  -38443465\n4       C  -37922269\n5      JM  -27913493\n6       P  -25204953\n7      AG  -24969327\n8       V  -21574018\n9      BU  -17898408\n10      I  -17824820\n11     SR  -17713710\n12     FG  -14825526\n13     MA  -14759199\n14      T   -9789992\n15     HC   -6135685\n16     SF   -3881907\n17     RM   -3477467\n18      Y   -2180168\n19     WH   -1296880\n20     FU   -1029732\n21      B    -313600\n22     PM     -17340\n23     CS     581311\n24      A    2531008\n25     SN    2557678\n26     IH    5062392\n27     JD    5589189\n28     AP    8217133\n29     IF    8381628\n30     SM    8913145\n31     ZC    9053171\n32     CU    9817385\n33     ZN   18126276\n34     AU   20786100\n35     PB   24281126\n36     NI   28679642\n37     AL   28819661\n38     TF   49680256\n39     PP   63960902\n40     OI   79174077\n41     TA   98338372\n42      M  158924122\n43      J  199714680\n44     RB  218919026\n```\n\n## 席位总持仓保证金数据\n\n### 接口名称\n\nbroker_total_money\n\n### 接口描述\n\n席位总持仓保证金数据接口\n\n### 请求参数\n\n| 参数名    | 说明   | 举例         |\n|:-------|:-----|------------|\n| broker | 席位   | 永安期货       |\n| date   | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名    | 类型     | 说明         |\n|:-------|:-------|------------|\n| symbol | string | 品种编码       |\n| value  | float  | 总持仓保证金，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nbroker_total_money_df = pro.broker_total_money(broker=\"永安期货\", date=\"2018-08-08\")\nprint(broker_total_money_df)\n```\n\n### 返回示例\n\n```\n   symbol      value\n0       C   84535414\n1       L  100876943\n2      CF  348457275\n3      RU  441062073\n4       V   62613259\n5       P   68744951\n6      FG   29085142\n7      AG   65751126\n8      SR  121266350\n9      BU  118354280\n10     MA  188504328\n11     JM   65540875\n12      I  173409484\n13     RM   30997475\n14     HC  165703202\n15     SF   21051245\n16      Y  180289358\n17     IC  355803249\n18     FU   49778988\n19      T  328004328\n20      B     313600\n21     WH    1695920\n22     PM      17340\n23     IH   33529176\n24     IF  279349824\n25     SN    5680305\n26     CS    8618401\n27     CU  309904039\n28     AP  225718060\n29     TF   49680256\n30      A   21727647\n31     AU   43322325\n32     JD   19585812\n33     ZN  195664900\n34     ZC   66069647\n35     SM   13684950\n36     NI  280050806\n37     PB   36902798\n38     AL   34360301\n39      J  533383080\n40     OI  111939375\n41     PP  163976343\n42     TA  245508829\n43     RB  959491721\n44      M  399846143\n```\n\n## 席位的商品盈亏数据\n\n### 接口名称\n\nbroker_profit\n\n### 接口描述\n\n席位的商品盈亏数据接口\n\n### 请求参数\n\n| 参数名        | 说明     | 举例         |\n|:-----------|:-------|------------|\n| broker     | 席位     | 永安期货       |\n| start_date | 查询开始日期 | 2018-07-08 |\n| end_date   | 查询结束日期 | 2018-07-08 |\n\n### 返回参数\n\n| 参数名          | 类型     | 说明       |\n|:-------------|:-------|----------|\n| symbol       | string | 品种编码     |\n| total_profit | float  | 盈亏数据，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nbroker_profit_df = pro.broker_profit(broker=\"永安期货\", start_date=\"2018-07-08\", end_date=\"2018-08-08\")\nprint(broker_profit_df)\n```\n\n### 返回示例\n\n```\n   symbol  total_profit\n0       V     -48104250\n1      MA     -44697020\n2      ZC     -39435720\n3       L     -30429900\n4      PB     -23105875\n5      RU     -22609450\n6      AP     -15512460\n7      CF     -13747625\n8      AL     -13160850\n9       Y     -12917280\n10     NI      -9893720\n11     AU      -9268650\n12     TF      -9065400\n13      C      -7829490\n14     OI      -7340560\n15      I      -6386050\n16     IF      -5309736\n17      A      -3110200\n18     FU      -2245870\n19     JM      -2199690\n20      P      -2157100\n21     JD       -981440\n22      B       -813930\n23     CS       -416630\n24     PM         19200\n25     WH         33600\n26     SN        297220\n27     FG        773020\n28     RM       1176220\n29     SF       2391770\n30     IH       3532800\n31     ZN       3822275\n32     BU       4279600\n33     SM       4757220\n34     AG       5508285\n35     IC      10934632\n36     CU      23284400\n37     SR      24980560\n38      T      35304400\n39     HC      51397670\n40      M      76153330\n41     PP     109996275\n42     RB     200050400\n43     TA     422540380\n44      J     576955550\n```\n\n## 席位盈利排行\n\n### 接口名称\n\nbroker_in_profit_list\n\n### 接口描述\n\n席位盈利排行数据接口\n\n### 请求参数\n\n| 参数名        | 说明     | 举例         |\n|:-----------|:-------|------------|\n| start_date | 查询开始日期 | 2018-07-08 |\n| end_date   | 查询结束日期 | 2018-07-08 |\n| count      | 返回数据条数 | 10; 默认10条  |\n\n### 返回参数\n\n| 参数名    | 类型     | 说明         |\n|:-------|:-------|------------|\n| broker | string | 席位         |\n| profit | float  | 席位盈利金额，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nbroker_in_profit_list_df = pro.broker_in_profit_list(start_date=\"2018-07-08\", end_date=\"2018-08-08\", count=\"10\")\nprint(broker_in_profit_list_df)\n```\n\n### 返回示例\n\n```\n  broker      profit\n0   永安期货  1227449911\n1   兴证期货   439465699\n2   海通期货   380472107\n3   国泰君安   340562538\n4   东航期货   258435685\n5   申银万国   232668456\n6   方正中期   232440966\n7   华泰期货   207665450\n8   中信期货   187602856\n9   鲁证期货   154923679\n```\n\n## 席位亏损排行\n\n### 接口名称\n\nbroker_in_loss_list\n\n### 接口描述\n\n席位亏损排行数据接口\n\n### 请求参数\n\n| 参数名        | 说明     | 举例         |\n|:-----------|:-------|------------|\n| start_date | 查询开始日期 | 2018-07-08 |\n| end_date   | 查询结束日期 | 2018-07-08 |\n| count      | 返回数据条数 | 10; 默认10条  |\n\n### 返回参数\n\n| 参数名    | 类型     | 说明         |\n|:-------|:-------|------------|\n| broker | string | 席位         |\n| profit | float  | 席位亏损金额，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nbroker_in_loss_list_df = pro.broker_in_loss_list(start_date=\"2018-07-08\", end_date=\"2018-08-08\", count=\"10\")\nprint(broker_in_loss_list_df)\n```\n\n### 返回示例\n\n```\n  broker     profit\n0   银河期货 -419310016\n1   建信期货 -331576221\n2   国贸期货 -287396120\n3   南华期货 -286119224\n4   格林大华 -282453330\n5   光大期货 -278484680\n6   招商期货 -200409531\n7   国富期货 -183709404\n8   中粮期货 -181432280\n9   中辉期货 -165149465\n```\n\n## 所有席位数据\n\n### 接口名称\n\nbroker_all\n\n### 接口描述\n\n所有席位数据接口\n\n### 请求参数\n\n| 参数名         | 说明               | 举例                |\n|:------------|:-----------------|-------------------|\n| offset_days | 过滤阈值，N个交易日内上过龙虎榜 | 默认为365，即一年内上过榜的席位 |\n\n### 返回参数\n\n| 参数名    | 类型     | 说明             |\n|:-------|:-------|----------------|\n| broker | string | 席位             |\n| grade  | string | 盈利评级，最好为A，最差为E |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nbroker_all_df = pro.broker_all(offset_days=\"365\")\nprint(broker_all_df)\n```\n\n### 返回示例\n\n```\n    broker grade\n0     安粮期货     C\n1     渤海期货     B\n2     北京首创     C\n3     倍特期货     C\n4     宝城期货     B\n5     长江期货     D\n6     创元期货     D\n7     长安期货     D\n8     长城期货     D\n9     财达期货     D\n10    东航期货     B\n11    德盛期货     D\n12    道通期货     C\n13    东方期货     C\n14    大地期货     B\n15    东亚期货     B\n16    东海期货     B\n17    大通期货     D\n18    大连良运     D\n19    第一创业     D\n20    东吴期货     D\n21    东方财富     E\n22    大越期货     B\n23    东华期货     D\n24    东证期货     D\n25    东方汇金     D\n26    大有期货     D\n27    东兴期货     D\n28    方正中期     E\n29    福能期货     C\n..     ...   ...\n131   银河期货     B\n132   永安期货     A\n133   英大期货     D\n134   云晨期货     B\n135   一德期货     A\n136  云财富期货     D\n137   浙商期货     C\n138   中天期货     C\n139   中融汇信     D\n140   中信期货     C\n141   中投期货     D\n142   中辉期货     E\n143   中大期货     C\n144   中航期货     D\n145   中银国际     B\n146   中信建投     E\n147   中投天琪     D\n148   中财期货     B\n149   中国国际     D\n150   中粮期货     B\n151   中钢期货     C\n152   招金期货     E\n153    中电投     D\n154  浙江新世纪     D\n155   中州期货     D\n156   中衍期货     C\n157   中原期货     D\n158  中电投先融     C\n159   中金期货     B\n160   招商期货     D\n```\n\n## 建仓过程\n\n### 接口名称\n\nbroker_positions_process\n\n### 接口描述\n\n建仓过程数据接口\n\n### 请求参数\n\n| 参数名        | 说明   | 举例                 |\n|:-----------|:-----|--------------------|\n| broker     | 席位   | 永安期货               |\n| code       | 合约代号 | rb1810             |\n| start_date | 开始日期 | \"2020-02-03\"; 可选参数 |\n| end_date   | 结束日期 | \"2020-06-03\"; 可选参数 |\n\n### 返回参数\n\n| 参数名          | 类型     | 说明                     |\n|:-------------|:-------|------------------------|\n| long         | int    | 多头持仓                   |\n| short        | int    | 空头持仓                   |\n| trans_date   | date   | 日期                     |\n| code         | string | 合约代号                   |\n| profit       | float  | 当日盈亏金额，正数为盈利，负数为亏损，单位元 |\n| net_hold     | int    | 净持仓，多头持仓-空头持仓          |\n| total_profit | float  | 累计盈亏金额，正数为盈利，负数为亏损，单位元 |\n| cost         | float  | 估算盈亏平衡价格               |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nbroker_positions_process_df = pro.broker_positions_process(broker=\"永安期货\", code=\"rb2010\", start_date=\"2020-02-03\", end_date=\"2020-06-03\")\nprint(broker_positions_process_df)\n```\n\n### 返回示例\n\n```\n      long  short  trans_date  ... settle_price  total_profit     cost\n0    42187  17225  2020-02-03  ...         3196     -26297250  3301.35\n1    50394  17694  2020-02-04  ...         3260     -10321570  3291.56\n2    52270  20802  2020-02-05  ...         3292        142430  3291.55\n3    63213  24253  2020-02-06  ...         3312       6436030  3295.48\n4    64025  27434  2020-02-07  ...         3337      16176030  3292.79\n..     ...    ...         ...  ...          ...           ...      ...\n79  101358  80513  2020-05-28  ...         3492     101931690  3003.00\n80   99001  73076  2020-05-29  ...         3533     110478140  3106.85\n81   95185  55351  2020-06-01  ...         3580     122662890  3272.06\n82  133541  62476  2020-06-02  ...         3608     133816410  3419.70\n83  144905  55558  2020-06-03  ...         3640     156557210  3464.78\n```\n\n## 席位对对碰\n\n### 接口名称\n\nbroker_pk\n\n### 接口描述\n\n席位对对碰数据接口\n\n### 请求参数\n\n| 参数名     | 说明   | 举例   |\n|:--------|:-----|------|\n| broker1 | 席位1  | 永安期货 |\n| broker2 | 席位2  | 兴证期货 |\n| symbol  | 品种编码 | 螺纹钢  |\n\n### 返回参数\n\n| 参数名              | 类型  | 说明           |\n|:-----------------|:----|--------------|\n| total_count      | int | 统计数据量        |\n| win_count        | int | 席位1获胜次数      |\n| recent_win_count | int | 席位1最近10次获胜次数 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nbroker_pk_df = pro.broker_pk(broker1=\"永安期货\", broker2=\"兴证期货\", symbol=\"RB\")\nprint(broker_pk_df)\n```\n\n### 返回示例\n\n```\n                  broker_pk\ntotal_count             614\nwin_count               295\nrecent_win_count          4\n```\n"
  },
  {
    "path": "docs/data/qhkc/commodity.md",
    "content": "# 商品\n\n## 合约持仓数据\n\n### 接口名称\n\nvariety_positions\n\n### 接口描述\n\n合约持仓数据接口\n\n### 请求参数\n\n| 参数名    | 说明    | 举例                            |\n|--------|-------|-------------------------------|\n| fields | 多头/空头 | longs: 返回多头数据; shorts: 返回空头数据 |\n| code   | 合约代号  | rb1810                        |\n| date   | 查询日期  | 2018-08-08                    |\n\n### 返回参数\n\n| 参数名        | 类型     | 说明         |\n|:-----------|:-------|:-----------|\n| longs      | array  | 多头龙虎榜      |\n| shorts     | array  | 空头龙虎榜      |\n| broker     | string | 席位         |\n| long       | int    | 该席位多头持仓量   |\n| long_chge  | int    | 该席位多头持仓变化量 |\n| short      | int    | 该席位空头持仓量   |\n| short_chge | int    | 该席位空头持仓变化量 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_positions_df = pro.variety_positions(fields=\"longs\", code=\"rb1810\", date=\"2018-08-08\")\nprint(variety_positions_df)\n```\n\n### 返回示例\n\n```\n   broker   long  long_chge\n0    永安期货  80565       3075\n1    申银万国  65572       2992\n2    华泰期货  49279      -1552\n3    中信期货  46272       4286\n4    海通期货  42596       -286\n5    方正中期  41839      -7504\n6    鲁证期货  41520       -550\n7    银河期货  38892      -2800\n8    一德期货  34618      -1378\n9    国泰君安  25854      -2188\n10   广发期货  21496      -1695\n11   国投安信  21494       2193\n12   大地期货  20705         23\n13   兴证期货  20166       4071\n14   浙商期货  20001       -817\n15   南华期货  19311      -2173\n16   东海期货  18912      -1259\n17   东证期货  15956       -192\n18   瑞达期货  15648      -2091\n19   光大期货  14758       -910\n20   中国国际  12772      12772\n21   国海良时      0     -15721\n```\n\n## 商品持仓数据\n\n### 接口名称\n\nvariety_all_positions\n\n#### 接口描述\n\n商品持仓数据接口\n\n#### 请求参数\n\n| 参数名    | 说明    | 举例                            |\n|--------|-------|-------------------------------|\n| fields | 多头/空头 | longs: 返回多头数据; shorts: 返回空头数据 |\n| symbol | 合约代号  | RB                            |\n| date   | 查询日期  | 2018-08-08                    |\n\n#### 返回参数\n\n| 参数名        | 类型     | 说明         |\n|:-----------|:-------|:-----------|\n| longs      | array  | 多头龙虎榜      |\n| shorts     | array  | 空头龙虎榜      |\n| broker     | string | 席位         |\n| long       | int    | 该席位多头持仓量   |\n| long_chge  | int    | 该席位多头持仓变化量 |\n| short      | int    | 该席位空头持仓量   |\n| short_chge | int    | 该席位空头持仓变化量 |\n| code       | string | 具体合约       |\n\n#### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_all_positions_df = pro.variety_all_positions(fields=\"shorts\", symbol=\"RB\", date=\"2018-08-08\")\nprint(variety_all_positions_df)\n```\n\n#### 返回示例\n\n```\n   broker   long  long_chge    code\n0    东证期货      0        -60  rb1808\n1    永安期货  80565       3075  rb1810\n2    申银万国  65572       2992  rb1810\n3    华泰期货  49279      -1552  rb1810\n4    中信期货  46272       4286  rb1810\n5    海通期货  42596       -286  rb1810\n6    方正中期  41839      -7504  rb1810\n7    鲁证期货  41520       -550  rb1810\n8    银河期货  38892      -2800  rb1810\n9    一德期货  34618      -1378  rb1810\n10   国泰君安  25854      -2188  rb1810\n11   广发期货  21496      -1695  rb1810\n12   国投安信  21494       2193  rb1810\n13   大地期货  20705         23  rb1810\n14   兴证期货  20166       4071  rb1810\n15   浙商期货  20001       -817  rb1810\n16   南华期货  19311      -2173  rb1810\n17   东海期货  18912      -1259  rb1810\n18   东证期货  15956       -192  rb1810\n19   瑞达期货  15648      -2091  rb1810\n20   光大期货  14758       -910  rb1810\n21   中国国际  12772      12772  rb1810\n22   国海良时      0     -15721  rb1810\n23   永安期货  76193       6726  rb1901\n24   国泰君安  57533      10549  rb1901\n25   东海期货  44408       2666  rb1901\n26   华泰期货  43165      11233  rb1901\n27   鲁证期货  33941        711  rb1901\n28   银河期货  32133       2862  rb1901\n29   一德期货  26147       4950  rb1901\n30   方正中期  24644      -2103  rb1901\n31   海通期货  23176       2234  rb1901\n32   新湖期货  22354       -193  rb1901\n33   金瑞期货  21595        229  rb1901\n34   中信期货  20821       -226  rb1901\n35   瑞达期货  20450       -768  rb1901\n36   中国国际  20158        402  rb1901\n37   华鑫期货  15665       5134  rb1901\n38   海证期货  15444       -202  rb1901\n39   中粮期货  13506        913  rb1901\n40   东航期货  13312        600  rb1901\n41   弘业期货  13267       -246  rb1901\n42   申银万国  13233        631  rb1901\n43   光大期货  10128      10128  rb1901\n44   国投安信   8762       8762  rb1901\n```\n\n## 商品净持仓数据\n\n### 接口名称\n\nvariety_net_positions\n\n### 接口描述\n\n商品净持仓数据接口\n\n### 请求参数\n\n| 参数名    | 说明     | 举例         |\n|:-------|:-------|------------|\n| symbol | 查询品种编码 | RB         |\n| broker | 席位     | 永安期货       |\n| date   | 查询日期   | 2018-08-08 |\n\n### 返回参数\n\n| 参数名          | 类型   | 说明    |\n|:-------------|:-----|-------|\n| trans_date   | date | 查询日期  |\n| net_position | int  | 净持仓数据 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_net_positions_df = pro.variety_net_positions(symbol=\"RB\", broker=\"永安期货\", date=\"2018-08-08\")\nprint(variety_net_positions_df)\n```\n\n### 返回示例\n\n```\n             variety_net_positions\ntrans_date              2018-08-08\nnet_position                 58463\n```\n\n## 合约行情数据\n\n### 接口名称\n\nvariety_quotes\n\n### 接口描述\n\n合约行情数据接口\n\n### 请求参数\n\n| 参数名  | 说明     | 举例         |\n|:-----|:-------|------------|\n| code | 具体合约代号 | rb1810     |\n| date | 查询日期   | 2018-08-08 |\n\n### 返回参数\n\n| 参数名     | 类型    | 说明  |\n|:--------|:------|-----|\n| open    | float | 开盘价 |\n| close   | float | 收盘价 |\n| high    | float | 最高价 |\n| low     | float | 最低价 |\n| volume  | int   | 成交量 |\n| openint | int   | 持仓量 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_quotes_df = pro.variety_quotes(code=\"rb1810\", date=\"2018-08-08\")\nprint(variety_quotes_df)\n```\n\n### 返回示例\n\n```\n              variety_quotes\nopen                    4237\nclose                   4236\nhigh                    4278\nlow                     4205\nvolume               2620386\nopenint              2160052\nsettle_price            4240\n```\n\n## 商品沉淀资金数据\n\n### 接口名称\n\nvariety_money\n\n### 接口描述\n\n商品沉淀资金数据接口\n\n### 请求参数\n\n| 参数名    | 说明   | 举例         |\n|:-------|:-----|------------|\n| symbol | 品种编码 | RB         |\n| date   | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名         | 类型    | 说明        |\n|:------------|:------|-----------|\n| trans_date  | date  | 查询日期      |\n| total_value | float | 沉淀资金量，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_money_df = pro.variety_money(symbol=\"RB\", date=\"2018-08-08\")\nprint(variety_money_df)\n```\n\n### 返回示例\n\n```\n            variety_money\ntrans_date     2018-08-08\ntotal_value   7.46824e+09\n```\n\n## 合约多空比数据\n\n### 接口名称\n\nvariety_bbr\n\n### 接口描述\n\n合约多空比数据接口\n\n### 请求参数\n\n| 参数名  | 说明     | 举例         |\n|:-----|:-------|------------|\n| code | 具体合约代号 | rb1810     |\n| date | 查询日期   | 2018-08-08 |\n\n### 返回参数\n\n| 参数名        | 类型    | 说明   |\n|:-----------|:------|------|\n| trans_date | date  | 查询日期 |\n| bbr        | float | 多空比  |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_bbr_df = pro.variety_bbr(code=\"rb1810\", date=\"2018-08-08\")\nprint(variety_bbr_df)\n```\n\n### 返回示例\n\n```\n           variety_bbr\ntrans_date  2018-08-08\nbbr            54.5111\n```\n\n## 合约净持仓保证金变化数据\n\n### 接口名称\n\nvariety_net_money_chge\n\n### 接口描述\n\n合约净持仓保证金变化数据接口\n\n### 请求参数\n\n| 参数名  | 说明     | 举例         |\n|:-----|:-------|------------|\n| code | 具体合约代号 | rb1810     |\n| date | 查询日期   | 2018-08-08 |\n\n### 返回参数\n\n| 参数名    | 类型     | 说明                      |\n|:-------|:-------|-------------------------|\n| broker | string | 席位                      |\n| value  | float  | 沉淀资金变化量，正数为向多，负数为向空，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\n\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_net_money_chge_df = pro.variety_net_money_chge(code=\"rb1810\", date=\"2018-08-08\")\nprint(variety_net_money_chge_df)\n```\n\n### 返回示例\n\n```\n   broker     value\n0    国海良时 -59991336\n1    方正中期 -45593568\n2    国泰君安 -10364256\n3    瑞达期货  -7979256\n4    南华期货  -7742664\n5    东海期货  -6521544\n6    中大期货  -5998752\n7    一德期货  -5258448\n8    光大期货  -3152016\n9    浙商期货  -3117672\n10   华安期货         0\n11   鲁证期货    183168\n12   东证期货   1885104\n13   广发期货   1911816\n14   中辉期货   2110248\n15   徽商期货   2316312\n16   中信建投   2385000\n17   银河期货   5449248\n18   国投安信   7036704\n19   海通期货   9528552\n20   申银万国   9982656\n21   永安期货  15821136\n22   华泰期货  16198920\n23   中信期货  18721296\n24   兴证期货  18748008\n25   中国国际  48737952\n26   大地期货  55812816\n```\n\n## 合约净持仓保证金数据\n\n### 接口名称\n\nvariety_net_money\n\n### 接口描述\n\n合约净持仓保证金数据接口\n\n### 请求参数\n\n| 参数名  | 说明     | 举例         |\n|:-----|:-------|------------|\n| code | 具体合约代号 | rb1810     |\n| date | 查询日期   | 2018-08-08 |\n\n### 返回参数\n\n| 参数名    | 类型     | 说明                       |\n|:-------|:-------|--------------------------|\n| broker | string | 席位                       |\n| value  | float  | 净持仓保证金数据，正数为净多，负数为净空，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_net_money_df = pro.variety_net_money(code=\"rb1810\", date=\"2018-08-08\")\nprint(variety_net_money_df)\n```\n\n### 返回示例\n\n```\n   broker      value\n0    中辉期货  -99601416\n1    中大期货  -90671976\n2    银河期货  -84314520\n3    徽商期货  -72374256\n4    中信建投  -70912728\n5    光大期货  -52279200\n6    国泰君安  -40617504\n7    东海期货  -39449808\n8    南华期货  -32596272\n9    东证期货  -21823704\n10   兴证期货   -7998336\n11   华安期货          0\n12   国海良时          0\n13   国投安信   17881776\n14   广发期货   26360928\n15   中信期货   31108032\n16   方正中期   37144944\n17   中国国际   48737952\n18   海通期货   49447728\n19   瑞达期货   59712768\n20   鲁证期货   72576504\n21   浙商期货   76323816\n22   大地期货   79010280\n23   永安期货   87939720\n24   华泰期货  122886648\n25   一德期货  132102288\n26   申银万国  193455936\n```\n\n## 合约总持仓保证金数据\n\n### 接口名称\n\nvariety_total_money\n\n### 接口描述\n\n合约总持仓保证金数据接口\n\n### 请求参数\n\n| 参数名  | 说明     | 举例         |\n|:-----|:-------|------------|\n| code | 具体合约代号 | rb1810     |\n| date | 查询日期   | 2018-08-08 |\n\n### 返回参数\n\n| 参数名    | 类型     | 说明           |\n|:-------|:-------|--------------|\n| broker | string | 席位           |\n| value  | float  | 总持仓保证金数据，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\n\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_total_money_df = pro.variety_total_money(code=\"rb1810\", date=\"2018-08-08\")\nprint(variety_total_money_df)\n```\n\n### 返回示例\n\n```\n   broker      value\n0    中辉期货   99601416\n1    中大期货   90671976\n2    银河期货  381138264\n3    徽商期货   72374256\n4    中信建投   70912728\n5    光大期货  164912256\n6    国泰君安  237935232\n7    东海期货  183786192\n8    南华期货  179977824\n9    东证期货  143599896\n10   兴证期货  161905248\n11   华安期货          0\n12   国海良时          0\n13   国投安信  146160432\n14   广发期货  137696544\n15   中信期货  322039872\n16   方正中期  282170304\n17   中国国际   48737952\n18   海通期货  275644944\n19   瑞达期货   59712768\n20   鲁证期货  244304136\n21   浙商期货   76323816\n22   大地期货   79010280\n23   永安期货  526932360\n24   华泰期货  253210680\n25   一德期货  132102288\n26   申银万国  306989568\n```\n\n## 商品的席位盈亏数据\n\n### 接口名称\n\nvariety_profit\n\n### 接口描述\n\n商品的席位盈亏数据接口\n\n### 请求参数\n\n| 参数名        | 说明     | 举例         |\n|:-----------|:-------|------------|\n| symbol     | 品种编码   | RB         |\n| start_date | 查询开始日期 | 2018-02-08 |\n| end_date   | 查询结束日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名          | 类型     | 说明       |\n|:-------------|:-------|----------|\n| broker       | string | 席位       |\n| total_profit | float  | 盈亏数据，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\n\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_profit_df = pro.variety_profit(symbol=\"RB\", start_date=\"2018-02-08\", end_date=\"2018-08-08\")\nprint(variety_profit_df)\n```\n\n### 返回示例\n\n```\n   broker  total_profit\n0    中辉期货    -367083530\n1    东证期货    -274196150\n2    招商期货    -252721200\n3    海通期货    -231433760\n4    中信建投    -224441170\n5    广发期货    -224286720\n6    徽商期货    -173556810\n7    光大期货    -153981100\n8    南华期货    -126979400\n9    浙商期货    -124635130\n10   国联期货    -121934700\n11   中信期货    -106715730\n12   道通期货     -95878520\n13   申银万国     -82166760\n14   国泰君安     -68046340\n15    美尔雅     -67452870\n16   国富期货     -53265140\n17   建信期货     -28952470\n18   华创期货     -28168230\n19   东吴期货     -27047350\n20   倍特期货     -26667130\n21   东海期货     -23452290\n22   长江期货     -18914000\n23   前海期货     -18877690\n24   中财期货     -18359420\n25   广金期货     -18279570\n26   首创期货     -16325810\n27   先融期货     -14990740\n28   西南期货     -14951300\n29   弘业期货     -12616830\n..    ...           ...\n58   大有期货      10754880\n59   迈科期货      13973520\n60   东华期货      23343430\n61   东航期货      23730720\n62   上海大陆      23984570\n63   宝城期货      30425320\n64   中粮期货      30954960\n65   华安期货      31170640\n66   国海良时      31988920\n67   金元期货      47093010\n68   宏源期货      49972150\n69   华鑫期货      56233900\n70   大地期货      62694890\n71   一德期货      66660920\n72   国投安信      87703230\n73   五矿经易      98321360\n74   格林大华     110700170\n75   中国国际     112853750\n76   鲁证期货     132389940\n77   中钢期货     174935310\n78   国贸期货     180413050\n79   新湖期货     202053740\n80   华泰期货     238926470\n81   金瑞期货     242494130\n82   信达期货     304877710\n83   方正中期     307737560\n84   兴证期货     331936440\n85   瑞达期货     373100440\n86   永安期货     436014140\n87   银河期货     652020020\n```\n\n## 自研指标数据\n\n### 接口名称\n\nvariety_strategies\n\n### 接口描述\n\n自研指标数据接口\n\n### 请求参数\n\n| 参数名  | 说明   | 举例         |\n|:-----|:-----|------------|\n| code | 合约代号 | rb1810     |\n| date | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名        | 类型    | 说明   |\n|:-----------|:------|------|\n| trans_date | date  | 查询日期 |\n| longhu     | float | 龙虎比  |\n| niuxiong   | float | 牛熊线  |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\n\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_strategies_df = pro.variety_strategies(code=\"rb1810\", date=\"2018-08-08\")\nprint(variety_strategies_df)\n```\n\n### 返回示例\n\n```\n           variety_strategies\ntrans_date         2018-08-08\nlonghu                  7.954\nniuxiong                   10\n```\n\n## 龙虎比排行数据\n\n### 多头排行\n\n#### 接口名称\n\nvariety_longhu_top\n\n#### 接口描述\n\n龙虎比排行数据接口\n\n#### 请求参数\n\n| 参数名  | 说明   | 举例         |\n|:-----|:-----|------------|\n| date | 查询日期 | 2018-08-08 |\n\n#### 返回参数\n\n| 参数名    | 类型     | 说明     |\n|:-------|:-------|--------|\n| symbol | string | 品种编码   |\n| code   | string | 具体合约代号 |\n| value  | float  | 龙虎比    |\n\n#### 示例代码\n\n```python\nfrom akshare import pro_api\n\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_longhu_long_top_df = pro.variety_longhu_top(fields=\"long\", date=\"2018-08-08\")\nprint(variety_longhu_long_top_df)\n```\n\n#### 返回示例\n\n```\n     code symbol      value\n0  cu1905     CU  56.976958\n1  au1812     AU  41.579291\n2  sm1901     SM  10.242171\n3   v1901      V   9.424667\n4  sf1901     SF   9.115990\n5   j1901      J   7.243534\n6  rb1901     RB   6.526060\n7  hc1901     HC   4.098336\n8  cu1811     CU   3.650439\n9  al1810     AL   3.589835\n```\n\n### 空头排行\n\n#### 接口名称\n\nvariety_longhu_top\n\n#### 接口描述\n\n龙虎比排行数据接口\n\n#### 请求参数\n\n| 参数名  | 说明   | 举例         |\n|:-----|:-----|------------|\n| date | 查询日期 | 2018-08-08 |\n\n#### 返回参数\n\n| 参数名    | 类型     | 说明     |\n|:-------|:-------|--------|\n| symbol | string | 品种编码   |\n| code   | string | 具体合约代号 |\n| value  | float  | 龙虎比    |\n\n#### 示例代码\n\n```python\nfrom akshare import pro_api\n\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_longhu_short_top_df = pro.variety_longhu_top(fields=\"short\", date=\"2018-08-08\")\nprint(variety_longhu_short_top_df)\n```\n\n#### 返回示例\n\n```\n     code symbol      value\n0  oi1905     OI -39.089038\n1  ru1905     RU -27.660905\n2   y1905      Y -25.509936\n3  al1812     AL -24.926301\n4   m1905      M -24.878081\n5  cu1901     CU -23.127945\n6   a1901      A -21.994445\n7   y1901      Y -21.953714\n8   c1901      C -21.143036\n9  rm1905     RM -19.026835\n```\n\n## 牛熊线排行数据\n\n### 多头排行\n\n#### 接口名称\n\nvariety_niuxiong_top\n\n#### 接口描述\n\n牛熊线排行数据接口\n\n#### 请求参数\n\n| 参数名  | 说明   | 举例         |\n|:-----|:-----|------------|\n| date | 查询日期 | 2018-08-08 |\n\n#### 返回参数\n\n| 参数名    | 类型     | 说明   |\n|:-------|:-------|------|\n| symbol | string | 品种编码 |\n| code   | string | 合约代号 |\n| value  | float  | 牛熊线  |\n\n#### 示例代码\n\n```python\nfrom akshare import pro_api\n\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_niuxiong_long_top_df = pro.variety_niuxiong_top(fields=\"long\", date=\"2018-08-08\")\nprint(variety_niuxiong_long_top_df)\n```\n\n#### 返回示例\n\n```\n     code symbol  value\n0  au1812     AU     45\n1  rm1901     RM     30\n2  sm1901     SM     28\n3   v1901      V     27\n4   t1812      T     23\n5   j1901      J     23\n6  sm1809     SM     23\n7  ta1903     TA     23\n8  ta1905     TA     21\n9  sf1901     SF     20\n```\n\n### 空头排行\n\n#### 接口名称\n\nvariety_niuxiong_top\n\n#### 接口描述\n\n牛熊线排行数据接口\n\n#### 请求参数\n\n| 参数名  | 说明   | 举例         |\n|:-----|:-----|------------|\n| date | 查询日期 | 2018-08-08 |\n\n#### 返回参数\n\n| 参数名    | 类型     | 说明   |\n|:-------|:-------|------|\n| symbol | string | 品种编码 |\n| code   | string | 合约代号 |\n| value  | float  | 牛熊线  |\n\n#### 示例代码\n\n```python\nfrom akshare import pro_api\n\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_niuxiong_short_top_df = pro.variety_niuxiong_top(fields=\"short\", date=\"2018-08-08\")\nprint(variety_niuxiong_short_top_df)\n```\n\n#### 返回示例\n\n```\n     code symbol  value\n0   a1901      A    -40\n1  cu1810     CU    -37\n2  zn1810     ZN    -32\n3  ru1901     RU    -26\n4  ru1905     RU    -23\n5   y1905      Y    -22\n6  al1811     AL    -21\n7   l1901      L    -20\n8  hc1810     HC    -16\n9   y1901      Y    -14\n```\n\n## 商品相关研报数据\n\n### 接口名称\n\nvariety_reports\n\n### 接口描述\n\n商品相关研报数据接口\n\n### 请求参数\n\n| 参数名        | 说明   | 举例         |\n|:-----------|:-----|------------|\n| csymbolode | 品种编码 | RB         |\n| date       | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名   | 类型       | 说明    |\n|:------|:---------|-------|\n| title | string   | 研报标题  |\n| pub   | string   | 研报发布人 |\n| time  | datetime | 发布时间  |\n| url   | string   | 研报地址  |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\n\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_reports_df = pro.variety_reports(csymbolode=\"RB\", date=\"2018-08-08\")\nprint(variety_reports_df)\n```\n\n### 返回示例\n\n```\n    pub  ...                                                url\n0  中信期货  ...  https://report.qhkch.com/47/黑色建材日报/reportd471f...\n1  格林大华  ...  https://report.qhkch.com/274/工业品/reportd836d83...\n2  格林大华  ...  https://report.qhkch.com/274/深度报告/reportd003e4...\n3  华泰期货  ...  https://report.qhkch.com/127/金属/report11f7a4db...\n4  华泰期货  ...  https://report.qhkch.com/127/黑色建材/reportdd6bdd...\n5  银河期货  ...  https://report.qhkch.com/416/黑色链/reportb05ee81...\n6  兴证期货  ...  https://report.qhkch.com/101/工业品日报/report26db3...\n```\n\n## 商品列表数据\n\n### 接口名称\n\nvariety_all\n\n### 接口描述\n\n商品列表数据接口\n\n### 请求参数\n\n| 参数名        | 说明   | 举例         |\n|:-----------|:-----|------------|\n| csymbolode | 品种编码 | RB         |\n| date       | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名    | 类型     | 说明   |\n|:-------|:-------|------|\n| name   | string | 品种名称 |\n| symbol | string | 品种编码 |\n| market | string | 所在市场 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\n\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_all_df = pro.variety_all()\nprint(variety_all_df)\n```\n\n### 返回示例\n\n```\n   market name symbol\n0     上期所  螺纹钢     RB\n1     大商所  铁矿石      I\n2     大商所   焦煤     JM\n3     大商所   焦炭      J\n4     郑商所   棉纱     CY\n5     上期所   热卷     HC\n6     郑商所   苹果     AP\n7     郑商所   棉花     CF\n8     郑商所   玻璃     FG\n9     郑商所   甲醇     MA\n10    郑商所   菜油     OI\n11    郑商所   菜粕     RM\n12    郑商所   硅铁     SF\n13    郑商所   锰硅     SM\n14    郑商所   白糖     SR\n15    郑商所  PTA     TA\n16    郑商所  动力煤     ZC\n17    上期所   沪铜     CU\n18    上期所   沪铝     AL\n19    上期所   沪锌     ZN\n20    上期所   沪铅     PB\n21    上期所   沪镍     NI\n22    上期所   沪锡     SN\n23    上期所   沪金     AU\n24    上期所   沪银     AG\n25    上期所  燃料油     FU\n26    上期所   沥青     BU\n27    上期所   橡胶     RU\n28    大商所   豆一      A\n29    大商所   豆二      B\n..    ...  ...    ...\n35    大商所  棕榈油      P\n36    大商所   PP     PP\n37    大商所  PVC      V\n38    大商所   豆油      Y\n39    郑商所   强麦     WH\n40    大商所  胶合板     BB\n41    大商所  纤维板     FB\n42    郑商所   稻谷     RI\n43    郑商所  油菜籽     RS\n44    郑商所   粳稻     JR\n45    郑商所  晚籼稻     LR\n46    上期所   线材     WR\n47    上期所   原油     SC\n48    郑商所   普麦     PM\n49    上期所   纸浆     SP\n50    大商所  乙二醇     EG\n51    中金所   IF     IF\n52    中金所   IC     IC\n53    中金所   IH     IH\n54    郑商所   红枣     CJ\n55    郑商所   尿素     UR\n56    上期所   NR     NR\n57    大商所   粳米     RR\n58    上期所  不锈钢     SS\n59    大商所  苯乙烯     EB\n60    郑商所   纯碱     SA\n61    中金所   二债     TS\n62    中金所   五债     TF\n63    中金所   十债      T\n64    大商所  LPG     PG\n```\n\n## 合约索引\n\n### 接口名称\n\nvariety_list\n\n### 接口描述\n\n合约索引数据接口\n\n### 请求参数\n\n| 参数名  | 说明   | 举例         |\n|:-----|:-----|------------|\n| date | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名 | 类型     | 说明 |\n|:----|:-------|----|\n| -   | string | 合约 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_list_df = pro.variety_list(date=\"2018-08-08\")\nprint(variety_list_df)\n```\n\n### 返回示例\n\n```\n          0\n0     a1809\n1     a1811\n2     a1901\n3     a1903\n4     a1905\n..      ...\n495  zn1903\n496  zn1904\n497  zn1905\n498  zn1906\n499  zn1907\n```\n\n## 非期货公司净持仓\n\n### 接口名称\n\nvariety_no_futures\n\n### 接口描述\n\n非期货公司净持仓数据接口\n\n### 请求参数\n\n| 参数名    | 说明    | 举例         |\n|:-------|:------|------------|\n| symbol | 品种编码\t | RB         |\n| date   | 查询日期  | 2018-08-08 |\n\n### 返回参数\n\n| 参数名        | 类型   | 说明         |\n|:-----------|:-----|------------|\n| trans_date | date | 查询日期       |\n| net_value  | int  | 非期货公司净持仓数据 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvariety_no_futures_df = pro.variety_no_futures(symbol=\"RB\", date=\"2018-08-08\")\nprint(variety_no_futures_df)\n```\n\n### 返回示例\n\n```\n           variety_no_futures\ntrans_date         2018-08-08\nnet_value               -1000\n```\n"
  },
  {
    "path": "docs/data/qhkc/fund.md",
    "content": "# 资金\n\n## 每日净流多列表(商品)\n\n### 接口名称\n\ncommodity_flow_long\n\n### 接口描述\n\n每日净流多列表（商品）接口\n\n### 请求参数\n\n| 参数名  | 说明   | 举例         |\n|:-----|:-----|------------|\n| date | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名     | 类型     | 说明       |\n|:--------|:-------|----------|\n| broker  | string | 席位       |\n| money   | float  | 流多资金，单位元 |\n| variety | string | 品种编码     |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\ncommodity_flow_long_df = pro.commodity_flow_long(date=\"2018-08-08\")\nprint(commodity_flow_long_df)\n```\n\n### 返回示例\n\n```\n  broker       money variety\n0   浙商期货  78975156.0       J\n1   华泰期货  63497619.0      RB\n2   大地期货  55812816.0      RB\n3   中国国际  50224588.2      RB\n4   海证期货  41670190.8      RB\n5   新湖期货  39482177.0      CU\n6   国投安信  39439456.2      RB\n7   东海期货  34120575.0      RB\n8   弘业期货  33741000.0       J\n9   中辉期货  33432132.0       J\n```\n\n## 每日净流空列表(商品)\n\n### 接口名称\n\ncommodity_flow_short\n\n### 接口描述\n\n每日净流空列表(商品)接口\n\n### 请求参数\n\n| 参数名  | 说明   | 举例         |\n|:-----|:-----|------------|\n| date | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名     | 类型     | 说明       |\n|:--------|:-------|----------|\n| broker  | string | 席位       |\n| money   | float  | 流空资金，单位元 |\n| variety | string | 品种编码     |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\ncommodity_flow_short_df = pro.commodity_flow_short(date=\"2018-08-08\")\nprint(commodity_flow_short_df)\n```\n\n### 返回示例\n\n```\n  broker       money variety\n0   方正中期 -98550360.0      RB\n1   国海良时 -59991336.0      RB\n2   永安期货 -52131000.0       J\n3   南华期货 -47408484.6      RB\n4   迈科期货 -42165963.0      CU\n5   永安期货 -36507715.2      ZC\n6   光大期货 -35340900.0       J\n7   申银万国 -32120996.0       I\n8   申银万国 -31075680.0       J\n9   国海良时 -30726828.0       I\n```\n\n## 每日净流多列表(指数)\n\n### 接口名称\n\nstock_flow_long\n\n### 接口描述\n\n每日净流多列表(指数)接口\n\n### 请求参数\n\n| 参数名  | 说明   | 举例         |\n|:-----|:-----|------------|\n| date | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名     | 类型     | 说明       |\n|:--------|:-------|----------|\n| broker  | string | 席位       |\n| money   | float  | 流多资金，单位元 |\n| variety | string | 品种编码     |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nstock_flow_long_df = pro.stock_flow_long(date=\"2018-08-08\")\nprint(stock_flow_long_df)\n```\n\n### 返回示例\n\n```\n  broker       money variety\n0   浙商期货  43487544.0       T\n1   华信期货  32456851.2      IC\n2   永安期货  28275580.0       T\n3   宏源期货  25465190.4      IC\n4   华泰期货  24695284.0       T\n5   东吴期货  19973982.0      IF\n6   国投安信  16403899.2      IC\n7   东证期货  16318434.0      IF\n8   光大期货  16102408.0       T\n9   国泰君安  15661356.0      IF\n```\n\n## 每日净流空列表(指数)\n\n### 接口名称\n\nstock_flow_short\n\n### 接口描述\n\n每日净流空列表(指数)接口\n\n### 请求参数\n\n| 参数名  | 说明   | 举例         |\n|:-----|:-----|------------|\n| date | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名     | 类型     | 说明       |\n|:--------|:-------|----------|\n| broker  | string | 席位       |\n| money   | float  | 流空资金，单位元 |\n| variety | string | 品种编码     |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nstock_flow_short_df = pro.stock_flow_short(date=\"2018-08-08\")\nprint(stock_flow_short_df)\n```\n\n### 返回示例\n\n```\n  broker       money variety\n0   兴证期货 -58628808.0      IC\n1   银河期货 -25623004.0       T\n2   中信建投 -22801228.8      IC\n3   中国国际 -22069300.0       T\n4   广发期货 -21033230.4      IC\n5   海通期货 -19759036.8      IC\n6   鲁证期货 -19506972.0       T\n7   海通期货 -17856834.0      IF\n8   中金期货 -17410272.0      IF\n9   南华期货 -13345152.0      IF\n```\n\n## 每日商品保证金沉淀变化\n\n### 接口名称\n\nmoney_in_out\n\n### 接口描述\n\n每日商品保证金沉淀变化接口\n\n### 请求参数\n\n| 参数名  | 说明   | 举例         |\n|:-----|:-----|------------|\n| date | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名    | 类型     | 说明           |\n|:-------|:-------|--------------|\n| symbol | string | 品种编码         |\n| chge   | float  | 品种沉淀资金变化，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nmoney_in_out_df = pro.money_in_out(date=\"2018-08-08\")\nprint(money_in_out_df)\n```\n\n### 返回示例\n\n```\n           chge symbol\n0  -275632312.0      J\n1  -243543981.6     ZC\n2   -81290136.0      I\n3   -45598051.2     JM\n4   -31547670.0      P\n5   -30567752.5      L\n6   -30113737.6     BU\n7   -28320467.0     PP\n8   -26664664.0     SR\n9   -22570900.0     CF\n10  -19633982.0     FU\n11  -10199960.0     PB\n12   -6788380.0     FG\n13   -6080775.4     JD\n14   -2069555.6     SN\n15   -1979271.0     RU\n16    -695370.0     CY\n17     -87414.0     RI\n18     -18258.0     JR\n19          0.0     SC\n20          0.0     PM\n21          0.0     WR\n22          0.0     FB\n23          0.0     BB\n24          0.0     RS\n25    2467941.0     AL\n26    3289568.0     WH\n27    5503300.0     LR\n28    8602684.0     OI\n29    9535390.0     CS\n30   15957968.0     ZN\n31   19975040.4     SF\n32   21202165.0     AU\n33   25174906.8     RM\n34   26598818.0      B\n35   31817098.0      Y\n36   33848526.6     MA\n37   34038302.2     SM\n38   43679158.6     AP\n39   52613008.0      A\n40   58577657.6     HC\n41   81632070.0     AG\n42  105799545.0      V\n43  110605243.0      C\n44  184962996.0     RB\n45  192803778.0      M\n46  204487969.0     CU\n47  220199220.0     TA\n48  293341736.0     NI\n```\n"
  },
  {
    "path": "docs/data/qhkc/fundamental.md",
    "content": "# 基本面\n\n## 基差数据\n\n### 接口名称\n\nbasis\n\n### 接口描述\n\n基差数据接口\n\n### 请求参数\n\n|参数名|说明|举例|\n|:-----  |:-----|-----                           |\n|variety |品种编码   |RB|\n|date |查询日期   |2018-08-08|\n\n### 返回参数\n\n|参数名|类型|说明|\n|:-----  |:-----|-----                           |\n|trans_date |date   |查询日期  |\n|spot |float   |现货价格  |\n|basis |float   |基差，基差 = 现货价格 - 期货价格  |\n|basis_rate |float   |基差率，基差率 = (现货价格 - 期货价格) / 现货价格 x 100%  |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nbasis_df = pro.basis(variety=\"RB\", date=\"2018-08-08\")\nprint(basis_df)\n```\n\n### 返回示例\n\n```\n                 basis\ntrans_date  2018-08-08\nspot              4429\nbasis              193\nbasis_rate     4.35764\n```\n\n## 期限结构\n\n### 接口名称\n\nterm_structure\n\n### 接口描述\n\n期限结构接口\n\n### 请求参数\n\n|参数名|说明|举例|\n|:-----  |:-----|-----                           |\n|variety |品种编码   |RB|\n|date |查询日期   |2018-08-08|\n\n### 返回参数\n\n|参数名|类型|说明|\n|:-----  |:-----|-----                           |\n|code |string   |合约代号  |\n|close |float   |收盘价  |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nterm_structure_df = pro.term_structure(variety=\"RB\", date=\"2018-08-08\")\nprint(term_structure_df)\n```\n\n### 返回示例\n\n```\n    close    code\n0    4200  rb1808\n1    4322  rb1809\n2    4236  rb1810\n3    4191  rb1811\n4    4139  rb1812\n5    4094  rb1901\n6    4017  rb1902\n7    3987  rb1903\n8    3977  rb1904\n9    3918  rb1905\n10   3889  rb1906\n11   3881  rb1907\n```\n\n## 库存数据\n\n### 参数类型一\n\n#### 接口名称\n\ninventory\n\n#### 接口描述\n\n库存数据接口-参数类型一\n\n#### 请求参数\n\n| 参数名     | 说明   | 举例         |\n|:--------|:-----|------------|\n| variety | 品种编码 | RB         |\n| date    | 查询日期 | 2018-08-08 |\n\n#### 返回参数\n\n| 参数名        | 类型    | 说明    |\n|:-----------|:------|-------|\n| trans_date | date  | 查询日期  |\n| vol        | float | 库存数据量 |\n\n#### 示例代码\n\n```python\nfrom akshare import pro_api\n\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\ninventory_df = pro.inventory(variety=\"RB\", date=\"2018-08-08\")\nprint(inventory_df)\n```\n\n#### 返回示例\n\n```\n             inventory\ntrans_date  2018-08-08\nvol             605.76\n```\n\n### 参数类型二\n\n#### 接口名称\n\ninventory\n\n#### 接口描述\n\n库存数据接口-参数类型二\n\n#### 请求参数\n\n| 参数名         | 说明    | 举例   |\n|:------------|:------|------|\n| variety     | 品种编码  | RB   |\n| year        | 查询年份  | 2019 |\n| week_number | 该年第几周 | 10   |\n\n#### 返回参数\n\n| 参数名        | 类型    | 说明    |\n|:-----------|:------|-------|\n| trans_date | date  | 查询日期  |\n| vol        | float | 库存数据量 |\n\n#### 示例代码\n\n```python\nfrom akshare import pro_api\n\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\ninventory_df = pro.inventory(variety=\"RB\", year=\"2019\", week_number=\"10\")\nprint(inventory_df)\n```\n\n#### 返回示例\n\n```\n             inventory\ntrans_date  2019-03-07\nvol            1326.64\n```\n\n## 利润数据\n\n### 接口名称\n\nprofit\n\n### 接口描述\n\n利润数据接口\n\n### 请求参数\n\n|参数名|说明|举例|\n|:-----  |:-----|-----                           |\n|variety |品种编码   |RB|\n|date |查询日期   |2018-12-08|\n\n### 返回参数\n\n|参数名|类型|说明|\n|:-----  |:-----|-----                           |\n|trans_date |date   |查询日期  |\n|profit |float   |利润，折盘面价格  |\n|profit_rate |float   |利润率  |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nprofit_df = pro.profit(variety=\"RB\", date=\"2019-12-12\")\nprint(profit_df)\n```\n\n### 返回示例\n\n```\n                 profit\ntrans_date   2019-12-12\nprofit              559\nprofit_rate       16.58\n```\n\n## 现货贸易商报价\n\n### 接口名称\n\ntrader_prices\n\n### 接口描述\n\n现货贸易商报价接口\n\n### 请求参数\n\n|参数名|说明|举例|\n|:-----  |:-----|-----                           |\n|variety |品种编码   |RB|\n|date |查询日期   |2018-08-08|\n\n### 返回参数\n\n|参数名|类型|说明|\n|:-----  |:-----|-----                           |\n|name |string   |品种名称  |\n|price |float   |贸易商报价  |\n|band |string   |品牌  |\n|model |string   |型号、规格  |\n|unit |string   |单位  |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\ntrader_prices_df = pro.trader_prices(variety=\"RB\", date=\"2020-03-30\")\nprint(trader_prices_df)\n```\n\n### 返回示例\n\n```\n  band                      model name  price unit\n0   永钢  品种:Ⅲ级螺纹钢;牌号:HRB400;规格:Φ16  螺纹钢   3500  元/吨\n1   永钢  品种:Ⅲ级螺纹钢;牌号:HRB400;规格:Φ16  螺纹钢   3440  元/吨\n2   永钢  品种:Ⅲ级螺纹钢;牌号:HRB400;规格:Φ16  螺纹钢   3440  元/吨\n3   中新  品种:Ⅲ级螺纹钢;牌号:HRB400;规格:Φ16  螺纹钢   3320  元/吨\n4   镔鑫  品种:Ⅲ级螺纹钢;牌号:HRB400;规格:Φ16  螺纹钢   3380  元/吨\n5   永钢  品种:Ⅲ级螺纹钢;牌号:HRB400;规格:Φ16  螺纹钢   3470  元/吨\n6   中天  品种:Ⅲ级螺纹钢;牌号:HRB400;规格:Φ16  螺纹钢   3490  元/吨\n7   长达  品种:Ⅲ级螺纹钢;牌号:HRB400;规格:Φ16  螺纹钢   3400  元/吨\n8   兴鑫  品种:Ⅲ级螺纹钢;牌号:HRB400;规格:Φ16  螺纹钢   3380  元/吨\n```\n\n## 跨期套利数据\n\n### 接口名称\n\nintertemporal_arbitrage\n\n### 接口描述\n\n跨期套利数据接口\n\n### 请求参数\n\n|参数名|说明|举例|\n|:-----  |:-----|-----                           |\n|variety |品种编码   |RB|\n|code1 |合约月份1   |01|\n|code2 |合约月份2   |05|\n|date |查询日期   |2018-08-08|\n\n### 返回参数\n\n|参数名|类型|说明|\n|:-----  |:-----|-----                           |\n|trans_date |date   |查询日期  |\n|code1 |string   |合约1  |\n|code2 |string   |合约2  |\n|close1 |float   |合约1价格  |\n|close2 |float   |合约2价格  |\n|spread |float   |价差，合约1价格 - 合约2价格  |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nintertemporal_arbitrage_df = pro.intertemporal_arbitrage(variety=\"RB\", code1=\"01\", code2=\"05\", date=\"2018-08-08\")\nprint(intertemporal_arbitrage_df)\n```\n\n### 返回示例\n\n```\n           intertemporal_arbitrage\ntrans_date              2018-08-08\ncode1                       rb1901\ncode2                       rb1905\nclose1                        4109\nclose2                        3930\nspread                         179\n```\n\n## 自由价差数据\n\n### 接口名称\n\nfree_spread\n\n### 接口描述\n\n自由价差数据接口\n\n### 请求参数\n\n|参数名|说明|举例|\n|:-----  |:-----|-----                           |\n|variety1 |品种编码1   |RB|\n|code1 |合约月份1   |01|\n|variety2 |品种编码2   |HC|\n|code2 |合约月份2   |01|\n|date |查询日期   |2018-08-08|\n\n### 返回参数\n\n|参数名|类型|说明|\n|:-----  |:-----|-----                           |\n|trans_date |string   |查询日期  |\n|code1 |string   |合约代号1  |\n|code2 |string   |合约代号2  |\n|code1_close |float   |合约1价格  |\n|code2_close |float   |合约2价格  |\n|spread |float   |价差，合约1价格 - 合约2价格  |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nfree_spread_df = pro.free_spread(variety1=\"RB\", code1=\"01\", variety2=\"HC\", code2=\"01\", date=\"2018-08-08\")\nprint(free_spread_df)\n```\n\n### 返回示例\n\n```\n            free_spread\ntrans_date   2018-08-08\ncode1            rb1901\ncode2            hc1901\ncode1_close        4094\ncode2_close        4100\nspread               -6\n```\n\n## 自由价比数据\n\n### 接口名称\n\nfree_ratio\n\n### 接口描述\n\n自由价比数据接口\n\n### 请求参数\n\n|参数名|说明|举例|\n|:-----  |:-----|-----                           |\n|variety1 |品种编码1   |RB|\n|code1 |合约月份1   |01|\n|variety2 |品种编码2   |HC|\n|code2 |合约月份2   |01|\n|date |查询日期   |2018-08-08|\n\n### 返回参数\n\n|参数名|类型|说明|\n|:-----  |:-----|-----                           |\n|trans_date |string   |查询日期  |\n|code1 |string   |合约代号1  |\n|code2 |string   |合约代号2  |\n|code1_close |float   |合约1价格  |\n|code2_close |float   |合约2价格  |\n|ratio |float   |价比，合约1价格 / 合约2价格  |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nfree_ratio_df = pro.free_ratio(variety1=\"RB\", code1=\"01\", variety2=\"HC\", code2=\"01\", date=\"2018-08-08\")\nprint(free_ratio_df)\n```\n\n### 返回示例\n\n```\n             free_ratio\ntrans_date   2018-08-08\ncode1            rb1901\ncode2            hc1901\ncode1_close        4094\ncode2_close        4100\nratio          0.998537\n```\n\n## 仓单数据\n\n### 接口名称\n\nwarehouse_receipt\n\n### 接口描述\n\n仓单数据接口\n\n### 请求参数\n\n|参数名|说明|举例|\n|:-----  |:-----|-----                           |\n|variety |品种编码   |RB|\n|date |查询日期   |2018-08-08|\n\n### 返回参数\n\n|参数名|类型|说明|\n|:-----  |:-----|-----                           |\n|trans_date |date   |查询日期  |\n|total_vol |float   |仓单数据  |\n|total_chge |float   |仓单变化量  |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nwarehouse_receipt_df = pro.warehouse_receipt(variety=\"RB\", date=\"2018-08-08\")\nprint(warehouse_receipt_df)\n```\n\n### 返回示例\n\n```\n           warehouse_receipt\ntrans_date        2018-08-08\ntotal_vol               3856\ntotal_chge                 0\n```\n\n## 仓单汇总数据\n\n### 接口名称\n\nwarehouse_receipt\n\n### 接口描述\n\n仓单汇总数据接口\n\n### 请求参数\n\n|参数名|说明|举例|\n|:-----  |:-----|-----                           |\n|date |查询日期   |2018-08-08|\n\n### 返回参数\n\n| 参数名        | 类型     | 说明    |\n|:-----------|:-------|-------|\n| symbol     | string | 品种编码  |\n| total_vol  | float  | 仓单数据  |\n| total_chge | float  | 仓单变化量 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\n\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nwarehouse_receipt_sum_df = pro.warehouse_receipt(date=\"2018-08-08\")\nprint(warehouse_receipt_sum_df)\n```\n\n### 返回示例\n\n```\n   symbol  total_chge  total_vol\n0      RB           0       3856\n1       J           0         10\n2      HC           0        310\n3      CF          39       9905\n4      FG           0       1378\n5      OI           0       4323\n6      RM           0        200\n7      SF           0        594\n8      SR         402      37828\n9      TA       -1009      11795\n10     CU       -1658      79843\n11     AL        1446     731544\n12     ZN        -125       6950\n13     PB         -25       7697\n14     NI           0      15215\n15     SN          29       5823\n16     AU           0       1530\n17     AG        1292    1394784\n18     BU           0     128970\n19     RU         720     491780\n20      A           0      32586\n21      C           0      37968\n22     JD          -3          0\n23      L           0        284\n24      M           0       6543\n25     PP           0        765\n26      V           0        180\n27      Y           0      33215\n28     WH           0        414\n```\n\n## 虚实盘比数据\n\n### 接口名称\n\nvirtual_real\n\n### 接口描述\n\n虚实盘比数据接口\n\n### 请求参数\n\n|参数名|说明|举例|\n|:-----  |:-----|-----                           |\n|variety |品种编码   |RB|\n|code |合约月份   |10|\n|date |查询日期   |2018-08-08|\n\n### 返回参数\n\n|参数名|类型|说明|\n|:-----  |:-----|-----                           |\n|trans_date |date   |查询日期  |\n|code |string   |合约代号  |\n|virtual |float   |虚盘量  |\n|real |float   |实盘量  |\n|rate |float   |虚实盘比  |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nvirtual_real_df = pro.virtual_real(variety=\"RB\", code=\"10\", date=\"2018-08-08\")\nprint(virtual_real_df)\n```\n\n### 返回示例\n\n```\n           virtual_real\ntrans_date   2018-08-08\ncode             rb1810\nvirtual         1080026\nreal              385.6\nrate             2800.9\n```\n"
  },
  {
    "path": "docs/data/qhkc/index.rst",
    "content": "AKShare 奇货可查\n=================\n\nAKShare 奇货可查模块主要介绍奇货可查提供的数据接口的详细说明\n\n.. toctree::\n    :maxdepth: 2\n\n    commodity.md\n    broker.md\n    index_data.md\n    fundamental.md\n    tools.md\n    fund.md\n"
  },
  {
    "path": "docs/data/qhkc/index_data.md",
    "content": "# 指数\n\n## 指数信息\n\n### 接口名称\n\nindex_info\n\n### 接口描述\n\n指数信息接口\n\n### 请求参数\n\n| 参数名      | 说明   | 举例                                        |\n|:---------|:-----|-------------------------------------------|\n| index_id | 指数id | index0070c0eb-93ba-2da9-6633-fa70cb90e959 |\n\n### 返回参数\n\n| 参数名           | 类型       | 说明                                   |\n|:--------------|:---------|--------------------------------------|\n| name          | string   | 指数名称                                 |\n| all_brokers   | int      | 是否包含所有席位，0:否，1:是                     |\n| created_time  | datetime | 创建时间                                 |\n| all_varieties | int      | 是否包含所有品种，0:否，1:所有商品，2:所有股指，3:所有商品和股指 |\n| status        | int      | 是否开放，0:不开放，1:开放                      |\n| nickname      | string   | 创建人昵称                                |\n| varieties     | array    | 包含品种的编码， all_varieties为0时返回          |\n| brokers       | array    | 包含席位， all_brokers为0时返回               |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\n\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nindex_info_df = pro.index_info(index_id=\"index0070c0eb-93ba-2da9-6633-fa70cb90e959\")\nprint(index_info_df)\n```\n\n### 返回示例\n\n```\n   name  all_brokers  ... nickname  varieties\n0  奇货黑链            1  ...     奇货可查         RB\n1  奇货黑链            1  ...     奇货可查          I\n2  奇货黑链            1  ...     奇货可查         JM\n3  奇货黑链            1  ...     奇货可查          J\n4  奇货黑链            1  ...     奇货可查         HC\n5  奇货黑链            1  ...     奇货可查         SF\n6  奇货黑链            1  ...     奇货可查         SM\n```\n\n## 指数权重数据\n\n### 接口名称\n\nindex_weights\n\n### 接口描述\n\n指数权重数据接口\n\n### 请求参数\n\n| 参数名      | 说明   | 举例                                        |\n|:---------|:-----|-------------------------------------------|\n| index_id | 指数id | index0070c0eb-93ba-2da9-6633-fa70cb90e959 |\n| date     | 查询日期 | 2018-08-08                                |\n\n### 返回参数\n\n| 参数名     | 类型     | 说明      |\n|:--------|:-------|---------|\n| variety | string | 品种编码    |\n| weight  | float  | 权重值，百分数 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nindex_weights_df = pro.index_weights(index_id=\"index0070c0eb-93ba-2da9-6633-fa70cb90e959\", date=\"2018-08-08\")\nprint(index_weights_df)\n```\n\n### 返回示例\n\n```\n  variety     weight\n0      RB  37.714204\n1       I  18.168484\n2      JM   5.879807\n3       J  26.265556\n4      HC   7.369110\n5      SF   2.431867\n6      SM   2.170973\n```\n\n## 指数行情数据\n\n### 接口名称\n\nindex_quotes\n\n### 接口描述\n\n指数行情数据接口\n\n### 请求参数\n\n| 参数名      | 说明   | 举例                                        |\n|:---------|:-----|-------------------------------------------|\n| index_id | 指数id | index0070c0eb-93ba-2da9-6633-fa70cb90e959 |\n| date     | 查询日期 | 2018-08-08                                |\n\n### 返回参数\n\n| 参数名        | 类型    | 说明    |\n|:-----------|:------|-------|\n| trans_date | date  | 日期    |\n| volume     | int   | 指数成交量 |\n| openint    | int   | 指数持仓量 |\n| price      | float | 指数价格  |\n| bbr        | float | 指数多空比 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nindex_quotes_df = pro.index_quotes(index_id=\"index0070c0eb-93ba-2da9-6633-fa70cb90e959\", date=\"2018-08-08\")\nprint(index_quotes_df)\n```\n\n### 返回示例\n\n```\n           index_quotes\ntrans_date   2018-08-08\nvolume          4119565\nopenint         3584323\nprice           1195.06\nbbr               51.57\n```\n\n## 指数沉淀资金数据\n\n### 接口名称\n\nindex_money\n\n### 接口描述\n\n指数沉淀资金数据接口\n\n### 请求参数\n\n| 参数名      | 说明   | 举例                                        |\n|:---------|:-----|-------------------------------------------|\n| index_id | 指数id | index0070c0eb-93ba-2da9-6633-fa70cb90e959 |\n| date     | 查询日期 | 2018-08-08                                |\n\n### 返回参数\n\n| 参数名         | 类型    | 说明         |\n|:------------|:------|------------|\n| trans_date  | date  | 查询日期       |\n| total_value | float | 指数沉淀资金，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nindex_money_df = pro.index_money(index_id=\"index0070c0eb-93ba-2da9-6633-fa70cb90e959\", date=\"2018-08-08\")\nprint(index_money_df)\n```\n\n### 返回示例\n\n```\n             index_money\ntrans_date    2018-08-08\ntotal_value  1.69873e+10\n```\n\n## 公共指数列表\n\n### 接口名称\n\nindex_official\n\n### 接口描述\n\n公共指数列表接口\n\n### 请求参数\n\n| 参数名 | 说明 | 举例 |\n|:----|:---|----|\n| -   | -  | -  |\n\n### 返回参数\n\n| 参数名  | 类型     | 说明   |\n|:-----|:-------|------|\n| id   | string | 指数id |\n| name | string | 指数名  |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nindex_official_df = pro.index_official()\nprint(index_official_df)\n```\n\n### 返回示例\n\n```\n                                           id   name\n0   index0070c0eb-93ba-2da9-6633-fa70cb90e959   奇货黑链\n1   index0d5e051e-b262-bd7a-0fdc-89e2aab21ebb   奇货商品\n2   index1ad9d461-7c43-9dea-9e8f-de20878b3ce1   奇货谷物\n3   index35cc6f8a-dbca-0614-d48a-1d6258fad6b9  奇货贵金属\n4   index6c063119-f98c-586e-64f2-7a42b5cd7d51   奇货饲料\n5   index997af7f7-bd77-19cf-6f99-181a6d592f17  奇货软商品\n6   indexa5dc7cfd-560e-86bb-50d7-5b4fb4f29ab5   奇货化工\n7   indexa9a72e02-d36a-b4c4-58df-0bc75ad4e16b   奇货有色\n8   indexd5e4f6e7-373e-334d-07b4-772ba758a9bd   奇货股指\n9   indexe369e025-f33d-e787-c13d-0087e90c7d45  奇货铁合金\n10  indexfa921e91-b136-605a-29fe-998d25355eaa   奇货油脂\n```\n\n## 个人指数列表\n\n### 接口名称\n\nindex_mine\n\n### 接口描述\n\n个人指数列表接口\n\n### 请求参数\n\n| 参数名 | 说明 | 举例 |\n|:----|:---|----|\n| -   | -  | -  |\n\n### 返回参数\n\n| 参数名  | 类型     | 说明   |\n|:-----|:-------|------|\n| id   | string | 指数id |\n| name | string | 指数名  |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nindex_mine_df = pro.index_mine()\nprint(index_mine_df)\n```\n\n### 返回示例\n\n```\n                                           id    name\n0   index027927d6-bba5-c432-9bf6-dfcaa75df2a8    油脂头部\n1   index03cb6802-24a2-3f9b-813e-936f694fb2b2   新纪元反指\n2   index04d11eef-ee50-9fef-e839-a64ad95c44eb     镍尾部\n3   index153ca7e5-326d-2505-012f-c2eed754ef29     硬化工\n4   index195e23d6-02ae-09e3-169c-f2331bc1d2a8    永兴黑色\n5   index2a51db56-0424-75b6-35df-3c62fbcf92c9    螺纹亏损\n6   index31e43117-e5e3-bb6f-24d6-8eff003d43dc    螺纹盈利\n7   index33b671b8-3ac6-d41b-cb4c-554c44cf990f     软化工\n8   index3491c65f-40bf-a739-84e3-5b935634ddcc    永安化工\n9   index3cfbcf57-d3b5-cf0c-b4ba-c5db990f86ea    化工头部\n10  index43cf357a-db28-c55b-03ac-21e2e4cc5aff    黑色头部\n11  index4d44eb91-a7e6-eaf1-ba6e-f7f4e5255adb    油脂尾部\n12  index54b33270-465a-c803-923a-f6a9ac7fa15e    东海道通\n13  index5d9eb2bf-0aee-551b-58f8-5fac7cdda989     能化工\n14  index5f6135ac-2283-4cab-05f0-f33d16444ee0    兴证化工\n15  index6a66773f-d6b8-7138-4638-ff1d577252cf    永兴化工\n16  index72db2cb8-32ba-50e6-c8b5-5d9e7700fb89  香蕉test\n17  index763e0c86-ad90-d9b0-2997-fb298c79bff6   永兴海焦炭\n18  index7f763d50-48d2-3a5c-9e30-0152ec31a84a   永兴瑞螺纹\n19  index842902a2-4da0-0e8a-e060-3467c041dc20    黑色尾部\n20  index91e9a576-ea5e-ffda-d295-35539c74ee60     镍头部\n21  index92a6e980-de2b-e4b3-2c0d-0d217b4f870f   贵金属尾部\n22  indexa36f1dd5-bc02-56dc-7a28-25ad7a3e4e10  永兴海PTA\n23  indexabdbd00f-532a-46af-205f-fa96fa1eb048  兴证海通焦炭\n24  indexac99bb42-2850-55ee-b0cd-91214a671288   动力煤盈利\n25  indexc421b8f9-731a-a23e-9f3d-2832c3d43fc1    永安黑色\n26  indexd10d46e8-ff5d-6199-129f-5e0408626aa5    化工头部\n27  indexd4480270-06d1-f50b-5ec1-797afb236890    化工尾部\n28  indexe0ef3f87-1e2f-fb76-96ec-3da230dc5d18  ma_top\n29  indexef445153-4ed8-485d-a593-5a72fb9fa3e7    混沌黑色\n30  indexf42a9e96-6747-5d56-b757-7b0c37a1b350   贵金属头部\n```\n\n## 指数资金动向\n\n### 接口名称\n\nindex_trend\n\n### 接口描述\n\n指数资金动向接口\n\n### 请求参数\n\n| 参数名      | 说明   | 举例                                        |\n|:---------|:-----|-------------------------------------------|\n| index_id | 指数id | index0070c0eb-93ba-2da9-6633-fa70cb90e959 |\n| date     | 查询日期 | 2018-08-08                                |\n\n### 返回参数\n\n| 参数名     | 类型     | 说明                      |\n|:--------|:-------|-------------------------|\n| broker  | string | 席位                      |\n| variety | string | 品种编码                    |\n| money   | float  | 净持仓资金变化，正数为流多，负数为流空，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nindex_trend_df = pro.index_trend(index_id=\"index0070c0eb-93ba-2da9-6633-fa70cb90e959\", date=\"2018-08-08\")\nprint(index_trend_df)\n```\n\n### 返回示例\n\n```\n    broker       money variety\n0     一德期货  15417629.1      RB\n1     一德期货 -17101588.0       I\n2     一德期货     -1132.8      JM\n3     一德期货   1743156.0       J\n4     一德期货   1982721.6      HC\n5     一德期货    119371.0      SF\n6     一德期货     84793.1      SM\n7     上海中期      4052.0       I\n8     上海中期   -881926.5      SF\n9     上海中期    -63940.8      SM\n10    上海大陆    281848.0       I\n11    上海大陆  -1539199.9      SF\n12    上海大陆   -690040.4      SM\n13    东亚期货    683400.0       I\n14    东兴期货    -44717.4      SF\n15    东兴期货   -944654.9      SM\n16    东吴期货  -1711940.0       I\n17    东吴期货    181650.0      SF\n18    东吴期货   2104718.0      SM\n19    东方汇金    293062.0      SF\n20    东方汇金   -356715.8      SM\n21    东海期货  34120575.0      RB\n22    东海期货   -128124.0       I\n23    东海期货  -5202372.0      JM\n24    东海期货         0.0       J\n25    东海期货   1732760.0      HC\n26    东海期货    406896.0      SF\n27    东航期货   2218860.0      RB\n28    东航期货  12615508.0       I\n29    东航期货  -1016428.8      JM\n..     ...         ...     ...\n306   道通期货    -77712.0       J\n307   道通期货    396009.6      HC\n308   道通期货      2923.9      SM\n309   金元期货    105278.4      JM\n310   金瑞期货    846864.9      RB\n311   金瑞期货   5057712.0       I\n312   金瑞期货    179521.6      HC\n313   金瑞期货   -897637.3      SM\n314   金鹏期货   2785860.0       I\n315   银河期货 -18998891.1      RB\n316   银河期货  21759360.0       I\n317   银河期货   6617714.4      JM\n318   银河期货  14434476.0       J\n319   银河期货  13661480.0      HC\n320   银河期货         0.0      SF\n321   银河期货   -927011.4      SM\n322   锦泰期货   -329640.0       I\n323   长安期货   -357780.0       I\n324   长安期货   -109494.0      SM\n325   集成期货   4157011.2      JM\n326   首创期货   1409441.6      HC\n327   首创期货    -54747.0      SM\n328   鲁证期货   2812517.1      RB\n329   鲁证期货   1219528.0       I\n330   鲁证期货   -826581.6      JM\n331   鲁证期货   4429584.0       J\n332   鲁证期货  -5784385.6      HC\n333   鲁证期货     24332.0      SM\n334   先锋期货    -16208.0       I\n335   先锋期货    -84770.0      SF\n```\n\n## 指数的席位盈亏数据\n\n### 接口名称\n\nindex_profit\n\n### 接口描述\n\n指数的席位盈亏数据接口\n\n### 请求参数\n\n| 参数名        | 说明     | 举例                                        |\n|:-----------|:-------|-------------------------------------------|\n| index_id   | 指数id   | index0070c0eb-93ba-2da9-6633-fa70cb90e959 |\n| start_date | 查询开始日期 | 2018-07-08                                |\n| end_date   | 查询结束日期 | 2018-08-08                                |\n\n### 返回参数\n\n| 参数名    | 类型     | 说明                   |\n|:-------|:-------|----------------------|\n| broker | string | 席位                   |\n| profit | float  | 盈亏金额，正数为盈利，负数为亏损，单位元 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nindex_profit_df = pro.index_profit(index_id=\"index0070c0eb-93ba-2da9-6633-fa70cb90e959\", start_date=\"2018-07-08\", end_date=\"2018-08-08\")\nprint(index_profit_df)\n```\n\n### 返回示例\n\n```\n    broker     profit\n0     中辉期货 -236037050\n1     国富期货 -211233900\n2     招商期货 -189026430\n3     徽商期货 -177303650\n4     中信建投 -162059340\n5     光大期货 -161708310\n6     宏源期货 -152712930\n7     南华期货 -123349780\n8     中大期货  -98211620\n9     西南期货  -81650470\n10    国贸期货  -77964940\n11    东证期货  -55215900\n12    华泰期货  -49744790\n13    国信期货  -40138400\n14    道通期货  -39560450\n15    中信期货  -36253880\n16    倍特期货  -25529630\n17    上海大陆  -22757910\n18    中国国际  -22142170\n19    中财期货  -19836110\n20    广金期货  -18279570\n21    中钢期货  -17560300\n22    创元期货  -17375800\n23     美尔雅  -15690960\n24    东吴期货  -13673950\n25    集成期货  -13355650\n26    混沌天成  -13257740\n27    国联期货  -12468570\n28    天风期货  -12027000\n29    英大期货  -10035590\n..     ...        ...\n85    中金期货   12016800\n86    格林大华   13952290\n87    宝城期货   16466360\n88    华鑫期货   20748590\n89    恒泰期货   21447160\n90    国海良时   22840150\n91    先融期货   25679260\n92    东航期货   46866870\n93    东海期货   50519930\n94    海证期货   51312130\n95    建信期货   67504250\n96    国投安信   68827180\n97    弘业期货   75762520\n98    五矿经易   92943700\n99    一德期货  106023830\n100   中粮期货  107062020\n101   兴证期货  107773260\n102   浙商期货  112590640\n103   新湖期货  113574970\n104   金瑞期货  120685700\n105   银河期货  122931360\n106   瑞达期货  144049340\n107   方正中期  161708710\n108   国泰君安  164995380\n109   大地期货  174718740\n110   信达期货  215495550\n111   鲁证期货  227794850\n112   申银万国  251123390\n113   海通期货  277422320\n114   永安期货  826966870\n```\n"
  },
  {
    "path": "docs/data/qhkc/tools.md",
    "content": "# 工具\n\n## 龙虎牛熊多头合约池\n\n### 接口名称\n\nlong_pool\n\n### 接口描述\n\n龙虎牛熊多头合约池接口\n\n### 请求参数\n\n| 参数名  | 说明   | 举例         |\n|:-----|:-----|------------|\n| date | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名    | 类型     | 说明   |\n|:-------|:-------|------|\n| symbol | string | 品种编码 |\n| code   | string | 合约代号 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nlong_pool_df = pro.long_pool(date=\"2018-08-08\")\nprint(long_pool_df)\n```\n\n### 返回示例\n\n```\n      code symbol\n0   rb1810     RB\n1   rb1901     RB\n2    j1809      J\n3    j1901      J\n4   ap1810     AP\n5   ap1901     AP\n6   ap1903     AP\n7   ap1905     AP\n8   cf1809     CF\n9   fg1809     FG\n10  ma1809     MA\n11  rm1901     RM\n12  sf1901     SF\n13  sm1901     SM\n14  sr1809     SR\n15  sr1905     SR\n16  ta1808     TA\n17  ta1903     TA\n18  cu1811     CU\n19  cu1905     CU\n20  al1808     AL\n21  zn1808     ZN\n22  ni1809     NI\n23  au1812     AU\n24   b1901      B\n25   c1905      C\n26  cs1901     CS\n27  jd1809     JD\n28  jd1901     JD\n29   m1809      M\n30  pp1809     PP\n31  pp1901     PP\n32   v1901      V\n```\n\n## 龙虎牛熊空头合约池\n\n### 接口名称\n\nshort_pool\n\n### 接口描述\n\n龙虎牛熊空头合约池\n\n### 请求参数\n\n| 参数名  | 说明   | 举例         |\n|:-----|:-----|------------|\n| date | 查询日期 | 2018-08-08 |\n\n### 返回参数\n\n| 参数名    | 类型     | 说明   |\n|:-------|:-------|------|\n| symbol | string | 品种编码 |\n| code   | string | 合约代号 |\n\n### 示例代码\n\n```python\nfrom akshare import pro_api\npro = pro_api(token=\"在此处输入您的 token, 可以联系奇货可查网站管理员获取\")\nshort_pool_df = pro.short_pool(date=\"2018-08-08\")\nprint(short_pool_df)\n```\n\n### 返回示例\n\n```\n      code symbol\n0    i1901      I\n1   hc1810     HC\n2   ap1811     AP\n3   cf1901     CF\n4   oi1809     OI\n5   oi1905     OI\n6   rm1905     RM\n7   sf1809     SF\n8   ta1811     TA\n9   zc1809     ZC\n10  zc1811     ZC\n11  zc1901     ZC\n12  cu1809     CU\n13  cu1810     CU\n14  cu1901     CU\n15  al1811     AL\n16  al1812     AL\n17  zn1810     ZN\n18  pb1810     PB\n19  sn1809     SN\n20  ag1812     AG\n21  fu1901     FU\n22  ru1809     RU\n23  ru1811     RU\n24  ru1901     RU\n25  ru1905     RU\n26   a1901      A\n27   c1811      C\n28  cs1809     CS\n29   l1809      L\n30   l1901      L\n31   m1811      M\n32   m1901      M\n33   p1809      P\n34   p1905      P\n35   v1809      V\n36   y1809      Y\n37   y1901      Y\n38   y1905      Y\n39  if1808     IF\n40  if1809     IF\n41  ih1808     IH\n```\n"
  },
  {
    "path": "docs/data/spot/spot.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 现货数据\n\n### 99 现货走势\n\n接口: spot_price_qh\n\n目标地址: https://www.99qh.com/data/spotTrend\n\n描述: 99 期货-数据-期现-现货走势\n\n限量: 单次返回指定 symbol 的所有历史数据；由于数据源限制，只能获取个别品种\n\n输入参数\n\n| 名称     | 类型  | 描述                                                |\n|--------|-----|---------------------------------------------------|\n| symbol | str | symbol=\"螺纹钢\"; 可以通过 ak.spot_price_table_qh() 获取品种表 |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| 日期    | object  | -  |\n| 期货收盘价 | float64 | -  |\n| 现货价格  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nspot_price_qh_df = ak.spot_price_qh(symbol='螺纹钢')\nprint(spot_price_qh_df)\n```\n\n数据示例\n\n```\n         日期  期货收盘价  现货价格\n0     2012-10-31   3700  3811\n1     2012-11-01   3776  3811\n2     2012-11-08   3900  3811\n3     2012-11-09   3750  3806\n4     2012-11-14   3810  3761\n...          ...    ...   ...\n2466  2024-05-10   3662  3561\n2467  2024-05-13   3686  3545\n2468  2024-05-14   3630  3552\n2469  2024-05-15   3621  3530\n2470  2024-05-16   3703  3533\n[2471 rows x 3 columns]\n```\n\n### 上海黄金交易所\n\n#### 历史行情数据\n\n接口: spot_hist_sge\n\n目标地址: https://www.sge.com.cn/sjzx/mrhq\n\n描述: 上海黄金交易所-数据资讯-行情走势-历史数据\n\n限量: 单次返回指定 symbol 的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                      |\n|--------|-----|---------------------------------------------------------|\n| symbol | str | symbol=\"Au99.99\"; 可以通过 ak.spot_symbol_table_sge() 获取品种表 |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| date  | object  | -   |\n| open  | float64 | -   |\n| close | float64 | -   |\n| low   | float64 | -   |\n| high  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nspot_hist_sge_df = ak.spot_hist_sge(symbol='Au99.99')\nprint(spot_hist_sge_df)\n```\n\n数据示例\n\n```\n            date    open   close     low    high\n0     2016-12-19  262.45  262.76  262.02  263.50\n1     2016-12-20  262.88  262.06  261.42  263.70\n2     2016-12-21  262.40  260.97  258.60  262.65\n3     2016-12-22  261.18  260.00  259.05  261.18\n4     2016-12-23  258.95  260.07  258.70  260.37\n...          ...     ...     ...     ...     ...\n1775  2024-04-15  567.01  558.68  556.00  576.99\n1776  2024-04-16  559.00  562.50  552.66  569.00\n1777  2024-04-17  562.61  564.46  562.02  569.00\n1778  2024-04-18  566.30  563.37  558.80  568.00\n1779  2024-04-19  562.80  565.55  561.00  573.96\n[1780 rows x 5 columns]\n```\n\n#### 实时行情数据\n\n接口: spot_quotations_sge\n\n目标地址: https://www.sge.com.cn/\n\n描述: 上海黄金交易所-数据资讯-行情走势-实时数据\n\n限量: 单次返回指定 symbol 的所有行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                      |\n|--------|-----|---------------------------------------------------------|\n| symbol | str | symbol=\"Au99.99\"; 可以通过 ak.spot_symbol_table_sge() 获取品种表 |\n\n输出参数\n\n| 名称   | 类型      | 描述 |\n|------|---------|----|\n| 品种   | object  | -  |\n| 时间   | object  | -  |\n| 现价   | float64 | -  |\n| 更新时间 | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nspot_quotations_sge_df = ak.spot_quotations_sge(symbol=\"Au99.99\")\nprint(spot_quotations_sge_df)\n```\n\n数据示例\n\n```\n     品种        时间     现价                  更新时间\n0    Au99.99  00:00:00  755.0  2025年04月14日 22:28:55\n1    Au99.99  00:01:00  755.0  2025年04月14日 22:28:55\n2    Au99.99  00:02:00  755.0  2025年04月14日 22:28:55\n3    Au99.99  00:03:00  755.0  2025年04月14日 22:28:55\n4    Au99.99  00:04:00  755.0  2025年04月14日 22:28:55\n..       ...       ...    ...                   ...\n686  Au99.99  22:24:00  760.0  2025年04月14日 22:28:55\n687  Au99.99  22:25:00  760.0  2025年04月14日 22:28:55\n688  Au99.99  22:26:00  760.0  2025年04月14日 22:28:55\n689  Au99.99  22:27:00  760.0  2025年04月14日 22:28:55\n690  Au99.99  22:28:00  760.0  2025年04月14日 22:28:55\n[691 rows x 4 columns]\n```\n\n#### 上海金基准价\n\n接口: spot_golden_benchmark_sge\n\n目标地址: https://www.sge.com.cn/sjzx/jzj\n\n描述: 上海黄金交易所-数据资讯-上海金基准价-历史数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 交易时间 | object  | -   |\n| 晚盘价  | float64 | -   |\n| 早盘价  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nspot_golden_benchmark_sge_df = ak.spot_golden_benchmark_sge()\nprint(spot_golden_benchmark_sge_df)\n```\n\n数据示例\n\n```\n     交易时间     晚盘价     早盘价\n0     2016-04-18  257.29  256.92\n1     2016-04-19  259.97  261.15\n2     2016-04-20  261.82  260.39\n3     2016-04-21  260.41  261.32\n4     2016-04-24  258.80  258.42\n          ...     ...     ...\n1801  2023-09-10  467.92  468.49\n1802  2023-09-11  468.62  468.20\n1803  2023-09-12  470.00  469.14\n1804  2023-09-13  474.58  474.68\n1805  2023-09-14  470.43  479.08\n[1806 rows x 3 columns]\n```\n\n#### 上海银基准价\n\n接口: spot_silver_benchmark_sge\n\n目标地址: https://www.sge.com.cn/sjzx/shyjzj\n\n描述: 上海黄金交易所-数据资讯-上海银基准价-历史数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 交易时间 | object  | -   |\n| 晚盘价  | float64 | -   |\n| 早盘价  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nspot_silver_benchmark_sge_df = ak.spot_silver_benchmark_sge()\nprint(spot_silver_benchmark_sge_df)\n```\n\n数据示例\n\n```\n      交易时间     晚盘价     早盘价\n0    2019-10-13  4286.0  4284.0\n1    2019-10-14  4286.0  4301.0\n2    2019-10-15  4222.0  4270.0\n3    2019-10-16  4261.0  4244.0\n4    2019-10-17  4271.0  4271.0\n..          ...     ...     ...\n953  2023-09-10  5776.0  5773.0\n954  2023-09-11  5773.0  5798.0\n955  2023-09-12  5783.0  5791.0\n956  2023-09-13  5890.0  5881.0\n957  2023-09-14  5870.0  5928.0\n[958 rows x 3 columns]\n```\n\n### 生猪大数据\n\n#### 各省均价实时排行榜\n\n接口: spot_hog_soozhu\n\n目标地址: https://www.soozhu.com/price/data/center/\n\n描述: 搜猪-生猪大数据-各省均价实时排行榜\n\n限量: 单次返回所有实时数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 省份  | object  | -  |\n| 价格  | float64 | -  |\n| 涨跌幅 | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nspot_hog_soozhu_df = ak.spot_hog_soozhu()\nprint(spot_hog_soozhu_df)\n```\n\n数据示例\n\n```\n     省份  价格   涨跌幅\n0    河北  19.49  0.12\n1    辽宁  19.25  0.28\n2    山东  19.68  0.21\n3   黑龙江  18.79  0.04\n4    河南  19.53  0.41\n5    湖南  20.64  0.72\n6    吉林  19.28  0.26\n7    山西  19.43  0.43\n8    安徽  20.00  0.39\n9    四川  19.20  0.24\n10   江西  21.10  0.65\n11   甘肃  19.00 -0.15\n12   湖北  19.70  0.14\n13   浙江  21.00  0.94\n14   江苏  20.15  0.55\n15   陕西  20.00  0.70\n16   广东  20.80 -0.36\n17   新疆  17.80 -0.28\n18   北京  19.44  0.14\n19   天津  19.34  0.14\n20  内蒙古  18.86  0.04\n21   福建  20.44  0.10\n22   广西  20.33  0.14\n23   海南  20.98  0.14\n24   宁夏  19.20  0.00\n25   重庆  18.76  0.14\n26   云南  18.98  0.07\n27   贵州  19.18 -0.16\n```\n\n#### 今年以来全国出栏均价走势\n\n接口: spot_hog_year_trend_soozhu\n\n目标地址: https://www.soozhu.com/price/data/center/\n\n描述: 搜猪-生猪大数据-今年以来全国出栏均价走势\n\n限量: 单次返回近一年所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 日期  | object  | -  |\n| 价格  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nspot_hog_year_trend_soozhu_df = ak.spot_hog_year_trend_soozhu()\nprint(spot_hog_year_trend_soozhu_df)\n```\n\n数据示例\n\n```\n         日期     价格\n0    2024-01-16  13.81\n1    2024-01-17  14.10\n2    2024-01-18  14.04\n3    2024-01-19  13.79\n4    2024-01-20  13.67\n..          ...    ...\n195  2024-07-29  19.38\n196  2024-07-30  19.48\n197  2024-07-31  19.66\n198  2024-08-01  19.78\n199  2024-08-02  19.85\n[200 rows x 2 columns]\n```\n\n#### 全国瘦肉型肉猪\n\n接口: spot_hog_lean_price_soozhu\n\n目标地址: https://www.soozhu.com/price/data/center/\n\n描述: 搜猪-生猪大数据-全国瘦肉型肉猪\n\n限量: 单次返回近半个月的历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 日期  | object  | -  |\n| 价格  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nspot_hog_lean_price_soozhu_df = ak.spot_hog_lean_price_soozhu()\nprint(spot_hog_lean_price_soozhu_df)\n```\n\n数据示例\n\n```\n        日期     价格\n0   2024-07-21  19.15\n1   2024-07-22  19.21\n2   2024-07-23  19.38\n3   2024-07-24  19.41\n4   2024-07-25  19.38\n5   2024-07-26  19.32\n6   2024-07-27  19.27\n7   2024-07-28  19.30\n8   2024-07-29  19.38\n9   2024-07-30  19.48\n10  2024-07-31  19.66\n11  2024-08-01  19.78\n12  2024-08-02  19.85\n13  2024-08-03  19.85\n14  2024-08-04  19.80\n```\n\n#### 全国三元仔猪\n\n接口: spot_hog_three_way_soozhu\n\n目标地址: https://www.soozhu.com/price/data/center/\n\n描述: 搜猪-生猪大数据-全国三元仔猪\n\n限量: 单次返回近半个月的历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 日期  | object  | -  |\n| 价格  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nspot_hog_three_way_soozhu_df = ak.spot_hog_three_way_soozhu()\nprint(spot_hog_three_way_soozhu_df)\n```\n\n数据示例\n\n```\n         日期      价格\n0   2024-07-23  707.29\n1   2024-07-24  696.21\n2   2024-07-25  674.69\n3   2024-07-26  702.08\n4   2024-07-27  715.67\n5   2024-07-28  722.33\n6   2024-07-29  692.26\n7   2024-07-30  673.71\n8   2024-07-31  684.41\n9   2024-08-01  687.30\n10  2024-08-02  709.69\n11  2024-08-03  679.75\n12  2024-08-04  694.00\n13  2024-08-05  706.33\n14  2024-08-06  718.02\n```\n\n#### 全国后备二元母猪\n\n接口: spot_hog_crossbred_soozhu\n\n目标地址: https://www.soozhu.com/price/data/center/\n\n描述: 搜猪-生猪大数据-全国后备二元母猪\n\n限量: 单次返回近半个月的历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 日期  | object  | -  |\n| 价格  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nspot_hog_crossbred_soozhu_df = ak.spot_hog_crossbred_soozhu()\nprint(spot_hog_crossbred_soozhu_df)\n```\n\n数据示例\n\n```\n       日期       价格\n0   2024-07-26  1945.83\n1   2024-07-27  2678.44\n2   2024-07-28  2704.33\n3   2024-07-29  1852.07\n4   2024-07-30  1833.00\n5   2024-07-31  1837.78\n6   2024-08-01  1966.08\n7   2024-08-02  1943.75\n8   2024-08-03  2872.67\n9   2024-08-04  2695.44\n10  2024-08-05  1905.15\n11  2024-08-06  1914.64\n12  2024-08-07  1830.65\n13  2024-08-08  1991.06\n14  2024-08-09  1960.00\n```\n\n#### 全国玉米价格走势\n\n接口: spot_corn_price_soozhu\n\n目标地址: https://www.soozhu.com/price/data/center/\n\n描述: 搜猪-生猪大数据-全国玉米价格走势\n\n限量: 单次返回近半个月的历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 日期  | object  | -  |\n| 价格  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nspot_corn_price_soozhu_df = ak.spot_corn_price_soozhu()\nprint(spot_corn_price_soozhu_df)\n```\n\n数据示例\n\n```\n         日期    价格\n0   2024-07-27  2.50\n1   2024-07-28  2.47\n2   2024-07-29  2.51\n3   2024-07-30  2.45\n4   2024-07-31  2.43\n5   2024-08-01  2.41\n6   2024-08-02  2.45\n7   2024-08-03  2.52\n8   2024-08-04  2.36\n9   2024-08-05  2.45\n10  2024-08-06  2.45\n11  2024-08-07  2.46\n12  2024-08-08  2.40\n13  2024-08-09  2.45\n14  2024-08-10  2.57\n```\n\n#### 全国豆粕价格走势\n\n接口: spot_soybean_price_soozhu\n\n目标地址: https://www.soozhu.com/price/data/center/\n\n描述: 搜猪-生猪大数据-全国豆粕价格走势\n\n限量: 单次返回近半个月的历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 日期  | object  | -  |\n| 价格  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nspot_soybean_price_soozhu_df = ak.spot_soybean_price_soozhu()\nprint(spot_soybean_price_soozhu_df)\n```\n\n数据示例\n\n```\n         日期    价格\n0   2024-07-28  3.53\n1   2024-07-29  3.32\n2   2024-07-30  3.35\n3   2024-07-31  3.36\n4   2024-08-01  3.35\n5   2024-08-02  3.38\n6   2024-08-03  3.55\n7   2024-08-04  3.52\n8   2024-08-05  3.32\n9   2024-08-06  3.40\n10  2024-08-07  3.33\n11  2024-08-08  3.22\n12  2024-08-09  3.25\n13  2024-08-10  3.41\n14  2024-08-11  3.18\n```\n\n#### 全国育肥猪合料（含自配料）半月走势\n\n接口: spot_mixed_feed_soozhu\n\n目标地址: https://www.soozhu.com/price/data/center/\n\n描述: 搜猪-生猪大数据-全国育肥猪合料（含自配料）半月走势\n\n限量: 单次返回近半个月的历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述 |\n|-----|---------|----|\n| 日期  | object  | -  |\n| 价格  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nspot_mixed_feed_soozhu_df = ak.spot_mixed_feed_soozhu()\nprint(spot_mixed_feed_soozhu_df)\n```\n\n数据示例\n\n```\n         日期    价格\n0   2024-07-29  3.24\n1   2024-07-30  3.11\n2   2024-07-31  3.24\n3   2024-08-01  3.18\n4   2024-08-02  3.26\n5   2024-08-03  3.35\n6   2024-08-04  3.46\n7   2024-08-05  3.27\n8   2024-08-06  3.19\n9   2024-08-07  3.25\n10  2024-08-08  3.07\n11  2024-08-09  3.30\n12  2024-08-10  3.55\n13  2024-08-11  3.42\n14  2024-08-12  3.22\n```\n"
  },
  {
    "path": "docs/data/stock/stock.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 股票数据\n\n### A股\n\n#### 股票市场总貌\n\n##### 上海证券交易所\n\n接口: stock_sse_summary\n\n目标地址: http://www.sse.com.cn/market/stockdata/statistic/\n\n描述: 上海证券交易所-股票数据总貌\n\n限量: 单次返回最近交易日的股票数据总貌(当前交易日的数据需要交易所收盘后统计)\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数-实时行情数据\n\n| 名称  | 类型     | 描述  |\n|-----|--------|-----|\n| 项目  | object | -   |\n| 股票  | object | -   |\n| 科创板 | object | -   |\n| 主板  | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sse_summary_df = ak.stock_sse_summary()\nprint(stock_sse_summary_df)\n```\n\n数据示例\n\n```\n      项目     股票       科创板         主板\n0   流通股本   40403.47    413.63   39989.84\n1    总市值  516714.68   55719.6  460995.09\n2  平均市盈率      17.92      71.0      16.51\n3   上市公司       2036       377       1659\n4   上市股票       2078       377       1701\n5   流通市值  432772.13   22274.3  410497.83\n6   报告时间   20211230  20211230   20211230\n8    总股本   46234.03    1211.5   45022.54\n```\n\n##### 深圳证券交易所\n\n###### 证券类别统计\n\n接口: stock_szse_summary\n\n目标地址: http://www.szse.cn/market/overview/index.html\n\n描述: 深圳证券交易所-市场总貌-证券类别统计\n\n限量: 单次返回指定 date 的市场总貌数据-证券类别统计(当前交易日的数据需要交易所收盘后统计)\n\n输入参数\n\n| 名称   | 类型  | 描述                                  |\n|------|-----|-------------------------------------|\n| date | str | date=\"20200619\"; 当前交易日的数据需要交易所收盘后统计 |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 证券类别 | object  | -       |\n| 数量   | int64   | 注意单位: 只 |\n| 成交金额 | float64 | 注意单位: 元 |\n| 总市值  | float64 | -       |\n| 流通市值 | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_szse_summary_df = ak.stock_szse_summary(date=\"20200619\")\nprint(stock_szse_summary_df)\n```\n\n数据示例\n\n```\n     证券类别    数量          成交金额           总市值          流通市值\n0      股票  2284  4.647749e+11  2.706514e+13  2.104546e+13\n1    主板A股   460  9.775950e+10  7.864787e+12  6.943990e+12\n2    主板B股    46  8.626816e+07  4.759658e+10  4.706385e+10\n3     中小板   960  2.013526e+11  1.130741e+13  8.669555e+12\n4   创业板A股   818  1.655765e+11  7.845345e+12  5.384854e+12\n5      基金   551  1.362524e+10  2.417277e+11  2.417277e+11\n6     ETF   100  1.165436e+10  1.628294e+11  1.628294e+11\n7     LOF   250  7.335768e+08  4.043156e+10  4.043156e+10\n8   封闭式基金     1  5.527571e+05  7.622440e+08  7.622440e+08\n9    分级基金   200  1.236746e+09  3.770451e+10  3.770451e+10\n10     债券  7174  1.371389e+11           NaN           NaN\n11   债券现券  6599  2.911357e+10  3.683881e+13  1.823072e+12\n12   债券回购    13  1.054592e+11           NaN           NaN\n13    ABS   562  2.566134e+09  4.849642e+11  4.849642e+11\n14     期权   108  2.441560e+08           NaN           NaN\n```\n\n###### 地区交易排序\n\n接口: stock_szse_area_summary\n\n目标地址: http://www.szse.cn/market/overview/index.html\n\n描述: 深圳证券交易所-市场总貌-地区交易排序\n\n限量: 单次返回指定 date 的市场总貌数据-地区交易排序数据\n\n输入参数\n\n| 名称   | 类型  | 描述                |\n|------|-----|-------------------|\n| date | str | date=\"202203\"; 年月 |\n\n输出参数\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 序号    | int64   | -       |\n| 地区    | object  | -       |\n| 总交易额  | float64 | 注意单位: 元 |\n| 占市场   | float64 | 注意单位: % |\n| 股票交易额 | float64 | 注意单位: 元 |\n| 基金交易额 | float64 | 注意单位: 元 |\n| 债券交易额 | float64 | 注意单位: 元 |\n\n2025年添加优先股交易额与期权交易额\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 地区     | object  | -       |\n| 总交易额   | float64 | 注意单位: 元 |\n| 占市场    | float64 | 注意单位: % |\n| 股票交易额  | float64 | 注意单位: 元 |\n| 基金交易额  | float64 | 注意单位: 元 |\n| 债券交易额  | float64 | 注意单位: 元 |\n| 优先股交易额 | float64 | 注意单位: 元 |\n| 期权交易额  | float64 | 注意单位: 元 |\n| 接口示例   |         |         |\n\n```python\nimport akshare as ak\n\nstock_szse_area_summary_df = ak.stock_szse_area_summary(date=\"202412\")\nprint(stock_szse_area_summary_df)\n```\n\n数据示例\n\n```\n    序号   地区  总交易额       占市场   股票交易额     基金交易额         债券交易额\n0    1    上海  9.487525e+12  16.349  5.951120e+12  4.247199e+11  3.111261e+12\n1    2    深圳  7.224594e+12  12.450  4.630469e+12  3.935335e+11  2.200312e+12\n2    3    浙江  5.290404e+12   9.117  4.360136e+12  1.182085e+11  8.120595e+11\n3    4    北京  5.233418e+12   9.018  3.416063e+12  2.662883e+11  1.550712e+12\n4    5    江苏  4.293698e+12   7.399  3.172531e+12  2.320341e+11  8.891332e+11\n5    6    广东  2.270127e+12   3.912  1.901562e+12  4.564880e+10  3.229161e+11\n6    7    福建  2.253878e+12   3.884  1.623762e+12  6.501030e+10  5.651060e+11\n7    8    西藏  2.206716e+12   3.803  1.905686e+12  7.203090e+10  2.289994e+11\n8    9    广州  2.197150e+12   3.786  1.463381e+12  1.648445e+11  5.689248e+11\n9   10  境外地区  1.984124e+12   3.419  1.970216e+12  1.390804e+10  0.000000e+00\n10  11    四川  1.930677e+12   3.327  1.435194e+12  4.522977e+10  4.502540e+11\n11  12    湖北  1.696401e+12   2.923  1.158206e+12  4.017641e+10  4.980182e+11\n12  13    山东  1.682048e+12   2.899  1.327438e+12  5.365067e+10  3.009584e+11\n13  14    湖南  1.219426e+12   2.101  9.349975e+11  1.289489e+11  1.554799e+11\n14  15    河南  9.646033e+11   1.662  7.822876e+11  1.960984e+10  1.627058e+11\n15  16    安徽  9.465931e+11   1.631  7.593304e+11  1.469990e+10  1.725628e+11\n16  17    江西  9.396623e+11   1.619  6.881626e+11  1.311965e+10  2.383801e+11\n17  18    陕西  8.237220e+11   1.419  6.012667e+11  1.214389e+10  2.103114e+11\n18  19    重庆  7.391354e+11   1.274  5.619510e+11  1.890194e+10  1.582824e+11\n19  20    辽宁  6.931954e+11   1.195  5.449654e+11  1.301426e+10  1.352158e+11\n20  21    河北  5.669541e+11   0.977  4.501636e+11  1.233615e+10  1.044544e+11\n21  22    广西  4.686531e+11   0.808  3.364304e+11  7.822388e+09  1.244003e+11\n22  23    山西  4.365001e+11   0.752  3.284633e+11  1.062648e+10  9.741041e+10\n23  24    天津  4.343598e+11   0.749  3.184588e+11  2.337921e+10  9.252183e+10\n24  25   黑龙江  3.168352e+11   0.546  2.459350e+11  1.226023e+10  5.863994e+10\n25  26    吉林  2.993509e+11   0.516  1.989160e+11  1.141372e+10  8.902121e+10\n26  27    云南  2.849838e+11   0.491  2.304918e+11  5.161953e+09  4.933003e+10\n27  28    贵州  2.687234e+11   0.463  1.523773e+11  7.489895e+09  1.088562e+11\n28  29    新疆  2.012105e+11   0.347  1.723385e+11  2.794241e+09  2.607780e+10\n29  30    海南  1.803439e+11   0.311  1.573740e+11  4.553905e+09  1.841596e+10\n30  31    甘肃  1.739891e+11   0.300  1.526379e+11  2.707475e+09  1.864376e+10\n31  32   内蒙古  1.694187e+11   0.292  1.277484e+11  2.512480e+09  3.915781e+10\n32  33    宁夏  1.117968e+11   0.193  9.845570e+10  2.297211e+09  1.104391e+10\n33  34    青海  3.967756e+10   0.068  2.884644e+10  4.814743e+08  1.034965e+10\n```\n\n```python\nimport akshare as ak\n\nstock_szse_area_summary_df = ak.stock_szse_area_summary(date=\"202508\")\nprint(stock_szse_area_summary_df)\n```\n\n```\n    序号    地区  总交易额  ...       债券交易额       优先股交易额    期权交易额\n0    1    上海  6.371903e+12  ...  2.220920e+12  876893300.0  1.243253e+10\n1    2    深圳  5.121851e+12  ...  1.769490e+12          0.0  4.254038e+09\n2    3    北京  3.649473e+12  ...  1.204900e+12  876893300.0  2.817363e+09\n3    4    浙江  3.339664e+12  ...  6.396964e+11          0.0  1.360305e+09\n4    5    江苏  2.872589e+12  ...  7.602330e+11          0.0  1.447631e+09\n5    6  境外地区  1.634432e+12  ...  0.000000e+00          0.0  0.000000e+00\n6    7    广州  1.500926e+12  ...  4.780673e+11    8067200.0  1.804676e+09\n7    8    福建  1.493353e+12  ...  4.740214e+11          0.0  7.236936e+08\n8    9    西藏  1.370016e+12  ...  1.646981e+11          0.0  1.294816e+08\n9   10    广东  1.353391e+12  ...  2.476401e+11          0.0  4.377234e+08\n10  11    四川  1.200289e+12  ...  3.341463e+11          0.0  2.535704e+08\n11  12    湖北  1.185315e+12  ...  4.680616e+11          0.0  1.431620e+08\n12  13    山东  1.076383e+12  ...  2.650255e+11          0.0  1.963902e+09\n13  14    湖南  7.683324e+11  ...  1.377730e+11          0.0  1.828164e+08\n14  15    江西  6.164555e+11  ...  2.175697e+11          0.0  7.712560e+07\n15  16    河南  5.856996e+11  ...  1.258403e+11          0.0  1.469152e+08\n16  17    安徽  5.759514e+11  ...  1.272217e+11          0.0  1.640928e+08\n17  18    陕西  5.025968e+11  ...  1.510291e+11          0.0  1.016968e+08\n18  19    重庆  4.503018e+11  ...  1.099315e+11          0.0  1.190079e+08\n19  20    辽宁  4.321530e+11  ...  1.090213e+11          0.0  1.779504e+08\n20  21    河北  3.498134e+11  ...  8.627298e+10          0.0  1.030772e+08\n21  22    广西  3.058458e+11  ...  9.918531e+10          0.0  1.234911e+08\n22  23    天津  2.745559e+11  ...  7.141631e+10          0.0  1.061408e+08\n23  24    山西  2.727539e+11  ...  6.757100e+10          0.0  3.207566e+07\n24  25    贵州  2.045149e+11  ...  9.961597e+10          0.0  3.725579e+07\n25  26    吉林  1.972995e+11  ...  7.551653e+10          0.0  6.118616e+07\n26  27   黑龙江  1.903182e+11  ...  4.610176e+10          0.0  5.380192e+07\n27  28    云南  1.724363e+11  ...  3.210926e+10          0.0  1.397156e+08\n28  29    新疆  1.201365e+11  ...  2.366439e+10          0.0  2.407912e+07\n29  30   内蒙古  1.122930e+11  ...  3.212444e+10          0.0  4.740066e+07\n30  31    海南  1.072153e+11  ...  1.562485e+10          0.0  9.121949e+06\n31  32    甘肃  1.034123e+11  ...  1.490509e+10          0.0  3.174230e+07\n32  33    宁夏  6.513347e+10  ...  8.624815e+09          0.0  1.210827e+07\n33  34    青海  2.453409e+10  ...  6.640867e+09          0.0  2.349068e+06\n```\n\n######\n\n###### 股票行业成交\n\n接口: stock_szse_sector_summary\n\n目标地址: http://docs.static.szse.cn/www/market/periodical/month/W020220511355248518608.html\n\n描述: 深圳证券交易所-统计资料-股票行业成交数据\n\n限量: 单次返回指定 symbol 和 date 的统计资料-股票行业成交数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                  |\n|--------|-----|-------------------------------------|\n| symbol | str | symbol=\"当月\"; choice of {\"当月\", \"当年\"} |\n| date   | str | date=\"202501\"; 年月                   |\n\n输出参数\n\n| 名称        | 类型      | 描述      |\n|-----------|---------|---------|\n| 项目名称      | object  | -       |\n| 项目名称-英文   | object  | -       |\n| 交易天数      | int64   | -       |\n| 成交金额-人民币元 | int64   |         |\n| 成交金额-占总计  | float64 | 注意单位: % |\n| 成交股数-股数   | int64   | -       |\n| 成交股数-占总计  | float64 | 注意单位: % |\n| 成交笔数-笔    | int64   | -       |\n| 成交笔数-占总计  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_szse_sector_summary_df = ak.stock_szse_sector_summary(symbol=\"当年\", date=\"202501\")\nprint(stock_szse_sector_summary_df)\n```\n\n数据示例\n\n```\n    项目名称            项目名称-英文 交易天数  ... 成交股数-占总计 成交笔数-笔 成交笔数-占总计\n0     合计                     Total    18  ...    100.00  1072706301    100.00\n1   农林牧渔               Agriculture    18  ...      0.85     7661044      0.71\n2    采矿业                    Mining    18  ...      0.90     9355248      0.87\n3    制造业             Manufacturing    18  ...     59.75   715973899     66.74\n4   水电煤气                 Utilities    18  ...      1.47    12802444      1.19\n5    建筑业              Construction    18  ...      1.39    10222345      0.95\n6   批发零售        Wholesale & Retail    18  ...      4.73    40706994      3.79\n7   运输仓储            Transportation    18  ...      0.99    11426446      1.07\n8   住宿餐饮         Hotels & Catering    18  ...      0.19     1728478      0.16\n9   信息技术                        IT    18  ...     11.73   137478307     12.82\n10   金融业                   Finance    18  ...      3.76    31633210      2.95\n11   房地产               Real Estate    18  ...      2.88    13878880      1.29\n12  商务服务          Business Support    18  ...      6.48    38310245      3.57\n13  科研服务    Research & Development    18  ...      0.63    10972681      1.02\n14  公共环保  Environmental Protection    18  ...      1.61    10919804      1.02\n15  居民服务         Resident Services    18  ...      0.01      217920      0.02\n16    教育                 Education    18  ...      0.64     3040949      0.28\n17    卫生             Public Health    18  ...      0.51     4706600      0.44\n18  文化传播                     Media    18  ...      1.33    10017645      0.93\n19    综合             Conglomerates    18  ...      0.14     1653162      0.15\n[20 rows x 9 columns]\n```\n\n##### 上海证券交易所-每日概况\n\n接口: stock_sse_deal_daily\n\n目标地址: http://www.sse.com.cn/market/stockdata/overview/day/\n\n描述: 上海证券交易所-数据-股票数据-成交概况-股票成交概况-每日股票情况\n\n限量: 单次返回指定日期的每日概况数据, 当前交易日数据需要在收盘后获取; 注意仅支持获取在 20211227（包含）之后的数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                              |\n|------|-----|-----------------------------------------------------------------|\n| date | str | date=\"20250221\"; 当前交易日的数据需要交易所收盘后统计; 注意仅支持获取在 20211227（包含）之后的数据 |\n\n输出参数\n\n| 名称   | 类型      | 描述        |\n|------|---------|-----------|\n| 单日情况 | object  | 包含了网页所有字段 |\n| 股票   | float64 | -         |\n| 主板A  | float64 | -         |\n| 主板B  | float64 | -         |\n| 科创板  | float64 | -         |\n| 股票回购 | float64 | -         |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sse_deal_daily_df = ak.stock_sse_deal_daily(date=\"20250221\")\nprint(stock_sse_deal_daily_df)\n```\n\n数据示例\n\n```\n    单日情况           股票          主板A       主板B         科创板  股票回购\n0    挂牌数    2321.0000    1693.0000   43.0000    585.0000   0.0\n1   市价总值  529981.4800  456997.7000  942.6300  72041.1500   0.0\n2   流通市值  501613.5100  445348.4700  713.7700  55551.2700   0.0\n3   成交金额    8561.3100    6413.6300    4.3000   2143.3700   0.3\n4    成交量     608.5800     556.5800    0.7200     51.2900   0.1\n5  平均市盈率      14.3200      13.2000    7.1600     45.7800   NaN\n6    换手率       1.6154       1.4034    0.4565      2.9752   0.0\n7  流通换手率       1.7068       1.4401    0.6029      3.8584   0.0\n```\n\n#### 个股信息查询-东财\n\n接口: stock_individual_info_em\n\n目标地址: http://quote.eastmoney.com/concept/sh603777.html?from=classic\n\n描述: 东方财富-个股-股票信息\n\n限量: 单次返回指定 symbol 的个股信息\n\n输入参数\n\n| 名称      | 类型    | 描述                      |\n|---------|-------|-------------------------|\n| symbol  | str   | symbol=\"603777\"; 股票代码   |\n| timeout | float | timeout=None; 默认不设置超时参数 |\n\n输出参数\n\n| 名称    | 类型     | 描述  |\n|-------|--------|-----|\n| item  | object | -   |\n| value | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_individual_info_em_df = ak.stock_individual_info_em(symbol=\"000001\")\nprint(stock_individual_info_em_df)\n```\n\n数据示例\n\n```\n   item               value\n0    最新               7.05\n1  股票代码             000002\n2  股票简称            万  科Ａ\n3   总股本       11930709471.0\n4   流通股        9716935865.0\n5   总市值  84111501770.550003\n6  流通市值      68504397848.25\n7    行业              房地产开发\n8  上市时间            19910129\n```\n\n#### 个股信息查询-雪球\n\n接口: stock_individual_basic_info_xq\n\n目标地址: https://xueqiu.com/snowman/S/SH601127/detail#/GSJJ\n\n描述: 雪球财经-个股-公司概况-公司简介\n\n限量: 单次返回指定 symbol 的个股信息\n\n输入参数\n\n| 名称      | 类型    | 描述                      |\n|---------|-------|-------------------------|\n| symbol  | str   | symbol=\"SH601127\"; 股票代码 |\n| token   | str   | token=None;             |\n| timeout | float | timeout=None; 默认不设置超时参数 |\n\n输出参数\n\n| 名称    | 类型     | 描述  |\n|-------|--------|-----|\n| item  | object | -   |\n| value | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_individual_basic_info_xq_df = ak.stock_individual_basic_info_xq(symbol=\"SH601127\")\nprint(stock_individual_basic_info_xq_df)\n```\n\n数据示例\n\n```\n                            item                                              value\n0                         org_id                                         T000071215\n1                    org_name_cn                                        赛力斯集团股份有限公司\n2              org_short_name_cn                                                赛力斯\n3                    org_name_en                               Seres Group Co.,Ltd.\n4              org_short_name_en                                              SERES\n5        main_operation_business      新能源汽车及核心三电(电池、电驱、电控)、传统汽车及核心部件总成的研发、制造、销售及服务。\n6                operating_scope  　　一般项目：制造、销售：汽车零部件、机动车辆零部件、普通机械、电器机械、电器、电子产品（不...\n7                district_encode                                             500106\n8            org_cn_introduction  赛力斯始创于1986年，是以新能源汽车为核心业务的技术科技型汽车企业。现有员工1.6万人，A...\n9           legal_representative                                                张正萍\n10               general_manager                                                张正萍\n11                     secretary                                                 申薇\n12              established_date                                      1178812800000\n13                     reg_asset                                       1509782193.0\n14                     staff_num                                              16102\n15                     telephone                                     86-23-65179666\n16                      postcode                                             401335\n17                           fax                                     86-23-65179777\n18                         email                                    601127@seres.cn\n19                   org_website                                   www.seres.com.cn\n20                reg_address_cn                                      重庆市沙坪坝区五云湖路7号\n21                reg_address_en                                               None\n22             office_address_cn                                      重庆市沙坪坝区五云湖路7号\n23             office_address_en                                               None\n24               currency_encode                                             019001\n25                      currency                                                CNY\n26                   listed_date                                      1465920000000\n27               provincial_name                                                重庆市\n28             actual_controller                                       张兴海 (13.79%)\n29                   classi_name                                               民营企业\n30                   pre_name_cn                                     重庆小康工业集团股份有限公司\n31                      chairman                                                张正萍\n32               executives_nums                                                 20\n33              actual_issue_vol                                        142500000.0\n34                   issue_price                                               5.81\n35             actual_rc_net_amt                                        738451000.0\n36              pe_after_issuing                                              18.19\n37  online_success_rate_of_issue                                           0.110176\n38            affiliate_industry         {'ind_code': 'BK0025', 'ind_name': '汽车整车'}\n```\n\n#### 行情报价\n\n接口: stock_bid_ask_em\n\n目标地址: https://quote.eastmoney.com/sz000001.html\n\n描述: 东方财富-行情报价\n\n限量: 单次返回指定股票的行情报价数据\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"000001\"; 股票代码 |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| item  | object  | -  |\n| value | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_bid_ask_em_df = ak.stock_bid_ask_em(symbol=\"000001\")\nprint(stock_bid_ask_em_df)\n```\n\n数据示例\n\n```\n          item         value\n0       sell_5  1.049000e+01\n1   sell_5_vol  1.147100e+06\n2       sell_4  1.048000e+01\n3   sell_4_vol  1.035700e+06\n4       sell_3  1.047000e+01\n5   sell_3_vol  1.489100e+06\n6       sell_2  1.046000e+01\n7   sell_2_vol  1.608400e+06\n8       sell_1  1.045000e+01\n9   sell_1_vol  2.339000e+05\n10       buy_1  1.044000e+01\n11   buy_1_vol  3.690000e+05\n12       buy_2  1.043000e+01\n13   buy_2_vol  8.359000e+05\n14       buy_3  1.042000e+01\n15   buy_3_vol  6.016000e+05\n16       buy_4  1.041000e+01\n17   buy_4_vol  7.381000e+05\n18       buy_5  1.040000e+01\n19   buy_5_vol  1.301900e+06\n20          最新  1.045000e+01\n21          均价  1.043000e+01\n22          涨幅  4.800000e-01\n23          涨跌  5.000000e-02\n24          总手  8.726630e+05\n25          金额  9.102786e+08\n26          换手  4.500000e-01\n27          量比  4.400000e-01\n28          最高  1.047000e+01\n29          最低  1.037000e+01\n30          今开  1.038000e+01\n31          昨收  1.040000e+01\n32          涨停  1.144000e+01\n33          跌停  9.360000e+00\n34          外盘  4.715810e+05\n35          内盘  4.010820e+05\n```\n\n#### 实时行情数据\n\n##### 实时行情数据-东财\n\n###### 沪深京 A 股\n\n接口: stock_zh_a_spot_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#hs_a_board\n\n描述: 东方财富网-沪深京 A 股-实时行情数据\n\n限量: 单次返回所有沪深京 A 股上市公司的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int64   | -       |\n| 代码      | object  | -       |\n| 名称      | object  | -       |\n| 最新价     | float64 | -       |\n| 涨跌幅     | float64 | 注意单位: % |\n| 涨跌额     | float64 | -       |\n| 成交量     | float64 | 注意单位: 手 |\n| 成交额     | float64 | 注意单位: 元 |\n| 振幅      | float64 | 注意单位: % |\n| 最高      | float64 | -       |\n| 最低      | float64 | -       |\n| 今开      | float64 | -       |\n| 昨收      | float64 | -       |\n| 量比      | float64 | -       |\n| 换手率     | float64 | 注意单位: % |\n| 市盈率-动态  | float64 | -       |\n| 市净率     | float64 | -       |\n| 总市值     | float64 | 注意单位: 元 |\n| 流通市值    | float64 | 注意单位: 元 |\n| 涨速      | float64 | -       |\n| 5分钟涨跌   | float64 | 注意单位: % |\n| 60日涨跌幅  | float64 | 注意单位: % |\n| 年初至今涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_a_spot_em_df = ak.stock_zh_a_spot_em()\nprint(stock_zh_a_spot_em_df)\n```\n\n数据示例\n\n```\n        序号 代码    名称    最新价  ...   涨速 5分钟涨跌  60日涨跌幅  年初至今涨跌幅\n0        1  836149  旭杰科技   7.31  ...  0.00   0.00   28.47    -9.53\n1        2  300767  震安科技   9.28  ...  0.00   0.00   -9.55   -46.61\n2        3  300125  ST聆达   4.67  ...  0.00   0.00  177.98   -62.97\n3        4  301027  华蓝集团   8.93  ...  0.00   0.00   17.81   -28.56\n4        5  300584  海辰药业  23.26  ...  0.00   0.00   42.44     0.13\n...    ...     ...   ...    ...  ...   ...    ...     ...      ...\n5630  5631  300531   优博讯  12.45  ... -0.16  -0.24   25.50   -18.52\n5631  5632  301302  华如科技  13.47  ...  0.07  -0.07  -28.88   -46.36\n5632  5633  300496  中科创达  32.30  ... -0.09  -0.12  -44.60   -59.53\n5633  5634  300050  世纪鼎利   5.04  ... -0.20   0.60   72.01     6.55\n5634  5635  832175  东方碳素   6.48  ...  0.00   0.00  -21.64   -47.57\n[5635 rows x 23 columns]\n```\n\n###### 沪 A 股\n\n接口: stock_sh_a_spot_em\n\n目标地址: http://quote.eastmoney.com/center/gridlist.html#sh_a_board\n\n描述: 东方财富网-沪 A 股-实时行情数据\n\n限量: 单次返回所有沪 A 股上市公司的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int64   | -       |\n| 代码      | object  | -       |\n| 名称      | object  | -       |\n| 最新价     | float64 | -       |\n| 涨跌幅     | float64 | 注意单位: % |\n| 涨跌额     | float64 | -       |\n| 成交量     | float64 | 注意单位: 手 |\n| 成交额     | float64 | 注意单位: 元 |\n| 振幅      | float64 | 注意单位: % |\n| 最高      | float64 | -       |\n| 最低      | float64 | -       |\n| 今开      | float64 | -       |\n| 昨收      | float64 | -       |\n| 量比      | float64 | -       |\n| 换手率     | float64 | 注意单位: % |\n| 市盈率-动态  | float64 | -       |\n| 市净率     | float64 | -       |\n| 总市值     | float64 | 注意单位: 元 |\n| 流通市值    | float64 | 注意单位: 元 |\n| 涨速      | float64 | -       |\n| 5分钟涨跌   | float64 | 注意单位: % |\n| 60日涨跌幅  | float64 | 注意单位: % |\n| 年初至今涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sh_a_spot_em_df = ak.stock_sh_a_spot_em()\nprint(stock_sh_a_spot_em_df)\n```\n\n数据示例\n\n```\n      序号    代码    名称   最新价  ...  涨速  5分钟涨跌 60日涨跌幅 年初至今涨跌幅\n0        1  688670   金迪克  12.80  ... -0.16   0.00  -19.14   -55.02\n1        2  688656   浩欧博  22.40  ... -0.62  -0.40   -4.92   -34.81\n2        3  603183   建研院   3.71  ...  0.00   0.00   10.09   -19.87\n3        4  603909  建发合诚   7.98  ...  0.13   0.25  -16.09   -29.26\n4        5  603700  宁水集团   9.97  ...  0.00   0.00    0.30   -28.63\n...    ...     ...   ...    ...  ...   ...    ...     ...      ...\n2380  2381  601512  中新集团   6.70  ...  0.00  -0.30  -18.69    -9.95\n2381  2382  600187  国中水务   3.02  ...  0.00   0.00   41.12    14.39\n2382  2383  603499  翔港科技  12.32  ...  0.00   0.00  -30.24    14.82\n2383  2384  605178  时空科技  13.48  ...  0.00  -0.74    9.06   -51.39\n2384  2385  688175  高凌信息  11.49  ...  0.00   0.00  -30.15   -42.00\n[2385 rows x 23 columns]\n```\n\n###### 深 A 股\n\n接口: stock_sz_a_spot_em\n\n目标地址: http://quote.eastmoney.com/center/gridlist.html#sz_a_board\n\n描述: 东方财富网-深 A 股-实时行情数据\n\n限量: 单次返回所有深 A 股上市公司的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int64   | -       |\n| 代码      | object  | -       |\n| 名称      | object  | -       |\n| 最新价     | float64 | -       |\n| 涨跌幅     | float64 | 注意单位: % |\n| 涨跌额     | float64 | -       |\n| 成交量     | float64 | 注意单位: 手 |\n| 成交额     | float64 | 注意单位: 元 |\n| 振幅      | float64 | 注意单位: % |\n| 最高      | float64 | -       |\n| 最低      | float64 | -       |\n| 今开      | float64 | -       |\n| 昨收      | float64 | -       |\n| 量比      | float64 | -       |\n| 换手率     | float64 | 注意单位: % |\n| 市盈率-动态  | float64 | -       |\n| 市净率     | float64 | -       |\n| 总市值     | float64 | 注意单位: 元 |\n| 流通市值    | float64 | 注意单位: 元 |\n| 涨速      | float64 | -       |\n| 5分钟涨跌   | float64 | 注意单位: % |\n| 60日涨跌幅  | float64 | 注意单位: % |\n| 年初至今涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sz_a_spot_em_df = ak.stock_sz_a_spot_em()\nprint(stock_sz_a_spot_em_df)\n```\n\n数据示例\n\n```\n      序号    代码   名称    最新价  ...   涨速 5分钟涨跌 60日涨跌幅 年初至今涨跌幅\n0        1  300767  震安科技   9.28  ...  0.00   0.00   -9.55   -46.61\n1        2  300125  ST聆达   4.67  ...  0.00   0.00  177.98   -62.97\n2        3  301027  华蓝集团   8.93  ...  0.00   0.00   17.81   -28.56\n3        4  300584  海辰药业  23.26  ...  0.00   0.00   42.44     0.13\n4        5  300977  深圳瑞捷  19.85  ...  0.00   0.00   32.95     7.47\n...    ...     ...   ...    ...  ...   ...    ...     ...      ...\n2991  2992  301326  捷邦科技  33.76  ...  0.12  -0.50   18.96   -15.83\n2992  2993  300531   优博讯  12.45  ... -0.16  -0.24   25.50   -18.52\n2993  2994  301302  华如科技  13.47  ...  0.07  -0.07  -28.88   -46.36\n2994  2995  300496  中科创达  32.30  ... -0.09  -0.12  -44.60   -59.53\n2995  2996  300050  世纪鼎利   5.04  ... -0.20   0.60   72.01     6.55\n[2996 rows x 23 columns]\n```\n\n###### 京 A 股\n\n接口: stock_bj_a_spot_em\n\n目标地址: http://quote.eastmoney.com/center/gridlist.html#bj_a_board\n\n描述: 东方财富网-京 A 股-实时行情数据\n\n限量: 单次返回所有京 A 股上市公司的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int64   | -       |\n| 代码      | object  | -       |\n| 名称      | object  | -       |\n| 最新价     | float64 | -       |\n| 涨跌幅     | float64 | 注意单位: % |\n| 涨跌额     | float64 | -       |\n| 成交量     | float64 | 注意单位: 手 |\n| 成交额     | float64 | 注意单位: 元 |\n| 振幅      | float64 | 注意单位: % |\n| 最高      | float64 | -       |\n| 最低      | float64 | -       |\n| 今开      | float64 | -       |\n| 昨收      | float64 | -       |\n| 量比      | float64 | -       |\n| 换手率     | float64 | 注意单位: % |\n| 市盈率-动态  | float64 | -       |\n| 市净率     | float64 | -       |\n| 总市值     | float64 | 注意单位: 元 |\n| 流通市值    | float64 | 注意单位: 元 |\n| 涨速      | float64 | -       |\n| 5分钟涨跌   | float64 | 注意单位: % |\n| 60日涨跌幅  | float64 | 注意单位: % |\n| 年初至今涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_bj_a_spot_em_df = ak.stock_bj_a_spot_em()\nprint(stock_bj_a_spot_em_df)\n```\n\n数据示例\n\n```\n      序号  代码   名称      最新价 涨跌幅  ...    流通市值  涨速 5分钟涨跌 60日涨跌幅 年初至今涨跌幅\n0      1  836149  旭杰科技   7.31  29.84  ...   349965819  0.00   0.00   28.47    -9.53\n1      2  871263  莱赛激光   9.95   8.86  ...   271814568 -0.40   1.84   -8.63   -50.74\n2      3  833873  中设咨询   3.32   4.73  ...   362479267  0.00  -0.90   13.70   -23.33\n3      4  833230  欧康医药   9.61   4.46  ...   321772274  0.31   0.21    6.31   -31.60\n4      5  836892  广咨国际   7.68   4.35  ...  1025658954 -0.13   0.92  -11.52   -30.94\n..   ...     ...   ...    ...    ...  ...         ...   ...    ...     ...      ...\n249  250  833575  康乐卫士  14.93  -8.69  ...  2789441772 -0.86  -0.99  -27.63   -44.99\n250  251  430476  海能技术   6.10  -9.09  ...   392764330 -0.16   0.16  -25.52   -59.03\n251  252  832149   利尔达   4.28  -9.51  ...   490226248 -0.47  -0.93   25.15   -41.61\n252  253  872374  云里物里  11.30  -9.89  ...   330132913  0.71   0.09   29.74   -27.47\n253  254  832175  东方碳素   6.48 -20.20  ...   391996578  0.00   0.00  -21.64   -47.57\n[254 rows x 23 columns]\n```\n\n###### 新股\n\n接口: stock_new_a_spot_em\n\n目标地址: http://quote.eastmoney.com/center/gridlist.html#newshares\n\n描述: 东方财富网-新股-实时行情数据\n\n限量: 单次返回所有新股上市公司的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int64   | -       |\n| 代码      | object  | -       |\n| 名称      | object  | -       |\n| 最新价     | float64 | -       |\n| 涨跌幅     | float64 | 注意单位: % |\n| 涨跌额     | float64 | -       |\n| 成交量     | float64 | 注意单位: 手 |\n| 成交额     | float64 | 注意单位: 元 |\n| 振幅      | float64 | 注意单位: % |\n| 最高      | float64 | -       |\n| 最低      | float64 | -       |\n| 今开      | float64 | -       |\n| 昨收      | float64 | -       |\n| 量比      | float64 | -       |\n| 换手率     | float64 | 注意单位: % |\n| 市盈率-动态  | float64 | -       |\n| 市净率     | float64 | -       |\n| 上市时间    | object  | -       |\n| 总市值     | float64 | 注意单位: 元 |\n| 流通市值    | float64 | 注意单位: 元 |\n| 涨速      | float64 | -       |\n| 5分钟涨跌   | float64 | 注意单位: % |\n| 60日涨跌幅  | float64 | 注意单位: % |\n| 年初至今涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_new_a_spot_em_df = ak.stock_new_a_spot_em()\nprint(stock_new_a_spot_em_df)\n```\n\n数据示例\n\n```\n    序号   代码    名称   最新价    涨跌幅  ... 流通市值   涨速  5分钟涨跌  60日涨跌幅  年初至今涨跌幅\n0    1  688583   C思看   91.96   2.17  ...  1175280710  0.09   0.17  174.84   174.84\n1    2  301601   C惠通   39.69   1.69  ...  1189592887  0.05  -0.08  236.36   236.36\n2    3  688758  赛分科技   15.87   1.54  ...   626933019  0.06   0.00  267.36   267.36\n3    4  301458  钧崴电子   40.15  19.99  ...  2452564476  0.00   0.00  286.06   286.06\n4    5  603072  天和磁材   38.01  -0.99  ...  2460981244  0.00   0.16  209.02   209.02\n..  ..     ...   ...     ...    ...  ...         ...   ...    ...     ...      ...\n68  69  301591  肯特股份   36.84   6.17  ...   774745200 -0.08  -0.19   -4.56    -3.79\n69  70  688584  上海合晶   18.62  -0.96  ...  1048019122 -0.11  -0.21    5.32    -4.81\n70  71  301589  诺瓦星云  163.23   1.45  ...  3018057408 -0.06   0.19  -13.63    -5.97\n71  72  688709  成都华微   29.38   1.31  ...  2265703747  0.20  -0.03   33.24    -4.86\n72  73  301502  华阳智能   41.98  -0.52  ...   599096580  0.43   0.55   -7.49    -2.60\n[73 rows x 24 columns]\n```\n\n###### 创业板\n\n接口: stock_cy_a_spot_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#gem_board\n\n描述: 东方财富网-创业板-实时行情\n\n限量: 单次返回所有创业板的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int64   | -       |\n| 代码      | object  | -       |\n| 名称      | object  | -       |\n| 最新价     | float64 | -       |\n| 涨跌幅     | float64 | 注意单位: % |\n| 涨跌额     | float64 | -       |\n| 成交量     | float64 | 注意单位: 手 |\n| 成交额     | float64 | 注意单位: 元 |\n| 振幅      | float64 | 注意单位: % |\n| 最高      | float64 | -       |\n| 最低      | float64 | -       |\n| 今开      | float64 | -       |\n| 昨收      | float64 | -       |\n| 量比      | float64 | -       |\n| 换手率     | float64 | 注意单位: % |\n| 市盈率-动态  | float64 | -       |\n| 市净率     | float64 | -       |\n| 总市值     | float64 | 注意单位: 元 |\n| 流通市值    | float64 | 注意单位: 元 |\n| 涨速      | float64 | -       |\n| 5分钟涨跌   | float64 | 注意单位: % |\n| 60日涨跌幅  | float64 | 注意单位: % |\n| 年初至今涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_cy_a_spot_em_df = ak.stock_cy_a_spot_em()\nprint(stock_cy_a_spot_em_df)\n```\n\n数据示例\n\n```\n     序号      代码   名称    最新价  ...    涨速  5分钟涨跌 60日涨跌幅 年初至今涨跌幅\n0        1  301602    N超研  32.10  ...  0.25   3.65  379.10   379.10\n1        2  300996   普联软件  20.63  ...  0.00   0.00    2.84    13.85\n2        3  300117  *ST嘉寓   1.08  ...  0.00   0.00  -31.21    -0.92\n3        4  300843   胜蓝股份  37.90  ... -0.21   1.64   21.28     8.25\n4        5  300476   胜宏科技  58.50  ...  0.10   0.00   28.09    38.99\n...    ...     ...    ...    ...  ...   ...    ...     ...      ...\n1396  1397  300043   星辉娱乐   3.66  ...  0.00   0.00   14.73     0.55\n1397  1398  300827   上能电气  41.48  ... -0.05   0.12    2.37    -5.51\n1398  1399  300377    赢时胜  27.62  ...  0.00  -1.81  100.87     0.22\n1399  1400  300515   三德科技  16.00  ... -2.20  -3.50   30.93    34.34\n1400  1401  300853   申昊科技  18.67  ...  0.05   0.32    4.59   -25.56\n[1401 rows x 23 columns]\n```\n\n###### 科创板\n\n接口: stock_kc_a_spot_em\n\n目标地址: http://quote.eastmoney.com/center/gridlist.html#kcb_board\n\n描述: 东方财富网-科创板-实时行情\n\n限量: 单次返回所有科创板的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int64   | -       |\n| 代码      | object  | -       |\n| 名称      | object  | -       |\n| 最新价     | float64 | -       |\n| 涨跌幅     | float64 | 注意单位: % |\n| 涨跌额     | float64 | -       |\n| 成交量     | float64 | 注意单位: 手 |\n| 成交额     | float64 | 注意单位: 元 |\n| 振幅      | float64 | 注意单位: % |\n| 最高      | float64 | -       |\n| 最低      | float64 | -       |\n| 今开      | float64 | -       |\n| 昨收      | float64 | -       |\n| 量比      | float64 | -       |\n| 换手率     | float64 | 注意单位: % |\n| 市盈率-动态  | float64 | -       |\n| 市净率     | float64 | -       |\n| 总市值     | float64 | 注意单位: 元 |\n| 流通市值    | float64 | 注意单位: 元 |\n| 涨速      | float64 | -       |\n| 5分钟涨跌   | float64 | 注意单位: % |\n| 60日涨跌幅  | float64 | 注意单位: % |\n| 年初至今涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_kc_a_spot_em_df = ak.stock_kc_a_spot_em()\nprint(stock_kc_a_spot_em_df)\n```\n\n数据示例\n\n```\n    序号   代码     名称     最新价  ...  涨速 5分钟涨跌 60日涨跌幅 年初至今涨跌幅\n0      1  688545    N兴福   27.39  ...  0.11   0.59  134.50   134.50\n1      2  688205    德科立  108.13  ... -1.30   2.01  102.87    18.82\n2      3  688577   浙海德曼   47.20  ... -0.13  -0.44   30.03    20.47\n3      4  688246   嘉和美康   23.99  ...  0.00   0.00  -17.13    -3.27\n4      5  688622   禾信仪器   69.00  ...  0.09   0.19  131.70    13.84\n..   ...     ...    ...     ...  ...   ...    ...     ...      ...\n582  583  688410    山外山   10.13  ... -0.10  -0.10  -11.37    -9.23\n583  584  688311   盟升电子   27.78  ... -0.04  -0.22   -8.26   -16.10\n584  585  688085   三友医疗   18.52  ... -1.17  -1.23  -14.62   -12.60\n585  586  688165  埃夫特-U   33.70  ... -0.09  -0.82  243.53    27.65\n586  587  688408    中信博   61.18  ...  0.30   0.30  -23.46   -15.03\n[587 rows x 23 columns]\n```\n\n###### AB 股比价\n\n接口: stock_zh_ab_comparison_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#ab_comparison\n\n描述: 东方财富网-行情中心-沪深京个股-AB股比价-全部AB股比价\n\n限量: 单次返回全部 AB 股比价的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述 |\n|------|---------|----|\n| 序号   | int64   | -  |\n| B股代码 | object  | -  |\n| B股名称 | object  | -  |\n| 最新价B | float64 | -  |\n| 涨跌幅B | float64 | -  |\n| A股代码 | object  | -  |\n| A股名称 | object  | -  |\n| 最新价A | float64 | -  |\n| 涨跌幅A | float64 | -  |\n| 比价   | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_ab_comparison_em_df = ak.stock_zh_ab_comparison_em()\nprint(stock_zh_ab_comparison_em_df)\n```\n\n数据示例\n\n```\n    序号 B股代码   B股名称   最新价B 涨跌幅B A股代码  A股名称 最新价A 涨跌幅A   比价\n0    1  200026    飞亚达Ｂ  14.38  10.02  000026    飞亚达  6.70  0.60  2.35\n1    2  200030     富奥B   6.05   2.54  000030   富奥股份  3.09  0.65  2.14\n2    3  900917    海欣Ｂ股   6.70   2.13  600851   海欣股份  2.63  0.38  3.55\n3    4  900916    凤凰B股  13.00   1.72  600679   上海凤凰  3.47  0.58  5.22\n4    5  900920    动力Ｂ股   6.23   1.63  600841   动力新科  1.97  1.03  4.41\n..  ..     ...     ...    ...    ...     ...    ...   ...   ...   ...\n68  69  900942    黄山Ｂ股  11.67  -2.99  600054   黄山旅游  7.25 -0.55  2.24\n69  70  900902    市北B股   5.12  -4.30  600604   市北高新  1.63  0.00  4.38\n70  71  900946    天雁B股   8.27  -5.05  600698   湖南天雁  2.13 -1.84  5.41\n71  72  900906    中毅达B  16.88  -5.06  600610    中毅达  2.77 -0.72  8.49\n72  73  900952  *ST锦港B    NaN    NaN  600190  *ST锦港   NaN   NaN  2.82\n[73 rows x 10 columns]\n```\n\n##### 实时行情数据-新浪\n\n接口: stock_zh_a_spot\n\n目标地址: https://vip.stock.finance.sina.com.cn/mkt/#hs_a\n\n描述: 新浪财经-沪深京 A 股数据, 重复运行本函数会被新浪暂时封 IP, 建议增加时间间隔\n\n限量: 单次返回沪深京 A 股上市公司的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 代码  | object  | -       |\n| 名称  | object  | -       |\n| 最新价 | float64 | -       |\n| 涨跌额 | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 买入  | float64 | -       |\n| 卖出  | float64 | -       |\n| 昨收  | float64 | -       |\n| 今开  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 成交量 | float64 | 注意单位: 股 |\n| 成交额 | float64 | 注意单位: 元 |\n| 时间戳 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_a_spot_df = ak.stock_zh_a_spot()\nprint(stock_zh_a_spot_df)\n```\n\n数据示例\n\n```\n      代码        名称    最新价   涨跌额  ...  最低  成交量          成交额       时间戳\n0     bj430017  星昊医药  15.41  1.15  ...  14.02   8411380.0  127141645.0  15:30:01\n1     bj430047  诺思兰德  18.17  0.67  ...  17.45   4167518.0   75391105.0  15:30:01\n2     bj430090  同辉信息   4.10  0.31  ...   3.75  22609069.0   90900380.0  15:30:01\n3     bj430139  华岭股份  13.66  0.86  ...  12.73   4712891.0   63247000.0  15:30:01\n4     bj430198  微创光电   0.00  0.00  ...   0.00         0.0          0.0  15:30:01\n        ...   ...    ...   ...  ...    ...         ...          ...       ...\n5311  sz301550  斯菱股份  48.53 -1.92  ...  48.50   2589623.0  127379535.0  15:35:30\n5312  sz301555  惠柏新材  42.12 -1.40  ...  41.90   3411454.0  146471807.0  15:35:45\n5313  sz301558  三态股份  14.33 -0.92  ...  14.32  21311135.0  313639930.0  15:35:00\n5314  sz301559  中集环科  19.01 -0.49  ...  19.00   2980100.0   57148056.0  15:35:15\n5315  sz301568   思泰克  49.08 -3.00  ...  48.83   9336045.0  469276460.0  15:35:30\n[5316 rows x 14 columns]\n```\n\n##### 实时行情数据-雪球\n\n接口: stock_individual_spot_xq\n\n目标地址: https://xueqiu.com/S/SH513520\n\n描述: 雪球-行情中心-个股\n\n限量: 单次获取指定 symbol 的最新行情数据\n\n输入参数\n\n| 名称      | 类型    | 描述                                                             |\n|---------|-------|----------------------------------------------------------------|\n| symbol  | str   | symbol=\"SH600000\"; 证券代码，可以是 A 股个股代码，A 股场内基金代码，A 股指数，美股代码, 美股指数 |\n| token   | float | token=None; 默认不设置token                                         |\n| timeout | float | timeout=None; 默认不设置超时参数                                        |\n\n输出参数\n\n| 名称    | 类型     | 描述 |\n|-------|--------|----|\n| item  | object | -  |\n| value | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_individual_spot_xq_df = ak.stock_individual_spot_xq(symbol=\"SH600000\")\nprint(stock_individual_spot_xq_df)\n```\n\n数据示例\n\n```\n        item                value\n0         代码             SH600000\n1      52周最高                11.02\n2        流通股          29352178996\n3         跌停                 8.69\n4         最高                10.29\n5        流通值       299392225759.0\n6     最小交易单位                  100\n7         涨跌                 0.55\n8       每股收益                 1.54\n9         昨收                 9.65\n10       成交量            149422915\n11       周转率                 0.51\n12     52周最低               6.8673\n13        名称                 浦发银行\n14       交易所                   SH\n15    市盈率(动)                6.615\n16  基金份额/总股本          29352178996\n17   净资产中的商誉             0.726713\n18        均价               10.048\n19        涨幅                  5.7\n20        振幅                  5.6\n21        现价                 10.2\n22    今年以来涨幅                -0.87\n23      发行日期  1999-11-10 00:00:00\n24        最低                 9.75\n25  资产净值/总市值       299392225759.0\n26   股息(TTM)                0.321\n27  股息率(TTM)                3.147\n28        货币                  CNY\n29     每股净资产                22.36\n30    市盈率(静)                6.615\n31       成交额         1501459278.0\n32       市净率                0.456\n33        涨停                10.62\n34  市盈率(TTM)                6.615\n35        时间  2025-04-08 15:00:00\n36        今开                 9.77\n```\n\n#### 历史行情数据\n\n##### 历史行情数据-东财\n\n接口: stock_zh_a_hist\n\n目标地址: https://quote.eastmoney.com/concept/sh603777.html?from=classic(示例)\n\n描述: 东方财富-沪深京 A 股日频率数据; 历史数据按日频率更新, 当日收盘价请在收盘后获取\n\n限量: 单次返回指定沪深京 A 股上市公司、指定周期和指定日期间的历史行情日频率数据\n\n输入参数\n\n| 名称         | 类型    | 描述                                                       |\n|------------|-------|----------------------------------------------------------|\n| symbol     | str   | symbol='603777'; 股票代码可以在 **ak.stock_zh_a_spot_em()** 中获取 |\n| period     | str   | period='daily'; choice of {'daily', 'weekly', 'monthly'} |\n| start_date | str   | start_date='20210301'; 开始查询的日期                           |\n| end_date   | str   | end_date='20210616'; 结束查询的日期                             |\n| adjust     | str   | 默认返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据               |\n| timeout    | float | timeout=None; 默认不设置超时参数                                  |\n\n**股票数据复权**\n\n1. 为何要复权：由于股票存在配股、分拆、合并和发放股息等事件，会导致股价出现较大的缺口。\n若使用不复权的价格处理数据、计算各种指标，将会导致它们失去连续性，且使用不复权价格计算收益也会出现错误。\n为了保证数据连贯性，常通过前复权和后复权对价格序列进行调整。\n\n2. 前复权：保持当前价格不变，将历史价格进行增减，从而使股价连续。\n前复权用来看盘非常方便，能一眼看出股价的历史走势，叠加各种技术指标也比较顺畅，是各种行情软件默认的复权方式。\n这种方法虽然很常见，但也有两个缺陷需要注意。\n\n    2.1 为了保证当前价格不变，每次股票除权除息，均需要重新调整历史价格，因此其历史价格是时变的。\n这会导致在不同时点看到的历史前复权价可能出现差异。\n\n    2.2 对于有持续分红的公司来说，前复权价可能出现负值。\n\n3. 后复权：保证历史价格不变，在每次股票权益事件发生后，调整当前的股票价格。\n后复权价格和真实股票价格可能差别较大，不适合用来看盘。\n其优点在于，可以被看作投资者的长期财富增长曲线，反映投资者的真实收益率情况。\n\n4. 在量化投资研究中普遍采用后复权数据。\n\n输出参数-历史行情数据\n\n| 名称   | 类型      | 描述          |\n|------|---------|-------------|\n| 日期   | object  | 交易日         |\n| 股票代码 | object  | 不带市场标识的股票代码 |\n| 开盘   | float64 | 开盘价         |\n| 收盘   | float64 | 收盘价         |\n| 最高   | float64 | 最高价         |\n| 最低   | float64 | 最低价         |\n| 成交量  | int64   | 注意单位: 手     |\n| 成交额  | float64 | 注意单位: 元     |\n| 振幅   | float64 | 注意单位: %     |\n| 涨跌幅  | float64 | 注意单位: %     |\n| 涨跌额  | float64 | 注意单位: 元     |\n| 换手率  | float64 | 注意单位: %     |\n\n接口示例-历史行情数据-不复权\n\n```python\nimport akshare as ak\n\nstock_zh_a_hist_df = ak.stock_zh_a_hist(symbol=\"000001\", period=\"daily\", start_date=\"20170301\", end_date='20240528', adjust=\"\")\nprint(stock_zh_a_hist_df)\n```\n\n数据示例-历史行情数据-不复权\n\n```\n            日期    股票代码   开盘   收盘  ... 振幅  涨跌幅  涨跌额 换手率\n0     2017-03-01  000001   9.49   9.49  ...  0.84  0.11  0.01  0.21\n1     2017-03-02  000001   9.51   9.43  ...  1.26 -0.63 -0.06  0.24\n2     2017-03-03  000001   9.41   9.40  ...  0.74 -0.32 -0.03  0.20\n3     2017-03-06  000001   9.40   9.45  ...  0.74  0.53  0.05  0.24\n4     2017-03-07  000001   9.44   9.45  ...  0.63  0.00  0.00  0.17\n...          ...     ...    ...    ...  ...   ...   ...   ...   ...\n1755  2024-05-22  000001  11.56  11.56  ...  2.42  0.09  0.01  1.09\n1756  2024-05-23  000001  11.53  11.40  ...  1.90 -1.38 -0.16  0.95\n1757  2024-05-24  000001  11.37  11.31  ...  1.67 -0.79 -0.09  0.72\n1758  2024-05-27  000001  11.31  11.51  ...  1.95  1.77  0.20  0.75\n1759  2024-05-28  000001  11.50  11.40  ...  1.91 -0.96 -0.11  0.62\n[1760 rows x 12 columns]\n```\n\n接口示例-历史行情数据-前复权\n\n```python\nimport akshare as ak\n\nstock_zh_a_hist_df = ak.stock_zh_a_hist(symbol=\"000001\", period=\"daily\", start_date=\"20170301\", end_date='20240528', adjust=\"qfq\")\nprint(stock_zh_a_hist_df)\n```\n\n数据示例-历史行情数据-前复权\n\n```\n           日期    股票代码   开盘    收盘  ...  振幅  涨跌幅  涨跌额 换手率\n0     2017-03-01  000001   8.14   8.14  ...  0.98  0.12  0.01  0.21\n1     2017-03-02  000001   8.16   8.08  ...  1.47 -0.74 -0.06  0.24\n2     2017-03-03  000001   8.06   8.05  ...  0.87 -0.37 -0.03  0.20\n3     2017-03-06  000001   8.05   8.10  ...  0.87  0.62  0.05  0.24\n4     2017-03-07  000001   8.09   8.10  ...  0.74  0.00  0.00  0.17\n...          ...     ...    ...    ...  ...   ...   ...   ...   ...\n1755  2024-05-22  000001  11.56  11.56  ...  2.42  0.09  0.01  1.09\n1756  2024-05-23  000001  11.53  11.40  ...  1.90 -1.38 -0.16  0.95\n1757  2024-05-24  000001  11.37  11.31  ...  1.67 -0.79 -0.09  0.72\n1758  2024-05-27  000001  11.31  11.51  ...  1.95  1.77  0.20  0.75\n1759  2024-05-28  000001  11.50  11.40  ...  1.91 -0.96 -0.11  0.62\n[1760 rows x 12 columns]\n```\n\n接口示例-历史行情数据-后复权\n\n```python\nimport akshare as ak\n\nstock_zh_a_hist_df = ak.stock_zh_a_hist(symbol=\"000001\", period=\"daily\", start_date=\"20170301\", end_date='20240528', adjust=\"hfq\")\nprint(stock_zh_a_hist_df)\n```\n\n数据示例-历史行情数据-后复权\n\n```\n           日期    股票代码   开盘     收盘  ...    振幅   涨跌幅   涨跌额 换手率\n0     2017-03-01  000001  1575.20  1575.20  ...  0.83  0.10   1.63  0.21\n1     2017-03-02  000001  1578.45  1565.45  ...  1.24 -0.62  -9.75  0.24\n2     2017-03-03  000001  1562.20  1560.57  ...  0.73 -0.31  -4.88  0.20\n3     2017-03-06  000001  1560.57  1568.70  ...  0.73  0.52   8.13  0.24\n4     2017-03-07  000001  1567.07  1568.70  ...  0.62  0.00   0.00  0.17\n...          ...     ...      ...      ...  ...   ...   ...    ...   ...\n1755  2024-05-22  000001  2131.04  2131.04  ...  2.14  0.08   1.62  1.09\n1756  2024-05-23  000001  2126.17  2105.04  ...  1.68 -1.22 -26.00  0.95\n1757  2024-05-24  000001  2100.16  2090.41  ...  1.47 -0.69 -14.63  0.72\n1758  2024-05-27  000001  2090.41  2122.92  ...  1.71  1.56  32.51  0.75\n1759  2024-05-28  000001  2121.29  2105.04  ...  1.68 -0.84 -17.88  0.62\n[1760 rows x 12 columns]\n```\n\n##### 历史行情数据-新浪\n\n接口: stock_zh_a_daily\n\nP.S. 建议切换为 stock_zh_a_hist 接口使用(该接口数据质量高, 访问无限制)\n\n目标地址: https://finance.sina.com.cn/realstock/company/sh600006/nc.shtml(示例)\n\n描述: 新浪财经-沪深京 A 股的数据, 历史数据按日频率更新; 注意其中的 **sh689009** 为 CDR, 请 通过 **ak.stock_zh_a_cdr_daily** 接口获取\n\n限量: 单次返回指定沪深京 A 股上市公司指定日期间的历史行情日频率数据, 多次获取容易封禁 IP\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                                   |\n|------------|-----|--------------------------------------------------------------------------------------|\n| symbol     | str | symbol='sh600000'; 股票代码可以在 **ak.stock_zh_a_spot()** 中获取                              |\n| start_date | str | start_date='20201103'; 开始查询的日期                                                       |\n| end_date   | str | end_date='20201116'; 结束查询的日期                                                         |\n| adjust     | str | 默认返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; hfq-factor: 返回后复权因子; qfq-factor: 返回前复权因子 |\n\n**股票数据复权**\n\n1.为何要复权：由于股票存在配股、分拆、合并和发放股息等事件，会导致股价出现较大的缺口。\n若使用不复权的价格处理数据、计算各种指标，将会导致它们失去连续性，且使用不复权价格计算收益也会出现错误。\n为了保证数据连贯性，常通过前复权和后复权对价格序列进行调整。\n\n2.前复权：保持当前价格不变，将历史价格进行增减，从而使股价连续。\n前复权用来看盘非常方便，能一眼看出股价的历史走势，叠加各种技术指标也比较顺畅，是各种行情软件默认的复权方式。\n这种方法虽然很常见，但也有两个缺陷需要注意。\n\n2.1 为了保证当前价格不变，每次股票除权除息，均需要重新调整历史价格，因此其历史价格是时变的。\n这会导致在不同时点看到的历史前复权价可能出现差异。\n\n2.2 对于有持续分红的公司来说，前复权价可能出现负值。\n\n3.后复权：保证历史价格不变，在每次股票权益事件发生后，调整当前的股票价格。\n后复权价格和真实股票价格可能差别较大，不适合用来看盘。\n其优点在于，可以被看作投资者的长期财富增长曲线，反映投资者的真实收益率情况。\n\n4.在量化投资研究中普遍采用后复权数据。\n\n输出参数-历史行情数据\n\n| 名称                | 类型      | 描述            |\n|-------------------|---------|---------------|\n| date              | object  | 交易日           |\n| open              | float64 | 开盘价           |\n| high              | float64 | 最高价           |\n| low               | float64 | 最低价           |\n| close             | float64 | 收盘价           |\n| volume            | float64 | 成交量; 注意单位: 股  |\n| amount            | float64 | 成交额; 注意单位: 元  |\n| outstanding_share | float64 | 流动股本; 注意单位: 股 |\n| turnover          | float64 | 换手率=成交量/流动股本  |\n\n接口示例-历史行情数据(前复权)\n\n```python\nimport akshare as ak\n\nstock_zh_a_daily_qfq_df = ak.stock_zh_a_daily(symbol=\"sz000001\", start_date=\"19910403\", end_date=\"20231027\", adjust=\"qfq\")\nprint(stock_zh_a_daily_qfq_df)\n```\n\n数据示例-历史行情数据(前复权)\n\n```\n           date   open   high  ...        amount  outstanding_share  turnover\n0    1991-04-03   0.39   0.39  ...  5.000000e+03       3.710000e+07  0.000003\n1    1991-04-04   0.39   0.39  ...  1.500000e+04       3.710000e+07  0.000008\n2    1991-04-05   0.38   0.38  ...  1.000000e+04       3.710000e+07  0.000005\n3    1991-04-08   0.38   0.38  ...  1.000000e+04       3.710000e+07  0.000005\n4    1991-04-09   0.38   0.38  ...  1.900000e+04       3.710000e+07  0.000011\n         ...    ...    ...  ...           ...                ...       ...\n7730 2023-10-23  10.59  10.60  ...  5.570322e+08       1.940555e+10  0.002733\n7731 2023-10-24  10.54  10.61  ...  8.015284e+08       1.940555e+10  0.003920\n7732 2023-10-25  10.51  10.54  ...  1.470972e+09       1.940555e+10  0.007273\n7733 2023-10-26  10.31  10.42  ...  6.219153e+08       1.940555e+10  0.003092\n7734 2023-10-27  10.38  10.48  ...  9.575875e+08       1.940555e+10  0.004740\n[7735 rows x 9 columns]\n```\n\n接口示例-历史行情数据(后复权)\n\n```python\nimport akshare as ak\n\nstock_zh_a_daily_hfq_df = ak.stock_zh_a_daily(symbol=\"sz000001\", start_date=\"19910403\", end_date=\"20231027\", adjust=\"hfq\")\nprint(stock_zh_a_daily_hfq_df)\n```\n\n数据示例-历史行情数据(后复权)\n\n```\n           date     open     high  ...        amount  outstanding_share  turnover\n0    1991-04-03    49.00    49.00  ...  5.000000e+03       3.710000e+07  0.000003\n1    1991-04-04    48.76    48.76  ...  1.500000e+04       3.710000e+07  0.000008\n2    1991-04-05    48.52    48.52  ...  1.000000e+04       3.710000e+07  0.000005\n3    1991-04-08    48.04    48.04  ...  1.000000e+04       3.710000e+07  0.000005\n4    1991-04-09    47.80    47.80  ...  1.900000e+04       3.710000e+07  0.000011\n         ...      ...      ...  ...           ...                ...       ...\n7730 2023-10-23  1341.02  1342.28  ...  5.570322e+08       1.940555e+10  0.002733\n7731 2023-10-24  1334.69  1343.55  ...  8.015284e+08       1.940555e+10  0.003920\n7732 2023-10-25  1330.89  1334.69  ...  1.470972e+09       1.940555e+10  0.007273\n7733 2023-10-26  1305.56  1319.49  ...  6.219153e+08       1.940555e+10  0.003092\n7734 2023-10-27  1314.42  1327.09  ...  9.575875e+08       1.940555e+10  0.004740\n[7735 rows x 9 columns]\n```\n\n接口示例-前复权因子\n\n```python\nimport akshare as ak\n\nqfq_factor_df = ak.stock_zh_a_daily(symbol=\"sz000002\", adjust=\"qfq-factor\")\nprint(qfq_factor_df)\n```\n\n数据示例-前复权因子\n\n```\n         date            qfq_factor\n0  2023-08-25    1.0000000000000000\n1  2022-08-25    1.0517754291451000\n2  2021-08-25    1.1168798473057000\n3  2020-08-14    1.1810093745970000\n4  2019-08-15    1.2245366427798000\n5  2018-08-23    1.2735981991808000\n6  2017-08-29    1.3233913520593000\n7  2016-07-29    1.3684162947004000\n8  2015-07-21    1.4256988372693000\n9  2014-05-08    1.4737021651235000\n10 2013-05-16    1.5546965200431000\n11 2012-07-05    1.5798398599899000\n12 2011-05-27    1.6027105929296000\n13 2010-05-18    1.6232581646338000\n14 2009-06-08    1.6398462042724000\n15 2008-06-16    1.6475522484654000\n16 2007-05-16    2.6521572780175000\n17 2006-07-21    4.0043855834397000\n18 2005-06-29    4.1056769557021000\n19 2004-05-26    6.3462750504298000\n20 2003-05-23    9.5848830885446000\n21 2002-07-17   19.4514673699928000\n22 2001-08-21   19.7687833140383020\n23 2000-08-17   20.0160648287379000\n24 2000-01-10   20.2241320306998030\n25 1999-08-06   21.7007260053956000\n26 1998-07-10   24.0549868667835000\n27 1997-07-14   26.7769985385511000\n28 1997-06-27   31.2296603923877000\n29 1996-08-06   36.0689784010141000\n30 1995-07-04   40.3371408451341000\n31 1994-06-21   47.9136235499274000\n32 1993-04-05   65.9178076663026900\n33 1992-03-30   99.0712868582592000\n34 1991-06-10  118.8855442299110900\n35 1991-01-29  169.1453113717332000\n36 1900-01-01  169.1453113717332000\n```\n\n接口示例-后复权因子\n\n```python\nimport akshare as ak\n\nhfq_factor_df = ak.stock_zh_a_daily(symbol=\"sz000002\", adjust=\"hfq-factor\")\nprint(hfq_factor_df)\n```\n\n数据示例-后复权因子\n\n```\n         date            hfq_factor\n0  2023-08-25  169.1453113717332000\n1  2022-08-25  160.8188465756604000\n2  2021-08-25  151.4445011965874000\n3  2020-08-14  143.2209726780933200\n4  2019-08-15  138.1300530033661900\n5  2018-08-23  132.8090063887726200\n6  2017-08-29  127.8120120012352000\n7  2016-07-29  123.6066188533395000\n8  2015-07-21  118.6402814886964000\n9  2014-05-08  114.7757772056770000\n10 2013-05-16  108.7963529802224000\n11 2012-07-05  107.0648460362401000\n12 2011-05-27  105.5370271575670000\n13 2010-05-18  104.2011154213954000\n14 2009-06-08  103.1470578954563000\n15 2008-06-16  102.6646114132513100\n16 2007-05-16   63.7765010294439100\n17 2006-07-21   42.2400160641971000\n18 2005-06-29   41.1979104047185000\n19 2004-05-26   26.6526915438809980\n20 2003-05-23   17.6470917599285000\n21 2002-07-17    8.6957610011813000\n22 2001-08-21    8.5561821729119010\n23 2000-08-17    8.4504777946604000\n24 2000-01-10    8.3635387226989000\n25 1999-08-06    7.7944540348408990\n26 1998-07-10    7.0316110463273000\n27 1997-07-14    6.3168137059205000\n28 1997-06-27    5.4161751759863000\n29 1996-08-06    4.6894954853220000\n30 1995-07-04    4.1932895546844000\n31 1994-06-21    3.5302133055222000\n32 1993-04-05    2.5660032904614000\n33 1992-03-30    1.7073091178651000\n34 1991-06-10    1.4227575982209000\n35 1991-01-29    1.0000000000000000\n36 1900-01-01    1.0000000000000000\n```\n\n##### 历史行情数据-腾讯\n\n接口: stock_zh_a_hist_tx\n\n目标地址: https://gu.qq.com/sh000919/zs\n\n描述: 腾讯证券-日频-股票历史数据; 历史数据按日频率更新, 当日收盘价请在收盘后获取\n\n限量: 单次返回指定沪深京 A 股上市公司、指定周期和指定日期间的历史行情日频率数据\n\n输入参数\n\n| 名称         | 类型    | 描述                                         |\n|------------|-------|--------------------------------------------|\n| symbol     | str   | symbol='sz000001'; 带市场标识                   |\n| start_date | str   | start_date='19000101'; 开始查询的日期             |\n| end_date   | str   | end_date='20500101'; 结束查询的日期               |\n| adjust     | str   | 默认返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据 |\n| timeout    | float | timeout=None; 默认不设置超时参数                    |\n\n**股票数据复权**\n\n1.为何要复权：由于股票存在配股、分拆、合并和发放股息等事件，会导致股价出现较大的缺口。\n若使用不复权的价格处理数据、计算各种指标，将会导致它们失去连续性，且使用不复权价格计算收益也会出现错误。\n为了保证数据连贯性，常通过前复权和后复权对价格序列进行调整。\n\n2.前复权：保持当前价格不变，将历史价格进行增减，从而使股价连续。\n前复权用来看盘非常方便，能一眼看出股价的历史走势，叠加各种技术指标也比较顺畅，是各种行情软件默认的复权方式。\n这种方法虽然很常见，但也有两个缺陷需要注意。\n\n2.1 为了保证当前价格不变，每次股票除权除息，均需要重新调整历史价格，因此其历史价格是时变的。\n这会导致在不同时点看到的历史前复权价可能出现差异。\n\n2.2 对于有持续分红的公司来说，前复权价可能出现负值。\n\n3.后复权：保证历史价格不变，在每次股票权益事件发生后，调整当前的股票价格。\n后复权价格和真实股票价格可能差别较大，不适合用来看盘。\n其优点在于，可以被看作投资者的长期财富增长曲线，反映投资者的真实收益率情况。\n\n4.在量化投资研究中普遍采用后复权数据。\n\n输出参数-历史行情数据\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| date   | object  | 交易日     |\n| open   | float64 | 开盘价     |\n| close  | float64 | 收盘价     |\n| high   | float64 | 最高价     |\n| low    | float64 | 最低价     |\n| amount | int64   | 注意单位: 手 |\n\n接口示例-不复权\n\n```python\nimport akshare as ak\n\nstock_zh_a_hist_tx_df = ak.stock_zh_a_hist_tx(symbol=\"sz000001\", start_date=\"20200101\", end_date=\"20231027\", adjust=\"\")\nprint(stock_zh_a_hist_tx_df)\n```\n\n数据示例-不复权\n\n```\n     date   open  close   high    low      amount\n0    2020-01-02  16.65  16.87  16.95  16.55  1530231.87\n1    2020-01-03  16.94  17.18  17.31  16.92  1116194.81\n2    2020-01-06  17.01  17.07  17.34  16.91   862083.50\n3    2020-01-07  17.13  17.15  17.28  16.95   728607.56\n4    2020-01-08  17.00  16.66  17.05  16.63   847824.12\n..          ...    ...    ...    ...    ...         ...\n920  2023-10-23  10.59  10.50  10.60  10.43   530404.00\n921  2023-10-24  10.54  10.55  10.61  10.44   760653.00\n922  2023-10-25  10.51  10.38  10.54  10.36  1411450.00\n923  2023-10-26  10.31  10.41  10.42  10.30   599991.00\n924  2023-10-27  10.38  10.45  10.48  10.33   919771.00\n[925 rows x 6 columns]\n```\n\n接口示例-前复权\n\n```python\nimport akshare as ak\n\nstock_zh_a_hist_tx_df = ak.stock_zh_a_hist_tx(symbol=\"sz000001\", start_date=\"20200101\", end_date=\"20231027\", adjust=\"qfq\")\nprint(stock_zh_a_hist_tx_df)\n```\n\n数据示例-前复权\n\n```\n     date   open  close   high    low      amount\n0    2020-01-02  15.74  15.96  16.04  15.64  1530231.87\n1    2020-01-03  16.03  16.27  16.40  16.01  1116194.81\n2    2020-01-06  16.10  16.16  16.43  16.00   862083.50\n3    2020-01-07  16.22  16.24  16.37  16.04   728607.56\n4    2020-01-08  16.09  15.75  16.14  15.72   847824.12\n..          ...    ...    ...    ...    ...         ...\n920  2023-10-23  10.59  10.50  10.60  10.43   530404.00\n921  2023-10-24  10.54  10.55  10.61  10.44   760653.00\n922  2023-10-25  10.51  10.38  10.54  10.36  1411450.00\n923  2023-10-26  10.31  10.41  10.42  10.30   599991.00\n924  2023-10-27  10.38  10.45  10.48  10.33   919771.00\n[925 rows x 6 columns]\n```\n\n接口示例-后复权\n\n```python\nimport akshare as ak\n\nstock_zh_a_hist_tx_df = ak.stock_zh_a_hist_tx(symbol=\"sz000001\", start_date=\"20200101\", end_date=\"20231027\", adjust=\"hfq\")\nprint(stock_zh_a_hist_tx_df)\n```\n\n数据示例-后复权\n\n```\n     date     open    close     high      low      amount\n0    2020-01-02  1880.18  1904.07  1912.76  1869.33  1530231.87\n1    2020-01-03  1911.67  1937.73  1951.85  1909.50  1116194.81\n2    2020-01-06  1919.27  1925.79  1955.11  1908.42   862083.50\n3    2020-01-07  1932.30  1934.48  1948.59  1912.76   728607.56\n4    2020-01-08  1918.19  1881.27  1923.62  1878.01   847824.12\n..          ...      ...      ...      ...      ...         ...\n920  2023-10-23  1321.10  1311.33  1322.19  1303.73   530404.00\n921  2023-10-24  1315.67  1316.76  1323.27  1304.81   760653.00\n922  2023-10-25  1312.41  1298.30  1315.67  1296.13  1411450.00\n923  2023-10-26  1290.70  1301.56  1302.64  1289.61   599991.00\n924  2023-10-27  1298.30  1305.90  1309.16  1292.87   919771.00\n[925 rows x 6 columns]\n```\n\n##### 分时数据-新浪\n\n接口: stock_zh_a_minute\n\n目标地址: http://finance.sina.com.cn/realstock/company/sh600519/nc.shtml\n\n描述: 新浪财经-沪深京 A 股股票或者指数的分时数据，目前可以获取 1, 5, 15, 30, 60 分钟的数据频率, 可以指定是否复权\n\n限量: 单次返回指定股票或指数的指定频率的最近交易日的历史分时行情数据; 注意调用频率\n\n输入参数\n\n| 名称     | 类型  | 描述                                                         |\n|--------|-----|------------------------------------------------------------|\n| symbol | str | symbol='sh000300'; 同日频率数据接口                                |\n| period | str | period='1'; 获取 1, 5, 15, 30, 60 分钟的数据频率                    |\n| adjust | str | adjust=\"\"; 默认为空: 返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| day    | object  | -   |\n| open   | float64 | -   |\n| high   | float64 | -   |\n| low    | float64 | -   |\n| close  | float64 | -   |\n| volume | float64 | -   |\n| amount | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_a_minute_df = ak.stock_zh_a_minute(symbol='sh600751', period='1', adjust=\"qfq\")\nprint(stock_zh_a_minute_df)\n```\n\n数据示例\n\n```\n                      day  open  high   low  close  volume        amount\n0     2026-02-05 13:53:00  3.91  3.91  3.90   3.90   20900    81593.0000\n1     2026-02-05 13:54:00  3.91  3.91  3.90   3.91   18700    73076.0000\n2     2026-02-05 13:55:00  3.91  3.91  3.90   3.91   12500    48832.0000\n3     2026-02-05 13:56:00  3.90  3.91  3.90   3.90   13600    53093.0000\n4     2026-02-05 13:57:00  3.90  3.91  3.90   3.90   36200   141190.0000\n...                   ...   ...   ...   ...    ...     ...           ...\n1965  2026-02-25 14:54:00  4.20  4.20  4.19   4.20  113600   476800.9888\n1966  2026-02-25 14:55:00  4.19  4.20  4.19   4.19  255900  1073360.9803\n1967  2026-02-25 14:56:00  4.20  4.21  4.19   4.21  745311  3132349.1281\n1968  2026-02-25 14:57:00  4.21  4.22  4.20   4.21  367300  1545926.9902\n1969  2026-02-25 15:00:00  4.20  4.20  4.20   4.20  845635  3551666.8430\n[1970 rows x 7 columns]\n```\n\n##### 分时数据-东财\n\n接口: stock_zh_a_hist_min_em\n\n目标地址: https://quote.eastmoney.com/concept/sh603777.html\n\n描述: 东方财富网-行情首页-沪深京 A 股-每日分时行情; 该接口只能获取近期的分时数据，注意时间周期的设置\n\n限量: 单次返回指定股票、频率、复权调整和时间区间的分时数据, 其中 1 分钟数据只返回近 5 个交易日数据且不复权\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                                                  |\n|------------|-----|-----------------------------------------------------------------------------------------------------|\n| symbol     | str | symbol='000300'; 股票代码                                                                               |\n| start_date | str | start_date=\"1979-09-01 09:32:00\"; 日期时间; 默认返回所有数据                                                    |\n| end_date   | str | end_date=\"2222-01-01 09:32:00\"; 日期时间; 默认返回所有数据                                                      |\n| period     | str | period='5'; choice of {'1', '5', '15', '30', '60'}; 其中 1 分钟数据返回近 5 个交易日数据且不复权                       |\n| adjust     | str | adjust=''; choice of {'', 'qfq', 'hfq'}; '': 不复权, 'qfq': 前复权, 'hfq': 后复权, 其中 1 分钟数据返回近 5 个交易日数据且不复权 |\n\n输出参数-1分钟数据\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 时间  | object  | -       |\n| 开盘  | float64 | -       |\n| 收盘  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 成交量 | float64 | 注意单位: 手 |\n| 成交额 | float64 | -       |\n| 均价  | float64 | -       |\n\n接口示例-1分钟数据\n\n```python\nimport akshare as ak\n\n# 注意：该接口返回的数据只有最近一个交易日的有开盘价，其他日期开盘价为 0\nstock_zh_a_hist_min_em_df = ak.stock_zh_a_hist_min_em(symbol=\"000001\", start_date=\"2024-03-20 09:30:00\", end_date=\"2024-03-20 15:00:00\", period=\"1\", adjust=\"\")\nprint(stock_zh_a_hist_min_em_df)\n```\n\n数据示例-1分钟数据\n\n```\n               时间     开盘     收盘     最高     最低    成交量    成交额     均价\n0    2024-03-20 09:30:00  10.38  10.38  10.38  10.38   7174   7446612.0  10.380\n1    2024-03-20 09:31:00  10.38  10.40  10.40  10.38  12967  13471486.0  10.386\n2    2024-03-20 09:32:00  10.40  10.41  10.41  10.39  10409  10824353.0  10.390\n3    2024-03-20 09:33:00  10.41  10.41  10.41  10.40   4896   5095656.0  10.393\n4    2024-03-20 09:34:00  10.40  10.39  10.41  10.39   7060   7341787.0  10.394\n..                   ...    ...    ...    ...    ...    ...         ...     ...\n236  2024-03-20 14:56:00  10.44  10.44  10.45  10.44   2646   2762914.0  10.431\n237  2024-03-20 14:57:00  10.44  10.44  10.45  10.44   7613   7951367.0  10.431\n238  2024-03-20 14:58:00  10.45  10.45  10.45  10.45    110    114850.0  10.431\n239  2024-03-20 14:59:00  10.45  10.45  10.45  10.45      0         0.0  10.431\n240  2024-03-20 15:00:00  10.45  10.45  10.45  10.45  13079  13667555.0  10.431\n[241 rows x 8 columns]\n```\n\n输出参数-其他\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 时间  | object  | -       |\n| 开盘  | float64 | -       |\n| 收盘  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 涨跌额 | float64 | -       |\n| 成交量 | float64 | 注意单位: 手 |\n| 成交额 | float64 | -       |\n| 振幅  | float64 | 注意单位: % |\n| 换手率 | float64 | 注意单位: % |\n\n接口示例-其他\n\n```python\nimport akshare as ak\n\nstock_zh_a_hist_min_em_df = ak.stock_zh_a_hist_min_em(symbol=\"000001\", start_date=\"2024-03-20 09:30:00\", end_date=\"2024-03-20 15:00:00\", period=\"5\", adjust=\"hfq\")\nprint(stock_zh_a_hist_min_em_df)\n```\n\n数据示例-其他\n\n```\n             时间       开盘       收盘  ...         成交额    振幅   换手率\n0   2024-03-20 09:35:00  1939.26  1940.89  ...  53652034.0  0.25  0.03\n1   2024-03-20 09:40:00  1939.26  1940.89  ...  27557310.0  0.17  0.01\n2   2024-03-20 09:45:00  1939.26  1939.26  ...  11556035.0  0.08  0.01\n3   2024-03-20 09:50:00  1940.89  1945.76  ...  27377765.0  0.42  0.01\n4   2024-03-20 09:55:00  1947.39  1944.14  ...  37867949.0  0.17  0.02\n5   2024-03-20 10:00:00  1945.76  1947.39  ...  27334901.0  0.25  0.01\n6   2024-03-20 10:05:00  1945.76  1945.76  ...  14407157.0  0.17  0.01\n7   2024-03-20 10:10:00  1944.14  1950.64  ...  46100711.0  0.33  0.02\n8   2024-03-20 10:15:00  1950.64  1949.01  ...  35531670.0  0.25  0.02\n9   2024-03-20 10:20:00  1949.01  1945.76  ...  20072949.0  0.17  0.01\n10  2024-03-20 10:25:00  1947.39  1945.76  ...  11039368.0  0.17  0.01\n11  2024-03-20 10:30:00  1945.76  1942.51  ...  29766381.0  0.17  0.01\n12  2024-03-20 10:35:00  1942.51  1942.51  ...   9093103.0  0.08  0.00\n13  2024-03-20 10:40:00  1944.14  1944.14  ...   9585217.0  0.17  0.00\n14  2024-03-20 10:45:00  1944.14  1944.14  ...   9546537.0  0.17  0.00\n15  2024-03-20 10:50:00  1944.14  1945.76  ...   9917328.0  0.08  0.00\n16  2024-03-20 10:55:00  1945.76  1942.51  ...  10891142.0  0.17  0.01\n17  2024-03-20 11:00:00  1944.14  1944.14  ...   7600144.0  0.08  0.00\n18  2024-03-20 11:05:00  1944.14  1944.14  ...   7900327.0  0.17  0.00\n19  2024-03-20 11:10:00  1942.51  1944.14  ...   7612710.0  0.08  0.00\n20  2024-03-20 11:15:00  1942.51  1949.01  ...  47061728.0  0.42  0.02\n21  2024-03-20 11:20:00  1950.64  1947.39  ...  19120650.0  0.25  0.01\n22  2024-03-20 11:25:00  1947.39  1952.26  ...  58101226.0  0.33  0.03\n23  2024-03-20 11:30:00  1953.89  1952.26  ...  36299314.0  0.17  0.02\n24  2024-03-20 13:05:00  1952.26  1950.64  ...  49781778.0  0.33  0.02\n25  2024-03-20 13:10:00  1950.64  1949.01  ...  25451905.0  0.25  0.01\n26  2024-03-20 13:15:00  1949.01  1949.01  ...  17763129.0  0.17  0.01\n27  2024-03-20 13:20:00  1949.01  1950.64  ...  17839258.0  0.17  0.01\n28  2024-03-20 13:25:00  1949.01  1950.64  ...  13335325.0  0.17  0.01\n29  2024-03-20 13:30:00  1950.64  1949.01  ...   5756958.0  0.08  0.00\n30  2024-03-20 13:35:00  1949.01  1950.64  ...   4852792.0  0.08  0.00\n31  2024-03-20 13:40:00  1950.64  1950.64  ...  16137370.0  0.17  0.01\n32  2024-03-20 13:45:00  1949.01  1949.01  ...   4450010.0  0.08  0.00\n33  2024-03-20 13:50:00  1949.01  1950.64  ...   4778321.0  0.08  0.00\n34  2024-03-20 13:55:00  1949.01  1949.01  ...  12025904.0  0.17  0.01\n35  2024-03-20 14:00:00  1947.39  1949.01  ...   3459610.0  0.08  0.00\n36  2024-03-20 14:05:00  1947.39  1949.01  ...   7610675.0  0.17  0.00\n37  2024-03-20 14:10:00  1950.64  1950.64  ...  13966439.0  0.17  0.01\n38  2024-03-20 14:15:00  1950.64  1952.26  ...   5955098.0  0.08  0.00\n39  2024-03-20 14:20:00  1950.64  1950.64  ...  17385018.0  0.17  0.01\n40  2024-03-20 14:25:00  1949.01  1950.64  ...   4410047.0  0.08  0.00\n41  2024-03-20 14:30:00  1950.64  1947.39  ...  14639483.0  0.17  0.01\n42  2024-03-20 14:35:00  1949.01  1947.39  ...  13156283.0  0.08  0.01\n43  2024-03-20 14:40:00  1949.01  1949.01  ...  12261331.0  0.08  0.01\n44  2024-03-20 14:45:00  1949.01  1950.64  ...  10861743.0  0.08  0.01\n45  2024-03-20 14:50:00  1949.01  1950.64  ...  22807259.0  0.17  0.01\n46  2024-03-20 14:55:00  1950.64  1949.01  ...  12102477.0  0.08  0.01\n47  2024-03-20 15:00:00  1949.01  1950.64  ...  24496686.0  0.08  0.01\n[48 rows x 11 columns]\n```\n\n##### 日内分时数据-东财\n\n接口: stock_intraday_em\n\n目标地址: https://quote.eastmoney.com/f1.html?newcode=0.000001\n\n描述: 东方财富-分时数据\n\n限量: 单次返回指定股票最近一个交易日的分时数据, 包含盘前数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                  |\n|------------|-----|-------------------------------------|\n| symbol     | str | symbol=\"000001\"; 股票代码               |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| 时间    | object  | -  |\n| 成交价   | float64 | -  |\n| 手数    | int64   | -  |\n| 买卖盘性质 | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_intraday_em_df = ak.stock_intraday_em(symbol=\"000001\")\nprint(stock_intraday_em_df)\n```\n\n数据示例\n\n```\n         时间    成交价    手数 买卖盘性质\n0     09:15:00  10.60    11   中性盘\n1     09:15:09  10.57  1547   中性盘\n2     09:15:18  10.57  1549   中性盘\n3     09:15:27  10.57  1549   中性盘\n4     09:15:36  10.57  1552   中性盘\n        ...    ...   ...   ...\n4396  14:56:51  10.50    30    买盘\n4397  14:56:54  10.49   109    卖盘\n4398  14:56:57  10.49    27    卖盘\n4399  14:57:00  10.50    68    买盘\n4400  15:00:00  10.50  8338    买盘\n[4401 rows x 4 columns]\n```\n\n##### 日内分时数据-新浪\n\n接口: stock_intraday_sina\n\n目标地址: https://vip.stock.finance.sina.com.cn/quotes_service/view/cn_bill.php?symbol=sz000001\n\n描述: 新浪财经-日内分时数据\n\n限量: 单次返回指定交易日的分时数据；只能获取近期的数据，此处仅返回大单数据（成交量大于等于: 400手）\n\n输入参数\n\n| 名称     | 类型  | 描述                            |\n|--------|-----|-------------------------------|\n| symbol | str | symbol=\"sz000001\"; 带市场标识的股票代码 |\n| date   | str | date=\"20240321\"; 交易日          |\n\n输出参数\n\n| 名称         | 类型      | 描述            |\n|------------|---------|---------------|\n| symbol     | object  | -             |\n| name       | object  | -             |\n| ticktime   | object  | -             |\n| price      | float64 | -             |\n| volume     | int64   | 注意单位: 股       |\n| prev_price | float64 | -             |\n| kind       | object  | D 表示卖盘，表示 是买盘 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_intraday_sina_df = ak.stock_intraday_sina(symbol=\"sz000001\", date=\"20240321\")\nprint(stock_intraday_sina_df)\n```\n\n数据示例\n\n```\n        symbol  name  ticktime  price   volume  prev_price kind\n0    sz000001  平安银行  09:25:00  10.45   437400        0.00    U\n1    sz000001  平安银行  09:30:00  10.44    29100       10.45    D\n2    sz000001  平安银行  09:30:03  10.45   356400       10.44    U\n3    sz000001  平安银行  09:30:06  10.45    65500       10.45    D\n4    sz000001  平安银行  09:30:09  10.46    35800       10.45    U\n..        ...   ...       ...    ...      ...         ...  ...\n818  sz000001  平安银行  14:56:03  10.46    22100       10.46    D\n819  sz000001  平安银行  14:56:18  10.47    20700       10.46    U\n820  sz000001  平安银行  14:56:24  10.47   156000       10.47    U\n821  sz000001  平安银行  14:56:45  10.46    78900       10.47    D\n822  sz000001  平安银行  15:00:00  10.47  1472200       10.46    E\n[823 rows x 7 columns]\n```\n\n##### 盘前数据\n\n接口: stock_zh_a_hist_pre_min_em\n\n目标地址: https://quote.eastmoney.com/concept/sh603777.html\n\n描述: 东方财富-股票行情-盘前数据\n\n限量: 单次返回指定 symbol 的最近一个交易日的股票分钟数据, 包含盘前分钟数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                  |\n|------------|-----|-------------------------------------|\n| symbol     | str | symbol=\"000001\"; 股票代码               |\n| start_time | str | start_time=\"09:00:00\"; 时间; 默认返回所有数据 |\n| end_time   | str | end_time=\"15:40:00\"; 时间; 默认返回所有数据   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 时间  | object  | -       |\n| 开盘  | float64 | -       |\n| 收盘  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 成交量 | float64 | 注意单位: 手 |\n| 成交额 | float64 | -       |\n| 最新价 | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_a_hist_pre_min_em_df = ak.stock_zh_a_hist_pre_min_em(symbol=\"000001\", start_time=\"09:00:00\", end_time=\"15:40:00\")\nprint(stock_zh_a_hist_pre_min_em_df)\n```\n\n数据示例\n\n```\n          时间             开盘  收盘   最高  最低    成交量    成交额  最新价\n0    2023-12-11 09:15:00  9.30  9.30  9.30  9.30     0        0.0  9.300\n1    2023-12-11 09:16:00  9.25  9.28  9.28  9.25     0        0.0  9.300\n2    2023-12-11 09:17:00  9.28  9.28  9.28  9.28     0        0.0  9.300\n3    2023-12-11 09:18:00  9.28  9.28  9.28  9.28     0        0.0  9.300\n4    2023-12-11 09:19:00  9.28  9.27  9.28  9.27     0        0.0  9.300\n..                   ...   ...   ...   ...   ...   ...        ...    ...\n251  2023-12-11 14:56:00  9.35  9.35  9.35  9.34  7793  7283721.0  9.214\n252  2023-12-11 14:57:00  9.34  9.36  9.36  9.34  5169  4833563.0  9.215\n253  2023-12-11 14:58:00  9.36  9.36  9.36  9.36    22    20592.0  9.215\n254  2023-12-11 14:59:00  9.36  9.36  9.36  9.36     0        0.0  9.215\n255  2023-12-11 15:00:00  9.35  9.35  9.35  9.35  7138  6674030.0  9.216\n[256 rows x 8 columns]\n```\n\n#### 历史分笔数据\n\n##### 腾讯财经\n\n接口: stock_zh_a_tick_tx\n\n目标地址: http://gu.qq.com/sz300494/gp/detail(示例)\n\n描述: 每个交易日 16:00 提供当日数据; 如遇到数据缺失, 请使用 **ak.stock_zh_a_tick_163()** 接口(注意数据会有一定差异)\n\n限量: 单次返回最近交易日的历史分笔行情数据\n\n输入参数-历史行情数据\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| symbol     | str | symbol=\"sh600000\"     |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 成交时间 | object  | -       |\n| 成交价格 | float64 | 注意单位: 元 |\n| 价格变动 | float64 | 注意单位: 元 |\n| 成交量  | int32   | 注意单位: 手 |\n| 成交额  | int32   | 注意单位: 元 |\n| 性质   | object  | 买卖盘标记   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_a_tick_tx_js_df = ak.stock_zh_a_tick_tx_js(symbol=\"sz000001\")\nprint(stock_zh_a_tick_tx_js_df)\n```\n\n数据示例\n\n```\n      成交时间  成交价格  价格变动  成交量  成交额 性质\n0     09:25:04  3.45  0.01       4    1380   卖盘\n1     09:30:02  3.46  0.01       1     346   买盘\n2     09:30:08  3.46  0.00      20    6920   买盘\n3     09:30:20  3.46  0.00      28    9688   买盘\n4     09:30:23  3.46  0.00      25    8665   买盘\n        ...   ...   ...     ...     ...  ..\n1405  14:59:29  3.51 -0.02      14    4914   卖盘\n1406  14:59:50  3.51  0.00       5    1755   卖盘\n1407  14:59:50  3.52  0.01      69   24288   买盘\n1408  14:59:59  3.51 -0.01     100   35100   卖盘\n1409  15:00:02  3.52  0.01      10    3520   买盘\n```\n\n\n#### 同行比较\n\n##### 成长性比较\n\n接口: stock_zh_growth_comparison_em\n\n目标地址: https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=000895&color=b#/thbj/czxbj\n\n描述: 东方财富-行情中心-同行比较-成长性比较\n\n限量: 单次返回全部数据\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| symbol     | str | symbol=\"SZ000895\"     |\n\n输出参数\n\n| 名称               | 类型      | 描述 |\n|------------------|---------|----|\n| 代码               | object  | -  |\n| 简称               | object  | -  |\n| 基本每股收益增长率-3年复合   | float64 | -  |\n| 基本每股收益增长率-24A    | float64 | -  |\n| 基本每股收益增长率-TTM    | float64 | -  |\n| 基本每股收益增长率-25E    | float64 | -  |\n| 基本每股收益增长率-26E    | float64 | -  |\n| 基本每股收益增长率-27E    | float64 | -  |\n| 营业收入增长率-3年复合     | float64 | -  |\n| 营业收入增长率-24A      | float64 | -  |\n| 营业收入增长率-TTM      | float64 | -  |\n| 营业收入增长率-25E      | float64 | -  |\n| 营业收入增长率-26E      | float64 | -  |\n| 营业收入增长率-27E      | float64 | -  |\n| 净利润增长率-3年复合      | float64 | -  |\n| 净利润增长率-24A       | float64 | -  |\n| 净利润增长率-TTM       | float64 | -  |\n| 净利润增长率-25E       | float64 | -  |\n| 净利润增长率-26E       | float64 | -  |\n| 净利润增长率-27E       | float64 | -  |\n| 基本每股收益增长率-3年复合排名 | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_growth_comparison_em_df = ak.stock_zh_growth_comparison_em(symbol=\"SZ000895\")\nprint(stock_zh_growth_comparison_em_df)\n```\n\n数据示例\n\n```\n       代码    简称  基本每股收益增长率-3年复合  ...  净利润增长率-26E  净利润增长率-27E  基本每股收益增长率-3年复合排名\n0    行业中值  行业中值       -8.790000  ...   21.290000   16.135000               NaN\n1    行业平均  行业平均      -31.127395  ...   57.622875   18.847125               NaN\n2  600530  交大昂立       81.710000  ...         NaN         NaN               1.0\n3  600186  莲花控股       58.740000  ...   28.700000   22.480000               2.0\n4  600962  国投中鲁       51.860000  ...         NaN         NaN               3.0\n5  600737  中粮糖业       48.850000  ...   39.030000   22.690000               4.0\n6  003000  劲仔食品       46.100000  ...   22.070000   17.520000               5.0\n7  000895  双汇发展        0.840000  ...    4.320000    3.980000              38.0\n[8 rows x 21 columns]\n```\n\n##### 估值比较\n\n接口: stock_zh_valuation_comparison_em\n\n目标地址: https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=000895&color=b#/thbj/gzbj\n\n描述: 东方财富-行情中心-同行比较-估值比较\n\n限量: 单次返回全部数据\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| symbol     | str | symbol=\"SZ000895\"     |\n\n输出参数\n\n| 名称            | 类型      | 描述 |\n|---------------|---------|----|\n| 排名            | object  | -  |\n| 代码            | object  | -  |\n| 简称            | object  | -  |\n| PEG           | float64 | -  |\n| 市盈率-24A       | float64 | -  |\n| 市盈率-TTM       | float64 | -  |\n| 市盈率-25E       | float64 | -  |\n| 市盈率-26E       | float64 | -  |\n| 市盈率-27E       | float64 | -  |\n| 市销率-24A       | float64 | -  |\n| 市销率-TTM       | float64 | -  |\n| 市销率-25E       | float64 | -  |\n| 市销率-26E       | float64 | -  |\n| 市销率-27E       | float64 | -  |\n| 市净率-24A       | float64 | -  |\n| 市净率-MRQ       | float64 | -  |\n| 市现率1-24A      | float64 | -  |\n| 市现率1-TTM      | float64 | -  |\n| 市现率2-24A      | float64 | -  |\n| 市现率2-TTM      | float64 | -  |\n| EV/EBITDA-24A | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_valuation_comparison_em_df = ak.stock_zh_valuation_comparison_em(symbol=\"SZ000895\")\nprint(stock_zh_valuation_comparison_em_df)\n```\n\n数据示例\n\n```\n         排名      代码    简称  ...     市现率2-24A     市现率2-TTM  EV/EBITDA-24A\n0  42.0/120  000895  双汇发展  ...    29.790457 -1045.264127      12.503574\n1       nan    行业平均  行业平均  ...  1036.299305   -81.550319      12.794686\n2       nan    行业中值  行业中值  ...   -11.801449   -13.610393      18.565517\n3       1.0  920786  骑士乳业  ...   -10.676185   -23.320786      14.613055\n4       2.0  002852   道道全  ...    94.382638   -14.822839      10.933433\n5       3.0  002840  华统股份  ...   -62.597528    39.150932      19.671557\n6       4.0  605077  华康股份  ...    -2.588921   -50.802629      15.723042\n7       5.0  002286   保龄宝  ...   257.860564  -114.930447      12.453163\n[8 rows x 20 columns]\n```\n\n##### 杜邦分析比较\n\n接口: stock_zh_dupont_comparison_em\n\n目标地址: https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=000895&color=b#/thbj/dbfxbj\n\n描述: 东方财富-行情中心-同行比较-杜邦分析比较\n\n限量: 单次返回全部数据\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| symbol     | str | symbol=\"SZ000895\"     |\n\n输出参数\n\n| 名称          | 类型      | 描述 |\n|-------------|---------|----|\n| 代码          | object  | -  |\n| 简称          | object  | -  |\n| ROE-3年平均    | float64 | -  |\n| ROE-22A     | float64 | -  |\n| ROE-23A     | float64 | -  |\n| ROE-24A     | float64 | -  |\n| 净利率-3年平均    | float64 | -  |\n| 净利率-22A     | float64 | -  |\n| 净利率-23A     | float64 | -  |\n| 净利率-24A     | float64 | -  |\n| 总资产周转率-3年平均 | float64 | -  |\n| 总资产周转率-22A  | float64 | -  |\n| 总资产周转率-23A  | float64 | -  |\n| 总资产周转率-24A  | float64 | -  |\n| 权益乘数-3年平均   | float64 | -  |\n| 权益乘数-22A    | float64 | -  |\n| 权益乘数-23A    | float64 | -  |\n| 权益乘数-24A    | float64 | -  |\n| ROE-3年平均排名  | float64 | -  |\n\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_dupont_comparison_em_df = ak.stock_zh_dupont_comparison_em(symbol=\"SZ000895\")\nprint(stock_zh_dupont_comparison_em_df)\n```\n\n数据示例\n\n```\n    代码    简称  ROE-3年平均  ROE-22A  ...  权益乘数-22A  权益乘数-23A  权益乘数-24A  ROE-3年平均排名\n0    行业平均  行业平均      5.70     5.51  ...    191.76    189.10   185.080         NaN\n1    行业中值  行业中值      7.71     7.89  ...    149.35    142.50   143.105         NaN\n2  605499  东鹏饮料     38.09    30.97  ...    234.37    232.62   294.820         1.0\n3  002847  盐津铺子     36.48    30.03  ...    213.82    196.34   203.650         2.0\n4  000895  双汇发展     24.21    25.17  ...    164.15    173.44   174.840         3.0\n5  603262  技源集团     24.02    28.06  ...    152.21    132.11   125.360         4.0\n6  603288  海天味业     22.24    24.89  ...    126.69    132.34   130.110         5.0\n7  000848  承德露露     21.92    23.53  ...    136.51    133.85   133.510         6.0\n[8 rows x 19 columns]\n```\n\n##### 公司规模\n\n接口: stock_zh_scale_comparison_em\n\n目标地址: https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=000895&color=b#/thbj/gsgm\n\n描述: 东方财富-行情中心-同行比较-公司规模\n\n限量: 单次返回全部数据\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| symbol     | str | symbol=\"SZ000895\"     |\n\n输出参数\n\n| 名称     | 类型      | 描述 |\n|--------|---------|----|\n| 代码     | object  | -  |\n| 简称     | object  | -  |\n| 总市值    | float64 | -  |\n| 总市值排名  | int64   | -  |\n| 流通市值   | float64 | -  |\n| 流通市值排名 | int64   | -  |\n| 营业收入   | float64 | -  |\n| 营业收入排名 | int64   | -  |\n| 净利润    | float64 | -  |\n| 净利润排名  | int64   | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_scale_comparison_em_df = ak.stock_zh_scale_comparison_em(symbol=\"SZ000895\")\nprint(stock_zh_scale_comparison_em_df)\n```\n\n数据示例\n\n```\n       代码    简称           总市值  总市值排名    流通市值  流通市值排名          营业收入  营业收入排名           净利润  净利润排名\n0  000895  双汇发展  8.685906e+10      5  868.48       4  2.850309e+10       3  2.351218e+09      4\n```\n\n### A股-CDR\n\n#### 历史行情数据\n\n接口: stock_zh_a_cdr_daily\n\n目标地址: https://finance.sina.com.cn/realstock/company/sh689009/nc.shtml\n\n描述: 上海证券交易所-科创板-CDR\n\n限量: 单次返回指定 CDR 的日频率数据, 分钟历史行情数据可以通过 stock_zh_a_minute 获取\n\n名词解释:\n\n1. [Investopedia-CDR](https://www.investopedia.com/terms/c/cdr.asp)\n2. [百度百科-中国存托凭证](https://baike.baidu.com/item/%E4%B8%AD%E5%9B%BD%E5%AD%98%E6%89%98%E5%87%AD%E8%AF%81/2489906?fr=aladdin)\n\n输入参数\n\n| 名称         | 类型  | 描述                          |\n|------------|-----|-----------------------------|\n| symbol     | str | symbol='sh689009'; CDR 股票代码 |\n| start_date | str | start_date='20201103'       |\n| end_date   | str | end_date='20201116'         |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| date   | object  | 交易日     |\n| open   | float64 | -       |\n| high   | float64 | -       |\n| low    | float64 | -       |\n| close  | float64 | -       |\n| volume | float64 | 注意单位: 手 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_a_cdr_daily_df = ak.stock_zh_a_cdr_daily(symbol='sh689009', start_date='20201103', end_date='20201116')\nprint(stock_zh_a_cdr_daily_df)\n```\n\n数据示例\n\n```\n           date   open   high    low  close      volume\n0    2020-10-29  33.00  49.80  33.00  38.50  40954922.0\n1    2020-10-30  40.02  51.56  40.02  47.60  33600551.0\n2    2020-11-02  50.20  56.78  48.81  56.77  27193402.0\n3    2020-11-03  56.50  59.55  53.36  57.39  25121445.0\n4    2020-11-04  57.45  57.80  51.90  54.40  20846450.0\n..          ...    ...    ...    ...    ...         ...\n265  2021-11-30  60.50  61.20  60.36  60.84   1535244.0\n266  2021-12-01  60.99  61.00  59.78  59.78   2116728.0\n267  2021-12-02  59.67  59.77  57.66  57.73   2421344.0\n268  2021-12-03  57.55  58.78  57.50  58.60   1709167.0\n269  2021-12-06  58.99  58.99  56.30  56.75   1719351.0\n```\n\n### B股\n\n#### 实时行情数据\n\n##### 实时行情数据-东财\n\n接口: stock_zh_b_spot_em\n\n目标地址: http://quote.eastmoney.com/center/gridlist.html#hs_b_board\n\n描述: 东方财富网-实时行情数据\n\n限量: 单次返回所有 B 股上市公司的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int64   | -       |\n| 代码      | object  | -       |\n| 名称      | object  | -       |\n| 最新价     | float64 | -       |\n| 涨跌幅     | float64 | 注意单位: % |\n| 涨跌额     | float64 | -       |\n| 成交量     | float64 | 注意单位: 手 |\n| 成交额     | float64 | 注意单位: 元 |\n| 振幅      | float64 | 注意单位: % |\n| 最高      | float64 | -       |\n| 最低      | float64 | -       |\n| 今开      | float64 | -       |\n| 昨收      | float64 | -       |\n| 量比      | float64 | -       |\n| 换手率     | float64 | 注意单位: % |\n| 市盈率-动态  | float64 | -       |\n| 市净率     | float64 | -       |\n| 总市值     | float64 | 注意单位: 元 |\n| 流通市值    | float64 | 注意单位: 元 |\n| 涨速      | float64 | -       |\n| 5分钟涨跌   | float64 | 注意单位: % |\n| 60日涨跌幅  | float64 | 注意单位: % |\n| 年初至今涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_b_spot_em_df = ak.stock_zh_b_spot_em()\nprint(stock_zh_b_spot_em_df)\n```\n\n数据示例\n\n```\n      序号      代码     名称    最新价  ...    涨速  5分钟涨跌  60日涨跌幅  年初至今涨跌幅\n0      1  900953    凯马Ｂ  0.330  ...  0.00   0.92    0.00    -2.65\n1      2  200625  长  安Ｂ  4.420  ...  0.00   0.23   20.11     1.38\n2      3  900914   锦在线B  0.702  ...  0.14   0.29   13.96    16.42\n3      4  200761   本钢板Ｂ  2.670  ...  0.00   0.38    8.54     1.14\n4      5  900957   凌云Ｂ股  0.568  ...  0.00  -0.35   -6.73    -9.98\n..   ...     ...    ...    ...  ...   ...    ...     ...      ...\n109  110  200017   深中华B  1.210  ... -1.63  -0.82  -14.18   -15.38\n110  111  900936   鄂资Ｂ股  2.630  ...  0.00  -0.53   30.46    27.92\n111  112  900919   退市庭B  0.026  ...  0.00   0.00  -78.15   -86.32\n112  113  900906   中毅达B  0.571  ...  0.71  -0.70   17.73    13.07\n113  114  900948   伊泰Ｂ股  1.465  ... -0.61   0.14   47.38    67.81\n```\n\n##### 实时行情数据-新浪\n\n接口: stock_zh_b_spot\n\n目标地址: http://vip.stock.finance.sina.com.cn/mkt/#hs_b\n\n描述: B 股数据是从新浪财经获取的数据, 重复运行本函数会被新浪暂时封 IP, 建议增加时间间隔\n\n限量: 单次返回所有 B 股上市公司的实时行情数据\n\n输入参数-实时行情数据\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数-实时行情数据\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 代码  | object  | -       |\n| 名称  | object  | -       |\n| 最新价 | float64 | -       |\n| 涨跌额 | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 买入  | float64 | -       |\n| 卖出  | float64 | -       |\n| 昨收  | float64 | -       |\n| 今开  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 成交量 | float64 | 注意单位: 股 |\n| 成交额 | float64 | 注意单位: 元 |\n\n接口示例-实时行情数据\n\n```python\nimport akshare as ak\n\nstock_zh_b_spot_df = ak.stock_zh_b_spot()\nprint(stock_zh_b_spot_df)\n```\n\n数据示例-实时行情数据\n\n```\n    代码        名称     最新价    涨跌额  ...      最高      最低         成交量         成交额\n0   sh900901  云赛Ｂ股   0.451  0.001  ...   0.459   0.447   869400.0    395346.0\n1   sh900902  市北B股   0.290 -0.004  ...   0.294   0.290   858200.0    251011.0\n2   sh900903  大众Ｂ股   0.290 -0.006  ...   0.296   0.289  1775362.0    518333.0\n3   sh900904  神奇B股   0.536 -0.006  ...   0.540   0.531    37060.0     19907.0\n4   sh900905  老凤祥Ｂ   3.498 -0.011  ...   3.509   3.495   300400.0   1051414.0\n..       ...   ...     ...    ...  ...     ...     ...        ...         ...\n85  sz200761  本钢板Ｂ   3.260 -0.120  ...   3.380   3.240  2190800.0   7214306.0\n86  sz200771  杭汽轮Ｂ  14.940 -0.760  ...  15.800  14.660   839948.0  12673391.0\n87  sz200869  张 裕Ｂ  14.000  0.000  ...  14.000  13.810   176407.0   2461886.0\n88  sz200992  中 鲁Ｂ   3.120  0.000  ...   3.130   3.080    17700.0     55129.0\n89  sz201872   招港B   8.780 -0.220  ...   9.050   8.750   313566.0   2776833.0\n```\n\n#### 历史行情数据\n\n##### 历史行情数据\n\n接口: stock_zh_b_daily\n\n目标地址: https://finance.sina.com.cn/realstock/company/sh900901/nc.shtml\n\n描述: B 股数据是从新浪财经获取的数据, 历史数据按日频率更新\n\n限量: 单次返回指定 B 股上市公司指定日期间的历史行情日频率数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                                   |\n|------------|-----|--------------------------------------------------------------------------------------|\n| symbol     | str | symbol='sh900901'; 股票代码可以在 **ak.stock_zh_b_spot()** 中获取                              |\n| start_date | str | start_date='20201103'; 开始查询的日期                                                       |\n| end_date   | str | end_date='20201116'; 结束查询的日期                                                         |\n| adjust     | str | 默认返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; hfq-factor: 返回后复权因子; qfq-factor: 返回前复权因子 |\n\n**股票数据复权**\n\n1.为何要复权：由于股票存在配股、分拆、合并和发放股息等事件，会导致股价出现较大的缺口。\n若使用不复权的价格处理数据、计算各种指标，将会导致它们失去连续性，且使用不复权价格计算收益也会出现错误。\n为了保证数据连贯性，常通过前复权和后复权对价格序列进行调整。\n\n2.前复权：保持当前价格不变，将历史价格进行增减，从而使股价连续。\n前复权用来看盘非常方便，能一眼看出股价的历史走势，叠加各种技术指标也比较顺畅，是各种行情软件默认的复权方式。\n这种方法虽然很常见，但也有两个缺陷需要注意。\n\n2.1 为了保证当前价格不变，每次股票除权除息，均需要重新调整历史价格，因此其历史价格是时变的。\n这会导致在不同时点看到的历史前复权价可能出现差异。\n\n2.2 对于有持续分红的公司来说，前复权价可能出现负值。\n\n3.后复权：保证历史价格不变，在每次股票权益事件发生后，调整当前的股票价格。\n后复权价格和真实股票价格可能差别较大，不适合用来看盘。\n其优点在于，可以被看作投资者的长期财富增长曲线，反映投资者的真实收益率情况。\n\n4.在量化投资研究中普遍采用后复权数据。\n\n输出参数-历史行情数据\n\n| 名称                | 类型      | 描述            |\n|-------------------|---------|---------------|\n| date              | object  | 交易日           |\n| close             | float64 | 收盘价           |\n| high              | float64 | 最高价           |\n| low               | float64 | 最低价           |\n| open              | float64 | 开盘价           |\n| volume            | float64 | 成交量; 注意单位: 股  |\n| outstanding_share | float64 | 流动股本; 注意单位: 股 |\n| turnover          | float64 | 换手率=成交量/流动股本  |\n\n接口示例-历史行情数据(前复权)\n\n```python\nimport akshare as ak\n\nstock_zh_b_daily_qfq_df = ak.stock_zh_b_daily(symbol=\"sh900901\", start_date=\"19900103\", end_date=\"20240722\", adjust=\"qfq\")\nprint(stock_zh_b_daily_qfq_df)\n```\n\n数据示例-历史行情数据(前复权)\n\n```\n           date  open  high  ...     volume  outstanding_share  turnover\n0    1992-02-21  0.18  0.23  ...   343000.0          1000000.0  0.343000\n1    1992-02-24  0.22  0.23  ...  2896000.0          1000000.0  2.896000\n2    1992-02-25  0.20  0.21  ...   181000.0          1000000.0  0.181000\n3    1992-02-26  0.20  0.20  ...   305000.0          1000000.0  0.305000\n4    1992-02-27  0.20  0.21  ...   330000.0          1000000.0  0.330000\n...         ...   ...   ...  ...        ...                ...       ...\n7418 2024-07-16  0.49  0.49  ...   540175.0        293370465.0  0.001841\n7419 2024-07-17  0.49  0.49  ...   527360.0        293370465.0  0.001798\n7420 2024-07-18  0.48  0.48  ...   825069.0        293370465.0  0.002812\n7421 2024-07-19  0.48  0.50  ...   902574.0        293370465.0  0.003077\n7422 2024-07-22  0.49  0.50  ...   994281.0        293370465.0  0.003389\n[7423 rows x 8 columns]\n```\n\n接口示例-历史行情数据(后复权)\n\n```python\nimport akshare as ak\n\nstock_zh_b_daily_hfq_df = ak.stock_zh_b_daily(symbol=\"sh900901\", start_date=\"19900103\", end_date=\"20240722\", adjust=\"hfq\")\nprint(stock_zh_b_daily_hfq_df)\n```\n\n数据示例-历史行情数据(后复权)\n\n```\n           date    open    high  ...     volume  outstanding_share  turnover\n0    1992-02-21   72.00   92.40  ...   343000.0          1000000.0  0.343000\n1    1992-02-24   88.70   92.20  ...  2896000.0          1000000.0  2.896000\n2    1992-02-25   80.00   84.00  ...   181000.0          1000000.0  0.181000\n3    1992-02-26   81.00   81.00  ...   305000.0          1000000.0  0.305000\n4    1992-02-27   80.00   84.00  ...   330000.0          1000000.0  0.330000\n...         ...     ...     ...  ...        ...                ...       ...\n7418 2024-07-16  196.42  197.63  ...   540175.0        293370465.0  0.001841\n7419 2024-07-17  198.03  198.44  ...   527360.0        293370465.0  0.001798\n7420 2024-07-18  195.61  196.01  ...   825069.0        293370465.0  0.002812\n7421 2024-07-19  195.20  200.05  ...   902574.0        293370465.0  0.003077\n7422 2024-07-22  198.44  202.48  ...   994281.0        293370465.0  0.003389\n[7423 rows x 8 columns]\n```\n\n接口示例-前复权因子\n\n```python\nimport akshare as ak\n\nqfq_factor_df = ak.stock_zh_b_daily(symbol=\"sh900901\", adjust=\"qfq-factor\")\nprint(qfq_factor_df)\n```\n\n数据示例-前复权因子\n\n```\n         date            qfq_factor\n0  2024-06-28    1.0000000000000000\n1  2023-06-29    1.0128968423207000\n2  2022-06-27    1.0235450730903000\n3  2021-07-28    1.0414120633892000\n4  2020-07-24    1.0621222316638000\n5  2019-07-26    1.0776646873343000\n6  2018-07-27    1.0933643235806000\n7  2017-06-01    1.1126090142905000\n8  2016-06-07    1.1260358798118000\n9  2007-06-26    1.1339015467992000\n10 2006-06-07    1.2472917014791000\n11 2005-06-09    1.4454867952888000\n12 2004-06-09    1.4781966336173000\n13 2003-06-11    1.4917479863778000\n14 2002-06-19    1.5062371240633000\n15 2001-07-17    1.6596648576557000\n16 2000-06-23    1.6787984081928000\n17 1998-07-07    1.8889236772532000\n18 1996-06-03    2.2667084127038000\n19 1995-05-29    2.4933792539742000\n20 1994-05-09    2.9920551047690000\n21 1993-03-29    3.5280306737986000\n22 1992-12-01    4.0414826776136000\n23 1992-02-21  404.1482677613642500\n24 1900-01-01  404.1482677613642500\n```\n\n接口示例-后复权因子\n\n```python\nimport akshare as ak\n\nhfq_factor_df = ak.stock_zh_b_daily(symbol=\"sh900901\", adjust=\"hfq-factor\")\nprint(hfq_factor_df)\n```\n\n数据示例-后复权因子\n\n```\n         date            hfq_factor\n0  2024-06-28  404.1482677613642500\n1  2023-06-29  399.0023967646893000\n2  2022-06-27  394.8514612465220400\n3  2021-07-28  388.0771905465590000\n4  2020-07-24  380.5101293551464000\n5  2019-07-26  375.0222796675719000\n6  2018-07-27  369.6373286059189000\n7  2017-06-01  363.2437474175006300\n8  2016-06-07  358.9124245569568600\n9  2007-06-26  356.4227149192948300\n10 2006-06-07  324.0206499266317000\n11 2005-06-09  279.5931924653872300\n12 2004-06-09  273.4062969500634000\n13 2003-06-11  270.9226165893487000\n14 2002-06-19  268.3164963237175600\n15 2001-07-17  243.5119752624272000\n16 2000-06-23  240.7366279292711800\n17 1998-07-07  213.9569071149911000\n18 1996-06-03  178.2974225958258000\n19 1995-05-29  162.0885659962053200\n20 1994-05-09  135.0738049968378200\n21 1993-03-29  114.5535016922676000\n22 1992-12-01  100.0000000000000000\n23 1992-02-21    1.0000000000000000\n24 1900-01-01    1.0000000000000000\n```\n\n##### 分时数据\n\n接口: stock_zh_b_minute\n\n目标地址: http://finance.sina.com.cn/realstock/company/sh900901/nc.shtml\n\n描述: 新浪财经 B 股股票或者指数的分时数据，目前可以获取 1, 5, 15, 30, 60 分钟的数据频率, 可以指定是否复权\n\n限量: 单次返回指定股票或指数的指定频率的最近交易日的历史分时行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                         |\n|--------|-----|------------------------------------------------------------|\n| symbol | str | symbol='sh900901'; 同日频率数据接口                                |\n| period | str | period='1'; 获取 1, 5, 15, 30, 60 分钟的数据频率                    |\n| adjust | str | adjust=\"\"; 默认为空: 返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| day    | object  | -   |\n| open   | float64 | -   |\n| high   | float64 | -   |\n| low    | float64 | -   |\n| close  | float64 | -   |\n| volume | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_b_minute_df = ak.stock_zh_b_minute(symbol='sh900901', period='1', adjust=\"qfq\")\nprint(stock_zh_b_minute_df)\n```\n\n数据示例\n\n```\n                      day      open      high       low     close volume\n0     2024-06-28 14:41:00  0.472987  0.472987  0.472987  0.472987    100\n1     2024-06-28 14:42:00  0.470996  0.470996  0.470000  0.470000  12000\n2     2024-06-28 14:44:00  0.470996  0.470996  0.470996  0.470996   5000\n3     2024-06-28 14:45:00  0.470996  0.470996  0.470996  0.470996  43600\n4     2024-06-28 14:48:00  0.470000  0.470000  0.469004  0.469004  16000\n...                   ...       ...       ...       ...       ...    ...\n1965  2024-07-22 14:43:00  0.498994  0.498994  0.498994  0.498994   5000\n1966  2024-07-22 14:48:00  0.497988  0.497988  0.497988  0.497988   1300\n1967  2024-07-22 14:56:00  0.496982  0.496982  0.496982  0.496982    200\n1968  2024-07-22 14:57:00  0.497988  0.497988  0.497988  0.497988   5100\n1969  2024-07-22 15:00:00  0.500000  0.500000  0.500000  0.500000    400\n[1970 rows x 6 columns]\n```\n\n### 次新股\n\n接口: stock_zh_a_new\n\n目标地址: http://vip.stock.finance.sina.com.cn/mkt/#new_stock\n\n描述: 新浪财经-行情中心-沪深股市-次新股\n\n限量: 单次返回所有次新股行情数据, 由于次新股名单随着交易日变化而变化，只能获取最近交易日的数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称            | 类型      | 描述   |\n|---------------|---------|------|\n| symbol        | object  | 新浪代码 |\n| code          | object  | 股票代码 |\n| name          | object  | 股票简称 |\n| open          | float64 | 开盘价  |\n| high          | float64 | 最高价  |\n| low           | float64 | 最低价  |\n| volume        | int64   | 成交量  |\n| amount        | int64   | 成交额  |\n| mktcap        | float64 | 市值   |\n| turnoverratio | float64 | 换手率  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_a_new_df = ak.stock_zh_a_new()\nprint(stock_zh_a_new_df)\n```\n\n数据示例\n\n```\n     symbol    code  name  ...      amount        mktcap  turnoverratio\n0   sh601728  601728  中国电信  ...  2078538311  4.146314e+07        7.91425\n1   sh601825  601825  沪农商行  ...   511698399  7.657689e+06        6.67390\n2   sh601921  601921  浙版传媒  ...   218150606  2.284444e+06        9.66828\n3   sh605028  605028  世茂能源  ...   248080378  3.996800e+05       24.98649\n4   sh605056  605056  咸亨国际  ...    60691275  7.736193e+05        7.80149\n..       ...     ...   ...  ...         ...           ...            ...\n79  sz301052  301052  果麦文化  ...   231553223  2.541569e+05       38.94978\n80  sz301053  301053  远信工业  ...   214016261  3.033018e+05       33.99790\n81  sz301055  301055  C张小泉  ...   679460624  5.285280e+05       64.66610\n82  sz301056  301056   C森赫  ...   423894365  3.694995e+05       48.84555\n83  sz301058  301058  中粮工科  ...           0  0.000000e+00        0.00000\n```\n\n### 股市日历\n\n#### 公司动态\n\n接口: stock_gsrl_gsdt_em\n\n目标地址: https://data.eastmoney.com/gsrl/gsdt.html\n\n描述: 东方财富网-数据中心-股市日历-公司动态\n\n限量: 单次返回指定交易日的数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20230808\"; 交易日 |\n\n输出参数\n\n| 名称   | 类型     | 描述 |\n|------|--------|----|\n| 序号   | int64  | -  |\n| 代码   | object | -  |\n| 简称   | object | -  |\n| 事件类型 | object | -  |\n| 具体事项 | object | -  |\n| 交易日  | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gsrl_gsdt_em_df = ak.stock_gsrl_gsdt_em(date=\"20230808\")\nprint(stock_gsrl_gsdt_em_df)\n```\n\n数据示例\n\n```\n    序号      代码  ...                                               具体事项         交易日\n0    1  000504  ...  为盘活闲置资产,优化资产结构,提高资产运营效率,南华生物医药股份有限公司(以下简称“公司”)...  2023-08-08\n1    2  000669  ...  公司于近日收到新能国际告知函,获悉北京市第一中级人民法院将于2023年8月3日10时至202...  2023-08-08\n2    3  000707  ...  根据2022年10月13日新修订的《企业集团财务公司管理办法》,监管部门要求财务公司需在20...  2023-08-08\n3    4  000778  ...  新兴铸管股份有限公司(以下简称“公司”或“本公司”)与长江生态环保集团有限公司(以下简称“长...  2023-08-08\n4    5  000790  ...  为加速拓展公司在医药产业的战略布局,提高公司抵御市场变化的抗风险能力,整合优势经营资源,丰富...  2023-08-08\n..  ..     ...  ...                                                ...         ...\n93  94  688360  ...  德马科技集团股份有限公司(以下简称“公司”或“上市公司”)拟通过发行股份及支付现金方式购买江...  2023-08-08\n94  95  688516  ...  为支持各子公司业务发展的融资需求,公司为全资子公司智能装备向商业银行申请总额不超过4.5亿元...  2023-08-08\n95  96  831152  ...  为了满足项目建设需要,公司拟以现金方式向全资子公司“昆工恒达(云南)新能源科技有限公司”(以...  2023-08-08\n96  97  871694  ...  公司根据战略发展规划及生产经营需要,拟在阿拉伯联合酋长国投资新设全资子公司中裕阿联酋管道制造...  2023-08-08\n97  98  872351  ...  华光源海国际物流集团股份有限公司(以下简称“公司”)因业务发展需要,经公司董事长审批,拟通过...  2023-08-08\n[98 rows x 6 columns]\n```\n\n### 风险警示板\n\n接口: stock_zh_a_st_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#st_board\n\n描述: 东方财富网-行情中心-沪深个股-风险警示板\n\n限量: 单次返回当前交易日风险警示板的所有股票的行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 代码     | object  | -       |\n| 名称     | object  | -       |\n| 最新价    | float64 | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 涨跌额    | float64 | -       |\n| 成交量    | float64 | -       |\n| 成交额    | float64 | -       |\n| 振幅     | float64 | 注意单位: % |\n| 最高     | float64 | -       |\n| 最低     | float64 | -       |\n| 今开     | float64 | -       |\n| 昨收     | float64 | -       |\n| 量比     | float64 | -       |\n| 换手率    | float64 | 注意单位: % |\n| 市盈率-动态 | float64 | -       |\n| 市净率    | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_a_st_em_df = ak.stock_zh_a_st_em()\nprint(stock_zh_a_st_em_df)\n```\n\n数据示例\n\n```\n      序号      代码     名称    最新价    涨跌幅  ...     昨收    量比    换手率   市盈率-动态    市净率\n0      1  300313  *ST天山   7.61  10.45  ...   6.89  7.84  11.96   -90.65  33.49\n1      2  300167  ST迪威迅   3.19   7.41  ...   2.97  3.86   9.31    -5.82  54.39\n2      3  002569   ST步森   6.90   5.02  ...   6.57  0.88   0.93   -27.27   7.05\n3      4  000996  *ST中期   5.24   5.01  ...   4.99  0.81   4.47  6823.87   3.73\n4      5  600589  *ST榕泰   5.48   4.98  ...   5.22  1.71   4.07   -24.53  -5.13\n..   ...     ...    ...    ...    ...  ...    ...   ...    ...      ...    ...\n113  114  000615  *ST美谷   4.10  -4.87  ...   4.31  1.25   5.02   -37.97 -15.44\n114  115  000697  *ST炼石   4.82  -4.93  ...   5.07  2.60   1.62    -9.97  -5.81\n115  116  000889   ST中嘉   2.12  -4.93  ...   2.23  0.40   0.91   -68.39   8.04\n116  117  000752  *ST西发   9.01  -4.96  ...   9.48  0.19   1.26   -64.79 -48.62\n117  118  600766  *ST园城  12.34  -5.00  ...  12.99  1.56   1.05  1372.29  47.59\n[118 rows x 17 columns]\n```\n\n### 新股\n\n接口: stock_zh_a_new_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#newshares\n\n描述: 东方财富网-行情中心-沪深个股-新股\n\n限量: 单次返回当前交易日新股板块的所有股票的行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 代码     | object  | -       |\n| 名称     | object  | -       |\n| 最新价    | float64 | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 涨跌额    | float64 | -       |\n| 成交量    | float64 | -       |\n| 成交额    | float64 | -       |\n| 振幅     | float64 | 注意单位: % |\n| 最高     | float64 | -       |\n| 最低     | float64 | -       |\n| 今开     | float64 | -       |\n| 昨收     | float64 | -       |\n| 量比     | float64 | -       |\n| 换手率    | float64 | 注意单位: % |\n| 市盈率-动态 | float64 | -       |\n| 市净率    | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_a_new_em_df = ak.stock_zh_a_new_em()\nprint(stock_zh_a_new_em_df)\n```\n\n数据示例\n\n```\n      序号      代码    名称     最新价   涨跌幅  ...      昨收    量比    换手率  市盈率-动态   市净率\n0      1  301559  N中集环   23.95 -1.11  ...   24.22   NaN  50.66   20.05  2.92\n1      2  688657   C浩辰   89.26  0.42  ...   88.89  0.62  29.22   76.48  2.91\n2      3  688719   C爱科   60.33  0.05  ...   60.30  0.44  18.92   45.79  2.86\n3      4  301558   C三态   14.72  1.73  ...   14.47  0.66  38.74   71.25  8.58\n4      5  603276  恒兴新材   24.17 -0.62  ...   24.32  0.40  12.34   43.70  2.24\n..   ...     ...   ...     ...   ...  ...     ...   ...    ...     ...   ...\n261  262  688152  麒麟信安   81.80  2.06  ...   80.15  1.26   9.45 -225.22  5.02\n262  263  688372  伟测科技  103.70  2.65  ...  101.02  0.98   5.67   83.07  4.95\n263  264  688291   金橙子   30.13  4.22  ...   28.91  1.09   6.76   60.43  3.37\n264  265  001322  箭牌家居   13.56  1.12  ...   13.41  0.82   3.14   38.40  2.75\n265  266  688426  康为世纪   32.25  3.80  ...   31.07  1.76   6.44 -183.28  2.10\n[266 rows x 17 columns]\n```\n\n### 新股上市首日\n\n接口: stock_xgsr_ths\n\n目标地址: https://data.10jqka.com.cn/ipo/xgsr/\n\n描述: 同花顺-数据中心-新股数据-新股上市首日\n\n限量: 单次返回当前交易日的所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| 序号    | int64   | -  |\n| 股票代码  | object  | -  |\n| 股票简称  | object  | -  |\n| 上市日期  | object  | -  |\n| 发行价   | float64 | -  |\n| 最新价   | float64 | -  |\n| 首日开盘价 | float64 | -  |\n| 首日收盘价 | float64 | -  |\n| 首日最高价 | float64 | -  |\n| 首日最低价 | float64 | -  |\n| 首日涨跌幅 | float64 | -  |\n| 是否破发  | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_xgsr_ths_df = ak.stock_xgsr_ths()\nprint(stock_xgsr_ths_df)\n```\n\n数据示例\n\n```\n        序号  股票代码 股票简称  上市日期  ...   首日最高价  首日最低价 首日涨跌幅 是否破发\n0        1  920019  铜冠矿建  2024-10-11  ...   55.55  33.33   7.3141     否\n1        2  001279  强邦新材  2024-10-11  ...  245.00  87.12  17.3895     否\n2        3  301618  长联科技  2024-09-30  ...  408.00  99.00  17.0398     否\n3        4  688615  合合信息  2024-09-26  ...  116.30  88.93   1.0591     否\n4        5  301551  无线传媒  2024-09-26  ...   39.39  29.11   3.1883     否\n...    ...     ...   ...         ...  ...     ...    ...      ...   ...\n3780  3781  300042  朗科科技  2010-01-08  ...   56.50  51.00   0.3449     是\n3781  3782  601117  中国化学  2010-01-07  ...    5.86   5.65   0.0589     否\n3782  3783  002329  皇氏集团  2010-01-06  ...   29.76  27.68   0.4308     是\n3783  3784  002330   得利斯  2010-01-06  ...   23.98  21.00   0.8194     是\n3784  3785  002331  皖通科技  2010-01-06  ...   45.00  40.62   0.6011     是\n[3785 rows x 12 columns]\n```\n\n### IPO 受益股\n\n接口: stock_ipo_benefit_ths\n\n目标地址: https://data.10jqka.com.cn/ipo/syg/\n\n描述: 同花顺-数据中心-新股数据-IPO受益股\n\n限量: 单次返回当前交易日的所有数据; 该数据每周更新一次, 返回最近一周的数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 股票代码   | object  | -       |\n| 股票简称   | object  | -       |\n| 收盘价    | float64 | 注意单位: 元 |\n| 涨跌幅    | float64 | 注意单位: % |\n| 市值     | object  | 注意单位: 元 |\n| 参股家数   | int64   | -       |\n| 投资总额   | object  | 注意单位: 元 |\n| 投资占市值比 | float64 | 注意单位: % |\n| 参股对象   | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_ipo_benefit_ths_df = ak.stock_ipo_benefit_ths()\nprint(stock_ipo_benefit_ths_df)\n```\n\n数据示例\n\n```\n    序号  股票代码  股票简称 收盘价  涨跌幅  市值  参股家数    投资总额  投资占市值比 参股对象\n0      1  601601  中国太保  29.12 -0.206  1993.28亿     2  34.17亿    1.71   明细\n1      2  600716  凤凰股份   3.82 -1.036    35.76亿     1   4.76亿   13.33   明细\n2      3  600649  城投控股   4.08 -0.730   103.21亿     1   4.67亿    4.52   明细\n3      4  601963  重庆银行   8.59 -1.151   162.82亿     1   3.79亿    2.33   明细\n4      5  600639  浦东金桥  11.10 -0.893    94.38亿     2   3.18亿    3.37   明细\n..   ...     ...   ...    ...    ...       ...   ...     ...     ...  ...\n107  108  000685  中山公用   8.59 -0.116   126.71亿     1      0万    0.00   明细\n108  109  600052  浙江广厦   3.98 -2.690    33.60亿     1      0万    0.00   明细\n109  110  600261  阳光照明   3.62 -0.550    52.57亿     1      0万    0.00   明细\n110  111  600496  精工钢构   3.90 -2.500    78.50亿     1      0万    0.00   明细\n111  112  603987   康德莱  20.00  0.200    88.31亿     1      0万    0.00   明细\n```\n\n### 两网及退市\n\n接口: stock_zh_a_stop_em\n\n目标地址: http://quote.eastmoney.com/center/gridlist.html#staq_net_board\n\n描述: 东方财富网-行情中心-沪深个股-两网及退市\n\n限量: 单次返回当前交易日两网及退市的所有股票的行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 代码     | object  | -       |\n| 名称     | object  | -       |\n| 最新价    | float64 | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 涨跌额    | float64 | -       |\n| 成交量    | float64 | -       |\n| 成交额    | float64 | -       |\n| 振幅     | float64 | 注意单位: % |\n| 最高     | float64 | -       |\n| 最低     | float64 | -       |\n| 今开     | float64 | -       |\n| 昨收     | float64 | -       |\n| 量比     | float64 | -       |\n| 换手率    | float64 | 注意单位: % |\n| 市盈率-动态 | float64 | -       |\n| 市净率    | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_a_stop_em_df = ak.stock_zh_a_stop_em()\nprint(stock_zh_a_stop_em_df)\n```\n\n数据示例\n\n```\n      序号 代码    名称      最新价 涨跌幅 涨跌额  ... 今开 昨收 量比 换手率 市盈率-动态市净率\n0      1  400010  鹫  峰 5  1.90  4.97  0.09  ... NaN  1.81 NaN  NaN  -87.16  20.41\n1      2  400069     吉恩5  9.96  4.95  0.47  ... NaN  9.49 NaN  NaN   19.61   3.78\n2      3  400073    上普A5  7.08  4.89  0.33  ... NaN  6.75 NaN  NaN   97.79  11.69\n3      4  400008   水仙Ａ 5  4.96  4.86  0.23  ... NaN  4.73 NaN  NaN -539.13  992.0\n4      5  400059     天珑5  3.50  4.79  0.16  ... NaN  3.34 NaN  NaN   50.29   3.72\n..   ...     ...     ...   ...   ...   ...  ...  ..   ...  ..  ...     ...    ...\n100  101  400027  生  态 5  1.05 -4.55 -0.05  ... NaN   1.1 NaN  NaN  -57.07    4.7\n101  102  400036     天创5  1.64 -4.65 -0.08  ... NaN  1.72 NaN  NaN   103.8   1.57\n102  103  400005   海国实 5  1.01 -4.72 -0.05  ... NaN  1.06 NaN  NaN  -91.82   15.3\n103  104  400039  华  圣 5  0.95 -5.00 -0.05  ... NaN   1.0 NaN  NaN  -65.97   4.64\n104  105  400028  金  马 5  0.95 -5.00 -0.05  ... NaN   1.0 NaN  NaN -226.19    9.3\n```\n\n### 科创板\n\n#### 实时行情数据\n\n接口: stock_zh_kcb_spot\n\n目标地址: http://vip.stock.finance.sina.com.cn/mkt/#kcb\n\n描述: 新浪财经-科创板股票实时行情数据\n\n限量: 单次返回所有科创板上市公司的实时行情数据; 请控制采集的频率, 大量抓取容易封IP\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数-实时行情数据\n\n| 名称   | 类型      | 描述           |\n|------|---------|--------------|\n| 代码   | object  | -            |\n| 名称   | object  | -            |\n| 最新价  | float64 | -            |\n| 涨跌额  | float64 | -            |\n| 涨跌幅  | float64 | -            |\n| 买入   | float64 | -            |\n| 卖出   | float64 | -            |\n| 昨收   | float64 | -            |\n| 今开   | float64 | -            |\n| 最高   | float64 | -            |\n| 最低   | float64 | -            |\n| 成交量  | float64 | 注意单位: 股      |\n| 成交额  | float64 | 注意单位: 元      |\n| 时点   | object  | 注意: 数据获取的时间点 |\n| 市盈率  | float64 | -            |\n| 市净率  | float64 | -            |\n| 流通市值 | float64 | -            |\n| 总市值  | float64 | -            |\n| 换手率  | float64 | -            |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_kcb_spot_df = ak.stock_zh_kcb_spot()\nprint(stock_zh_kcb_spot_df)\n```\n\n数据示例\n\n```\n           代码    名称     最新价   涨跌额  ...     市净率          流通市值           总市值      换手率\n0    sh688001  华兴源创   31.72 -0.43  ...   4.102  1.393734e+06  1.598691e+05  1.77051\n1    sh688002  睿创微纳   58.78  0.28  ...   7.950  2.615710e+06  1.505524e+06  0.97091\n2    sh688003  天准科技   32.15 -0.46  ...   4.173  6.224240e+05  2.356659e+05  0.88843\n3    sh688004  博汇科技   32.88 -0.59  ...   2.612  1.867584e+05  1.299385e+05  0.78243\n4    sh688005  容百科技  135.74 -3.76  ...  12.098  6.081663e+06  3.743849e+06  1.87571\n..        ...   ...     ...   ...  ...     ...           ...           ...      ...\n386  sh688799  华纳药厂   37.84  0.39  ...   2.496  3.549392e+05  7.558540e+04  4.39538\n387  sh688800   瑞可达   95.54 -4.45  ...  10.805  1.031832e+06  2.192643e+05  4.70915\n388  sh688819  天能股份   35.15 -0.61  ...   2.854  3.416932e+06  4.517024e+05  1.03151\n389  sh688981  中芯国际   50.88 -0.18  ...   3.769  4.021520e+07  9.519842e+06  0.64778\n390  sh689009  九号公司   54.75 -0.91  ...   0.927  3.875682e+06  2.425397e+06  0.29878\n```\n\n#### 历史行情数据\n\n接口: stock_zh_kcb_daily\n\n目标地址: https://finance.sina.com.cn/realstock/company/sh688001/nc.shtml(示例)\n\n描述: 新浪财经-科创板股票历史行情数据\n\n限量: 单次返回指定 symbol 和 adjust 的所有历史行情数据; 请控制采集的频率, 大量抓取容易封IP\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                 |\n|--------|-----|------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"sh688008\"; 带市场标识的股票代码                                                      |\n| adjust | str | 默认不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; hfq-factor: 返回后复权因子; qfq-factor: 返回前复权因子 |\n\n输出参数\n\n| 名称                | 类型      | 描述                                                                                           |\n|-------------------|---------|----------------------------------------------------------------------------------------------|\n| date              | object  | -                                                                                            |\n| close             | float64 | 收盘价                                                                                          |\n| high              | float64 | 最高价                                                                                          |\n| low               | float64 | 最低价                                                                                          |\n| open              | float64 | 开盘价                                                                                          |\n| volume            | float64 | 成交量(股)                                                                                       |\n| after_volume      | float64 | 盘后量; 参见[科创板盘后固定价格交易](http://www.sse.com.cn/lawandrules/sserules/tib/trading/c/4729491.shtml) |\n| after_amount      | float64 | 盘后额; 参见[科创板盘后固定价格交易](http://www.sse.com.cn/lawandrules/sserules/tib/trading/c/4729491.shtml) |\n| outstanding_share | float64 | 流通股本(股)                                                                                      |\n| turnover          | float64 | 换手率=成交量(股)/流通股本(股)                                                                           |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_kcb_daily_df = ak.stock_zh_kcb_daily(symbol=\"sh688399\", adjust=\"hfq\")\nprint(stock_zh_kcb_daily_df)\n```\n\n数据示例-历史行情数据(后复权)\n\n```\n date            close    high    low  ...  after_amount  outstanding_share  turnover\n2019-12-05  52.33   62.50  50.25  ...      508408.0         13338470.0  0.740740\n2019-12-06  52.79   55.89  50.53  ...       30600.0         13338470.0  0.473652\n2019-12-09  51.00   51.28  48.00  ...           0.0         13338470.0  0.335540\n2019-12-10  50.10   57.51  49.60  ...       75983.0         13338470.0  0.441293\n2019-12-11  53.01   56.58  52.85  ...       94051.0         13338470.0  0.303628\n           ...     ...    ...  ...           ...                ...       ...\n2020-04-14  79.61   81.18  78.33  ...           0.0         13338470.0  0.050237\n2020-04-15  80.75   84.34  80.30  ...       32800.0         13338470.0  0.078527\n2020-04-16  83.40   96.00  82.44  ...       47450.0         13338470.0  0.234366\n2020-04-17  95.95   95.95  88.88  ...           0.0         13338470.0  0.180283\n2020-04-20  95.79  109.97  95.20  ...      188212.0         13338470.0  0.259677\n```\n\n数据示例-后复权因子\n\n```\n  date              hfq_factor\n2019-12-05  1.0000000000000000\n1900-01-01  1.0000000000000000\n```\n\n数据示例-前复权因子\n\n```\n date               qfq_factor\n2019-12-05  1.0000000000000000\n1900-01-01  1.0000000000000000\n```\n\n#### 科创板公告\n\n接口: stock_zh_kcb_report_em\n\n目标地址: https://data.eastmoney.com/notices/kcb.html\n\n描述: 东方财富-科创板报告数据\n\n限量: 单次返回所有科创板上市公司的报告数据\n\n输入参数\n\n| 名称        | 类型  | 描述                   |\n|-----------|-----|----------------------|\n| from_page | int | from_page=1; 始获取的页码  |\n| to_page   | int | to_page=100; 结束获取的页码 |\n\n输出参数\n\n| 名称   | 类型     | 描述                                                                          |\n|------|--------|-----------------------------------------------------------------------------|\n| 代码   | object | -                                                                           |\n| 名称   | object | -                                                                           |\n| 公告标题 | object | -                                                                           |\n| 公告类型 | object | -                                                                           |\n| 公告日期 | object | -                                                                           |\n| 公告代码 | object | 本代码可以用来获取公告详情: http://data.eastmoney.com/notices/detail/688595/{替换到此处}.html |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_kcb_report_em_df = ak.stock_zh_kcb_report_em(from_page=1, to_page=100)\nprint(stock_zh_kcb_report_em_df)\n```\n\n数据示例\n\n```\n        代码    名称  ...       公告日期                公告代码\n0     688092  爱科科技  ...  2024-07-22  AN202407211638153639\n1     688303  大全能源  ...  2024-07-22  AN202407211638152326\n2     688536   思瑞浦  ...  2024-07-22  AN202407211638152204\n3     688599  天合光能  ...  2024-07-22  AN202407211638152159\n4     688352  颀中科技  ...  2024-07-22  AN202407211638151001\n...      ...   ...  ...         ...                   ...\n9995  688370  丛麟科技  ...  2024-05-11  AN202405101632831676\n9996  688131  皓元医药  ...  2024-05-11  AN202405101632831212\n9997  688199  久日新材  ...  2024-05-11  AN202405101632831202\n9998  688199  久日新材  ...  2024-05-11  AN202405101632831197\n9999  688519  南亚新材  ...  2024-05-11  AN202405101632831199\n[10000 rows x 6 columns]\n```\n\n### A+H股\n\n#### 实时行情数据-东财\n\n接口: stock_zh_ah_spot_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#ah_comparison\n\n描述: 东方财富网-行情中心-沪深港通-AH股比价-实时行情, 延迟 15 分钟更新\n\n限量: 单次返回所有 A+H 上市公司的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述        |\n|---------|---------|-----------|\n| 序号      | int64   | -         |\n| 名称      | object  | -         |\n| H股代码    | object  | -         |\n| 最新价-HKD | float64 | 注意单位: HKD |\n| H股-涨跌幅  | float64 | 注意单位: %   |\n| A股代码    | object  | -         |\n| 最新价-RMB | float64 | 注意单位: RMB |\n| A股-涨跌幅  | float64 | 注意单位: %   |\n| 比价      | float64 | -         |\n| 溢价      | float64 | 注意单位: %   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_ah_spot_em_df = ak.stock_zh_ah_spot_em()\nprint(stock_zh_ah_spot_em_df)\n```\n\n数据示例\n\n```\n      序号    名称   H股代码  最新价-HKD  H股-涨跌幅 A股代码  最新价-RMB  A股-涨跌幅 比价 溢价\n0      1    复旦微电  01385    25.65    4.27  688385    47.60    8.92  1.98   98.26\n1      2    长飞光纤  06869    18.40    3.95  601869    36.90    3.19  2.14  114.26\n2      3    山东黄金  01787    15.24    3.67  600547    23.96    2.00  1.68   67.97\n3      4   亿华通-U  02402    27.20    3.62  688339    24.23    0.00  0.95   -4.83\n4      5    南京熊猫  00553     3.28    3.47  600775    10.29    3.31  3.35  235.17\n..   ...     ...    ...      ...     ...     ...      ...     ...   ...     ...\n145  146   万  科Ａ  02202     6.26   -4.13  000002     7.64   -1.93  1.30   30.39\n146  147  百济神州-U  06160   152.10   -4.70  688235   226.35   -4.49  1.59   58.99\n147  148    荣昌生物  09995    16.64   -5.45  688331    32.11   -1.11  2.06  106.16\n148  149     比亚迪  01211   339.00   -6.77  002594   344.84   -4.27  1.09    8.68\n149  150    龙蟠科技  02465     6.16  -13.60  603906    12.13  -10.01  2.10  110.38\n[150 rows x 10 columns]\n```\n\n#### 实时行情数据-腾讯\n\n接口: stock_zh_ah_spot\n\n目标地址: https://stockapp.finance.qq.com/mstats/#mod=list&id=hk_ah&module=HK&type=AH\n\n描述: A+H 股数据是从腾讯财经获取的数据, 延迟 15 分钟更新\n\n限量: 单次返回所有 A+H 上市公司的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 代码  | object  | -       |\n| 名称  | object  | -       |\n| 最新价 | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 涨跌额 | float64 | -       |\n| 买入  | float64 | -       |\n| 卖出  | float64 | -       |\n| 成交量 | float64 | -       |\n| 成交额 | float64 | -       |\n| 今开  | float64 | -       |\n| 昨收  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_ah_spot_df = ak.stock_zh_ah_spot()\nprint(stock_zh_ah_spot_df)\n```\n\n数据示例\n\n```\n        代码       名称   最新价   涨跌幅   涨跌额  ...          成交额    今开    昨收    最高    最低\n0    00525   广深铁路股份  1.66 -0.60 -0.01  ...  18427959.54  1.67  1.67  1.69  1.63\n1    01618     中国中冶  1.59 -1.85 -0.03  ...  11468956.78  1.62  1.62  1.63  1.59\n2    02727     上海电气  1.54  0.00  0.00  ...  12801574.00  1.54  1.54  1.57  1.53\n3    03369     秦港股份  1.49  0.00  0.00  ...   6051885.00  1.49  1.49  1.58  1.48\n4    03678     弘业期货  1.41 -0.70 -0.01  ...   1871710.00  1.43  1.42  1.44  1.41\n..     ...      ...   ...   ...   ...  ...          ...   ...   ...   ...   ...\n155  06806     申万宏源  1.39 -1.42 -0.02  ...   4312447.20  1.41  1.41  1.42  1.39\n156  00991     大唐发电  1.24 -2.36 -0.03  ...  29927046.00  1.26  1.27  1.27  1.23\n157  00323  马鞍山钢铁股份  1.22 -0.81 -0.01  ...   2345447.26  1.23  1.23  1.25  1.22\n158  01635     大众公用  1.20  0.84  0.01  ...    371140.00  1.20  1.19  1.20  1.19\n159  01375     中州证券  1.11 -1.77 -0.02  ...   4867240.00  1.13  1.13  1.13  1.09\n[160 rows x 13 columns]\n```\n\n#### 历史行情数据\n\n接口: stock_zh_ah_daily\n\n目标地址: https://gu.qq.com/hk02359/gp\n\n描述: 腾讯财经-A+H 股数据\n\n限量: 单次返回指定参数的 A+H 上市公司的历史行情数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                          |\n|------------|-----|-------------------------------------------------------------|\n| symbol     | str | symbol=\"02318\"; 港股股票代码, 可以通过 **ak.stock_zh_ah_name()** 函数获取 |\n| start_year | str | start_year=\"2000\"; 开始年份                                     |\n| end_year   | str | end_year=\"2019\"; 结束年份                                       |\n| adjust     | str | adjust=\"\"; 默认为空不复权; 'qfq': 前复权, 'hfq': 后复权                  |\n\n输出参数\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 日期  | object  | -   |\n| 开盘  | float64 | -   |\n| 收盘  | float64 | -   |\n| 最高  | float64 | -   |\n| 最低  | float64 | -   |\n| 成交量 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_ah_daily_df = ak.stock_zh_ah_daily(symbol=\"02318\", start_year=\"2022\", end_year=\"2024\", adjust=\"\")\nprint(stock_zh_ah_daily_df)\n```\n\n数据示例\n\n```\n     日期         开盘   收盘     最高     最低    成交量\n0    2022-01-03  56.80  55.75  56.95  55.60   7231921.0\n1    2022-01-04  55.95  56.50  56.95  55.75  17975862.0\n2    2022-01-05  57.50  56.80  58.00  56.60  28768656.0\n3    2022-01-06  56.90  58.00  58.00  56.90  15464523.0\n4    2022-01-07  58.00  61.10  61.10  57.55  46904651.0\n..          ...    ...    ...    ...    ...         ...\n753  2024-01-23  30.00  31.30  31.85  29.60  69397766.0\n754  2024-01-24  31.75  33.00  33.35  31.10  79928025.0\n755  2024-01-25  33.50  34.60  34.75  32.85  86827346.0\n756  2024-01-26  34.15  33.75  34.70  33.35  56539336.0\n757  2024-01-29  34.05  33.85  34.90  33.75  41424070.0\n[758 rows x 6 columns]\n```\n\n#### A+H股票字典\n\n接口: stock_zh_ah_name\n\n目标地址: https://stockapp.finance.qq.com/mstats/#mod=list&id=hk_ah&module=HK&type=AH\n\n描述: A+H 股数据是从腾讯财经获取的数据, 历史数据按日频率更新\n\n限量: 单次返回所有 A+H 上市公司的代码和名称\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型     | 描述  |\n|-----|--------|-----|\n| 代码  | object | -   |\n| 名称  | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_ah_name_df = ak.stock_zh_ah_name()\nprint(stock_zh_ah_name_df)\n```\n\n数据示例\n\n```\n     代码        名称\n0    01211     比亚迪股份\n1    06160      百济神州\n2    01880      中国中免\n3    00941      中国移动\n4    06821       凯莱英\n..     ...       ...\n144  01053    重庆钢铁股份\n145  00588  北京北辰实业股份\n146  02009      金隅集团\n147  02880      辽港股份\n148  01033     中石化油服\n[149 rows x 2 columns]\n```\n\n### 美股\n\n#### 实时行情数据-东财\n\n接口: stock_us_spot_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#us_stocks\n\n描述: 东方财富网-美股-实时行情\n\n限量: 单次返回美股所有上市公司的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述              |\n|-----|---------|-----------------|\n| 序号  | int64   | -               |\n| 名称  | object  | -               |\n| 最新价 | float64 | 注意单位: 美元        |\n| 涨跌额 | float64 | 注意单位: 美元        |\n| 涨跌幅 | float64 | 注意单位: %         |\n| 开盘价 | float64 | 注意单位: 美元        |\n| 最高价 | float64 | 注意单位: 美元        |\n| 最低价 | float64 | 注意单位: 美元        |\n| 昨收价 | float64 | 注意单位: 美元        |\n| 总市值 | float64 | 注意单位: 美元        |\n| 市盈率 | float64 | -               |\n| 成交量 | float64 | -               |\n| 成交额 | float64 | 注意单位: 美元        |\n| 振幅  | float64 | 注意单位: %         |\n| 换手率 | float64 | 注意单位: %         |\n| 代码  | object  | 注意: 用来获取历史数据的代码 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_us_spot_em_df = ak.stock_us_spot_em()\nprint(stock_us_spot_em_df)\n```\n\n数据示例\n\n```\n          序号                         名称  ...      换手率         代码\n0          1        Nexalin Technology Inc Wt  ...      NaN  105.NXLIW\n1          2           Bionexus Gene Lab Corp  ...   427.44   105.BGLC\n2          3  PepperLime Health Acquisition C  ...      NaN  105.PEPLW\n3          4  Alliance Entertainment Holding   ...      NaN  105.AENTW\n4          5         Digital Brands Group Inc  ...  6569.86   105.DBGI\n      ...                              ...  ...      ...        ...\n11616  11617                      BIOLASE Inc  ...   582.75   105.BIOL\n11617  11618           Sunshine Biopharma Inc  ...   144.85   105.SBFM\n11618  11619                      Sientra Inc  ...    42.00   105.SIEN\n11619  11620        Sunshine Biopharma Inc Wt  ...      NaN  105.SBFMW\n11620  11621  Social Leverage Acquisition Cor  ...      NaN  105.SLACW\n[11621 rows x 16 columns]\n```\n\n#### 实时行情数据-新浪\n\n接口: stock_us_spot\n\n目标地址: https://finance.sina.com.cn/stock/usstock/sector.shtml\n\n描述: 新浪财经-美股; 获取的数据有 15 分钟延迟; 建议使用 ak.stock_us_spot_em() 来获取数据\n\n限量: 单次返回美股所有上市公司的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型  | 描述   |\n|-----|-----|------|\n| -   | -   | 新浪默认 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nus_stock_current_df = ak.stock_us_spot()\nprint(us_stock_current_df)\n```\n\n数据示例(美股股票代码可通过 ak.get_us_stock_name() 函数返回值)\n\n```\n                                                 name  \\\n0                                         Apple, Inc.\n1                                     Microsoft Corp.\n2                                    Amazon.com, Inc.\n3                                      Alphabet, Inc.\n4                                      Alphabet, Inc.\n..                                                ...\n75                               salesforce.com, inc.\n76                     Thermo Fisher Scientific, Inc.\n77                                       AbbVie, Inc.\n78  iPath Series B Bloomberg Energy Subindex Total...\n79              International Business Machines Corp.\n                                                cname category symbol  \\\n0                                                苹果公司      计算机   AAPL\n1                                                微软公司       软件   MSFT\n2                                               亚马逊公司      互联网   AMZN\n3                                                  谷歌      互联网   GOOG\n4                                               谷歌A类股     媒体内容  GOOGL\n..                                                ...      ...    ...\n75                                              赛富时公司       软件    CRM\n76                                          赛默飞世尔科技公司             TMO\n77                                              艾伯维公司  生物技术和制药   ABBV\n78  iPath Series B Bloomberg Energy Subindex Total...     None   JJEB\n79                                    IBM(国际商业机器有限公司)             IBM\n      price   diff   chg preclose     open     high      low amplitude  \\\n0    255.82   7.06  2.84   248.76   249.54   255.93   249.16     2.72%\n1    143.72   0.35  0.24   143.37   144.26   144.42   142.97     1.01%\n2   1791.44  14.78  0.83  1776.66  1788.01  1797.44  1785.21     0.69%\n3   1273.74  13.63  1.08  1260.11  1265.00  1274.62  1260.50     1.12%\n4   1272.25  13.45  1.07  1258.80  1265.80  1273.00  1259.71     1.06%\n..      ...    ...   ...      ...      ...      ...      ...       ...\n75   159.74   3.25  2.08   156.49   157.91   160.09   156.75     2.13%\n76   303.60   1.62  0.54   301.98   305.00   305.28   303.12     0.72%\n77    81.75   2.20  2.77    79.55    80.03    82.18    79.13     3.83%\n78    51.74   0.00  0.00    51.74     0.00     0.00     0.00     3.54%\n79   135.53   1.80  1.35   133.73   134.50   135.56   134.09     1.10%\n      volume         mktcap            pe  market category_id\n0   37781334  1156096660699   21.62468377  NASDAQ           5\n1   33128366  1097361048289   26.81343240  NASDAQ          14\n2    2790354   881483397489   77.65236086  NASDAQ          41\n3    1670072   874498927695   27.11238831  NASDAQ          41\n4    1440607   873475960000   27.08067289  NASDAQ         702\n..       ...            ...           ...     ...         ...\n75   4771053   122239344864  129.86992115    NYSE          14\n76    990471   122222192032   33.88392911    NYSE         738\n77  13356251   121302156830   29.94505474    NYSE         700\n78         0   121175090554          None    AMEX        None\n79   3089789   120621698914   15.65011561    NYSE         750\n```\n\n#### 历史行情数据-东财\n\n接口: stock_us_hist\n\n目标地址: https://quote.eastmoney.com/us/ENTX.html#fullScreenChart\n\n描述: 东方财富网-行情-美股-每日行情\n\n限量: 单次返回指定上市公司的指定 adjust 后的所有历史行情数据；注意其中复权参数是否生效！\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                          |\n|------------|-----|-----------------------------------------------------------------------------|\n| symbol     | str | 美股代码, 可以通过 **ak.stock_us_spot_em()** 函数返回所有的 pandas.DataFrame 里面的 `代码` 字段获取 |\n| period     | str | period='daily'; choice of {'daily', 'weekly', 'monthly'}                    |\n| start_date | str | start_date=\"20210101\"                                                       |\n| end_date   | str | end_date=\"20210601\"                                                         |\n| adjust     | str | 默认 adjust=\"\", 则返回未复权的数据; adjust=\"qfq\" 则返回前复权的数据, adjust=\"hfq\" 则返回后复权的数据     |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 日期  | object  | -        |\n| 开盘  | float64 | 注意单位: 美元 |\n| 收盘  | float64 | 注意单位: 美元 |\n| 最高  | float64 | 注意单位: 美元 |\n| 最低  | float64 | 注意单位: 美元 |\n| 成交量 | int32   | 注意单位: 股  |\n| 成交额 | float64 | 注意单位: 美元 |\n| 振幅  | float64 | 注意单位: %  |\n| 涨跌幅 | float64 | 注意单位: %  |\n| 涨跌额 | float64 | 注意单位: 美元 |\n| 换手率 | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_us_hist_df = ak.stock_us_hist(symbol='106.TTE', period=\"daily\", start_date=\"20200101\", end_date=\"20240214\", adjust=\"qfq\")\nprint(stock_us_hist_df)\n```\n\n数据示例\n\n```\n     日期         开盘   收盘   最高  ...    振幅   涨跌幅  涨跌额 换手率\n0    2021-06-11  41.75  41.24  41.75  ...  0.00  0.00  0.00  0.03\n1    2021-06-14  41.56  41.61  42.17  ...  1.94  0.90  0.37  0.04\n2    2021-06-15  41.40  42.19  42.19  ...  2.04  1.39  0.58  0.09\n3    2021-06-16  42.04  41.71  42.16  ...  1.59 -1.14 -0.48  0.06\n4    2021-06-17  41.61  40.69  41.80  ...  3.72 -2.45 -1.02  0.05\n..          ...    ...    ...    ...  ...   ...   ...   ...   ...\n668  2024-02-07  62.90  63.05  63.26  ...  0.94 -3.07 -2.00  0.27\n669  2024-02-08  63.39  64.19  64.33  ...  1.67  1.81  1.14  0.14\n670  2024-02-09  64.41  64.31  64.53  ...  0.69  0.19  0.12  0.15\n671  2024-02-12  64.40  64.63  64.82  ...  0.98  0.50  0.32  0.14\n672  2024-02-13  65.21  64.43  65.28  ...  1.81 -0.31 -0.20  0.14\n[673 rows x 11 columns]\n```\n\n#### 个股信息查询-雪球\n\n接口: stock_individual_basic_info_us_xq\n\n目标地址: https://xueqiu.com/snowman/S/NVDA/detail#/GSJJ\n\n描述: 雪球-个股-公司概况-公司简介\n\n限量: 单次返回指定 symbol 的个股信息\n\n输入参数\n\n| 名称      | 类型    | 描述                      |\n|---------|-------|-------------------------|\n| symbol  | str   | symbol=\"NVDA\"; 股票代码     |\n| token   | str   | token=None;             |\n| timeout | float | timeout=None; 默认不设置超时参数 |\n\n输出参数\n\n| 名称    | 类型     | 描述  |\n|-------|--------|-----|\n| item  | object | -   |\n| value | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_individual_basic_info_us_xq_df = ak.stock_individual_basic_info_us_xq(symbol=\"SH601127\")\nprint(stock_individual_basic_info_us_xq_df)\n```\n\n数据示例\n\n```\n                             item                                              value\n0                          org_id                                         T000040433\n1                     org_name_cn                                              英伟达公司\n2               org_short_name_cn                                                英伟达\n3                     org_name_en                                 Nvidia Corporation\n4               org_short_name_en                                             Nvidia\n5         main_operation_business                                           图形和通信处理器\n6                 operating_scope  公司的图形和通信处理器已被多种多样的计算平台采用，包括个人数字媒体PC、商用PC、专业工作站...\n7                 district_encode                                             001008\n8             org_cn_introduction  英伟达公司于1993年4月在加利福尼亚州注册成立，并于1998年4月在特拉华州重新注册成立。...\n9            legal_representative                                               None\n10                general_manager                                               None\n11                      secretary                                               None\n12               established_date                                               None\n13                      reg_asset                                               None\n14                      staff_num                                              36000\n15                      telephone                                      1-408-4862000\n16                       postcode                                              95051\n17                            fax                                               None\n18                          email                                               None\n19                    org_website                                     www.nvidia.com\n20                 reg_address_cn                                               特拉华州\n21                 reg_address_en                                               特拉华州\n22              office_address_cn                                               None\n23              office_address_en  2788 San Tomas Expressway\\r\\nSanta Clara\\r\\nCa...\n24                currency_encode                                               None\n25                       currency\n26                    listed_date                                       916981200000\n27                         td_mkt                                      美国NASDAQ证券交易所\n28                       chairman                                               None\n29                executives_nums                                                  6\n30  actual_issue_total_shares_num                                               None\n31             actual_issue_price                                               None\n32            total_raise_capital                                               None\n33                     mainholder                                       领航集团 (8.30%)\n```\n\n#### 分时数据-东财\n\n接口: stock_us_hist_min_em\n\n目标地址: https://quote.eastmoney.com/us/ATER.html\n\n描述: 东方财富网-行情首页-美股-每日分时行情\n\n限量: 单次返回指定上市公司最近 5 个交易日分钟数据, 注意美股数据更新有延时\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                                           |\n|------------|-----|----------------------------------------------------------------------------------------------|\n| symbol     | str | symbol=\"105.ATER\"; 美股代码可以通过 **ak.stock_us_spot_em()** 函数返回所有的 pandas.DataFrame 里面的 `代码` 字段获取 |\n| start_date | str | start_date=\"1979-09-01 09:32:00\"; 日期时间; 默认返回所有数据                                             |\n| end_date   | str | end_date=\"2222-01-01 09:32:00\"; 日期时间; 默认返回所有数据                                               |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 时间  | object  | -        |\n| 开盘  | float64 | 注意单位: 美元 |\n| 收盘  | float64 | 注意单位: 美元 |\n| 最高  | float64 | 注意单位: 美元 |\n| 最低  | float64 | 注意单位: 美元 |\n| 成交量 | float64 | 注意单位: 股  |\n| 成交额 | float64 | 注意单位: 美元 |\n| 最新价 | float64 | 注意单位: 美元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_us_hist_min_em_df = ak.stock_us_hist_min_em(symbol=\"105.ATER\")\nprint(stock_us_hist_min_em_df)\n```\n\n数据示例\n\n```\n          时间    开盘    收盘    最高    最低       成交量          成交额    最新价\n0     2021-08-30 21:30:00  0.00  8.86  8.92  8.86  12147424  108372137.0  8.898\n1     2021-08-30 21:31:00  0.00  8.72  8.90  8.57    998571    8927364.0  8.813\n2     2021-08-30 21:32:00  0.00  8.73  8.73  8.44    725257    6193335.0  8.735\n3     2021-08-30 21:33:00  0.00  8.90  8.98  8.67    546888    4965712.0  8.747\n4     2021-08-30 21:34:00  0.00  8.60  9.00  8.34   1040362    9456790.0  8.739\n                   ...   ...   ...   ...   ...       ...          ...    ...\n1950  2021-09-04 03:56:00  6.67  6.65  6.70  6.65     26769     180608.0  6.478\n1951  2021-09-04 03:57:00  6.65  6.68  6.68  6.65     13643      90551.0  6.478\n1952  2021-09-04 03:58:00  6.68  6.70  6.70  6.67     46469     314155.0  6.480\n1953  2021-09-04 03:59:00  6.70  6.69  6.70  6.69     31059     209314.0  6.481\n1954  2021-09-04 04:00:00  6.70  6.70  6.70  6.67    243168    1549848.0  6.478\n```\n\n#### 历史行情数据-新浪\n\n接口: stock_us_daily\n\n目标地址: http://finance.sina.com.cn/stock/usstock/sector.shtml\n\n描述: 美股历史行情数据，设定 adjust=\"qfq\" 则返回前复权后的数据，默认 adjust=\"\", 则返回未复权的数据，历史数据按日频率更新\n\n限量: 单次返回指定上市公司的指定 adjust 后的所有历史行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                  |\n|--------|-----|---------------------------------------------------------------------|\n| symbol | str | 美股代码, 可以通过 **ak.get_us_stock_name()** 函数返回所有美股代码, 由于美股数据量大, 建议按需要获取 |\n| adjust | str | adjust=\"qfq\" 则返回前复权后的数据，默认 adjust=\"\", 则返回未复权的数据                     |\n\n**ak.get_us_stock_name()**: will return a pandas.DataFrame, which contains name, cname and symbol, you should use\nsymbol!\n\n输出参数-历史数据\n\n| 名称     | 类型         | 描述  |\n|--------|------------|-----|\n| date   | datetime64 | -   |\n| open   | float64    | 开盘价 |\n| high   | float64    | 最高价 |\n| low    | float64    | 最低价 |\n| close  | float64    | 收盘价 |\n| volume | float64    | 成交量 |\n\n输出参数-前复权因子\n\n| 名称         | 类型         | 描述                  |\n|------------|------------|---------------------|\n| date       | datetime64 | 日期                  |\n| qfq_factor | float      | 前复权因子               |\n| adjust     | float      | 由于前复权会出现负值, 该值为调整因子 |\n\nP.S. 复权计算公式: 未复权数据 * qfq_factor + adjust\n\nP.S. \"CIEN\" 股票的新浪美股数据由于复权因子错误，暂不返回前复权数据\n\n接口示例-未复权数据\n\n```python\nimport akshare as ak\n\nstock_us_daily_df = ak.stock_us_daily(symbol=\"AAPL\", adjust=\"\")\nprint(stock_us_daily_df)\n```\n\n数据示例-未复权数据\n\n```\n date         open      high      low    close       volume\n1980-12-12   28.735   28.8750   28.735   28.735    2093900.0\n1980-12-15   27.265   27.3700   27.265   27.265     785200.0\n1980-12-16   25.235   25.3750   25.235   25.235     472000.0\n1980-12-17   25.865   26.0050   25.865   25.865     385900.0\n1980-12-18   26.635   26.7400   26.635   26.635     327900.0\n             ...       ...      ...      ...          ...\n2021-01-04  133.520  133.6116  126.760  129.410  134308607.0\n2021-01-05  128.890  131.7400  128.430  131.010   90749416.0\n2021-01-06  127.720  131.0499  126.382  126.600  139351145.0\n2021-01-07  128.360  131.6300  127.860  130.920  101546989.0\n2021-01-08  132.430  132.6300  130.230  132.050   98373014.0\n```\n\n接口示例-前复权调整后的数据\n\n```python\nimport akshare as ak\n\nstock_us_daily_df = ak.stock_us_daily(symbol=\"AAPL\", adjust=\"qfq\")\nprint(stock_us_daily_df)\n```\n\n数据示例-前复权调整后的数据\n\n```\n date          open      high       low     close       volume\n1980-12-12   -4.8164   -4.8158   -4.8164   -4.8164    2093900.0\n1980-12-15   -4.8230   -4.8225   -4.8230   -4.8230     785200.0\n1980-12-16   -4.8321   -4.8314   -4.8321   -4.8321     472000.0\n1980-12-17   -4.8293   -4.8286   -4.8293   -4.8293     385900.0\n1980-12-18   -4.8258   -4.8253   -4.8258   -4.8258     327900.0\n              ...       ...       ...       ...          ...\n2021-01-04  133.5200  133.6116  126.7600  129.4100  134308607.0\n2021-01-05  128.8900  131.7400  128.4300  131.0100   90749416.0\n2021-01-06  127.7200  131.0499  126.3820  126.6000  139351145.0\n2021-01-07  128.3600  131.6300  127.8600  130.9200  101546989.0\n2021-01-08  132.4300  132.6300  130.2300  132.0500   98373014.0\n```\n\n接口示例-前复权因子\n\n```python\nimport akshare as ak\n\nqfq_df = ak.stock_us_daily(symbol=\"AAPL\", adjust=\"qfq-factor\")\nprint(qfq_df)\n```\n\n数据示例-前复权因子\n\n```\n date               qfq_factor            adjust\n2020-08-07                  1                 0\n2020-05-08                  1      -0.819999993\n2020-02-07                  1      -1.639999986\n2019-11-07                  1      -2.409999967\n2019-08-09                  1      -3.179999948\n                       ...               ...\n1987-11-17  0.035714285714285     -18.958676644\n1987-08-10  0.035714285714285  -18.958778786857\n1987-06-16  0.035714285714285  -18.958855215429\n1987-05-11  0.017857142857142  -18.958855215429\n1900-01-01  0.017857142857142  -18.958893429714\n```\n\n#### 粉单市场\n\n接口: stock_us_pink_spot_em\n\n目标地址: http://quote.eastmoney.com/center/gridlist.html#us_pinksheet\n\n描述: 美股粉单市场的实时行情数据\n\n限量: 单次返回指定所有粉单市场的行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述              |\n|-----|---------|-----------------|\n| 序号  | int64   | -               |\n| 名称  | object  | -               |\n| 最新价 | float64 | 注意单位: 美元        |\n| 涨跌额 | float64 | 注意单位: 美元        |\n| 涨跌幅 | float64 | 注意单位: %         |\n| 开盘价 | float64 | 注意单位: 美元        |\n| 最高价 | float64 | 注意单位: 美元        |\n| 最低价 | float64 | 注意单位: 美元        |\n| 昨收价 | float64 | 注意单位: 美元        |\n| 总市值 | float64 | 注意单位: 美元        |\n| 市盈率 | float64 | -               |\n| 代码  | object  | 注意: 用来获取历史数据的代码 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_us_pink_spot_em_df = ak.stock_us_pink_spot_em()\nprint(stock_us_pink_spot_em_df)\n```\n\n数据示例\n\n```\n      序号           名称                    最新价  ...  总市值  市盈率  代码\n0      1           LiNiu Technology Group  0.0189  ...  NaN  NaN  153.LINUF\n1      2              NOBILIS HEALTH CORP  0.0016  ...  NaN  NaN  153.NRTSF\n2      3                  Yuma Energy Inc  0.0999  ...  NaN  NaN  153.YUMAQ\n3      4                      HHGregg Inc  0.0120  ...  NaN  NaN  153.HGGGQ\n4      5  Helios and Matheson Analytics I  0.0010  ...  NaN  NaN   153.HMNY\n..   ...                              ...     ...  ...  ...  ...        ...\n215  216              root9B Holdings Inc  0.0100  ...  NaN  NaN   153.RTNB\n216  217       Immune Pharmaceuticals Inc  0.0012  ...  NaN  NaN  153.IMNPQ\n217  218                       JRjr33 Inc  0.0005  ...  NaN  NaN  153.JRJRQ\n218  219         Mad Catz Interactive Inc  0.0001  ...  NaN  NaN  153.MCZAF\n219  220         Taronis Technologies Inc  0.0010  ...  NaN  NaN   153.TRNX\n```\n\n#### 知名美股\n\n接口: stock_us_famous_spot_em\n\n目标地址: http://quote.eastmoney.com/center/gridlist.html#us_wellknown\n\n描述: 美股-知名美股的实时行情数据\n\n限量: 单次返回指定 symbol 的行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                       |\n|--------|-----|--------------------------------------------------------------------------|\n| symbol | str | symbol=\"科技类\"; choice of {'科技类', '金融类', '医药食品类', '媒体类', '汽车能源类', '制造零售类'} |\n\n输出参数\n\n| 名称  | 类型      | 描述              |\n|-----|---------|-----------------|\n| 序号  | int64   | -               |\n| 名称  | object  | -               |\n| 最新价 | float64 | 注意单位: 美元        |\n| 涨跌额 | float64 | 注意单位: 美元        |\n| 涨跌幅 | float64 | 注意单位: %         |\n| 开盘价 | float64 | 注意单位: 美元        |\n| 最高价 | float64 | 注意单位: 美元        |\n| 最低价 | float64 | 注意单位: 美元        |\n| 昨收价 | float64 | 注意单位: 美元        |\n| 总市值 | float64 | 注意单位: 美元        |\n| 市盈率 | float64 | -               |\n| 代码  | object  | 注意: 用来获取历史数据的代码 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_us_famous_spot_em_df = ak.stock_us_famous_spot_em(symbol='科技类')\nprint(stock_us_famous_spot_em_df)\n```\n\n数据示例\n\n```\n    序号              名称           最新价  ...         总市值     市盈率        代码\n0    1  Silvergate Capital Corp-A   116.34  ...     3085409047   61.93    106.SI\n1    2  Opendoor Technologies Inc    18.94  ...    11451903533  -19.65  105.OPEN\n2    3                     阿勒格尼技术    17.55  ...     2233160842   -1.82   106.ATI\n3    4                Yandex NV-A    78.71  ...    28129406798  131.13  105.YNDX\n4    5                        爱立信    11.83  ...    39443015025   16.44  105.ERIC\n5    6                        诺基亚     5.91  ...    33269348763  -14.11   106.NOK\n6    7              Groupon Inc-A    22.16  ...      654264338   73.65  105.GRPN\n7    8                         推特    62.46  ...    49840992399  129.65  106.TWTR\n8    9             Facebook Inc-A   378.00  ...  1065750021378   27.36    105.FB\n9   10                         惠普    28.21  ...    32512553599    7.98   106.HPQ\n10  11                       谷歌-C  2898.27  ...  1932435735616   16.84  105.GOOG\n11  12                      阿卡迈技术   113.38  ...    18461647373   31.60  105.AKAM\n12  13                      超威半导体   106.15  ...   128756264684   37.47   105.AMD\n13  14                         思科    58.60  ...   247159324736   23.34  105.CSCO\n14  15                       中华电信    40.05  ...    31068573413   24.84   106.CHT\n15  16                       德州仪器   188.47  ...   173997383234   25.87   105.TXN\n16  17                        奥多比   661.68  ...   315224352000   56.47  105.ADBE\n17  18                        高知特    76.48  ...    40197673856   23.91  105.CTSH\n18  19                        英特尔    53.40  ...   216643800000   11.68  105.INTC\n19  20                     美国电话电报    27.42  ...   195778800000 -100.55     106.T\n20  21                         高通   141.58  ...   159702240000   17.35  105.QCOM\n21  22                         苹果   154.07  ...  2546802675620   29.34  105.AAPL\n22  23              IBM国际商业机器(US)   137.74  ...   123459126717   23.15   106.IBM\n23  24                         陶氏    60.28  ...    44955123381   10.96   106.DOW\n24  25                        思爱普   145.68  ...   171841118251   23.58   106.SAP\n25  26                        英伟达   221.77  ...   554425000000   78.33  105.NVDA\n26  27                      威瑞森通讯    54.44  ...   225387915421   11.28    106.VZ\n27  28                         微软   297.25  ...  2233801423468   36.46  105.MSFT\n28  29                   摩托罗拉解决方案   244.00  ...    41315202400   35.80   106.MSI\n29  30                        亚马逊  3484.16  ...  1764519802163   59.94  105.AMZN\n30  31                         易趣    73.00  ...    47454073765    3.68  105.EBAY\n31  32                    沃达丰(US)    16.61  ...    46152628937  351.55   105.VOD\n32  33                Zynga Inc-A     8.28  ...     9040854574  -53.06  105.ZNGA\n33  34          SentinelOne Inc-A    66.04  ...    16930759265  -85.17     106.S\n```\n\n### 港股\n\n#### 实时行情数据-东财\n\n接口: stock_hk_spot_em\n\n目标地址: http://quote.eastmoney.com/center/gridlist.html#hk_stocks\n\n描述: 所有港股的实时行情数据; 该数据有 15 分钟延时\n\n限量: 单次返回最近交易日的所有港股的数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 序号  | int64   | -        |\n| 代码  | object  | -        |\n| 名称  | object  | -        |\n| 最新价 | float64 | 注意单位: 港元 |\n| 涨跌额 | float64 | 注意单位: 港元 |\n| 涨跌幅 | float64 | 注意单位: %  |\n| 今开  | float64 | -        |\n| 最高  | float64 | -        |\n| 最低  | float64 | -        |\n| 昨收  | float64 | -        |\n| 成交量 | float64 | 注意单位: 股  |\n| 成交额 | float64 | 注意单位: 港元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_spot_em_df = ak.stock_hk_spot_em()\nprint(stock_hk_spot_em_df)\n```\n\n数据示例\n\n```\n     序号     代码      名称    最新价  ...    最低   昨收  成交量         成交额\n0        1  00593     梦东方   2.62  ...    1.6   1.51   2582500   7104955.0\n1        2  08367    倩碧控股  0.225  ...  0.153  0.152  82770000  17723337.0\n2        3  03886  康健国际医疗  0.395  ...  0.305   0.29  54347051  19867777.0\n3        4  00205    财讯传媒  0.475  ...  0.305   0.35   6920400   3218611.0\n4        5  08166  中国农业生态  0.047  ...   0.04  0.037    120000      5230.0\n    ...    ...     ...    ...  ...    ...    ...       ...         ...\n4523  4524  01335    顺泰控股  0.161  ...  0.152  0.195   2310000    376096.0\n4524  4525  08088  八零八八投资  0.051  ...   0.05  0.062   1216000     65144.0\n4525  4526  00809  大成生化科技  0.205  ...  0.195   0.25   4024000    875026.0\n4526  4527  00378    五龙动力  0.012  ...  0.011  0.015  80412000    991172.0\n4527  4528  03638    华邦科技  0.099  ...  0.099  0.128    972000    100308.0\n```\n\n#### 港股主板实时行情数据-东财\n\n接口: stock_hk_main_board_spot_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#hk_mainboard\n\n描述: 港股主板的实时行情数据; 该数据有 15 分钟延时\n\n限量: 单次返回港股主板的数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 序号  | int64   | -        |\n| 代码  | object  | -        |\n| 名称  | object  | -        |\n| 最新价 | float64 | 注意单位: 港元 |\n| 涨跌额 | float64 | 注意单位: 港元 |\n| 涨跌幅 | float64 | 注意单位: %  |\n| 今开  | float64 | -        |\n| 最高  | float64 | -        |\n| 最低  | float64 | -        |\n| 昨收  | float64 | -        |\n| 成交量 | float64 | 注意单位: 股  |\n| 成交额 | float64 | 注意单位: 港元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_main_board_spot_em_df = ak.stock_hk_main_board_spot_em()\nprint(stock_hk_main_board_spot_em_df)\n```\n\n数据示例\n\n```\n        序号     代码            名称  ...      昨收          成交量          成交额\n0        1  02048        易居企业控股  ...   0.385   25513200.0   15353803.0\n1        2  02121          创新奇智  ...  14.920   16877100.0  317864528.0\n2        3  03896           金山云  ...   4.300  109607960.0  558129600.0\n3        4  01552  BHCC HOLDING  ...   0.098     555000.0      63190.0\n4        5  00799           IGG  ...   3.080   42094549.0  155345439.0\n    ...    ...           ...  ...     ...          ...          ...\n2278  2279  02181        迈博药业-B  ...   0.740      16000.0       9060.0\n2279  2280  00974         中国顺客隆  ...   0.670       3000.0       1580.0\n2280  2281  01146        中国服饰控股  ...   0.194       6000.0        806.0\n2281  2282  06928          万马控股  ...   2.410    1816000.0    3545800.0\n2282  2283  01160        金石资本集团  ...   0.750    1600000.0     747500.0\n```\n\n#### 实时行情数据-新浪\n\n接口: stock_hk_spot\n\n目标地址: https://vip.stock.finance.sina.com.cn/mkt/#qbgg_hk\n\n描述: 获取所有港股的实时行情数据 15 分钟延时\n\n限量: 单次返回当前时间戳的所有港股的数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述 |\n|------|---------|----|\n| 日期时间 | object  | -  |\n| 代码   | object  | -  |\n| 中文名称 | object  | -  |\n| 英文名称 | object  | -  |\n| 交易类型 | object  | -  |\n| 最新价  | float64 | -  |\n| 涨跌额  | float64 | -  |\n| 涨跌幅  | float64 | -  |\n| 昨收   | float64 | -  |\n| 今开   | float64 | -  |\n| 最高   | float64 | -  |\n| 最低   | float64 | -  |\n| 成交量  | float64 | -  |\n| 成交额  | float64 | -  |\n| 买一   | float64 | -  |\n| 卖一   | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_spot_df = ak.stock_hk_spot()\nprint(stock_hk_spot_df)\n```\n\n数据示例\n\n```\n       日期时间     代码      中文名称  ...         成交额      买一      卖一\n0     2025/07/07 16:08:06  00001        长和  ...   198584360   48.00   48.05\n1     2025/07/07 16:08:08  00002      中电控股  ...   162263333   66.00   66.05\n2     2025/07/07 16:08:08  00003    香港中华煤气  ...   117155173    6.71    6.72\n3     2025/07/07 16:08:06  00004     九龙仓集团  ...     9018213   24.55   24.60\n4     2025/07/07 16:08:08  00005      汇丰控股  ...  1045740332   95.20   95.25\n...                   ...    ...       ...  ...         ...     ...     ...\n2557  2025/07/07 16:08:10  83690     美团－ＷＲ  ...     5132670  107.00  109.00\n2558  2025/07/07 16:08:10  86618    京东健康－Ｒ  ...           0   38.15   38.45\n2559  2025/07/07 16:08:10  89618  京东集团－ＳＷＲ  ...      811085  112.90  126.00\n2560  2025/07/07 16:08:10  89888  百度集团－ＳＷＲ  ...      712615   78.00   78.75\n2561  2025/07/07 16:08:10  89988   阿里巴巴－ＷＲ  ...     5516825   96.10   96.50\n[2562 rows x 16 columns]\n```\n\n#### 个股信息查询-雪球\n\n接口: stock_individual_basic_info_hk_xq\n\n目标地址: https://xueqiu.com/S/00700\n\n描述: 雪球-个股-公司概况-公司简介\n\n限量: 单次返回指定 symbol 的个股信息\n\n输入参数\n\n| 名称      | 类型    | 描述                      |\n|---------|-------|-------------------------|\n| symbol  | str   | symbol=\"02097\"; 股票代码    |\n| token   | str   | token=None;             |\n| timeout | float | timeout=None; 默认不设置超时参数 |\n\n输出参数\n\n| 名称    | 类型     | 描述  |\n|-------|--------|-----|\n| item  | object | -   |\n| value | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_individual_basic_info_hk_xq_df = ak.stock_individual_basic_info_hk_xq(symbol=\"02097\")\nprint(stock_individual_basic_info_hk_xq_df)\n```\n\n数据示例\n\n```\n           item                                              value\n0       comunic                                        231269720.0\n1     comcnname                                         蜜雪冰城股份有限公司\n2     comenname                                        MIXUE Group\n3       incdate                                    1209484800000.0\n4        rgiofc                 中国河南省郑州市金水区北三环南、文化路东瀚海北金商业中心16004室\n5    hofclctmbu                 中国河南省郑州市金水区北三环南、文化路东瀚海北金商业中心16004室\n6      chairman                                                张红超\n7           mbu                                             现制饮品企业\n8       comintr  我们是一家领先的现制饮品企业,聚焦为广大消费者提供单价约6元人民币(约1美元)的高质平价的现...\n9     refccomty                                                1.0\n10     numtissh                                         17059900.0\n11         ispr                                              202.5\n12         nrfd                                       3291000000.0\n13  nation_name                                                 中国\n14          tel                                      0371-89834090\n15          fax                                      0371-89916887\n16        email                                dongshihui@mxbc.com\n17     web_site                                http://www.mxbc.com\n18    lsdateipo                                    1740931200000.0\n19   mainholder                                                张红超\n```\n\n#### 分时数据-东财\n\n接口: stock_hk_hist_min_em\n\n目标地址: http://quote.eastmoney.com/hk/00948.html\n\n描述: 东方财富网-行情首页-港股-每日分时行情\n\n限量: 单次返回指定上市公司最近 5 个交易日分钟数据, 注意港股有延时\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                                                  |\n|------------|-----|-----------------------------------------------------------------------------------------------------|\n| symbol     | str | symbol=\"01611\"; 港股代码可以通过 **ak.stock_hk_spot_em()** 函数返回所有的 pandas.DataFrame 里面的 `代码` 字段获取           |\n| period     | str | period='5'; choice of {'1', '5', '15', '30', '60'}; 其中 1 分钟数据返回近 5 个交易日数据且不复权                       |\n| adjust     | str | adjust=''; choice of {'', 'qfq', 'hfq'}; '': 不复权, 'qfq': 前复权, 'hfq': 后复权, 其中 1 分钟数据返回近 5 个交易日数据且不复权 |\n| start_date | str | start_date=\"1979-09-01 09:32:00\"; 日期时间; 默认返回所有数据                                                    |\n| end_date   | str | end_date=\"2222-01-01 09:32:00\"; 日期时间; 默认返回所有数据                                                      |\n\n输出参数-1分钟数据\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 时间  | object  | -        |\n| 开盘  | float64 | 注意单位: 港元 |\n| 收盘  | float64 | 注意单位: 港元 |\n| 最高  | float64 | 注意单位: 港元 |\n| 最低  | float64 | 注意单位: 港元 |\n| 成交量 | float64 | 注意单位: 股  |\n| 成交额 | float64 | 注意单位: 港元 |\n| 最新价 | float64 | 注意单位: 港元 |\n\n接口示例-1分钟数据\n\n```python\nimport akshare as ak\n\nstock_hk_hist_min_em_df = ak.stock_hk_hist_min_em(symbol=\"01611\", period='1', adjust='',\n                                                  start_date=\"2021-09-01 09:32:00\",\n                                                  end_date=\"2021-09-07 18:32:00\")  # 其中的 start_date 和 end_date 需要设定为近期\nprint(stock_hk_hist_min_em_df)\n```\n\n数据示例-1分钟数据\n\n```\n                    时间     开盘  收盘    最高    最低   成交量   成交额      最新价\n0     2021-09-01 09:32:00   0.00  11.90  11.90  11.90  15500  184450.0  11.9215\n1     2021-09-01 09:33:00   0.00  11.86  11.88  11.70  27500  326030.0  11.8837\n2     2021-09-01 09:34:00   0.00  11.84  11.86  11.84      0       0.0  11.8837\n3     2021-09-01 09:35:00   0.00  11.80  11.80  11.80      0       0.0  11.8837\n4     2021-09-01 09:36:00   0.00  11.60  11.70  11.60   5000   58200.0  11.8608\n                   ...    ...    ...    ...    ...    ...       ...      ...\n1648  2021-09-07 15:56:00  14.04  14.04  14.04  14.04   1000   14040.0  13.9076\n1649  2021-09-07 15:57:00  14.08  14.06  14.08  14.04   4500   63330.0  13.9078\n1650  2021-09-07 15:58:00  14.04  14.08  14.08  14.04   6500   91390.0  13.9081\n1651  2021-09-07 15:59:00  14.08  14.06  14.08  14.06   1000   14070.0  13.9082\n1652  2021-09-07 16:00:00  14.06  14.10  14.10  14.06  34500  486320.0  13.9102\n```\n\n输出参数-其他\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 时间  | object  | -        |\n| 开盘  | float64 | 注意单位: 港元 |\n| 收盘  | float64 | 注意单位: 港元 |\n| 最高  | float64 | 注意单位: 港元 |\n| 最低  | float64 | 注意单位: 港元 |\n| 涨跌幅 | float64 | 注意单位: %  |\n| 涨跌额 | float64 | 注意单位: 港元 |\n| 成交量 | float64 | 注意单位: 股  |\n| 成交额 | float64 | 注意单位: 港元 |\n| 振幅  | float64 | 注意单位: %  |\n| 换手率 | float64 | 注意单位: %  |\n\n接口示例-其他\n\n```python\nimport akshare as ak\n\nstock_hk_hist_min_em_df = ak.stock_hk_hist_min_em(symbol=\"01611\", period='5', adjust='hfq',\n                                                  start_date=\"2021-09-01 09:32:00\",\n                                                  end_date=\"2021-09-07 18:32:00\")  # 其中的 start_date 和 end_date 需要设定为近期\nprint(stock_hk_hist_min_em_df)\n```\n\n数据示例-其他\n\n```\n                  时间     开盘   收盘   最高  ...    成交量   成交额    振幅   换手率\n0    2021-09-01 09:35:00  12.05  11.85  12.05  ...  48000   570420.0  2.47  0.02\n1    2021-09-01 09:40:00  11.75  11.57  11.75  ...  41500   478780.0  1.86  0.01\n2    2021-09-01 09:45:00  11.57  11.57  11.67  ...  17000   196350.0  0.86  0.01\n3    2021-09-01 09:50:00  11.57  11.67  11.67  ...  21500   248120.0  1.38  0.01\n4    2021-09-01 09:55:00  11.65  11.63  11.69  ...  36500   423360.0  0.51  0.01\n..                   ...    ...    ...    ...  ...    ...        ...   ...   ...\n325  2021-09-07 15:40:00  14.11  14.05  14.11  ...  76500  1073240.0  0.43  0.02\n326  2021-09-07 15:45:00  14.09  14.07  14.13  ...  23500   329810.0  0.43  0.01\n327  2021-09-07 15:50:00  14.07  14.13  14.13  ...  50000   701710.0  0.43  0.02\n328  2021-09-07 15:55:00  14.13  14.13  14.15  ...  54500   767760.0  0.28  0.02\n329  2021-09-07 16:00:00  14.09  14.15  14.15  ...  47500   669150.0  0.42  0.02\n```\n\n#### 历史行情数据-东财\n\n接口: stock_hk_hist\n\n目标地址: https://quote.eastmoney.com/hk/08367.html\n\n描述: 港股-历史行情数据, 可以选择返回复权后数据, 更新频率为日频\n\n限量: 单次返回指定上市公司的历史行情数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                             |\n|------------|-----|----------------------------------------------------------------|\n| symbol     | str | symbol=\"00593\"; 港股代码,可以通过 **ak.stock_hk_spot_em()** 函数返回所有港股代码 |\n| period     | str | period='daily'; choice of {'daily', 'weekly', 'monthly'}       |\n| start_date | str | start_date=\"19700101\"; 开始日期                                    |\n| end_date   | str | end_date=\"22220101\"; 结束日期                                      |\n| adjust     | str | adjust=\"\": 返回未复权的数据, 默认; qfq: 返回前复权数据; hfq: 返回后复权数据;           |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 日期  | object  | -        |\n| 开盘  | float64 | 注意单位: 港元 |\n| 收盘  | float64 | 注意单位: 港元 |\n| 最高  | float64 | 注意单位: 港元 |\n| 最低  | float64 | 注意单位: 港元 |\n| 成交量 | int64   | 注意单位: 股  |\n| 成交额 | float64 | 注意单位: 港元 |\n| 振幅  | float64 | 注意单位: %  |\n| 涨跌幅 | float64 | 注意单位: %  |\n| 涨跌额 | float64 | 注意单位: 港元 |\n| 换手率 | float64 | 注意单位: %  |\n\n接口示例-未复权\n\n```python\nimport akshare as ak\n\nstock_hk_hist_df = ak.stock_hk_hist(symbol=\"00593\", period=\"daily\", start_date=\"19700101\", end_date=\"22220101\", adjust=\"\")\nprint(stock_hk_hist_df)\n```\n\n数据示例-未复权\n\n```\n       日期        开盘    收盘  最高    最低  ...  成交额     振幅    涨跌幅   涨跌额   换手率\n0     1998-01-02  0.64  0.64  0.67  0.62  ...    805000.0   0.00   0.00  0.00  0.45\n1     1998-01-05  0.63  0.59  0.63  0.59  ...   2512000.0   6.25  -7.81 -0.05  1.47\n2     1998-01-06  0.60  0.60  0.63  0.60  ...   1199000.0   5.08   1.69  0.01  0.69\n3     1998-01-07  0.60  0.58  0.60  0.58  ...   1765000.0   3.33  -3.33 -0.02  1.05\n4     1998-01-08  0.59  0.58  0.59  0.56  ...    864000.0   5.17   0.00  0.00  0.53\n          ...   ...   ...   ...   ...  ...         ...    ...    ...   ...   ...\n4770  2023-11-13  1.80  1.39  1.80  1.30  ...     85720.0  31.65 -12.03 -0.19  0.02\n4771  2023-11-14  1.31  1.26  1.58  1.10  ...  18368185.0  34.53  -9.35 -0.13  5.09\n4772  2023-11-15  1.40  1.35  1.40  1.23  ...  20318650.0  13.49   7.14  0.09  5.35\n4773  2023-11-16  1.35  1.38  1.39  1.34  ...  15420060.0   3.70   2.22  0.03  4.00\n4774  2023-11-17  1.38  1.47  1.47  1.38  ...   7020800.0   6.52   6.52  0.09  1.74\n[4775 rows x 11 columns]\n```\n\n输出参数-前复权\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 日期  | object  | -        |\n| 开盘  | float64 | 注意单位: 港元 |\n| 收盘  | float64 | 注意单位: 港元 |\n| 最高  | float64 | 注意单位: 港元 |\n| 最低  | float64 | 注意单位: 港元 |\n| 成交量 | int64   | 注意单位: 股  |\n| 成交额 | float64 | 注意单位: 港元 |\n| 振幅  | float64 | 注意单位: %  |\n| 涨跌幅 | float64 | 注意单位: %  |\n| 涨跌额 | float64 | 注意单位: 港元 |\n| 换手率 | float64 | 注意单位: %  |\n\n接口示例-前复权\n\n```python\nimport akshare as ak\n\nstock_hk_hist_qfq_df = ak.stock_hk_hist(symbol=\"00593\", period=\"daily\", start_date=\"19700101\", end_date=\"22220101\", adjust=\"qfq\")\nprint(stock_hk_hist_qfq_df)\n```\n\n数据示例-前复权\n\n```\n       日期     开盘     收盘     最高  ...     振幅    涨跌幅   涨跌额   换手率\n0     1998-01-02  1.713  1.713  1.863  ...   0.00   0.00  0.00  0.45\n1     1998-01-05  1.663  1.463  1.663  ...  11.68 -14.59 -0.25  1.47\n2     1998-01-06  1.513  1.513  1.663  ...  10.25   3.42  0.05  0.69\n3     1998-01-07  1.513  1.413  1.513  ...   6.61  -6.61 -0.10  1.05\n4     1998-01-08  1.463  1.413  1.463  ...  10.62   0.00  0.00  0.53\n          ...    ...    ...    ...  ...    ...    ...   ...   ...\n4770  2023-11-13  1.800  1.390  1.800  ...  31.65 -12.03 -0.19  0.02\n4771  2023-11-14  1.310  1.260  1.580  ...  34.53  -9.35 -0.13  5.09\n4772  2023-11-15  1.400  1.350  1.400  ...  13.49   7.14  0.09  5.35\n4773  2023-11-16  1.350  1.380  1.390  ...   3.70   2.22  0.03  4.00\n4774  2023-11-17  1.380  1.470  1.470  ...   6.52   6.52  0.09  1.74\n[4775 rows x 11 columns]\n```\n\n输出参数-后复权\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 日期  | object  | -        |\n| 开盘  | float64 | 注意单位: 港元 |\n| 收盘  | float64 | 注意单位: 港元 |\n| 最高  | float64 | 注意单位: 港元 |\n| 最低  | float64 | 注意单位: 港元 |\n| 成交量 | int32   | 注意单位: 股  |\n| 成交额 | float64 | 注意单位: 港元 |\n| 振幅  | float64 | 注意单位: %  |\n| 涨跌幅 | float64 | 注意单位: %  |\n| 涨跌额 | float64 | 注意单位: 港元 |\n| 换手率 | float64 | 注意单位: %  |\n\n接口示例-后复权\n\n```python\nimport akshare as ak\n\nstock_hk_hist_hfq_df = ak.stock_hk_hist(symbol=\"00593\", period=\"daily\", start_date=\"19700101\", end_date=\"22220101\", adjust=\"hfq\")\nprint(stock_hk_hist_hfq_df)\n```\n\n数据示例-后复权\n\n```\n      日期       开盘     收盘     最高  ...   振幅   涨跌幅  涨跌额   换手率\n0     1998-01-02  0.715  0.715  0.745  ...   0.00  0.00  0.000  0.45\n1     1998-01-05  0.705  0.665  0.705  ...   5.59 -6.99 -0.050  1.47\n2     1998-01-06  0.675  0.675  0.705  ...   4.51  1.50  0.010  0.69\n3     1998-01-07  0.675  0.655  0.675  ...   2.96 -2.96 -0.020  1.05\n4     1998-01-08  0.665  0.655  0.665  ...   4.58  0.00  0.000  0.53\n          ...    ...    ...    ...  ...    ...   ...    ...   ...\n4770  2023-11-13  0.733  0.651  0.733  ...  14.51 -5.52 -0.038  0.02\n4771  2023-11-14  0.635  0.625  0.689  ...  14.75 -3.99 -0.026  5.09\n4772  2023-11-15  0.653  0.643  0.653  ...   5.44  2.88  0.018  5.35\n4773  2023-11-16  0.643  0.649  0.651  ...   1.56  0.93  0.006  4.00\n4774  2023-11-17  0.649  0.667  0.667  ...   2.77  2.77  0.018  1.74\n[4775 rows x 11 columns]\n```\n\n#### 历史行情数据-新浪\n\n接口: stock_hk_daily\n\n目标地址: http://stock.finance.sina.com.cn/hkstock/quotes/01336.html(个例)\n\n描述:港股-历史行情数据, 可以选择返回复权后数据,更新频率为日频\n\n限量: 单次返回指定上市公司的历史行情数据(包括前后复权因子), 提供新浪财经拥有的该股票的所有数据(\n并不等于该股票从上市至今的数据)\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                             |\n|--------|-----|------------------------------------------------------------------------------------------------|\n| symbol | str | 港股代码,可以通过 **ak.stock_hk_spot()** 函数返回所有港股代码                                                    |\n| adjust | str | \"\": 返回未复权的数据 ; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; qfq-factor: 返回前复权因子和调整; hfq-factor: 返回后复权因子和调整; |\n\n输出参数-历史行情数据(后复权)\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| date   | object  | 日期  |\n| open   | float64 | 开盘价 |\n| high   | float64 | 最高价 |\n| low    | float64 | 最低价 |\n| close  | float64 | 收盘价 |\n| volume | float64 | 成交量 |\n\n接口示例-历史行情数据(后复权)\n\n```python\nimport akshare as ak\n\nstock_hk_daily_hfq_df = ak.stock_hk_daily(symbol=\"00700\", adjust=\"hfq\")\nprint(stock_hk_daily_hfq_df)\n```\n\n数据示例-历史行情数据(后复权)\n\n```\n           date      open      high       low     close       volume\n0    2004-06-16     4.375     4.625     4.075     4.150  439775000.0\n1    2004-06-17     4.150     4.375     4.125     4.225   83801500.0\n2    2004-06-18     4.200     4.250     3.950     4.025   36598000.0\n3    2004-06-21     4.125     4.125     3.950     4.000   22817000.0\n4    2004-06-23     4.050     4.450     4.025     4.425   55016000.0\n         ...       ...       ...       ...       ...          ...\n4163 2021-05-24  2968.040  2975.540  2918.040  2963.040   16608372.0\n4164 2021-05-25  2983.040  3100.540  2978.040  3085.540   27044587.0\n4165 2021-05-26  3158.040  3158.040  3095.540  3125.540   18726374.0\n4166 2021-05-27  3085.540  3100.540  3045.540  3063.040   25744926.0\n4167 2021-05-28  3075.540  3095.540  3040.540  3043.040   15183086.0\n```\n\n输出参数-历史行情数据(未复权)\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| date   | object  | 日期  |\n| open   | float64 | 开盘价 |\n| high   | float64 | 最高价 |\n| low    | float64 | 最低价 |\n| close  | float64 | 收盘价 |\n| volume | float64 | 成交量 |\n\n接口示例-历史行情数据(未复权)\n\n```python\nimport akshare as ak\n\nstock_hk_daily_df = ak.stock_hk_daily(symbol=\"00700\", adjust=\"\")\nprint(stock_hk_daily_df)\n```\n\n数据示例-历史行情数据(未复权)\n\n```\n            date     open     high      low    close       volume\n0     2004-06-16    4.375    4.625    4.075    4.150  439775000.0\n1     2004-06-17    4.150    4.375    4.125    4.225   83801500.0\n2     2004-06-18    4.200    4.250    3.950    4.025   36598000.0\n3     2004-06-21    4.125    4.125    3.950    4.000   22817000.0\n4     2004-06-23    4.050    4.450    4.025    4.425   55016000.0\n          ...      ...      ...      ...      ...          ...\n4165  2021-05-24  586.500  588.000  576.500  585.500   16608372.0\n4166  2021-05-25  589.500  613.000  588.500  610.000   27044587.0\n4167  2021-05-26  624.500  624.500  612.000  618.000   18726374.0\n4168  2021-05-27  610.000  613.000  602.000  605.500   25744926.0\n4169  2021-05-28  608.000  612.000  601.000  601.500   15183086.0\n```\n\n输出参数-后复权因子\n\n| 名称         | 类型     | 描述    |\n|------------|--------|-------|\n| date       | object | 日期    |\n| hfq_factor | object | 后复权因子 |\n| cash       | object | 现金分红  |\n\n接口示例-后复权因子\n\n```python\nimport akshare as ak\n\nstock_hk_daily_hfq_factor_df = ak.stock_hk_daily(symbol=\"00700\", adjust=\"hfq-factor\")\nprint(stock_hk_daily_hfq_factor_df)\n```\n\n数据示例-后复权因子\n\n```\n         date hfq_factor   cash\n0  2021-05-24          5  35.54\n1  2020-05-15          5  27.54\n2  2019-05-17          5  21.54\n3  2018-12-28          5  16.54\n4  2018-05-18          5  16.28\n5  2017-05-19          5  11.88\n6  2016-05-20          5   8.83\n7  2015-05-15          5   6.48\n8  2014-05-16          5   4.68\n9  2014-05-15          5   3.48\n10 2013-05-20          1   3.48\n11 2012-05-18          1   2.48\n12 2011-05-03          1   1.73\n13 2010-05-05          1   1.18\n14 2009-05-06          1   0.78\n15 2008-05-06          1   0.43\n16 2007-05-09          1   0.27\n17 2006-05-15          1   0.15\n18 2005-04-19          1   0.07\n19 1900-01-01          1      0\n```\n\n#### 知名港股\n\n接口: stock_hk_famous_spot_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#hk_wellknown\n\n描述: 东方财富网-行情中心-港股市场-知名港股实时行情数据\n\n限量: 单次返回全部行情数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述       |\n|-----|---------|----------|\n| 序号  | int64   | -        |\n| 代码  | object  | -        |\n| 名称  | object  | -        |\n| 最新价 | float64 | 注意单位: 港元 |\n| 涨跌额 | float64 | 注意单位: 港元 |\n| 涨跌幅 | float64 | 注意单位: %  |\n| 今开  | float64 | 注意单位: 港元 |\n| 最高  | float64 | 注意单位: 港元 |\n| 最低  | float64 | 注意单位: 港元 |\n| 昨收  | float64 | 注意单位: 港元 |\n| 成交量 | float64 | 注意单位: 股  |\n| 成交额 | float64 | 注意单位: 港元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_famous_spot_em_df = ak.stock_hk_famous_spot_em()\nprint(stock_hk_famous_spot_em_df)\n```\n\n数据示例\n\n```\n      序号 代码       名称    最新价  ...    最低     昨收    成交量           成交额\n0      1  01918      融创中国   2.04  ...   1.91   1.91  633638656.0  1.295074e+09\n1      2  00763      中兴通讯  34.65  ...  31.50  32.85   90643056.0  3.088137e+09\n2      3  00753      中国国航   4.56  ...   4.25   4.33   34639744.0  1.560062e+08\n3      4  01928  金沙中国有限公司  18.08  ...  17.20  17.18   37260253.0  6.721171e+08\n4      5  03900      绿城中国  10.38  ...   9.89   9.91   33031905.0  3.421672e+08\n..   ...    ...       ...    ...  ...    ...    ...          ...           ...\n113  114  02400      心动公司  32.15  ...  31.60  34.20    4769000.0  1.544492e+08\n114  115  01833     平安好医生   8.68  ...   8.55   9.31   53910271.0  4.845739e+08\n115  116  02269      药明生物  23.65  ...  23.10  26.00  170040773.0  4.052070e+09\n116  117  02359      药明康德  62.90  ...  62.40  70.00   20403989.0  1.314193e+09\n117  118  09698   万国数据-SW  42.70  ...  41.30  48.30   24768786.0  1.068253e+09\n[118 rows x 12 columns]\n```\n\n#### 证券资料\n\n接口: stock_hk_security_profile_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CompanyProfile\n\n描述: 东方财富-港股-证券资料\n\n限量: 单次返回全部数据\n\n输入参数\n\n| 名称     | 类型  | 描述             |\n|--------|-----|----------------|\n| symbol | str | symbol=\"03900\" |\n\n输出参数\n\n| 名称             | 类型      | 描述 |\n|----------------|---------|----|\n| 证券代码           | object  | -  |\n| 证券简称           | object  | -  |\n| 上市日期           | object  | -  |\n| 证券类型           | object  | -  |\n| 发行价            | float64 | -  |\n| 发行量(股)         | int64   | -  |\n| 每手股数           | int64   | -  |\n| 每股面值           | object  | -  |\n| 交易所            | object  | -  |\n| 板块             | object  | -  |\n| 年结日            | object  | -  |\n| ISIN（国际证券识别编码） | object  | -  |\n| 是否沪港通标的        | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_security_profile_em_df = ak.stock_hk_security_profile_em(symbol=\"03900\")\nprint(stock_hk_security_profile_em_df)\n```\n\n数据示例\n\n```\n       证券代码  证券简称                 上市日期  ... ISIN（国际证券识别编码）  是否沪港通标的  是否深港通标的\n0  03900.HK  绿城中国  2006-07-13 00:00:00  ...   KYG4100M1050        是        是\n[1 rows x 14 columns]\n```\n\n#### 公司资料\n\n接口: stock_hk_company_profile_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CompanyProfile\n\n描述: 东方财富-港股-公司资料\n\n限量: 单次返回全部数据\n\n输入参数\n\n| 名称     | 类型  | 描述             |\n|--------|-----|----------------|\n| symbol | str | symbol=\"03900\" |\n\n输出参数\n\n| 名称     | 类型     | 描述 |\n|--------|--------|----|\n| 公司名称   | object | -  |\n| 英文名称   | object | -  |\n| 注册地    | object | -  |\n| 公司成立日期 | object | -  |\n| 所属行业   | object | -  |\n| 董事长    | object | -  |\n| 公司秘书   | object | -  |\n| 员工人数   | int64  | -  |\n| 办公地址   | object | -  |\n| 公司网址   | object | -  |\n| E-MAIL | object | -  |\n| 年结日    | object | -  |\n| 联系电话   | object | -  |\n| 核数师    | object | -  |\n| 传真     | object | -  |\n| 公司介绍   | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_company_profile_em_df = ak.stock_hk_company_profile_em(symbol=\"03900\")\nprint(stock_hk_company_profile_em_df)\n```\n\n数据示例\n\n```\n         公司名称  ...                                               公司介绍\n0  绿城中国控股有限公司  ...      绿城中国控股有限公司(以下简称“绿城中国”)(股票代码03900.HK),1995年...\n[1 rows x 17 columns]\n```\n\n#### 财务指标\n\n接口: stock_hk_financial_indicator_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CoreReading\n\n描述: 东方财富-港股-核心必读-最新指标\n\n限量: 单次返回全部数据\n\n输入参数\n\n| 名称     | 类型  | 描述             |\n|--------|-----|----------------|\n| symbol | str | symbol=\"03900\" |\n\n输出参数\n\n| 名称             | 类型     | 描述 |\n|----------------|--------|----|\n| 基本每股收益(元)      | object | -  |\n| 每股净资产(元)       | object | -  |\n| 法定股本(股)        | object | -  |\n| 每手股            | object | -  |\n| 每股股息TTM(港元)    | object | -  |\n| 派息比率(%)        | object | -  |\n| 已发行股本(股)       | object | -  |\n| 已发行股本-H股(股)    | int64  | -  |\n| 每股经营现金流(元)     | object | -  |\n| 股息率TTM(%)      | object | -  |\n| 总市值(港元)        | object | -  |\n| 港股市值(港元)       | object | -  |\n| 营业总收入          | object | -  |\n| 营业总收入滚动环比增长(%) | object | -  |\n| 销售净利率(%)       | object | -  |\n| 净利润            | object | -  |\n| 净利润滚动环比增长(%)   | object | -  |\n| 股东权益回报率(%)     | object | -  |\n| 市盈率            | object | -  |\n| 市净率            | object | -  |\n| 总资产回报率(%)      | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_financial_indicator_em_df = ak.stock_hk_financial_indicator_em(symbol=\"03900\")\nprint(stock_hk_financial_indicator_em_df)\n```\n\n数据示例\n\n```\n   基本每股收益(元)   每股净资产(元)      法定股本(股)  每手股  每股股息TTM(港元)   派息比率(%)    已发行股本(股)  ...  销售净利率(%)        净利润  净利润滚动环比增长(%)  股东权益回报率(%)        市盈率       市净率  总资产回报率(%)\n0       0.08  14.006448  10000000000  500        0.328 -322.1807  2539598690  ...  2.270029  209907000   -114.943944    0.583899 -87.240653  0.640675   0.040922\n[1 rows x 21 columns]\n```\n\n\n#### 分红派息\n\n接口: stock_hk_dividend_payout_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CoreReading\n\n描述: 东方财富-港股-核心必读-分红派息\n\n限量: 单次返回全部数据\n\n输入参数\n\n| 名称     | 类型  | 描述             |\n|--------|-----|----------------|\n| symbol | str | symbol=\"03900\" |\n\n输出参数\n\n| 名称     | 类型     | 描述 |\n|--------|--------|----|\n| 最新公告日期 | object | -  |\n| 财政年度   | object | -  |\n| 分红方案   | object | -  |\n| 分配类型   | object | -  |\n| 除净日    | object | -  |\n| 截至过户日  | object | -  |\n| 发放日    | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_dividend_payout_em_df = ak.stock_hk_dividend_payout_em(symbol=\"03900\")\nprint(stock_hk_dividend_payout_em_df)\n```\n\n数据示例\n\n```\n    最新公告日期  财政年度  ...      截至过户日         发放日\n0   2025-06-20  2024  ...  2025/06/27-2025/07/02  2025-07-31\n1   2024-06-14  2023  ...  2024/06/21-2024/06/25  2024-07-31\n2   2023-06-16  2022  ...  2023/06/23-2023/06/27  2023-07-31\n3   2022-06-17  2021  ...  2022/06/24-2022/06/28  2022-07-29\n4   2021-06-18  2020  ...  2021/06/25-2021/06/29  2021-07-31\n5   2020-06-12  2019  ...  2020/06/19-2020/06/23  2020-07-31\n6   2019-06-14  2018  ...  2019/06/21-2019/06/25  2019-07-29\n7   2018-06-15  2017  ...  2018/06/22-2018/06/26  2018-07-18\n8   2017-06-16  2016  ...  2017/06/22-2017/06/26  2017-07-31\n9   2014-06-27  2013  ...  2014/07/04-2014/07/09  2014-07-18\n10  2013-06-18  2012  ...  2013/06/27-2013/07/02  2013-07-12\n11  2012-02-07  2011  ...  2012/02/29-2012/03/02  2012-03-19\n12  2011-06-14  2010  ...  2011/06/07-2011/06/13  2011-06-17\n13  2010-08-25  2010  ...  2010/09/13-2010/09/15  2010-09-27\n14  2010-06-04  2009  ...  2010/06/01-2010/06/03  2010-06-11\n15  2009-09-18  2009  ...  2009/10/12-2009/10/14  2009-10-23\n16  2012-06-18  2008  ...  2009/07/04-2009/07/08  2009-07-17\n17  2008-05-26  2007  ...  2008/05/21-2008/05/23  2008-05-30\n18  2007-05-14  2006  ...  2007/05/07-2007/05/11  2007-05-22\n[19 rows x 7 columns]\n```\n\n\n#### 行业对比\n\n##### 成长性对比\n\n接口: stock_hk_growth_comparison_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/IndustryComparison\n\n描述: 东方财富-港股-行业对比-成长性对比\n\n限量: 单次返回全部数据\n\n输入参数\n\n| 名称     | 类型  | 描述             |\n|--------|-----|----------------|\n| symbol | str | symbol=\"03900\" |\n\n输出参数\n\n| 名称                  | 类型      | 描述 |\n|---------------------|---------|----|\n| 代码                  | object  | -  |\n| 简称                  | object  | -  |\n| 基本每股收益同比增长率         | float64 | -  |\n| 基本每股收益同比增长率排名       | int64   | -  |\n| 营业收入同比增长率           | float64 | -  |\n| 营业收入同比增长率排名         | int64   | -  |\n| 营业利润率同比增长率          | float64 | -  |\n| 营业利润率同比增长率排名        | int64   | -  |\n| 基本每股收总资产同比增长率益同比增长率 | float64 | -  |\n| 总资产同比增长率排名          | int64   | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_growth_comparison_em_df = ak.stock_hk_growth_comparison_em(symbol=\"03900\")\nprint(stock_hk_growth_comparison_em_df)\n```\n\n数据示例\n\n```\n      代码    简称  基本每股收益同比增长率  基本每股收益同比增长率排名 ...  总资产同比增长率排名\n0  03900  绿城中国   -90.123457            171          ...          91\n```\n\n##### 估值对比\n\n接口: stock_hk_valuation_comparison_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/IndustryComparison\n\n描述: 东方财富-港股-行业对比-估值对比\n\n限量: 单次返回全部数据\n\n输入参数\n\n| 名称     | 类型  | 描述             |\n|--------|-----|----------------|\n| symbol | str | symbol=\"03900\" |\n\n输出参数\n\n| 名称        | 类型      | 描述 |\n|-----------|---------|----|\n| 代码        | object  | -  |\n| 简称        | object  | -  |\n| 市盈率-TTM   | float64 | -  |\n| 市盈率-TTM排名 | int64   | -  |\n| 市盈率-LYR   | float64 | -  |\n| 市盈率-LYR排名 | int64   | -  |\n| 市净率-MRQ   | float64 | -  |\n| 市净率-MRQ排名 | int64   | -  |\n| 市净率-LYR   | float64 | -  |\n| 市净率-LYR排名 | int64   | -  |\n| 市销率-TTM   | float64 | -  |\n| 市销率-TTM排名 | int64   | -  |\n| 市销率-LYR   | float64 | -  |\n| 市销率-LYR排名 | int64   | -  |\n| 市现率-TTM   | float64 | -  |\n| 市现率-TTM排名 | int64   | -  |\n| 市现率-LYR   | float64 | -  |\n| 市现率-LYR排名 | int64   | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_valuation_comparison_em_df = ak.stock_hk_valuation_comparison_em(symbol=\"03900\")\nprint(stock_hk_valuation_comparison_em_df)\n```\n\n数据示例\n\n```\n      代码    简称   市盈率-TTM  市盈率-TTM排名    ...   市现率-LYR  市现率-LYR排名\n0  03900  绿城中国 -86.44272         97  14.363182      -30.427808      121\n[1 rows x 18 columns]\n```\n\n\n##### 规模对比\n\n接口: stock_hk_scale_comparison_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/IndustryComparison\n\n描述: 东方财富-港股-行业对比-规模对比\n\n限量: 单次返回全部数据\n\n输入参数\n\n| 名称     | 类型  | 描述             |\n|--------|-----|----------------|\n| symbol | str | symbol=\"03900\" |\n\n输出参数\n\n| 名称      | 类型      | 描述 |\n|---------|---------|----|\n| 代码      | object  | -  |\n| 简称      | object  | -  |\n| 总市值     | float64 | -  |\n| 总市值排名   | int64   | -  |\n| 流通市值    | float64 | -  |\n| 流通市值排名  | int64   | -  |\n| 营业总收入   | int64   | -  |\n| 营业总收入排名 | int64   | -  |\n| 净利润     | int64   | -  |\n| 净利润排名   | int64   | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_scale_comparison_em_df = ak.stock_hk_scale_comparison_em(symbol=\"03900\")\nprint(stock_hk_scale_comparison_em_df)\n```\n\n数据示例\n\n```\n    代码   简称       总市值  总市值排名  ...    营业总收入  营业总收入排名  净利润  净利润排名\n0  03900  绿城中国  2.201719e+10     20  ...  53368264000        6  209907000     37\n[1 rows x 10 columns]\n```\n\n### 机构调研\n\n#### 机构调研-统计\n\n接口: stock_jgdy_tj_em\n\n目标地址: http://data.eastmoney.com/jgdy/tj.html\n\n描述: 东方财富网-数据中心-特色数据-机构调研-机构调研统计\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称   | 类型  | 描述                       |\n|------|-----|--------------------------|\n| date | str | date=\"20180928\"; 开始查询的时间 |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 代码     | object  | -       |\n| 名称     | object  | -       |\n| 最新价    | float64 | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 接待机构数量 | int64   | -       |\n| 接待方式   | object  | -       |\n| 接待人员   | object  | -       |\n| 接待地点   | object  | -       |\n| 接待日期   | object  | -       |\n| 公告日期   | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_jgdy_tj_em_df = ak.stock_jgdy_tj_em(date=\"20210128\")\nprint(stock_jgdy_tj_em_df)\n```\n\n数据示例\n\n```\n      序号      代码    名称  ...                 接待地点        接待日期        公告日期\n0      1  002315  焦点科技  ...               线上电话会议  2021-02-02  2021-02-03\n1      2  300415   伊之密  ...  广东省佛山市顺德顺昌路12号3号会议室  2021-02-02  2021-02-03\n2      3  002092  中泰化学  ...                公司会议室  2021-02-02  2021-02-03\n3      4  002562  兄弟科技  ...                   线上  2021-02-02  2021-02-03\n4      5  002749  国光股份  ...              公司龙泉办公区  2021-02-02  2021-02-03\n..   ...     ...   ...  ...                  ...         ...         ...\n111  112  000698  沈阳化工  ...             公司董事会办公室  2021-01-29  2021-01-29\n112  113  688669  聚石化学  ...                 电话会议  2021-01-29  2021-01-29\n113  114  300143  盈康生命  ...                 电话会议  2021-01-29  2021-01-29\n114  115  002438  江苏神通  ...           公司董事会秘书办公室  2021-01-29  2021-01-29\n115  116  002735  王子新材  ...                公司会议室  2021-01-29  2021-01-29\n```\n\n#### 机构调研-详细\n\n接口: stock_jgdy_detail_em\n\n目标地址: http://data.eastmoney.com/jgdy/xx.html\n\n描述: 东方财富网-数据中心-特色数据-机构调研-机构调研详细\n\n限量: 单次所有历史数据, 由于数据量比较大需要等待一定时间\n\n输入参数\n\n| 名称   | 类型  | 描述                       |\n|------|-----|--------------------------|\n| date | str | date=\"20241211\"; 开始查询的时间 |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 序号   | int64   | -       |\n| 代码   | object  | -       |\n| 名称   | object  | -       |\n| 最新价  | float64 | -       |\n| 涨跌幅  | float64 | 注意单位: % |\n| 调研机构 | object  | -       |\n| 机构类型 | object  | -       |\n| 调研人员 | object  | -       |\n| 接待方式 | object  | -       |\n| 接待人员 | object  | -       |\n| 接待地点 | object  | -       |\n| 调研日期 | object  | -       |\n| 公告日期 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_jgdy_detail_em_df = ak.stock_jgdy_detail_em(date=\"20241211\")\nprint(stock_jgdy_detail_em_df)\n```\n\n数据示例\n\n```\n   序号   代码    名称  ...     接待地点      调研日期      公告日期\n0   1  002024  ST易购  ...     武汉中南店  2024-12-12  2024-12-12\n1   2  002024  ST易购  ...     武汉中南店  2024-12-12  2024-12-12\n2   3  002521  齐峰新材  ...     公司接待室  2024-12-12  2024-12-12\n3   4  002521  齐峰新材  ...     公司接待室  2024-12-12  2024-12-12\n4   5  301390  经纬股份  ...        公司  2024-12-12  2024-12-12\n5   6  600030  中信证券  ...  北京中信证券大厦  2024-12-12  2024-12-12\n6   7  600030  中信证券  ...  北京中信证券大厦  2024-12-12  2024-12-12\n7   8  688528  秦川物联  ...    上证路演中心  2024-12-12  2024-12-12\n[8 rows x 13 columns]\n```\n\n### 主营介绍-同花顺\n\n接口: stock_zyjs_ths\n\n目标地址: https://basic.10jqka.com.cn/new/000066/operate.html\n\n描述: 同花顺-主营介绍\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| symbol | str | symbol=\"000066\" |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 股票代码 | object  | -       |\n| 主营业务 | object  | -       |\n| 产品类型 | object  | -       |\n| 产品名称 | object  | -       |\n| 经营范围 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zyjs_ths_df = ak.stock_zyjs_ths(symbol=\"000066\")\nprint(stock_zyjs_ths_df)\n```\n\n数据示例\n\n```\n     股票代码  ...                                               经营范围\n0  000066  ...  计算机软件、硬件、终端及其外部设备、网络系统及系统集成、电子产品及零部件、金融机具、税控机具...\n[1 rows x 5 columns]\n```\n\n### 主营构成-东财\n\n接口: stock_zygc_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HSF10/BusinessAnalysis/Index?type=web&code=SH688041#\n\n描述: 东方财富网-个股-主营构成\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"SH688041\" |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 股票代码 | object  | -       |\n| 报告日期 | object  | -       |\n| 分类类型 | object  | -       |\n| 主营构成 | int64   | -       |\n| 主营收入 | float64 | 注意单位: 元 |\n| 收入比例 | float64 | -       |\n| 主营成本 | float64 | 注意单位: 元 |\n| 成本比例 | float64 | -       |\n| 主营利润 | float64 | 注意单位: 元 |\n| 利润比例 | float64 | -       |\n| 毛利率  | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zygc_em_df = ak.stock_zygc_em(symbol=\"SH688041\")\nprint(stock_zygc_em_df)\n```\n\n数据示例\n\n```\n    股票代码  报告日期   分类类型  ...      主营利润      利润比例       毛利率\n0   688041  2024-06-30  按产品分类  ...  2.385020e+09  0.999313  0.634303\n1   688041  2024-06-30  按产品分类  ...  1.639645e+06  0.000687  0.575505\n2   688041  2024-06-30  按地区分类  ...  2.386659e+09  1.000000  0.634259\n3   688041  2023-12-31  按行业分类  ...  3.587141e+09  0.999963  0.596682\n4   688041  2023-12-31  按行业分类  ...  1.337029e+05  0.000037  0.708626\n..     ...         ...    ...  ...           ...       ...       ...\n60  688041  2018-12-31  按产品分类  ...  3.538980e+07  0.874818  0.841592\n61  688041  2018-12-31  按产品分类  ...  4.352600e+06  0.107594  0.792982\n62  688041  2018-12-31  按产品分类  ...           NaN       NaN       NaN\n63  688041  2018-12-31  按地区分类  ...           NaN       NaN       NaN\n64  688041  2018-12-31  按地区分类  ...           NaN       NaN       NaN\n[65 rows x 11 columns]\n```\n\n### 股票质押\n\n#### 股权质押市场概况\n\n接口: stock_gpzy_profile_em\n\n目标地址: https://data.eastmoney.com/gpzy/marketProfile.aspx\n\n描述: 东方财富网-数据中心-特色数据-股权质押-股权质押市场概况\n\n限量: 单次所有历史数据, 由于数据量比较大需要等待一定时间\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 交易日期    | object  | -       |\n| A股质押总比例 | float64 | 注意单位: % |\n| 质押公司数量  | float64 | -       |\n| 质押笔数    | float64 | 注意单位: 笔 |\n| 质押总股数   | float64 | 注意单位: 股 |\n| 质押总市值   | float64 | 注意单位: 元 |\n| 沪深300指数 | float64 | -       |\n| 涨跌幅     | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gpzy_profile_em_df = ak.stock_gpzy_profile_em()\nprint(stock_gpzy_profile_em_df)\n```\n\n数据示例\n\n```\n     交易日期   A股质押总比例  质押公司数量  ... 质押总市值  沪深300指数  涨跌幅\n0    2014-03-07  6.731948    1609  ...  1.629956e+08  2168.3580 -0.4871\n1    2014-03-14  6.754048    1617  ...  1.593885e+08  2122.8360 -2.0994\n2    2014-03-21  6.750488    1614  ...  1.624715e+08  2158.7980  1.6941\n3    2014-03-28  6.716687    1623  ...  1.591070e+08  2151.9650 -0.3165\n4    2014-04-04  6.801723    1628  ...  1.635032e+08  2185.4720  1.5570\n..          ...       ...     ...  ...           ...        ...     ...\n544  2024-11-15  3.619449    2335  ...  2.867691e+08  3968.8308 -3.2947\n545  2024-11-22  3.622143    2326  ...  2.812394e+08  3865.6989 -2.5985\n546  2024-11-29  3.616201    2319  ...  2.863046e+08  3916.5832  1.3163\n547  2024-12-06  3.612298    2322  ...  2.929517e+08  3973.1405  1.4440\n548  2024-12-13  3.617088    2318  ...  2.933758e+08  3933.1808 -1.0057\n[549 rows x 8 columns]\n```\n\n#### 上市公司质押比例\n\n接口: stock_gpzy_pledge_ratio_em\n\n目标地址: https://data.eastmoney.com/gpzy/pledgeRatio.aspx\n\n描述: 东方财富网-数据中心-特色数据-股权质押-上市公司质押比例\n\n限量: 单次返回指定交易日的所有历史数据; 其中的交易日需要根据网站提供的为准; 请访问 http://data.eastmoney.com/gpzy/pledgeRatio.aspx 查询具体交易日\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                           |\n|------|-----|------------------------------------------------------------------------------|\n| date | str | date=\"20240906\"; 请访问 http://data.eastmoney.com/gpzy/pledgeRatio.aspx 查询具体交易日 |\n\n输出参数\n\n| 名称      | 类型      | 描述       |\n|---------|---------|----------|\n| 序号      | int64   | -        |\n| 股票代码    | object  | -        |\n| 股票简称    | object  | -        |\n| 交易日期    | object  | -        |\n| 所属行业    | object  | -        |\n| 质押比例    | float64 | 注意单位: %  |\n| 质押股数    | float64 | 注意单位: 万股 |\n| 质押市值    | float64 | 注意单位: 万元 |\n| 质押笔数    | float64 | -        |\n| 无限售股质押数 | float64 | 注意单位: 万股 |\n| 限售股质押数  | float64 | 注意单位: 万股 |\n| 近一年涨跌幅  | float64 | 注意单位: %  |\n| 所属行业代码  | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gpzy_pledge_ratio_em_df = ak.stock_gpzy_pledge_ratio_em(date=\"20241220\")\nprint(stock_gpzy_pledge_ratio_em_df)\n```\n\n数据示例\n\n```\n      序号  股票代码  股票简称  交易日期  ...   无限售股质押数   限售股质押数 近一年涨跌幅  所属行业代码\n0        1  000567  海德股份  2024-12-20  ...  146779.06      0.0   6.965560  016058\n1        2  000688  国城矿业  2024-12-20  ...   78404.69      0.0  40.018282  016032\n2        3  002485  ST雪发  2024-12-20  ...   37266.20      0.0 -31.400000  016010\n3        4  000020  深华发A  2024-12-20  ...   11610.00      0.0  13.596838  016079\n4        5  603132  金徽股份  2024-12-20  ...       0.00  59960.0  -5.566960  016032\n...    ...     ...   ...         ...  ...        ...      ...        ...     ...\n2305  2306  600640  国脉文化  2024-12-20  ...       0.22      0.0   8.495713  016039\n2306  2307  600630  龙头股份  2024-12-20  ...       0.57      0.0  -3.577285  016010\n2307  2308  002432  九安医疗  2024-12-20  ...       1.20      0.0  13.687060  016082\n2308  2309  601989  中国重工  2024-12-20  ...      76.66      0.0  18.591879  016049\n2309  2310  600642  申能股份  2024-12-20  ...       5.00      0.0  51.730585  016007\n[2310 rows x 13 columns]\n```\n\n#### 重要股东股权质押明细\n\n接口: stock_gpzy_pledge_ratio_detail_em\n\n目标地址: https://data.eastmoney.com/gpzy/pledgeDetail.aspx\n\n描述: 东方财富网-数据中心-特色数据-股权质押-重要股东股权质押明细\n\n限量: 单次所有历史数据, 由于数据量比较大需要等待一定时间\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int64   | -       |\n| 股票代码    | object  | -       |\n| 股票简称    | object  | -       |\n| 股东名称    | object  | -       |\n| 质押股份数量  | float64 | 注意单位: 股 |\n| 占所持股份比例 | float64 | 注意单位: % |\n| 占总股本比例  | float64 | 注意单位: % |\n| 质押机构    | object  | -       |\n| 最新价     | float64 | 注意单位: 元 |\n| 质押日收盘价  | float64 | 注意单位: 元 |\n| 预估平仓线   | float64 | 注意单位: 元 |\n| 公告日期    | object  | -       |\n| 质押开始日期  | object  | -       |\n| 质押结束日期  | object  | -       |\n| 状态      | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gpzy_pledge_ratio_detail_em_df = ak.stock_gpzy_pledge_ratio_detail_em()\nprint(stock_gpzy_pledge_ratio_detail_em_df)\n```\n\n数据示例\n\n```\n        序号    股票代码  股票简称 ... 预估平仓线  质押开始日期    质押结束日期   状态  公告日期\n0            1  002501  利源股份 ... 1.036000  2026-03-27         NaT  未解押  2026-03-31\n1            2  603081  大丰实业 ... 6.591200  2026-03-27         NaT  未解押  2026-03-31\n2            3  603335   迪生力 ... 3.304000  2026-03-27         NaT  未解押  2026-03-31\n3            4  688153  唯捷创芯 ... 18.967200  2026-03-27         NaT  未解押  2026-03-31\n4            5  603515  欧普照明 ... 10.628800  2026-03-27         NaT  未解押  2026-03-31\n        ...     ...   ...  ...       ...         ...         ...         ...\n124783  124784  000683  博源化工 ... 1.090851  2002-09-27         NaT  未解押  2002-10-10\n124784  124785  000415  渤海租赁 ... 1.897415  2001-09-03  2002-09-03  已解押  2002-09-25\n124785  124786  000028  国药一致 ... 8.302703  2000-12-20  2001-12-23  已解押  2002-03-29\n124786  124787  200028   一致B ... 8.302703  2000-12-20  2001-12-23  已解押  2002-03-29\n124787  124788  600745  闻泰科技 ... 7.840701  2001-11-20         NaT  未解押  2001-11-24\n\n[124788 rows x 15 columns]\n```\n\n#### 个股重要股东股权质押明细\n\n接口: stock_gpzy_individual_pledge_ratio_detail_em\n\n目标地址: https://data.eastmoney.com/gpzy/detail/{symbol}.html\n\n描述: 东方财富网-数据中心-股权质押-个股\n\n限量: 单次所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| symbol | str | symbol=\"603132\" |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int64   | -       |\n| 股票代码    | object  | -       |\n| 股票简称    | object  | -       |\n| 股东名称    | object  | -       |\n| 质押股份数量  | float64 | 注意单位: 股 |\n| 占所持股份比例 | float64 | 注意单位: % |\n| 占总股本比例  | float64 | 注意单位: % |\n| 质押机构    | object  | -       |\n| 最新价     | float64 | 注意单位: 元 |\n| 质押日收盘价  | float64 | 注意单位: 元 |\n| 预估平仓线   | float64 | 注意单位: 元 |\n| 公告日期    | object  | -       |\n| 质押开始日期  | object  | -       |\n| 质押结束日期  | object  | -       |\n| 状态      | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gpzy_individual_pledge_ratio_detail_em_df = ak.stock_gpzy_individual_pledge_ratio_detail_em(symbol=\"603132\")\nprint(stock_gpzy_individual_pledge_ratio_detail_em_df)\n```\n\n数据示例\n\n```\n   序号    股票代码  股票简称    股东名称  ...      质押开始日期      质押结束日期   状态     公告日期\n0    1  603132  金徽股份  中铭国际控股集团有限公司  ...  2022-11-03  2026-03-27  已解押  2026-03-31\n1    2  603132  金徽股份  中铭国际控股集团有限公司  ...  2026-03-26         NaT  未解押  2026-03-31\n2    3  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2022-09-05         NaT  未解押  2025-11-18\n3    4  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2025-11-07         NaT  未解押  2025-11-18\n4    5  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2022-09-05  2025-11-14  已解押  2025-11-18\n5    6  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2022-09-05  2025-11-14  已解押  2025-11-18\n6    7  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2022-11-30  2025-11-04  已解押  2025-11-06\n7    8  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2025-11-01         NaT  未解押  2025-11-06\n8    9  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2022-07-25  2025-07-28  已解押  2025-07-30\n9   10  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2025-07-25         NaT  未解押  2025-07-30\n10  11  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2023-07-26  2025-06-05  已解押  2025-06-07\n11  12  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2025-06-05         NaT  未解押  2025-06-07\n12  13  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2023-03-14  2024-12-05  已解押  2024-12-07\n13  14  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2024-12-04         NaT  未解押  2024-12-07\n14  15  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2023-07-18  2024-07-15  已解押  2024-07-17\n15  16  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2024-07-11         NaT  未解押  2024-07-17\n16  17  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2023-12-26         NaT  未解押  2023-12-28\n17  18  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2023-09-07         NaT  未解押  2023-09-19\n18  19  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2022-03-10  2023-03-03  已解押  2023-03-17\n19  20  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2022-09-05  2022-11-17  已解押  2022-11-19\n20  21  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2022-09-05  2022-11-17  已解押  2022-11-19\n21  22  603132  金徽股份    徽县奥亚实业有限公司  ...  2022-08-29  2022-11-04  已解押  2022-11-08\n22  23  603132  金徽股份  甘肃亚特投资集团有限公司  ...  2022-09-06         NaT  未解押  2022-09-09\n23  24  603132  金徽股份    徽县奥亚实业有限公司  ...  2022-07-18         NaT  未解押  2022-07-20\n[24 rows x 15 columns]\n```\n\n#### 质押机构分布统计-证券公司\n\n接口: stock_gpzy_distribute_statistics_company_em\n\n目标地址: https://data.eastmoney.com/gpzy/distributeStatistics.aspx\n\n描述: 东方财富网-数据中心-特色数据-股权质押-质押机构分布统计-证券公司\n\n限量: 单次返回当前时点所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 序号           | int64   | -       |\n| 质押机构         | object  | -       |\n| 质押公司数量       | int64   | -       |\n| 质押笔数         | int64   | -       |\n| 质押数量         | float64 | 注意单位: 股 |\n| 未达预警线比例      | float64 | 注意单位: % |\n| 达到预警线未达平仓线比例 | float64 | 注意单位: % |\n| 达到平仓线比例      | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gpzy_distribute_statistics_company_em_df = ak.stock_gpzy_distribute_statistics_company_em()\nprint(stock_gpzy_distribute_statistics_company_em_df)\n```\n\n数据示例\n\n```\n    序号  质押机构  质押公司数量  质押笔数          质押数量   未达预警线比例  达到预警线未达平仓线比例   达到平仓线比例\n0    1  海通证券     304  1261  1.402742e+06  0.753370      0.045202  0.201427\n1    2  国泰君安     268   904  1.231400e+06  0.743079      0.034330  0.222591\n2    3  中信证券     244   639  1.612960e+06  0.668232      0.067293  0.264476\n3    4  华泰证券     181   723  1.040893e+06  0.673130      0.036011  0.290859\n4    5  招商证券     166   450  4.972209e+05  0.777778      0.068889  0.153333\n5    6  广发证券     153   584  5.437655e+05  0.785959      0.046233  0.167808\n6    7  中国银河     127   318  6.123945e+05  0.694969      0.050314  0.254717\n7    8  中信建投     105   328  5.657925e+05  0.579268      0.085366  0.335366\n8    9  中泰证券     101   346  5.231542e+05  0.754335      0.066474  0.179191\n9   10  兴业证券      93   326  3.394603e+05  0.616564      0.076687  0.306748\n10  11  国信证券      91   451  6.067771e+05  0.558758      0.075388  0.365854\n11  12  长江证券      83   272  3.178707e+05  0.573529      0.055147  0.371324\n12  13  浙商证券      80   152  1.261287e+05  0.842105      0.039474  0.118421\n13  14  国金证券      79   191  2.726742e+05  0.848168      0.047120  0.104712\n14  15  东吴证券      63   207  2.763393e+05  0.574879      0.048309  0.376812\n15  16  东方证券      62   246  3.957932e+05  0.475610      0.093496  0.430894\n16  17  财通证券      59   105  1.227393e+05  0.752381      0.076190  0.171429\n17  18  光大证券      56   145  2.391708e+05  0.572414      0.048276  0.379310\n18  19  红塔证券      54   157  1.529568e+05  0.878981      0.012739  0.108280\n19  20  东北证券      51   152  1.392464e+05  0.539474      0.032895  0.427632\n20  21  国联证券      44   115  1.111010e+05  0.730435      0.043478  0.226087\n21  22  华西证券      43   190  1.581871e+05  0.821053      0.063158  0.115789\n22  23  国元证券      42   125  1.909249e+05  0.792000      0.064000  0.144000\n23  24  中金公司      41   125  1.260170e+05  0.832000      0.024000  0.144000\n24  25  国海证券      39   196  1.276768e+05  0.500000      0.015306  0.484694\n25  26  华安证券      35    75  7.706306e+04  0.933333      0.026667  0.040000\n26  27  长城证券      35   107  1.837452e+05  0.542056      0.037383  0.420561\n27  28  第一创业      34   179  4.349701e+05  0.240223      0.039106  0.720670\n28  29  东兴证券      32   104  1.423795e+05  0.365385      0.057692  0.576923\n29  30  方正证券      29   115  1.857242e+05  0.504348      0.095652  0.400000\n30  31  西南证券      28    52  8.773574e+04  0.730769      0.038462  0.230769\n31  32  中银证券      28    59  5.708684e+04  0.745763      0.000000  0.254237\n32  33  天风证券      26    87  1.803283e+05  0.264368      0.011494  0.724138\n33  34  山西证券      23    47  7.069562e+04  0.914894      0.000000  0.085106\n34  35  中原证券      22    76  7.726518e+04  0.750000      0.052632  0.197368\n35  36   太平洋      20    39  6.065551e+04  0.435897      0.025641  0.538462\n36  37  财达证券      17    66  7.506754e+04  0.848485      0.030303  0.121212\n37  38  南京证券      16    37  2.476809e+04  0.945946      0.054054  0.000000\n38  39  西部证券       9    20  2.626103e+04  0.250000      0.000000  0.750000\n39  40  华林证券       5     7  3.709550e+03  0.571429      0.000000  0.428571\n40  41  申万宏源       3    11  4.012356e+04  1.000000      0.000000  0.000000\n```\n\n#### 质押机构分布统计-银行\n\n接口: stock_gpzy_distribute_statistics_bank_em\n\n目标地址: https://data.eastmoney.com/gpzy/distributeStatistics.aspx\n\n描述: 东方财富网-数据中心-特色数据-股权质押-质押机构分布统计-银行\n\n限量: 单次返回当前时点所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 序号           | int64   | -       |\n| 质押机构         | object  | -       |\n| 质押公司数量       | int64   | -       |\n| 质押笔数         | int64   | -       |\n| 质押数量         | float64 | 注意单位: 股 |\n| 未达预警线比例      | float64 | 注意单位: % |\n| 达到预警线未达平仓线比例 | float64 | 注意单位: % |\n| 达到平仓线比例      | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_em_gpzy_distribute_statistics_bank_df = ak.stock_gpzy_distribute_statistics_bank_em()\nprint(stock_em_gpzy_distribute_statistics_bank_df)\n```\n\n数据示例\n\n```\n    序号 质押机构 质押公司数量 质押笔数 质押数量 未达预警线比例 达到预警线未达平仓线比例 达到平仓线比例\n0    1  浦发银行     200   384  1.051488e+06  0.774278      0.026247  0.199475\n1    2  工商银行     194   348  1.124183e+06  0.804734      0.032544  0.162722\n2    3  中信银行     155   330  1.017684e+06  0.766667      0.069697  0.163636\n3    4  农业银行     126   215  9.640506e+05  0.823256      0.027907  0.148837\n4    5  兴业银行     123   221  6.218067e+05  0.854545      0.018182  0.127273\n5    6  建设银行     117   223  7.545851e+05  0.820628      0.022422  0.156951\n6    7  民生银行     108   180  8.829439e+05  0.782123      0.033520  0.184358\n7    8  华夏银行     107   217  4.349071e+05  0.851852      0.027778  0.120370\n8    9  交通银行     104   168  6.636462e+05  0.875000      0.029762  0.095238\n9   10  中国银行     104   173  1.666726e+06  0.843023      0.023256  0.133721\n10  11  招商银行      97   148  4.823712e+05  0.795918      0.034014  0.170068\n11  12  浙商银行      89   209  9.515983e+05  0.779904      0.047847  0.172249\n12  13  光大银行      81   128  2.443465e+05  0.822581      0.040323  0.137097\n13  14  北京银行      56   100  2.244431e+05  0.828283      0.010101  0.161616\n14  15  平安银行      51    91  5.740625e+05  0.822222      0.044444  0.133333\n15  16  杭州银行      41    68  9.376276e+04  0.800000      0.092308  0.107692\n16  17  江苏银行      36    59  1.707125e+05  0.813559      0.050847  0.135593\n17  18  上海银行      29    61  2.313567e+05  0.852459      0.016393  0.131148\n18  19  南京银行      26    39  5.202060e+04  0.675676      0.081081  0.243243\n19  20  长沙银行      16    40  1.029290e+05  0.725000      0.050000  0.225000\n20  21  苏州银行      15    25  3.934501e+04  0.869565      0.043478  0.086957\n21  22  宁波银行      15    19  3.920183e+04  0.631579      0.052632  0.315789\n22  23  邮储银行      12    22  6.008693e+04  0.954545      0.045455  0.000000\n23  24  青岛银行      11    17  4.050235e+04  0.882353      0.058824  0.058824\n24  25  沪农商行       9    17  6.490389e+04  1.000000      0.000000  0.000000\n25  26  兰州银行       8    12  3.771000e+04  0.916667      0.000000  0.083333\n26  27  苏农银行       7    18  2.268900e+04  1.000000      0.000000  0.000000\n27  28  无锡银行       7    12  1.764020e+04  0.750000      0.083333  0.166667\n28  29  郑州银行       6    24  5.408552e+04  0.916667      0.000000  0.083333\n29  30  厦门银行       5    14  3.593239e+04  0.785714      0.071429  0.142857\n30  31  西安银行       5     6  4.349401e+04  1.000000      0.000000  0.000000\n31  32  成都银行       5     5  2.991586e+04  1.000000      0.000000  0.000000\n32  33  齐鲁银行       5    10  1.715242e+04  0.875000      0.000000  0.125000\n33  34  张家港行       4     6  5.063094e+03  0.833333      0.000000  0.166667\n34  35  瑞丰银行       4     5  7.770000e+03  0.400000      0.000000  0.600000\n35  36  紫金银行       3     5  2.280000e+03  1.000000      0.000000  0.000000\n36  37  青农商行       3     9  1.980000e+04  1.000000      0.000000  0.000000\n37  38  渝农商行       3    24  2.165320e+05  0.666667      0.041667  0.291667\n38  39  重庆银行       2     2  5.800000e+03  1.000000      0.000000  0.000000\n39  40  江阴银行       2     3  3.160000e+03  1.000000      0.000000  0.000000\n40  41  贵阳银行       1     2  8.930000e+02  1.000000      0.000000  0.000000\n41  42  常熟银行       1     2  2.750000e+03  1.000000      0.000000  0.000000\n```\n\n#### 上市公司质押比例\n\n接口: stock_gpzy_industry_data_em\n\n目标地址: https://data.eastmoney.com/gpzy/industryData.aspx\n\n描述: 东方财富网-数据中心-特色数据-股权质押-上市公司质押比例-行业数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 行业     | object  | -       |\n| 平均质押比例 | float64 | 注意单位: % |\n| 公司家数   | float64 | -       |\n| 质押总笔数  | float64 | -       |\n| 质押总股本  | float64 | -       |\n| 最新质押市值 | float64 | -       |\n| 统计时间   | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gpzy_industry_data_em_df = ak.stock_gpzy_industry_data_em()\nprint(stock_gpzy_industry_data_em_df)\n```\n\n数据示例\n\n```\n    序号  行业    平均质押比例  公司家数  质押总笔数 质押总股本 最新质押市值     统计时间\n0    1   商业百货  20.886207    29    288  1301231.97  5.579849e+06  2024-12-20\n1    2   航空机场  19.988000     5    109  1361284.27  4.552621e+06  2024-12-20\n2    3   多元金融  19.492308    13    111   711850.81  3.957603e+06  2024-12-20\n3    4   综合行业  18.979091    11    113   424101.84  2.326736e+06  2024-12-20\n4    5  房地产开发  18.584063    32    313  1702899.22  6.166608e+06  2024-12-20\n..  ..    ...        ...   ...    ...         ...           ...         ...\n81  82   专业服务   5.231111     9     19    20018.84  1.993565e+05  2024-12-20\n82  83  电子化学品   5.005385    13     27    30328.42  5.075712e+05  2024-12-20\n83  84   铁路公路   4.925556     9     16   183142.87  1.489794e+06  2024-12-20\n84  85     银行   4.596190    42    684  1827327.07  8.201688e+06  2024-12-20\n85  86     保险   0.420000     3     12     6925.00  9.603522e+04  2024-12-20\n[86 rows x 8 columns]\n```\n\n### 商誉专题\n\n#### A股商誉市场概况\n\n接口: stock_sy_profile_em\n\n目标地址:  https://data.eastmoney.com/sy/scgk.html\n\n描述: 东方财富网-数据中心-特色数据-商誉-A股商誉市场概况\n\n限量: 单次所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 报告期        | object  | -       |\n| 商誉         | float64 | 注意单位: 元 |\n| 商誉减值       | float64 | 注意单位: 元 |\n| 净资产        | float64 | 注意单位: 元 |\n| 商誉占净资产比例   | float64 | -       |\n| 商誉减值占净资产比例 | float64 | -       |\n| 净利润规模      | float64 | 注意单位: 元 |\n| 商誉减值占净利润比例 | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sy_profile_em_df = ak.stock_sy_profile_em()\nprint(stock_sy_profile_em_df)\n```\n\n数据示例\n\n```\n           报告期            商誉  ...         净利润规模  商誉减值占净利润比例\n0   2010-12-31  9.305439e+10  ...  8.646720e+11   -0.008547\n1   2011-12-31  1.334065e+11  ...  1.030624e+12   -0.001177\n2   2012-12-31  1.639409e+11  ...  1.224410e+12   -0.000985\n3   2013-12-31  2.051656e+11  ...  1.441550e+12   -0.001916\n4   2014-12-31  3.246068e+11  ...  1.604929e+12   -0.001784\n5   2015-12-31  5.985505e+11  ...  1.757708e+12   -0.005302\n6   2016-12-31  9.667876e+11  ...  1.873202e+12   -0.008425\n7   2017-12-31  1.195754e+12  ...  2.244254e+12   -0.011668\n8   2018-12-31  1.219315e+12  ...  2.327512e+12   -0.049232\n9   2019-12-31  1.190470e+12  ...  2.506131e+12   -0.045300\n10  2020-12-31  1.157767e+12  ...  2.606449e+12   -0.028383\n11  2021-12-31  1.156240e+12  ...  3.307810e+12   -0.015126\n12  2022-12-31  1.198481e+12  ...  3.773819e+12   -0.015187\n13  2023-12-31  1.226307e+12  ...  3.745003e+12         NaN\n14  2024-06-30  1.246240e+12  ...  2.049446e+12         NaN\n15  2024-09-30  1.254842e+12  ...  3.089467e+12         NaN\n[16 rows x 8 columns]\n```\n\n#### 商誉减值预期明细\n\n接口: stock_sy_yq_em\n\n目标地址: https://data.eastmoney.com/sy/yqlist.html\n\n描述: 东方财富网-数据中心-特色数据-商誉-商誉减值预期明细\n\n限量: 单次所有历史数据\n\n输入参数\n\n| 名称   | 类型  | 描述                      |\n|------|-----|-------------------------|\n| date | str | date=\"20221231\"; 参见网页选项 |\n\n输出参数\n\n| 名称        | 类型      | 描述      |\n|-----------|---------|---------|\n| 序号        | int64   | -       |\n| 股票代码      | object  | -       |\n| 股票简称      | object  | -       |\n| 业绩变动原因    | object  | -       |\n| 最新商誉报告期   | object  | -       |\n| 最新一期商誉    | float64 | 主要单位: 元 |\n| 上年商誉      | float64 | 主要单位: 元 |\n| 预计净利润-下限  | int64   | 主要单位: 元 |\n| 预计净利润-上限  | int64   | 主要单位: 元 |\n| 业绩变动幅度-下限 | float64 | 主要单位: % |\n| 业绩变动幅度-上限 | float64 | 主要单位: % |\n| 上年度同期净利润  | float64 | 主要单位: 元 |\n| 公告日期      | object  | -       |\n| 交易市场      | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sy_yq_em_df = ak.stock_sy_yq_em(date=\"20221231\")\nprint(stock_sy_yq_em_df)\n```\n\n数据示例\n\n```\n      序号    股票代码  股票简称  ...     上年度同期净利润        公告日期  交易市场\n0      1  000010  美丽生态  ...   23458700.0  2023-04-22  深市主板\n1      2  300069  金利华电  ...  -40111200.0  2023-04-18   创业板\n2      3  000546  ST金圆  ...   86300100.0  2023-04-17  深市主板\n3      4  002636  金安国纪  ...  690190000.0  2023-04-15  深市主板\n4      5  002251   步步高  ... -184132100.0  2023-04-15  深市主板\n..   ...     ...   ...  ...          ...         ...   ...\n292  293  300452  山河药辅  ...   89253400.0  2023-01-10   创业板\n293  294  300009  安科生物  ...  206629500.0  2023-01-10   创业板\n294  295  002137   实益达  ...  -95330400.0  2023-01-10  深市主板\n295  296  000576  甘化科工  ...   31860000.0  2023-01-06  深市主板\n296  297  002111  威海广泰  ...   67754400.0  2022-10-29  深市主板\n[297 rows x 14 columns]\n```\n\n#### 个股商誉减值明细\n\n接口: stock_sy_jz_em\n\n目标地址: https://data.eastmoney.com/sy/jzlist.html\n\n描述: 东方财富网-数据中心-特色数据-商誉-个股商誉减值明细\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称   | 类型  | 描述                      |\n|------|-----|-------------------------|\n| date | str | date=\"20230331\"; 参见网页选项 |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 序号         | int64   | -       |\n| 股票代码       | object  | -       |\n| 股票简称       | object  | -       |\n| 商誉         | float64 | 注意单位: 元 |\n| 商誉减值       | float64 | 注意单位: 元 |\n| 商誉减值占净资产比例 | float64 | -       |\n| 净利润        | float64 | 注意单位: 元 |\n| 商誉减值占净利润比例 | float64 | -       |\n| 公告日期       | object  | -       |\n| 交易市场       | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sy_jz_em_df = ak.stock_sy_jz_em(date=\"20230331\")\nprint(stock_sy_jz_em_df)\n```\n\n数据示例\n\n```\n        序号    股票代码  股票简称  ...  商誉减值占净利润比例        公告日期  交易市场\n0        1  600587  新华医疗  ...         NaN  2023-04-28  沪市主板\n1        2  000829  天音控股  ...         NaN  2023-04-29  深市主板\n2        3  600271  航天信息  ...         NaN  2023-04-29  沪市主板\n3        4  600383  金地集团  ...         NaN  2023-04-29  沪市主板\n4        5  000917  电广传媒  ...         NaN  2023-04-28  深市主板\n    ...     ...   ...  ...         ...         ...   ...\n2446  2447  002846  英联股份  ...         NaN  2023-04-29  深市主板\n2447  2448  688625  呈和科技  ...         NaN  2023-04-25   科创板\n2448  2449  601995  中金公司  ...         NaN  2023-04-29  沪市主板\n2449  2450  002724   海洋王  ...         NaN  2023-04-28  深市主板\n2450  2451  002815  崇达技术  ...         NaN  2023-04-27  深市主板\n[2451 rows x 11 columns]\n```\n\n#### 个股商誉明细\n\n接口: stock_sy_em\n\n目标地址: https://data.eastmoney.com/sy/list.html\n\n描述: 东方财富网-数据中心-特色数据-商誉-个股商誉明细\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称   | 类型  | 描述                      |\n|------|-----|-------------------------|\n| date | str | date=\"20240630\"; 参见网页选项 |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 序号       | int64   | -       |\n| 股票代码     | object  | -       |\n| 股票简称     | object  | -       |\n| 商誉       | float64 | 注意单位: 元 |\n| 商誉占净资产比例 | float64 |         |\n| 净利润      | float64 | 注意单位: 元 |\n| 净利润同比    | float64 |         |\n| 上年商誉     | float64 | 注意单位: 元 |\n| 公告日期     | object  | -       |\n| 交易市场     | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sy_em_df = ak.stock_sy_em(date=\"20240630\")\nprint(stock_sy_em_df)\n```\n\n数据示例\n\n```\n     序号    股票代码  股票简称  ...      上年商誉    公告日期  交易市场\n0        1  688799  华纳药厂  ...  3.238198e+07  2024-08-31   科创板\n1        2  688665  四方光电  ...           NaN  2024-08-31   科创板\n2        3  688601   力芯微  ...  8.354801e+06  2024-08-31   科创板\n3        4  688599  天合光能  ...  1.542976e+08  2024-08-31   科创板\n4        5  688559   海目星  ...           NaN  2024-08-31   科创板\n...    ...     ...   ...  ...           ...         ...   ...\n2630  2631  000990  诚志股份  ...  6.754695e+09  2024-07-26  深市主板\n2631  2632  601231  环旭电子  ...  6.090252e+08  2024-07-25  沪市主板\n2632  2633  603668  天马科技  ...  1.170249e+08  2024-07-23  沪市主板\n2633  2634  002245  蔚蓝锂芯  ...  5.973838e+08  2024-07-23  深市主板\n2634  2635  002648  卫星化学  ...  4.439731e+07  2024-07-18  深市主板\n[2635 rows x 10 columns]\n```\n\n#### 行业商誉\n\n接口: stock_sy_hy_em\n\n目标地址: https://data.eastmoney.com/sy/hylist.html\n\n描述: 东方财富网-数据中心-特色数据-商誉-行业商誉\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称   | 类型  | 描述                      |\n|------|-----|-------------------------|\n| date | str | date=\"20240930\"; 参见网页选项 |\n\n输出参数\n\n| 名称           | 类型      | 描述 |\n|--------------|---------|----|\n| 行业名称         | object  | -  |\n| 公司家数         | int64   | -  |\n| 商誉规模         | float64 | -  |\n| 净资产          | float64 | -  |\n| 商誉规模占净资产规模比例 | float64 | -  |\n| 净利润规模        | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sy_hy_em_df = ak.stock_sy_hy_em(date=\"20240930\")\nprint(stock_sy_hy_em_df)\n```\n\n数据示例\n\n```\n     行业名称  公司家数  商誉规模    净资产  商誉规模占净资产规模比例   净利润规模\n0      游戏    22  3.021155e+10  1.206944e+11      0.250314  8.439657e+09\n1      教育    11  3.216185e+09  1.383355e+10      0.232492  5.010300e+08\n2   房地产服务    12  8.534555e+09  4.474023e+10      0.190758  3.724827e+07\n3    航空机场     3  1.397192e+10  8.271383e+10      0.168919  3.396607e+09\n4    医药商业    25  4.362616e+10  2.754810e+11      0.158364  1.496122e+10\n..    ...   ...           ...           ...           ...           ...\n81   工程建设    44  1.700281e+10  3.263842e+12      0.005209  1.297234e+11\n82   钢铁行业    18  1.975099e+09  4.997408e+11      0.003952  1.588223e+10\n83   煤炭行业    12  1.658931e+09  5.478767e+11      0.003028  3.957996e+10\n84   化纤行业    11  4.119727e+08  1.538797e+11      0.002677  8.734288e+09\n85     银行    12  3.267882e+10  1.433628e+13      0.002279  1.027638e+12\n[86 rows x 6 columns]\n```\n\n### 股票账户统计\n\n#### 股票账户统计月度\n\n接口: stock_account_statistics_em\n\n目标地址: https://data.eastmoney.com/cjsj/gpkhsj.html\n\n描述: 东方财富网-数据中心-特色数据-股票账户统计\n\n限量: 单次返回从 201504 开始 202308 的所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称         | 类型      | 描述       |\n|------------|---------|----------|\n| 数据日期       | object  | -        |\n| 新增投资者-数量   | float64 | 注意单位: 万户 |\n| 新增投资者-环比   | float64 | -        |\n| 新增投资者-同比   | float64 | -        |\n| 期末投资者-总量   | float64 | 注意单位: 万户 |\n| 期末投资者-A股账户 | float64 | 注意单位: 万户 |\n| 期末投资者-B股账户 | float64 | 注意单位: 万户 |\n| 沪深总市值      | float64 | -        |\n| 沪深户均市值     | float64 | 注意单位: 万  |\n| 上证指数-收盘    | float64 | -        |\n| 上证指数-涨跌幅   | float64 | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_account_statistics_em_df = ak.stock_account_statistics_em()\nprint(stock_account_statistics_em_df)\n```\n\n数据示例\n\n```\n     数据日期  新增投资者-数量  新增投资者-环比  ...   沪深户均市值  上证指数-收盘  上证指数-涨跌幅\n0    2015-04    497.53       NaN  ...  69.4956  4441.6550   18.5105\n1    2015-05    415.87   -0.1641  ...  73.6062  4611.7440    3.8294\n2    2015-06    464.22    0.1163  ...  65.0300  4277.2219   -7.2537\n3    2015-07    204.87   -0.5587  ...  54.9082  3663.7256  -14.3433\n4    2015-08    136.85   -0.3320  ...  46.9417  3205.9855  -12.4938\n..       ...       ...       ...  ...      ...        ...       ...\n96   2023-04    100.19   -0.4716  ...  39.1565  3323.2746    1.5404\n97   2023-05     97.26   -0.0292  ...  37.8637  3204.5644   -3.5721\n98   2023-06     98.13    0.0089  ...  38.0336  3202.0623   -0.0781\n99   2023-07     91.03   -0.0724  ...  38.6950  3291.0398    2.7788\n100  2023-08     99.59    0.0940  ...  36.6206  3119.8764   -5.2009\n[101 rows x 11 columns]\n```\n\n### 分析师指数\n\n#### 分析师指数排行\n\n接口: stock_analyst_rank_em\n\n目标地址: https://data.eastmoney.com/invest/invest/list.html\n\n描述: 东方财富网-数据中心-研究报告-东方财富分析师指数\n\n限量: 单次获取指定年份的所有数据\n\n输入参数\n\n| 名称   | 类型  | 描述                      |\n|------|-----|-------------------------|\n| year | str | year='2024'; 从 2013 年至今 |\n\n输出参数\n\n| 名称              | 类型      | 描述                       |\n|-----------------|---------|--------------------------|\n| 序号              | int64   | -                        |\n| 分析师名称           | object  | -                        |\n| 分析师单位           | object  | -                        |\n| 年度指数            | float64 | -                        |\n| xxxx年收益率        | float64 | 其中 xxxx 表示指定的年份; 注意单位: % |\n| 3个月收益率          | float64 | 注意单位: %                  |\n| 6个月收益率          | float64 | 注意单位: %                  |\n| 12个月收益率         | float64 | 注意单位: %                  |\n| 成分股个数           | int64   | -                        |\n| xxxx最新个股评级-股票名称 | object  | 其中 xxxx 表示指定的年份          |\n| xxxx最新个股评级-股票代码 | object  | 其中 xxxx 表示指定的年份          |\n| 分析师ID           | object  | -                        |\n| 行业代码            | object  | -                        |\n| 行业              | object  | -                        |\n| 更新日期            | object  | 数据更新日期                   |\n| 年度              | object  | 数据更新年度                   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_analyst_rank_em_df = ak.stock_analyst_rank_em(year='2024')\nprint(stock_analyst_rank_em_df)\n```\n\n数据示例\n\n```\n    序号 分析师名称 分析师单位 年度指数  ... 行业代码    行业  更新日期    年度\n0     1   任志强  华福证券  6424.01  ...  270000    电子  2024-12-27  2024\n1     2    洪烨  中国银河  2303.30  ...  280000    汽车  2024-12-27  2024\n2     3   范想想  中国银河  2521.64  ...    None  None  2024-12-27  2024\n3     4    张宁  国联证券  2207.86  ...  730000    通信  2024-12-27  2024\n4     5    周晴  中邮证券  2118.82  ...  270000    电子  2024-12-27  2024\n..  ...   ...   ...      ...  ...     ...   ...         ...   ...\n95   96   舒思勤  国金证券  1356.88  ...  490000  非银金融  2024-12-27  2024\n96   97   郑庆明  申万宏源  1188.05  ...  480000    银行  2024-12-27  2024\n97   98   陈宁玉  中泰证券  1304.21  ...  730000    通信  2024-12-27  2024\n98   99    田源  华源证券  1555.00  ...  240000  有色金属  2024-12-27  2024\n99  100    常菁  中金公司  2595.04  ...  280000    汽车  2024-12-27  2024\n[100 rows x 16 columns]\n```\n\n#### 分析师详情\n\n接口: stock_analyst_detail_em\n\n目标地址: https://data.eastmoney.com/invest/invest/11000257131.html\n\n描述: 东方财富网-数据中心-研究报告-东方财富分析师指数-分析师详情\n\n限量: 单次获取指定 indicator 指定的数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                               |\n|------------|-----|------------------------------------------------------------------|\n| analyst_id | str | analyst_id=\"11000257131\"; 分析师ID, 从 ak.stock_analyst_rank_em() 获取 |\n| indicator  | str | indicator=\"最新跟踪成分股\"; 从 {\"最新跟踪成分股\", \"历史跟踪成分股\", \"历史指数\"} 中选择        |\n\n输出参数-最新跟踪成分股\n\n| 名称        | 类型      | 描述      |\n|-----------|---------|---------|\n| 序号        | int64   | -       |\n| 股票代码      | object  | -       |\n| 股票名称      | object  | -       |\n| 调入日期      | object  | -       |\n| 最新评级日期    | object  | -       |\n| 当前评级名称    | object  | -       |\n| 成交价格(前复权) | float64 | -       |\n| 最新价格      | float64 | -       |\n| 阶段涨跌幅     | float64 | 注意单位: % |\n\n接口示例-最新跟踪成分股\n\n```python\nimport akshare as ak\n\nstock_analyst_detail_em_df = ak.stock_analyst_detail_em(analyst_id=\"11000200926\", indicator=\"最新跟踪成分股\")\nprint(stock_analyst_detail_em_df)\n```\n\n数据示例-最新跟踪成分股\n\n```\n    序号    股票代码   股票名称        调入日期  ... 当前评级名称   成交价格(前复权)    最新价格   阶段涨跌幅\n0    1  001269   欧晶科技  2023-01-31  ...     买入  118.980000  114.97   -3.37\n1    2  301155   海力风电  2022-12-12  ...     买入   90.880000   95.09    4.63\n2    3  002865   钧达股份  2022-12-05  ...     买入  198.990000  177.10  -11.00\n3    4  600152   维科技术  2022-12-02  ...     买入   17.490000   14.10  -19.38\n4    5  300037    新宙邦  2022-11-08  ...     买入   41.200000   47.27   14.73\n5    6  603876   鼎胜新材  2022-11-07  ...     买入   53.000000   47.64  -10.11\n6    7  603606   东方电缆  2022-11-03  ...     买入   73.600000   58.12  -21.03\n7    8  600732   爱旭股份  2022-10-18  ...     买入   36.140000   36.38    0.66\n8    9  603799   华友钴业  2022-09-19  ...     买入   72.400000   64.75  -10.57\n9   10  300438   鹏辉能源  2022-08-31  ...     买入   82.000000   74.23   -9.48\n10  11  002709   天赐材料  2022-08-29  ...     买入   49.380000   47.18   -4.46\n11  12  002129  TCL中环  2022-08-26  ...     买入   51.050000   42.30  -17.14\n12  13  603218   日月股份  2022-08-25  ...     买入   26.050000   23.99   -7.91\n13  14  600869   远东股份  2022-08-12  ...     买入    7.030000    5.44  -22.62\n14  15  300274   阳光电源  2022-04-21  ...     买入   64.404849  121.39   88.49\n15  16  002623    亚玛顿  2022-04-01  ...     买入   25.824010   32.72   26.72\n16  17  605117   德业股份  2022-03-09  ...     买入  189.839120  322.50   69.88\n17  18  300772   运达股份  2022-02-14  ...     买入   18.627516   16.24  -12.83\n18  19  300014   亿纬锂能  2021-07-15  ...     买入  126.804616   86.79  -31.55\n19  20  002074   国轩高科  2021-07-07  ...     买入   47.194889   32.14  -31.89\n20  21  688063   派能科技  2021-04-20  ...     买入  166.678770  287.20   72.31\n21  22  300568   星源材质  2021-03-17  ...     买入   10.698750   23.06  115.51\n22  23  002594    比亚迪  2021-03-02  ...     买入  211.229182  289.98   37.28\n23  24  300861   美畅股份  2021-03-01  ...     买入   47.082762   53.04   12.66\n24  25  600438   通威股份  2021-01-26  ...     买入   44.615150   40.75   -8.67\n25  26  300073   当升科技  2021-01-07  ...     买入   64.161457   65.35    1.85\n26  27  300035   中科电气  2020-09-28  ...     买入    8.613592   19.90  131.13\n27  28  002812   恩捷股份  2020-06-01  ...     买入   59.938614  145.99  143.56\n28  29  601012   隆基绿能  2020-05-26  ...     买入   15.825182   46.40  193.11\n29  30  300750   宁德时代  2020-05-18  ...     买入  141.320309  450.60  218.85\n30  31  002080   中材科技  2020-02-10  ...     买入   12.347362   23.89   93.44\n```\n\n输出参数-历史跟踪成分股\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int64   | -       |\n| 股票代码    | object  | -       |\n| 股票名称    | object  | -       |\n| 调入日期    | object  | -       |\n| 调出日期    | object  | -       |\n| 调入时评级名称 | object  | -       |\n| 调出原因    | object  | -       |\n| 累计涨跌幅   | float64 | 注意单位: % |\n\n接口示例-历史跟踪成分股\n\n```python\nimport akshare as ak\n\nstock_em_analyst_detail_df = ak.stock_analyst_detail_em(analyst_id=\"11000200926\", indicator=\"历史跟踪成分股\")\nprint(stock_em_analyst_detail_df)\n```\n\n数据示例-历史跟踪成分股\n\n```\n    序号 股票代码   股票名称 调入日期    调出日期 调入时评级名称  调出原因   累计涨跌幅\n0    1  603659    璞泰来  2024-05-23  2024-11-25      买入  到期调出   22.20\n1    2  002850    科达利  2024-05-22  2024-11-22      买入  到期调出    4.73\n2    3  301155   海力风电  2024-05-17  2024-11-18      买入  到期调出   21.72\n3    4  688390    固德威  2024-05-13  2024-11-12      买入  到期调出  -26.18\n4    5  603507   振江股份  2024-05-07  2024-11-07      买入  到期调出   12.23\n..  ..     ...    ...         ...         ...     ...   ...     ...\n70  71  002129  TCL中环  2019-08-09  2020-04-29      买入  到期调出   48.61\n71  72  603659    璞泰来  2019-03-19  2019-09-25      买入  到期调出   -6.26\n72  73  002202   金风科技  2019-02-25  2020-04-29      买入  到期调出  -27.07\n73  74  601012   隆基绿能  2018-12-27  2020-05-06      买入  到期调出  114.24\n74  75  600438   通威股份  2018-11-19  2020-04-27      买入  到期调出   68.18\n[75 rows x 8 columns]\n```\n\n输出参数-历史指数\n\n| 名称    | 类型      | 描述                   |\n|-------|---------|----------------------|\n| date  | object  | 日期                   |\n| value | float64 | 指数数值; 注意: 此指数为东方财富制定 |\n\n接口示例-历史指数\n\n```python\nimport akshare as ak\n\nstock_em_analyst_detail_df = ak.stock_analyst_detail_em(analyst_id=\"11000200926\", indicator=\"历史指数\")\nprint(stock_em_analyst_detail_df)\n```\n\n数据示例-历史指数\n\n```\n            date        value\n0     2018-11-19  1000.000000\n1     2018-11-20   970.738195\n2     2018-11-21  1011.450675\n3     2018-11-22  1003.817085\n4     2018-11-23   989.822170\n...          ...          ...\n1479  2024-12-23  5466.064721\n1480  2024-12-24  5572.478788\n1481  2024-12-25  5521.539014\n1482  2024-12-26  5550.570662\n1483  2024-12-27  5507.349611\n[1484 rows x 2 columns]\n```\n\n### 千股千评\n\n接口: stock_comment_em\n\n目标地址: https://data.eastmoney.com/stockcomment/\n\n描述: 东方财富网-数据中心-特色数据-千股千评\n\n限量: 单次获取所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 序号    | int64   | -       |\n| 代码    | object  | -       |\n| 名称    | object  | -       |\n| 最新价   | float64 | -       |\n| 涨跌幅   | float64 | -       |\n| 换手率   | float64 | 注意单位: % |\n| 市盈率   | float64 | -       |\n| 主力成本  | float64 | -       |\n| 机构参与度 | float64 | -       |\n| 综合得分  | float64 | -       |\n| 上升    | int64   | 注意: 正负号 |\n| 目前排名  | int64   | -       |\n| 关注指数  | float64 | -       |\n| 交易日   | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_comment_em_df = ak.stock_comment_em()\nprint(stock_comment_em_df)\n```\n\n数据示例\n\n```\n        序号    代码    名称    最新价  ...    上升  目前排名  关注指数  交易日\n0        1  000001     平安银行  10.50  ...  1090  1608  87.6  2024-09-25\n1        2  000002    万  科Ａ   7.31  ...  -675   293  90.4  2024-09-25\n2        3  000004     国华网安  15.28  ...  -643  4283  91.6  2024-09-25\n3        4  000006     深振业Ａ   4.38  ...   704  4043  83.2  2024-09-25\n4        5  000007      全新好   5.62  ...   -86  2940  73.2  2024-09-25\n...    ...     ...      ...    ...  ...   ...   ...   ...         ...\n5076  5077  688799     华纳药厂  40.10  ...  1005  2019  63.2  2024-09-25\n5077  5078  688800      瑞可达  21.11  ...  -326  1166  63.6  2024-09-25\n5078  5079  688819     天能股份  27.86  ...  -504   568  74.8  2024-09-25\n5079  5080  688981     中芯国际  44.90  ...  1274  2669  79.6  2024-09-25\n5080  5081  689009  九号公司-WD  40.34  ...  -519   574  70.8  2024-09-25\n[5081 rows x 14 columns]\n```\n\n### 千股千评详情\n\n#### 主力控盘\n\n##### 机构参与度\n\n接口: stock_comment_detail_zlkp_jgcyd_em\n\n目标地址: https://data.eastmoney.com/stockcomment/stock/600000.html\n\n描述: 东方财富网-数据中心-特色数据-千股千评-主力控盘-机构参与度\n\n限量: 单次获取所有 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| symbol | str | symbol=\"600000\" |\n\n输出参数\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 交易日   | object  | -       |\n| 机构参与度 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_comment_detail_zlkp_jgcyd_em_df = ak.stock_comment_detail_zlkp_jgcyd_em(symbol=\"600000\")\nprint(stock_comment_detail_zlkp_jgcyd_em_df)\n```\n\n数据示例\n\n```\n         交易日  机构参与度\n0   2024-07-25  28.90860\n1   2024-07-26  30.96772\n2   2024-07-29  33.18196\n3   2024-07-30  29.74948\n4   2024-07-31  26.50768\n5   2024-08-01  31.43596\n6   2024-08-02  30.74792\n7   2024-08-05  30.00552\n8   2024-08-06  28.46816\n9   2024-08-07  27.28048\n10  2024-08-08  25.62168\n11  2024-08-09  28.76180\n12  2024-08-12  22.34396\n13  2024-08-13  25.12816\n14  2024-08-14  19.10376\n15  2024-08-15  26.32104\n16  2024-08-16  27.09764\n17  2024-08-19  33.85404\n18  2024-08-20  26.12312\n19  2024-08-21  24.80908\n20  2024-08-22  23.36916\n21  2024-08-23  27.57504\n22  2024-08-26  29.63956\n23  2024-08-27  23.29028\n24  2024-08-28  20.18936\n25  2024-08-29  24.87316\n26  2024-08-30  24.68128\n27  2024-09-02  25.37456\n28  2024-09-03  27.86884\n29  2024-09-04  25.54656\n30  2024-09-05  22.02124\n31  2024-09-06  19.94916\n32  2024-09-09  17.86148\n33  2024-09-10  34.34128\n34  2024-09-11  24.62652\n35  2024-09-12  34.83748\n36  2024-09-13  24.70888\n37  2024-09-18  26.05112\n38  2024-09-19  24.63440\n39  2024-09-20  18.15912\n40  2024-09-23  24.80804\n41  2024-09-24  30.84384\n```\n\n#### 综合评价\n\n##### 历史评分\n\n接口: stock_comment_detail_zhpj_lspf_em\n\n目标地址: https://data.eastmoney.com/stockcomment/stock/600000.html\n\n描述: 东方财富网-数据中心-特色数据-千股千评-综合评价-历史评分\n\n限量: 单次获取指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| symbol | str | symbol=\"600000\" |\n\n输出参数\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 日期  | object  | -   |\n| 评分  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_comment_detail_zhpj_lspf_em_df = ak.stock_comment_detail_zhpj_lspf_em(symbol=\"600000\")\nprint(stock_comment_detail_zhpj_lspf_em_df)\n```\n\n数据示例\n\n```\n      交易日         评分\n0   2024-08-13  62.512173\n1   2024-08-14  61.670775\n2   2024-08-15  63.852884\n3   2024-08-16  63.075082\n4   2024-08-19  68.835333\n5   2024-08-20  64.755213\n6   2024-08-21  64.289915\n7   2024-08-22  64.394597\n8   2024-08-23  61.212378\n9   2024-08-26  63.819157\n10  2024-08-27  62.614203\n11  2024-08-28  63.118215\n12  2024-08-29  60.579603\n13  2024-08-30  62.166671\n14  2024-09-02  66.166225\n15  2024-09-03  61.715196\n16  2024-09-04  61.016823\n17  2024-09-05  60.898236\n18  2024-09-06  59.813002\n19  2024-09-09  60.014454\n20  2024-09-10  64.019089\n21  2024-09-11  59.987986\n22  2024-09-12  62.374324\n23  2024-09-13  63.184084\n24  2024-09-18  62.877090\n25  2024-09-19  62.136208\n26  2024-09-20  59.141378\n27  2024-09-23  60.765932\n28  2024-09-24  67.036800\n29  2024-09-25  73.137028\n```\n\n#### 市场热度\n\n##### 用户关注指数\n\n接口: stock_comment_detail_scrd_focus_em\n\n目标地址: https://data.eastmoney.com/stockcomment/stock/600000.html\n\n描述: 东方财富网-数据中心-特色数据-千股千评-市场热度-用户关注指数\n\n限量: 单次获取所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| symbol | str | symbol=\"600000\" |\n\n输出参数\n\n| 名称     | 类型      | 描述 |\n|--------|---------|----|\n| 交易日    | object  | -  |\n| 用户关注指数 | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_comment_detail_scrd_focus_em_df = ak.stock_comment_detail_scrd_focus_em(symbol=\"600000\")\nprint(stock_comment_detail_scrd_focus_em_df)\n```\n\n数据示例\n\n```\n       交易日  用户关注指数\n0   2024-08-15    91.2\n1   2024-08-16    91.6\n2   2024-08-19    92.4\n3   2024-08-20    92.4\n4   2024-08-21    92.0\n5   2024-08-22    92.0\n6   2024-08-23    92.4\n7   2024-08-26    92.4\n8   2024-08-27    91.6\n9   2024-08-28    92.0\n10  2024-08-29    92.0\n11  2024-08-30    91.2\n12  2024-09-02    91.2\n13  2024-09-03    91.2\n14  2024-09-04    91.2\n15  2024-09-05    91.2\n16  2024-09-06    91.2\n17  2024-09-09    92.4\n18  2024-09-10    92.0\n19  2024-09-11    91.6\n20  2024-09-12    91.6\n21  2024-09-13    93.2\n22  2024-09-18    93.2\n23  2024-09-19    92.8\n24  2024-09-20    92.4\n25  2024-09-23    92.8\n26  2024-09-24    93.2\n27  2024-09-25    93.2\n28  2024-09-26    93.2\n29  2024-09-27    92.4\n```\n\n##### 市场参与意愿\n\n接口: stock_comment_detail_scrd_desire_em\n\n目标地址: https://data.eastmoney.com/stockcomment/stock/600000.html\n\n描述: 东方财富网-数据中心-特色数据-千股千评-市场热度-市场参与意愿\n\n限量: 单次获取所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| symbol | str | symbol=\"600000\" |\n\n输出参数\n\n| 名称       | 类型      | 描述 |\n|----------|---------|----|\n| 交易日期     | object  | -  |\n| 股票代码     | object  | -  |\n| 参与意愿     | float64 | -  |\n| 5日平均参与意愿 | float64 | -  |\n| 参与意愿变化   | float64 | -  |\n| 5日平均变化   | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_comment_detail_scrd_desire_em_df = ak.stock_comment_detail_scrd_desire_em(symbol=\"600000\")\nprint(stock_comment_detail_scrd_desire_em_df)\n```\n\n数据示例\n\n```\n   交易日期    股票代码   参与意愿  5日平均参与意愿  参与意愿变化  5日平均变化\n0  2025-12-25  600000  47.31     51.41   -9.50   -4.04\n1  2025-12-26  600000  35.05     50.74  -12.26    1.00\n2  2025-12-29  600000  65.52     54.55   30.47    3.81\n3  2025-12-30  600000  52.52     51.44  -13.00   -3.10\n4  2025-12-31  600000  51.85     50.45    1.00    1.00\n```\n\n### 沪深港通资金流向\n\n接口: stock_hsgt_fund_flow_summary_em\n\n目标地址: https://data.eastmoney.com/hsgt/index.html#lssj\n\n描述: 东方财富网-数据中心-资金流向-沪深港通资金流向\n\n限量: 单次获取沪深港通资金流向数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 交易日    | object  | -        |\n| 类型     | object  | -        |\n| 板块     | object  | -        |\n| 资金方向   | object  | -        |\n| 交易状态   | int64   | 3 为收盘    |\n| 成交净买额  | float64 | 注意单位: 亿元 |\n| 资金净流入  | float64 | 注意单位: 亿元 |\n| 当日资金余额 | float64 | 注意单位: 亿元 |\n| 上涨数    | int64   | -        |\n| 持平数    | int64   | -        |\n| 下跌数    | int64   | -        |\n| 相关指数   | object  | -        |\n| 指数涨跌幅  | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hsgt_fund_flow_summary_em_df = ak.stock_hsgt_fund_flow_summary_em()\nprint(stock_hsgt_fund_flow_summary_em_df)\n```\n\n数据示例\n\n```\n      交易日    类型      板块 资金方向  交易状态  ... 上涨数  持平数  下跌数  相关指数  指数涨跌幅\n0  2022-11-25  沪港通     沪股通   北向     3  ...  302    8  284  上证指数   0.40\n1  2022-11-25  沪港通  港股通(沪)   南向     3  ...  179   16  186  恒生指数  -0.49\n2  2022-11-25  深港通     深股通   北向     3  ...  283   29  621  深证成指  -0.48\n3  2022-11-25  深港通  港股通(深)   南向     3  ...  247   33  268  恒生指数  -0.49\n[4 rows x 13 columns]\n```\n\n### 沪深港通持股\n\n#### 结算汇率-深港通\n\n接口: stock_sgt_settlement_exchange_rate_szse\n\n目标地址: https://www.szse.cn/szhk/hkbussiness/exchangerate/index.html\n\n描述: 深港通-港股通业务信息-结算汇率\n\n限量: 单次获取所有深港通结算汇率数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型      | 描述  |\n|----------|---------|-----|\n| 适用日期     | object  | -   |\n| 买入结算汇兑比率 | float64 | -   |\n| 卖出结算汇兑比率 | float64 | -   |\n| 货币种类     | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sgt_settlement_exchange_rate_szse_df = ak.stock_sgt_settlement_exchange_rate_szse()\nprint(stock_sgt_settlement_exchange_rate_szse_df)\n```\n\n数据示例\n\n```\n     适用日期  买入结算汇兑比率  卖出结算汇兑比率 货币种类\n0     2016-12-05   0.88621   0.88679  HKD\n1     2016-12-06   0.88698   0.88682  HKD\n2     2016-12-07   0.88525   0.88935  HKD\n3     2016-12-08   0.89041   0.88899  HKD\n4     2016-12-09   0.88567   0.89133  HKD\n          ...       ...       ...  ...\n1371  2022-09-23   0.90209   0.90311  HKD\n1372  2022-09-26   0.90826   0.90814  HKD\n1373  2022-09-27   0.91179   0.91181  HKD\n1374  2022-09-28   0.91024   0.91636  HKD\n1375  2022-09-29   0.93270   0.91810  HKD\n```\n\n#### 结算汇率-沪港通\n\n接口: stock_sgt_settlement_exchange_rate_sse\n\n目标地址: http://www.sse.com.cn/services/hkexsc/disclo/ratios\n\n描述: 沪港通-港股通信息披露-结算汇兑\n\n限量: 单次获取所有沪港通结算汇率数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型      | 描述  |\n|----------|---------|-----|\n| 适用日期     | object  | -   |\n| 买入结算汇兑比率 | float64 | -   |\n| 卖出结算汇兑比率 | float64 | -   |\n| 货币种类     | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sgt_settlement_exchange_rate_sse_df = ak.stock_sgt_settlement_exchange_rate_sse()\nprint(stock_sgt_settlement_exchange_rate_sse_df)\n```\n\n数据示例\n\n```\n      适用日期  买入结算汇兑比率  卖出结算汇兑比率 货币种类\n0     2014-11-17   0.79143   0.79017  HKD\n1     2014-11-18   0.79068   0.78932  HKD\n2     2014-11-19   0.78873   0.78927  HKD\n3     2014-11-20   0.78980   0.78980  HKD\n4     2014-11-21   0.79021   0.78999  HKD\n          ...       ...       ...  ...\n1860  2022-09-23   0.90170   0.90350  HKD\n1861  2022-09-26   0.90812   0.90828  HKD\n1862  2022-09-27   0.91177   0.91183  HKD\n1863  2022-09-28   0.91038   0.91622  HKD\n1864  2022-09-29   0.93260   0.91820  HKD\n```\n\n#### 参考汇率-深港通\n\n接口: stock_sgt_reference_exchange_rate_szse\n\n目标地址: https://www.szse.cn/szhk/hkbussiness/exchangerate/index.html\n\n描述: 深港通-港股通业务信息-参考汇率\n\n限量: 单次获取所有深港通参考汇率数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述  |\n|---------|---------|-----|\n| 适用日期    | object  | -   |\n| 参考汇率买入价 | float64 | -   |\n| 参考汇率卖出价 | float64 | -   |\n| 货币种类    | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sgt_reference_exchange_rate_szse_df = ak.stock_sgt_reference_exchange_rate_szse()\nprint(stock_sgt_reference_exchange_rate_szse_df)\n```\n\n数据示例\n\n```\n     适用日期  参考汇率买入价  参考汇率卖出价 货币种类\n0     2016-12-05   0.8599   0.9131  HKD\n1     2016-12-06   0.8603   0.9135  HKD\n2     2016-12-07   0.8607   0.9139  HKD\n3     2016-12-08   0.8630   0.9164  HKD\n4     2016-12-09   0.8618   0.9152  HKD\n          ...      ...      ...  ...\n1375  2022-09-26   0.8810   0.9354  HKD\n1376  2022-09-27   0.8844   0.9392  HKD\n1377  2022-09-28   0.8859   0.9407  HKD\n1378  2022-09-29   0.8976   0.9532  HKD\n1379  2022-09-30   0.8875   0.9423  HKD\n```\n\n#### 参考汇率-沪港通\n\n接口: stock_sgt_reference_exchange_rate_sse\n\n目标地址: http://www.sse.com.cn/services/hkexsc/disclo/ratios/\n\n描述: 沪港通-港股通信息披露-参考汇率\n\n限量: 单次获取所有沪港通参考汇率数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述  |\n|---------|---------|-----|\n| 适用日期    | object  | -   |\n| 参考汇率买入价 | float64 | -   |\n| 参考汇率卖出价 | float64 | -   |\n| 货币种类    | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sgt_reference_exchange_rate_sse_df = ak.stock_sgt_reference_exchange_rate_sse()\nprint(stock_sgt_reference_exchange_rate_sse_df)\n```\n\n数据示例\n\n```\n     适用日期 参考汇率买入价 参考汇率卖出价 货币种类\n0     2016-11-23   0.8635   0.9169  HKD\n1     2016-11-24   0.8666   0.9202  HKD\n2     2016-11-25   0.8684   0.9222  HKD\n3     2016-11-28   0.8689   0.9227  HKD\n4     2016-11-29   0.8669   0.9205  HKD\n...          ...      ...      ...  ...\n1995  2025-02-13   0.9108   0.9672  HKD\n1996  2025-02-14   0.9089   0.9651  HKD\n1997  2025-02-17   0.9049   0.9609  HKD\n1998  2025-02-18   0.9050   0.9610  HKD\n1999  2025-02-19   0.9079   0.9641  HKD\n[2000 rows x 4 columns]\n```\n\n#### 港股通成份股\n\n接口: stock_hk_ggt_components_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#hk_components\n\n描述: 东方财富网-行情中心-港股市场-港股通成份股\n\n限量: 单次获取所有港股通成份股数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述        |\n|-----|---------|-----------|\n| 序号  | int64   | -         |\n| 代码  | object  | -         |\n| 名称  | object  | -         |\n| 最新价 | float64 | 注意单位: HKD |\n| 涨跌额 | float64 | -         |\n| 涨跌幅 | float64 | -         |\n| 今开  | float64 | -         |\n| 最高  | float64 | -         |\n| 最低  | float64 | -         |\n| 昨收  | float64 | -         |\n| 成交量 | float64 | 注意单位: 股   |\n| 成交额 | float64 | 注意单位: 港元  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_ggt_components_em_df = ak.stock_hk_ggt_components_em()\nprint(stock_hk_ggt_components_em_df)\n```\n\n数据示例\n\n```\n     序号  代码     名称    最新价  ...    最低   昨收     成交量           成交额\n0      1  06680    金力永磁  14.32  ...   11.2  11.26   37038146   505702480.0\n1      2  01347   华虹半导体   38.3  ...   31.0  31.15  156847850  5640157952.0\n2      3  02228  晶泰控股-P   7.71  ...   6.35   6.48  367666400  2637056752.0\n3      4  09989     海普瑞   4.72  ...   3.94   3.97   52468000   248839660.0\n4      5  02556     迈富时  66.35  ...  58.85   58.0   15602500   994784016.0\n..   ...    ...     ...    ...  ...    ...    ...        ...           ...\n542  543  03738    阜博集团   3.98  ...   3.78   4.18   60483000   240326764.0\n543  544  02469      粉笔   2.84  ...   2.76   2.99   67413000   190089816.0\n544  545  01060    阿里影业   0.56  ...   0.56   0.59  419548960   239843136.0\n545  546  01208    五矿资源   2.53  ...    2.5   2.68   93202524   237766414.0\n546  547  01691  JS环球生活   1.85  ...   1.83   1.97  101497000   188240267.0\n[547 rows x 12 columns]\n```\n\n#### 沪深港通分时数据\n\n接口: stock_hsgt_fund_min_em\n\n目标地址: https://data.eastmoney.com/hsgt/hsgtDetail/scgk.html\n\n描述: 东方财富-数据中心-沪深港通-市场概括-分时数据\n\n限量: 单次返回指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                        |\n|--------|-----|-------------------------------------------|\n| symbol | str | symbol=\"北向资金\"; choice of {\"北向资金\", \"南向资金\"} |\n\n输出参数-北向资金\n\n| 名称   | 类型      | 描述       |\n|------|---------|----------|\n| 日期   | object  | 日期       |\n| 时间   | object  | 时间       |\n| 沪股通  | float64 | 注意单位: 万元 |\n| 深股通  | float64 | 注意单位: 万元 |\n| 北向资金 | float64 | 注意单位: 万元 |\n\n接口示例-北向资金\n\n```python\nimport akshare as ak\n\nstock_hsgt_fund_min_em_df = ak.stock_hsgt_fund_min_em(symbol=\"北向资金\")\nprint(stock_hsgt_fund_min_em_df)\n```\n\n数据示例-北向资金\n\n```\n         日期     时间     沪股通      深股通     北向资金\n0    2024-02-05   9:30   -9222.18    768.61   -8453.57\n1    2024-02-05   9:31  -19235.49 -14207.98  -33443.47\n2    2024-02-05   9:32    7372.63  10008.57   17381.20\n3    2024-02-05   9:33      68.98  -6103.43   -6034.45\n4    2024-02-05   9:34  -19283.54 -30185.11  -49468.65\n..          ...    ...        ...       ...        ...\n236  2024-02-05  14:56  147348.10 -85482.41   61865.69\n237  2024-02-05  14:57  152668.52 -77390.79   75277.73\n238  2024-02-05  14:58  152620.49 -77390.79   75229.70\n239  2024-02-05  14:59  152593.72 -77390.79   75202.93\n240  2024-02-05  15:00  161430.55 -40329.50  121101.05\n[241 rows x 5 columns]\n```\n\n输出参数-南向资金\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 日期     | object  | 日期       |\n| 时间     | object  | 时间       |\n| 港股通(沪) | float64 | 注意单位: 万元 |\n| 港股通(深) | float64 | 注意单位: 万元 |\n| 南向资金   | float64 | 注意单位: 万元 |\n\n接口示例-南向资金\n\n```python\nimport akshare as ak\n\nstock_hsgt_fund_min_em_df = ak.stock_hsgt_fund_min_em(symbol=\"南向资金\")\nprint(stock_hsgt_fund_min_em_df)\n```\n\n数据示例-南向资金\n\n```\n       日期       时间     港股通(沪)     港股通(深)     南向资金\n0    2024-02-05   9:00       0.00       0.00       0.00\n1    2024-02-05   9:01       0.00       0.00       0.00\n2    2024-02-05   9:02       0.00       0.00       0.00\n3    2024-02-05   9:03       0.00       0.00       0.00\n4    2024-02-05   9:04       0.00       0.00       0.00\n..          ...    ...        ...        ...        ...\n366  2024-02-05  16:06  239979.44  149214.83  389194.27\n367  2024-02-05  16:07  239979.44  149214.83  389194.27\n368  2024-02-05  16:08  239979.44  149214.83  389194.27\n369  2024-02-05  16:09  240475.76  149721.67  390197.43\n370  2024-02-05  16:10  240475.76  149721.67  390197.43\n[371 rows x 5 columns]\n```\n\n#### 板块排行\n\n接口: stock_hsgt_board_rank_em\n\n目标地址: https://data.eastmoney.com/hsgtcg/bk.html\n\n描述: 东方财富网-数据中心-沪深港通持股-板块排行\n\n限量: 单次获取指定 symbol 和 indicator 的所有数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                                |\n|-----------|-----|-----------------------------------------------------------------------------------|\n| symbol    | str | symbol=\"北向资金增持行业板块排行\"; choice of {\"北向资金增持行业板块排行\", \"北向资金增持概念板块排行\", \"北向资金增持地域板块排行\"} |\n| indicator | str | indicator=\"今日\"; choice of {\"今日\", \"3日\", \"5日\", \"10日\", \"1月\", \"1季\", \"1年\"}             |\n\n输出参数\n\n| 名称                | 类型      | 描述      |\n|-------------------|---------|---------|\n| 序号                | int64   | -       |\n| 名称                | object  | -       |\n| 最新涨跌幅             | float64 | 注意单位: % |\n| 北向资金今日持股-股票只数     | float64 | -       |\n| 北向资金今日持股-市值       | float64 | 注意单位: 元 |\n| 北向资金今日持股-占板块比     | float64 | -       |\n| 北向资金今日持股-占北向资金比   | float64 | -       |\n| 北向资金今日增持估计-股票只数   | float64 | -       |\n| 北向资金今日增持估计-市值     | float64 | 注意单位: 元 |\n| 北向资金今日增持估计-市值增幅   | float64 | -       |\n| 北向资金今日增持估计-占板块比   | float64 | -       |\n| 北向资金今日增持估计-占北向资金比 | float64 | -       |\n| 今日增持最大股-市值        | float64 | -       |\n| 今日增持最大股-占股本比      | float64 | -       |\n| 今日减持最大股-占股本比      | float64 | -       |\n| 今日减持最大股-市值        | float64 | -       |\n| 报告时间              | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hsgt_board_rank_em_df = ak.stock_hsgt_board_rank_em(symbol=\"北向资金增持行业板块排行\", indicator=\"今日\")\nprint(stock_hsgt_board_rank_em_df)\n```\n\n数据示例\n\n```\n    序号   名称  最新涨跌幅  ...  今日减持最大股-市值  今日减持最大股-占总市值比 报告时间\n0    1   软件开发  -3.17  ...        用友网络            指南针  2024-01-11\n1    2  互联网服务  -2.18  ...        东方财富           中科创达  2024-01-11\n2    3   煤炭行业  -0.04  ...        潞安环能           山西焦化  2024-01-11\n3    4   能源金属  -0.98  ...        华友钴业           腾远钴业  2024-01-11\n4    5   汽车整车  -0.98  ...        长安汽车           江淮汽车  2024-01-11\n..  ..    ...    ...  ...         ...            ...         ...\n81  82   美容护理  -1.17  ...         爱美客            爱美客  2024-01-11\n82  83   钢铁行业  -0.54  ...        宝钢股份           常宝股份  2024-01-11\n83  84   酿酒行业  -0.47  ...        贵州茅台           舍得酒业  2024-01-11\n84  85     银行   0.99  ...        农业银行           常熟银行  2024-01-11\n85  86   光伏设备   0.43  ...        隆基绿能           隆基绿能  2024-01-11\n[86 rows x 17 columns]\n```\n\n#### 个股排行\n\n接口: stock_hsgt_hold_stock_em\n\n目标地址: https://data.eastmoney.com/hsgtcg/list.html\n\n描述: 东方财富网-数据中心-沪深港通持股-个股排行\n\n限量: 单次获取指定 market 和 indicator 的所有数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                                |\n|-----------|-----|-----------------------------------------------------------------------------------|\n| market    | str | market=\"沪股通\"; choice of {\"北向\", \"沪股通\", \"深股通\"}                                      |\n| indicator | str | indicator=\"沪股通\"; choice of {\"今日排行\", \"3日排行\", \"5日排行\", \"10日排行\", \"月排行\", \"季排行\", \"年排行\"} |\n\n输出参数\n\n| 名称         | 类型      | 描述                            |\n|------------|---------|-------------------------------|\n| 序号         | int32   | -                             |\n| 代码         | object  | -                             |\n| 名称         | object  | -                             |\n| 今日收盘价      | float64 | -                             |\n| 今日涨跌幅      | float64 | 注意单位: %                       |\n| 今日持股-股数    | float64 | 注意单位: 万                       |\n| 今日持股-市值    | float64 | 注意单位: 万                       |\n| 今日持股-占流通股比 | float64 | 注意单位: %                       |\n| 今日持股-占总股本比 | float64 | 注意单位: %                       |\n| 增持估计-股数    | float64 | 注意单位: 万; 主要字段名根据 indicator 变化 |\n| 增持估计-市值    | float64 | 注意单位: 万; 主要字段名根据 indicator 变化 |\n| 增持估计-市值增幅  | object  | 注意单位: %; 主要字段名根据 indicator 变化 |\n| 增持估计-占流通股比 | float64 | 注意单位: ‰; 主要字段名根据 indicator 变化 |\n| 增持估计-占总股本比 | float64 | 注意单位: ‰; 主要字段名根据 indicator 变化 |\n| 所属板块       | object  | -                             |\n| 日期         | object  | -                             |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_em_hsgt_hold_stock_df = ak.stock_hsgt_hold_stock_em(market=\"北向\", indicator=\"今日排行\")\nprint(stock_em_hsgt_hold_stock_df)\n```\n\n数据示例\n\n```\n        序号   代码   名称    今日收盘价  ...  5日增持估计-占流通股比  5日增持估计-占总股本比  所属板块   日期\n0        1  601127   赛力斯    68.50  ...          5.54          5.54  汽车整车  2024-01-10\n1        2  603259  药明康德    67.62  ...          3.06          2.65  医疗服务  2024-01-10\n2        3  600660  福耀玻璃    38.88  ...          5.03          3.86  玻璃玻纤  2024-01-10\n3        4  600309  万华化学    73.00  ...          1.47          1.47  化学制品  2024-01-10\n4        5  600188  兖矿能源    21.67  ...          3.37          2.04  煤炭行业  2024-01-10\n    ...     ...   ...      ...  ...           ...           ...   ...         ...\n1335  1336  601088  中国神华    33.85  ...         -0.58         -0.48  煤炭行业  2024-01-10\n1336  1337  601012  隆基绿能    22.23  ...         -2.44         -2.44  光伏设备  2024-01-10\n1337  1338  601899  紫金矿业    12.28  ...         -1.61         -1.26   贵金属  2024-01-10\n1338  1339  601318  中国平安    37.82  ...         -1.15         -0.68    保险  2024-01-10\n1339  1340  600519  贵州茅台  1641.50  ...         -0.43         -0.43  酿酒行业  2024-01-10\n[1340 rows x 16 columns]\n```\n\n#### 每日个股统计\n\n接口: stock_hsgt_stock_statistics_em\n\n目标地址: http://data.eastmoney.com/hsgtcg/StockStatistics.aspx\n\n描述: 东方财富网-数据中心-沪深港通-沪深港通持股-每日个股统计\n\n限量: 单次获取指定 market 的 start_date 和 end_date 之间的所有数据, 该接口只能获取近期的数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                          |\n|------------|-----|-------------------------------------------------------------|\n| symbol     | str | symbol=\"北向持股\"; choice of {\"北向持股\", \"沪股通持股\", \"深股通持股\", \"南向持股\"} |\n| start_date | str | start_date=\"20210601\"; 此处指定近期交易日                            |\n| end_date   | str | end_date=\"20210608\"; 此处指定近期交易日                              |\n\n输出参数\n\n| 名称          | 类型      | 描述                   |\n|-------------|---------|----------------------|\n| 持股日期        | object  | -                    |\n| 股票代码        | object  | -                    |\n| 股票简称        | object  | -                    |\n| 当日收盘价       | float64 | 注意单位: 元; 南向持股单位为: 港元 |\n| 当日涨跌幅       | float64 | 注意单位: %              |\n| 持股数量        | float64 | 注意单位: 万股             |\n| 持股市值        | float64 | 注意单位: 万元             |\n| 持股数量占发行股百分比 | float64 | 注意单位: %              |\n| 持股市值变化-1日   | float64 | 注意单位: 元              |\n| 持股市值变化-5日   | float64 | 注意单位: 元              |\n| 持股市值变化-10日  | float64 | 注意单位: 元              |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hsgt_stock_statistics_em_df = ak.stock_hsgt_stock_statistics_em(symbol=\"北向持股\", start_date=\"20211027\", end_date=\"20211027\")\nprint(stock_hsgt_stock_statistics_em_df)\n```\n\n数据示例\n\n```\n      持股日期    股票代码  股票简称  ...     持股市值变化-1日     持股市值变化-5日   持股市值变化-10日\n0     2021-10-27  603327  福蓉科技  ... -1.876431e+05 -7.623525e+04 -1.999411e+06\n1     2021-10-27  605199   葫芦娃  ... -1.408119e+06 -8.786002e+05 -8.750511e+05\n2     2021-10-27  605136  丽人丽妆  ... -4.739965e+05 -4.834552e+05 -2.335740e+06\n3     2021-10-27  300396  迪瑞医疗  ... -2.088927e+05 -7.029425e+05 -8.044508e+05\n4     2021-10-27  603598  引力传媒  ...  1.090273e+05 -4.007397e+06 -6.420819e+06\n          ...     ...   ...  ...           ...           ...           ...\n1436  2021-10-27  601012  隆基股份  ...  1.753065e+09  4.817712e+08  7.829894e+09\n1437  2021-10-27  600036  招商银行  ... -8.938440e+08  4.831173e+09  4.401946e+09\n1438  2021-10-27  000333  美的集团  ... -5.719656e+09 -3.952053e+09 -7.030619e+09\n1439  2021-10-27  300750  宁德时代  ...  3.142970e+09  7.133537e+09  2.157141e+10\n1440  2021-10-27  600519  贵州茅台  ... -3.964678e+09 -2.334647e+09 -5.475161e+09\n```\n\n#### 机构排行\n\n接口: stock_hsgt_institution_statistics_em\n\n目标地址: http://data.eastmoney.com/hsgtcg/InstitutionStatistics.aspx\n\n描述: 东方财富网-数据中心-沪深港通-沪深港通持股-机构排行\n\n限量: 单次获取指定 market 的所有数据, 该接口只能获取近期的数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                          |\n|------------|-----|-------------------------------------------------------------|\n| market     | str | market=\"北向持股\"; choice of {\"北向持股\", \"沪股通持股\", \"深股通持股\", \"南向持股\"} |\n| start_date | str | start_date=\"20201218\"; 此处指定近期交易日                            |\n| end_date   | str | end_date=\"20201218\"; 此处指定近期交易日                              |\n\n输出参数\n\n| 名称         | 类型      | 描述                   |\n|------------|---------|----------------------|\n| 持股日期       | object  | -                    |\n| 机构名称       | object  | -                    |\n| 持股只数       | float64 | 注意单位: 只              |\n| 持股市值       | float64 | 注意单位: 元; 南向持股单位为: 港元 |\n| 持股市值变化-1日  | float64 | 注意单位: 元; 南向持股单位为: 港元 |\n| 持股市值变化-5日  | float64 | 注意单位: 元; 南向持股单位为: 港元 |\n| 持股市值变化-10日 | float64 | 注意单位: 元; 南向持股单位为: 港元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hsgt_institution_statistics_em_df = ak.stock_hsgt_institution_statistics_em(market=\"北向持股\", start_date=\"20201218\", end_date=\"20201218\")\nprint(stock_hsgt_institution_statistics_em_df)\n```\n\n数据示例\n\n```\n     持股日期  ...           持股市值变化-10日\n0    2020-12-18  ...  -1853745798.3000183\n1    2020-12-18  ...         -6.01983e+09\n2    2020-12-18  ...   3296301138.0900955\n3    2020-12-18  ...   299245525.25022888\n4    2020-12-18  ...   18389735021.519775\n..          ...  ...                  ...\n153  2020-12-18  ...   1455359.9999999981\n154  2020-12-18  ...                  -10\n155  2020-12-18  ...  -2035718.2199999988\n156  2020-12-18  ...                -5425\n157  2020-12-18  ...                  -94\n```\n\n#### 沪深港通-港股通(沪>港)实时行情\n\n接口: stock_hsgt_sh_hk_spot_em\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#hk_sh_stocks\n\n描述: 东方财富网-行情中心-沪深港通-港股通(沪>港)-股票；按股票代码排序\n\n限量: 单次获取所有数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称  | 类型      | 描述        |\n|-----|---------|-----------|\n| 序号  | int64   | -         |\n| 代码  | object  | -         |\n| 名称  | object  | -         |\n| 最新价 | float64 | 注意单位: HKD |\n| 涨跌额 | float64 | -         |\n| 涨跌幅 | float64 | 注意单位: %   |\n| 今开  | float64 | -         |\n| 最高  | float64 | -         |\n| 最低  | float64 | -         |\n| 昨收  | float64 | -         |\n| 成交量 | float64 | 注意单位: 亿股  |\n| 成交额 | float64 | 注意单位: 亿港元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hsgt_sh_hk_spot_em_df = ak.stock_hsgt_sh_hk_spot_em()\nprint(stock_hsgt_sh_hk_spot_em_df)\n```\n\n数据示例\n\n```\n     序号  代码      名称     最新价  ...    最低    昨收     成交量       成交额\n0      1  00001      长和   49.50  ...   49.40   51.55  0.453758  22.712456\n1      2  00002    中电控股   64.25  ...   64.15   64.99  0.054139   3.488916\n2      3  00003  香港中华煤气    6.25  ...    6.17    6.27  0.343850   2.151922\n3      4  00004   九龙仓集团   19.38  ...   19.24   19.70  0.016805   0.327002\n4      5  00005    汇丰控股   87.95  ...   87.95   90.00  0.374613  33.070786\n..   ...    ...     ...     ...  ...     ...     ...       ...        ...\n540  541  09989     海普瑞    4.48  ...    4.43    4.50  0.023235   0.103881\n541  542  09992    泡泡玛特  116.40  ...  114.10  116.20  0.061158   7.172251\n542  543  09993    金辉控股    2.70  ...    2.69    2.80  0.007670   0.020909\n543  544  09995    荣昌生物   17.80  ...   17.42   17.90  0.031735   0.566258\n544  545  09997    康基医疗    7.53  ...    7.32    7.40  0.040656   0.303262\n[545 rows x 12 columns]\n```\n\n#### 沪深港通历史数据\n\n接口: stock_hsgt_hist_em\n\n目标地址: https://data.eastmoney.com/hsgt/index.html\n\n描述: 东方财富网-数据中心-资金流向-沪深港通资金流向-沪深港通历史数据\n\n限量: 单次获取指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                      |\n|--------|-----|-------------------------------------------------------------------------|\n| symbol | str | symbol=\"北向资金\"; choice of {\"北向资金\", \"沪股通\", \"深股通\", \"南向资金\", \"港股通沪\", \"港股通深\"} |\n\n输出参数-北向资金\n\n| 名称        | 类型      | 描述        |\n|-----------|---------|-----------|\n| 日期        | object  | -         |\n| 当日成交净买额   | float64 | 注意单位: 亿元  |\n| 买入成交额     | float64 | 注意单位: 亿元  |\n| 卖出成交额     | float64 | 注意单位: 亿元  |\n| 历史累计净买额   | float64 | 注意单位: 万亿元 |\n| 当日资金流入    | float64 | 注意单位: 亿元  |\n| 当日余额      | float64 | 注意单位: 亿元  |\n| 持股市值      | float64 | 注意单位: 元   |\n| 领涨股       | object  | -         |\n| 领涨股-涨跌幅   | float64 | 注意单位: %   |\n| 沪深300     | float64 | -         |\n| 沪深300-涨跌幅 | float64 | 注意单位: %   |\n| 领涨股-代码    | object  | -         |\n\n接口示例-北向资金\n\n```python\nimport akshare as ak\n\nstock_hsgt_hist_em_df = ak.stock_hsgt_hist_em(symbol=\"北向资金\")\nprint(stock_hsgt_hist_em_df)\n```\n\n数据示例-北向资金\n\n```\n           日期   当日成交净买额  买入成交额  ...  沪深300  沪深300-涨跌幅  领涨股-代码\n0     2014-11-17  120.8233  120.8233  ...  2474.01      -0.19  601000.SH\n1     2014-11-18   47.1967   49.4367  ...  2456.37      -0.71  600755.SH\n2     2014-11-19   24.9677   26.6951  ...  2450.99      -0.22  601216.SH\n3     2014-11-20   21.4194   23.0973  ...  2452.66       0.07  600755.SH\n4     2014-11-21   21.9953   24.3055  ...  2486.79       1.39  600635.SH\n          ...       ...       ...  ...      ...        ...        ...\n2175  2024-04-08  -30.4468  676.5491  ...  3047.05      -0.72  603110.SH\n2176  2024-04-09   10.5503  609.6675  ...  3048.54       0.05  605366.SH\n2177  2024-04-10  -41.1411  565.4525  ...  3027.33      -0.70  605376.SH\n2178  2024-04-11   20.2153  635.6282  ...  3034.25       0.23  002455.SZ\n2179  2024-04-12  -73.8533  584.2191  ...  3019.47      -0.49  600984.SH\n[2180 rows x 13 columns]\n```\n\n输出参数-港股通沪\n\n| 名称       | 类型      | 描述        |\n|----------|---------|-----------|\n| 日期       | object  | -         |\n| 当日成交净买额  | float64 | 注意单位: 亿港元 |\n| 买入成交额    | float64 | 注意单位: 亿港元 |\n| 卖出成交额    | float64 | 注意单位: 亿港元 |\n| 历史累计净买额  | float64 | 注意单位: 万亿元 |\n| 当日资金流入   | float64 | 注意单位: 亿元  |\n| 当日余额     | float64 | 注意单位: 亿元  |\n| 持股市值     | float64 | 注意单位: 元   |\n| 领涨股      | object  | -         |\n| 领涨股-涨跌幅  | float64 | 注意单位: %   |\n| 恒生指数     | float64 | -         |\n| 恒生指数-涨跌幅 | float64 | 注意单位: %   |\n| 领涨股-代码   | object  | -         |\n\n接口示例-港股通沪\n\n```python\nimport akshare as ak\n\nstock_hsgt_hist_em_df = ak.stock_hsgt_hist_em(symbol=\"港股通沪\")\nprint(stock_hsgt_hist_em_df)\n```\n\n数据示例-港股通沪\n\n```\n    日期  当日成交净买额     买入成交额  ...    恒生指数  恒生指数-涨跌幅    领涨股-代码\n0     2014-11-17  21.3208   22.3811  ...  23797.08     -1.21  02607.HK\n1     2014-11-18   9.3716   10.8311  ...  23529.17     -1.13  00220.HK\n2     2014-11-19   2.6592    3.8092  ...  23373.31     -0.66  02196.HK\n3     2014-11-20   1.8736    2.8150  ...  23349.64     -0.10  01072.HK\n4     2014-11-21   1.7453    3.0867  ...  23437.12      0.37  00038.HK\n          ...      ...       ...  ...       ...       ...       ...\n2136  2024-04-08  31.2429  115.3674  ...  16732.85      0.05  09890.HK\n2137  2024-04-09  12.5875   78.8646  ...  16828.07      0.57  09890.HK\n2138  2024-04-10   5.8779   92.2470  ...  17139.17      1.85  02038.HK\n2139  2024-04-11  43.1305  109.2427  ...  17095.03     -0.26  03650.HK\n2140  2024-04-12  32.6043  109.1773  ...  16721.69     -2.18  01563.HK\n[2141 rows x 13 columns]\n```\n\n#### 沪深港通持股-个股\n\n接口: stock_hsgt_individual_em\n\n目标地址: https://data.eastmoney.com/hsgt/StockHdDetail/002008.html\n\n描述: 东方财富网-数据中心-沪深港通-沪深港通持股-具体股票\n\n限量: 单次获取指定 symbol 的截至 20240816 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                       |\n|--------|-----|--------------------------|\n| symbol | str | symbol=\"002008\"; 支持港股和A股 |\n\n输出参数-A股\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 持股日期       | object  | -       |\n| 当日收盘价      | float64 | 注意单位: 元 |\n| 当日涨跌幅      | float64 | 注意单位: % |\n| 持股数量       | int64   | 注意单位: 股 |\n| 持股市值       | float64 | 注意单位: 元 |\n| 持股数量占A股百分比 | float64 | 注意单位: % |\n| 今日增持股数     | float64 | 注意单位: 股 |\n| 今日增持资金     | float64 | 注意单位: 元 |\n| 今日持股市值变化   | float64 | 注意单位: 元 |\n\n输出参数-港股\n\n| 名称         | 类型      | 描述       |\n|------------|---------|----------|\n| 持股日期       | object  | -        |\n| 当日收盘价      | float64 | 注意单位: 港元 |\n| 当日涨跌幅      | float64 | 注意单位: %  |\n| 持股数量       | int64   | 注意单位: 股  |\n| 持股市值       | float64 | 注意单位: 港元 |\n| 持股数量占A股百分比 | float64 | 注意单位: %  |\n| 持股市值变化-1日  | float64 | 注意单位: 港元 |\n| 持股市值变化-5日  | float64 | 注意单位: 港元 |\n| 持股市值变化-10日 | float64 | 注意单位: 港元 |\n\n接口示例-A股\n\n```python\nimport akshare as ak\n\nstock_hsgt_individual_em_df = ak.stock_hsgt_individual_em(symbol=\"002008\")\nprint(stock_hsgt_individual_em_df)\n```\n\n数据示例-A股\n\n```\n      持股日期  当日收盘价  当日涨跌幅  ... 今日增持股数   今日增持资金 今日持股市值变化\n0     2017-03-16  26.79 -0.630564  ...        NaN           NaN          NaN\n1     2017-03-17  26.29 -1.866368  ...  2581506.0  6.838900e+07  56636924.24\n2     2017-03-20  26.68  1.483454  ...      197.0  5.201903e+03   9772120.73\n3     2017-03-21  26.52 -0.599700  ...   222538.0  5.916751e+06   1894757.36\n4     2017-03-22  26.31 -0.791855  ...   870007.0  2.283707e+07  17584028.79\n...          ...    ...       ...  ...        ...           ...          ...\n1667  2024-08-12  20.11 -1.179361  ...   198214.0  3.996153e+06   -156132.62\n1668  2024-08-13  20.24  0.646445  ...   -67398.0 -1.352516e+06    905332.72\n1669  2024-08-14  20.03 -1.037549  ...   911900.0  1.828341e+07  14613446.50\n1670  2024-08-15  20.19  0.798802  ...  -920522.0 -1.860605e+07 -15657027.18\n1671  2024-08-16  20.12 -0.346706  ...  -835600.0 -1.685664e+07 -18028971.96\n[1672 rows x 9 columns]\n```\n\n#### 沪深港通持股-个股详情\n\n接口: stock_hsgt_individual_detail_em\n\n目标地址: http://data.eastmoney.com/hsgtcg/StockHdStatistics/002008.html(示例)\n\n描述: 东方财富网-数据中心-沪深港通-沪深港通持股-具体股票-个股详情\n\n限量: 单次获取指定 symbol 的在 start_date 和 end_date 之间的所有数据; 注意只能返回 90 个交易日内的数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                              |\n|------------|-----|-------------------------------------------------|\n| symbol     | str | symbol=\"002008\"                                 |\n| start_date | str | start_date=\"20210830\"; 注意只能返回离最近交易日 90 个交易日内的数据 |\n| end_date   | str | end_date=\"20211026\"; 注意只能返回离最近交易日 90 个交易日内的数据   |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 持股日期       | object  | -       |\n| 当日收盘价      | float64 | 注意单位: 元 |\n| 当日涨跌幅      | float64 | 注意单位: % |\n| 机构名称       | object  | -       |\n| 持股数量       | int64   | 注意单位: 股 |\n| 持股市值       | float64 | 注意单位: 元 |\n| 持股数量占A股百分比 | float64 | 注意单位: % |\n| 持股市值变化-1日  | float64 | 注意单位: 元 |\n| 持股市值变化-5日  | float64 | 注意单位: 元 |\n| 持股市值变化-10日 | float64 | 注意单位: 元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hsgt_individual_detail_em_df = ak.stock_hsgt_individual_detail_em(\n\tsymbol=\"002008\",\n\tstart_date=\"20210830\",\n\tend_date=\"20211026\"\n)\nprint(stock_hsgt_individual_detail_em_df)\n```\n\n数据示例\n\n```\n      持股日期  当日收盘价   当日涨跌幅  ...  持股市值变化-1日  持股市值变化-5日  持股市值变化-10日\n0     2021-10-25  40.05  0.5271  ...   112008.0 -9329832.0    211866.0\n1     2021-10-25  40.05  0.5271  ...     1155.0     3795.0     12210.0\n2     2021-10-25  40.05  0.5271  ...     8442.0    27738.0    437280.0\n3     2021-10-25  40.05  0.5271  ...    26922.0    88458.0    224076.0\n4     2021-10-25  40.05  0.5271  ...     1071.0     3519.0     11322.0\n          ...    ...     ...  ...        ...        ...         ...\n1791  2021-08-30  46.53  5.3668  ...    10428.0    29732.0    142362.0\n1792  2021-08-30  46.53  5.3668  ...   120633.0  2329002.0   2330955.0\n1793  2021-08-30  46.53  5.3668  ...  5289183.0  4723917.0   7891389.0\n1794  2021-08-30  46.53  5.3668  ...   -15768.0  -225276.0         0.0\n1795  2021-08-30  46.53  5.3668  ...      474.0      556.0     -3168.0\n```\n\n### 停复牌信息\n\n接口: stock_tfp_em\n\n目标地址: https://data.eastmoney.com/tfpxx/\n\n描述: 东方财富网-数据中心-特色数据-停复牌信息\n\n限量: 单次获取指定 date 的停复牌数据, 具体更新逻辑跟目标网页统一\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date=\"20240426\" |\n\n输出参数\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 序号     | int64  |     |\n| 代码     | object |     |\n| 名称     | object |     |\n| 停牌时间   | object |     |\n| 停牌截止时间 | object |     |\n| 停牌期限   | object |     |\n| 停牌原因   | object |     |\n| 所属市场   | object |     |\n| 预计复牌时间 | object |     |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_tfp_em_df = ak.stock_tfp_em(date=\"20240426\")\nprint(stock_tfp_em_df)\n```\n\n数据示例\n\n```\n    序号      代码     名称        停牌时间  ...  停牌期限       停牌原因      所属市场      预计复牌时间\n0    0  300208   青岛中程  2024-04-29  ...  停牌一天     刊登重要公告    深交所创业板  2024-04-30\n1    1  300125   聆达股份  2024-04-29  ...  停牌一天     刊登重要公告    深交所创业板  2024-04-30\n2    2  002310   东方园林  2024-04-29  ...  停牌一天     刊登重要公告     深交所主板  2024-04-30\n3    3  600165   ST宁科  2024-04-29  ...  停牌一天     刊登重要公告  上交所风险警示板  2024-04-30\n4    4  300116    保力新  2024-04-29  ...  停牌一天     刊登重要公告    深交所创业板  2024-04-30\n5    5  300167  ST迪威迅  2024-04-29  ...  停牌一天     刊登重要公告  深交所风险警示板  2024-04-30\n6    6  000971   ST高升  2024-04-29  ...  停牌一天     刊登重要公告  深交所风险警示板  2024-04-30\n7    7  300536   农尚环境  2024-04-29  ...  停牌一天     刊登重要公告    深交所创业板  2024-04-30\n8    8  600777   新潮能源  2024-04-29  ...  停牌一天     刊登重要公告     上交所主板  2024-04-30\n9    9  002650   加加食品  2024-04-29  ...  停牌一天     刊登重要公告     深交所主板  2024-04-30\n10  10  300013   新宁物流  2024-04-29  ...  停牌一天     刊登重要公告    深交所创业板  2024-04-30\n11  11  603388   元成股份  2024-04-29  ...  停牌一天     刊登重要公告     上交所主板  2024-04-30\n12  12  600070   ST富润  2024-04-29  ...  停牌一天     刊登重要公告  上交所风险警示板  2024-04-30\n13  13  600234   科新发展  2024-04-29  ...  停牌一天     刊登重要公告     上交所主板  2024-04-30\n14  14  002665   首航高科  2024-04-29  ...  停牌一天     刊登重要公告     深交所主板  2024-04-30\n15  15  300799  *ST左江  2024-04-29  ...  连续停牌     刊登重要公告  深交所风险警示板         NaT\n16  16  300108   ST吉药  2024-04-29  ...  停牌一天     刊登重要公告  深交所风险警示板  2024-04-30\n17  17  300209  ST有棵树  2024-04-26  ...  停牌一天     刊登重要公告  深交所风险警示板  2024-04-29\n18  18  600715   文投控股  2024-04-26  ...  停牌一天     刊登重要公告     上交所主板  2024-04-29\n19  19  603963   大理药业  2024-04-26  ...  停牌一天     刊登重要公告     上交所主板  2024-04-29\n20  20  300506    名家汇  2024-04-26  ...  停牌一天     刊登重要公告    深交所创业板  2024-04-29\n21  21  002699  *ST美盛  2024-04-26  ...  连续停牌     刊登重要公告  深交所风险警示板         NaT\n22  22  002263    大东南  2024-04-26  ...  连续停牌     刊登重要公告     深交所主板  2024-04-30\n23  23  000809   铁岭新城  2024-04-26  ...  停牌一天     刊登重要公告     深交所主板  2024-04-29\n24  24  000609   中迪投资  2024-04-26  ...  停牌一天     刊登重要公告     深交所主板  2024-04-29\n25  25  688085   三友医疗  2024-04-26  ...  连续停牌     刊登重要公告    上交所科创板  2024-05-08\n26  26  300117   嘉寓股份  2024-04-26  ...  停牌一天     刊登重要公告    深交所创业板  2024-04-29\n27  27  002141   贤丰控股  2024-04-26  ...  停牌一天     刊登重要公告     深交所主板  2024-04-29\n28  28  601456   国联证券  2024-04-26  ...  连续停牌  拟筹划重大资产重组     上交所主板  2024-05-15\n29  29  600898   ST美讯  2024-04-25  ...  停牌一天     刊登重要公告  上交所风险警示板  2024-04-26\n30  30  300965   恒宇信通  2024-04-25  ...  停牌一天     刊登重要公告  深交所风险警示板  2024-04-26\n31  31  000989    九芝堂  2024-04-25  ...  停牌一天     刊登重要公告  深交所风险警示板  2024-04-26\n32  32  000416  *ST民控  2024-04-25  ...  连续停牌     刊登重要公告  深交所风险警示板         NaT\n33  33  603088   宁波精达  2024-04-23  ...  连续停牌     刊登重要公告     上交所主板  2024-05-10\n34  34  000559   万向钱潮  2024-04-17  ...  连续停牌  拟筹划重大资产重组     深交所主板  2024-05-06\n35  35  002715   登云股份  2024-04-15  ...  连续停牌  拟筹划重大资产重组     深交所主板  2024-04-29\n36  36  000005   ST星源  2024-03-06  ...  连续停牌     刊登重要公告  深交所风险警示板  2024-04-26\n[37 rows x 9 columns]\n```\n\n### 停复牌\n\n接口: news_trade_notify_suspend_baidu\n\n目标地址: https://gushitong.baidu.com/calendar\n\n描述: 百度股市通-交易提醒-停复牌\n\n限量: 单次获取指定 date 的停复牌数据, 提供港股的停复牌数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date=\"20241107\" |\n\n输出参数\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 股票代码   | object |     |\n| 股票简称   | object |     |\n| 交易所    | object |     |\n| 停牌时间   | object |     |\n| 复牌时间   | object |     |\n| 停牌事项说明 | object |     |\n\n接口示例\n\n```python\nimport akshare as ak\n\nnews_trade_notify_suspend_baidu_df = ak.news_trade_notify_suspend_baidu(date=\"20241107\")\nprint(news_trade_notify_suspend_baidu_df)\n```\n\n数据示例\n\n```\n     股票代码   股票简称  ...  复牌时间                                  停牌事项说明\n0  002602   世纪华通  ...  2024-11-08                                实行其他风险警示\n1  300473   德尔股份  ...         NaT                                    重大事项\n2  833534   神玥软件  ...         NaT  全国股转公司认定的其他重大事项，具体内容为：公司股价出现较大波动，停牌核查。\n3  836226   卡友信息  ...         NaT                                做市商不足两家。\n4  870215  ST未来能  ...         NaT         主办券商单方解除持续督导且公司无其他主办券商承接持续督导工作。\n5  872577   浏经水务  ...         NaT                        向全国股转公司主动申请终止挂牌。\n6   02288   宏基资本  ...         NaT            将于今天（7/11/2024）上午九时正起短暂停止买卖。\n[7 rows x 6 columns]\n```\n\n### 分红派息\n\n接口: news_trade_notify_dividend_baidu\n\n目标地址: https://gushitong.baidu.com/calendar\n\n描述: 百度股市通-交易提醒-分红派息\n\n限量: 单次获取指定 date 的分红派息数据, 提供港股的分红派息数据\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| date   | str | date=\"20241107\" |\n| cookie | str | 可以指定 cookie     |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| 股票代码 | object |     |\n| 除权日  | object |     |\n| 分红   | object |     |\n| 送股   | object |     |\n| 转增   | object |     |\n| 实物   | object |     |\n| 交易所  | object |     |\n| 股票简称 | object |     |\n| 报告期  | object |     |\n\n接口示例\n\n```python\nimport akshare as ak\n\nnews_trade_notify_dividend_baidu_df = ak.news_trade_notify_dividend_baidu(date=\"20251126\")\nprint(news_trade_notify_dividend_baidu_df)\n```\n\n数据示例\n\n```\n      股票代码   除权日     分红 送股 转增 实物 交易所    股票简称 报告期\n0   601788  2025-11-26   1.10元  -  -  -  SH    光大证券  2025-11-26\n1   600482  2025-11-26   0.82元  -  -  -  SH    中国动力  2025-11-26\n2   603298  2025-11-26   2.00元  -  -  -  SH    杭叉集团  2025-11-26\n3   000088  2025-11-26   0.88元  -  -  -  SZ     盐田港  2025-11-26\n4    06808  2025-11-26  0.08港元  -  -  -  HK    高鑫零售  2025-11-26\n5   603040  2025-11-26   2.50元  -  -  -  SH     新坐标  2025-11-26\n6   603008  2025-11-26   2.80元  -  -  -  SH     喜临门  2025-11-26\n7   603676  2025-11-26   1.47元  -  -  -  SH     卫信康  2025-11-26\n8   920112  2025-11-26   5.00元  -  -  -  BJ     巴兰仕  2025-11-26\n9   301023  2025-11-26   4.00元  -  -  -  SZ    江南奕帆  2025-11-26\n10  001228  2025-11-26   3.00元  -  -  -  SZ     永泰运  2025-11-26\n11   00331  2025-11-26  0.18港元  -  -  -  HK  丰盛生活服务  2025-11-26\n12  300246  2025-11-26   0.50元  -  -  -  SZ     宝莱特  2025-11-26\n13  688193  2025-11-26   1.50元  -  -  -  SH    仁度生物  2025-11-26\n14   06668  2025-11-26  0.05港元  -  -  -  HK    星盛商业  2025-11-26\n```\n\n### 个股新闻\n\n接口: stock_news_em\n\n目标地址: https://so.eastmoney.com/news/s?keyword=603777\n\n描述: 东方财富指定个股的新闻资讯数据\n\n限量: 指定 symbol 当日最近 100 条新闻资讯数据\n\n输入参数\n\n| 名称     | 类型  | 描述                          |\n|--------|-----|-----------------------------|\n| symbol | str | symbol=\"603777\"; 股票代码或其他关键词 |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| 关键词  | object | -   |\n| 新闻标题 | object | -   |\n| 新闻内容 | object | -   |\n| 发布时间 | object | -   |\n| 文章来源 | object | -   |\n| 新闻链接 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_news_em_df = ak.stock_news_em(symbol=\"603777\")\nprint(stock_news_em_df)\n```\n\n数据示例\n\n```\n       关键词  ...                                               新闻链接\n0   603777  ...  http://finance.eastmoney.com/a/202506163431529...\n1   603777  ...  http://finance.eastmoney.com/a/202506113427724...\n2   603777  ...  http://finance.eastmoney.com/a/202506093425572...\n3   603777  ...  http://finance.eastmoney.com/a/202506093425584...\n4   603777  ...  http://finance.eastmoney.com/a/202506123429086...\n..     ...  ...                                                ...\n95  603777  ...  http://finance.eastmoney.com/a/202505123401879...\n96  603777  ...  http://finance.eastmoney.com/a/202503203351336...\n97  603777  ...  http://finance.eastmoney.com/a/202505133403529...\n98  603777  ...  http://finance.eastmoney.com/a/202504293392475...\n99  603777  ...  http://finance.eastmoney.com/a/202505123402073...\n[100 rows x 6 columns]\n```\n\n### 财经内容精选\n\n接口: stock_news_main_cx\n\n目标地址: https://cxdata.caixin.com/pc/\n\n描述: 财新网-财新数据通-最新\n\n限量: 返回最新 100 条新闻数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称            | 类型     | 描述 |\n|---------------|--------|----|\n| tag           | object | -  |\n| summary       | object | -  |\n| url           | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_news_main_cx_df = ak.stock_news_main_cx()\nprint(stock_news_main_cx_df)\n```\n\n数据示例\n\n```\n      tag  ...                                                url\n0    今日热点  ...  https://database.caixin.com/2025-12-25/1023970...\n5    市场动态  ...  https://database.caixin.com/2025-12-25/1023969...\n6    市场动态  ...  https://database.caixin.com/2025-12-25/1023969...\n9    市场动态  ...  https://database.caixin.com/2025-12-25/1023969...\n10   市场动态  ...  https://database.caixin.com/2025-12-25/1023969...\n..    ...  ...                                                ...\n105  市场动态  ...  https://database.caixin.com/2025-12-15/1023934...\n106  市场动态  ...  https://database.caixin.com/2025-12-15/1023934...\n107  市场动态  ...  https://database.caixin.com/2025-12-15/1023934...\n108  市场洞察  ...  https://database.caixin.com/2025-12-15/1023933...\n109  市场洞察  ...  https://database.caixin.com/2025-12-15/1023933...\n[100 rows x 3 columns]\n```\n\n### 财报发行\n\n接口: news_report_time_baidu\n\n目标地址: https://gushitong.baidu.com/calendar\n\n描述: 百度股市通-财报发行\n\n限量: 单次获取指定 date 的财报发行, 提供港股的财报发行数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date=\"20241107\" |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| 股票代码 | object |     |\n| 交易所  | object |     |\n| 股票简称 | object |     |\n| 财报期  | object |     |\n\n接口示例\n\n```python\nimport akshare as ak\n\nnews_report_time_baidu_df = ak.news_report_time_baidu(date=\"20241107\")\nprint(news_report_time_baidu_df)\n```\n\n数据示例\n\n```\n     股票代码 交易所                       股票简称               财报期\n0   00945  HK                         宏利金融-S          2024年三季报\n1   00981  HK                           中芯国际          2024年三季报\n2   01347  HK                          华虹半导体          2024年三季报\n3   01665  HK                           槟杰科达          2024年三季报\n4   08476  HK                         大洋环球控股           2024年中报\n..    ...  ..                            ...               ...\n95   XRAY  US                         登士柏西诺德    美东时间发布2024年三季报\n96   UPST  US         Upstart Holdings, Inc.  美东时间盘后发布2024年三季报\n97    MUR  US                           墨菲石油    美东时间发布2024年三季报\n98     SG  US       Sweetgreen, Inc. Class A    美东时间发布2024年三季报\n99   STEP  US  StepStone Group, Inc. Class A   美东时间发布24/25年二季报\n[100 rows x 4 columns]\n```\n\n### 新股数据\n\n#### 打新收益率\n\n接口: stock_dxsyl_em\n\n目标地址: https://data.eastmoney.com/xg/xg/dxsyl.html\n\n描述: 东方财富网-数据中心-新股申购-打新收益率\n\n限量: 单次获取所有打新收益率数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 股票代码     | object  | -       |\n| 股票简称     | object  | -       |\n| 发行价      | float64 | -       |\n| 最新价      | float64 | -       |\n| 网上发行中签率  | float64 | 注意单位: % |\n| 网上有效申购股数 | int64   | -       |\n| 网上有效申购户数 | int64   | 注意单位: 户 |\n| 网上超额认购倍数 | float64 | -       |\n| 网下配售中签率  | float64 | 注意单位: % |\n| 网下有效申购股数 | int64   | -       |\n| 网下有效申购户数 | int64   | 注意单位: 户 |\n| 网下配售认购倍数 | float64 | -       |\n| 总发行数量    | int64   | -       |\n| 开盘溢价     | float64 | -       |\n| 首日涨幅     | float64 | -       |\n| 上市日期     | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_dxsyl_em_df = ak.stock_dxsyl_em()\nprint(stock_dxsyl_em_df)\n```\n\n数据示例\n\n```\n      序号   股票代码  股票简称  发行价  ...   总发行数量    开盘溢价  首日涨幅    上市日期\n0        1  301502  N华阳智   28.01  ...  1427.1000  114.209211  114.1021  2024-02-02\n1        2  603082   C北自   21.28  ...  4055.6900  116.165414  118.0451  2024-01-30\n2        3  603375   盛景微   38.18  ...  2516.6667   70.246202   54.4002  2024-01-24\n3        4  301577  美信科技   36.51  ...  1109.5149  119.118050   88.7976  2024-01-24\n4        5  001379  腾达科技   16.98  ...  5000.0000   64.899882   42.6973  2024-01-19\n    ...     ...   ...     ...  ...        ...         ...       ...         ...\n3494  3495  688709  成都华微   15.69  ...  9560.0000         NaN       NaN         NaT\n3495  3496  688584  上海合晶   22.66  ...  6620.6036         NaN       NaN         NaT\n3496  3497  603341  龙旗科技     NaN  ...  6000.0000         NaN       NaN         NaT\n3497  3498  301591  肯特股份     NaN  ...  2103.0000         NaN       NaN         NaT\n3498  3499  301589  诺瓦星云  126.89  ...  1284.0000         NaN       NaN         NaT\n[3499 rows x 17 columns]\n```\n\n#### 新股申购与中签\n\n接口: stock_xgsglb_em\n\n目标地址: https://data.eastmoney.com/xg/xg/default_2.html\n\n描述: 东方财富网-数据中心-新股数据-新股申购-新股申购与中签查询\n\n限量: 单次获取指定 market 的新股申购与中签查询数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                     |\n|--------|-----|------------------------------------------------------------------------|\n| symbol | str | symbol=\"全部股票\"; choice of {\"全部股票\", \"沪市主板\", \"科创板\", \"深市主板\", \"创业板\", \"北交所\"} |\n\n输出参数-其他（除北交所外）\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 股票代码     | object  | -       |\n| 股票简称     | object  | -       |\n| 交易所      | object  | -       |\n| 板块       | object  | -       |\n| 申购代码     | object  | -       |\n| 发行总数     | float64 | 注意单位: 股 |\n| 网上发行     | int64   | 注意单位: 股 |\n| 顶格申购需配市值 | float64 | 注意单位: 股 |\n| 申购上限     | int64   | -       |\n| 发行价格     | float64 | -       |\n| 最新价      | float64 | -       |\n| 首日收盘价    | float64 | -       |\n| 申购日期     | object  | -       |\n| 中签号公布日   | object  | -       |\n| 中签缴款日期   | object  | -       |\n| 上市日期     | object  | -       |\n| 发行市盈率    | float64 | -       |\n| 行业市盈率    | float64 | -       |\n| 中签率      | float64 | 注意单位: % |\n| 询价累计报价倍数 | float64 | -       |\n| 配售对象报价家数 | float64 | -       |\n| 连续一字板数量  | object  | -       |\n| 涨幅       | float64 | 注意单位: % |\n| 每中一签获利   | float64 | 注意单位: 元 |\n\n接口示例-其他（除北交所外）\n\n```python\nimport akshare as ak\n\nstock_xgsglb_em_df = ak.stock_xgsglb_em(symbol=\"全部股票\")\nprint(stock_xgsglb_em_df)\n```\n\n数据示例-其他（除北交所外）\n\n```\n     股票代码  股票简称    申购代码    交易所  ...  配售对象报价家数  连续一字板数量        涨幅   每中一签获利\n0     301575   艾芬达  301575  深圳证券交易所  ...       NaN      待上市       NaN      NaN\n1     920100  三协电机  920100  北京证券交易所  ...       NaN     None       NaN      NaN\n2     603370  华新精科  732370  上海证券交易所  ...    9264.0      待上市       NaN      NaN\n3     920112   巴兰仕  920112  北京证券交易所  ...       NaN     None       NaN      NaN\n4     920056   能之光  920056  北京证券交易所  ...       NaN     None  369.4868  13320.0\n...      ...   ...     ...      ...  ...       ...      ...       ...      ...\n3861  601801  皖新传媒  780801  上海证券交易所  ...       0.0        1   55.4700   6550.0\n3862  002338  奥普光电  002338  深圳证券交易所  ...     285.0        1  136.0400  14965.0\n3863  002337  赛象科技  002337  深圳证券交易所  ...     181.0        1   40.6300   6295.0\n3864  002335  科华数据  002335  深圳证券交易所  ...     188.0        1   56.7200   7755.0\n3865  002334   英威腾  002334  深圳证券交易所  ...     190.0        1   37.7000   9050.0\n[3866 rows x 23 columns]\n```\n\n输出参数-北交所\n\n| 名称          | 类型      | 描述      |\n|-------------|---------|---------|\n| 代码          | object  | -       |\n| 简称          | object  | -       |\n| 申购代码        | object  | -       |\n| 发行总数        | int64   | 注意单位: 股 |\n| 网上-发行数量     | int64   | 注意单位: 股 |\n| 网上-申购上限     | int64   | 注意单位: 股 |\n| 网上-顶格所需资金   | int64   | 注意单位: 元 |\n| 发行价格        | float64 | -       |\n| 申购日         | object  | -       |\n| 中签率         | float64 | -       |\n| 稳获百股需配资金    | float64 | -       |\n| 最新价格-价格     | float64 | -       |\n| 最新价格-累计涨幅   | float64 | -       |\n| 上市首日-上市日    | object  | -       |\n| 上市首日-均价     | float64 | -       |\n| 上市首日-涨幅     | float64 | -       |\n| 上市首日-每百股获利  | float64 | -       |\n| 上市首日-约合年化收益 | float64 | -       |\n| 发行市盈率       | float64 | -       |\n| 行业市盈率       | float64 | -       |\n| 参与申购资金      | float64 | -       |\n| 参与申购人数      | float64 | -       |\n\n接口示例-北交所\n\n```python\nimport akshare as ak\n\nstock_xgsglb_em_df = ak.stock_xgsglb_em(symbol=\"北交所\")\nprint(stock_xgsglb_em_df)\n```\n\n数据示例-北交所\n\n```\n     代码    简称    申购代码       发行总数  ...  发行市盈率  行业市盈率        参与申购资金    参与申购人数\n0    836547  无锡晶海  889028   15600000  ...  15.31  23.83           NaN       NaN\n1    873703  广厦环能  889788   15000000  ...  14.00  27.40  1.348229e+11  189150.0\n2    835579  机科股份  889579   31200000  ...  19.54  30.00  1.180983e+11  210819.0\n3    873570  坤博精工  889669    7850000  ...  18.51  29.91  8.476524e+10  129579.0\n4    873132  泰鹏智能  889878   12000000  ...  11.41  19.66  7.025810e+10  132026.0\n..      ...   ...     ...        ...  ...    ...    ...           ...       ...\n233  839167  同享科技  889007   12000000  ...  19.82    NaN  4.660134e+10  434040.0\n234  430489  佳先股份  889998   21321800  ...  25.00    NaN  3.085403e+10  381892.0\n235  834682  球冠电缆  889888   40000000  ...  19.73    NaN  3.238970e+10  381155.0\n236  833819  颖泰生物  889001  100000000  ...  24.77    NaN  1.012017e+11  542873.0\n237  830799  艾融软件  889999    8800000  ...  49.31    NaN  1.243882e+11  519980.0\n[238 rows x 22 columns]\n```\n\n#### 新股申购与中签-同花顺\n\n接口: stock_ipo_ths\n\n目标地址: https://data.10jqka.com.cn/ipo/xgsgyzq/\n\n描述: 同花顺-数据中心-新股申购与中签\n\n限量: 单次返回指定 symbol 的历史新股申购与中签数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                      |\n|--------|-----|-------------------------------------------------------------------------|\n| symbol | str | symbol=\"全部A股\"; choice of {\"全部A股\", \"沪市主板\", \"深市主板\", \"创业板\", \"科创板\", \"京市主板\"} |\n\n输出参数\n\n| 名称           | 类型     | 描述 |\n|--------------|--------|----|\n| 股票代码         | object | -  |\n| 股票简称         | object | -  |\n| 申购代码         | object | -  |\n| 发行总数（万股）     | object | -  |\n| 网上发行（万股）     | object | -  |\n| 申购上限（万股）     | object | -  |\n| 顶格申购需配市值（万元） | object | -  |\n| 发行价格         | object | -  |\n| 发行市盈率        | object | -  |\n| 行业市盈率        | object | -  |\n| 申购日期         | object | -  |\n| 中签率（%）       | object | -  |\n| 中签号          | object | -  |\n| 中签缴款日期       | object | -  |\n| 上市日期         | object | -  |\n| 打新收益（元）      | object | -  |\n| 首日最高涨幅       | object | -  |\n| 连板天数         | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_ipo_ths_df = ak.stock_ipo_ths(symbol=\"全部A股\")\nprint(stock_ipo_ths_df)\n```\n\n数据示例\n\n```\n    股票代码  股票简称    申购代码    发行总数（万股）  ...   上市日期     打新收益（元）     首日最高涨幅 连板天数\n0   301682  宏明电子  301682    3038.734  ...      -           -          -    -\n1   920036  觅睿科技  920036     1360.55  ...      -           -          -    -\n2   301680  固德电材  301680        2070  ...  03-06           -          -    -\n3   920183   海菲曼  920183    1052.702  ...  03-04    4,479.00    227.25%    -\n4   920187  通领科技  920187        1560  ...  03-05           -          -    -\n5   920168  通宝光电  920168     1879.34  ...  02-26    1,543.00     95.42%    -\n6   920166  海圣医疗  920166   1129.4118  ...  02-12    3,096.00    244.94%    -\n7   688816   易思维  787816        2500  ...  02-11   26,015.00     92.99%    -\n8   920180  爱得科技  920180   2953.0762  ...  02-10    1,833.00    238.98%    -\n9   920180  爱得科技  920180   2953.0762  ...  02-10    1,833.00    238.98%    -\n10  603284  林平发展  732284     1885.37  ...  02-10   18,625.00     98.34%    -\n11  688818  电科蓝天  787818       17370  ...  02-10   35,705.00    754.07%    -\n12  688712  北芯生命  787712        5700  ...  02-05   19,140.00    218.49%    -\n13  001220  世盟股份  001220     2307.25  ...  02-03   21,000.00    150.00%    -\n14  920119   美德乐  920119        1600  ...  01-30   10,077.00    240.62%    -\n15  601112  振石股份  780112     26105.5  ...  01-29    9,910.00    177.28%    -\n16  920159  农大科技  920159        1600  ...  01-28    4,018.00    160.72%    -\n17  688785   恒运昌  787785   1693.0559  ...  01-28  148,910.00    323.09%    -\n18  920076  国亮新材  920076   1804.4853  ...  01-22    2,358.00    219.15%    -\n19  920050   爱舍伦  920050   1691.9834  ...  01-21    3,902.00    244.18%    -\n20  920050   爱舍伦  920050   1691.9834  ...  01-21    3,902.00    244.18%    -\n21  603352  至信股份  732352   5666.6667  ...  01-15   29,060.00    265.63%    -\n22  920086  科马材料  920086        2092  ...  01-16    6,827.00    585.51%    -\n23  920045   蘅东光  920045        1025  ...  12-31   35,641.00  1,128.24%    -\n24  301687   新广益  301687      3671.6  ...  12-31   36,975.00    337.21%    -\n25  603402  陕西旅游  732402   1933.3334  ...  01-06   35,780.00     88.96%    -\n26  688809  强一股份  787809   3238.9882  ...  12-30   95,865.00    225.33%    -\n27  001369  双欣材料  001369       28700  ...  12-30    9,075.00    264.96%    -\n28  001396  誉帆科技  001396        2673  ...  12-30   21,105.00    189.37%    -\n29  920121  江天科技  920121   1321.3637  ...  12-25    5,167.00    243.61%    -\n30  688805  健信超导  787805        4192  ...  12-24   27,005.00    290.69%    -\n31  688805  健信超导  787805        4192  ...  12-24   27,005.00    290.69%    -\n32  603248  锡华科技  732248       10000  ...  12-23   17,950.00    355.45%    -\n33  301449  天溯计量  301449   1630.4348  ...  12-23   57,095.00    310.30%    -\n34  001325  元创股份  001325        1960  ...  12-18   27,125.00    219.19%    -\n35  301667   纳百川  301667     2791.74  ...  12-23   78,685.00    695.40%    -\n36  688807  优迅股份  787807        2000  ...  12-19  118,670.00    459.43%    -\n37  688790   昂瑞微  787790   2488.2922  ...  12-16   80,470.00    193.76%    -\n38  688802  沐曦股份  787802        4010  ...  12-17  395,170.00    755.15%    -\n39  688796  百奥赛图  787796        4750  ...  12-10   21,560.00    161.62%    -\n40  688795  摩尔线程  787795        7000  ...  12-05  286,860.00    502.03%    -\n41  001280  中国铀业  001280  24818.1818  ...  12-03   31,055.00    347.18%    -\n42  920035  精创电气  920035        1446  ...  12-02    5,413.00    447.36%    -\n43  001233  海安集团  001233   4649.3334  ...  11-25   26,000.00    108.33%    -\n44  920124  南特科技  920124   3718.3329  ...  11-27    2,132.00    246.19%    -\n45  688727  恒坤新材  787727    6739.794  ...  11-18   25,005.00    333.62%    -\n46  301638  南网数字  301638  47694.7534  ...  11-18    7,805.00    274.34%    -\n47  920091  大鹏工业  920091        1500  ...  11-21   15,000.00  1,666.67%    -\n48  920160  北矿检测  920160        2832  ...  11-18    2,510.00    374.63%    -\n49  603092   德力佳  732092     4000.01  ...  11-07   25,130.00    107.67%    -\n[50 rows x 18 columns]\n```\n\n#### 新股申购与中签-港股-同花顺\n\n接口: stock_ipo_hk_ths\n\n目标地址: https://data.10jqka.com.cn/ipo/xgsgyzq/\n\n描述: 同花顺-数据中心-新股申购与中签-港股\n\n限量: 单次返回所有港股新股申购与中签数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称           | 类型     | 描述 |\n|--------------|--------|----|\n| 股票代码         | object | -  |\n| 股票简称         | object | -  |\n| 申购代码         | object | -  |\n| 发行总数（万股）     | object | -  |\n| 网上发行（万股）     | object | -  |\n| 申购上限（万股）     | object | -  |\n| 顶格申购需配市值（万元） | object | -  |\n| 发行价格         | object | -  |\n| 发行市盈率        | object | -  |\n| 行业市盈率        | object | -  |\n| 申购日期         | object | -  |\n| 中签率（%）       | object | -  |\n| 中签号          | object | -  |\n| 中签缴款日期       | object | -  |\n| 上市日期         | object | -  |\n| 打新收益（元）      | object | -  |\n| 首日最高涨幅       | object | -  |\n| 连板天数         | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_ipo_hk_ths_df = ak.stock_ipo_hk_ths()\nprint(stock_ipo_hk_ths_df)\n```\n\n数据示例\n\n```\n     股票代码  股票简称    申购代码 发行总数（万股） 网上发行（万股） 申购上限（万股） 顶格申购需配市值（万元）   发行价格  发行市盈率  行业市盈率        申购日期 中签率（%）                                                                                                                                                                                                                                                 中签号 中签缴款日期 上市日期 打新收益（元） 首日最高涨幅 连板天数\n0  920036  觅睿科技  920036  1360.55  1224.49    61.22       612.20  21.52  14.99  65.22  2026-02-26   0.03                                                                                                                                                                  -觅睿科技 网上定价发行摇号中签结果输入起始配号+查询恭喜! 您的配号中了中签结果以券商交易系统为准，仅供参考合计股，申购价缴款合计万元很遗憾，您的配号本次未中签！      -    -       -      -    -\n```\n\n### 年报季报\n\n#### 业绩报表\n\n接口: stock_yjbb_em\n\n目标地址: http://data.eastmoney.com/bbsj/202003/yjbb.html\n\n描述: 东方财富-数据中心-年报季报-业绩报表\n\n限量: 单次获取指定 date 的业绩报告数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                                         |\n|------|-----|--------------------------------------------------------------------------------------------|\n| date | str | date=\"20200331\"; choice of {\"XXXX0331\", \"XXXX0630\", \"XXXX0930\", \"XXXX1231\"}; 从 20100331 开始 |\n\n输出参数\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 序号           | int64   | -       |\n| 股票代码         | object  | -       |\n| 股票简称         | object  | -       |\n| 每股收益         | float64 | 注意单位: 元 |\n| 营业总收入-营业总收入  | float64 | 注意单位: 元 |\n| 营业总收入-同比增长   | float64 | 注意单位: % |\n| 营业总收入-季度环比增长 | float64 | 注意单位: % |\n| 净利润-净利润      | float64 | 注意单位: 元 |\n| 净利润-同比增长     | float64 | 注意单位: % |\n| 净利润-季度环比增长   | float64 | 注意单位: % |\n| 每股净资产        | float64 | 注意单位: 元 |\n| 净资产收益率       | float64 | 注意单位: % |\n| 每股经营现金流量     | float64 | 注意单位: 元 |\n| 销售毛利率        | float64 | 注意单位: % |\n| 所处行业         | object  | -       |\n| 最新公告日期       | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_yjbb_em_df = ak.stock_yjbb_em(date=\"20220331\")\nprint(stock_yjbb_em_df)\n```\n\n数据示例\n\n```\n    序号   股票代码  股票简称  每股收益  ... 每股经营现金流量 销售毛利率 所处行业   最新公告日期\n0        1  002512  达华智能 -0.0349  ... -0.028029  10.287193  计算机设备  2025-01-27\n1        2  000833  粤桂股份  0.0533  ... -0.027977  22.838955   综合行业  2025-01-25\n2        3  600576  祥源文旅 -0.0050  ... -0.075190  22.145564   旅游酒店  2025-01-03\n3        4  688687  凯因科技  0.1500  ...  0.328110  84.879441   生物制品  2024-12-20\n4        5  873989  中达新材  0.0700  ... -0.019306  12.369830   None  2024-12-11\n...    ...     ...   ...     ...  ...       ...        ...    ...         ...\n5850  5851  400055   国瓷5 -0.0080  ... -0.020637  -5.145723   None  2022-04-25\n5851  5852  873599  振通检测  0.0700  ... -0.203169  34.648249   None  2022-04-22\n5852  5853  420063  武锅B3 -0.1100  ... -0.068036  -0.167132   None  2022-04-22\n5853  5854  430717  源通机械  0.0300  ...  0.152183  25.958049   None  2022-04-15\n5854  5855  870529  东铭新材  0.0200  ... -0.003474  29.472422   None  2022-04-11\n[5855 rows x 16 columns]\n```\n\n#### 业绩快报\n\n接口: stock_yjkb_em\n\n目标地址: https://data.eastmoney.com/bbsj/202003/yjkb.html\n\n描述: 东方财富-数据中心-年报季报-业绩快报\n\n限量: 单次获取指定 date 的业绩快报数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                                         |\n|------|-----|--------------------------------------------------------------------------------------------|\n| date | str | date=\"20200331\"; choice of {\"XXXX0331\", \"XXXX0630\", \"XXXX0930\", \"XXXX1231\"}; 从 20100331 开始 |\n\n输出参数\n\n| 名称          | 类型     | 描述  |\n|-------------|--------|-----|\n| 序号          | object | -   |\n| 股票代码        | object | -   |\n| 股票简称        | object | -   |\n| 每股收益        | object | -   |\n| 营业收入-营业收入   | object | -   |\n| 营业收入-去年同期   | object | -   |\n| 营业收入-同比增长   | str    | -   |\n| 营业收入-季度环比增长 | object | -   |\n| 净利润-净利润     | object | -   |\n| 净利润-去年同期    | object | -   |\n| 净利润-同比增长    | str    | -   |\n| 净利润-季度环比增长  | object | -   |\n| 每股净资产       | object | -   |\n| 净资产收益率      | object | -   |\n| 所处行业        | object | -   |\n| 公告日期        | object | -   |\n| 市场板块        | object | -   |\n| 证券类型        | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_yjkb_em_df = ak.stock_yjkb_em(date=\"20200331\")\nprint(stock_yjkb_em_df)\n```\n\n数据示例\n\n```\n    序号  股票代码  股票简称   每股收益  ... 每股净资产 净资产收益率 所处行业  公告日期\n0      1  301386  未来电器     NaN  ...    NaN     NaN    电源设备  2022-05-31\n1      2  301296   新巨丰     NaN  ...    NaN     NaN    包装材料  2021-10-22\n2      3  301302  华如科技     NaN  ...    NaN     NaN    软件开发  2021-09-30\n3      4  301167  建研设计     NaN  ...    NaN     NaN  工程咨询服务  2021-09-29\n4      5  301169  零点有数     NaN  ...    NaN     NaN    专业服务  2021-09-28\n..   ...     ...   ...     ...  ...    ...     ...     ...         ...\n410  411  000591   太阳能  0.0514  ...   4.49    1.15    电力行业  2020-04-18\n411  412  600161  天坛生物  0.1300  ...   3.89    3.29    生物制品  2020-04-14\n412  413  300831  派瑞股份     NaN  ...    NaN     NaN     半导体  2020-04-14\n413  414  601231  环旭电子     NaN  ...    NaN     NaN    消费电子  2020-04-11\n414  415  688528  秦川物联     NaN  ...    NaN     NaN    仪器仪表  2020-04-09\n[415 rows x 16 columns]\n```\n\n#### 业绩预告\n\n接口: stock_yjyg_em\n\n目标地址: https://data.eastmoney.com/bbsj/202003/yjyg.html\n\n描述: 东方财富-数据中心-年报季报-业绩预告\n\n限量: 单次获取指定 date 的业绩预告数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                                         |\n|------|-----|--------------------------------------------------------------------------------------------|\n| date | str | date=\"20200331\"; choice of {\"XXXX0331\", \"XXXX0630\", \"XXXX0930\", \"XXXX1231\"}; 从 20081231 开始 |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | object  | -       |\n| 股票代码   | object  | -       |\n| 股票简称   | object  | -       |\n| 预测指标   | float64 | -       |\n| 业绩变动   | float64 | -       |\n| 预测数值   | float64 | 注意单位: 元 |\n| 业绩变动幅度 | float64 | 注意单位: % |\n| 业绩变动原因 | float64 | -       |\n| 预告类型   | float64 | -       |\n| 上年同期值  | float64 | 注意单位: 元 |\n| 公告日期   | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_yjyg_em_df = ak.stock_yjyg_em(date=\"20190331\")\nprint(stock_yjyg_em_df)\n```\n\n数据示例\n\n```\n     序号   股票代码  股票简称  ... 预告类型    上年同期值     公告日期\n0        1  300886  华业香料  ...   略减  2.580923e+08  2020-07-22\n1        2  300886  华业香料  ...   略减  5.621616e+07  2020-07-22\n2        3  600189   泉阳泉  ...   首亏  4.197830e+07  2020-06-24\n3        4  600189   泉阳泉  ...   增亏 -8.628030e+07  2020-06-24\n4        5  000980  众泰汽车  ...   首亏  7.998868e+08  2020-06-19\n    ...     ...   ...  ...  ...           ...         ...\n3806  3807  603687   大胜达  ...   略增  1.413420e+08  2019-06-17\n3807  3808  603687   大胜达  ...   略增  1.334714e+08  2019-06-17\n3808  3809  603687   大胜达  ...   略增  1.285381e+09  2019-06-17\n3809  3810  601975  招商南油  ...   略减  3.642135e+08  2018-12-28\n3810  3811  601975  招商南油  ...   略增  3.378241e+09  2018-12-28\n[3811 rows x 11 columns]\n```\n\n#### 预约披露时间-东方财富\n\n接口: stock_yysj_em\n\n目标地址: https://data.eastmoney.com/bbsj/202003/yysj.html\n\n描述: 东方财富-数据中心-年报季报-预约披露时间\n\n限量: 单次获取指定 symbol 和 date 的预约披露时间数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                         |\n|--------|-----|--------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"沪深A股\"; choice of {'沪深A股', '沪市A股', '科创板', '深市A股', '创业板', '京市A股', 'ST板'}             |\n| date   | str | date=\"20200331\"; choice of {\"XXXX0331\", \"XXXX0630\", \"XXXX0930\", \"XXXX1231\"}; 从 20081231 开始 |\n\n输出参数\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 序号     | int64  | -   |\n| 股票代码   | object | -   |\n| 股票简称   | object | -   |\n| 首次预约时间 | object | -   |\n| 一次变更日期 | object | -   |\n| 二次变更日期 | object | -   |\n| 三次变更日期 | object | -   |\n| 实际披露时间 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_yysj_em_df = ak.stock_yysj_em(symbol=\"沪深A股\", date=\"20211231\")\nprint(stock_yysj_em_df)\n```\n\n数据示例\n\n```\n     序号    股票代码  股票简称  首次预约时间  一次变更日期 二次变更日期 三次变更日期  实际披露时间\n0        1  000509  华塑控股  2022-01-18         NaT         NaT    NaT  2022-01-18\n1        2  002107  沃华医药  2022-01-21         NaT         NaT    NaT  2022-01-21\n2        3  600272  开开实业  2022-01-28         NaT         NaT    NaT  2022-01-28\n3        4  600599  ST熊猫  2022-01-28  2022-03-01  2022-04-23    NaT  2022-04-23\n4        5  002984   森麒麟  2022-02-15         NaT         NaT    NaT  2022-02-15\n    ...     ...   ...         ...         ...         ...    ...         ...\n4578  4579  688597  煜邦电力  2022-04-30  2022-04-27         NaT    NaT  2022-04-27\n4579  4580  688613  奥精医疗  2022-04-30  2022-04-28         NaT    NaT  2022-04-28\n4580  4581  688701  卓锦股份  2022-04-30  2022-04-16  2022-04-29    NaT  2022-04-29\n4581  4582  688711  宏微科技  2022-04-30         NaT         NaT    NaT  2022-04-30\n4582  4583  688728   格科微  2022-04-30  2022-04-14  2022-04-28    NaT  2022-04-28\n[4583 rows x 8 columns]\n```\n\n#### 预约披露时间-巨潮资讯\n\n接口: stock_report_disclosure\n\n目标地址: http://www.cninfo.com.cn/new/commonUrl?url=data/yypl\n\n描述: 巨潮资讯-数据-预约披露的数据\n\n限量: 单次获取指定 market 和 period 的预约披露数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                   |\n|--------|-----|--------------------------------------------------------------------------------------|\n| market | str | market=\"沪深京\"; choice of {\"沪深京\", \"深市\", \"深主板\", \"创业板\", \"沪市\", \"沪主板\", \"科创板\", \"北交所\"}       |\n| period | str | period=\"2021年报\"; 近四期的财务报告; e.g., choice of {\"2021一季\", \"2021半年报\", \"2021三季\", \"2021年报\"} |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| 股票代码 | object | -   |\n| 股票简称 | object | -   |\n| 首次预约 | object | -   |\n| 初次变更 | object | -   |\n| 二次变更 | object | -   |\n| 三次变更 | object | -   |\n| 实际披露 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_report_disclosure_df = ak.stock_report_disclosure(market=\"沪深京\", period=\"2022年报\")\nprint(stock_report_disclosure_df)\n```\n\n数据示例\n\n```\n      股票代码   股票简称  首次预约        初次变更 二次变更 三次变更 实际披露\n0     000001   平安银行  2023-03-09         NaT  NaN  NaN  2023-03-09\n1     000002  万  科Ａ  2023-03-31         NaT  NaN  NaN  2023-03-31\n2     000004   国华网安  2023-04-21  2023-04-29  NaN  NaN  2023-04-29\n3     000005   ST星源  2023-04-29         NaT  NaN  NaN  2023-04-29\n4     000006   深振业Ａ  2023-04-28         NaT  NaN  NaN  2023-04-28\n      ...    ...         ...         ...  ...  ...         ...\n5102  873223   荣亿精密  2023-04-26         NaT  NaN  NaN  2023-04-26\n5103  873305   九菱科技  2023-04-26         NaT  NaN  NaN  2023-04-26\n5104  873339   恒太照明  2023-04-25  2023-04-12  NaN  NaN  2023-04-12\n5105  873527    夜光明  2023-04-17         NaT  NaN  NaN  2023-04-17\n5106  873593   鼎智科技  2023-04-25  2023-03-17  NaN  NaN         NaT\n[5107 rows x 7 columns]\n```\n\n#### 信息披露公告-巨潮资讯\n\n接口: stock_zh_a_disclosure_report_cninfo\n\n目标地址: http://www.cninfo.com.cn/new/commonUrl/pageOfSearch?url=disclosure/list/search\n\n描述: 巨潮资讯-首页-公告查询-信息披露公告-沪深京\n\n限量: 单次获取指定 symbol 的信息披露公告数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                                                                                                                                                                         |\n|------------|-----|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| symbol     | str | symbol=\"000001\"; 股票代码                                                                                                                                                                                                      |\n| market     | str | market=\"沪深京\"; choice of {\"沪深京\", \"港股\", \"三板\", \"基金\", \"债券\", \"监管\", \"预披露\"}                                                                                                                                                       |\n| keyword    | str | keyword=\"\"; 关键词                                                                                                                                                                                                            |\n| category   | str | category=\"\"; choice of {'年报', '半年报', '一季报', '三季报', '业绩预告', '权益分派', '董事会', '监事会', '股东大会', '日常经营', '公司治理', '中介报告', '首发', '增发', '股权激励', '配股', '解禁', '公司债', '可转债', '其他融资', '股权变动', '补充更正', '澄清致歉', '风险提示', '特别处理和退市', '退市整理期'} |\n| start_date | str | start_date=\"20230618\"                                                                                                                                                                                                      |\n| end_date   | str | end_date=\"20231219\"                                                                                                                                                                                                        |\n\n输出参数\n\n| 名称   | 类型     | 描述 |\n|------|--------|----|\n| 代码   | object | -  |\n| 简称   | object | -  |\n| 公告标题 | object | -  |\n| 公告时间 | object | -  |\n| 公告链接 | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_a_disclosure_report_cninfo_df = ak.stock_zh_a_disclosure_report_cninfo(symbol=\"000001\", market=\"沪深京\", category=\"公司治理\", start_date=\"20230619\", end_date=\"20231220\")\nprint(stock_zh_a_disclosure_report_cninfo_df)\n```\n\n数据示例\n\n```\n   代码    简称  ...        公告时间                               公告链接\n0  000001  平安银行  ...  2023-12-09  http://www.cninfo.com.cn/new/disclosure/detail...\n1  000001  平安银行  ...  2023-11-21  http://www.cninfo.com.cn/new/disclosure/detail...\n2  000001  平安银行  ...  2023-10-25  http://www.cninfo.com.cn/new/disclosure/detail...\n3  000001  平安银行  ...  2023-08-24  http://www.cninfo.com.cn/new/disclosure/detail...\n4  000001  平安银行  ...  2023-07-29  http://www.cninfo.com.cn/new/disclosure/detail...\n5  000001  平安银行  ...  2023-07-25  http://www.cninfo.com.cn/new/disclosure/detail...\n[6 rows x 5 columns]\n```\n\n#### 信息披露调研-巨潮资讯\n\n接口: stock_zh_a_disclosure_relation_cninfo\n\n目标地址: http://www.cninfo.com.cn/new/commonUrl/pageOfSearch?url=disclosure/list/search\n\n描述: 巨潮资讯-首页-公告查询-信息披露调研-沪深京\n\n限量: 单次获取指定 symbol 的信息披露调研数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                   |\n|------------|-----|----------------------------------------------------------------------|\n| symbol     | str | symbol=\"000001\"; 股票代码                                                |\n| market     | str | market=\"沪深京\"; choice of {\"沪深京\", \"港股\", \"三板\", \"基金\", \"债券\", \"监管\", \"预披露\"} |\n| start_date | str | start_date=\"20230618\"                                                |\n| end_date   | str | end_date=\"20231219\"                                                  |\n\n输出参数\n\n| 名称   | 类型     | 描述 |\n|------|--------|----|\n| 代码   | object | -  |\n| 简称   | object | -  |\n| 公告标题 | object | -  |\n| 公告时间 | object | -  |\n| 公告链接 | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_a_disclosure_relation_cninfo_df = ak.stock_zh_a_disclosure_relation_cninfo(symbol=\"000001\", market=\"沪深京\", start_date=\"20230619\", end_date=\"20231220\")\nprint(stock_zh_a_disclosure_relation_cninfo_df)\n```\n\n数据示例\n\n```\n   代码    简称  ...        公告时间                               公告链接\n0  000001  平安银行  ...  2023-11-08  http://www.cninfo.com.cn/new/disclosure/detail...\n1  000001  平安银行  ...  2023-11-01  http://www.cninfo.com.cn/new/disclosure/detail...\n2  000001  平安银行  ...  2023-10-24  http://www.cninfo.com.cn/new/disclosure/detail...\n3  000001  平安银行  ...  2023-10-24  http://www.cninfo.com.cn/new/disclosure/detail...\n4  000001  平安银行  ...  2023-10-24  http://www.cninfo.com.cn/new/disclosure/detail...\n5  000001  平安银行  ...  2023-10-24  http://www.cninfo.com.cn/new/disclosure/detail...\n6  000001  平安银行  ...  2023-08-23  http://www.cninfo.com.cn/new/disclosure/detail...\n7  000001  平安银行  ...  2023-08-23  http://www.cninfo.com.cn/new/disclosure/detail...\n8  000001  平安银行  ...  2023-08-23  http://www.cninfo.com.cn/new/disclosure/detail...\n9  000001  平安银行  ...  2023-08-23  http://www.cninfo.com.cn/new/disclosure/detail...\n[10 rows x 5 columns]\n```\n\n#### 行业分类数据-巨潮资讯\n\n接口: stock_industry_category_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/apiDoc\n\n描述: 巨潮资讯-数据-行业分类数据\n\n限量: 单次获取指定 symbol 的行业分类数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                                                 |\n|--------|-----|------------------------------------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"巨潮行业分类标准\"; choice of {\"证监会行业分类标准\", \"巨潮行业分类标准\", \"申银万国行业分类标准\", \"新财富行业分类标准\", \"国资委行业分类标准\", \"巨潮产业细分标准\", \"天相行业分类标准\", \"全球行业分类标准\"} |\n\n输出参数\n\n| 名称     | 类型         | 描述  |\n|--------|------------|-----|\n| 类目编码   | object     | -   |\n| 类目名称   | object     | -   |\n| 终止日期   | datetime64 | -   |\n| 行业类型   | object     | -   |\n| 行业类型编码 | object     | -   |\n| 类目名称英文 | object     | -   |\n| 父类编码   | object     | -   |\n| 分级     | int32      | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_industry_category_cninfo_df = ak.stock_industry_category_cninfo(symbol=\"巨潮行业分类标准\")\nprint(stock_industry_category_cninfo_df)\n```\n\n数据示例\n\n```\n          类目编码      类目名称  ...     父类编码 分级\n0            Z  巨潮行业分类标准  ...      008  0\n1          Z01        能源  ...        Z  1\n2        Z0101        能源  ...      Z01  2\n3      Z010101   能源设备与服务  ...    Z0101  3\n4    Z01010101      能源设备  ...  Z010101  4\n..         ...       ...  ...      ... ..\n289  Z11020101     房地产信托  ...  Z110201  4\n290    Z110202     房地产租赁  ...    Z1102  3\n291  Z11020201     房地产租赁  ...  Z110202  4\n292    Z110203   其他房地产服务  ...    Z1102  3\n293  Z11020301   其他房地产服务  ...  Z110203  4\n[294 rows x 8 columns]\n```\n\n#### 上市公司行业归属的变动情况-巨潮资讯\n\n接口: stock_industry_change_cninfo\n\n目标地址: http://webapi.cninfo.com.cn/#/apiDoc\n\n描述: 巨潮资讯-数据-上市公司行业归属的变动情况\n\n限量: 单次获取指定 symbol 在 start_date 和 end_date 之间的上市公司行业归属的变动情况数据\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| symbol     | str | symbol=\"002594\"       |\n| start_date | str | start_date=\"20091227\" |\n| end_date   | str | end_date=\"20220708\"   |\n\n输出参数\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 新证券简称  | object | -   |\n| 行业中类   | object | -   |\n| 行业大类   | object | -   |\n| 行业次类   | object | -   |\n| 行业门类   | object | -   |\n| 机构名称   | object | -   |\n| 行业编码   | object | -   |\n| 分类标准   | object | -   |\n| 分类标准编码 | object | -   |\n| 证券代码   | object | -   |\n| 变更日期   | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_industry_change_cninfo_df = ak.stock_industry_change_cninfo(symbol=\"002594\", start_date=\"20091227\", end_date=\"20220708\")\nprint(stock_industry_change_cninfo_df)\n```\n\n数据示例\n\n```\n   新证券简称      行业中类      行业大类  ...  分类标准编码    证券代码        变更日期\n0    比亚迪  汽车和汽车零部件  汽车和汽车零部件  ...  008004  002594  2011-06-08\n1    比亚迪     其他制造业     其他制造业  ...  008009  002594  2011-06-08\n2    比亚迪       乘用车       乘用车  ...  008018  002594  2011-06-21\n3    比亚迪       NaN     汽车制造业  ...  008001  002594  2011-06-30\n4    比亚迪        轿车        汽车  ...  008013  002594  2011-06-30\n5    比亚迪        轿车        汽车  ...  008013  002594  2017-10-16\n6    比亚迪        轿车        汽车  ...  008002  002594  2019-05-28\n7    比亚迪        汽车    汽车与摩托车  ...  008019  002594  2020-03-16\n8    比亚迪       NaN        汽车  ...  008016  002594  2021-06-21\n9    比亚迪     电动乘用车     电动乘用车  ...  008003  002594  2021-07-30\n10   比亚迪       乘用车       乘用车  ...  008014  002594  2021-12-17\n[11 rows x 11 columns]\n```\n\n#### 公司股本变动-巨潮资讯\n\n接口: stock_share_change_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/apiDoc\n\n描述: 巨潮资讯-数据-公司股本变动\n\n限量: 单次获取指定 symbol 在 start_date 和 end_date 之间的公司股本变动数据\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| symbol     | str | symbol=\"002594\"       |\n| start_date | str | start_date=\"20091227\" |\n| end_date   | str | end_date=\"20241021\"   |\n\n输出参数\n\n| 名称         | 类型      | 描述  |\n|------------|---------|-----|\n| 证券简称       | object  | -   |\n| 机构名称       | object  | -   |\n| 境外法人持股     | float64 | -   |\n| 证券投资基金持股   | float64 | -   |\n| 国家持股-受限    | float64 | -   |\n| 国有法人持股     | float64 | -   |\n| 配售法人股      | float64 | -   |\n| 发起人股份      | float64 | -   |\n| 未流通股份      | float64 | -   |\n| 其中：境外自然人持股 | float64 | -   |\n| 其他流通受限股份   | float64 | -   |\n| 其他流通股      | float64 | -   |\n| 外资持股-受限    | float64 | -   |\n| 内部职工股      | float64 | -   |\n| 境外上市外资股-H股 | float64 | -   |\n| 其中：境内法人持股  | float64 | -   |\n| 自然人持股      | float64 | -   |\n| 人民币普通股     | float64 | -   |\n| 国有法人持股-受限  | float64 | -   |\n| 一般法人持股     | float64 | -   |\n| 控股股东、实际控制人 | float64 | -   |\n| 其中：限售H股    | float64 | -   |\n| 变动原因       | object  | -   |\n| 公告日期       | object  | -   |\n| 境内法人持股     | float64 | -   |\n| 证券代码       | object  | -   |\n| 变动日期       | object  | -   |\n| 战略投资者持股    | float64 | -   |\n| 国家持股       | float64 | -   |\n| 其中：限售B股    | float64 | -   |\n| 其他未流通股     | float64 | -   |\n| 流通受限股份     | float64 | -   |\n| 优先股        | float64 | -   |\n| 高管股        | float64 | -   |\n| 总股本        | float64 | -   |\n| 其中：限售高管股   | float64 | -   |\n| 转配股        | float64 | -   |\n| 境内上市外资股-B股 | float64 | -   |\n| 其中：境外法人持股  | float64 | -   |\n| 募集法人股      | float64 | -   |\n| 已流通股份      | float64 | -   |\n| 其中：境内自然人持股 | float64 | -   |\n| 其他内资持股-受限  | float64 | -   |\n| 变动原因编码     | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_share_change_cninfo_df = ak.stock_share_change_cninfo(symbol=\"002594\", start_date=\"20091227\", end_date=\"20241021\")\nprint(stock_share_change_cninfo_df)\n```\n\n数据示例\n\n```\n   证券简称     机构名称 境外法人持股  ...   其中：境内自然人持股  其他内资持股-受限  变动原因编码\n0   比亚迪  比亚迪股份有限公司    NaN  ...  129518.2500  146457.3960  015001,015019\n1   比亚迪  比亚迪股份有限公司    NaN  ...  129518.2500  146457.3960         015009\n2   比亚迪  比亚迪股份有限公司    NaN  ...  129518.2500  146457.3960         015019\n3   比亚迪  比亚迪股份有限公司    NaN  ...  103909.7150  120525.4050         015019\n4   比亚迪  比亚迪股份有限公司    NaN  ...   82121.6860   98737.3760         015027\n5   比亚迪  比亚迪股份有限公司    NaN  ...  105034.8585  121650.5485         015019\n6   比亚迪  比亚迪股份有限公司    NaN  ...  101057.0665  117672.7565         015019\n7   比亚迪  比亚迪股份有限公司    NaN  ...  101057.0665  117672.7565         015019\n8   比亚迪  比亚迪股份有限公司    NaN  ...  101057.0665  117672.7565         015005\n9   比亚迪  比亚迪股份有限公司    NaN  ...   74641.3870   86835.0265         015019\n10  比亚迪  比亚迪股份有限公司    NaN  ...   77933.1165   90126.7560         015027\n11  比亚迪  比亚迪股份有限公司    NaN  ...   73295.2720   85488.9115         015019\n12  比亚迪  比亚迪股份有限公司    NaN  ...   74625.3530   84758.9925         015019\n13  比亚迪  比亚迪股份有限公司    NaN  ...   73295.2720   81424.3650         015027\n14  比亚迪  比亚迪股份有限公司    NaN  ...   72387.8051   80516.8981         015019\n15  比亚迪  比亚迪股份有限公司    NaN  ...   67996.6256   72061.1721         015019\n16  比亚迪  比亚迪股份有限公司    NaN  ...   72387.8051   76452.3516         015027\n17  比亚迪  比亚迪股份有限公司    NaN  ...   67996.6256   95881.7294         015004\n18  比亚迪  比亚迪股份有限公司    NaN  ...   67044.1386   96322.9706         015019\n19  比亚迪  比亚迪股份有限公司    NaN  ...   67480.9896   92695.2751         015019\n20  比亚迪  比亚迪股份有限公司    NaN  ...   67044.1386   92258.4241         015027\n21  比亚迪  比亚迪股份有限公司    NaN  ...   67480.9896   67480.9896         015027\n22  比亚迪  比亚迪股份有限公司    NaN  ...   67480.9896   67480.9896         015019\n23  比亚迪  比亚迪股份有限公司    NaN  ...   67134.3301   67134.3301         015019\n24  比亚迪  比亚迪股份有限公司    NaN  ...   67092.8936   67092.8936         015019\n25  比亚迪  比亚迪股份有限公司    NaN  ...   67248.1221   67248.1221         015019\n26  比亚迪  比亚迪股份有限公司    NaN  ...   67151.6826   67151.6826         015019\n27  比亚迪  比亚迪股份有限公司    NaN  ...   66747.5312   66747.5312         015019\n28  比亚迪  比亚迪股份有限公司    NaN  ...   66714.9897   66714.9897         015019\n29  比亚迪  比亚迪股份有限公司    NaN  ...   66747.5312   66747.5312         015004\n30  比亚迪  比亚迪股份有限公司    NaN  ...   65808.4620   65808.4620         015019\n31  比亚迪  比亚迪股份有限公司    NaN  ...   65808.4620   65808.4620         015004\n32  比亚迪  比亚迪股份有限公司    NaN  ...   65808.4620   65808.4620         015019\n33  比亚迪  比亚迪股份有限公司    NaN  ...   64837.8251   64837.8251         015999\n34  比亚迪  比亚迪股份有限公司    NaN  ...   64837.8251   64837.8251         015019\n35  比亚迪  比亚迪股份有限公司    NaN  ...   64837.8251   64837.8251         015019\n36  比亚迪  比亚迪股份有限公司    NaN  ...   64837.8251   64837.8251         015019\n37  比亚迪  比亚迪股份有限公司    NaN  ...   64888.0804   64888.0804         015019\n38  比亚迪  比亚迪股份有限公司    NaN  ...   64879.5289   64879.5289         015999\n39  比亚迪  比亚迪股份有限公司    NaN  ...   64879.5289   64879.5289         015016\n40  比亚迪  比亚迪股份有限公司    NaN  ...   64880.8339   64880.8339         015019\n[41 rows x 44 columns]\n```\n\n#### 配股实施方案-巨潮资讯\n\n接口: stock_allotment_cninfo\n\n目标地址: http://webapi.cninfo.com.cn/#/dataBrowse\n\n描述: 巨潮资讯-个股-配股实施方案\n\n限量: 单次获取指定 symbol 在 start_date 和 end_date 之间的公司股本变动数据\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| symbol     | str | symbol=\"600030\"       |\n| start_date | str | start_date=\"19700101\" |\n| end_date   | str | end_date=\"22220222\"   |\n\n输出参数\n\n| 名称           | 类型         | 描述  |\n|--------------|------------|-----|\n| 记录标识         | int64      | -   |\n| 证券简称         | object     | -   |\n| 停牌起始日        | object     | -   |\n| 上市公告日期       | object     | -   |\n| 配股缴款起始日      | object     | -   |\n| 可转配股数量       | float64    | -   |\n| 停牌截止日        | object     | -   |\n| 实际配股数量       | float64    | -   |\n| 配股价格         | float64    | -   |\n| 配股比例         | float64    | -   |\n| 配股前总股本       | float64    | -   |\n| 每股配权转让费(元)   | float64    | -   |\n| 法人股实配数量      | float64    | -   |\n| 实际募资净额       | float64    | -   |\n| 大股东认购方式      | object     | -   |\n| 其他配售简称       | object     | -   |\n| 发行方式         | object     | -   |\n| 配股失败，退还申购款日期 | object     | -   |\n| 除权基准日        | object     | -   |\n| 预计发行费用       | float64    | -   |\n| 配股发行结果公告日    | object     | -   |\n| 证券代码         | object     | -   |\n| 配股权证交易截止日    | datetime64 | -   |\n| 其他股份实配数量     | float64    | -   |\n| 国家股实配数量      | float64    | -   |\n| 委托单位         | object     | -   |\n| 公众获转配数量      | float64    | -   |\n| 其他配售代码       | object     | -   |\n| 配售对象         | object     | -   |\n| 配股权证交易起始日    | datetime64 | -   |\n| 资金到账日        | datetime64 | -   |\n| 机构名称         | object     | -   |\n| 股权登记日        | object     | -   |\n| 实际募资总额       | float64    | -   |\n| 预计募集资金       | float64    | -   |\n| 大股东认购数量      | float64    | -   |\n| 公众股实配数量      | float64    | -   |\n| 转配股实配数量      | float64    | -   |\n| 承销费用         | float64    | -   |\n| 法人获转配数量      | float64    | -   |\n| 配股后流通股本      | float64    | -   |\n| 股票类别         | object     | -   |\n| 公众配售简称       | object     | -   |\n| 发行方式编码       | object     | -   |\n| 承销方式         | object     | -   |\n| 公告日期         | object     | -   |\n| 配股上市日        | object     | -   |\n| 配股缴款截止日      | object     | -   |\n| 承销余额(股)      | float64    | -   |\n| 预计配股数量       | float64    | -   |\n| 配股后总股本       | float64    | -   |\n| 职工股实配数量      | float64    | -   |\n| 承销方式编码       | object     | -   |\n| 发行费用总额       | float64    | -   |\n| 配股前流通股本      | float64    | -   |\n| 股票类别编码       | object     | -   |\n| 公众配售代码       | object     | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_allotment_cninfo_df = ak.stock_allotment_cninfo(symbol=\"600030\", start_date=\"19900101\", end_date=\"20241022\")\nprint(stock_allotment_cninfo_df)\n```\n\n数据示例\n\n```\n    记录标识  证券简称     停牌起始日  ...  配股前流通股本  股票类别编码 公众配售代码\n0  4475575959  中信证券  2022-01-19  ...  1209298.94  001001  700030\n[1 rows x 57 columns]\n```\n\n#### 公司概况-巨潮资讯\n\n接口: stock_profile_cninfo\n\n目标地址: http://webapi.cninfo.com.cn/#/company\n\n描述: 巨潮资讯-个股-公司概况\n\n限量: 单次获取指定 symbol 的公司概况\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| symbol     | str | symbol=\"600030\"       |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| 公司名称 | object | -   |\n| 英文名称 | object | -   |\n| 曾用简称 | object | -   |\n| A股代码 | object | -   |\n| A股简称 | object | -   |\n| B股代码 | object | -   |\n| B股简称 | object | -   |\n| H股代码 | object | -   |\n| H股简称 | object | -   |\n| 入选指数 | object | -   |\n| 所属市场 | object | -   |\n| 所属行业 | object | -   |\n| 法人代表 | object | -   |\n| 注册资金 | object | -   |\n| 成立日期 | object | -   |\n| 上市日期 | object | -   |\n| 官方网站 | object | -   |\n| 电子邮箱 | object | -   |\n| 联系电话 | object | -   |\n| 传真   | object | -   |\n| 注册地址 | object | -   |\n| 办公地址 | object | -   |\n| 邮政编码 | object | -   |\n| 主营业务 | object | -   |\n| 经营范围 | object | -   |\n| 机构简介 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_profile_cninfo_df = ak.stock_profile_cninfo(symbol=\"600030\")\nprint(stock_profile_cninfo_df)\n```\n\n数据示例\n\n```\n         公司名称  ...                                               机构简介\n0  中信证券股份有限公司  ...  公司的前身中信证券有限责任公司是经中国人民银行银复[1995]313号文批准，由中信公司，中...\n```\n\n#### 上市相关-巨潮资讯\n\n接口: stock_ipo_summary_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/company\n\n描述: 巨潮资讯-个股-上市相关\n\n限量: 单次获取指定 symbol 的上市相关数据\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| symbol     | str | symbol=\"600030\"       |\n\n输出参数\n\n| 名称       | 类型      | 描述       |\n|----------|---------|----------|\n| 股票代码     | object  | -        |\n| 招股公告日期   | object  | -        |\n| 中签率公告日   | object  | -        |\n| 每股面值     | float64 | 注意单位: 元  |\n| 总发行数量    | float64 | 注意单位: 万股 |\n| 发行前每股净资产 | float64 | 注意单位: 元  |\n| 摊薄发行市盈率  | float64 | -        |\n| 募集资金净额   | float64 | 注意单位: 万元 |\n| 上网发行日期   | object  | -        |\n| 上市日期     | object  | -        |\n| 发行价格     | float64 | 注意单位: 元  |\n| 发行费用总额   | float64 | 注意单位: 万元 |\n| 发行后每股净资产 | float64 | 注意单位: 元  |\n| 上网发行中签率  | float64 | 注意单位: %  |\n| 主承销商     | float64 | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_ipo_summary_cninfo_df = ak.stock_ipo_summary_cninfo(symbol=\"600030\")\nprint(stock_ipo_summary_cninfo_df)\n```\n\n数据示例\n\n```\n   股票代码      招股公告日期 中签率公告日  每股面值  ...     发行费用总额  发行后每股净资产  上网发行中签率        主承销商\n0  600030  2002-12-13    NaT   1.0  ...  4032.6625      2.11    0.282  广发证券股份有限公司\n[1 rows x 15 columns]\n```\n\n#### 资产负债表-沪深\n\n接口: stock_zcfz_em\n\n目标地址: https://data.eastmoney.com/bbsj/202003/zcfz.html\n\n描述: 东方财富-数据中心-年报季报-业绩快报-资产负债表\n\n限量: 单次获取指定 date 的资产负债表数据\n\n输入参数\n\n| 名称   | 类型  |  描述                                                                                        |\n|------|-----|--------------------------------------------------------------------------------------------|\n| date | str | date=\"20240331\"; choice of {\"XXXX0331\", \"XXXX0630\", \"XXXX0930\", \"XXXX1231\"}; 从 20081231 开始 |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 序号       | int64   | -       |\n| 股票代码     | object  | -       |\n| 股票简称     | object  | -       |\n| 资产-货币资金  | float64 | 注意单位: 元 |\n| 资产-应收账款  | float64 | 注意单位: 元 |\n| 资产-存货    | float64 | 注意单位: 元 |\n| 资产-总资产   | float64 | 注意单位: 元 |\n| 资产-总资产同比 | float64 | 注意单位: % |\n| 负债-应付账款  | float64 | 注意单位: 元 |\n| 负债-总负债   | float64 | 注意单位: 元 |\n| 负债-预收账款  | float64 | 注意单位: 元 |\n| 负债-总负债同比 | float64 | 注意单位: % |\n| 资产负债率    | float64 | 注意单位: % |\n| 股东权益合计   | float64 | 注意单位: 元 |\n| 公告日期     | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zcfz_em_df = ak.stock_zcfz_em(date=\"20240331\")\nprint(stock_zcfz_em_df)\n```\n\n数据示例\n\n```\n     序号    股票代码   股票简称  ...   资产负债率  股东权益合计       公告日期\n0        1  603156   养元饮品  ...  20.992996  1.160939e+10  2024-09-10\n1        2  002569   ST步森  ...  62.799334  8.476112e+07  2024-09-07\n2        3  603260   合盛硅业  ...  63.774717  3.253375e+10  2024-08-30\n3        4  300417   南华仪器  ...   8.130360  4.507915e+08  2024-08-30\n4        5  300081   恒信东方  ...  30.634305  1.319848e+09  2024-08-30\n...    ...     ...    ...  ...        ...           ...         ...\n5123  5124  300076  GQY视讯  ...  10.010959  9.880683e+08  2024-04-10\n5124  5125  002644   佛慈制药  ...  29.294961  1.787072e+09  2024-04-10\n5125  5126  603058   永吉股份  ...  35.639627  1.237896e+09  2024-04-09\n5126  5127  600873   梅花生物  ...  36.564962  1.486533e+10  2024-04-09\n5127  5128  000818   航锦科技  ...  40.879097  4.118588e+09  2024-04-03\n[5128 rows x 15 columns]\n```\n\n#### 资产负债表-北交所\n\n接口: stock_zcfz_bj_em\n\n目标地址: https://data.eastmoney.com/bbsj/202003/zcfz.html\n\n描述: 东方财富-数据中心-年报季报-业绩快报-资产负债表\n\n限量: 单次获取指定 date 的资产负债表数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                                         |\n|------|-----|--------------------------------------------------------------------------------------------|\n| date | str | date=\"20240331\"; choice of {\"XXXX0331\", \"XXXX0630\", \"XXXX0930\", \"XXXX1231\"}; 从 20081231 开始 |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 序号       | int64   | -       |\n| 股票代码     | object  | -       |\n| 股票简称     | object  | -       |\n| 资产-货币资金  | float64 | 注意单位: 元 |\n| 资产-应收账款  | float64 | 注意单位: 元 |\n| 资产-存货    | float64 | 注意单位: 元 |\n| 资产-总资产   | float64 | 注意单位: 元 |\n| 资产-总资产同比 | float64 | 注意单位: % |\n| 负债-应付账款  | float64 | 注意单位: 元 |\n| 负债-总负债   | float64 | 注意单位: 元 |\n| 负债-预收账款  | float64 | 注意单位: 元 |\n| 负债-总负债同比 | float64 | 注意单位: % |\n| 资产负债率    | float64 | 注意单位: % |\n| 股东权益合计   | float64 | 注意单位: 元 |\n| 公告日期     | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zcfz_bj_em_df = ak.stock_zcfz_bj_em(date=\"20240331\")\nprint(stock_zcfz_bj_em_df)\n```\n\n数据示例\n\n```\n     序号 股票代码  股票简称  ...  资产负债率    股东权益合计     公告日期\n0      1  873223  荣亿精密  ...  38.708142  2.856643e+08  2024-08-29\n1      2  838030  德众汽车  ...  72.413909  4.696866e+08  2024-08-28\n2      3  830974  凯大催化  ...  26.834128  6.476251e+08  2024-08-28\n3      4  834415  恒拓开源  ...  16.546915  5.229393e+08  2024-06-27\n4      5  920118  太湖远大  ...  57.054651  4.325410e+08  2024-05-23\n..   ...     ...   ...  ...        ...           ...         ...\n249  250  835892  中科美菱  ...  19.425219  6.066262e+08  2024-04-18\n250  251  834261   一诺威  ...  38.597474  1.475388e+09  2024-04-18\n251  252  873703  广厦环能  ...  25.348767  1.018675e+09  2024-04-16\n252  253  838262   太湖雪  ...  36.163348  3.227086e+08  2024-04-15\n253  254  833394   民士达  ...  19.625162  6.865148e+08  2024-04-11\n[254 rows x 15 columns]\n```\n\n#### 利润表\n\n接口: stock_lrb_em\n\n目标地址: http://data.eastmoney.com/bbsj/202003/lrb.html\n\n描述: 东方财富-数据中心-年报季报-业绩快报-利润表\n\n限量: 单次获取指定 date 的利润表数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                                         |\n|------|-----|--------------------------------------------------------------------------------------------|\n| date | str | date=\"20240331\"; choice of {\"XXXX0331\", \"XXXX0630\", \"XXXX0930\", \"XXXX1231\"}; 从 20120331 开始 |\n\n输出参数\n\n| 名称          | 类型      | 描述      |\n|-------------|---------|---------|\n| 序号          | int64   | -       |\n| 股票代码        | object  | -       |\n| 股票简称        | object  | -       |\n| 净利润         | float64 | 注意单位: 元 |\n| 净利润同比       | float64 | 注意单位: % |\n| 营业总收入       | float64 | 注意单位: 元 |\n| 营业总收入同比     | float64 | 注意单位: % |\n| 营业总支出-营业支出  | float64 | 注意单位: 元 |\n| 营业总支出-销售费用  | float64 | 注意单位: 元 |\n| 营业总支出-管理费用  | float64 | 注意单位: 元 |\n| 营业总支出-财务费用  | float64 | 注意单位: 元 |\n| 营业总支出-营业总支出 | float64 | 注意单位: 元 |\n| 营业利润        | float64 | 注意单位: 元 |\n| 利润总额        | float64 | 注意单位: 元 |\n| 公告日期        | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lrb_em_df = ak.stock_lrb_em(date=\"20240331\")\nprint(stock_lrb_em_df)\n```\n\n数据示例\n\n```\n     序号    股票代码   股票简称  ...   营业利润         利润总额       公告日期\n0        1  603156   养元饮品  ...  1.078460e+09  1.078821e+09  2024-09-10\n1        2  002569   ST步森  ... -8.504272e+06 -8.601409e+06  2024-09-07\n2        3  603260   合盛硅业  ...  7.390596e+08  7.561255e+08  2024-08-30\n3        4  300417   南华仪器  ... -4.807409e+06 -4.815009e+06  2024-08-30\n4        5  300081   恒信东方  ... -3.694795e+07 -3.697999e+07  2024-08-30\n...    ...     ...    ...  ...           ...           ...         ...\n5123  5124  300076  GQY视讯  ... -2.973570e+05 -2.575340e+05  2024-04-10\n5124  5125  002644   佛慈制药  ...  2.299932e+07  2.260271e+07  2024-04-10\n5125  5126  603058   永吉股份  ...  5.088006e+07  5.084289e+07  2024-04-09\n5126  5127  600873   梅花生物  ...  8.858530e+08  8.755312e+08  2024-04-09\n5127  5128  000818   航锦科技  ...  8.761395e+07  8.890215e+07  2024-04-03\n[5128 rows x 15 columns]\n```\n\n#### 现金流量表\n\n接口: stock_xjll_em\n\n目标地址: http://data.eastmoney.com/bbsj/202003/xjll.html\n\n描述: 东方财富-数据中心-年报季报-业绩快报-现金流量表\n\n限量: 单次获取指定 date 的现金流量表数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                                         |\n|------|-----|--------------------------------------------------------------------------------------------|\n| date | str | date=\"20200331\"; choice of {\"XXXX0331\", \"XXXX0630\", \"XXXX0930\", \"XXXX1231\"}; 从 20081231 开始 |\n\n输出参数\n\n| 名称            | 类型      | 描述      |\n|---------------|---------|---------|\n| 序号            | int64   | -       |\n| 股票代码          | object  | -       |\n| 股票简称          | object  | -       |\n| 净现金流-净现金流     | float64 | 注意单位: 元 |\n| 净现金流-同比增长     | float64 | 注意单位: % |\n| 经营性现金流-现金流量净额 | float64 | 注意单位: 元 |\n| 经营性现金流-净现金流占比 | float64 | 注意单位: % |\n| 投资性现金流-现金流量净额 | float64 | 注意单位: 元 |\n| 投资性现金流-净现金流占比 | float64 | 注意单位: % |\n| 融资性现金流-现金流量净额 | float64 | 注意单位: 元 |\n| 融资性现金流-净现金流占比 | float64 | 注意单位: % |\n| 公告日期          | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_xjll_em_df = ak.stock_xjll_em(date=\"20240331\")\nprint(stock_xjll_em_df)\n```\n\n数据示例\n\n```\n      序号   股票代码   股票简称  ... 融资性现金流-现金流量净额 融资性现金流-净现金流占比  公告日期\n0        1  603156   养元饮品  ...   8.906149e+07       8.556244  2024-09-10\n1        2  002569   ST步森  ...            NaN            NaN  2024-09-07\n2        3  603260   合盛硅业  ...   3.236085e+09    7017.983443  2024-08-30\n3        4  300417   南华仪器  ...  -1.980000e+04      -0.047350  2024-08-30\n4        5  300081   恒信东方  ...  -6.422119e+06     -30.968169  2024-08-30\n...    ...     ...    ...  ...            ...            ...         ...\n5123  5124  300076  GQY视讯  ...   3.252000e+05       1.435320  2024-04-10\n5124  5125  002644   佛慈制药  ...  -1.388667e+07     -43.325298  2024-04-10\n5125  5126  603058   永吉股份  ...   3.204449e+06       5.454042  2024-04-09\n5126  5127  600873   梅花生物  ...   1.604316e+08      47.970510  2024-04-09\n5127  5128  000818   航锦科技  ...   5.813673e+08     274.656484  2024-04-03\n[5128 rows x 12 columns]\n```\n\n### 高管持股\n\n#### 股东增减持\n\n接口: stock_ggcg_em\n\n目标地址: http://data.eastmoney.com/executive/gdzjc.html\n\n描述: 东方财富网-数据中心-特色数据-高管持股\n\n限量: 单次获取所有高管持股数据数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                            |\n|--------|-----|-----------------------------------------------|\n| symbol | str | symbol=\"全部\"; choice of {\"全部\", \"股东增持\", \"股东减持\"} |\n\n输出参数\n\n| 名称             | 类型      | 描述       |\n|----------------|---------|----------|\n| 代码             | object  | -        |\n| 名称             | object  | -        |\n| 最新价            | float64 | -        |\n| 涨跌幅            | float64 | 注意单位: %  |\n| 股东名称           | object  | -        |\n| 持股变动信息-增减      | float64 | -        |\n| 持股变动信息-变动数量    | float64 | 注意单位: 万股 |\n| 持股变动信息-占总股本比例  | float64 | 注意单位: %  |\n| 持股变动信息-占流通股比例  | float64 | 注意单位: %  |\n| 变动后持股情况-持股总数   | float64 | 注意单位: 万股 |\n| 变动后持股情况-占总股本比例 | float64 | 注意单位: %  |\n| 变动后持股情况-持流通股数  | float64 | 注意单位: 万股 |\n| 变动后持股情况-占流通股比例 | float64 | 注意单位: %  |\n| 变动开始日          | object  | -        |\n| 变动截止日          | object  | -        |\n| 公告日            | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_ggcg_em_df = ak.stock_ggcg_em(symbol=\"全部\")\nprint(stock_ggcg_em_df)\n```\n\n数据示例\n\n```\n        代码   名称       最新价  ...    变动开始日   变动截止日       公告日\n0       688369  致远互联  44.19  ...  2022-01-05  2022-04-29  2022-04-30\n1       688106  金宏气体  16.33  ...         NaT  2022-04-29  2022-04-30\n2       601966  玲珑轮胎  17.77  ...  2022-04-29  2022-04-29  2022-04-30\n3       601199  江南水务   5.80  ...  2022-01-29  2022-04-29  2022-04-30\n4       600346  恒力石化  20.95  ...         NaT  2022-04-29  2022-04-30\n        ...   ...    ...  ...         ...         ...         ...\n112446  600653  申华控股   1.83  ...  1996-11-29  1996-12-03  1996-12-04\n112447  600653  申华控股   1.83  ...  1996-11-26  1996-11-28  1996-11-29\n112448  600653  申华控股   1.83  ...  1996-11-21  1996-11-25  1996-11-26\n112449  600653  申华控股   1.83  ...         NaT  1996-11-20  1996-11-21\n112450  600651  飞乐音响   2.96  ...         NaT  1994-08-05  1994-08-10\n```\n\n### 分红配送\n\n#### 分红配送-东财\n\n接口: stock_fhps_em\n\n目标地址: https://data.eastmoney.com/yjfp/\n\n描述: 东方财富-数据中心-年报季报-分红配送\n\n限量: 单次获取指定日期的分红配送数据\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                 |\n|------|-----|--------------------------------------------------------------------|\n| date | str | date=\"20231231\"; choice of {\"XXXX0630\", \"XXXX1231\"}; 从 19901231 开始 |\n\n输出参数\n\n| 名称          | 类型      | 描述  |\n|-------------|---------|-----|\n| 代码          | object  | -   |\n| 名称          | object  | -   |\n| 送转股份-送转总比例  | float64 | -   |\n| 送转股份-送转比例   | float64 | -   |\n| 送转股份-转股比例   | float64 | -   |\n| 现金分红-现金分红比例 | float64 | -   |\n| 现金分红-股息率    | float64 | -   |\n| 每股收益        | float64 | -   |\n| 每股净资产       | float64 | -   |\n| 每股公积金       | float64 | -   |\n| 每股未分配利润     | float64 | -   |\n| 净利润同比增长     | float64 | -   |\n| 总股本         | int64   | -   |\n| 预案公告日       | object  | -   |\n| 股权登记日       | object  | -   |\n| 除权除息日       | object  | -   |\n| 方案进度        | object  | -   |\n| 最新公告日期      | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_fhps_em_df = ak.stock_fhps_em(date=\"20231231\")\nprint(stock_fhps_em_df)\n```\n\n数据示例\n\n```\n      代码    名称  送转股份-送转总比例  ...    除权除息日      方案进度   最新公告日期\n0     300708  聚灿光电         NaN  ...  2024-02-28      实施分配  2024-02-21\n1     688082  盛美上海         NaN  ...         NaT   董事会决议通过  2024-02-29\n2     002286   保龄宝         NaN  ...  2024-03-08      实施分配  2024-03-01\n3     605198   安德利         NaN  ...         NaT  股东大会决议通过  2024-03-07\n4     000063  中兴通讯         NaN  ...         NaT   董事会决议通过  2024-03-09\n...      ...   ...         ...  ...         ...       ...         ...\n3861  600449  宁夏建材         NaN  ...  2024-06-13      实施分配  2024-06-05\n3862  002737  葵花药业         NaN  ...  2024-06-14      实施分配  2024-06-05\n3863  603915  国茂股份         NaN  ...  2024-06-12      实施分配  2024-06-05\n3864  688390   固德威         4.0  ...  2024-06-12      实施分配  2024-06-05\n3865  603002  宏昌电子         NaN  ...  2024-06-14      实施分配  2024-06-05\n[3866 rows x 18 columns]\n```\n\n#### 分红配送详情-东财\n\n接口: stock_fhps_detail_em\n\n目标地址: https://data.eastmoney.com/yjfp/detail/300073.html\n\n描述: 东方财富网-数据中心-分红送配-分红送配详情\n\n限量: 单次获取指定 symbol 的分红配送详情数据\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| symbol | str | symbol=\"300073\" |\n\n输出参数\n\n| 名称            | 类型      | 描述 |\n|---------------|---------|----|\n| 报告期           | object  | -  |\n| 业绩披露日期        | object  | -  |\n| 送转股份-送转总比例    | float64 | -  |\n| 送转股份-送股比例     | float64 | -  |\n| 送转股份-转股比例     | float64 | -  |\n| 现金分红-现金分红比例   | float64 | -  |\n| 现金分红-现金分红比例描述 | object  | -  |\n| 现金分红-股息率      | float64 | -  |\n| 每股收益          | float64 | -  |\n| 每股净资产         | float64 | -  |\n| 每股公积金         | float64 | -  |\n| 每股未分配利润       | float64 | -  |\n| 净利润同比增长       | float64 | -  |\n| 总股本           | int64   | -  |\n| 预案公告日         | object  | -  |\n| 股权登记日         | object  | -  |\n| 除权除息日         | object  | -  |\n| 方案进度          | object  | -  |\n| 最新公告日期        | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_fhps_detail_em_df = ak.stock_fhps_detail_em(symbol=\"300073\")\nprint(stock_fhps_detail_em_df)\n```\n\n数据示例\n\n```\n   报告期      业绩披露日期  送转股份-送转总比例  ... 除权除息日  方案进度  最新公告日期\n0  2010-12-31  2011-03-31        10.0  ...  2011-05-20  实施分配  2011-05-16\n1  2012-12-31  2013-04-20         NaN  ...  2013-07-09  实施分配  2013-07-02\n2  2013-12-31  2014-04-15         NaN  ...  2014-06-26  实施分配  2014-06-18\n3  2016-12-31  2017-03-14        10.0  ...  2017-04-26  实施分配  2017-04-18\n4  2017-12-31  2018-04-03         NaN  ...  2018-05-29  实施分配  2018-05-23\n5  2018-12-31  2019-04-23         NaN  ...  2019-06-21  实施分配  2019-06-15\n6  2020-12-31  2021-03-23         NaN  ...  2021-05-28  实施分配  2021-05-21\n7  2021-12-31  2022-03-31         NaN  ...  2022-05-26  实施分配  2022-05-19\n8  2022-12-31  2023-04-10         NaN  ...  2023-06-29  实施分配  2023-06-19\n9  2023-12-31  2024-03-30         NaN  ...  2024-06-07  实施分配  2024-05-31\n[10 rows x 19 columns]\n```\n\n#### 分红情况-同花顺\n\n接口: stock_fhps_detail_ths\n\n目标地址: https://basic.10jqka.com.cn/new/603444/bonus.html\n\n描述: 同花顺-分红情况\n\n限量: 单次获取指定 symbol 的分红情况数据\n\n输入参数\n\n| 名称     | 类型  | 描述                           |\n|--------|-----|------------------------------|\n| symbol | str | symbol=\"603444\"; 兼容 A 股和 B 股 |\n\n输出参数\n\n| 名称         | 类型     | 描述                |\n|------------|--------|-------------------|\n| 报告期        | object | -                 |\n| 董事会日期      | object | -                 |\n| 股东大会预案公告日期 | object | -                 |\n| 实施公告日      | object | -                 |\n| 分红方案说明     | object | -                 |\n| A股股权登记日    | object | 注意: 根据 A 股和 B 股变化 |\n| A股除权除息日    | object | 注意: 根据 A 股和 B 股变化 |\n| 分红总额       | object | -                 |\n| 方案进度       | object | -                 |\n| 股利支付率      | object | -                 |\n| 税前分红率      | object | -                 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_fhps_detail_ths_df = ak.stock_fhps_detail_ths(symbol=\"603444\")\nprint(stock_fhps_detail_ths_df)\n```\n\n数据示例\n\n```\n        报告期   董事会日期  股东大会预案公告日期  实施公告日  ... 分红总额 方案进度 股利支付率 税前分红率\n0    2016年报  2017-03-28  2017-04-18  2017-04-28  ...   2.94亿    实施方案  37.37%  1.52%\n1    2017中报  2017-08-15         NaT         NaT  ...      --   董事会预案      --     --\n2    2017年报  2018-04-03  2018-04-25  2018-05-07  ...   1.87亿    实施方案  30.48%  1.66%\n3    2018中报  2018-08-14         NaT         NaT  ...      --   董事会预案      --     --\n4    2018年报  2019-04-10  2019-05-01  2019-05-16  ...   7.19亿    实施方案  98.81%  4.47%\n5    2019中报  2019-08-13         NaT         NaT  ...      --   董事会预案      --     --\n6    2019年报  2020-04-09  2020-04-30  2020-05-14  ...   3.59亿    实施方案  44.33%  1.17%\n7    2020中报  2020-08-18         NaT         NaT  ...      --   董事会预案      --     --\n8    2020年报  2021-03-31  2021-05-13  2021-05-31  ...   8.62亿    实施方案   82.3%  2.08%\n9    2021中报  2021-08-13         NaT         NaT  ...      --   董事会预案      --     --\n10   2021年报  2022-04-08  2022-04-30  2022-05-13  ...  11.50亿    实施方案  78.32%  4.78%\n11   2022中报  2022-08-16         NaT         NaT  ...      --   董事会预案      --     --\n12  2022三季报  2022-10-27  2022-11-16  2022-12-22  ...  10.06亿    实施方案  99.43%  4.41%\n13   2022年报  2023-03-31  2023-04-22  2023-05-05  ...   2.16亿    实施方案  14.76%  0.61%\n14   2023中报  2023-08-16  2023-09-09  2023-09-21  ...   5.04亿    实施方案  74.47%  1.88%\n15   2023年报  2024-03-29  2024-04-19         NaT  ...      --  股东大会预案      --     --\n[16 rows x 11 columns]\n```\n\n#### 分红配送详情-港股-同花顺\n\n接口: stock_hk_fhpx_detail_ths\n\n目标地址: https://stockpage.10jqka.com.cn/HK0700/bonus/\n\n描述: 同花顺-港股-分红派息\n\n限量: 单次获取指定股票的分红派息数据\n\n输入参数\n\n| 名称     | 类型  | 描述                  |\n|--------|-----|---------------------|\n| symbol | str | symbol=\"0700\"; 港股代码 |\n\n输出参数\n\n| 名称         | 类型     | 描述 |\n|------------|--------|----|\n| 公告日期       | object | -  |\n| 方案         | object | -  |\n| 除净日        | object | -  |\n| 派息日        | object | -  |\n| 过户日期起止日-起始 | object | -  |\n| 过户日期起止日-截止 | object | -  |\n| 类型         | object | -  |\n| 进度         | object | -  |\n| 以股代息       | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_fhpx_detail_ths_df = ak.stock_hk_fhpx_detail_ths(symbol=\"0700\")\nprint(stock_hk_fhpx_detail_ths_df)\n```\n\n数据示例\n\n```\n        公告日期        方案         除净日  ...       类型    进度 以股代息\n0   2004-08-19       不分红         NaT  ...       中报    预案    否\n1   2004-11-18       不分红         NaT  ...      三季报    预案    否\n2   2005-03-17  每股0.07港元  2005-04-19  ...       年报  实施完成    否\n3   2005-05-18       不分红         NaT  ...      一季报    预案    否\n4   2005-08-24       不分红         NaT  ...       中报    预案    否\n..         ...       ...         ...  ...      ...   ...  ...\n78  2022-11-16       不分红         NaT  ...      三季报    预案    否\n79  2023-03-22   每股2.4港元  2023-05-19  ...       年报  实施完成    否\n80  2023-05-17       不分红         NaT  ...      一季报    预案    否\n81  2023-08-16       不分红         NaT  ...       中报    预案    否\n82  2023-11-15       不分红         NaT  ...  三季报(累计)    预案    否\n[83 rows x 9 columns]\n```\n\n### 资金流向\n\n#### 同花顺\n\n##### 个股资金流\n\n接口: stock_fund_flow_individual\n\n目标地址: https://data.10jqka.com.cn/funds/ggzjl/#refCountId=data_55f13c2c_254\n\n描述: 同花顺-数据中心-资金流向-个股资金流\n\n限量: 单次获取指定 symbol 的概念资金流数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                              |\n|--------|-----|-----------------------------------------------------------------|\n| symbol | str | symbol=\"即时\"; choice of {“即时”, \"3日排行\", \"5日排行\", \"10日排行\", \"20日排行\"} |\n\n输出参数-即时\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 序号   | int32   | -       |\n| 股票代码 | int64   | -       |\n| 股票简称 | object  | -       |\n| 最新价  | float64 | -       |\n| 涨跌幅  | object  | 注意单位: % |\n| 换手率  | object  | -       |\n| 流入资金 | object  | 注意单位: 元 |\n| 流出资金 | object  | 注意单位: 元 |\n| 净额   | object  | 注意单位: 元 |\n| 成交额  | object  | 注意单位: 元 |\n\n接口示例-即时\n\n```python\nimport akshare as ak\n\nstock_fund_flow_individual_df = ak.stock_fund_flow_individual(symbol=\"即时\")\nprint(stock_fund_flow_individual_df)\n```\n\n数据示例-即时\n\n```\n      序号  股票代码 股票简称   最新价  ...     流入资金    流出资金     净额       成交额\n0        1  300256  星星科技   3.40  ...     6.49亿     5.01亿      1.48亿    11.50亿\n1        2  300269  联建光电   4.00  ...     3.53亿     2.77亿   7588.54万     6.30亿\n2        3  300299  富春股份   5.26  ...     3.48亿     3.53亿   -571.77万     7.01亿\n3        4  300050  世纪鼎利   4.07  ...     2.91亿     3.63亿  -7186.49万     6.53亿\n4        5  300323  华灿光电   5.09  ...  5916.58万     1.73亿     -1.13亿     2.32亿\n...    ...     ...   ...    ...  ...       ...       ...        ...       ...\n5084  5085  603398  沐邦高科  10.85  ...     1.18亿     1.17亿    185.74万     2.35亿\n5085  5086  603310  巍华新材  21.56  ...     3.13亿     4.02亿  -8883.27万     7.15亿\n5086  5087     509  华塑控股   2.92  ...     2.28亿     1.67亿   6070.40万     3.95亿\n5087  5088  300599  雄塑科技   6.19  ...  8622.01万     1.47亿  -6126.79万     2.34亿\n5088  5089  688426  康为世纪  17.86  ...  3342.07万  5921.77万  -2579.71万  9263.83万\n[5089 rows x 10 columns]\n```\n\n输出参数-3日、5日、10日和20日\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int32   | -       |\n| 股票代码   | int64   | -       |\n| 股票简称   | object  | -       |\n| 最新价    | float64 | -       |\n| 阶段涨跌幅  | object  | 注意单位: % |\n| 连续换手率  | object  | 注意单位: % |\n| 资金流入净额 | float64 | 注意单位: 元 |\n\n接口示例-3日、5日、10日和20日\n\n```python\nimport akshare as ak\n\nstock_fund_flow_individual_df = ak.stock_fund_flow_individual(symbol=\"3日排行\")\nprint(stock_fund_flow_individual_df)\n```\n\n数据示例-3日、5日、10日和20日\n\n```\n     序号    股票代码 股票简称   最新价  阶段涨跌幅  连续换手率 资金流入净额\n0        1  300622  博士眼镜  31.51   72.85%  103.83%     -1.30亿\n1        2  300269  联建光电   4.00   53.26%   75.76%    913.14万\n2        3  301288  清研环境  21.39   48.75%  115.83%     -1.43亿\n3        4  300157  新锦动力   2.80   46.60%   36.12%   2178.04万\n4        5  300211  亿通科技   7.39   46.34%   19.53%  -6246.22万\n...    ...     ...   ...    ...      ...      ...        ...\n5084  5085    2890  弘宇股份   8.51  -16.07%   19.54%  -6274.33万\n5085  5086  603398  沐邦高科  10.85  -17.55%   11.35%  -2952.80万\n5086  5087  603139  康惠制药  12.26  -17.72%   17.01%     93.55万\n5087  5088    2871  伟隆股份   8.01  -20.69%   25.36%  -1586.36万\n5088  5089  688426  康为世纪  17.86  -28.84%   25.86%    465.97万\n[5089 rows x 7 columns]\n```\n\n##### 概念资金流\n\n接口: stock_fund_flow_concept\n\n目标地址: https://data.10jqka.com.cn/funds/gnzjl/#refCountId=data_55f13c2c_254\n\n描述: 同花顺-数据中心-资金流向-概念资金流\n\n限量: 单次获取指定 symbol 的概念资金流数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                              |\n|--------|-----|-----------------------------------------------------------------|\n| symbol | str | symbol=\"即时\"; choice of {“即时”, \"3日排行\", \"5日排行\", \"10日排行\", \"20日排行\"} |\n\n输出参数-即时\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int32   | -       |\n| 行业      | object  | -       |\n| 行业指数    | float64 | -       |\n| 行业-涨跌幅  | float64 | 注意单位: % |\n| 流入资金    | float64 | 注意单位: 亿 |\n| 流出资金    | float64 | 注意单位: 亿 |\n| 净额      | float64 | 注意单位: 亿 |\n| 公司家数    | float64 | -       |\n| 领涨股     | object  | -       |\n| 领涨股-涨跌幅 | float64 | 注意单位: % |\n| 当前价     | float64 | 注意单位: 元 |\n\n接口示例-即时\n\n```python\nimport akshare as ak\n\nstock_fund_flow_concept_df = ak.stock_fund_flow_concept(symbol=\"即时\")\nprint(stock_fund_flow_concept_df)\n```\n\n数据示例-即时\n\n```\n     序号      行业      行业指数  行业-涨跌幅   流入资金  ...  净额  公司家数 领涨股 领涨股-涨跌幅 当前价\n0      1  华为海思概念股  1750.270    6.17  45.26  ...  3.54    36  力源信息   20.04   6.11\n1      2     猴痘概念   718.597    4.85  33.86  ...  6.82    61  透景生命   20.02  14.15\n2      3     AI眼镜  1168.340    3.37  67.39  ... -8.94    51  联合光电   20.00  18.90\n3      4     基因测序  1411.750    2.37  22.31  ...  1.41    51  透景生命   20.02  14.15\n4      5  幽门螺杆菌概念   792.010    2.37  28.64  ...  3.61    66  海辰药业   19.98  23.54\n..   ...      ...       ...     ...    ...  ...   ...   ...   ...     ...    ...\n395  396   PVDF概念   649.872   -2.00   2.20  ... -2.07    13  中创环保    0.74   8.19\n396  397      可燃冰   989.282   -2.11   4.64  ... -0.96    12  中国石化   -0.15   6.68\n397  398      转基因  1139.540   -2.37   1.43  ... -1.75    13  康农种业   -0.33   9.03\n398  399       猪肉  2367.260   -2.53   9.65  ... -8.29    32  金字火腿    0.23   4.28\n399  400       养鸡  1048.980   -2.55   4.44  ... -4.79    22  春雪食品   -0.39   7.64\n[400 rows x 11 columns]\n```\n\n输出参数-3日、5日、10日和20日\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 序号    | int32   | -       |\n| 行业    | object  | -       |\n| 公司家数  | int64   | -       |\n| 行业指数  | float64 | -       |\n| 阶段涨跌幅 | object  | 注意单位: % |\n| 流入资金  | float64 | 注意单位: 亿 |\n| 流出资金  | float64 | 注意单位: 亿 |\n| 净额    | float64 | 注意单位: 亿 |\n\n接口示例-3日、5日、10日和20日\n\n```python\nimport akshare as ak\n\nstock_fund_flow_concept_df = ak.stock_fund_flow_concept(symbol=\"3日排行\")\nprint(stock_fund_flow_concept_df)\n```\n\n数据示例-3日、5日、10日和20日\n\n```\n     序号     行业  公司家数  行业指数  阶段涨跌幅  流入资金  流出资金 净额\n0      1   华为海思概念股    36  1750.27  11.45%  13.06  13.22 -0.16\n1      2  MR(混合现实)    59   797.57   7.68%  23.07  21.81  1.26\n2      3      智能音箱    49  1337.42   7.52%  26.52  26.17  0.35\n3      4       云游戏    25   780.74   7.45%   6.33   7.15 -0.82\n4      5      智能穿戴    94  2109.07   6.94%  45.96  43.13  2.82\n..   ...       ...   ...      ...     ...    ...    ...   ...\n394  395       禽流感    30  1800.47  -2.64%  19.05  26.21 -7.16\n395  396      毛发医疗    18   800.82  -2.78%   2.68   3.93 -1.25\n396  397        养鸡    22  1048.98  -3.20%   7.02   5.81  1.21\n397  398    PVDF概念    13   649.87  -3.40%   2.83   3.05 -0.23\n398  399        猪肉    32  2367.26  -3.63%  13.90  13.43  0.47\n[399 rows x 8 columns]\n```\n\n##### 行业资金流\n\n接口: stock_fund_flow_industry\n\n目标地址: http://data.10jqka.com.cn/funds/hyzjl/#refCountId=data_55f13c2c_254\n\n描述: 同花顺-数据中心-资金流向-行业资金流\n\n限量: 单次获取指定 symbol 的行业资金流数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                              |\n|--------|-----|-----------------------------------------------------------------|\n| symbol | str | symbol=\"即时\"; choice of {“即时”, \"3日排行\", \"5日排行\", \"10日排行\", \"20日排行\"} |\n\n输出参数-即时\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int32   | -       |\n| 行业      | object  | -       |\n| 行业指数    | float64 | -       |\n| 行业-涨跌幅  | object  | 注意单位: % |\n| 流入资金    | float64 | 注意单位: 亿 |\n| 流出资金    | float64 | 注意单位: 亿 |\n| 净额      | float64 | 注意单位: 亿 |\n| 公司家数    | float64 | -       |\n| 领涨股     | object  | -       |\n| 领涨股-涨跌幅 | object  | 注意单位: % |\n| 当前价     | float64 | -       |\n\n接口示例-即时\n\n```python\nimport akshare as ak\n\nstock_fund_flow_industry_df = ak.stock_fund_flow_industry(symbol=\"即时\")\nprint(stock_fund_flow_industry_df)\n```\n\n数据示例-即时\n\n```\n   序号  行业     行业指数  行业-涨跌幅 流入资金 流出资金 净额 公司家数 领涨股 领涨股-涨跌幅  当前价\n0    1  黑色家电  2572.370    3.49   7.13   7.41  -0.28     9  辰奕智能    19.99  42.50\n1    2  其他电子  7585.180    2.38  27.76  26.92   0.85    31  力源信息    20.04   6.11\n2    3    元件  7383.480    2.25  37.39  31.42   5.97    56  则成电子    24.20  28.18\n3    4  消费电子  5983.640    2.03  86.85  87.11  -0.26    95  凯旺科技    20.02  28.36\n4    5  医疗器械  8014.560    1.64  27.10  23.25   3.84   126  透景生命    20.02  14.15\n..  ..   ...       ...     ...    ...    ...    ...   ...   ...      ...    ...\n85  86  建筑材料  3105.260   -1.78  14.99  23.36  -8.36    74  扬子新材     8.83   3.08\n86  87  建筑装饰  2437.520   -1.85  27.42  37.43 -10.01   151  志特新材     5.51   8.23\n87  88   养殖业  1955.710   -2.17   7.22  13.98  -6.76    40  海利生物     0.73   6.93\n88  89  影视院线   972.325   -2.29   6.99  10.90  -3.91    21  捷成股份     0.27   3.76\n89  90   贵金属  2037.310   -2.42  12.46  19.62  -7.16    12  湖南黄金     1.40  15.89\n[90 rows x 11 columns]\n```\n\n输出参数-3日、5日、10日和20日\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 序号    | int32   | -       |\n| 行业    | object  | -       |\n| 公司家数  | int64   | -       |\n| 行业指数  | float64 | -       |\n| 阶段涨跌幅 | object  | 注意单位: % |\n| 流入资金  | float64 | 注意单位: 亿 |\n| 流出资金  | float64 | 注意单位: 亿 |\n| 净额    | float64 | 注意单位: 亿 |\n\n接口示例-3日、5日、10日和20日\n\n```python\nimport akshare as ak\n\nstock_fund_flow_industry_df = ak.stock_fund_flow_industry(symbol=\"3日排行\")\nprint(stock_fund_flow_industry_df)\n```\n\n数据示例-3日、5日、10日和20日\n\n```\n   序号     行业  公司家数  行业指数  阶段涨跌幅 流入资金 流出资金  净额\n0    1    消费电子    95  5983.64   8.39%  42.71  40.22   2.49\n1    2      游戏    25  5613.77   7.46%   8.01   9.16  -1.15\n2    3    其他电子    31  7585.18   6.50%  12.07  10.24   1.83\n3    4    黑色家电     9  2572.37   6.20%   2.90   2.68   0.22\n4    5   光学光电子   107  2677.80   5.71%  26.55  25.45   1.09\n..  ..     ...   ...      ...     ...    ...    ...    ...\n85  86      中药    72  2977.40  -2.65%  29.00  40.11 -11.11\n86  87     养殖业    40  1955.71  -2.71%  10.41  10.26   0.16\n87  88      白酒    20  2860.75  -2.74%  24.41  30.48  -6.07\n88  89  食品加工制造    65  3414.99  -3.16%   6.05   7.84  -1.79\n89  90     贵金属    12  2037.31  -3.32%  12.30  12.24   0.06\n[90 rows x 8 columns]\n```\n\n##### 大单追踪\n\n接口: stock_fund_flow_big_deal\n\n目标地址: https://data.10jqka.com.cn/funds/ddzz\n\n描述: 同花顺-数据中心-资金流向-大单追踪\n\n限量: 单次获取当前时点的所有大单追踪数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数-即时\n\n| 名称   | 类型      | 描述       |\n|------|---------|----------|\n| 成交时间 | object  | -        |\n| 股票代码 | int64   | -        |\n| 股票简称 | object  | -        |\n| 成交价格 | float64 | -        |\n| 成交量  | int64   | 注意单位: 股  |\n| 成交额  | float64 | 注意单位: 万元 |\n| 大单性质 | object  | -        |\n| 涨跌幅  | object  | -        |\n| 涨跌额  | object  | -        |\n\n接口示例-即时\n\n```python\nimport akshare as ak\n\nstock_fund_flow_big_deal_df = ak.stock_fund_flow_big_deal()\nprint(stock_fund_flow_big_deal_df)\n```\n\n数据示例\n\n```\n       成交时间   股票代码  股票简称   成交价格  ...    成交额  大单性质     涨跌幅   涨跌额\n0     2024-08-19 15:00:01  601668  中国建筑    5.67  ...  111.98    买盘   0.53%  0.03\n1     2024-08-19 15:00:01  688347  华虹公司   31.10  ...   82.61    买盘   0.71%  0.22\n2     2024-08-19 15:00:01  688223  晶科能源    6.98  ...   69.80    买盘  -0.57% -0.04\n3     2024-08-19 15:00:01  688223  晶科能源    6.98  ...   65.75    卖盘  -0.57% -0.04\n4     2024-08-19 15:00:01  688169  石头科技  198.91  ...  114.89    买盘  -4.83% -9.60\n...                   ...     ...   ...     ...  ...     ...   ...     ...   ...\n4995  2024-08-19 14:30:52  600487  亨通光电   13.46  ...  207.36    买盘  -1.68% -0.23\n4996  2024-08-19 14:30:52  688183  生益电子   19.90  ...   97.58    买盘  -1.24% -0.25\n4997  2024-08-19 14:30:50    2500  山西证券    4.95  ...  314.41    买盘   1.23%  0.06\n4998  2024-08-19 14:30:49  300152   新动力    1.92  ...   38.60    买盘  -0.52% -0.01\n4999  2024-08-19 14:30:48  301101  明月镜片   25.26  ...   52.35    买盘  -7.34% -1.85\n[5000 rows x 9 columns]\n```\n\n#### 东方财富\n\n##### 个股资金流\n\n接口: stock_individual_fund_flow\n\n目标地址: https://data.eastmoney.com/zjlx/detail.html\n\n描述: 东方财富网-数据中心-个股资金流向\n\n限量: 单次获取指定市场和股票的近 100 个交易日的资金流数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                 |\n|--------|-----|----------------------------------------------------|\n| stock  | str | stock=\"000425\"; 股票代码                               |\n| market | str | market=\"sh\"; 上海证券交易所: sh, 深证证券交易所: sz, 北京证券交易所: bj |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 日期         | object  | -       |\n| 收盘价        | float64 | -       |\n| 涨跌幅        | float64 | 注意单位: % |\n| 主力净流入-净额   | float64 | -       |\n| 主力净流入-净占比  | float64 | 注意单位: % |\n| 超大单净流入-净额  | float64 | -       |\n| 超大单净流入-净占比 | float64 | 注意单位: % |\n| 大单净流入-净额   | float64 | -       |\n| 大单净流入-净占比  | float64 | 注意单位: % |\n| 中单净流入-净额   | float64 | -       |\n| 中单净流入-净占比  | float64 | 注意单位: % |\n| 小单净流入-净额   | float64 | -       |\n| 小单净流入-净占比  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_individual_fund_flow_df = ak.stock_individual_fund_flow(stock=\"600094\", market=\"sh\")\nprint(stock_individual_fund_flow_df)\n```\n\n数据示例\n\n```\n    日期   收盘价   涨跌幅  ...  中单净流入-净占比    小单净流入-净额  小单净流入-净占比\n0    2023-03-31  3.13 -0.32  ...       4.02    240002.0       0.95\n1    2023-04-03  3.18  1.60  ...      -0.93    910076.0       2.50\n2    2023-04-04  3.13 -1.57  ...      10.87    929360.0       2.25\n3    2023-04-06  3.11 -0.64  ...      -4.87   5618110.0      17.43\n4    2023-04-07  3.15  1.29  ...      -7.44   -839635.0      -3.00\n..          ...   ...   ...  ...        ...         ...        ...\n96   2023-08-22  3.50 -0.57  ...       2.99  10665906.0      10.36\n97   2023-08-23  3.46 -1.14  ...       1.45   6542085.0       8.41\n98   2023-08-24  3.45 -0.29  ...       5.15  -4355064.0      -5.41\n99   2023-08-25  3.43 -0.58  ...      -1.51 -18759517.0     -22.13\n100  2023-08-28  3.51  2.33  ...      14.49  10409307.0       5.47\n[101 rows x 13 columns]\n```\n\n##### 个股资金流排名\n\n接口: stock_individual_fund_flow_rank\n\n目标地址: http://data.eastmoney.com/zjlx/detail.html\n\n描述: 东方财富网-数据中心-资金流向-排名\n\n限量: 单次获取指定类型的个股资金流排名数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                               |\n|-----------|-----|--------------------------------------------------|\n| indicator | str | indicator=\"今日\"; choice {\"今日\", \"3日\", \"5日\", \"10日\"} |\n\n输出参数-今日\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 序号           | int64   | -       |\n| 代码           | object  | -       |\n| 名称           | object  | -       |\n| 最新价          | float64 | -       |\n| 今日涨跌幅        | float64 | 注意单位: % |\n| 今日主力净流入-净额   | float64 | -       |\n| 今日主力净流入-净占比  | float64 | 注意单位: % |\n| 今日超大单净流入-净额  | float64 | -       |\n| 今日超大单净流入-净占比 | float64 | 注意单位: % |\n| 今日大单净流入-净额   | float64 | -       |\n| 今日大单净流入-净占比  | float64 | 注意单位: % |\n| 今日中单净流入-净额   | float64 | -       |\n| 今日中单净流入-净占比  | float64 | 注意单位: % |\n| 今日小单净流入-净额   | float64 | -       |\n| 今日小单净流入-净占比  | float64 | 注意单位: % |\n\n接口示例-今日\n\n```python\nimport akshare as ak\n\nstock_individual_fund_flow_rank_df = ak.stock_individual_fund_flow_rank(indicator=\"今日\")\nprint(stock_individual_fund_flow_rank_df)\n```\n\n数据示例-今日\n\n```\n    序号 代码    名称  ...  今日中单净流入-净占比   今日小单净流入-净额  今日小单净流入-净占比\n0    1  600196  复星医药  ...       -11.80 -554888208.0        -8.76\n1    2  601012  隆基股份  ...        -5.09 -284138560.0        -3.55\n2    3  000963  华东医药  ...        -6.39 -291504016.0        -4.76\n3    4  300986   N志特  ...         2.28 -416998433.0       -47.90\n4    5  300059  东方财富  ...        -4.01 -168403920.0        -3.02\n5    6  002460  赣锋锂业  ...        -4.44  -83612896.0        -1.32\n6    7  603799  华友钴业  ...        -4.30 -162641040.0        -3.89\n7    8  000908  景峰医药  ...        -8.53 -183772494.0       -12.59\n8    9  000519  中兵红箭  ...       -10.68 -149982694.0       -10.75\n9   10  300274  阳光电源  ...        -2.34 -158902688.0        -3.01\n10  11  600276  恒瑞医药  ...        -3.34 -135060768.0        -3.13\n11  12  002714  牧原股份  ...        -4.59 -174012720.0        -8.76\n12  13  002241  歌尔股份  ...        -4.76 -148783568.0        -6.22\n13  14  601127  小康股份  ...        -3.51 -130833968.0        -3.57\n14  15  002385   大北农  ...       -10.22 -128105833.0       -13.10\n15  16  003040   楚天龙  ...        -7.24 -134830833.0       -10.48\n16  17  600223  鲁商发展  ...        -5.69  -97029040.0        -4.48\n17  18  000650  仁和药业  ...       -12.98  -79890962.0        -7.68\n18  19  300601  康泰生物  ...        -4.51  -82006064.0        -2.83\n19  20  000928  中钢国际  ...        -8.78  -75598962.0        -4.99\n20  21  002176  江特电机  ...        -9.13 -102992833.0        -9.05\n```\n\n输出参数-3日\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 序号           | int64   | -       |\n| 代码           | object  | -       |\n| 名称           | object  | -       |\n| 最新价          | float64 | -       |\n| 3日涨跌幅        | float64 | 注意单位: % |\n| 3日主力净流入-净额   | float64 | -       |\n| 3日主力净流入-净占比  | float64 | 注意单位: % |\n| 3日超大单净流入-净额  | float64 | -       |\n| 3日超大单净流入-净占比 | float64 | 注意单位: % |\n| 3日大单净流入-净额   | float64 | -       |\n| 3日大单净流入-净占比  | float64 | 注意单位: % |\n| 3日中单净流入-净额   | float64 | -       |\n| 3日中单净流入-净占比  | float64 | 注意单位: % |\n| 3日小单净流入-净额   | float64 | -       |\n| 3日小单净流入-净占比  | float64 | 注意单位: % |\n\n接口示例-3日\n\n```python\nimport akshare as ak\n\nstock_individual_fund_flow_rank_df = ak.stock_individual_fund_flow_rank(indicator=\"3日\")\nprint(stock_individual_fund_flow_rank_df)\n```\n\n数据示例-3日\n\n```\n    序号      代码    名称  ...  3日中单净流入-净占比    3日小单净流入-净额  3日小单净流入-净占比\n0    1  600196  复星医药  ...        -9.33 -1.157038e+09        -6.84\n1    2  300059  东方财富  ...        -3.29 -7.832414e+08        -3.89\n2    3  002466  天齐锂业  ...        -3.91 -2.935912e+08        -1.63\n3    4  601012  隆基股份  ...        -2.84 -3.713241e+08        -2.14\n4    5  002304  洋河股份  ...        -5.98 -3.069602e+08        -4.01\n5    6  000963  华东医药  ...        -3.58 -1.615584e+08        -1.11\n6    7  300601  康泰生物  ...        -3.55 -3.172210e+08        -4.44\n7    8  002460  赣锋锂业  ...        -2.17 -1.881166e+08        -1.24\n8    9  603799  华友钴业  ...        -3.09 -2.247308e+08        -2.52\n9   10  300760  迈瑞医疗  ...        -7.66 -1.840590e+06        -0.03\n10  11  603259  药明康德  ...        -3.41 -1.396783e+08        -1.37\n11  12  300750  宁德时代  ...        -0.95 -2.482142e+08        -0.98\n12  13  688383   新益昌  ...         1.17 -4.520943e+08       -21.70\n13  14  300986   N志特  ...         2.28 -4.169984e+08       -47.90\n14  15  000001  平安银行  ...        -4.37 -1.960774e+08        -4.76\n15  16  600216  浙江医药  ...        -6.40 -1.923193e+08        -8.57\n16  17  002714  牧原股份  ...        -1.31 -2.559579e+08        -4.58\n17  18  600030  中信证券  ...        -2.19 -1.662703e+08        -2.24\n18  19  000650  仁和药业  ...       -10.18 -1.381347e+08        -7.78\n19  20  000718  苏宁环球  ...        -4.32 -1.313346e+08        -3.15\n20  21  002821   凯莱英  ...        -5.28 -1.838423e+08        -8.10\n```\n\n输出参数-5日\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 序号           | int64   | -       |\n| 代码           | object  | -       |\n| 名称           | object  | -       |\n| 最新价          | float64 | -       |\n| 5日涨跌幅        | float64 | 注意单位: % |\n| 5日主力净流入-净额   | float64 | -       |\n| 5日主力净流入-净占比  | float64 | 注意单位: % |\n| 5日超大单净流入-净额  | float64 | -       |\n| 5日超大单净流入-净占比 | float64 | 注意单位: % |\n| 5日大单净流入-净额   | float64 | -       |\n| 5日大单净流入-净占比  | float64 | 注意单位: % |\n| 5日中单净流入-净额   | float64 | -       |\n| 5日中单净流入-净占比  | float64 | 注意单位: % |\n| 5日小单净流入-净额   | float64 | -       |\n| 5日小单净流入-净占比  | float64 | 注意单位: % |\n\n接口示例-5日\n\n```python\nimport akshare as ak\n\nstock_individual_fund_flow_rank_df = ak.stock_individual_fund_flow_rank(indicator=\"5日\")\nprint(stock_individual_fund_flow_rank_df)\n```\n\n数据示例-5日\n\n```\n    序号      代码    名称  ...  5日中单净流入-净占比    5日小单净流入-净额  5日小单净流入-净占比\n0    1  600196  复星医药  ...        -7.51 -1.193192e+09        -5.48\n1    2  300979   C华利  ...        -7.16 -1.151424e+09        -9.62\n2    3  002304  洋河股份  ...        -5.52 -2.617723e+08        -2.48\n3    4  300760  迈瑞医疗  ...        -7.26 -3.271416e+06        -0.03\n4    5  300601  康泰生物  ...        -3.09 -4.497565e+08        -4.51\n5    6  300981   C中红  ...        -6.22 -1.023511e+08        -1.11\n6    7  603259  药明康德  ...        -3.23 -1.252767e+08        -0.76\n7    8  002027  分众传媒  ...        -3.80 -3.990743e+08        -5.94\n8    9  000928  中钢国际  ...        -5.31 -2.201884e+08        -3.79\n9   10  601012  隆基股份  ...        -1.66 -6.462818e+07        -0.24\n10  11  002142  宁波银行  ...        -5.03 -2.290891e+08        -4.35\n11  12  300059  东方财富  ...        -1.85  2.324636e+08         0.62\n12  13  000963  华东医药  ...        -2.00 -8.412000e+06        -0.04\n13  14  688383   新益昌  ...         1.17 -4.520943e+08       -21.70\n14  15  002241  歌尔股份  ...        -3.00  3.025771e+07         0.20\n15  16  000661  长春高新  ...        -4.94 -2.646385e+06        -0.03\n16  17  002821   凯莱英  ...        -5.35 -1.858551e+08        -4.39\n17  18  300986   N志特  ...         2.28 -4.169984e+08       -47.90\n18  19  300982   C苏文  ...         1.20 -4.231374e+08       -14.36\n19  20  002466  天齐锂业  ...        -2.37  1.762265e+08         0.75\n20  21  601919  中远海控  ...        -1.10 -1.222831e+08        -0.54\n```\n\n输出参数-10日\n\n| 名称            | 类型      | 描述      |\n|---------------|---------|---------|\n| 序号            | int32   | -       |\n| 代码            | object  | -       |\n| 名称            | object  | -       |\n| 最新价           | float64 | -       |\n| 10日涨跌幅        | float64 | 注意单位: % |\n| 10日主力净流入-净额   | float64 | -       |\n| 10日主力净流入-净占比  | float64 | 注意单位: % |\n| 10日超大单净流入-净额  | float64 | -       |\n| 10日超大单净流入-净占比 | float64 | 注意单位: % |\n| 10日大单净流入-净额   | float64 | -       |\n| 10日大单净流入-净占比  | float64 | 注意单位: % |\n| 10日中单净流入-净额   | float64 | -       |\n| 10日中单净流入-净占比  | float64 | 注意单位: % |\n| 10日小单净流入-净额   | float64 | -       |\n| 10日小单净流入-净占比  | float64 | 注意单位: % |\n\n接口示例-10日\n\n```python\nimport akshare as ak\n\nstock_individual_fund_flow_rank_df = ak.stock_individual_fund_flow_rank(indicator=\"10日\")\nprint(stock_individual_fund_flow_rank_df)\n```\n\n数据示例-10日\n\n```\n    序号      代码     名称  ...  10日中单净流入-净占比   10日小单净流入-净额  10日小单净流入-净占比\n0    1  600196   复星医药  ...         -6.51 -1.620072e+09         -4.96\n1    2  002241   歌尔股份  ...         -4.37 -1.504247e+09         -3.82\n2    3  300059   东方财富  ...         -1.28 -1.498377e+09         -2.20\n3    4  300979    C华利  ...         -7.16 -1.151424e+09         -9.62\n4    5  002304   洋河股份  ...         -4.77 -5.633588e+08         -2.79\n5    6  002027   分众传媒  ...         -4.08 -9.081865e+08         -6.91\n6    7  300015   爱尔眼科  ...         -3.03 -5.969998e+08         -2.28\n7    8  300760   迈瑞医疗  ...         -6.79 -4.882262e+06         -0.02\n8    9  603259   药明康德  ...         -2.87 -3.367873e+08         -1.09\n9   10  601012   隆基股份  ...         -1.47 -2.309467e+08         -0.39\n10  11  002415   海康威视  ...         -3.18 -4.275869e+08         -2.12\n11  12  002142   宁波银行  ...         -5.86 -3.757830e+08         -3.51\n12  13  300601   康泰生物  ...         -3.19 -4.968827e+08         -3.39\n13  14  603799   华友钴业  ...         -2.14 -3.544022e+08         -1.37\n14  15  000661   长春高新  ...         -5.88 -4.703516e+06         -0.03\n15  16  000858  五 粮 液  ...         -2.30  3.079020e+08          0.62\n16  17  600570   恒生电子  ...         -4.15 -3.146686e+08         -3.05\n17  18  300981    C中红  ...         -6.22 -1.023511e+08         -1.11\n18  19  002460   赣锋锂业  ...         -2.59  3.715398e+08          0.93\n19  20  300142   沃森生物  ...         -1.47 -9.540762e+07         -0.25\n20  21  300347   泰格医药  ...         -4.72 -1.195595e+08         -1.08\n```\n\n##### 大盘资金流\n\n接口: stock_market_fund_flow\n\n目标地址: https://data.eastmoney.com/zjlx/dpzjlx.html\n\n描述: 东方财富网-数据中心-资金流向-大盘\n\n限量: 单次获取大盘资金流向历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 日期         | object  | -       |\n| 上证-收盘价     | float64 | -       |\n| 上证-涨跌幅     | float64 | 注意单位: % |\n| 深证-收盘价     | float64 | -       |\n| 深证-涨跌幅     | float64 | 注意单位: % |\n| 主力净流入-净额   | float64 | -       |\n| 主力净流入-净占比  | float64 | 注意单位: % |\n| 超大单净流入-净额  | float64 | -       |\n| 超大单净流入-净占比 | float64 | 注意单位: % |\n| 大单净流入-净额   | float64 | -       |\n| 大单净流入-净占比  | float64 | 注意单位: % |\n| 中单净流入-净额   | float64 | -       |\n| 中单净流入-净占比  | float64 | 注意单位: % |\n| 小单净流入-净额   | float64 | -       |\n| 小单净流入-净占比  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_market_fund_flow_df = ak.stock_market_fund_flow()\nprint(stock_market_fund_flow_df)\n```\n\n数据示例\n\n```\n       日期      上证-收盘价 上证-涨跌幅  ...  中单净流入-净占比  小单净流入-净额  小单净流入-净占比\n0    2024-02-23  3004.88    0.55  ...      -0.17  5.147947e+09       0.56\n1    2024-02-26  2977.02   -0.93  ...       0.08  1.855043e+10       1.88\n2    2024-02-27  3015.48    1.29  ...      -1.05 -3.641864e+09      -0.37\n3    2024-02-28  2957.85   -1.91  ...       0.12  7.204130e+10       5.31\n4    2024-02-29  3015.17    1.94  ...      -1.01 -9.629499e+09      -0.91\n..          ...      ...     ...  ...        ...           ...        ...\n116  2024-08-13  2867.95    0.34  ...      -0.39  9.309733e+09       1.95\n117  2024-08-14  2850.65   -0.60  ...       0.02  8.340414e+09       1.75\n118  2024-08-15  2877.36    0.94  ...      -0.97  7.407305e+09       1.25\n119  2024-08-16  2879.43    0.07  ...       0.07  1.201517e+10       2.03\n120  2024-08-19  2893.67    0.49  ...      -0.25  1.239419e+10       2.17\n[121 rows x 15 columns]\n```\n\n##### 板块资金流排名\n\n接口: stock_sector_fund_flow_rank\n\n目标地址: https://data.eastmoney.com/bkzj/hy.html\n\n描述: 东方财富网-数据中心-资金流向-板块资金流-排名\n\n限量: 单次获取指定板块的指定期限的资金流排名数据\n\n输入参数\n\n| 名称          | 类型  | 描述                                                         |\n|-------------|-----|------------------------------------------------------------|\n| indicator   | str | indicator=\"今日\"; choice of {\"今日\", \"5日\", \"10日\"}              |\n| sector_type | str | sector_type=\"行业资金流\"; choice of {\"行业资金流\", \"概念资金流\", \"地域资金流\"} |\n\n输出参数-行业资金流-今日\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 序号         | int64   | -       |\n| 名称         | object  | -       |\n| 今日涨跌幅      | float64 | 注意单位: % |\n| 主力净流入-净额   | float64 | -       |\n| 主力净流入-净占比  | float64 | 注意单位: % |\n| 超大单净流入-净额  | float64 | -       |\n| 超大单净流入-净占比 | float64 | 注意单位: % |\n| 大单净流入-净额   | float64 | -       |\n| 大单净流入-净占比  | float64 | 注意单位: % |\n| 中单净流入-净额   | float64 | -       |\n| 中单净流入-净占比  | float64 | 注意单位: % |\n| 小单净流入-净额   | float64 | -       |\n| 小单净流入-净占比  | float64 | 注意单位: % |\n| 主力净流入最大股   | object  | -       |\n\n接口示例-行业资金流-今日\n\n```python\nimport akshare as ak\n\nstock_sector_fund_flow_rank_df = ak.stock_sector_fund_flow_rank(indicator=\"今日\", sector_type=\"行业资金流\")\nprint(stock_sector_fund_flow_rank_df)\n```\n\n数据示例-行业资金流-今日\n\n```\n    序号   名称  今日涨跌幅  ... 今日小单净流入-净额  今日小单净流入-净占比  今日主力净流入最大股\n0    1    小金属   2.36  ... -9.101186e+08        -6.32        中国稀土\n1    2   有色金属   1.96  ... -1.032419e+09        -5.49        铜陵有色\n2    3    贵金属   3.94  ... -4.187458e+08        -4.25        紫金矿业\n3    4   交运设备   4.51  ... -2.841601e+08        -3.35        中国通号\n4    5   钢铁行业   1.69  ... -3.279502e+08        -3.82        包钢股份\n..  ..    ...    ...  ...           ...          ...         ...\n81  82   文化传媒  -2.23  ...  2.344617e+09         7.19         人民网\n82  83    半导体  -2.20  ...  2.329264e+09         5.38        富创精密\n83  84  互联网服务  -2.39  ...  3.482296e+09         7.76        荣联科技\n84  85   软件开发  -2.82  ...  3.012122e+09         6.56        云赛智联\n85  86   通信设备  -2.24  ...  3.339649e+09         7.95        精伦电子\n[86 rows x 14 columns]\n```\n\n##### 主力净流入排名\n\n接口: stock_main_fund_flow\n\n目标地址: https://data.eastmoney.com/zjlx/list.html\n\n描述: 东方财富网-数据中心-资金流向-主力净流入排名\n\n限量: 单次获取指定 symbol 的主力净流入排名数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                     |\n|--------|-----|----------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"全部股票\"；choice of {\"全部股票\", \"沪深A股\", \"沪市A股\", \"科创板\", \"深市A股\", \"创业板\", \"沪市B股\", \"深市B股\"} |\n\n输出参数\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 序号           | int64   | -       |\n| 代码           | object  | -       |\n| 名称           | object  | -       |\n| 最新价          | float64 | -       |\n| 今日排行榜-主力净占比  | float64 | 注意单位: % |\n| 今日排行榜-今日排名   | float64 | -       |\n| 今日排行榜-今日涨跌   | float64 | 注意单位: % |\n| 5日排行榜-主力净占比  | float64 | 注意单位: % |\n| 5日排行榜-5日排名   | int64   | -       |\n| 5日排行榜-5日涨跌   | float64 | 注意单位: % |\n| 10日排行榜-主力净占比 | float64 | 注意单位: % |\n| 10日排行榜-10日排名 | int64   | -       |\n| 10日排行榜-10日涨跌 | float64 | 注意单位: % |\n| 所属板块         | object  | -       |\n\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_main_fund_flow_df = ak.stock_main_fund_flow(symbol=\"全部股票\")\nprint(stock_main_fund_flow_df)\n```\n\n数据示例\n\n```\n        序号  代码     名称  ...  10日排行榜-10日排名  10日排行榜-10日涨跌   所属板块\n0        0  200017   深中华B  ...            10          7.77   交运设备\n1        1  001366   播恩集团  ...           124         22.84   农牧饲渔\n2        2  900943   开开Ｂ股  ...            27          2.88   医药商业\n3        3  200771   杭汽轮Ｂ  ...           361          0.28   通用设备\n4        4  002861   瀛通通讯  ...            98         23.18   消费电子\n    ...     ...    ...  ...           ...           ...    ...\n5198  5198  301536   星宸科技  ...          1187          0.00   电子元件\n5199  5199  002089  *ST新海  ...          1180          0.00   通信设备\n5200  5200  001389   广合科技  ...          1185          0.00   电子元件\n5201  5201  001359   平安电工  ...          1184          0.00  非金属材料\n5202  5202  000005   ST星源  ...          1179          0.00   环保行业\n[5203 rows x 14 columns]\n```\n\n##### 行业个股资金流\n\n接口: stock_sector_fund_flow_summary\n\n目标地址: https://data.eastmoney.com/bkzj/BK1034.html\n\n描述: 东方财富网-数据中心-资金流向-行业资金流-xx行业个股资金流\n\n限量: 单次获取指定 symbol 的个股资金流\n\n输入参数\n\n| 名称        | 类型  | 描述                                            |\n|-----------|-----|-----------------------------------------------|\n| symbol    | str | symbol=\"电源设备\"                                 |\n| indicator | str | indicator=\"今日\"; choice of {\"今日\", \"5日\", \"10日\"} |\n\n输出参数-今日\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 序号           | int64   | -       |\n| 代码           | object  | -       |\n| 名称           | object  | -       |\n| 最新价          | float64 | -       |\n| 今日涨跌幅        | float64 | 注意单位: % |\n| 今日主力净流入-净额   | float64 | -       |\n| 今日主力净流入-净占比  | float64 | 注意单位: % |\n| 今日超大单净流入-净额  | float64 | -       |\n| 今日超大单净流入-净占比 | float64 | 注意单位: % |\n| 今日大单净流入-净额   | float64 | -       |\n| 今日大单净流入-净占比  | float64 | 注意单位: % |\n| 今日中单净流入-净额   | float64 | -       |\n| 今日中单净流入-净占比  | float64 | 注意单位: % |\n| 今日小单净流入-净额   | float64 | -       |\n| 今日小单净流入-净占比  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sector_fund_flow_summary_df = ak.stock_sector_fund_flow_summary(symbol=\"电源设备\", indicator=\"今日\")\nprint(stock_sector_fund_flow_summary_df)\n```\n\n数据示例\n\n```\n    序号  代码     名称    最新价  ...  今日中单净流入-净额  今日中单净流入-净占比  今日小单净流入-净额  今日小单净流入-净占比\n0    1  002665   首航高科   2.38  ... -33548194.0        -6.94 -41505162.0        -8.59\n1    2  300870    欧陆通  46.95  ...  -7415353.0        -2.54 -11275570.0        -3.86\n2    3  002851   麦格米特  25.70  ...  -1949180.0        -1.29 -14834710.0        -9.81\n3    4  601727   上海电气   4.22  ...  -7677061.0        -6.71  -1779576.0        -1.56\n4    5  300693   盛弘股份  29.95  ...  -2055055.0        -0.66  -4721271.0        -1.52\n5    6  002335   科华数据  27.84  ...   3145038.0         0.75  -7959318.0        -1.89\n6    7  300376    易事特   6.13  ...  -5406549.0        -6.38    737086.0         0.87\n7    8  301386   未来电器  20.79  ...    589994.0         0.78  -4472460.0        -5.88\n8    9  002364   中恒电气   5.98  ...   -713101.0        -1.94  -2889873.0        -7.86\n9   10  688551    科威尔  53.96  ...  -1881214.0        -4.68    273893.0         0.68\n10  11  300105   龙源技术   5.69  ...   -634763.0        -1.44   -438132.0        -1.00\n11  12  301327   华宝新能  56.47  ...   -894989.0        -2.22    431792.0         1.07\n12  13  688719   爱科赛博  57.91  ...   1827068.0         7.46   -938083.0        -3.83\n13  14  300820   英杰电气  49.10  ...   4970648.0         2.22  -3876803.0        -1.73\n14  15  300491   通合科技  18.80  ...   -372862.0        -0.65   1477839.0         2.58\n15  16  002227  奥 特 迅   9.03  ...  -1979752.0        -4.66   3161510.0         7.43\n16  17  300153   科泰电源   6.12  ...  -1515565.0        -6.23   2736469.0        11.25\n17  18  600202    哈空调   4.53  ...    819676.0         3.08    564984.0         2.12\n18  19  002630   华西能源   2.37  ...  -2249478.0        -1.68   3763541.0         2.82\n19  20  301516    中远通  22.87  ...  -1230094.0        -0.61   3600893.0         1.78\n20  21  600405    动力源   4.48  ...  -1001268.0        -1.43   4608713.0         6.57\n21  22  600475   华光环能  11.07  ...   2154127.0         1.78   1958723.0         1.62\n22  23  300593    新雷能  10.52  ... -14577276.0       -13.04  21502506.0        19.23\n23  24  002534   西子洁能  10.36  ...   3695777.0         6.81   3304816.0         6.09\n24  25  300713    英可瑞  13.95  ...   1636964.0         1.93   6529631.0         7.70\n25  26  002255   海陆重工   5.03  ...   5416980.0         6.22   2929205.0         3.36\n26  27  002366   融发核电   4.48  ...   6440715.0         6.28   3416059.0         3.33\n27  28  600875   东方电气  16.39  ...   5033565.0         2.47  16389039.0         8.03\n28  29  002518    科士达  24.15  ...   1447020.0         0.53  22734013.0         8.32\n[29 rows x 15 columns]\n```\n\n##### 行业历史资金流\n\n接口: stock_sector_fund_flow_hist\n\n目标地址: https://data.eastmoney.com/bkzj/BK1034.html\n\n描述: 东方财富网-数据中心-资金流向-行业资金流-行业历史资金流\n\n限量: 单次获取指定行业的行业历史资金流数据\n\n输入参数\n\n| 名称     | 类型  | 描述            |\n|--------|-----|---------------|\n| symbol | str | symbol=\"汽车服务\" |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 日期         | object  | 注意单位: % |\n| 主力净流入-净额   | float64 | -       |\n| 主力净流入-净占比  | float64 | 注意单位: % |\n| 超大单净流入-净额  | float64 | -       |\n| 超大单净流入-净占比 | float64 | 注意单位: % |\n| 大单净流入-净额   | float64 | -       |\n| 大单净流入-净占比  | float64 | 注意单位: % |\n| 中单净流入-净额   | float64 | -       |\n| 中单净流入-净占比  | float64 | 注意单位: % |\n| 小单净流入-净额   | float64 | -       |\n| 小单净流入-净占比  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sector_fund_flow_hist_df = ak.stock_sector_fund_flow_hist(symbol=\"汽车服务\")\nprint(stock_sector_fund_flow_hist_df)\n```\n\n数据示例\n\n```\n      日期    主力净流入-净额  主力净流入-净占比  ...  中单净流入-净占比 小单净流入-净额  小单净流入-净占比\n0    2024-08-20 -54471010.0     -10.09  ...       2.28  37641239.0       6.97\n1    2024-08-21  10178690.0       1.91  ...      -0.79 -10308872.0      -1.94\n2    2024-08-22 -44754582.0      -8.39  ...       1.49  32534534.0       6.10\n3    2024-08-23 -27649222.0      -6.52  ...      -0.86  29341810.0       6.92\n4    2024-08-26 -42767862.0     -10.11  ...      -2.63  53748702.0      12.70\n..          ...         ...        ...  ...        ...         ...        ...\n116  2025-02-18 -93269892.0      -6.56  ...       1.78  58625760.0       4.12\n117  2025-02-19  21681328.0       1.51  ...       1.97 -32209872.0      -2.25\n118  2025-02-20  11260284.0       0.89  ...       0.43  -6260576.0      -0.50\n119  2025-02-21 -81443762.0      -5.66  ...       3.29  47217792.0       3.28\n120  2025-02-24  20329299.0       1.44  ...       1.47 -58079088.0      -4.12\n[121 rows x 11 columns]\n```\n\n##### 概念历史资金流\n\n接口: stock_concept_fund_flow_hist\n\n目标地址: https://data.eastmoney.com/bkzj/BK0574.html\n\n描述: 东方财富网-数据中心-资金流向-概念资金流-概念历史资金流\n\n限量: 单次获取指定 symbol 的近期概念历史资金流数据\n\n输入参数\n\n| 名称     | 类型  | 描述            |\n|--------|-----|---------------|\n| symbol | str | symbol=\"数据要素\" |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 日期         | object  | 注意单位: % |\n| 主力净流入-净额   | float64 | -       |\n| 主力净流入-净占比  | float64 | 注意单位: % |\n| 超大单净流入-净额  | float64 | -       |\n| 超大单净流入-净占比 | float64 | 注意单位: % |\n| 大单净流入-净额   | float64 | -       |\n| 大单净流入-净占比  | float64 | 注意单位: % |\n| 中单净流入-净额   | float64 | -       |\n| 中单净流入-净占比  | float64 | 注意单位: % |\n| 小单净流入-净额   | float64 | -       |\n| 小单净流入-净占比  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_concept_fund_flow_hist_df = ak.stock_concept_fund_flow_hist(symbol=\"数据要素\")\nprint(stock_concept_fund_flow_hist_df)\n```\n\n数据示例\n\n```\n      日期      主力净流入-净额  主力净流入-净占比  ... 中单净流入-净占比 小单净流入-净额  小单净流入-净占比\n0    2024-08-20 -6.313736e+08      -4.65  ...      -1.32  8.085588e+08       5.96\n1    2024-08-21 -3.658787e+08      -2.77  ...      -0.68  4.585833e+08       3.47\n2    2024-08-22 -8.680331e+08      -6.05  ...      -1.09  1.004540e+09       7.00\n3    2024-08-23 -1.840573e+08      -1.41  ...      -2.69  5.319882e+08       4.07\n4    2024-08-26 -1.560898e+08      -1.42  ...      -2.13  3.791972e+08       3.44\n..          ...           ...        ...  ...        ...           ...        ...\n116  2025-02-18 -1.405755e+10      -8.92  ...       1.16  1.216662e+10       7.72\n117  2025-02-19 -9.526664e+08      -0.73  ...      -0.99  2.248251e+09       1.71\n118  2025-02-20 -5.894632e+09      -4.55  ...       0.36  5.343512e+09       4.12\n119  2025-02-21  2.832990e+09       1.60  ...      -1.23 -5.548521e+08      -0.31\n120  2025-02-24 -1.108665e+10      -7.88  ...       1.80  8.521074e+09       6.06\n[121 rows x 11 columns]\n```\n\n### 筹码分布\n\n接口: stock_cyq_em\n\n目标地址: https://quote.eastmoney.com/concept/sz000001.html\n\n描述: 东方财富网-概念板-行情中心-日K-筹码分布\n\n限量: 单次返回指定 symbol 和 adjust 的近 90 个交易日数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                           |\n|--------|-----|--------------------------------------------------------------|\n| symbol | str | symbol=\"000001\"; 股票代码                                        |\n| adjust | str | adjust=\"\"; choice of {\"qfq\": \"前复权\", \"hfq\": \"后复权\", \"\": \"不复权\"} |\n\n输出参数\n\n| 名称     | 类型      | 描述 |\n|--------|---------|----|\n| 日期     | object  | -  |\n| 获利比例   | float64 | -  |\n| 平均成本   | float64 | -  |\n| 90成本-低 | float64 | -  |\n| 90成本-高 | float64 | -  |\n| 90集中度  | float64 | -  |\n| 70成本-低 | float64 | -  |\n| 70成本-高 | float64 | -  |\n| 70集中度  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_cyq_em_df = ak.stock_cyq_em(symbol=\"000001\", adjust=\"\")\nprint(stock_cyq_em_df)\n```\n\n数据示例\n\n```\n      日期      获利比例   平均成本 90成本-低  ...  90集中度  70成本-低  70成本-高  70集中度\n0   2023-08-30  0.002484  12.09   11.23  ...  0.081965   11.36   12.87  0.062519\n1   2023-08-31  0.002459  12.09   11.21  ...  0.082870   11.36   12.85  0.061726\n2   2023-09-01  0.146772  12.07   11.21  ...  0.082102   11.34   12.85  0.062625\n3   2023-09-04  0.267725  12.05   11.21  ...  0.082102   11.34   12.85  0.062625\n4   2023-09-05  0.186573  12.05   11.21  ...  0.082102   11.34   12.85  0.062625\n..         ...       ...    ...     ...  ...       ...     ...     ...       ...\n85  2024-01-05  0.103536  11.29    9.16  ...  0.174579    9.44   12.59  0.143242\n86  2024-01-08  0.034893  11.29    9.16  ...  0.173302    9.40   12.59  0.145025\n87  2024-01-09  0.061026  11.29    9.16  ...  0.173302    9.37   12.59  0.146813\n88  2024-01-10  0.006555  11.29    9.16  ...  0.173302    9.37   12.59  0.146813\n89  2024-01-11  0.074399  11.25    9.16  ...  0.173302    9.33   12.56  0.147273\n[90 rows x 9 columns]\n```\n\n### 基本面数据\n\n#### 股东大会\n\n接口: stock_gddh_em\n\n目标地址: https://data.eastmoney.com/gddh/\n\n描述: 东方财富网-数据中心-股东大会\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称         | 类型     | 描述 |\n|------------|--------|----|\n| 代码         | object | -  |\n| 简称         | object | -  |\n| 股东大会名称     | object | -  |\n| 召开开始日      | object | -  |\n| 股权登记日      | object | -  |\n| 现场登记日      | object | -  |\n| 网络投票时间-开始日 | object | -  |\n| 网络投票时间-结束日 | object | -  |\n| 决议公告日      | object | -  |\n| 公告日        | object | -  |\n| 序列号        | object | -  |\n| 提案         | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gddh_em_df = ak.stock_gddh_em()\nprint(stock_gddh_em_df)\n```\n\n数据示例\n\n```\n       代码     简称  ...     序列号                                                 提案\n0     603131   上海沪工  ...  209796                                 1、关于提名公司独立董事候选人的议案\n1     600252   中恒集团  ...  209759  1、广西梧州中恒集团股份有限公司关于控股子公司莱美药业为其参股公司康德赛借款提供担保展期的议...\n2     300426   唐德影视  ...  209760                     1、《关于接受控股股东担保并向其提供反担保暨关联交易的议案》\n3     300887   谱尼测试  ...  209756                            1、《关于使用闲置募集资金进行现金管理的议案》\n4     002212    天融信  ...  209757                     1、《关于公司为全资孙公司银行综合授信提供担保总额度的议案》\n...      ...    ...  ...     ...                                                ...\n5021  002113  *ST天润  ...  181437  1、审议关于《2022年度董事会工作报告》的议案、审议关于《2022年年度报告及摘要》的议案...\n5022  002118  *ST紫鑫  ...  181461                            1、《关于提名选举第八届董事会独立董事的议案》\n5023  600777   ST新潮  ...  173337  1、《关于董事会提前换届选举非独立董事的议案》、《关于董事会提前换届选举独立董事的议案》、《...\n5024  600739   辽宁成大  ...   35446  1、董事会工作报告\\n2、监事会工作报告\\n3、公司2011年年度报告全文及摘要\\n4、公司...\n5025  600739   辽宁成大  ...   35446  1、董事会工作报告\\n2、监事会工作报告\\n3、公司2011年年度报告全文及摘要\\n4、公司...\n[5026 rows x 12 columns]\n```\n\n#### 重大合同\n\n接口: stock_zdhtmx_em\n\n目标地址: https://data.eastmoney.com/zdht/mx.html\n\n描述: 东方财富网-数据中心-重大合同-重大合同明细\n\n限量: 单次返回指定 start_date 和 end_date 的所有数据\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| start_date | str | start_date=\"20200819\" |\n| end_date   | str | end_date=\"20230819\"   |\n\n输出参数\n\n| 名称            | 类型      | 描述 |\n|---------------|---------|----|\n| 序号            | int64   | -  |\n| 股票代码          | object  | -  |\n| 股票简称          | object  | -  |\n| 签署主体          | object  | -  |\n| 签署主体-与上市公司关系  | object  | -  |\n| 其他签署方         | object  | -  |\n| 其他签署方-与上市公司关系 | object  | -  |\n| 合同类型          | object  | -  |\n| 合同名称          | object  | -  |\n| 合同金额          | float64 | -  |\n| 上年度营业收入       | float64 | -  |\n| 占上年度营业收入比例    | float64 | -  |\n| 最新财务报表的营业收入   | float64 | -  |\n| 签署日期          | object  | -  |\n| 公告日期          | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zdhtmx_em_df = ak.stock_zdhtmx_em(start_date=\"20220819\", end_date=\"20230819\")\nprint(stock_zdhtmx_em_df)\n```\n\n数据示例\n\n```\n      序号  股票代码  股票简称  ... 最新财务报表的营业收入 签署日期 公告日期\n0        1  688516   奥特维  ...           NaN  NaT  2023-08-18\n1        2  688132  邦彦技术  ...           NaN  NaT  2023-08-18\n2        3  831526  凯华材料  ...  5.101723e+07  NaT  2023-08-17\n3        4  603085  天成自控  ...           NaN  NaT  2023-08-17\n4        5  300345  华民股份  ...           NaN  NaT  2023-08-17\n...    ...     ...   ...  ...           ...  ...         ...\n1012  1013  300197  节能铁汉  ...  2.434768e+09  NaT  2022-08-22\n1013  1014  688516   奥特维  ...           NaN  NaT  2022-08-20\n1014  1015  688022  瀚川智能  ...           NaN  NaT  2022-08-19\n1015  1016  603815  交建股份  ...           NaN  NaT  2022-08-19\n1016  1017  603815  交建股份  ...           NaN  NaT  2022-08-19\n[1017 rows x 15 columns]\n```\n\n#### 个股研报\n\n接口: stock_research_report_em\n\n目标地址: https://data.eastmoney.com/report/stock.jshtml\n\n描述: 东方财富网-数据中心-研究报告-个股研报\n\n限量: 单次返回指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| symbol | str | symbol=\"000001\" |\n\n输出参数\n\n| 名称            | 类型      | 描述 |\n|---------------|---------|----|\n| 序号            | int64   | -  |\n| 股票代码          | object  | -  |\n| 股票简称          | object  | -  |\n| 报告名称          | object  | -  |\n| 东财评级          | object  | -  |\n| 机构            | object  | -  |\n| 近一月个股研报数      | int64   | -  |\n| 2024-盈利预测-收益  | float64 | -  |\n| 2024-盈利预测-市盈率 | float64 | -  |\n| 2025-盈利预测-收益  | float64 | -  |\n| 2025-盈利预测-市盈率 | float64 | -  |\n| 2026-盈利预测-收益  | float64 | -  |\n| 2026-盈利预测-市盈率 | float64 | -  |\n| 行业            | object  | -  |\n| 日期            | object  | -  |\n| 报告PDF链接       | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_research_report_em_df = ak.stock_research_report_em(symbol=\"000001\")\nprint(stock_research_report_em_df)\n```\n\n数据示例\n\n```\n    序号    股票代码  ...  日期                           报告PDF链接\n0      1  000001  ...  2025-01-10  https://pdf.dfcfw.com/pdf/H3_AP202501101641890...\n1      2  000001  ...  2024-10-22  https://pdf.dfcfw.com/pdf/H3_AP202410221640400...\n2      3  000001  ...  2024-10-22  https://pdf.dfcfw.com/pdf/H3_AP202410221640398...\n3      4  000001  ...  2024-10-20  https://pdf.dfcfw.com/pdf/H3_AP202410201640374...\n4      5  000001  ...  2024-10-19  https://pdf.dfcfw.com/pdf/H3_AP202410191640373...\n..   ...     ...  ...         ...                                                ...\n272  273  000001  ...  2017-03-22  https://pdf.dfcfw.com/pdf/H3_AP201703220427468...\n273  274  000001  ...  2017-03-20  https://pdf.dfcfw.com/pdf/H3_AP201703200421759...\n274  275  000001  ...  2017-03-17  https://pdf.dfcfw.com/pdf/H3_AP201703170415156...\n275  276  000001  ...  2017-03-07  https://pdf.dfcfw.com/pdf/H3_AP201705190591661...\n276  277  000001  ...  2017-02-03  https://pdf.dfcfw.com/pdf/H3_AP201702030311575...\n[277 rows x 16 columns]\n```\n\n#### 沪深京 A 股公告\n\n接口: stock_notice_report\n\n目标地址: https://data.eastmoney.com/notices/hsa/5.html\n\n描述: 东方财富网-数据中心-公告大全-沪深京 A 股公告\n\n限量: 单次获取指定 symbol 和 date 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                      |\n|--------|-----|-----------------------------------------------------------------------------------------|\n| symbol | str | symbol='财务报告'; choice of {\"全部\", \"重大事项\", \"财务报告\", \"融资公告\", \"风险提示\", \"资产重组\", \"信息变更\", \"持股变动\"} |\n| date   | str | date=\"20220511\"; 指定日期                                                                   |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| 代码   | object | -   |\n| 名称   | object | -   |\n| 公告标题 | object | -   |\n| 公告类型 | object | -   |\n| 公告日期 | object | -   |\n| 网址   | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_notice_report_df = ak.stock_notice_report(symbol='财务报告', date=\"20240613\")\nprint(stock_notice_report_df)\n```\n\n数据示例\n\n```\n      代码  ...                                       网址\n0    123122  ...  https://data.eastmoney.com/notices/detail/1231...\n1    123107  ...  https://data.eastmoney.com/notices/detail/1231...\n2    300941  ...  https://data.eastmoney.com/notices/detail/3009...\n3    300689  ...  https://data.eastmoney.com/notices/detail/3006...\n4    300854  ...  https://data.eastmoney.com/notices/detail/3008...\n..      ...  ...                                                ...\n134  000159  ...  https://data.eastmoney.com/notices/detail/0001...\n135  688478  ...  https://data.eastmoney.com/notices/detail/6884...\n136  688513  ...  https://data.eastmoney.com/notices/detail/6885...\n137  600583  ...  https://data.eastmoney.com/notices/detail/6005...\n138  001301  ...  https://data.eastmoney.com/notices/detail/0013...\n[139 rows x 6 columns]\n```\n\n#### 财务报表-新浪\n\n接口: stock_financial_report_sina\n\n目标地址: https://vip.stock.finance.sina.com.cn/corp/go.php/vFD_FinanceSummary/stockid/600600/displaytype/4.phtml?source=fzb&qq-pf-to=pcqq.group\n\n描述: 新浪财经-财务报表-三大报表\n\n限量: 单次获取指定报表的所有年份数据的历史数据\n\n注意: 原始数据中有 `国内票证结算` 和 `内部应收款` 字段重, 返回数据中已经剔除\n\n输入参数\n\n| 名称     | 类型  | 描述                                                  |\n|--------|-----|-----------------------------------------------------|\n| stock  | str | stock=\"sh600600\"; 带市场标识的股票代码                        |\n| symbol | str | symbol=\"现金流量表\"; choice of {\"资产负债表\", \"利润表\", \"现金流量表\"} |\n\n输出参数\n\n| 名称   | 类型     | 描述   |\n|------|--------|------|\n| 报告日  | object | 报告日期 |\n| 流动资产 | object | -    |\n| ...  | object | -    |\n| 类型   | object | -    |\n| 更新日期 | object | -    |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_financial_report_sina_df = ak.stock_financial_report_sina(stock=\"sh600600\", symbol=\"资产负债表\")\nprint(stock_financial_report_sina_df)\n```\n\n数据示例\n\n```\n      报告日 流动资产           货币资金  ...   币种    类型      更新日期\n0   20230331  NaN  15554422004.0  ...  CNY  合并期末  2023-04-24T18:05:05\n1   20221231  NaN  17854931855.0  ...  CNY  合并期末  2023-03-22T20:50:09\n2   20220930  NaN  17045567340.0  ...  CNY  合并期末  2022-10-26T17:20:07\n3   20220630  NaN  17587197778.0  ...  CNY  合并期末  2022-08-25T21:25:04\n4   20220331  NaN  12818371932.0  ...  CNY  合并期末  2022-04-28T16:20:04\n..       ...  ...            ...  ...  ...   ...                  ...\n95  19961231  NaN    671405728.0  ...  CNY  合并期末  2020-03-13T15:29:48\n96  19960630  NaN            NaN  ...  CNY  合并期末  2020-03-13T15:29:48\n97  19951231  NaN    741738874.0  ...  CNY  合并期末  2020-03-13T15:29:48\n98  19950630  NaN            NaN  ...  CNY  合并期末  2020-03-13T15:29:48\n99  19941231  NaN    712428000.0  ...  CNY  合并期末  2020-03-13T15:29:48\n[100 rows x 147 columns]\n```\n\n#### 财务报表-东财\n\n##### 资产负债表-按报告期\n\n接口: stock_balance_sheet_by_report_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n\n描述: 东方财富-股票-财务分析-资产负债表-按报告期\n\n限量: 单次获取指定 symbol 的资产负债表-按报告期数据\n\n输入参数\n\n| 名称     | 类型  | 描述                      |\n|--------|-----|-------------------------|\n| symbol | str | symbol=\"SH600519\"; 股票代码 |\n\n输出参数\n\n| 名称  | 类型  | 描述          |\n|-----|-----|-------------|\n| -   | -   | 319 项，不逐一列出 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_balance_sheet_by_report_em_df = ak.stock_balance_sheet_by_report_em(symbol=\"SH600519\")\nprint(stock_balance_sheet_by_report_em_df)\n```\n\n数据示例\n\n```\n     SECUCODE SECURITY_CODE  ... OSOPINION_TYPE LISTING_STATE\n0   600519.SH        600519  ...           None             0\n1   600519.SH        600519  ...           None             0\n2   600519.SH        600519  ...           None             0\n3   600519.SH        600519  ...           None             0\n4   600519.SH        600519  ...           None             0\n..        ...           ...  ...            ...           ...\n87  600519.SH        600519  ...           None             0\n88  600519.SH        600519  ...           None             0\n89  600519.SH        600519  ...           None             0\n90  600519.SH        600519  ...           None             0\n91  600519.SH        600519  ...           None             0\n[92 rows x 319 columns]\n```\n\n##### 资产负债表-按年度\n\n接口: stock_balance_sheet_by_yearly_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n\n描述: 东方财富-股票-财务分析-资产负债表-按年度\n\n限量: 单次获取指定 symbol 的资产负债表-按年度数据\n\n输入参数\n\n| 名称     | 类型  | 描述                      |\n|--------|-----|-------------------------|\n| symbol | str | symbol=\"SH600519\"; 股票代码 |\n\n输出参数\n\n| 名称  | 类型  | 描述          |\n|-----|-----|-------------|\n| -   | -   | 319 项，不逐一列出 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_balance_sheet_by_yearly_em_df = ak.stock_balance_sheet_by_yearly_em(symbol=\"SH600519\")\nprint(stock_balance_sheet_by_yearly_em_df)\n```\n\n数据示例\n\n```\n    SECUCODE SECURITY_CODE  ... OSOPINION_TYPE LISTING_STATE\n0   600519.SH        600519  ...           None             0\n1   600519.SH        600519  ...           None             0\n2   600519.SH        600519  ...           None             0\n3   600519.SH        600519  ...           None             0\n4   600519.SH        600519  ...           None             0\n5   600519.SH        600519  ...           None             0\n6   600519.SH        600519  ...           None             0\n7   600519.SH        600519  ...           None             0\n8   600519.SH        600519  ...           None             0\n9   600519.SH        600519  ...           None             0\n10  600519.SH        600519  ...           None             0\n11  600519.SH        600519  ...           None             0\n12  600519.SH        600519  ...           None             0\n13  600519.SH        600519  ...           None             0\n14  600519.SH        600519  ...           None             0\n15  600519.SH        600519  ...           None             0\n16  600519.SH        600519  ...           None             0\n17  600519.SH        600519  ...           None             0\n18  600519.SH        600519  ...           None             0\n19  600519.SH        600519  ...           None             0\n20  600519.SH        600519  ...           None             0\n21  600519.SH        600519  ...           None             0\n22  600519.SH        600519  ...           None             0\n23  600519.SH        600519  ...           None             0\n24  600519.SH        600519  ...           None             0\n[25 rows x 319 columns]\n```\n\n##### 利润表-按报告期\n\n接口: stock_profit_sheet_by_report_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n\n描述: 东方财富-股票-财务分析-利润表-报告期\n\n限量: 单次获取指定 symbol 的利润表-报告期数据\n\n输入参数\n\n| 名称     | 类型  | 描述                      |\n|--------|-----|-------------------------|\n| symbol | str | symbol=\"SH600519\"; 股票代码 |\n\n输出参数\n\n| 名称  | 类型  | 描述          |\n|-----|-----|-------------|\n| -   | -   | 203 项，不逐一列出 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_profit_sheet_by_report_em_df = ak.stock_profit_sheet_by_report_em(symbol=\"SH600519\")\nprint(stock_profit_sheet_by_report_em_df)\n```\n\n数据示例\n\n```\n   SECUCODE SECURITY_CODE  ... ACF_END_INCOME_YOY OPINION_TYPE\n0   600519.SH        600519  ...               None         None\n1   600519.SH        600519  ...               None         None\n2   600519.SH        600519  ...               None         None\n3   600519.SH        600519  ...               None      标准无保留意见\n4   600519.SH        600519  ...               None         None\n..        ...           ...  ...                ...          ...\n87  600519.SH        600519  ...               None      标准无保留意见\n88  600519.SH        600519  ...               None      标准无保留意见\n89  600519.SH        600519  ...               None      标准无保留意见\n90  600519.SH        600519  ...               None      标准无保留意见\n91  600519.SH        600519  ...               None      标准无保留意见\n[92 rows x 203 columns]\n```\n\n##### 利润表-按年度\n\n接口: stock_profit_sheet_by_yearly_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n\n描述: 东方财富-股票-财务分析-利润表-按年度\n\n限量: 单次获取指定 symbol 的利润表-按年度数据\n\n输入参数\n\n| 名称     | 类型  | 描述                      |\n|--------|-----|-------------------------|\n| symbol | str | symbol=\"SH600519\"; 股票代码 |\n\n输出参数\n\n| 名称  | 类型  | 描述          |\n|-----|-----|-------------|\n| -   | -   | 203 项，不逐一列出 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_profit_sheet_by_yearly_em_df = ak.stock_profit_sheet_by_yearly_em(symbol=\"SH600519\")\nprint(stock_profit_sheet_by_yearly_em_df)\n```\n\n数据示例\n\n```\n     SECUCODE SECURITY_CODE  ... ACF_END_INCOME_YOY OPINION_TYPE\n0   600519.SH        600519  ...               None      标准无保留意见\n1   600519.SH        600519  ...               None      标准无保留意见\n2   600519.SH        600519  ...               None      标准无保留意见\n3   600519.SH        600519  ...               None      标准无保留意见\n4   600519.SH        600519  ...               None      标准无保留意见\n5   600519.SH        600519  ...               None      标准无保留意见\n6   600519.SH        600519  ...               None      标准无保留意见\n7   600519.SH        600519  ...               None      标准无保留意见\n8   600519.SH        600519  ...               None      标准无保留意见\n9   600519.SH        600519  ...               None      标准无保留意见\n10  600519.SH        600519  ...               None      标准无保留意见\n11  600519.SH        600519  ...               None      标准无保留意见\n12  600519.SH        600519  ...               None      标准无保留意见\n13  600519.SH        600519  ...               None      标准无保留意见\n14  600519.SH        600519  ...               None      标准无保留意见\n15  600519.SH        600519  ...               None      标准无保留意见\n16  600519.SH        600519  ...               None      标准无保留意见\n17  600519.SH        600519  ...               None      标准无保留意见\n18  600519.SH        600519  ...               None      标准无保留意见\n19  600519.SH        600519  ...               None      标准无保留意见\n20  600519.SH        600519  ...               None      标准无保留意见\n21  600519.SH        600519  ...               None      标准无保留意见\n22  600519.SH        600519  ...               None      标准无保留意见\n23  600519.SH        600519  ...               None      标准无保留意见\n24  600519.SH        600519  ...               None      标准无保留意见\n[25 rows x 203 columns]\n```\n\n##### 利润表-按单季度\n\n接口: stock_profit_sheet_by_quarterly_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n\n描述: 东方财富-股票-财务分析-利润表-按单季度\n\n限量: 单次获取指定 symbol 的利润表-按单季度数据\n\n输入参数\n\n| 名称     | 类型  | 描述                      |\n|--------|-----|-------------------------|\n| symbol | str | symbol=\"SH600519\"; 股票代码 |\n\n输出参数\n\n| 名称  | 类型  | 描述          |\n|-----|-----|-------------|\n| -   | -   | 204 项，不逐一列出 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_profit_sheet_by_quarterly_em_df = ak.stock_profit_sheet_by_quarterly_em(symbol=\"SH600519\")\nprint(stock_profit_sheet_by_quarterly_em_df)\n```\n\n数据示例\n\n```\n    SECUCODE SECURITY_CODE  ... DEDUCT_PARENT_NETPROFIT DEDUCT_PARENT_NETPROFIT_QOQ\n0   600519.SH        600519  ...            1.686819e+10                   11.201931\n1   600519.SH        600519  ...            1.516897e+10                  -26.996696\n2   600519.SH        600519  ...            2.077848e+10                   12.934838\n3   600519.SH        600519  ...            1.839864e+10                   25.756158\n4   600519.SH        600519  ...            1.463041e+10                   16.858574\n..        ...           ...  ...                     ...                         ...\n82  600519.SH        600519  ...                     NaN                         NaN\n83  600519.SH        600519  ...            6.878058e+07                   -3.336461\n84  600519.SH        600519  ...            7.115463e+07                         NaN\n85  600519.SH        600519  ...                     NaN                         NaN\n86  600519.SH        600519  ...                     NaN                         NaN\n[87 rows x 204 columns]\n```\n\n##### 现金流量表-按报告期\n\n接口: stock_cash_flow_sheet_by_report_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n\n描述: 东方财富-股票-财务分析-现金流量表-按报告期\n\n限量: 单次获取指定 symbol 的现金流量表-按报告期数据\n\n输入参数\n\n| 名称     | 类型  | 描述                      |\n|--------|-----|-------------------------|\n| symbol | str | symbol=\"SH600519\"; 股票代码 |\n\n输出参数\n\n| 名称  | 类型  | 描述          |\n|-----|-----|-------------|\n| -   | -   | 252 项，不逐一列出 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_cash_flow_sheet_by_report_em_df = ak.stock_cash_flow_sheet_by_report_em(symbol=\"SH600519\")\nprint(stock_cash_flow_sheet_by_report_em_df)\n```\n\n数据示例\n\n```\n    SECUCODE SECURITY_CODE  ... MINORITY_INTEREST MINORITY_INTEREST_YOY\n0   600519.SH        600519  ...               NaN                   NaN\n1   600519.SH        600519  ...               NaN                   NaN\n2   600519.SH        600519  ...               NaN                   NaN\n3   600519.SH        600519  ...               NaN                   NaN\n4   600519.SH        600519  ...               NaN                   NaN\n..        ...           ...  ...               ...                   ...\n83  600519.SH        600519  ...               NaN                   NaN\n84  600519.SH        600519  ...               NaN                   NaN\n85  600519.SH        600519  ...               NaN                   NaN\n86  600519.SH        600519  ...               NaN                   NaN\n87  600519.SH        600519  ...               NaN                   NaN\n[88 rows x 252 columns]\n```\n\n##### 现金流量表-按年度\n\n接口: stock_cash_flow_sheet_by_yearly_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n\n描述: 东方财富-股票-财务分析-现金流量表-按年度\n\n限量: 单次获取指定 symbol 的现金流量表-按年度数据\n\n输入参数\n\n| 名称     | 类型  | 描述                      |\n|--------|-----|-------------------------|\n| symbol | str | symbol=\"SH600519\"; 股票代码 |\n\n输出参数\n\n| 名称  | 类型  | 描述          |\n|-----|-----|-------------|\n| -   | -   | 314 项，不逐一列出 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_cash_flow_sheet_by_yearly_em_df = ak.stock_cash_flow_sheet_by_yearly_em(symbol=\"SH600519\")\nprint(stock_cash_flow_sheet_by_yearly_em_df)\n```\n\n数据示例\n\n```\n    SECUCODE SECURITY_CODE  ... FBCCE_ADD_YOY CREDIT_IMPAIRMENT_INCOME_YOY\n0   601398.SH        601398  ...    238.302033                         None\n1   601398.SH        601398  ...   -204.008112                         None\n2   601398.SH        601398  ...    676.398241                         None\n3   601398.SH        601398  ...   -446.960304                         None\n4   601398.SH        601398  ...   -103.265330                         None\n5   601398.SH        601398  ...    231.370619                         None\n6   601398.SH        601398  ...   -156.355892                         None\n7   601398.SH        601398  ...   1112.723130                         None\n8   601398.SH        601398  ...    115.092223                         None\n9   601398.SH        601398  ...   -169.124835                         None\n10  601398.SH        601398  ...     10.647686                         None\n11  601398.SH        601398  ...    167.055537                         None\n12  601398.SH        601398  ...    160.423857                         None\n13  601398.SH        601398  ...           NaN                         None\n14  601398.SH        601398  ...           NaN                         None\n15  601398.SH        601398  ...           NaN                         None\n16  601398.SH        601398  ...           NaN                         None\n17  601398.SH        601398  ...           NaN                         None\n18  601398.SH        601398  ...           NaN                         None\n19  601398.SH        601398  ...           NaN                         None\n[20 rows x 314 columns]\n```\n\n##### 现金流量表-按单季度\n\n接口: stock_cash_flow_sheet_by_quarterly_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/Index?type=web&code=sh600519#lrb-0\n\n描述: 东方财富-股票-财务分析-现金流量表-按单季度\n\n限量: 单次获取指定 symbol 的现金流量表-按单季度数据\n\n输入参数\n\n| 名称     | 类型  | 描述                      |\n|--------|-----|-------------------------|\n| symbol | str | symbol=\"SH600519\"; 股票代码 |\n\n输出参数\n\n| 名称  | 类型  | 描述          |\n|-----|-----|-------------|\n| -   | -   | 315 项，不逐一列出 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_cash_flow_sheet_by_quarterly_em_df = ak.stock_cash_flow_sheet_by_quarterly_em(symbol=\"SH600519\")\nprint(stock_cash_flow_sheet_by_quarterly_em_df)\n```\n\n数据示例\n\n```\n    SECUCODE SECURITY_CODE  ... OPINION_TYPE OSOPINION_TYPE\n0   601398.SH        601398  ...         None           None\n1   601398.SH        601398  ...         None           None\n2   601398.SH        601398  ...      标准无保留意见           None\n3   601398.SH        601398  ...         None           None\n4   601398.SH        601398  ...         None           None\n..        ...           ...  ...          ...            ...\n61  601398.SH        601398  ...         None           None\n62  601398.SH        601398  ...      标准无保留意见           None\n63  601398.SH        601398  ...         None           None\n64  601398.SH        601398  ...         None           None\n65  601398.SH        601398  ...         None           None\n[66 rows x 315 columns]\n```\n\n#### 财务报表-同花顺\n\n##### 资产负债表\n\n接口: stock_financial_debt_new_ths\n\n目标地址: https://basic.10jqka.com.cn/astockpc/astockmain/index.html#/financen?code=000063\n\n描述: 同花顺-财务指标-资产负债表；替换 stock_financial_debt_ths 接口\n\n限量: 单次获取资产负债表所有历史数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                          |\n|-----------|-----|---------------------------------------------|\n| symbol    | str | symbol=\"000063\"; 股票代码                       |\n| indicator | str | indicator=\"按报告期\"; choice of {\"按报告期\", \"按年度\"} |\n\n输出参数\n\n| 名称            | 类型      | 描述 |\n|---------------|---------|----|\n| report_date   | object  | -  |\n| report_name   | object  | -  |\n| report_period | object  | -  |\n| quarter_name  | object  | -  |\n| metric_name   | object  | -  |\n| value         | float64 | -  |\n| single        | object  | -  |\n| yoy           | float64 | -  |\n| mom           | object  | -  |\n| single_yoy    | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_financial_debt_new_ths_df = ak.stock_financial_debt_new_ths(symbol=\"000063\", indicator=\"按年度\")\nprint(stock_financial_debt_new_ths_df)\n```\n\n数据示例\n\n```\n     report_date report_name report_period  ...          yoy   mom single_yoy\n0     2024-12-31      2024年报        2024-4  ...         <NA>  <NA>       <NA>\n1     2024-12-31      2024年报        2024-4  ...         <NA>  <NA>       <NA>\n2     2024-12-31      2024年报        2024-4  ...   0.16420728  <NA>       <NA>\n3     2024-12-31      2024年报        2024-4  ...  -0.15807123  <NA>       <NA>\n4     2024-12-31      2024年报        2024-4  ...   0.00005916  <NA>       <NA>\n...          ...         ...           ...  ...          ...   ...        ...\n3684  1994-12-31      1994年报        1994-4  ...         <NA>  <NA>       <NA>\n3685  1994-12-31      1994年报        1994-4  ...         <NA>  <NA>       <NA>\n3686  1994-12-31      1994年报        1994-4  ...         <NA>  <NA>       <NA>\n3687  1994-12-31      1994年报        1994-4  ...         <NA>  <NA>       <NA>\n3688  1994-12-31      1994年报        1994-4  ...         <NA>  <NA>       <NA>\n[3689 rows x 10 columns]\n```\n\n##### 利润表\n\n接口: stock_financial_benefit_new_ths\n\n目标地址: https://basic.10jqka.com.cn/astockpc/astockmain/index.html#/financen?code=000063\n\n描述: 同花顺-财务指标-利润表；替换 stock_financial_benefit_ths 接口\n\n限量: 单次获取利润表所有历史数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                      |\n|-----------|-----|-------------------------------------------------------------------------|\n| symbol    | str | symbol=\"000063\"; 股票代码                                                   |\n| indicator | str | indicator=\"按报告期\"; choice of {\"按报告期\", \"一季度\", \"二季度\", \"三季度\", \"四季度\", \"按年度\"} |\n\n输出参数\n\n| 名称            | 类型      | 描述 |\n|---------------|---------|----|\n| report_date   | object  | -  |\n| report_name   | object  | -  |\n| report_period | object  | -  |\n| quarter_name  | object  | -  |\n| metric_name   | object  | -  |\n| value         | float64 | -  |\n| single        | object  | -  |\n| yoy           | float64 | -  |\n| mom           | object  | -  |\n| single_yoy    | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_financial_benefit_new_ths_df = ak.stock_financial_benefit_new_ths(symbol=\"000063\", indicator=\"按报告期\")\nprint(stock_financial_benefit_new_ths_df)\n```\n\n数据示例\n\n```\n     report_date report_name report_period  ...        yoy       mom  single_yoy\n0     2025-09-30     2025三季报        2025-3  ...  -0.307496 -0.912701   -0.893714\n1     2025-09-30     2025三季报        2025-3  ...        NaN       NaN         NaN\n2     2025-09-30     2025三季报        2025-3  ...   0.116943 -0.221946   -0.139571\n3     2025-09-30     2025三季报        2025-3  ...        NaN       NaN         NaN\n4     2025-09-30     2025三季报        2025-3  ...        NaN       NaN         NaN\n...          ...         ...           ...  ...        ...       ...         ...\n2545  2013-06-30      2013中报        2013-2  ...   0.285714 -0.500000    0.000000\n2546  2013-06-30      2013中报        2013-2  ...        NaN       NaN         NaN\n2547  2013-06-30      2013中报        2013-2  ...        NaN       NaN         NaN\n2548  2013-06-30      2013中报        2013-2  ...        NaN       NaN         NaN\n2549  2013-06-30      2013中报        2013-2  ... -11.669821  0.777595    0.078450\n[2550 rows x 10 columns]\n```\n\n##### 现金流量表\n\n接口: stock_financial_cash_new_ths\n\n目标地址: https://basic.10jqka.com.cn/astockpc/astockmain/index.html#/financen?code=000063\n\n描述: 同花顺-财务指标-现金流量表；替换 stock_financial_cash_ths 接口\n\n限量: 单次获取现金流量表所有历史数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                      |\n|-----------|-----|-------------------------------------------------------------------------|\n| symbol    | str | symbol=\"000063\"; 股票代码                                                   |\n| indicator | str | indicator=\"按报告期\"; choice of {\"按报告期\", \"一季度\", \"二季度\", \"三季度\", \"四季度\", \"按年度\"} |\n\n输出参数\n\n| 名称            | 类型      | 描述 |\n|---------------|---------|----|\n| report_date   | object  | -  |\n| report_name   | object  | -  |\n| report_period | object  | -  |\n| quarter_name  | object  | -  |\n| metric_name   | object  | -  |\n| value         | float64 | -  |\n| single        | object  | -  |\n| yoy           | float64 | -  |\n| mom           | object  | -  |\n| single_yoy    | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_financial_cash_new_ths_df = ak.stock_financial_cash_new_ths(symbol=\"000063\", indicator=\"按年度\")\nprint(stock_financial_cash_new_ths_df)\n```\n\n数据示例\n\n```\n     report_date report_name  ...          mom   single_yoy\n0     2024-12-31      2024年报  ...         <NA>         <NA>\n1     2024-12-31      2024年报  ...  -0.23161757   0.57803131\n2     2024-12-31      2024年报  ...   0.36015447  -0.45630237\n3     2024-12-31      2024年报  ...   0.17900055  -0.47569575\n4     2024-12-31      2024年报  ...   0.05788915  -0.47553164\n...          ...         ...  ...          ...          ...\n2425  1998-12-31      1998年报  ...         <NA>         <NA>\n2426  1998-12-31      1998年报  ...         <NA>         <NA>\n2427  1998-12-31      1998年报  ...         <NA>         <NA>\n2428  1998-12-31      1998年报  ...         <NA>         <NA>\n2429  1998-12-31      1998年报  ...         <NA>         <NA>\n[2430 rows x 10 columns]\n```\n\n#### 财务报表-东财-已退市股票\n\n##### 资产负债表-按报告期\n\n接口: stock_balance_sheet_by_report_delisted_em\n\n目标地址: https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=SZ000013#/cwfx/zcfzb\n\n描述: 东方财富-股票-财务分析-资产负债表-已退市股票-按报告期\n\n限量: 单次获取指定 symbol 的资产负债表-按报告期数据\n\n输入参数\n\n| 名称     | 类型  | 描述                               |\n|--------|-----|----------------------------------|\n| symbol | str | symbol=\"SZ000013\"; 带市场标识的已退市股票代码 |\n\n输出参数\n\n| 名称  | 类型  | 描述         |\n|-----|-----|------------|\n| -   | -   | 319项，不逐一列出 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_balance_sheet_by_report_delisted_em_df = ak.stock_balance_sheet_by_report_delisted_em(symbol=\"SZ000013\")\nprint(stock_balance_sheet_by_report_delisted_em_df)\n```\n\n数据示例\n\n```\n     SECUCODE SECURITY_CODE  ... OSOPINION_TYPE LISTING_STATE\n0   000013.SZ        000013  ...           None             2\n1   000013.SZ        000013  ...           None             2\n2   000013.SZ        000013  ...           None             2\n3   000013.SZ        000013  ...           None             2\n4   000013.SZ        000013  ...           None             2\n5   000013.SZ        000013  ...           None             2\n6   000013.SZ        000013  ...           None             2\n7   000013.SZ        000013  ...           None             2\n8   000013.SZ        000013  ...           None             2\n9   000013.SZ        000013  ...           None             2\n10  000013.SZ        000013  ...           None             2\n11  000013.SZ        000013  ...           None             2\n12  000013.SZ        000013  ...           None             2\n13  000013.SZ        000013  ...           None             2\n14  000013.SZ        000013  ...           None             2\n15  000013.SZ        000013  ...           None             2\n16  000013.SZ        000013  ...           None             2\n17  000013.SZ        000013  ...           None             2\n18  000013.SZ        000013  ...           None             2\n19  000013.SZ        000013  ...           None             2\n20  000013.SZ        000013  ...           None             2\n21  000013.SZ        000013  ...           None             2\n22  000013.SZ        000013  ...           None             2\n23  000013.SZ        000013  ...           None             2\n24  000013.SZ        000013  ...           None             2\n25  000013.SZ        000013  ...           None             2\n26  000013.SZ        000013  ...           None             2\n27  000013.SZ        000013  ...           None             2\n28  000013.SZ        000013  ...           None             2\n29  000013.SZ        000013  ...           None             2\n30  000013.SZ        000013  ...           None             2\n31  000013.SZ        000013  ...           None             2\n32  000013.SZ        000013  ...           None             2\n33  000013.SZ        000013  ...           None             2\n34  000013.SZ        000013  ...           None             2\n35  000013.SZ        000013  ...           None             2\n36  000013.SZ        000013  ...           None             2\n37  000013.SZ        000013  ...           None             2\n[38 rows x 319 columns]\n```\n\n##### 利润表-按报告期\n\n接口: stock_profit_sheet_by_report_delisted_em\n\n目标地址: https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=SZ000013#/cwfx/lrb\n\n描述: 东方财富-股票-财务分析-利润表-已退市股票-按报告期\n\n限量: 单次获取指定 symbol 的利润表-按报告期数据\n\n输入参数\n\n| 名称     | 类型  | 描述                               |\n|--------|-----|----------------------------------|\n| symbol | str | symbol=\"SZ000013\"; 带市场标识的已退市股票代码 |\n\n输出参数\n\n| 名称  | 类型  | 描述          |\n|-----|-----|-------------|\n| -   | -   | 203 项，不逐一列出 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_profit_sheet_by_report_delisted_em_df = ak.stock_profit_sheet_by_report_delisted_em(symbol=\"SZ000013\")\nprint(stock_profit_sheet_by_report_delisted_em_df)\n```\n\n数据示例\n\n```\n     SECUCODE SECURITY_CODE  ... ACF_END_INCOME_YOY  OPINION_TYPE\n0   000013.SZ        000013  ...               None          None\n1   000013.SZ        000013  ...               None          None\n2   000013.SZ        000013  ...               None          None\n3   000013.SZ        000013  ...               None          None\n4   000013.SZ        000013  ...               None          None\n5   000013.SZ        000013  ...               None          None\n6   000013.SZ        000013  ...               None          None\n7   000013.SZ        000013  ...               None          None\n8   000013.SZ        000013  ...               None          None\n9   000013.SZ        000013  ...               None          None\n10  000013.SZ        000013  ...               None          None\n11  000013.SZ        000013  ...               None          None\n12  000013.SZ        000013  ...               None          None\n13  000013.SZ        000013  ...               None          None\n14  000013.SZ        000013  ...               None       标准无保留意见\n15  000013.SZ        000013  ...               None          None\n16  000013.SZ        000013  ...               None  带解释性说明的无保留意见\n17  000013.SZ        000013  ...               None          None\n18  000013.SZ        000013  ...               None          None\n19  000013.SZ        000013  ...               None        无法表示意见\n20  000013.SZ        000013  ...               None          None\n21  000013.SZ        000013  ...               None          未经审计\n22  000013.SZ        000013  ...               None          None\n23  000013.SZ        000013  ...               None        无法表示意见\n24  000013.SZ        000013  ...               None          None\n25  000013.SZ        000013  ...               None          未经审计\n26  000013.SZ        000013  ...               None          None\n27  000013.SZ        000013  ...               None        无法表示意见\n28  000013.SZ        000013  ...               None          None\n29  000013.SZ        000013  ...               None        无法表示意见\n30  000013.SZ        000013  ...               None          None\n31  000013.SZ        000013  ...               None          None\n32  000013.SZ        000013  ...               None          None\n33  000013.SZ        000013  ...               None          None\n34  000013.SZ        000013  ...               None          None\n35  000013.SZ        000013  ...               None          None\n36  000013.SZ        000013  ...               None          None\n37  000013.SZ        000013  ...               None          None\n38  000013.SZ        000013  ...               None          None\n[39 rows x 203 columns]\n```\n\n##### 现金流量表-按报告期\n\n接口: stock_cash_flow_sheet_by_report_delisted_em\n\n目标地址: https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=SZ000013#/cwfx/xjllb\n\n描述: 东方财富-股票-财务分析-现金流量表-已退市股票-按报告期\n\n限量: 单次获取指定 symbol 的现金流量表-按报告期数据\n\n输入参数\n\n| 名称     | 类型  | 描述                               |\n|--------|-----|----------------------------------|\n| symbol | str | symbol=\"SZ000013\"; 带市场标识的已退市股票代码 |\n\n输出参数\n\n| 名称  | 类型  | 描述          |\n|-----|-----|-------------|\n| -   | -   | 252 项，不逐一列出 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_cash_flow_sheet_by_report_delisted_em_df = ak.stock_cash_flow_sheet_by_report_delisted_em(symbol=\"SZ000013\")\nprint(stock_cash_flow_sheet_by_report_delisted_em_df)\n```\n\n数据示例\n\n```\n     SECUCODE SECURITY_CODE  ... MINORITY_INTEREST MINORITY_INTEREST_YOY\n0   000013.SZ        000013  ...       18337254.13                   NaN\n1   000013.SZ        000013  ...       14847516.38            -19.030863\n2   000013.SZ        000013  ...        9677540.34                   NaN\n3   000013.SZ        000013  ...       23357763.71             57.317649\n4   000013.SZ        000013  ...        9262252.60             -4.291253\n5   000013.SZ        000013  ...       -3961320.04           -116.959329\n6   000013.SZ        000013  ...       -1234838.91           -113.331950\n7   000013.SZ        000013  ...      -35258015.13           -790.057223\n8   000013.SZ        000013  ...        -179278.95                   NaN\n9   000013.SZ        000013  ...       -4739838.45           -283.842654\n10  000013.SZ        000013  ...      -28385113.99                   NaN\n11  000013.SZ        000013  ...               NaN                   NaN\n12  000013.SZ        000013  ...               NaN                   NaN\n13  000013.SZ        000013  ...               NaN                   NaN\n14  000013.SZ        000013  ...               NaN                   NaN\n15  000013.SZ        000013  ...               NaN                   NaN\n16  000013.SZ        000013  ...               NaN                   NaN\n17  000013.SZ        000013  ...               NaN                   NaN\n18  000013.SZ        000013  ...               NaN                   NaN\n19  000013.SZ        000013  ...               NaN                   NaN\n20  000013.SZ        000013  ...               NaN                   NaN\n[21 rows x 252 columns]\n```\n\n#### 港股财务报表\n\n接口: stock_financial_hk_report_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HKF10/FinancialAnalysis/index?type=web&code=00700\n\n描述: 东方财富-港股-财务报表-三大报表\n\n限量: 单次获取指定股票、指定报告且指定报告期的数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                  |\n|-----------|-----|-----------------------------------------------------|\n| stock     | str | stock=\"00700\"; 股票代码                                 |\n| symbol    | str | symbol=\"现金流量表\"; choice of {\"资产负债表\", \"利润表\", \"现金流量表\"} |\n| indicator | str | indicator=\"年度\"; choice of {\"年度\", \"报告期\"}             |\n\n输出参数\n\n| 名称                 | 类型      | 描述 |\n|--------------------|---------|----|\n| SECUCODE           | object  | -  |\n| SECURITY_CODE      | object  | -  |\n| SECURITY_NAME_ABBR | object  | -  |\n| ORG_CODE           | object  | -  |\n| REPORT_DATE        | object  | -  |\n| DATE_TYPE_CODE     | object  | -  |\n| FISCAL_YEAR        | object  | -  |\n| STD_ITEM_CODE      | object  | -  |\n| STD_ITEM_NAME      | object  | -  |\n| AMOUNT             | float64 | -  |\n| STD_REPORT_DATE    | object  | -  |\n\n```python\nimport akshare as ak\n\nstock_financial_hk_report_em_df = ak.stock_financial_hk_report_em(stock=\"00700\", symbol=\"资产负债表\", indicator=\"年度\")\nprint(stock_financial_hk_report_em_df)\n```\n\n数据示例\n\n```\n     SECUCODE SECURITY_CODE  ...        AMOUNT      STD_REPORT_DATE\n0    00700.HK         00700  ...  5.397800e+10  2022-12-31 00:00:00\n1    00700.HK         00700  ...  5.590000e+08  2022-12-31 00:00:00\n2    00700.HK         00700  ...  1.618020e+11  2022-12-31 00:00:00\n3    00700.HK         00700  ...  1.804600e+10  2022-12-31 00:00:00\n4    00700.HK         00700  ...  9.229000e+09  2022-12-31 00:00:00\n..        ...           ...  ...           ...                  ...\n965  00700.HK         00700  ...  4.817800e+07  2001-12-31 00:00:00\n966  00700.HK         00700  ...  4.832400e+07  2001-12-31 00:00:00\n967  00700.HK         00700  ...  4.832400e+07  2001-12-31 00:00:00\n968  00700.HK         00700  ...  4.832400e+07  2001-12-31 00:00:00\n969  00700.HK         00700  ...  6.554200e+07  2001-12-31 00:00:00\n[970 rows x 11 columns]\n```\n\n#### 美股财务报表\n\n接口: stock_financial_us_report_em\n\n目标地址: https://emweb.eastmoney.com/PC_USF10/pages/index.html?code=TSLA&type=web&color=w#/cwfx/zyzb\n\n描述: 东方财富-美股-财务分析-三大报表\n\n限量: 单次获取指定股票、指定报告且指定报告期的数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                    |\n|-----------|-----|-------------------------------------------------------|\n| stock     | str | stock=\"TSLA\"; 股票代码, 比如 BRK.A 需修改为 BRK_A 再获取           |\n| symbol    | str | symbol=\"资产负债表\"; choice of {\"资产负债表\", \"综合损益表\", \"现金流量表\"} |\n| indicator | str | indicator=\"年报\"; choice of {\"年报\", \"单季报\", \"累计季报\"}       |\n\n输出参数\n\n| 名称                 | 类型      | 描述 |\n|--------------------|---------|----|\n| SECUCODE           | object  | -  |\n| SECURITY_CODE      | object  | -  |\n| SECURITY_NAME_ABBR | object  | -  |\n| REPORT_DATE        | object  | -  |\n| REPORT_TYPE        | object  | -  |\n| REPORT             | object  | -  |\n| STD_ITEM_CODE      | object  | -  |\n| AMOUNT             | float64 | -  |\n| ITEM_NAME          | object  | -  |\n\n\n```python\nimport akshare as ak\n\nstock_financial_us_report_em_df = ak.stock_financial_us_report_em(stock=\"TSLA\", symbol=\"资产负债表\", indicator=\"年报\")\nprint(stock_financial_us_report_em_df)\n```\n\n数据示例\n\n```\n    SECUCODE SECURITY_CODE  ...        AMOUNT ITEM_NAME\n0     TSLA.O          TSLA  ...  1.613900e+10  现金及现金等价物\n1     TSLA.O          TSLA  ...  1.639800e+10  现金及现金等价物\n2     TSLA.O          TSLA  ...  1.625300e+10  现金及现金等价物\n3     TSLA.O          TSLA  ...  1.757600e+10  现金及现金等价物\n4     TSLA.O          TSLA  ...  1.938400e+10  现金及现金等价物\n..       ...           ...  ...           ...       ...\n619   TSLA.O          TSLA  ...  3.670390e+08     非运算项目\n620   TSLA.O          TSLA  ...           NaN     非运算项目\n621   TSLA.O          TSLA  ...  3.192250e+08     非运算项目\n622   TSLA.O          TSLA  ...  1.011780e+08     非运算项目\n623   TSLA.O          TSLA  ...  1.011780e+08     非运算项目\n[624 rows x 9 columns]\n```\n\n#### 关键指标-新浪\n\n接口: stock_financial_abstract\n\n目标地址: https://vip.stock.finance.sina.com.cn/corp/go.php/vFD_FinanceSummary/stockid/600004.phtml\n\n描述: 新浪财经-财务报表-关键指标\n\n限量: 单次获取关键指标所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"600004\"; 股票代码 |\n\n输出参数\n\n| 名称       | 类型     | 描述  |\n|----------|--------|-----|\n| 选项       | object | -   |\n| 指标       | object | -   |\n| 【具体的报告期】 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_financial_abstract_df = ak.stock_financial_abstract(symbol=\"600004\")\nprint(stock_financial_abstract_df)\n```\n\n数据示例\n\n```\n      选项        指标      20220930  ...      20020630      20011231      20001231\n0   常用指标     归母净利润 -6.271849e+08  ...  1.365679e+08  2.967902e+08  1.967577e+08\n1   常用指标     营业总收入  3.307660e+09  ...  4.381153e+08  8.515877e+08  7.833500e+08\n2   常用指标      营业成本  4.212766e+09  ...  2.664150e+08  5.317826e+08  4.654766e+08\n3   常用指标       净利润 -6.321978e+08  ...  1.406112e+08  3.009773e+08  2.019293e+08\n4   常用指标     扣非净利润 -6.532030e+08  ...  1.364059e+08  1.985243e+08  1.967577e+08\n..   ...       ...           ...  ...           ...           ...           ...\n74  营运能力    总资产周转率  1.202050e-01  ...           NaN  6.501820e-01           NaN\n75  营运能力   总资产周转天数  2.246150e+03  ...           NaN  5.536909e+02           NaN\n76  营运能力   流动资产周转率  8.849150e-01  ...           NaN  9.480880e-01           NaN\n77  营运能力  流动资产周转天数  3.051139e+02  ...           NaN  3.797112e+02           NaN\n78  营运能力   应付账款周转率  5.311671e+00  ...           NaN  2.140125e+01           NaN\n```\n\n#### 关键指标-同花顺\n\n接口: stock_financial_abstract_new_ths\n\n目标地址: https://basic.10jqka.com.cn/new/000063/finance.html\n\n描述: 同花顺-财务指标-重要指标；替换 stock_financial_abstract_ths 接口\n\n限量: 单次获取指定 symbol 的所有数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                      |\n|-----------|-----|-------------------------------------------------------------------------|\n| symbol    | str | symbol=\"000063\"; 股票代码                                                   |\n| indicator | str | indicator=\"按报告期\"; choice of {\"按报告期\", \"一季度\", \"二季度\", \"三季度\", \"四季度\", \"按年度\"} |\n\n输出参数\n\n| 名称            | 类型      | 描述 |\n|---------------|---------|----|\n| report_date   | object  | -  |\n| report_name   | object  | -  |\n| report_period | object  | -  |\n| quarter_name  | object  | -  |\n| metric_name   | object  | -  |\n| value         | float64 | -  |\n| single        | object  | -  |\n| yoy           | float64 | -  |\n| mom           | object  | -  |\n| single_yoy    | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_financial_abstract_new_ths_df = ak.stock_financial_abstract_new_ths(symbol=\"000063\", indicator=\"按报告期\")\nprint(stock_financial_abstract_new_ths_df)\n```\n\n数据示例\n\n```\n     report_date report_name  ...           mom   single_yoy\n0     2025-09-30     2025三季报  ...    1.86837607  -0.54398564\n1     2025-09-30     2025三季报  ...  -14.45035019  -8.51550645\n2     2025-09-30     2025三季报  ...   -0.89847408  -0.87837202\n3     2025-09-30     2025三季报  ...          <NA>         <NA>\n4     2025-09-30     2025三季报  ...          <NA>         <NA>\n...          ...         ...  ...           ...          ...\n1195  2013-06-30      2013中报  ...   -0.49016497   0.25253313\n1196  2013-06-30      2013中报  ...   -0.67334254   1.13728066\n1197  2013-06-30      2013中报  ...          <NA>         <NA>\n1198  2013-06-30      2013中报  ...    0.77759490   0.07845025\n1199  2013-06-30      2013中报  ...   -0.49473684   0.26315789\n[1200 rows x 10 columns]\n```\n\n#### 主要指标-东方财富\n\n接口: stock_financial_analysis_indicator_em\n\n目标地址: https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html?type=web&code=SZ301389&color=b#/cwfx\n\n描述: 东方财富-A股-财务分析-主要指标\n\n限量: 单次获取指定 symbol 的所有数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                           |\n|-----------|-----|----------------------------------------------|\n| symbol    | str | symbol=\"301389.SZ\"; 股票代码                     |\n| indicator | str | indicator=\"按报告期\"; choice of {\"按报告期\", \"按单季度\"} |\n\n输出参数\n\n| 名称                 | 类型      | 描述               |\n|--------------------|---------|------------------|\n| SECUCODE           | object  | 股票代码(带后缀)        |\n| SECURITY_CODE      | object  | 股票代码             |\n| SECURITY_NAME_ABBR | object  | 股票名称             |\n| REPORT_DATE        | object  | 报告日期             |\n| REPORT_TYPE        | object  | 报告类型             |\n| REPORT_DATE_NAME   | object  | 报告日期名称           |\n| EPSJB              | float64 | 基本每股收益(元)        |\n| EPSKCJB            | float64 | 扣非每股收益(元)        |\n| EPSXS              | float64 | 稀释每股收益(元)        |\n| BPS                | float64 | 每股净资产(元)         |\n| MGZBGJ             | float64 | 每股公积金(元)         |\n| MGWFPLR            | float64 | 每股未分配利润(元)       |\n| MGJYXJJE           | float64 | 每股经营现金流(元)       |\n| TOTALOPERATEREVE   | float64 | 营业总收入(元)         |\n| MLR                | float64 | 毛利润(元)           |\n| PARENTNETPROFIT    | float64 | 归属净利润(元)         |\n| KCFJCXSYJLR        | float64 | 扣非净利润(元)         |\n| TOTALOPERATEREVETZ | float64 | 营业总收入同比增长(%)     |\n| PARENTNETPROFITTZ  | float64 | 归属净利润同比增长(%)     |\n| KCFJCXSYJLRTZ      | float64 | 扣非净利润同比增长(%)     |\n| YYZSRGDHBZC        | float64 | 营业总收入滚动环比增长(%)   |\n| NETPROFITRPHBZC    | float64 | 归属净利润滚动环比增长(%)   |\n| KFJLRGDHBZC        | float64 | 扣非净利润滚动环比增长(%)   |\n| ROEJQ              | float64 | 净资产收益率(加权)(%)    |\n| ROEKCJQ            | float64 | 净资产收益率(扣非/加权)(%) |\n| ZZCJLL             | float64 | 总资产收益率(加权)(%)    |\n| XSJLL              | float64 | 净利率(%)           |\n| XSMLL              | float64 | 毛利率(%)           |\n| YSZKYYSR           | float64 | 预收账款/营业收入        |\n| XSJXLYYSR          | float64 | 销售净现金流/营业收入      |\n| JYXJLYYSR          | float64 | 经营净现金流/营业收入      |\n| TAXRATE            | float64 | 实际税率(%)          |\n| LD                 | float64 | 流动比率             |\n| SD                 | float64 | 速动比率             |\n| XJLLB              | float64 | 现金流量比率           |\n| ZCFZL              | float64 | 资产负债率(%)         |\n| QYCS               | float64 | 权益系数             |\n| CQBL               | float64 | 产权比率             |\n| ZZCZZTS            | float64 | 总资产周转天数(天)       |\n| CHZZTS             | float64 | 存货周转天数(天)        |\n| YSZKZZTS           | float64 | 应收账款周转天数(天)      |\n| TOAZZL             | float64 | 总资产周转率(次)        |\n| CHZZL              | float64 | 存货周转率(次)         |\n| YSZKZZL            | float64 | 应收账款周转率(次)       |\n| ...                | ...     | ...              |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_financial_analysis_indicator_em_df = ak.stock_financial_analysis_indicator_em(symbol=\"301389.SZ\", indicator=\"按报告期\")\nprint(stock_financial_analysis_indicator_em_df)\n```\n\n数据示例\n\n```\n     SECUCODE SECURITY_CODE  ... NET_ASSETS_LIABILITIES PROPRIETARY_CAPITAL\n0   301389.SZ        301389  ...                   None                None\n1   301389.SZ        301389  ...                   None                None\n2   301389.SZ        301389  ...                   None                None\n3   301389.SZ        301389  ...                   None                None\n4   301389.SZ        301389  ...                   None                None\n5   301389.SZ        301389  ...                   None                None\n6   301389.SZ        301389  ...                   None                None\n7   301389.SZ        301389  ...                   None                None\n8   301389.SZ        301389  ...                   None                None\n9   301389.SZ        301389  ...                   None                None\n10  301389.SZ        301389  ...                   None                None\n11  301389.SZ        301389  ...                   None                None\n12  301389.SZ        301389  ...                   None                None\n13  301389.SZ        301389  ...                   None                None\n14  301389.SZ        301389  ...                   None                None\n15  301389.SZ        301389  ...                   None                None\n16  301389.SZ        301389  ...                   None                None\n17  301389.SZ        301389  ...                   None                None\n18  301389.SZ        301389  ...                   None                None\n19  301389.SZ        301389  ...                   None                None\n[20 rows x 140 columns]\n```\n\n#### 财务指标\n\n接口: stock_financial_analysis_indicator\n\n目标地址: https://money.finance.sina.com.cn/corp/go.php/vFD_FinancialGuideLine/stockid/600004/ctrl/2019/displaytype/4.phtml\n\n描述: 新浪财经-财务分析-财务指标\n\n限量: 单次获取指定 symbol 和 start_year 的所有财务指标历史数据\n\n输入参数\n\n| 名称         | 类型  | 描述                         |\n|------------|-----|----------------------------|\n| symbol     | str | symbol=\"600004\"; 股票代码      |\n| start_year | str | start_year=\"2020\"; 开始查询的时间 |\n\n输出参数\n\n| 名称                | 类型      | 描述 |\n|-------------------|---------|----|\n| 日期                | object  | -  |\n| 摊薄每股收益(元)         | float64 | -  |\n| 加权每股收益(元)         | float64 | -  |\n| 每股收益_调整后(元)       | float64 | -  |\n| 扣除非经常性损益后的每股收益(元) | float64 | -  |\n| 每股净资产_调整前(元)      | float64 | -  |\n| 每股净资产_调整后(元)      | float64 | -  |\n| 每股经营性现金流(元)       | float64 | -  |\n| 每股资本公积金(元)        | float64 | -  |\n| 每股未分配利润(元)        | float64 | -  |\n| 调整后的每股净资产(元)      | float64 | -  |\n| 总资产利润率(%)         | float64 | -  |\n| 主营业务利润率(%)        | float64 | -  |\n| 总资产净利润率(%)        | float64 | -  |\n| 成本费用利润率(%)        | float64 | -  |\n| 营业利润率(%)          | float64 | -  |\n| 主营业务成本率(%)        | float64 | -  |\n| 销售净利率(%)          | float64 | -  |\n| 股本报酬率(%)          | float64 | -  |\n| 净资产报酬率(%)         | float64 | -  |\n| 资产报酬率(%)          | float64 | -  |\n| 销售毛利率(%)          | float64 | -  |\n| 三项费用比重            | float64 | -  |\n| 非主营比重             | float64 | -  |\n| 主营利润比重            | float64 | -  |\n| 股息发放率(%)          | float64 | -  |\n| 投资收益率(%)          | float64 | -  |\n| 主营业务利润(元)         | float64 | -  |\n| 净资产收益率(%)         | float64 | -  |\n| 加权净资产收益率(%)       | float64 | -  |\n| 扣除非经常性损益后的净利润(元)  | float64 | -  |\n| 主营业务收入增长率(%)      | float64 | -  |\n| 净利润增长率(%)         | float64 | -  |\n| 净资产增长率(%)         | float64 | -  |\n| 总资产增长率(%)         | float64 | -  |\n| 应收账款周转率(次)        | float64 | -  |\n| 应收账款周转天数(天)       | float64 | -  |\n| 存货周转天数(天)         | float64 | -  |\n| 存货周转率(次)          | float64 | -  |\n| 固定资产周转率(次)        | float64 | -  |\n| 总资产周转率(次)         | float64 | -  |\n| 总资产周转天数(天)        | float64 | -  |\n| 流动资产周转率(次)        | float64 | -  |\n| 流动资产周转天数(天)       | float64 | -  |\n| 股东权益周转率(次)        | float64 | -  |\n| 流动比率              | float64 | -  |\n| 速动比率              | float64 | -  |\n| 现金比率(%)           | float64 | -  |\n| 利息支付倍数            | float64 | -  |\n| 长期债务与营运资金比率(%)    | float64 | -  |\n| 股东权益比率(%)         | float64 | -  |\n| 长期负债比率(%)         | float64 | -  |\n| 股东权益与固定资产比率(%)    | float64 | -  |\n| 负债与所有者权益比率(%)     | float64 | -  |\n| 长期资产与长期资金比率(%)    | float64 | -  |\n| 资本化比率(%)          | float64 | -  |\n| 固定资产净值率(%)        | float64 | -  |\n| 资本固定化比率(%)        | float64 | -  |\n| 产权比率(%)           | float64 | -  |\n| 清算价值比率(%)         | float64 | -  |\n| 固定资产比重(%)         | float64 | -  |\n| 资产负债率(%)          | float64 | -  |\n| 总资产(元)            | float64 | -  |\n| 经营现金净流量对销售收入比率(%) | float64 | -  |\n| 资产的经营现金流量回报率(%)   | float64 | -  |\n| 经营现金净流量与净利润的比率(%) | float64 | -  |\n| 经营现金净流量对负债比率(%)   | float64 | -  |\n| 现金流量比率(%)         | float64 | -  |\n| 短期股票投资(元)         | float64 | -  |\n| 短期债券投资(元)         | float64 | -  |\n| 短期其它经营性投资(元)      | float64 | -  |\n| 长期股票投资(元)         | float64 | -  |\n| 长期债券投资(元)         | float64 | -  |\n| 长期其它经营性投资(元)      | float64 | -  |\n| 1年以内应收帐款(元)       | float64 | -  |\n| 1-2年以内应收帐款(元)     | float64 | -  |\n| 2-3年以内应收帐款(元)     | float64 | -  |\n| 3年以内应收帐款(元)       | float64 | -  |\n| 1年以内预付货款(元)       | float64 | -  |\n| 1-2年以内预付货款(元)     | float64 | -  |\n| 2-3年以内预付货款(元)     | float64 | -  |\n| 3年以内预付货款(元)       | float64 | -  |\n| 1年以内其它应收款(元)      | float64 | -  |\n| 1-2年以内其它应收款(元)    | float64 | -  |\n| 2-3年以内其它应收款(元)    | float64 | -  |\n| 3年以内其它应收款(元)      | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_financial_analysis_indicator_df = ak.stock_financial_analysis_indicator(symbol=\"600004\", start_year=\"2020\")\nprint(stock_financial_analysis_indicator_df)\n```\n\n数据示例\n\n```\n         日期  摊薄每股收益(元)  ... 2-3年以内其它应收款(元) 3年以内其它应收款(元)\n0   2020-03-31    -0.0307  ...             NaN           NaN\n1   2020-06-30    -0.0816  ...      1189862.00           NaN\n2   2020-09-30    -0.1380  ...             NaN           NaN\n3   2020-12-31    -0.0980  ...      1495234.99           NaN\n4   2021-03-31    -0.0645  ...             NaN           NaN\n5   2021-06-30    -0.1686  ...      3471186.42           NaN\n6   2021-09-30    -0.2038  ...             NaN           NaN\n7   2021-12-31    -0.1628  ...      1380992.96           NaN\n8   2022-03-31    -0.0326  ...             NaN           NaN\n9   2022-06-30    -0.2242  ...      1680204.08           NaN\n10  2022-09-30    -0.2671  ...             NaN           NaN\n11  2022-12-31    -0.4613  ...      2459538.50           NaN\n12  2023-03-31     0.0216  ...             NaN           NaN\n13  2023-06-30     0.0720  ...      2591827.74           NaN\n14  2023-09-30     0.1232  ...             NaN           NaN\n15  2023-12-31     0.2032  ...      7162683.42           NaN\n16  2024-03-31     0.0841  ...             NaN           NaN\n[17 rows x 86 columns]\n```\n\n#### 港股财务指标\n\n接口: stock_financial_hk_analysis_indicator_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HKF10/NewFinancialAnalysis/index?type=web&code=00700\n\n描述: 东方财富-港股-财务分析-主要指标\n\n限量: 单次获取财务指标所有历史数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                      |\n|-----------|-----|-----------------------------------------|\n| symbol    | str | symbol=\"00700\"; 股票代码                    |\n| indicator | str | indicator=\"年度\"; choice of {\"年度\", \"报告期\"} |\n\n输出参数\n\n| 名称                  | 类型      | 描述             |\n|---------------------|---------|----------------|\n| SECUCODE            | object  | 股票代码(带HK后缀)    |\n| SECURITY_CODE       | object  | 股票代码(不带HK后缀)   |\n| SECURITY_NAME_ABBR  | object  | 股票名称           |\n| ORG_CODE            | object  | ORG_CODE       |\n| REPORT_DATE         | object  | 报告日期           |\n| DATE_TYPE_CODE      | object  | 报告日期类型         |\n| PER_NETCASH_OPERATE | float64 | 每股经营现金流(元)     |\n| PER_OI              | float64 | 每股营业收入(元)      |\n| BPS                 | float64 | 每股净资产(元)       |\n| BASIC_EPS           | float64 | 基本每股收益(元)      |\n| DILUTED_EPS         | float64 | 稀释每股收益(元)      |\n| OPERATE_INCOME      | int64   | 营业总收入(元)       |\n| OPERATE_INCOME_YOY  | float64 | 营业总收入同比增长(%)   |\n| GROSS_PROFIT        | int64   | 毛利润(元)         |\n| GROSS_PROFIT_YOY    | float64 | 毛利润同比增长(%)     |\n| HOLDER_PROFIT       | int64   | 归母净利润(元)       |\n| HOLDER_PROFIT_YOY   | float64 | 归母净利润同比增长(%)   |\n| GROSS_PROFIT_RATIO  | float64 | 毛利率(%)         |\n| EPS_TTM             | float64 | TTM每股收益(元)     |\n| OPERATE_INCOME_QOQ  | float64 | 营业总收入滚动环比增长(%) |\n| NET_PROFIT_RATIO    | float64 | 净利率(%)         |\n| ROE_AVG             | float64 | 平均净资产收益率(%)    |\n| GROSS_PROFIT_QOQ    | float64 | 毛利润滚动环比增长(%)   |\n| ROA                 | float64 | 总资产净利率(%)      |\n| HOLDER_PROFIT_QOQ   | float64 | 归母净利润滚动环比增长(%) |\n| ROE_YEARLY          | float64 | 年化净资产收益率(%)    |\n| ROIC_YEARLY         | float64 | 年化投资回报率(%)     |\n| TAX_EBT             | float64 | 所得税/利润总额(%)    |\n| OCF_SALES           | float64 | 经营现金流/营业收入(%)  |\n| DEBT_ASSET_RATIO    | float64 | 资产负债率(%)       |\n| CURRENT_RATIO       | float64 | 流动比率(倍)        |\n| CURRENTDEBT_DEBT    | float64 | 流动负债/总负债(%)    |\n| START_DATE          | object  | START_DATE     |\n| FISCAL_YEAR         | object  | 年结日            |\n| CURRENCY            | object  | CURRENCY       |\n| IS_CNY_CODE         | int64   | IS_CNY_CODE    |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_financial_hk_analysis_indicator_em_df = ak.stock_financial_hk_analysis_indicator_em(symbol=\"00700\", indicator=\"年度\")\nprint(stock_financial_hk_analysis_indicator_em_df)\n```\n\n数据示例\n\n```\n   SECUCODE SECURITY_CODE SECURITY_NAME_ABBR  ... FISCAL_YEAR CURRENCY IS_CNY_CODE\n0  00700.HK         00700               腾讯控股  ...       12-31      HKD           0\n1  00700.HK         00700               腾讯控股  ...       12-31      HKD           0\n2  00700.HK         00700               腾讯控股  ...       12-31      HKD           0\n3  00700.HK         00700               腾讯控股  ...       12-31      HKD           0\n4  00700.HK         00700               腾讯控股  ...       12-31      HKD           0\n5  00700.HK         00700               腾讯控股  ...       12-31      HKD           0\n6  00700.HK         00700               腾讯控股  ...       12-31      HKD           0\n7  00700.HK         00700               腾讯控股  ...       12-31      HKD           0\n8  00700.HK         00700               腾讯控股  ...       12-31      HKD           0\n[9 rows x 36 columns]\n```\n\n#### 美股财务指标\n\n接口: stock_financial_us_analysis_indicator_em\n\n目标地址: https://emweb.eastmoney.com/PC_USF10/pages/index.html?code=TSLA&type=web&color=w#/cwfx/zyzb\n\n描述: 东方财富-美股-财务分析-主要指标\n\n限量: 单次获取指定股票的所有历史数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                              |\n|-----------|-----|-------------------------------------------------|\n| symbol    | str | symbol=\"TSLA\"; 股票代码                             |\n| indicator | str | indicator=\"年报\"; choice of {\"年报\", \"单季报\", \"累计季报\"} |\n\n输出参数\n\n| 名称                          | 类型      | 描述 |\n|-----------------------------|---------|----|\n| SECUCODE                    | object  | -  |\n| SECURITY_CODE               | object  | -  |\n| SECURITY_NAME_ABBR          | object  | -  |\n| ORG_CODE                    | object  | -  |\n| SECURITY_INNER_CODE         | object  | -  |\n| ACCOUNTING_STANDARDS        | object  | -  |\n| NOTICE_DATE                 | object  | -  |\n| START_DATE                  | object  | -  |\n| REPORT_DATE                 | object  | -  |\n| FINANCIAL_DATE              | object  | -  |\n| STD_REPORT_DATE             | object  | -  |\n| CURRENCY                    | object  | -  |\n| DATE_TYPE                   | object  | -  |\n| DATE_TYPE_CODE              | object  | -  |\n| REPORT_TYPE                 | object  | -  |\n| REPORT_DATA_TYPE            | object  | -  |\n| ORGTYPE                     | object  | -  |\n| OPERATE_INCOME              | float64 | -  |\n| OPERATE_INCOME_YOY          | float64 | -  |\n| GROSS_PROFIT                | float64 | -  |\n| GROSS_PROFIT_YOY            | float64 | -  |\n| PARENT_HOLDER_NETPROFIT     | int64   | -  |\n| PARENT_HOLDER_NETPROFIT_YOY | float64 | -  |\n| BASIC_EPS                   | float64 | -  |\n| DILUTED_EPS                 | float64 | -  |\n| GROSS_PROFIT_RATIO          | float64 | -  |\n| NET_PROFIT_RATIO            | float64 | -  |\n| ACCOUNTS_RECE_TR            | float64 | -  |\n| INVENTORY_TR                | float64 | -  |\n| TOTAL_ASSETS_TR             | float64 | -  |\n| ACCOUNTS_RECE_TDAYS         | float64 | -  |\n| INVENTORY_TDAYS             | float64 | -  |\n| TOTAL_ASSETS_TDAYS          | float64 | -  |\n| ROE_AVG                     | float64 | -  |\n| ROA                         | float64 | -  |\n| CURRENT_RATIO               | float64 | -  |\n| SPEED_RATIO                 | float64 | -  |\n| OCF_LIQDEBT                 | float64 | -  |\n| DEBT_ASSET_RATIO            | float64 | -  |\n| EQUITY_RATIO                | float64 | -  |\n| BASIC_EPS_YOY               | float64 | -  |\n| GROSS_PROFIT_RATIO_YOY      | float64 | -  |\n| NET_PROFIT_RATIO_YOY        | float64 | -  |\n| ROE_AVG_YOY                 | float64 | -  |\n| ROA_YOY                     | float64 | -  |\n| DEBT_ASSET_RATIO_YOY        | float64 | -  |\n| CURRENT_RATIO_YOY           | float64 | -  |\n| SPEED_RATIO_YOY             | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_financial_us_analysis_indicator_em_df = ak.stock_financial_us_analysis_indicator_em(symbol=\"TSLA\", indicator=\"年报\")\nprint(stock_financial_us_analysis_indicator_em_df)\n```\n\n数据示例\n\n```\n   SECUCODE SECURITY_CODE  ... CURRENT_RATIO_YOY SPEED_RATIO_YOY\n0    TSLA.O          TSLA  ...         17.325422       28.440175\n1    TSLA.O          TSLA  ...         12.659536       19.087360\n2    TSLA.O          TSLA  ...         11.391821       -2.942407\n3    TSLA.O          TSLA  ...        -26.656933      -31.763438\n4    TSLA.O          TSLA  ...         65.265821       98.010070\n5    TSLA.O          TSLA  ...         36.490497       54.229892\n6    TSLA.O          TSLA  ...         -2.902445       -7.382595\n7    TSLA.O          TSLA  ...        -20.306070      -21.998647\n8    TSLA.O          TSLA  ...          8.548288       34.456320\n9    TSLA.O          TSLA  ...        -34.422709      -49.356229\n10   TSLA.O          TSLA  ...        -19.511791      -22.928303\n11   TSLA.O          TSLA  ...         92.625823      188.401364\n12   TSLA.O          TSLA  ...        -50.045468      -71.819999\n13   TSLA.O          TSLA  ...        -29.317702      -24.315460\n14   TSLA.O          TSLA  ...         57.604938       65.676565\n15   TSLA.O          TSLA  ...        389.435012      700.530829\n16   TSLA.O          TSLA  ...        -17.820400      -57.326660\n17   TSLA.O          TSLA  ...               NaN             NaN\n18   TSLA.O          TSLA  ...               NaN             NaN\n[19 rows x 48 columns]\n```\n\n#### 历史分红\n\n接口: stock_history_dividend\n\n目标地址: http://vip.stock.finance.sina.com.cn/q/go.php/vInvestConsult/kind/lsfh/index.phtml\n\n描述: 新浪财经-发行与分配-历史分红\n\n限量: 单次获取所有股票的历史分红数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 代码   | object  | -       |\n| 名称   | object  | -       |\n| 上市日期 | object  | -       |\n| 累计股息 | float64 | 注意单位: % |\n| 年均股息 | float64 | 注意单位: % |\n| 分红次数 | float64 | -       |\n| 融资总额 | float64 | 注意单位: 亿 |\n| 融资次数 | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_history_dividend_df = ak.stock_history_dividend()\nprint(stock_history_dividend_df)\n```\n\n数据示例\n\n```\n     代码      名称     上市日期   累计股息  年均股息 分红次数 融资总额 融资次数\n0     000550  江铃汽车  1993-12-01  213.0  6.87    51   0.0000     0\n1     000541  佛山照明  1993-11-23  192.0  6.19    56  10.8842     1\n2     000429  粤高速A  1998-02-20  171.4  6.35    50  16.3350     1\n3     000726   鲁泰A  2000-12-25  143.9  6.00    47   9.5082     1\n4     000581  威孚高科  1998-09-24  143.1  5.50    48  28.5012     1\n...      ...   ...         ...    ...   ...   ...      ...   ...\n5556  920002  万达轴承  2024-05-30    0.0  0.00     0   1.0235     1\n5557  920008  成电光信  2024-08-29    0.0  0.00     0   0.8949     1\n5558  920016  中草香料  2024-09-13    0.0  0.00     0   1.1465     1\n5559  920099  瑞华技术  2024-09-25    0.0  0.00     0   0.0000     0\n5560  920118  太湖远大  2024-08-22    0.0  0.00     0   0.0000     0\n[5561 rows x 8 columns]\n```\n\n#### 十大流通股东(个股)\n\n接口: stock_gdfx_free_top_10_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HSF10/ShareholderResearch/Index?type=web&code=SH688686#sdltgd-0\n\n描述: 东方财富网-个股-十大流通股东\n\n限量: 单次返回指定 symbol 和 date 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                            |\n|--------|-----|-------------------------------|\n| symbol | str | symbol=\"sh688686\"; 带市场标识的股票代码 |\n| date   | str | date=\"20240930\"; 财报发布季度最后日    |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 名次         | int64   | -       |\n| 股东名称       | object  | -       |\n| 股东性质       | object  | -       |\n| 股份类型       | object  | -       |\n| 持股数        | int64   | 注意单位: 股 |\n| 占总流通股本持股比例 | float64 | 注意单位: % |\n| 增减         | object  | 注意单位: 股 |\n| 变动比率       | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gdfx_free_top_10_em_df = ak.stock_gdfx_free_top_10_em(symbol=\"sh688686\", date=\"20240930\")\nprint(stock_gdfx_free_top_10_em_df)\n```\n\n数据示例\n\n```\n   名次                               股东名称  ...        增减       变动比率\n0   1                                 卢治临  ...        不变        NaN\n1   2                                 卢盛林  ...        不变        NaN\n2   3                                 许学亮  ...        不变        NaN\n3   4                  宁波千智创业投资合伙企业(有限合伙)  ...        不变        NaN\n4   5                          香港中央结算有限公司  ...  -1132820 -25.435429\n5   6  国信证券-招商银行-国信证券鼎信10号科创板战略配售集合资产管理计划  ...        不变        NaN\n6   7        摩根资产管理(新加坡)有限公司-摩根中国A股市场机会基金  ...        不变        NaN\n7   8                                 李茂波  ...        不变        NaN\n8   9     招商银行股份有限公司-惠升惠泽灵活配置混合型发起式证券投资基金  ...        不变        NaN\n9  10         MERRILL LYNCH INTERNATIONAL  ...        新进        NaN\n[10 rows x 8 columns]\n```\n\n#### 十大股东(个股)\n\n接口: stock_gdfx_top_10_em\n\n目标地址: https://emweb.securities.eastmoney.com/PC_HSF10/ShareholderResearch/Index?type=web&code=SH688686#sdltgd-0\n\n描述: 东方财富网-个股-十大股东\n\n限量: 单次返回指定 symbol 和 date 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                            |\n|--------|-----|-------------------------------|\n| symbol | str | symbol=\"sh688686\"; 带市场标识的股票代码 |\n| date   | str | date=\"20210630\"; 财报发布季度最后日    |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 名次       | int64   | -       |\n| 股东名称     | object  | -       |\n| 股份类型     | object  | -       |\n| 持股数      | int64   | 注意单位: 股 |\n| 占总股本持股比例 | float64 | 注意单位: % |\n| 增减       | object  | 注意单位: 股 |\n| 变动比率     | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gdfx_top_10_em_df = ak.stock_gdfx_top_10_em(symbol=\"sh688686\", date=\"20210630\")\nprint(stock_gdfx_top_10_em_df)\n```\n\n数据示例\n\n```\n   名次                                        股东名称  ...       增减       变动比率\n0   1                                         卢治临  ...       不变        NaN\n1   2                                         卢盛林  ...       不变        NaN\n2   3                                         许学亮  ...       不变        NaN\n3   4                          东莞千智股权投资合伙企业(有限合伙)  ...       不变        NaN\n4   5                  高华-汇丰-GOLDMAN,SACHS&CO.LLC  ...   946997  54.311934\n5   6            铭基国际投资公司-MATTHEWS ASIA FUNDS(US)  ...  -358837 -15.460528\n6   7     MORGAN STANLEY & CO. INTERNATIONAL PLC.  ...    70003   4.082755\n7   8  宁波梅山保税港区晨道投资合伙企业-长江晨道(湖北)新能源产业投资合伙企业(有限合伙)  ...       不变        NaN\n8   9          国信证券-招商银行-国信证券鼎信10号科创板战略配售集合资产管理计划  ...  -639100 -30.994180\n9  10                      FMR 有限公司-富达新兴市场基金(交易所)  ...       新进        NaN\n```\n\n#### 股东持股变动统计-十大流通股东\n\n接口: stock_gdfx_free_holding_change_em\n\n目标地址: https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n\n描述: 东方财富网-数据中心-股东分析-股东持股变动统计-十大流通股东\n\n限量: 单次返回指定 date 的所有数据\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20210930\"; 财报发布季度最后日 |\n\n输出参数\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 序号           | int64   | -       |\n| 股东名称         | object  | -       |\n| 股东类型         | object  | -       |\n| 期末持股只数统计-总持有 | float64 | -       |\n| 期末持股只数统计-新进  | float64 | -       |\n| 期末持股只数统计-增加  | float64 | -       |\n| 期末持股只数统计-不变  | float64 | -       |\n| 期末持股只数统计-减少  | float64 | -       |\n| 流通市值统计       | float64 | 注意单位: 元 |\n| 持有个股         | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gdfx_free_holding_change_em_df = ak.stock_gdfx_free_holding_change_em(date=\"20210930\")\nprint(stock_gdfx_free_holding_change_em_df)\n```\n\n数据示例\n\n```\n          序号  ...                                               持有个股\n0          1  ...  603218|日月股份,600988|赤峰黄金,600298|安琪酵母,300232|洲明科...\n1          2  ...  600519|贵州茅台,000686|东北证券,002533|金杯电工,002066|瑞泰科...\n2          3  ...  600519|贵州茅台,300015|爱尔眼科,600674|川投能源,600009|上海机...\n3          4  ...  000026|飞亚达,200026|飞亚达B,300946|恒而达,000751|锌业股份,...\n4          5  ...  300005|探路者,300946|恒而达,000985|大庆华科,300927|江天化学,...\n      ...  ...                                                ...\n30953  30954  ...                                        002982|湘佳股份\n30954  30955  ...                                        300917|特发服务\n30955  30956  ...                                         688733|壹石通\n30956  30957  ...                                        300969|恒帅股份\n30957  30958  ...                                        002896|中大力德\n```\n\n#### 股东持股变动统计-十大股东\n\n接口: stock_gdfx_holding_change_em\n\n目标地址: https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n\n描述: 东方财富网-数据中心-股东分析-股东持股变动统计-十大股东\n\n限量: 单次返回指定 date 的所有数据\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20210930\"; 财报发布季度最后日 |\n\n输出参数\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 序号           | int64   | -       |\n| 股东名称         | object  | -       |\n| 股东类型         | object  | -       |\n| 期末持股只数统计-总持有 | float64 | -       |\n| 期末持股只数统计-新进  | float64 | -       |\n| 期末持股只数统计-增加  | float64 | -       |\n| 期末持股只数统计-不变  | float64 | -       |\n| 期末持股只数统计-减少  | float64 | -       |\n| 流通市值统计       | float64 | 注意单位: 元 |\n| 持有个股         | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gdfx_holding_change_em_df = ak.stock_gdfx_holding_change_em(date=\"20210930\")\nprint(stock_gdfx_holding_change_em_df)\n```\n\n数据示例\n\n```\n          序号  ...                                               持有个股\n0          1  ...  600763|通策医疗,300229|拓尔思,603039|泛微网络,300006|莱美药业...\n1          2  ...  002225|濮耐股份,600435|北方导航,600422|昆药集团,600009|上海机...\n2          3  ...  600340|华夏幸福,600009|上海机场,000001|平安银行,601899|紫金矿...\n3          4  ...  601865|福莱特,601899|紫金矿业,000756|新华制药,600036|招商银行...\n4          5  ...  002479|富春环保,300582|英飞特,300358|楚天科技,002892|科力尔,...\n      ...  ...                                                ...\n33896  33897  ...                                        300047|天源迪科\n33897  33898  ...                                        300969|恒帅股份\n33898  33899  ...                                        000425|徐工机械\n33899  33900  ...                                        002896|中大力德\n33900  33901  ...                            000761|本钢板材,200761|本钢板B\n```\n\n#### 高管持股变动统计\n\n接口: stock_management_change_ths\n\n目标地址: https://basic.10jqka.com.cn/new/688981/event.html\n\n描述: 同花顺-公司大事-高管持股变动\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"688981\"; 股票代码 |\n\n输出参数\n\n| 名称      | 类型     | 描述      |\n|---------|--------|---------|\n| 公告日期    | object | -       |\n| 变动人     | object | -       |\n| 与公司高管关系 | object | -       |\n| 变动数量    | object | 注意单位: 股 |\n| 交易均价    | object | 注意单位: 元 |\n| 剩余股数    | object | 注意单位: 股 |\n| 变动途径    | object | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_management_change_ths_df = ak.stock_management_change_ths(symbol=\"688981\")\nprint(stock_management_change_ths_df)\n```\n\n数据示例\n\n```\n          变动日期  变动人 与公司高管关系     ...   交易均价    剩余股数  股份变动途径\n0   2022-09-01   张昕  核心技术人员    ...  20.00   9.60万    股权激励\n1   2022-09-01   金达  核心技术人员    ...  20.00   4.80万    股权激励\n2   2022-09-01  阎大勇  核心技术人员    ...  20.00   4.20万    股权激励\n3   2022-10-10  阎大勇  核心技术人员  减持4.20万  37.98    0.00  二级市场买卖\n  ...             ...             ...\n10  2024-09-05  阎大勇  核心技术人员  增持3.50万  20.00   7.00万  股权激励实施\n11  2024-09-05   张昕  核心技术人员  增持8.00万  20.00  16.00万  股权激励实施\n12  2024-09-25   张昕  核心技术人员  减持1.80万  45.31  14.20万  二级市场买卖\n13  2024-09-30   金达  核心技术人员  减持4.00万  54.87   4.00万  二级市场买卖\n[13 rows x 7 columns]\n```\n\n#### 股东持股变动统计\n\n接口: stock_shareholder_change_ths\n\n目标地址: https://basic.10jqka.com.cn/new/688981/event.html\n\n描述: 同花顺-公司大事-股东持股变动\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"688981\"; 股票代码 |\n\n输出参数\n\n| 名称     | 类型     | 描述      |\n|--------|--------|---------|\n| 公告日期   | object | -       |\n| 变动股东   | object | -       |\n| 变动数量   | object | 注意单位: 股 |\n| 交易均价   | object | 注意单位: 元 |\n| 剩余股份总数 | object | 注意单位: 股 |\n| 变动期间   | object | -       |\n| 变动途径   | object | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_shareholder_change_ths_df = ak.stock_shareholder_change_ths(symbol=\"688981\")\nprint(stock_shareholder_change_ths_df)\n```\n\n数据示例\n\n```\n         公告日期                        变动股东  ...                   变动期间         变动途径\n0  2021-08-11           GICPrivateLimited  ...                  2021.08.04-2021.08.04  二级市场\n1  2022-12-16   华夏上证科创板50成份交易型开放式指数证券投资基金  ...  2022.12.14-2022.12.14  二级市场\n2  2023-04-13   华夏上证科创板50成份交易型开放式指数证券投资基金  ...  2023.04.10-2023.04.10  二级市场\n3  2023-08-31   华夏上证科创板50成份交易型开放式指数证券投资基金  ...  2023.08.29-2023.08.29  二级市场\n4  2024-02-28   华夏上证科创板50成份交易型开放式指数证券投资基金  ...  2024.02.26-2024.02.26  二级市场\n5  2024-10-12  易方达上证科创板50成份交易型开放式指数证券投资基金  ...  2024.10.10-2024.10.10  二级市场\n6  2024-10-23  易方达上证科创板50成份交易型开放式指数证券投资基金  ...  2024.10.21-2024.10.21  二级市场\n[7 rows x 7 columns]\n```\n\n#### 股东持股分析-十大流通股东\n\n接口: stock_gdfx_free_holding_analyse_em\n\n目标地址: https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n\n描述: 东方财富网-数据中心-股东分析-股东持股分析-十大流通股东\n\n限量: 单次获取返回所有数据\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20230930\"; 财报发布季度最后日 |\n\n输出参数\n\n| 名称             | 类型      | 描述      |\n|----------------|---------|---------|\n| 序号             | int64   | -       |\n| 股东名称           | object  | -       |\n| 股东类型           | object  | -       |\n| 股票代码           | object  | -       |\n| 股票简称           | object  | -       |\n| 报告期            | object  | -       |\n| 期末持股-数量        | float64 | 注意单位: 股 |\n| 期末持股-数量变化      | float64 | 注意单位: 股 |\n| 期末持股-数量变化比例    | float64 | 注意单位: % |\n| 期末持股-持股变动      | float64 | -       |\n| 期末持股-流通市值      | float64 | 注意单位: 元 |\n| 公告日            | object  | -       |\n| 公告日后涨跌幅-10个交易日 | float64 | 注意单位: % |\n| 公告日后涨跌幅-30个交易日 | float64 | 注意单位: % |\n| 公告日后涨跌幅-60个交易日 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gdfx_free_holding_analyse_em_df = ak.stock_gdfx_free_holding_analyse_em(date=\"20230930\")\nprint(stock_gdfx_free_holding_analyse_em_df)\n```\n\n数据示例\n\n```\n          序号  ... 公告日后涨跌幅-60个交易日\n0          1  ...      -0.959312\n1          2  ...      -0.959312\n2          3  ...      -0.959312\n3          4  ...      -0.959312\n4          5  ...      -0.959312\n      ...  ...            ...\n53269  53270  ...       2.169464\n53270  53271  ...       2.169464\n53271  53272  ...       2.169464\n53272  53273  ...       2.169464\n53273  53274  ...       2.169464\n[53274 rows x 15 columns]\n```\n\n#### 股东持股分析-十大股东\n\n接口: stock_gdfx_holding_analyse_em\n\n目标地址: https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n\n描述: 东方财富网-数据中心-股东分析-股东持股分析-十大股东\n\n限量: 单次获取返回所有数据\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20210930\"; 财报发布季度最后日 |\n\n输出参数\n\n| 名称             | 类型      | 描述      |\n|----------------|---------|---------|\n| 序号             | int64   | -       |\n| 股东名称           | object  | -       |\n| 股东类型           | object  | -       |\n| 股票代码           | object  | -       |\n| 股票简称           | object  | -       |\n| 报告期            | object  | -       |\n| 期末持股-数量        | float64 | 注意单位: 股 |\n| 期末持股-数量变化      | float64 | 注意单位: 股 |\n| 期末持股-数量变化比例    | float64 | 注意单位: % |\n| 期末持股-持股变动      | float64 | -       |\n| 期末持股-流通市值      | float64 | 注意单位: 元 |\n| 公告日            | object  | -       |\n| 公告日后涨跌幅-10个交易日 | float64 | 注意单位: % |\n| 公告日后涨跌幅-30个交易日 | float64 | 注意单位: % |\n| 公告日后涨跌幅-60个交易日 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gdfx_holding_analyse_em_df = ak.stock_gdfx_holding_analyse_em(date=\"20210930\")\nprint(stock_gdfx_holding_analyse_em_df)\n```\n\n数据示例\n\n```\n          序号               股东名称  ... 公告日后涨跌幅-30个交易日 公告日后涨跌幅-60个交易日\n0          1     厦门象屿资产管理运营有限公司  ...            NaN            NaN\n1          2       厦门港务控股集团有限公司  ...            NaN            NaN\n2          3       厦门国际会展控股有限公司  ...            NaN            NaN\n3          4       厦门国贸金融控股有限公司  ...            NaN            NaN\n4          5         福建奥元集团有限公司  ...            NaN            NaN\n      ...                ...  ...            ...            ...\n55198  55199  深圳市德益共赢投资企业(有限合伙)  ...            NaN            NaN\n55199  55200                王小峰  ...            NaN            NaN\n55200  55201                卢达华  ...            NaN            NaN\n55201  55202      东莞市通辉模具股份有限公司  ...            NaN            NaN\n55202  55203                 赵禹  ...            NaN            NaN\n```\n\n#### 股东持股明细-十大流通股东\n\n接口: stock_gdfx_free_holding_detail_em\n\n目标地址: https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n\n描述: 东方财富网-数据中心-股东分析-股东持股明细-十大流通股东\n\n限量: 单次返回指定 date 的所有数据\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20210930\"; 财报发布季度最后日 |\n\n输出参数\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 序号           | int64   | -       |\n| 股东名称         | object  | -       |\n| 股东类型         | object  | -       |\n| 股票代码         | object  | -       |\n| 股票简称         | object  | -       |\n| 报告期          | object  | -       |\n| 期末持股-数量      | float64 | 注意单位: 股 |\n| 期末持股-数量变化    | float64 | 注意单位: 股 |\n| 期末持股-数量变化比例  | float64 | 注意单位: % |\n| 期末持股-持股变动    | float64 | -       |\n| 期末持股-流通市值    | float64 | 注意单位: 元 |\n| 公告日          | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gdfx_free_holding_detail_em_df = ak.stock_gdfx_free_holding_detail_em(date=\"20210930\")\nprint(stock_gdfx_free_holding_detail_em_df)\n```\n\n数据示例\n\n```\n     序号                                 股东名称  ...     期末持股-流通市值         公告日\n0          1                         漯河银鸽实业集团有限公司  ...  2.152836e+08  2022-04-29\n1          2                       永城煤电控股集团上海有限公司  ...  1.363201e+07  2022-04-29\n2          3                      漯河市发展投资控股集团有限公司  ...  5.661508e+06  2022-04-29\n3          4                                  黄毅明  ...  4.968781e+06  2022-04-29\n4          5                                  何卫昌  ...  3.609256e+06  2022-04-29\n      ...                                  ...  ...           ...         ...\n46546  46547     中国工商银行股份有限公司-东方红启恒三年持有期混合型证券投资基金  ...  2.441112e+08  2021-10-12\n46547  46548        招商银行股份有限公司-泓德瑞兴三年持有期混合型证券投资基金  ...  2.201811e+08  2021-10-12\n46548  46549  中国工商银行股份有限公司-富国天惠精选成长混合型证券投资基金(LOF)  ...  2.132101e+08  2021-10-12\n46549  46550                          全国社保基金四零二组合  ...  2.128475e+08  2021-10-12\n46550  46551              中国工商银行股份有限公司-博时信用债券投资基金  ...  2.079605e+08  2021-10-12\n```\n\n#### 股东持股明细-十大股东\n\n接口: stock_gdfx_holding_detail_em\n\n目标地址: https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n\n描述: 东方财富网-数据中心-股东分析-股东持股明细-十大股东\n\n限量: 单次返回指定参数的所有数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                     |\n|-----------|-----|------------------------------------------------------------------------|\n| date      | str | date=\"20230331\"; 财报发布季度最后日                                             |\n| indicator | str | indicator=\"个人\"; 股东类型; choice of {\"个人\", \"基金\", \"QFII\", \"社保\", \"券商\", \"信托\"} |\n| symbol    | str | symbol=\"新进\"; 持股变动; choice of {\"新进\", \"增加\", \"不变\", \"减少\"}                  |\n\n输出参数\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 序号           | int64   | -       |\n| 股东名称         | object  | -       |\n| 股东排名         | object  | -       |\n| 股票代码         | object  | -       |\n| 股票简称         | object  | -       |\n| 报告期          | object  | -       |\n| 期末持股-数量      | float64 | 注意单位: 股 |\n| 期末持股-数量变化    | float64 | 注意单位: 股 |\n| 期末持股-数量变化比例  | float64 | 注意单位: % |\n| 期末持股-持股变动    | float64 | -       |\n| 期末持股-流通市值    | float64 | 注意单位: 元 |\n| 公告日          | object  | -       |\n| 股东类型         | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gdfx_holding_detail_em_df = ak.stock_gdfx_holding_detail_em(date=\"20230331\", indicator=\"个人\", symbol=\"新进\")\nprint(stock_gdfx_holding_detail_em_df)\n```\n\n数据示例\n\n```\n        序号           股东名称 股东类型    股票代码  ... 期末持股-持股变动 期末持股-流通市值         公告日  股东排名\n0        1            金凤霞   个人  688651  ...        新进       NaN  2023-07-21     6\n1        2            周华金   个人  688651  ...        新进       NaN  2023-07-21     9\n2        3            王润合   个人  688651  ...        新进       NaN  2023-07-21    10\n3        4            魏春梅   个人  688651  ...        新进       NaN  2023-07-21    12\n4        5            何永华   个人  688651  ...        新进       NaN  2023-07-21    14\n    ...            ...  ...     ...  ...       ...       ...         ...   ...\n3974  3975             黄敏   个人  873761  ...        新进       NaN  2023-03-28     3\n3975  3976            姜海林   个人  873761  ...        新进       NaN  2023-03-28     4\n3976  3977            廖道训   个人  873761  ...        新进       NaN  2023-03-28     5\n3977  3978            李天兵   个人  873761  ...        新进       NaN  2023-03-28     6\n3978  3979  LIANG AMY JUN   个人  873761  ...        新进       NaN  2023-03-28     7\n[3979 rows x 13 columns]\n```\n\n#### 股东持股统计-十大流通股东\n\n接口: stock_gdfx_free_holding_statistics_em\n\n目标地址: https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n\n描述: 东方财富网-数据中心-股东分析-股东持股统计-十大股东\n\n限量: 单次返回指定 date 的所有数据\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20210930\"; 财报发布季度最后日 |\n\n输出参数\n\n| 名称                   | 类型      | 描述  |\n|----------------------|---------|-----|\n| 序号                   | int64   | -   |\n| 股东名称                 | object  | -   |\n| 股东类型                 | object  | -   |\n| 统计次数                 | int64   | -   |\n| 公告日后涨幅统计-10个交易日-平均涨幅 | float64 | -   |\n| 公告日后涨幅统计-10个交易日-最大涨幅 | float64 | -   |\n| 公告日后涨幅统计-10个交易日-最小涨幅 | float64 | -   |\n| 公告日后涨幅统计-30个交易日-平均涨幅 | float64 | -   |\n| 公告日后涨幅统计-30个交易日-最大涨幅 | float64 | -   |\n| 公告日后涨幅统计-30个交易日-最小涨幅 | float64 | -   |\n| 公告日后涨幅统计-60个交易日-平均涨幅 | float64 | -   |\n| 公告日后涨幅统计-60个交易日-最大涨幅 | float64 | -   |\n| 公告日后涨幅统计-60个交易日-最小涨幅 | float64 | -   |\n| 持有个股                 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gdfx_free_holding_statistics_em_df = ak.stock_gdfx_free_holding_statistics_em(date=\"20210930\")\nprint(stock_gdfx_free_holding_statistics_em_df)\n```\n\n数据示例\n\n```\n          序号  ...                                               持有个股\n0          1  ...  603218|日月股份,600988|赤峰黄金,600298|安琪酵母,300232|洲明科...\n1          2  ...  600519|贵州茅台,000686|东北证券,002533|金杯电工,002066|瑞泰科...\n2          3  ...  600519|贵州茅台,300015|爱尔眼科,600674|川投能源,600009|上海机...\n3          4  ...  000026|飞亚达,300946|恒而达,000751|锌业股份,300927|江天化学,...\n4          5  ...  300005|探路者,300946|恒而达,000985|大庆华科,300927|江天化学,...\n      ...  ...                                                ...\n30963  30964  ...                                        002982|湘佳股份\n30964  30965  ...                                        300917|特发服务\n30965  30966  ...                                         688733|壹石通\n30966  30967  ...                                        300969|恒帅股份\n30967  30968  ...                                        002896|中大力德\n```\n\n#### 股东持股统计-十大股东\n\n接口: stock_gdfx_holding_statistics_em\n\n目标地址: https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n\n描述: 东方财富网-数据中心-股东分析-股东持股统计-十大股东\n\n限量: 单次返回指定 date 的所有数据\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20210930\"; 财报发布季度最后日 |\n\n输出参数\n\n| 名称                   | 类型      | 描述  |\n|----------------------|---------|-----|\n| 序号                   | int64   | -   |\n| 股东名称                 | object  | -   |\n| 股东类型                 | object  | -   |\n| 统计次数                 | int64   | -   |\n| 公告日后涨幅统计-10个交易日-平均涨幅 | float64 | -   |\n| 公告日后涨幅统计-10个交易日-最大涨幅 | float64 | -   |\n| 公告日后涨幅统计-10个交易日-最小涨幅 | float64 | -   |\n| 公告日后涨幅统计-30个交易日-平均涨幅 | float64 | -   |\n| 公告日后涨幅统计-30个交易日-最大涨幅 | float64 | -   |\n| 公告日后涨幅统计-30个交易日-最小涨幅 | float64 | -   |\n| 公告日后涨幅统计-60个交易日-平均涨幅 | float64 | -   |\n| 公告日后涨幅统计-60个交易日-最大涨幅 | float64 | -   |\n| 公告日后涨幅统计-60个交易日-最小涨幅 | float64 | -   |\n| 持有个股                 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gdfx_holding_statistics_em_df = ak.stock_gdfx_holding_statistics_em(date=\"20210930\")\nprint(stock_gdfx_holding_statistics_em_df)\n```\n\n数据示例\n\n```\n          序号  ...                                               持有个股\n0          1  ...  600763|通策医疗,300229|拓尔思,603039|泛微网络,300006|莱美药业...\n1          2  ...  002225|濮耐股份,600435|北方导航,600422|昆药集团,600009|上海机...\n2          3  ...  600340|华夏幸福,600009|上海机场,000001|平安银行,601899|紫金矿...\n3          4  ...  601865|福莱特,601899|紫金矿业,000756|新华制药,600036|招商银行...\n4          5  ...  002479|富春环保,300582|英飞特,300358|楚天科技,002892|科力尔,...\n      ...  ...                                                ...\n33819  33820  ...                                        300047|天源迪科\n33820  33821  ...                                        300969|恒帅股份\n33821  33822  ...                                        000425|徐工机械\n33822  33823  ...                                        002896|中大力德\n33823  33824  ...                                        000761|本钢板材\n```\n\n#### 股东协同-十大流通股东\n\n接口: stock_gdfx_free_holding_teamwork_em\n\n目标地址: https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n\n描述: 东方财富网-数据中心-股东分析-股东协同-十大流通股东\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                  |\n|--------|-----|---------------------------------------------------------------------|\n| symbol | str | symbol=\"社保\"; choice of {\"全部\", \"个人\", \"基金\", \"QFII\", \"社保\", \"券商\", \"信托\"} |\n\n输出参数\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 序号     | int64  | -   |\n| 股东名称   | object | -   |\n| 股东类型   | object | -   |\n| 协同股东名称 | object | -   |\n| 协同股东类型 | object | -   |\n| 协同次数   | int64  | -   |\n| 个股详情   | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gdfx_free_holding_teamwork_em_df = ak.stock_gdfx_free_holding_teamwork_em(symbol=\"社保\")\nprint(stock_gdfx_free_holding_teamwork_em_df)\n```\n\n数据示例\n\n```\n          序号  ...                                               个股详情\n0          1  ...  601668|中国建筑|2023-09-30,600066|宇通客车|2023-06-30,...\n1          2  ...  600028|中国石化|2022-09-30,300059|东方财富|2022-12-31,...\n2          3  ...  600782|新钢股份|2022-09-30,002463|沪电股份|2021-12-31,...\n3          4  ...  601899|紫金矿业|2023-03-31,600031|三一重工|2023-09-30,...\n4          5  ...  002340|格林美|2022-06-30,600968|海油发展|2022-09-30,6...\n      ...  ...                                                ...\n19421  19422  ...                             600019|宝钢股份|2021-03-31\n19422  19423  ...                             600019|宝钢股份|2021-03-31\n19423  19424  ...                             600019|宝钢股份|2021-03-31\n19424  19425  ...                             600019|宝钢股份|2021-03-31\n19425  19426  ...                             600019|宝钢股份|2021-03-31\n[19426 rows x 7 columns]\n```\n\n#### 股东协同-十大股东\n\n接口: stock_gdfx_holding_teamwork_em\n\n目标地址: https://data.eastmoney.com/gdfx/HoldingAnalyse.html\n\n描述: 东方财富网-数据中心-股东分析-股东协同-十大股东\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                  |\n|--------|-----|---------------------------------------------------------------------|\n| symbol | str | symbol=\"社保\"; choice of {\"全部\", \"个人\", \"基金\", \"QFII\", \"社保\", \"券商\", \"信托\"} |\n\n输出参数\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 序号     | int64  | -   |\n| 股东名称   | object | -   |\n| 股东类型   | object | -   |\n| 协同股东名称 | object | -   |\n| 协同股东类型 | object | -   |\n| 协同次数   | int64  | -   |\n| 个股详情   | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_gdfx_holding_teamwork_em_df = ak.stock_gdfx_holding_teamwork_em(symbol=\"社保\")\nprint(stock_gdfx_holding_teamwork_em_df)\n```\n\n数据示例\n\n```\n       序号  ...                                               个股详情\n0          1  ...  601668|中国建筑|2023-09-30,600066|宇通客车|2023-06-30,...\n1          2  ...  600028|中国石化|2022-09-30,300059|东方财富|2022-12-31,...\n2          3  ...  600782|新钢股份|2022-09-30,002463|沪电股份|2021-12-31,...\n3          4  ...  601899|紫金矿业|2023-03-31,600031|三一重工|2023-09-30,...\n4          5  ...  601168|西部矿业|2023-09-30,002439|启明星辰|2023-09-30,...\n      ...  ...                                                ...\n15214  15215  ...                             600019|宝钢股份|2021-03-31\n15215  15216  ...                             600019|宝钢股份|2021-03-31\n15216  15217  ...                             600019|宝钢股份|2021-03-31\n15217  15218  ...                             600019|宝钢股份|2021-03-31\n15218  15219  ...                             600019|宝钢股份|2021-03-31\n[15219 rows x 7 columns]\n```\n\n#### 股东户数\n\n接口: stock_zh_a_gdhs\n\n目标地址: http://data.eastmoney.com/gdhs/\n\n描述: 东方财富网-数据中心-特色数据-股东户数数据\n\n限量: 单次获取返回所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                     |\n|--------|-----|------------------------------------------------------------------------|\n| symbol | str | symbol=\"20230930\"; choice of {\"最新\", 每个季度末}, 其中 每个季度末需要写成 `20230930` 格式 |\n\n输出参数\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 代码           | object  | -       |\n| 名称           | object  | -       |\n| 最新价          | float64 | 注意单位: 元 |\n| 涨跌幅          | float64 | 注意单位: % |\n| 股东户数-本次      | int64   | -       |\n| 股东户数-上次      | int64   | -       |\n| 股东户数-增减      | int64   | -       |\n| 股东户数-增减比例    | float64 | 注意单位: % |\n| 区间涨跌幅        | float64 | 注意单位: % |\n| 股东户数统计截止日-本次 | object  | -       |\n| 股东户数统计截止日-上次 | object  | -       |\n| 户均持股市值       | float64 | -       |\n| 户均持股数量       | float64 | -       |\n| 总市值          | float64 | -       |\n| 总股本          | float64 | -       |\n| 公告日期         | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_a_gdhs_df = ak.stock_zh_a_gdhs(symbol=\"20230930\")\nprint(stock_zh_a_gdhs_df)\n```\n\n数据示例\n\n```\n      代码    名称     最新价  ...     总市值           总股本        公告日期\n0     688235  百济神州  139.04  ...  1.625156e+10  1.150553e+08  2023-11-14\n1     688981  中芯国际   53.02  ...  1.009501e+11  1.973609e+09  2023-11-10\n2     688793   倍轻松   33.65  ...  3.142165e+09  8.594542e+07  2023-10-31\n3     688789  宏华数科   99.91  ...  1.156317e+10  1.204371e+08  2023-10-31\n4     688787  海天瑞声   72.10  ...  5.248291e+09  6.032518e+07  2023-10-31\n      ...   ...     ...  ...           ...           ...         ...\n5153  600810  神马股份    7.44  ...  7.810436e+09  1.044178e+09  2023-10-12\n5154  300809  华辰装备   29.25  ...  7.587976e+09  2.521760e+08  2023-10-12\n5155  002817  黄山胶囊    8.76  ...  2.548316e+09  2.990982e+08  2023-10-12\n5156  688188  柏楚电子  253.11  ...  3.648391e+10  1.462926e+08  2023-10-11\n5157  601666  平煤股份   11.56  ...  2.385597e+10  2.313876e+09  2023-10-11\n[5158 rows x 16 columns]\n```\n\n#### 股东户数详情\n\n接口: stock_zh_a_gdhs_detail_em\n\n目标地址: https://data.eastmoney.com/gdhs/detail/000002.html\n\n描述: 东方财富网-数据中心-特色数据-股东户数详情\n\n限量: 单次获取指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"000001\"; 股票代码 |\n\n输出参数\n\n| 名称        | 类型      | 描述      |\n|-----------|---------|---------|\n| 股东户数统计截止日 | object  | -       |\n| 区间涨跌幅     | float64 | 注意单位: % |\n| 股东户数-本次   | int64   | -       |\n| 股东户数-上次   | int64   | -       |\n| 股东户数-增减   | int64   | -       |\n| 股东户数-增减比例 | float64 | 注意单位: % |\n| 户均持股市值    | float64 | -       |\n| 户均持股数量    | float64 | -       |\n| 总市值       | float64 | -       |\n| 总股本       | int64   | -       |\n| 股本变动      | int64   | -       |\n| 股本变动原因    | object  | -       |\n| 股东户数公告日期  | object  | -       |\n| 代码        | object  | -       |\n| 名称        | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_a_gdhs_detail_em_df = ak.stock_zh_a_gdhs_detail_em(symbol=\"000001\")\nprint(stock_zh_a_gdhs_detail_em_df)\n```\n\n数据示例\n\n```\n    股东户数统计截止日 区间涨跌幅  股东户数-本次  ...股东户数公告日期  代码    名称\n0   2023-09-30  -0.267142   530229  ...  2023-10-25  000001  平安银行\n1   2023-06-30  -8.191107   536701  ...  2023-08-24  000001  平安银行\n2   2023-03-31  -9.071118   506867  ...  2023-04-25  000001  平安银行\n3   2023-02-28   4.711246   477304  ...  2023-03-09  000001  平安银行\n4   2022-12-31  11.148649   487200  ...  2023-03-09  000001  平安银行\n5   2022-09-30 -19.538845   547735  ...  2022-10-25  000001  平安银行\n6   2022-06-30  -2.600780   493029  ...  2022-08-18  000001  平安银行\n7   2022-03-31  -2.349206   508679  ...  2022-04-27  000001  平安银行\n8   2022-02-28  -4.429612   506734  ...  2022-03-10  000001  平安银行\n9   2021-12-31  -8.087005   502716  ...  2022-03-10  000001  平安银行\n10  2021-09-30 -20.733864   390490  ...  2021-10-21  000001  平安银行\n11  2021-06-30   3.579634   296828  ...  2021-08-20  000001  平安银行\n12  2021-03-31  -4.677350   331829  ...  2021-04-21  000001  平安银行\n13  2021-01-31  19.389866   290750  ...  2021-02-02  000001  平安银行\n14  2020-12-31  27.488464   308724  ...  2021-02-02  000001  平安银行\n15  2020-09-30  18.515625   351374  ...  2020-10-22  000001  平安银行\n16  2020-06-30   1.721531   431036  ...  2020-08-28  000001  平安银行\n17  2020-03-31 -17.631918   397399  ...  2020-04-21  000001  平安银行\n18  2020-01-31  -5.531915   340920  ...  2020-02-14  000001  平安银行\n19  2019-12-31   5.516357   322864  ...  2020-02-14  000001  平安银行\n20  2019-09-30  13.134978   299958  ...  2019-10-22  000001  平安银行\n21  2019-06-30   8.620562   321929  ...  2019-08-08  000001  平安银行\n22  2019-03-31   3.721683   354508  ...  2019-04-24  000001  平安银行\n23  2019-02-28  31.769723   369119  ...  2019-03-07  000001  平安银行\n24  2018-12-31 -15.113122   429409  ...  2019-03-07  000001  平安银行\n25  2018-09-30  23.531940   406242  ...  2018-10-24  000001  平安银行\n26  2018-06-30 -16.605505   435978  ...  2018-08-16  000001  平安银行\n27  2018-03-31  -9.543568   421677  ...  2018-04-20  000001  平安银行\n28  2018-02-28  -9.398496   392992  ...  2018-03-15  000001  平安银行\n29  2017-12-31  19.711971   343994  ...  2018-03-15  000001  平安银行\n30  2017-09-30  20.068588   331474  ...  2017-10-21  000001  平安银行\n31  2017-06-30   2.399128   379179  ...  2017-08-11  000001  平安银行\n32  2017-03-31  -3.270042   371177  ...  2017-04-22  000001  平安银行\n33  2017-02-28   4.175824   349253  ...  2017-03-17  000001  平安银行\n34  2016-12-31   0.330761   350142  ...  2017-03-17  000001  平安银行\n35  2016-09-30   4.252874   340324  ...  2016-10-21  000001  平安银行\n36  2016-06-30  -0.391340   340528  ...  2016-08-12  000001  平安银行\n37  2016-03-31  11.297071   341525  ...  2016-04-21  000001  平安银行\n38  2016-02-29 -20.266889   347147  ...  2016-03-10  000001  平安银行\n39  2015-12-31  14.299333   332918  ...  2016-03-10  000001  平安银行\n40  2015-09-30 -27.854195   358049  ...  2015-10-23  000001  平安银行\n41  2015-06-30  11.728949   418294  ...  2015-08-14  000001  平安银行\n42  2015-03-31  17.187500   313029  ...  2015-04-24  000001  平安银行\n43  2015-03-06 -15.151515   335403  ...  2015-03-13  000001  平安银行\n44  2014-12-31  56.213018   275838  ...  2015-03-13  000001  平安银行\n45  2014-09-30   2.320888   311571  ...  2014-10-24  000001  平安银行\n46  2014-06-30  11.976813   298305  ...  2014-08-14  000001  平安银行\n47  2014-03-31  -3.234501   319109  ...  2014-04-24  000001  平安银行\n48  2014-02-28  -9.142857   310335  ...  2014-03-07  000001  平安银行\n49  2013-12-31   3.114478   298070  ...  2014-03-07  000001  平安银行\n50  2013-09-30  19.157472   291054  ...  2013-10-23  000001  平安银行\n51  2013-06-30 -20.017323   281819  ...  2013-08-23  000001  平安银行\n52  2013-03-31 -12.749350   256985  ...  2013-04-24  000001  平安银行\n53  2013-03-01  43.945069   233517  ...  2013-03-08  000001  平安银行\n[54 rows x 15 columns]\n```\n\n#### 分红配股\n\n接口: stock_history_dividend_detail\n\n目标地址: https://vip.stock.finance.sina.com.cn/corp/go.php/vISSUE_ShareBonus/stockid/300670.phtml\n\n描述: 新浪财经-发行与分配-分红配股\n\n限量: 单次获取指定股票的新浪财经-发行与分配-分红配股详情\n\n输入参数\n\n| 名称        | 类型  | 描述                                               |\n|-----------|-----|--------------------------------------------------|\n| symbol    | str | symbol=\"600012\"; 股票代码                            |\n| indicator | str | indicator=\"配股\"; choice of {\"分红\", \"配股\"}           |\n| date      | str | date=\"1994-12-24\"; 分红配股的具体日期, e.g., \"1994-12-24\" |\n\n输出参数-分红历史\n\n| 名称    | 类型      | 描述          |\n|-------|---------|-------------|\n| 公告日期  | object  | -           |\n| 送股    | int64   | 注意单位: 股     |\n| 转增    | int64   | 注意单位: 股     |\n| 派息    | float64 | 注意单位: 元; 税前 |\n| 进度    | object  | -           |\n| 除权除息日 | object  | -           |\n| 股权登记日 | object  | -           |\n| 红股上市日 | object  | -           |\n\n接口示例-分红历史\n\n```python\nimport akshare as ak\n\nstock_history_dividend_detail_df = ak.stock_history_dividend_detail(symbol=\"600012\", indicator=\"分红\")\nprint(stock_history_dividend_detail_df)\n```\n\n数据示例-分红历史\n\n```\n     公告日期  送股  转增   派息  进度  除权除息日   股权登记日 红股上市日\n0   2021-07-14   0   0  2.3  实施  2021-07-21  2021-07-20   NaT\n1   2020-07-14   0   0  2.3  实施  2020-07-22  2020-07-21   NaT\n2   2019-07-08   0   0  2.5  实施  2019-07-16  2019-07-15   NaT\n3   2018-07-09   0   0  2.3  实施  2018-07-17  2018-07-16   NaT\n4   2017-07-10   0   0  2.3  实施  2017-07-18  2017-07-17   NaT\n5   2016-07-12   0   0  2.3  实施  2016-07-19  2016-07-18   NaT\n6   2015-07-13   0   0  2.3  实施  2015-07-20  2015-07-17   NaT\n7   2014-07-07   0   0  2.2  实施  2014-07-11  2014-07-10   NaT\n8   2013-06-18   0   0  2.0  实施  2013-06-24  2013-06-21   NaT\n9   2012-07-10   0   0  2.1  实施  2012-07-16  2012-07-13   NaT\n10  2011-06-08   0   0  2.1  实施  2011-06-14  2011-06-13   NaT\n11  2010-06-10   0   0  2.0  实施  2010-06-21  2010-06-18   NaT\n12  2009-05-25   0   0  2.3  实施  2009-06-02  2009-06-01   NaT\n13  2008-06-18   0   0  2.0  实施  2008-06-25  2008-06-24   NaT\n14  2007-06-20   0   0  2.5  实施  2007-06-26  2007-06-25   NaT\n15  2006-07-12   0   0  2.8  实施  2006-07-18  2006-07-17   NaT\n16  2005-07-11   0   0  1.0  实施  2005-07-15  2005-07-14   NaT\n17  2004-06-14   0   0  0.6  实施  2004-06-18  2004-06-17   NaT\n18  2003-07-07   0   0  0.3  实施  2003-07-11  2003-07-10   NaT\n```\n\n输出参数-分红详情\n\n| 名称    | 类型     | 描述   |\n|-------|--------|------|\n| item  | object | 所列项目 |\n| value | object | 项目值  |\n\n接口示例-分红详情\n\n```python\nimport akshare as ak\n\nstock_history_dividend_detail_df = ak.stock_history_dividend_detail(symbol=\"600012\", indicator=\"分红\",\n                                                                    date=\"2019-07-08\")\nprint(stock_history_dividend_detail_df)\n```\n\n数据示例-分红详情\n\n```\n                 item             value\n0          税前红利（报价币种）        2.50\n1          税后红利（报价币种）        2.50\n2       B、H股税前红利（人民币）          --\n3       B、H股税后红利（人民币）          --\n4           送股比例（10送）          --\n5          转增比例（10转增）          --\n6     盈余公积金转增比例（10转增）          --\n7     资本公积金转增比例（10转增）          --\n8                发放对象          --\n9               股本基准日  2018-12-31\n10              最后交易日          --\n11                登记日  2019-07-15\n12                除息日  2019-07-16\n13  红利/配股起始日（送、转股到账日）  2019-07-16\n14           红利/配股终止日          --\n15                上市日          --\n16         股东大会决议公告日期  2019-05-18\n17       可转债享受权益转股截止日          --\n18          配股比例（10配）          --\n19                配股价          --\n20               转配比例          --\n21                转配价          --\n22              配股有效期          --\n23              实际配股数          --\n24             配股前总股本          --\n25             实际配股比例          --\n26              每股拆细数          --\n27             外币折算汇率          --\n28               权息说明          --\n```\n\n输出参数-配股历史\n\n| 名称     | 类型      | 描述             |\n|--------|---------|----------------|\n| 公告日期   | object  | -              |\n| 配股方案   | float64 | 注意单位: 每10股配股股数 |\n| 配股价格   | float64 | 注意单位: 元        |\n| 基准股本   | int64   | 注意单位: 股        |\n| 除权日    | object  | -              |\n| 股权登记日  | object  | -              |\n| 缴款起始日  | object  | -              |\n| 缴款终止日  | object  | -              |\n| 配股上市日  | object  | -              |\n| 募集资金合计 | float64 | 注意单位: 元        |\n\n接口示例-配股历史\n\n```python\nimport akshare as ak\n\nstock_history_dividend_detail_df = ak.stock_history_dividend_detail(symbol=\"000002\", indicator=\"配股\")\nprint(stock_history_dividend_detail_df)\n```\n\n数据示例-配股历史\n\n```\n   公告日期   配股方案  配股价格  ... 缴款终止日    配股上市日 募集资金合计\n0  1999-12-22  2.727   7.5  ...  2000-01-24  2000-02-16    NaN\n1  1997-06-26  2.370   4.5  ...  1997-07-29  1997-08-22    NaN\n2  1900-01-01  5.000   4.4  ...  1991-06-08  1900-01-01    NaN\n```\n\n输出参数-配股详情\n\n| 名称    | 类型     | 描述   |\n|-------|--------|------|\n| item  | object | 所列项目 |\n| value | object | 项目值  |\n\n接口示例-配股详情\n\n```python\nimport akshare as ak\n\nstock_history_dividend_detail_df = ak.stock_history_dividend_detail(indicator=\"配股\", symbol=\"000002\",\n                                                                    date=\"1999-12-22\")\nprint(stock_history_dividend_detail_df)\n```\n\n数据示例-配股详情\n\n```\n                 item         value\n0          税前红利（报价币种）            --\n1          税后红利（报价币种）            --\n2       B、H股税前红利（人民币）            --\n3       B、H股税后红利（人民币）            --\n4           送股比例（10送）            --\n5          转增比例（10转增）            --\n6     盈余公积金转增比例（10转增）            --\n7     资本公积金转增比例（10转增）            --\n8                发放对象            --\n9               股本基准日            --\n10              最后交易日            --\n11                登记日    2000-01-07\n12                除息日    2000-01-10\n13  红利/配股起始日（送、转股到账日）    2000-01-11\n14           红利/配股终止日    2000-01-24\n15                上市日    2000-02-16\n16         股东大会决议公告日期            --\n17       可转债享受权益转股截止日            --\n18          配股比例（10配）          2.73\n19                配股价          7.50\n20               转配比例            --\n21                转配价            --\n22              配股有效期            --\n23              实际配股数   85434500.00\n24             配股前总股本  545537000.00\n25             实际配股比例          1.57\n26              每股拆细数            --\n27             外币折算汇率            --\n28               权息说明            --\n```\n\n#### 历史分红\n\n接口: stock_dividend_cninfo\n\n目标地址: http://webapi.cninfo.com.cn/#/company?companyid=600009\n\n描述: 巨潮资讯-个股-历史分红\n\n限量: 单次获取指定股票的历史分红数据\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| symbol | str | symbol=\"600009\" |\n\n输出参数\n\n| 名称       | 类型      | 描述           |\n|----------|---------|--------------|\n| 实施方案公告日期 | object  | -            |\n| 送股比例     | float64 | 注意单位: 每 10 股 |\n| 转增比例     | float64 | 注意单位: 每 10 股 |\n| 派息比例     | float64 | 注意单位: 每 10 股 |\n| 股权登记日    | object  | -            |\n| 除权日      | object  | -            |\n| 派息日      | object  | -            |\n| 股份到账日    | object  | -            |\n| 实施方案分红说明 | object  | -            |\n| 分红类型     | object  | -            |\n| 报告时间     | object  | -            |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_dividend_cninfo_df = ak.stock_dividend_cninfo(symbol=\"600009\")\nprint(stock_dividend_cninfo_df)\n```\n\n数据示例\n\n```\n    实施方案公告日期  分红类型  送股比例  转增比例  ...派息日 股份到账日   实施方案分红说明  报告时间\n0   1998-11-28  中期分红   0.0   5.0  ...         NaT  None          10转增5股  1998半年报\n1   2001-06-23  年度分红   NaN   NaN  ...  2001-07-06  None    10派2.93元(含税)   2000年报\n2   2002-07-18  年度分红   NaN   NaN  ...  2002-08-01  None     10派1.5元(含税)   2001年报\n3   2003-08-05  年度分红   NaN   NaN  ...  2003-08-14  None   10股派1.99元（含税）   2002年报\n4   2003-12-22  中期分红   3.0   NaN  ...         NaT  None           10送3股  2003半年报\n5   2004-07-16  年度分红   NaN   NaN  ...  2004-07-28  None    10派0.96元（含税）   2003年报\n6   2005-05-17  年度分红   NaN   NaN  ...  2005-05-27  None       10派1元(含税)   2004年报\n7   2006-08-15  年度分红   NaN   NaN  ...  2006-08-25  None     10派1.5元(含税)   2005年报\n8   2006-12-01  中期分红   NaN   NaN  ...  2006-12-13  None       10派1元（含税）  2006半年报\n9   2007-08-16  年度分红   NaN   NaN  ...  2007-08-28  None     10派1.5元（含税）   2006年报\n10  2008-07-24  年度分红   NaN   NaN  ...  2008-08-05  None       10派1元（含税）   2007年报\n11  2009-07-30  年度分红   NaN   NaN  ...  2009-08-11  None     10派0.5元（含税）   2008年报\n12  2010-07-29  年度分红   NaN   NaN  ...  2010-08-10  None     10派0.5元（含税）   2009年报\n13  2011-08-08  年度分红   NaN   NaN  ...  2011-08-18  None       10派1元(含税)   2010年报\n14  2012-08-07  年度分红   NaN   NaN  ...  2012-08-17  None       10派6元(含税)   2011年报\n15  2013-08-12  年度分红   NaN   NaN  ...  2013-08-22  None     10派3.7元(含税)   2012年报\n16  2014-08-11  年度分红   NaN   NaN  ...  2014-08-15  None       10派3元(含税)   2013年报\n17  2015-08-14  年度分红   NaN   NaN  ...  2015-08-20  None     10派3.5元(含税)   2014年报\n18  2016-08-12  年度分红   NaN   NaN  ...  2016-08-18  None     10派4.3元(含税)   2015年报\n19  2017-08-18  年度分红   NaN   NaN  ...  2017-08-24  None     10派4.4元(含税)   2016年报\n20  2018-08-17  年度分红   NaN   NaN  ...  2018-08-23  None     10派5.8元(含税)   2017年报\n21  2019-08-16  年度分红   NaN   NaN  ...  2019-08-22  None     10派6.6元(含税)   2018年报\n22  2020-08-14  年度分红   NaN   NaN  ...  2020-08-20  None     10派7.9元(含税)   2019年报\n23  2024-07-15  年度分红   NaN   NaN  ...  2024-07-19  None     10派1.2元(含税)   2023年报\n24  2024-09-03  中期分红   NaN   NaN  ...  2024-09-09  None  10派1.0034元(含税)  2024半年报\n25  2025-08-04  年度分红   NaN   NaN  ...  2025-08-08  None       10派3元(含税)   2024年报\n26  2025-10-10  中期分红   NaN   NaN  ...  2025-10-16  None     10派2.1元(含税)  2025半年报\n[27 rows x 11 columns]\n```\n\n#### 新股发行\n\n接口: stock_ipo_info\n\n目标地址: https://vip.stock.finance.sina.com.cn/corp/go.php/vISSUE_NewStock/stockid/600004.phtml\n\n描述: 新浪财经-发行与分配-新股发行\n\n限量: 单次获取新股发行的基本信息数据\n\n输入参数\n\n| 名称    | 类型  | 描述                   |\n|-------|-----|----------------------|\n| stock | str | stock=\"600004\"; 股票代码 |\n\n输出参数\n\n| 名称    | 类型     | 描述   |\n|-------|--------|------|\n| item  | object | 所列项目 |\n| value | object | 项目值  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_ipo_info_df = ak.stock_ipo_info(stock=\"600004\")\nprint(stock_ipo_info_df)\n```\n\n数据示例\n\n```\n              item       value\n0              上市地     上海证券交易所\n1             主承销商  中国国际金融有限公司\n2             承销方式        余额包销\n3            上市推荐人  中国国际金融有限公司\n4         每股发行价(元)        5.88\n5             发行方式    二级市场定价配售\n6   发行市盈率（按发行后总股本）          --\n7       首发前总股本（万股）    60000.00\n8       首发后总股本（万股）   100000.00\n9        实际发行量（万股）    40000.00\n10      预计募集资金（万元）   235200.00\n11    实际募集资金合计（万元）   235200.00\n12      发行费用总额（万元）     6936.40\n13      募集资金净额（万元）   228263.60\n14        承销费用（万元）          --\n15           招股公告日  2003-04-09\n16            上市日期  2003-04-28\n```\n\n#### 新股上会信息\n\n接口: stock_ipo_review_em\n\n目标地址: https://data.eastmoney.com/xg/gh/default.html\n\n描述: 东方财富网-数据中心-新股申购-新股上会信息\n\n限量: 单次获取所有数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称      | 类型     | 描述 |\n|---------|--------|----|\n| 序号      | int64  | -  |\n| 企业名称    | object | -  |\n| 股票简称    | object | -  |\n| 股票代码    | object | -  |\n| 上市板块    | object | -  |\n| 上会日期    | object | -  |\n| 审核状态    | object | -  |\n| 发审委委员   | object | -  |\n| 主承销商    | object | -  |\n| 发行数量(股) | object | -  |\n| 拟融资额(元) | object | -  |\n| 公告日期    | object | -  |\n| 上市日期    | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_ipo_review_em_df = ak.stock_ipo_review_em()\nprint(stock_ipo_review_em_df)\n```\n\n数据示例\n\n```\n     序号              企业名称  股票简称  ...       拟融资额(元)        公告日期 上市日期\n0        1     北京维通利电气股份有限公司   维通利  ...  1.593741e+09  2025-11-19  NaT\n1        2        杭州福恩股份有限公司  福恩股份  ...  1.250000e+09  2025-12-17  NaT\n2        3    南昌三瑞智能科技股份有限公司  三瑞智能  ...  7.688829e+08  2025-12-08  NaT\n3        4     深圳大普微电子股份有限公司   大普微  ...  1.877852e+09  2025-09-30  NaT\n4        5        视涯科技股份有限公司  视涯科技  ...  2.014572e+09  2025-09-30  NaT\n...    ...               ...   ...  ...           ...         ...  ...\n5056  5057     合肥芯谷微电子股份有限公司   芯谷微  ...  8.500000e+08  2023-05-05  NaT\n5057  5058    安翰科技(武汉)股份有限公司  安翰科技  ...  1.200000e+09  2019-03-22  NaT\n5058  5059      浙江高信技术股份有限公司  高信技术  ...  7.300000e+08  2023-06-26  NaT\n5059  5060    华夏天信智能物联股份有限公司  华夏天信  ...  9.280300e+08  2019-05-31  NaT\n5060  5061  广西北部湾陆海新能源股份有限公司  陆海新能  ...  1.600000e+09  2023-09-22  NaT\n[5061 rows x 13 columns]\n```\n\n#### IPO辅导信息\n\n接口: stock_ipo_tutor_em\n\n目标地址: https://data.eastmoney.com/xg/gh/default.html\n\n描述: 东方财富网-数据中心-新股申购-IPO辅导信息\n\n限量: 单次获取所有数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称      | 类型     | 描述 |\n|---------|--------|----|\n| 序号      | int64  | -  |\n| 企业名称    | object | -  |\n| 辅导机构    | object | -  |\n| 辅导状态    | object | -  |\n| 报告类型    | object | -  |\n| 派出机构    | object | -  |\n| 备案日期    | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_ipo_tutor_em_df = ak.stock_ipo_tutor_em()\nprint(stock_ipo_tutor_em_df)\n```\n\n数据示例\n\n```\n     序号  ...        备案日期\n0        1  ...  2025-12-23\n1        2  ...  2025-12-23\n2        3  ...  2025-12-23\n3        4  ...  2025-12-23\n4        5  ...  2025-12-23\n...    ...  ...         ...\n5129  5130  ...         NaT\n5130  5131  ...         NaT\n5131  5132  ...         NaT\n5132  5133  ...         NaT\n5133  5134  ...         NaT\n[5134 rows x 8 columns]\n```\n\n#### 股票增发\n\n接口: stock_add_stock\n\n目标地址: https://vip.stock.finance.sina.com.cn/corp/go.php/vISSUE_AddStock/stockid/600004.phtml\n\n描述: 新浪财经-发行与分配-增发\n\n限量: 单次指定 symbol 的股票增发详情数据\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"600004\"; 股票代码 |\n\n输出参数\n\n| 名称         | 类型     | 描述 |\n|------------|--------|----|\n| 公告日期       | object | -  |\n| 发行方式       | object | -  |\n| 发行价格       | object | -  |\n| 实际公司募集资金总额 | object | -  |\n| 发行费用总额     | object | -  |\n| 实际发行数量     | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_add_stock_df = ak.stock_add_stock(symbol=\"600004\")\nprint(stock_add_stock_df)\n```\n\n数据示例\n\n```\n    公告日期    发行方式  发行价格  实际公司募集资金总额  发行费用总额      实际发行数量\n0  2020-11-06    定向配售  10.76元  320,000.00万元  1,253.53万元  29739.7769万股\n1  2007-12-29  网下定价发行  15.05元   22,575.00万元  1,887.00万元        1500万股\n2  2007-12-18    定向配售   7.09元         0.00元       0.00元       13500万股\n```\n\n#### 限售解禁\n\n##### 个股限售解禁-新浪\n\n接口: stock_restricted_release_queue_sina\n\n目标地址: https://vip.stock.finance.sina.com.cn/q/go.php/vInvestConsult/kind/xsjj/index.phtml?symbol=sh600000\n\n描述: 新浪财经-发行分配-限售解禁\n\n限量: 单次获取指定 symbol 的限售解禁数据\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"600000\"; 股票代码 |\n\n输出参数\n\n| 名称      | 类型      | 描述       |\n|---------|---------|----------|\n| 代码      | object  | -        |\n| 名称      | object  | -        |\n| 解禁日期    | object  | -        |\n| 解禁数量    | float64 | 注意单位: 万股 |\n| 解禁股流通市值 | float64 | 注意单位: 亿元 |\n| 上市批次    | int64   | -        |\n| 公告日期    | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_restricted_release_queue_sina_df = ak.stock_restricted_release_queue_sina(symbol=\"600000\")\nprint(stock_restricted_release_queue_sina_df)\n```\n\n数据示例\n\n```\n    代码    名称        解禁日期       解禁数量   解禁股流通市值  上市批次        公告日期\n0  600000  浦发银行  2020-09-04  124831.65  127.0786    10  2017-09-06\n1  600000  浦发银行  2017-03-20  109946.14  179.1023     9  2016-03-22\n2  600000  浦发银行  2015-10-14  373069.43  599.1495     8  2010-10-16\n3  600000  浦发银行  2010-09-29  117540.69  151.9801     7  2009-09-30\n4  600000  浦发银行  2009-05-12   64917.32  161.1248     6  2006-05-09\n5  600000  浦发银行  2008-05-12   41247.84  120.7737     5  2008-05-07\n6  600000  浦发银行  2007-11-30   27761.94  144.0567     4  2006-11-21\n7  600000  浦发银行  2007-05-14  192834.49  564.2337     3  2007-05-09\n```\n\n##### 限售股解禁\n\n接口: stock_restricted_release_summary_em\n\n目标地址: https://data.eastmoney.com/dxf/marketStatistics.html?type=day&startdate=2022-11-08&enddate=2022-12-19\n\n描述: 东方财富网-数据中心-特色数据-限售股解禁\n\n限量: 单次获取指定 symbol 在近期限售股解禁数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                      |\n|------------|-----|-------------------------------------------------------------------------|\n| symbol     | str | symbol=\"全部股票\"; choice of {\"全部股票\", \"沪市A股\", \"科创板\", \"深市A股\", \"创业板\", \"京市A股\"} |\n| start_date | str | start_date=\"20221101\"                                                   |\n| end_date   | str | end_date=\"20221209\"                                                     |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 序号         | int64   | -       |\n| 解禁时间       | object  | -       |\n| 当日解禁股票家数   | int64   | -       |\n| 解禁数量       | float64 | 注意单位: 股 |\n| 实际解禁数量     | float64 | 注意单位: 股 |\n| 实际解禁市值     | int64   | 注意单位: 元 |\n| 沪深300指数    | float64 | -       |\n| 沪深300指数涨跌幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_restricted_release_summary_em_df = ak.stock_restricted_release_summary_em(symbol=\"全部股票\", start_date=\"20221108\", end_date=\"20221209\")\nprint(stock_restricted_release_summary_em_df)\n```\n\n数据示例\n\n```\n    序号        解禁时间  当日解禁股票家数  ...        实际解禁市值    沪深300指数  沪深300指数涨跌幅\n0    1  2022-11-08        15  ...  1.172407e+10  3749.3251     -0.6879\n1    2  2022-11-09        10  ...  2.572546e+09  3714.2704     -0.9350\n2    3  2022-11-10        15  ...  9.329462e+09  3685.6885     -0.7695\n3    4  2022-11-11        17  ...  4.912280e+09  3788.4387      2.7878\n4    5  2022-11-14        15  ...  2.318019e+10  3794.0171      0.1472\n5    6  2022-11-15        14  ...  1.714207e+10  3865.9726      1.8966\n6    7  2022-11-16        12  ...  1.209874e+10  3834.3899     -0.8169\n7    8  2022-11-17        11  ...  4.802956e+09  3818.6640     -0.4101\n8    9  2022-11-18        22  ...  8.274363e+10  3801.5686     -0.4477\n9   10  2022-11-21        20  ...  1.283129e+10  3769.1269     -0.8534\n10  11  2022-11-22         9  ...  9.232523e+09  3769.5727      0.0118\n11  12  2022-11-23         7  ...  3.737618e+08  3773.5287      0.1049\n12  13  2022-11-24         7  ...  4.706748e+09  3756.8082     -0.4431\n13  14  2022-11-25        11  ...  2.465310e+09  3775.7764      0.5049\n14  15  2022-11-28        17  ...  4.328994e+10  3733.2424     -1.1265\n15  16  2022-11-29        13  ...  7.017021e+10  3848.4224      3.0853\n16  17  2022-11-30        11  ...  1.060871e+10  3853.0365      0.1199\n17  18  2022-12-01        15  ...  3.325098e+09  3894.7687      1.0831\n18  19  2022-12-02        15  ...  4.087764e+09  3870.9478     -0.6116\n19  20  2022-12-05        35  ...  1.952387e+10        NaN         NaN\n20  21  2022-12-06        19  ...  1.600255e+10        NaN         NaN\n21  22  2022-12-07        14  ...  2.661094e+09        NaN         NaN\n22  23  2022-12-08        10  ...  2.100872e+09        NaN         NaN\n23  24  2022-12-09         8  ...  1.630020e+10        NaN         NaN\n```\n\n##### 限售股解禁详情\n\n接口: stock_restricted_release_detail_em\n\n目标地址: https://data.eastmoney.com/dxf/detail.html\n\n描述: 东方财富网-数据中心-限售股解禁-解禁详情一览\n\n限量: 单次获取指定时间段限售股解禁数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                      |\n|------------|-----|-------------------------------------------------------------------------|\n| start_date | str | start_date=\"20221202\"                                                   |\n| end_date   | str | end_date=\"20241202\"                                                     |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 序号         | int64   | -       |\n| 股票代码       | object  | -       |\n| 股票简称       | object  | -       |\n| 解禁时间       | object  | -       |\n| 限售股类型      | object  | 注意单位: 股 |\n| 解禁数量       | float64 | 注意单位: 股 |\n| 实际解禁数量     | float64 | 注意单位: 股 |\n| 实际解禁市值     | float64 | 注意单位: 元 |\n| 占解禁前流通市值比例 | float64 | -       |\n| 解禁前一交易日收盘价 | float64 | -       |\n| 解禁前20日涨跌幅  | float64 | 注意单位: % |\n| 解禁后20日涨跌幅  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_restricted_release_detail_em_df = ak.stock_restricted_release_detail_em(start_date=\"20221202\", end_date=\"20221204\")\nprint(stock_restricted_release_detail_em_df)\n```\n\n数据示例\n\n```\n    序号    股票代码  股票简称        解禁时间  ... 占解禁前流通市值比例  解禁前一交易日收盘价  解禁前20日涨跌幅  解禁后20日涨跌幅\n0    1  002548   金新农  2022-12-02  ...   0.000292        5.98   3.866432       1.18\n1    2  873527   夜光明  2022-12-02  ...   0.006829        9.02  -2.162162      -0.33\n2    3  603127  昭衍新药  2022-12-02  ...   0.000445       58.30  -6.029040      -2.08\n3    4  002511  中顺洁柔  2022-12-02  ...   0.000604       11.97  17.993795       4.91\n4    5  688557  兰剑智能  2022-12-02  ...   0.020572       38.04  -4.086845       1.30\n5    6  603283  赛腾股份  2022-12-02  ...   0.007451       35.55  -2.860892      -3.94\n6    7  688007  光峰科技  2022-12-02  ...   0.003214       26.28   7.978723      -0.42\n7    8  688578   艾力斯  2022-12-02  ...   0.013058       20.80  -9.883470      -0.38\n8    9  300227   光韵达  2022-12-02  ...   0.021127        6.89  -5.793103       0.88\n9   10  300525  博思软件  2022-12-02  ...   0.017589       19.87  -4.481132      -1.88\n10  11  831641   格利尔  2022-12-02  ...   0.422407       12.65        NaN      31.77\n11  12  688489  三未信安  2022-12-02  ...   1.000000      119.50        NaN        NaN\n12  13  301198  喜悦智行  2022-12-02  ...   0.457230       18.83   1.796407       0.70\n13  14  600848  上海临港  2022-12-02  ...   0.015465       12.64   6.260575       0.64\n14  15  000415  渤海租赁  2022-12-02  ...   0.061934        2.29   4.954955      -1.72\n```\n\n##### 解禁批次\n\n接口: stock_restricted_release_queue_em\n\n目标地址: https://data.eastmoney.com/dxf/q/600000.html\n\n描述: 东方财富网-数据中心-个股限售解禁-解禁批次\n\n限量: 单次获取指定 symbol 的解禁批次数据\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| symbol | str | symbol=\"600000\" |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 序号         | int64   | -       |\n| 解禁时间       | object  | -       |\n| 解禁股东数      | int64   | -       |\n| 解禁数量       | float64 | 注意单位: 股 |\n| 实际解禁数量     | float64 | 注意单位: 股 |\n| 未解禁数量      | int64   | 注意单位: 股 |\n| 实际解禁数量市值   | float64 | 注意单位: 元 |\n| 占总市值比例     | float64 | -       |\n| 占流通市值比例    | float64 | -       |\n| 解禁前一交易日收盘价 | float64 | 注意单位: 元 |\n| 限售股类型      | object  | -       |\n| 解禁前20日涨跌幅  | float64 | 注意单位: % |\n| 解禁后20日涨跌幅  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_restricted_release_queue_em_df = ak.stock_restricted_release_queue_em(symbol=\"600000\")\nprint(stock_restricted_release_queue_em_df)\n```\n\n数据示例\n\n```\n   序号   解禁时间  解禁股东数  ...   限售股类型  解禁前20日涨跌幅  解禁后20日涨跌幅\n0   1  2020-09-04      2  ...  定向增发机构配售股份  -3.893637  -6.916996\n1   2  2017-03-20     11  ...  定向增发机构配售股份  -2.644231  -5.555556\n2   3  2015-10-14      1  ...  定向增发机构配售股份   6.042497  12.085160\n3   4  2010-09-29     38  ...  定向增发机构配售股份 -10.334996  15.262321\n[4 rows x 13 columns]\n```\n\n##### 解禁股东\n\n接口: stock_restricted_release_stockholder_em\n\n目标地址: https://data.eastmoney.com/dxf/q/600000.html\n\n描述: 东方财富网-数据中心-个股限售解禁-解禁股东\n\n限量: 单次获取指定 symbol 的解禁批次数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                           |\n|--------|-----|------------------------------------------------------------------------------|\n| symbol | str | symbol=\"600000\"                                                              |\n| date   | str | date=\"20200904\"; 通过 ak.stock_restricted_release_queue_em(symbol=\"600000\") 获取 |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int64   | -       |\n| 股东名称    | object  | -       |\n| 解禁数量    | int64   | 注意单位: 股 |\n| 实际解禁数量  | int64   | 注意单位: 股 |\n| 解禁市值    | float64 | 注意单位: 元 |\n| 锁定期     | int64   | 注意单位: 月 |\n| 剩余未解禁数量 | int64   | 注意单位: 股 |\n| 限售股类型   | object  | -       |\n| 进度      | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_restricted_release_stockholder_em_df = ak.stock_restricted_release_stockholder_em(symbol=\"600000\", date=\"20200904\")\nprint(stock_restricted_release_stockholder_em_df)\n```\n\n数据示例\n\n```\n   序号          股东名称       解禁数量     实际解禁数量  ...  锁定期  剩余未解禁数量       限售股类型  进度\n0   1    上海国际集团有限公司  842003367  842003367  ...   36        0  定向增发机构配售股份  实施\n1   2  上海国鑫投资发展有限公司  406313131  406313131  ...   36        0  定向增发机构配售股份  实施\n```\n\n#### 流通股东\n\n接口: stock_circulate_stock_holder\n\n目标地址: https://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CirculateStockHolder/stockid/600000.phtml\n\n描述: 新浪财经-股东股本-流通股东\n\n限量: 单次获取指定 symbol 的流通股东数据\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"600000\"; 股票代码 |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 截止日期   | object  | -       |\n| 公告日期   | object  | -       |\n| 编号     | int64   | -       |\n| 股东名称   | object  | -       |\n| 持股数量   | int64   | 注意单位: 股 |\n| 占流通股比例 | float64 | 注意单位: % |\n| 股本性质   | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_circulate_stock_holder_df = ak.stock_circulate_stock_holder(symbol=\"600000\")\nprint(stock_circulate_stock_holder_df)\n```\n\n数据示例\n\n```\n      截止日期        公告日期  编号                股东名称        持股数量  占流通股比例   股本性质\n0    2022-09-30  2022-10-29   1          上海国际集团有限公司  6331322671  21.570    国有股\n1    2022-09-30  2022-10-29   2      中国移动通信集团广东有限公司  5334892824  18.175    国有股\n2    2022-09-30  2022-10-29   3   富德生命人寿保险股份有限公司-传统  2779437274   9.469  境内法人股\n3    2022-09-30  2022-10-29   4  富德生命人寿保险股份有限公司-资本金  1763232325   6.007  境内法人股\n4    2022-09-30  2022-10-29   5       上海上国投资产管理有限公司  1395571025   4.755    国有股\n..          ...         ...  ..                 ...         ...     ...    ...\n745  2003-12-31         NaN   6          世纪证券有限责任公司     6882195   0.765    国有股\n746  2003-12-31         NaN   7            汉兴证券投资基金     5921727   0.658  境内法人股\n747  2003-12-31         NaN   8            泰和证券投资基金     4534267   0.504  境内法人股\n748  2003-12-31         NaN   9          博时裕富证券投资基金     4197332   0.466  境内法人股\n749  2003-12-31         NaN  10            同智证券投资基金     3880427   0.431  境内法人股\n```\n\n#### 板块行情\n\n接口: stock_sector_spot\n\n目标地址: http://finance.sina.com.cn/stock/sl/\n\n描述: 新浪行业-板块行情\n\n限量: 单次获取指定的板块行情实时数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                              |\n|-----------|-----|-----------------------------------------------------------------|\n| indicator | str | indicator=\"新浪行业\"; choice of {\"新浪行业\", \"启明星行业\", \"概念\", \"地域\", \"行业\"} |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| label  | object  | -        |\n| 板块     | object  | -        |\n| 公司家数   | int64   | -        |\n| 平均价格   | float64 | -        |\n| 涨跌额    | float64 | -        |\n| 涨跌幅    | float64 | 注意单位: %  |\n| 总成交量   | int64   | 注意单位: 手  |\n| 总成交额   | int64   | 注意单位: 万元 |\n| 股票代码   | object  | -        |\n| 个股-涨跌幅 | float64 | 注意单位: %  |\n| 个股-当前价 | float64 | -        |\n| 个股-涨跌额 | float64 | -        |\n| 股票名称   | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_industry_sina_df = ak.stock_sector_spot(indicator=\"新浪行业\")\nprint(stock_industry_sina_df)\n```\n\n数据示例\n\n```\n        label    板块  公司家数        平均价格  ...  个股-涨跌幅  个股-当前价  个股-涨跌额   股票名称\n0    new_blhy  玻璃行业    19   15.913158  ...   4.214   21.27    0.86   金刚玻璃\n1    new_cbzz  船舶制造     8   10.561250  ...   5.374   22.55    1.15   中国船舶\n2    new_cmyl  传媒娱乐    40    6.491053  ...  13.826    3.54    0.43   华谊兄弟\n3    new_dlhy  电力行业    62    7.798667  ...  10.011   20.66    1.88   文山电力\n4    new_dqhy  电器行业    58   15.341897  ...   7.950    7.74    0.57   精达股份\n5    new_dzqj  电子器件   152   22.652349  ...  20.055    8.74    1.46   珈伟新能\n6    new_dzxx  电子信息   247   12.984641  ...  20.022   21.46    3.58    中青宝\n7     new_fdc   房地产   123    7.213445  ...  10.189    2.92    0.27   铁岭新城\n8    new_fdsb  发电设备    65   11.620000  ...   6.644   18.46    1.15    天融信\n9    new_fjzz  飞机制造    14   24.420714  ...   6.079   62.82    3.60   中直股份\n10   new_fzhy  纺织行业    42    5.945750  ...   7.362    5.25    0.36   凤竹纺织\n11   new_fzjx  纺织机械     8   10.077500  ...   5.704   19.83    1.07   三联虹普\n12   new_fzxl  服装鞋类    49    9.784375  ...  10.066    6.67    0.61    乔治白\n13   new_glql  公路桥梁    20    4.771667  ...   2.979    2.42    0.07   吉林高速\n14   new_gsgq  供水供气    25    6.512000  ...   4.945    3.82    0.18   辽宁能源\n15   new_gthy  钢铁行业    60    8.681455  ...  10.036   15.24    1.39   海南矿业\n16   new_hbhy  环保行业    27    7.172308  ...  20.023   10.61    1.77   天壕环境\n17   new_hghy  化工行业   150   17.143537  ...  11.946   10.87    1.16   海达股份\n18   new_hqhy  化纤行业    26    9.303846  ...  10.027    4.06    0.37   吉林化纤\n19   new_jdhy  家电行业    37   13.049118  ...   6.127   53.00    3.06  苏 泊 尔\n20   new_jdly  酒店旅游    35   16.324571  ...   6.809    2.51    0.16  *ST腾邦\n21   new_jjhy  家具行业    16   14.207333  ...   3.830    4.88    0.18   海鸥住工\n22   new_jrhy  金融行业    51   12.387200  ...   4.566   25.88    1.13   中信证券\n23   new_jtys  交通运输    87    7.466835  ...   6.642    8.51    0.53   中国国航\n24   new_jxhy  机械行业   211   12.314412  ...  10.012    9.56    0.87   宁波精达\n25   new_jzjc  建筑建材    91    6.915568  ...   7.900   12.02    0.88   四川路桥\n26    new_kfq   开发区    10    9.127000  ...   3.902   13.58    0.51   中国国贸\n27   new_ljhy  酿酒行业    33  124.060303  ...  10.002  150.45   13.68   重庆啤酒\n28    new_mtc   摩托车     6    9.040000  ...   5.878   13.87    0.77   钱江摩托\n29   new_mthy  煤炭行业    41    8.143171  ...   5.121    3.90    0.19   ST安泰\n30   new_nlmy  农林牧渔    64   11.500161  ...   7.095   14.49    0.96   盈康生命\n31   new_nyhf  农药化肥    46   15.010000  ...   8.333   35.36    2.72   广信股份\n32   new_qczz  汽车制造   103   17.203465  ...   9.967    9.93    0.90   天润工业\n33   new_qtxy  其它行业   202   12.054028  ...  14.844    4.41    0.57    汤姆猫\n34   new_slzp  塑料制品    33   12.096061  ...   5.975    6.74    0.38   浙江众成\n35   new_snhy  水泥行业    26   10.774800  ...   5.584    8.13    0.43   博闻科技\n36   new_sphy  食品行业    58   16.108214  ...  10.031   10.64    0.97   中粮科技\n37  new_stock   次新股    76   41.233443  ...  10.015   35.92    3.27   青岛食品\n38   new_swzz  生物制药   155   20.037059  ...  10.131    3.37    0.31   交大昂立\n39   new_sybh  商业百货    93   10.116111  ...  10.023   23.82    2.17   天音控股\n40   new_syhy  石油行业    24    6.421739  ...   7.438    5.20    0.36   泰山石油\n41   new_tchy  陶瓷行业     8    9.295714  ...   5.040    3.96    0.19   ST冠福\n42   new_wzwm  物资外贸    21    8.492000  ...  10.025   13.17    1.20   江苏国泰\n43   new_ylqx  医疗器械    31   27.988333  ...   6.168  170.40    9.90   泰格医药\n44   new_yqyb  仪器仪表    48   15.053125  ...   5.106    2.47    0.12   ST安控\n45   new_ysbz  印刷包装    20    5.662000  ...   6.150    7.94    0.46   万顺新材\n46   new_ysjs  有色金属    72   15.427206  ...   9.871   41.74    3.75   钢研高纳\n47   new_zhhy  综合行业    33    6.043929  ...   6.833    6.41    0.41   合金投资\n48   new_zzhy  造纸行业    24    6.515652  ...   6.367   17.04    1.02   中顺洁柔\n```\n\n#### 板块详情\n\n接口: stock_sector_detail\n\n目标地址: http://finance.sina.com.cn/stock/sl/#area_1\n\n描述: 新浪行业-板块行情-成份详情, 由于新浪网页提供的统计数据有误, 部分行业数量大于统计数\n\n限量: 单次获取指定的新浪行业-板块行情-成份详情\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                        |\n|--------|-----|---------------------------------------------------------------------------|\n| sector | str | sector=\"hangye_ZL01\"; 通过 **ak.stock_sector_spot** 返回数据的 label 字段选择 sector |\n\n输出参数\n\n| 名称            | 类型      | 描述  |\n|---------------|---------|-----|\n| symbol        | object  | -   |\n| code          | object  | -   |\n| name          | object  | -   |\n| trade         | float64 | -   |\n| pricechange   | float64 | -   |\n| changepercent | float64 | -   |\n| buy           | float64 | -   |\n| sell          | float64 | -   |\n| settlement    | float64 | -   |\n| open          | float64 | -   |\n| high          | float64 | -   |\n| low           | float64 | -   |\n| volume        | int64   | -   |\n| amount        | int64   | -   |\n| ticktime      | object  | -   |\n| per           | float64 | -   |\n| pb            | float64 | -   |\n| mktcap        | float64 | -   |\n| nmc           | float64 | -   |\n| turnoverratio | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sector_detail_df = ak.stock_sector_detail(sector=\"hangye_ZL01\")\nprint(stock_sector_detail_df)\n```\n\n数据示例\n\n```\n      symbol    code   name  ...        mktcap           nmc turnoverratio\n0   sh600373  600373   中文传媒  ...  1.619301e+06  1.619301e+06       0.64600\n1   sh600551  600551   时代出版  ...  3.616651e+05  3.616651e+05       0.22616\n2   sh600633  600633   浙数文化  ...  1.249847e+06  1.249847e+06       1.06662\n3   sh600757  600757   长江传媒  ...  6.310981e+05  6.310185e+05       0.26325\n4   sh601098  601098   中南传媒  ...  1.925312e+06  1.925312e+06       0.23095\n5   sh601801  601801   皖新传媒  ...  9.727211e+05  9.727211e+05       0.22932\n6   sh601858  601858   中国科传  ...  7.280505e+05  7.280505e+05       0.59413\n7   sh601900  601900   南方传媒  ...  8.206229e+05  8.147362e+05       0.31126\n8   sh601928  601928   凤凰传媒  ...  1.702538e+06  1.702538e+06       0.11763\n9   sh601999  601999   出版传媒  ...  3.261415e+05  3.261415e+05       0.60498\n10  sh603999  603999   读者传媒  ...  3.317760e+05  3.317760e+05       0.61157\n11  sz000504  000504  *ST生物  ...  2.246448e+05  2.239954e+05       0.83369\n12  sz000719  000719   中原传媒  ...  6.855465e+05  4.469889e+05       0.32643\n13  sz300148  300148   天舟文化  ...  2.999517e+05  2.770519e+05       4.02933\n```\n\n#### 股票列表-A股\n\n接口: stock_info_a_code_name\n\n目标地址: 沪深京三个交易所\n\n描述: 沪深京 A 股股票代码和股票简称数据\n\n限量: 单次获取所有 A 股股票代码和简称数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| code | object | -   |\n| name | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_info_a_code_name_df = ak.stock_info_a_code_name()\nprint(stock_info_a_code_name_df)\n```\n\n数据示例\n\n```\n        code   name\n0     000001   平安银行\n1     000002  万  科Ａ\n2     000004   国华网安\n3     000005   ST星源\n4     000006   深振业Ａ\n      ...    ...\n4623  871396   常辅股份\n4624  871553   凯腾精工\n4625  871642   通易航天\n4626  871981   晶赛科技\n4627  872925   锦好医疗\n```\n\n#### 股票列表-上证\n\n接口: stock_info_sh_name_code\n\n目标地址: https://www.sse.com.cn/assortment/stock/list/share/\n\n描述: 上海证券交易所股票代码和简称数据\n\n限量: 单次获取所有上海证券交易所股票代码和简称数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                               |\n|--------|-----|--------------------------------------------------|\n| symbol | str | symbol=\"主板A股\"; choice of {\"主板A股\", \"主板B股\", \"科创板\"} |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| 证券代码 | object | -   |\n| 证券简称 | object | -   |\n| 公司全称 | object | -   |\n| 上市日期 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_info_sh_name_code_df = ak.stock_info_sh_name_code(symbol=\"主板A股\")\nprint(stock_info_sh_name_code_df)\n```\n\n数据示例\n\n```\n        证券代码  证券简称                公司全称        上市日期\n0     600000  浦发银行      上海浦东发展银行股份有限公司  1999-11-10\n1     600004  白云机场      广州白云国际机场股份有限公司  2003-04-28\n2     600006  东风汽车          东风汽车股份有限公司  1999-07-27\n3     600007  中国国贸      中国国际贸易中心股份有限公司  1999-03-12\n4     600008  首创环保    北京首创生态环保集团股份有限公司  2000-04-27\n      ...   ...                 ...         ...\n1691  605580  恒盛能源          恒盛能源股份有限公司  2021-08-19\n1692  605588  冠石科技        南京冠石科技股份有限公司  2021-08-12\n1693  605589  圣泉集团        济南圣泉集团股份有限公司  2021-08-10\n1694  605598  上海港湾  上海港湾基础建设(集团)股份有限公司  2021-09-17\n1695  605599  菜百股份       北京菜市口百货股份有限公司  2021-09-09\n[1696 rows x 4 columns]\n```\n\n#### 股票列表-深证\n\n接口: stock_info_sz_name_code\n\n目标地址: https://www.szse.cn/market/product/stock/list/index.html\n\n描述: 深证证券交易所股票代码和股票简称数据\n\n限量: 单次获取深证证券交易所股票代码和简称数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                          |\n|--------|-----|-------------------------------------------------------------|\n| symbol | str | symbol=\"A股列表\"; choice of {\"A股列表\", \"B股列表\", \"CDR列表\", \"AB股列表\"} |\n\n输出参数-A股列表\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 板块     | object | -   |\n| A股代码   | object | -   |\n| A股简称   | object | -   |\n| A股上市日期 | object | -   |\n| A股总股本  | object | -   |\n| A股流通股本 | object | -   |\n| 所属行业   | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_info_sz_name_code_df = ak.stock_info_sz_name_code(symbol=\"A股列表\")\nprint(stock_info_sz_name_code_df)\n```\n\n数据示例\n\n```\n       板块   A股代码  A股简称   A股上市日期     A股总股本        A股流通股本    所属行业\n0      主板  000001   平安银行  1991-04-03  19,405,918,198  19,405,513,424   J 金融业\n1      主板  000002  万  科Ａ  1991-01-29   9,724,196,533   9,716,935,865   K 房地产\n2      主板  000004   国华网安  1990-12-01     132,380,282     126,288,093  I 信息技术\n3      主板  000005   ST星源  1990-12-10   1,058,536,842   1,057,875,742  N 公共环保\n4      主板  000006   深振业Ａ  1992-04-27   1,349,995,046   1,349,987,396   K 房地产\n   ...     ...    ...         ...             ...             ...     ...\n2838  创业板  301568    思泰克  2023-11-28     103,258,400      24,487,502   C 制造业\n2839  创业板  301577   美信科技  2024-01-24      44,260,000      11,095,149   C 制造业\n2840  创业板  301578   辰奕智能  2023-12-28      48,000,000      11,378,776   C 制造业\n2841  创业板  301589   诺瓦星云  2024-02-08      51,360,000       7,702,090   C 制造业\n2842  创业板  301591  C肯特股份  2024-02-28      84,120,000      19,943,633   C 制造业\n[2843 rows x 7 columns]\n```\n\n#### 股票列表-北证\n\n接口: stock_info_bj_name_code\n\n目标地址: https://www.bse.cn/nq/listedcompany.html\n\n描述: 北京证券交易所股票代码和简称数据\n\n限量: 单次获取北京证券交易所所有的股票代码和简称数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型     | 描述      |\n|------|--------|---------|\n| 证券代码 | object | -       |\n| 证券简称 | object | -       |\n| 总股本  | int64  | 注意单位: 股 |\n| 流通股本 | int64  | 注意单位: 股 |\n| 上市日期 | object | -       |\n| 所属行业 | object | -       |\n| 地区   | object | -       |\n| 报告日期 | object | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_info_bj_name_code_df = ak.stock_info_bj_name_code()\nprint(stock_info_bj_name_code_df)\n```\n\n数据示例\n\n```\n       证券代码  证券简称   总股本  ...              所属行业   地区        报告日期\n0    430017  星昊医药  122577200  ...             医药制造业  北京市  2024-02-29\n1    430047  诺思兰德  274873974  ...             医药制造业  北京市  2024-02-29\n2    430090  同辉信息  199333546  ...        软件和信息技术服务业  北京市  2024-02-29\n3    430139  华岭股份  266800000  ...  计算机、通信和其他电子设备制造业  上海市  2024-02-29\n4    430198  微创光电  161363872  ...  计算机、通信和其他电子设备制造业  湖北省  2024-02-29\n..      ...   ...        ...  ...               ...  ...         ...\n239  873693   阿为特   72700000  ...             金属制品业  上海市  2024-02-29\n240  873703  广厦环能   76900000  ...           专用设备制造业  北京市  2024-02-29\n241  873726  卓兆点胶   82077246  ...           专用设备制造业  江苏省  2024-02-29\n242  873806   云星宇  300736667  ...        软件和信息技术服务业  北京市  2024-02-29\n243  873833  美心翼申   82360000  ...           通用设备制造业  重庆市  2024-02-29\n[244 rows x 8 columns]\n```\n\n#### 终止/暂停上市-深证\n\n接口: stock_info_sz_delist\n\n目标地址: https://www.szse.cn/market/stock/suspend/index.html\n\n描述: 深证证券交易所终止/暂停上市股票\n\n限量: 单次获取深证证券交易所终止/暂停上市数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                              |\n|--------|-----|-------------------------------------------------|\n| symbol | str | symbol=\"终止上市公司\"; choice of {\"暂停上市公司\", \"终止上市公司\"} |\n\n输出参数\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 证券代码   | object | -   |\n| 证券简称   | object | -   |\n| 上市日期   | object | -   |\n| 终止上市日期 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_info_sz_delist_df = ak.stock_info_sz_delist(symbol=\"终止上市公司\")\nprint(stock_info_sz_delist_df)\n```\n\n数据示例\n\n```\n      证券代码   证券简称  上市日期    终止上市日期\n0    000003   PT金田Ａ  1991-01-14  2002-06-14\n1    000013  *ST石化A  1992-05-06  2004-09-20\n2    000015   PT中浩Ａ  1992-06-25  2001-10-25\n3    000018    神城A退  1992-06-16  2020-01-07\n4    000024    招商地产  1993-06-07  2015-12-30\n..      ...     ...         ...         ...\n145  300367     网力退  2014-01-29  2022-06-30\n146  300372     欣泰退  2014-01-27  2017-08-28\n147  300392     腾信退  2014-09-10  2023-07-10\n148  300431     暴风退  2015-03-24  2020-11-10\n149  300526     中潜退  2016-08-02  2023-07-12\n[150 rows x 4 columns]\n```\n\n#### 两网及退市\n\n接口: stock_staq_net_stop\n\n目标地址: https://quote.eastmoney.com/center/gridlist.html#staq_net_board\n\n描述: 东方财富网-行情中心-沪深个股-两网及退市\n\n限量: 单次获取所有两网及退市的股票数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型     | 描述  |\n|-----|--------|-----|\n| 序号  | int64  | -   |\n| 代码  | object | -   |\n| 名称  | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_staq_net_stop_df = ak.stock_staq_net_stop()\nprint(stock_staq_net_stop_df)\n```\n\n数据示例\n\n```\n      序号   代码      名称\n0      1  400199    阳光城5\n1      2  400170     运盛5\n2      3  400039  华  圣 5\n3      4  400119     西创5\n4      5  400045     猴王5\n..   ...     ...     ...\n199  200  400149     金泰5\n200  201  400155     海医5\n201  202  400142     宝德5\n202  203  400163     计通5\n203  204  400046     博嘉5\n[204 rows x 3 columns]\n```\n\n#### 暂停/终止上市-上证\n\n接口: stock_info_sh_delist\n\n目标地址: https://www.sse.com.cn/assortment/stock/list/delisting/\n\n描述: 上海证券交易所暂停/终止上市股票\n\n限量: 单次获取上海证券交易所暂停/终止上市股票\n\n输入参数\n\n| 名称     | 类型  | 描述                                         |\n|--------|-----|--------------------------------------------|\n| symbol | str | symbol=\"全部\"; choice of {\"全部\", \"沪市\", \"科创板\"} |\n\n输出参数\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 公司代码   | object | -   |\n| 公司简称   | object | -   |\n| 上市日期   | object | -   |\n| 暂停上市日期 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_info_sh_delist_df = ak.stock_info_sh_delist(symbol=\"全部\")\nprint(stock_info_sh_delist_df)\n```\n\n数据示例\n\n```\n     公司代码    公司简称   上市日期      暂停上市日期\n0    600001    邯郸钢铁  1998-01-22  2009-12-29\n1    600002    齐鲁退市  1998-04-08  2006-04-24\n2    600003   ST东北高  1999-08-10  2010-02-26\n3    600005    武钢股份  1999-08-03  2017-02-14\n4    600065  *ST联 谊  1997-05-23  2007-12-13\n..      ...     ...         ...         ...\n109  900935    阳晨Ｂ股  1995-07-27  2016-12-16\n110  900949    东电Ｂ股  1997-09-23  2013-11-07\n111  900950    新城Ｂ股  1997-10-16  2015-11-23\n112  900951    退市大化  1997-10-21  2020-08-28\n113  900956    东贝Ｂ股  1999-07-15  2020-11-23\n[114 rows x 4 columns]\n```\n\n#### 股票更名\n\n接口: stock_info_change_name\n\n目标地址: https://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpInfo/stockid/300378.phtml\n\n描述: 新浪财经-股票曾用名\n\n限量: 单次指定 symbol 的所有历史曾用名称\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"000503\"; 股票代码 |\n\n输出参数\n\n| 名称    | 类型     | 描述  |\n|-------|--------|-----|\n| index | int64  | -   |\n| name  | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_info_change_name_list = ak.stock_info_change_name(symbol=\"000503\")\nprint(stock_info_change_name_list)\n```\n\n数据示例\n\n```\n   index  name\n0      1   琼海虹\n1      2  海虹控股\n2      3  ST海虹\n3      4  海虹控股\n4      5   G海虹\n5      6  海虹控股\n6      7  国新健康\n```\n\n#### 名称变更-深证\n\n接口: stock_info_sz_change_name\n\n目标地址: https://www.szse.cn/www/market/stock/changename/index.html\n\n描述: 深证证券交易所-市场数据-股票数据-名称变更\n\n限量: 单次获取所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                        |\n|--------|-----|-------------------------------------------|\n| symbol | str | symbol=\"全称变更\"; choice of {\"全称变更\", \"简称变更\"} |\n\n输出参数\n\n| 名称    | 类型     | 描述  |\n|-------|--------|-----|\n| 变更日期  | object | -   |\n| 证券代码  | object | -   |\n| 证券简称  | object | -   |\n| 变更前全称 | object | -   |\n| 变更后全称 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_info_sz_change_name_df = ak.stock_info_sz_change_name(symbol=\"全称变更\")\nprint(stock_info_sz_change_name_df)\n```\n\n数据示例\n\n```\n       变更日期    证券代码   证券简称               变更前全称             变更后全称\n0     1992-02-28  000004   国华网安        蛇口安达运输股份有限公司   深圳市蛇口安达实业股份有限公司\n1     1993-03-08  200012  南  玻Ｂ        中国南方玻璃股份有限公司      中国南玻集团股份有限公司\n2     1993-03-08  000012  南  玻Ａ        中国南方玻璃股份有限公司      中国南玻集团股份有限公司\n3     1993-07-12  000009   中国宝安   深圳市宝安企业(集团)股份有限公司      中国宝安集团股份有限公司\n4     1993-12-20  000005   ST星源        深圳原野实业股份有限公司      深圳世纪星源股份有限公司\n          ...     ...    ...                 ...               ...\n1614  2024-01-30  002986   宇新股份      湖南宇新能源科技股份有限公司    广东宇新能源科技股份有限公司\n1615  2024-01-31  301418   协昌科技      江苏协昌电子科技股份有限公司  江苏协昌电子科技集团股份有限公司\n1616  2024-02-05  300617   安靠智电  江苏安靠智能输电工程科技股份有限公司      江苏安靠智电股份有限公司\n1617  2024-02-07  002060   广东建工        广东水电二局股份有限公司   广东省建筑工程集团股份有限公司\n1618  2024-02-28  300478   杭州高新      杭州高新橡塑材料股份有限公司    杭州高新材料科技股份有限公司\n[1619 rows x 5 columns]\n```\n\n#### 基金持股\n\n接口: stock_fund_stock_holder\n\n目标地址: https://vip.stock.finance.sina.com.cn/corp/go.php/vCI_FundStockHolder/stockid/600004.phtml\n\n描述: 新浪财经-股本股东-基金持股\n\n限量: 新浪财经-股本股东-基金持股所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"600004\"; 股票代码 |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 基金名称   | object  | -       |\n| 基金代码   | object  | -       |\n| 持仓数量   | int64   | 注意单位: 股 |\n| 占流通股比例 | float64 | 注意单位: % |\n| 持股市值   | int64   | 注意单位: 元 |\n| 占净值比例  | float64 | 注意单位: % |\n| 截止日期   | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_fund_stock_holder_df = ak.stock_fund_stock_holder(symbol=\"601318\")\nprint(stock_fund_stock_holder_df)\n```\n\n数据示例\n\n```\n    基金名称    基金代码      持仓数量  占流通股比例        持股市值  占净值比例        截止日期\n0      银华沪深300价值ETF  562320    265300  0.0015    12981100   3.85  2023-01-05\n1    华安沪深300增强策略ETF  561000     91200  0.0005     4425940   0.53  2023-01-04\n2         华夏上证50ETF  510050  92794672  0.5076  4361350000   7.48  2022-12-31\n3      华泰柏瑞沪深300ETF  510300  44522018  0.2436  2092530000   2.70  2022-12-31\n4     易方达沪深300非银ETF  512070  34406219  0.1882  1617090000  29.08  2022-12-31\n..              ...     ...       ...     ...         ...    ...         ...\n995       安信民稳增长混合A  008809   1125037  0.0062    46779000   2.68  2022-09-30\n996       建信上证50ETF  510800   1084221  0.0059    45081900   6.86  2022-09-30\n997   国寿安保沪港深300ETF  517300   1016300  0.0056    42257800   2.09  2022-09-30\n998      泰达宏利市值优选混合  162209   1013832  0.0055    42155100   6.45  2022-09-30\n999      南方沪深300ETF  159925    961652  0.0053    39985500   2.52  2022-09-30\n```\n\n#### 主要股东\n\n接口: stock_main_stock_holder\n\n目标地址: https://vip.stock.finance.sina.com.cn/corp/go.php/vCI_StockHolder/stockid/600004.phtml\n\n描述: 新浪财经-股本股东-主要股东\n\n限量: 单次获取所有历史数据\n\n输入参数\n\n| 名称    | 类型  | 描述                   |\n|-------|-----|----------------------|\n| stock | str | stock=\"600004\"; 股票代码 |\n\n输出参数\n\n| 名称    | 类型      | 描述         |\n|-------|---------|------------|\n| 编号    | object  | -          |\n| 股东名称  | object  | -          |\n| 持股数量  | float64 | 注意单位: 股    |\n| 持股比例  | float64 | 注意单位: %    |\n| 股本性质  | object  | -          |\n| 截至日期  | object  | -          |\n| 公告日期  | object  | -          |\n| 股东说明  | object  | -          |\n| 股东总数  | float64 | -          |\n| 平均持股数 | float64 | 备注: 按总股本计算 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_main_stock_holder_df = ak.stock_main_stock_holder(stock=\"600004\")\nprint(stock_main_stock_holder_df)\n```\n\n数据示例\n\n```\n      编号                股东名称          持股数量  ...  股东说明      股东总数     平均持股数\n0      1          上海国际集团有限公司  6.331323e+09  ...   NaN  164613.0  178312.0\n1      2      中国移动通信集团广东有限公司  5.334893e+09  ...   NaN  164613.0  178312.0\n2      3   富德生命人寿保险股份有限公司-传统  2.779437e+09  ...   NaN  164613.0  178312.0\n3      4  富德生命人寿保险股份有限公司-资本金  1.763232e+09  ...   NaN  164613.0  178312.0\n4      5       上海上国投资产管理有限公司  1.395571e+09  ...   NaN  164613.0  178312.0\n...   ..                 ...           ...  ...   ...       ...       ...\n1383   6        东方国际（集团）有限公司  5.000000e+07  ...   NaN       NaN       NaN\n1384   7            申能股份有限公司  5.000000e+07  ...   NaN       NaN       NaN\n1385   8    上海外高桥保税区开发股份有限公司  4.000000e+07  ...   NaN       NaN       NaN\n1386   9      上海市城市建设投资开发总公司  3.800000e+07  ...   NaN       NaN       NaN\n1387  10          中国华北电力集团公司  3.000000e+07  ...   NaN       NaN       NaN\n[1388 rows x 10 columns]\n```\n\n#### 机构持股\n\n##### 机构持股一览表\n\n接口: stock_institute_hold\n\n目标地址: https://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jgcg/index.phtml\n\n描述: 新浪财经-机构持股-机构持股一览表\n\n限量: 单次获取所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                              |\n|--------|-----|-----------------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"20051\"; 从 2005 年开始, {\"一季报\":1, \"中报\":2 \"三季报\":3 \"年报\":4}, e.g., \"20191\", 其中的 1 表示一季报; \"20193\", 其中的 3 表示三季报; |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 证券代码     | object  | -       |\n| 证券简称     | object  | -       |\n| 机构数      | int64   | -       |\n| 机构数变化    | int64   | -       |\n| 持股比例     | float64 | 注意单位: % |\n| 持股比例增幅   | float64 | 注意单位: % |\n| 占流通股比例   | float64 | 注意单位: % |\n| 占流通股比例增幅 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_institute_hold_df = ak.stock_institute_hold(symbol=\"20201\")\nprint(stock_institute_hold_df)\n```\n\n数据示例\n\n```\n      证券代码  证券简称 机构数  机构数变化   持股比例  持股比例增幅  占流通股比例  占流通股比例增幅\n0     002296  辉煌科技    1      1   0.85    0.85    0.85      0.85\n1     300354  东华测试    1      0   0.21   -0.59    0.21     -0.59\n2     000656  金科股份    1      0   2.12    0.04    2.14      0.03\n3     002859  洁美科技    1      0   0.97    0.00    2.28      0.00\n4     603866  桃李面包    1      0   1.34    0.00    1.34      0.00\n      ...   ...  ...    ...    ...     ...     ...       ...\n1790  300782   卓胜微   10      2   6.00    2.02   24.00      8.07\n1791  300788  中信出版   10      0  10.26    2.88   41.03     11.50\n1792  300785   值得买   10      1  11.62    4.14   46.48     16.56\n1793  688188  柏楚电子   10      0   5.17   -0.13   21.43     -1.70\n1794  300003  乐普医疗   16      1  11.16    0.99   11.78      1.05\n[1795 rows x 8 columns]\n```\n\n##### 机构持股详情\n\n接口: stock_institute_hold_detail\n\n目标地址: http://vip.stock.finance.sina.com.cn/q/go.php/vComStockHold/kind/jgcg/index.phtml\n\n描述: 新浪财经-机构持股-机构持股详情\n\n限量: 单次所有历史数据\n\n输入参数\n\n| 名称      | 类型  | 描述                                                                                                               |\n|---------|-----|------------------------------------------------------------------------------------------------------------------|\n| stock   | str | stock=\"300003\"; 股票代码                                                                                             |\n| quarter | str | quarter=\"20201\"; 从 2005 年开始, {\"一季报\":1, \"中报\":2 \"三季报\":3 \"年报\":4}, e.g., \"20191\", 其中的 1 表示一季报; \"20193\", 其中的 3 表示三季报; |\n\n输出参数\n\n| 名称       | 类型      | 描述       |\n|----------|---------|----------|\n| 持股机构类型   | object  | -        |\n| 持股机构代码   | object  | -        |\n| 持股机构简称   | object  | -        |\n| 持股机构全称   | object  | -        |\n| 持股数      | float64 | 注意单位: 万股 |\n| 最新持股数    | float64 | 注意单位: 万股 |\n| 持股比例     | float64 | 注意单位: %  |\n| 最新持股比例   | float64 | 注意单位: %  |\n| 占流通股比例   | float64 | 注意单位: %  |\n| 最新占流通股比例 | float64 | 注意单位: %  |\n| 持股比例增幅   | float64 | 注意单位: %  |\n| 占流通股比例增幅 | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_institute_hold_detail_df = ak.stock_institute_hold_detail(stock=\"300003\", quarter=\"20201\")\nprint(stock_institute_hold_detail_df)\n```\n\n数据示例\n\n```\n   持股机构类型  持股机构代码      持股机构简称  ... 最新占流通股比例  持股比例增幅  占流通股比例增幅\n0      基金    519069          汇添富价值精选混合A  ...     1.18   -0.22     -0.23\n1      基金    159915           易方达创业板ETF  ...     0.73    0.02      0.02\n2      基金    001417      汇添富医疗服务灵活配置混合A  ...     1.01   -0.35     -0.37\n3      基金    470009          汇添富民营活力混合A  ...     0.48    0.03      0.02\n4      基金    159949          华安创业板50ETF  ...     0.36    0.13      0.13\n5      基金    000831            工银医疗保健股票  ...     0.57   -0.09     -0.10\n6    全国社保  70010117         全国社保基金一一七组合  ...     1.30   -0.22     -0.23\n7    全国社保  70010104         全国社保基金一零四组合  ...     0.60   -0.06     -0.07\n8    全国社保  70010503         全国社保基金五零三组合  ...     0.38    0.07      0.07\n9      保险  70304136  华夏人寿保险股份有限公司－自有...  ...     0.00    1.39      1.47\n10   QFII  70304002         挪威中央银行－自有资金  ...     0.90    0.25      0.27\n11   QFII  70304274        澳门金融管理局－自有资金  ...     0.99    0.00      0.00\n12   QFII  80126479           魁北克储蓄投资集团  ...     0.71    0.00      0.00\n13   QFII  70304150  鼎晖投资咨询新加坡有限公司－鼎...  ...     0.57    0.01      0.01\n14   QFII  80128964             阿布达比投资局  ...     0.56    0.02      0.02\n15   QFII  80195934            科威特政府投资局  ...     0.39    0.04      0.04\n[16 rows x 12 columns]\n```\n\n#### 机构推荐\n\n##### 机构推荐池\n\n接口: stock_institute_recommend\n\n目标地址: http://stock.finance.sina.com.cn/stock/go.php/vIR_RatingNewest/index.phtml\n\n描述: 新浪财经-机构推荐池-具体指标的数据\n\n限量: 单次获取新浪财经-机构推荐池-具体指标的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                                 |\n|--------|-----|--------------------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"行业关注度\"; choice of {'最新投资评级', '上调评级股票', '下调评级股票', '股票综合评级', '首次评级股票', '目标涨幅排名', '机构关注度', '行业关注度', '投资评级选股'} |\n\n输出参数\n\n| 名称  | 类型  | 描述                |\n|-----|-----|-------------------|\n| -   | -   | 根据特定 indicator 而定 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_institute_recommend_df = ak.stock_institute_recommend(symbol=\"投资评级选股\")\nprint(stock_institute_recommend_df)\n```\n\n数据示例\n\n```\n        股票代码   股票名称 最新评级     目标价       评级日期↓ 综合评级    平均涨幅    行业\n0     000001   平安银行   买入   19.73  2020-05-27   买入  51.75%    银行\n1     300403   汉宇集团   中性    5.70  2020-05-27   中性  18.26%  白色家电\n2     603288   海天味业   买入  112.85  2020-05-27   买入  -1.32%  食品加工\n3     601238   广汽集团   买入   12.72  2020-05-27   买入  34.62%  汽车整车\n4     002709   天赐材料   增持   34.24  2020-05-27   买入   18.1%  化学制品\n      ...    ...  ...     ...         ...  ...     ...   ...\n1053  601398   工商银行   买入    7.14  2020-05-27   买入  39.54%    银行\n1054  002078   太阳纸业   买入   11.22  2020-05-27   买入  35.64%    造纸\n1055  002080   中材科技   买入   14.59  2020-05-27   买入  22.61%  化学制品\n1056  002081  金 螳 螂   增持   12.55  2020-05-27   买入  55.51%  装修装饰\n1057  601658   邮储银行   增持    6.52  2020-05-27   买入  28.25%    银行\n```\n\n##### 股票评级记录\n\n接口: stock_institute_recommend_detail\n\n目标地址: http://stock.finance.sina.com.cn/stock/go.php/vIR_StockSearch/key/sz000001.phtml\n\n描述: 新浪财经-机构推荐池-股票评级记录\n\n限量: 单次获取新浪财经-机构推荐池-股票评级记录的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述              |\n|--------|-----|-----------------|\n| symbol | str | symbol=\"000001\" |\n\n输出参数\n\n| 名称   | 类型  | 描述  |\n|------|-----|-----|\n| 股票代码 | str | -   |\n| 股票名称 | str | -   |\n| 目标价  | str | -   |\n| 最新评级 | str | -   |\n| 评级机构 | str | -   |\n| 分析师  | str | -   |\n| 行业   | str | -   |\n| 评级日期 | str | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_institute_recommend_detail_df = ak.stock_institute_recommend_detail(symbol=\"002709\")\nprint(stock_institute_recommend_detail_df)\n```\n\n数据示例\n\n```\n       股票代码  股票名称    目标价 最新评级  评级机构        分析师    行业        评级日期\n0    002709  天赐材料    NaN   增持  国海证券      谭倩,尹斌  化学制品  2020-05-27\n1    002709  天赐材料    NaN   增持  光大证券     吴裕,裘孝锋  化学制品  2020-05-07\n2    002709  天赐材料  35.20   买入  华创证券  杨达伟,于潇,邱迪  化学制品  2020-05-06\n3    002709  天赐材料  33.25   买入  东吴证券        曾朵红  化学制品  2020-05-06\n4    002709  天赐材料  35.50   买入  招商证券    游家训,刘珺涵  化学制品  2020-05-01\n..      ...   ...    ...  ...   ...        ...   ...         ...\n241  002709  天赐材料    NaN   买入  招商证券    游家训,陈雁冰  化学制品  2017-09-07\n242  002709  天赐材料    NaN   买入  方正证券        韩振国  化学制品  2017-09-07\n243  002709  天赐材料  61.82   买入  招商证券    游家训,陈雁冰  化学制品  2017-09-07\n244  002709  天赐材料  59.82   买入  中泰证券        邵晶鑫  化学制品  2017-09-06\n245  002709  天赐材料    NaN   买入  国海证券        代鹏举  化学制品  2017-09-04\n```\n\n##### 投资评级\n\n接口: stock_rank_forecast_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-评级预测-投资评级\n\n限量: 单次获取指定交易日的所有数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20210910\"; 交易日 |\n\n输出参数\n\n| 名称      | 类型      | 描述  |\n|---------|---------|-----|\n| 证券代码    | object  | -   |\n| 证券简称    | object  | -   |\n| 发布日期    | object  | -   |\n| 研究机构简称  | object  | -   |\n| 研究员名称   | object  | -   |\n| 投资评级    | object  | -   |\n| 是否首次评级  | object  | -   |\n| 评级变化    | object  | -   |\n| 前一次投资评级 | object  | -   |\n| 目标价格-下限 | float64 | -   |\n| 目标价格-上限 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_rank_forecast_cninfo_df = ak.stock_rank_forecast_cninfo(date=\"20230817\")\nprint(stock_rank_forecast_cninfo_df)\n```\n\n数据示例\n\n```\n     证券代码  证券简称   发布日期 研究机构简称  ... 评级变化 前一次投资评级 目标价格-下限 目标价格-上限\n0    000552  甘肃能化  2023-08-17   民生证券  ...   维持      增持     NaN     NaN\n1    000552  甘肃能化  2023-08-17   山西证券  ...   未知     不评级     NaN     NaN\n2    000552  甘肃能化  2023-08-17   开源证券  ...   维持      买入     NaN     NaN\n3    000567  海德股份  2023-08-17   中信证券  ...   未知     不评级     NaN     NaN\n4    000682  东方电子  2023-08-17   光大证券  ...   维持      买入     NaN     NaN\n..      ...   ...         ...    ...  ...  ...     ...     ...     ...\n329  688668  鼎通科技  2023-08-17   民生证券  ...   维持      增持     NaN     NaN\n330  688981  中芯国际  2023-08-17   中信建投  ...   未知     不评级     NaN     NaN\n331  688981  中芯国际  2023-08-17   中泰证券  ...   维持      买入     NaN     NaN\n332  836419  万德股份  2023-08-17   开源证券  ...   未知     不评级     NaN     NaN\n333  839371  欧福蛋业  2023-08-17   开源证券  ...   维持      增持     NaN     NaN\n[334 rows x 11 columns]\n```\n\n##### 申万个股行业分类变动历史\n\n接口: stock_industry_clf_hist_sw\n\n目标地址: http://www.swhyresearch.com/institute_sw/allIndex/downloadCenter/industryType\n\n描述: 申万宏源研究-行业分类-全部行业分类\n\n限量: 单次获取所有个股的行业分类变动历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称            | 类型     | 描述     |\n|---------------|--------|--------|\n| symbol        | object | 股票代码   |\n| start_date    | object | 计入日期   |\n| industry_code | object | 申万行业代码 |\n| update_time   | object | 更新日期   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_industry_clf_hist_sw_df = ak.stock_industry_clf_hist_sw()\nprint(stock_industry_clf_hist_sw_df)\n```\n\n数据示例\n\n```\n       symbol  start_date industry_code update_time\n0      000001  1991-04-03        440101  2015-10-27\n1      000001  2014-01-01        480101  2015-10-27\n2      000001  2021-07-30        480301  2021-07-31\n3      000002  1991-01-29        430101  2015-10-27\n4      000003  1991-04-14        510101  2015-10-27\n...       ...         ...           ...         ...\n12360  873706  2024-03-12        640601  2024-03-13\n12361  873726  2023-10-30        640209  2023-10-30\n12362  873806  2024-01-17        710301  2024-01-17\n12363  873833  2023-11-20        640106  2023-11-20\n12364  874090  2023-08-21        370304  2023-08-21\n[12365 rows x 4 columns]\n```\n\n##### 行业市盈率\n\n接口: stock_industry_pe_ratio_cninfo\n\n目标地址: http://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-行业分析-行业市盈率\n\n限量: 单次获取指定 symbol 在指定交易日的所有数据; 只能获取近期的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                |\n|--------|-----|---------------------------------------------------|\n| symbol | str | symbol=\"证监会行业分类\"; choice of {\"证监会行业分类\", \"国证行业分类\"} |\n| date   | str | date=\"20210910\"; 交易日                              |\n\n输出参数\n\n| 名称         | 类型      | 描述       |\n|------------|---------|----------|\n| 变动日期       | object  | -        |\n| 行业分类       | object  | -        |\n| 行业层级       | int64   | -        |\n| 行业编码       | object  | -        |\n| 行业名称       | object  | -        |\n| 公司数量       | float64 | -        |\n| 纳入计算公司数量   | float64 | -        |\n| 总市值-静态     | float64 | 注意单位: 亿元 |\n| 净利润-静态     | float64 | 注意单位: 亿元 |\n| 静态市盈率-加权平均 | float64 | -        |\n| 静态市盈率-中位数  | float64 | -        |\n| 静态市盈率-算术平均 | float64 | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_industry_pe_ratio_cninfo_df = ak.stock_industry_pe_ratio_cninfo(symbol=\"国证行业分类\", date=\"20240617\")\nprint(stock_industry_pe_ratio_cninfo_df)\n```\n\n数据示例\n\n```\n        变动日期          行业分类  行业层级  ... 静态市盈率-加权平均 静态市盈率-中位数  静态市盈率-算术平均\n0    2024-06-17  国证行业分类标准2019     1  ...      11.54     15.75       49.19\n1    2024-06-17  国证行业分类标准2019     2  ...      11.54     15.75       49.19\n2    2024-06-17  国证行业分类标准2019     3  ...      18.44     22.05       28.24\n3    2024-06-17  国证行业分类标准2019     4  ...      19.23     21.45       30.02\n4    2024-06-17  国证行业分类标准2019     4  ...      18.10     24.86       25.35\n..          ...           ...   ...  ...        ...       ...         ...\n288  2024-06-17  国证行业分类标准2019     4  ...        NaN       NaN         NaN\n289  2024-06-17  国证行业分类标准2019     3  ...      19.59     22.28       43.17\n290  2024-06-17  国证行业分类标准2019     4  ...      19.59     22.28       43.17\n291  2024-06-17  国证行业分类标准2019     3  ...      14.12     14.12       14.12\n292  2024-06-17  国证行业分类标准2019     4  ...      14.12     14.12       14.12\n[293 rows x 12 columns]\n```\n\n##### 新股过会\n\n接口: stock_new_gh_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/xinguList\n\n描述: 巨潮资讯-数据中心-新股数据-新股过会\n\n限量: 单次获取近一年所有新股过会的数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型     | 描述  |\n|-------|--------|-----|\n| 公司名称  | object | -   |\n| 上会日期  | object | -   |\n| 审核类型  | object | -   |\n| 审议内容  | object | -   |\n| 审核结果  | object | -   |\n| 审核公告日 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_new_gh_cninfo_df = ak.stock_new_gh_cninfo()\nprint(stock_new_gh_cninfo_df)\n```\n\n数据示例\n\n```\n              公司名称        上会日期  审核类型 审议内容 审核结果       审核公告日\n0          兰州银行股份有限公司  2021-09-09  首发新股   首发   通过  2021-09-09\n1          永安期货股份有限公司  2021-09-09  首发新股   首发   通过  2021-09-09\n2        杭州福莱蒽特股份有限公司  2021-09-09  首发新股   首发   通过  2021-09-09\n3    新疆派特罗尔能源服务股份有限公司  2021-09-02  首发新股   首发  未通过  2021-09-02\n4      浙江盛泰服装集团股份有限公司  2021-08-26  首发新股   首发   通过  2021-08-26\n..                ...         ...   ...  ...  ...         ...\n125      河南蓝天燃气股份有限公司  2020-09-17  首发新股   首发   通过  2020-09-17\n126      北京声迅电子股份有限公司  2020-09-17  首发新股   首发   通过  2020-09-17\n127    天津友发钢管集团股份有限公司  2020-09-17  首发新股   首发   通过  2020-09-17\n128     联泓新材料科技股份有限公司  2020-09-17  首发新股   首发   通过  2020-09-17\n129      中国国际金融股份有限公司  2020-09-17  首发新股   首发   通过  2020-09-17\n```\n\n##### 新股发行\n\n接口: stock_new_ipo_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/xinguList\n\n描述: 巨潮资讯-数据中心-新股数据-新股发行\n\n限量: 单次获取近三年所有新股发行的数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述       |\n|---------|---------|----------|\n| 证劵代码    | object  | -        |\n| 证券简称    | object  | -        |\n| 上市日期    | object  | -        |\n| 申购日期    | object  | -        |\n| 发行价     | float64 | 注意单位: 元  |\n| 总发行数量   | float64 | 注意单位: 万股 |\n| 发行市盈率   | float64 | -        |\n| 上网发行中签率 | float64 | 注意单位: %  |\n| 摇号结果公告日 | object  | -        |\n| 中签公告日   | object  | -        |\n| 中签缴款日   | object  | -        |\n| 网上申购上限  | float64 | -        |\n| 上网发行数量  | float64 | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_new_ipo_cninfo_df = ak.stock_new_ipo_cninfo()\nprint(stock_new_ipo_cninfo_df)\n```\n\n数据示例\n\n```\n     证劵代码  证券简称   上市日期  ...   中签缴款日  网上申购上限 上网发行数量\n0    301592  六九一二         NaT  ...  2024-10-15    1.75  1750.00\n1    301613  新铝时代         NaT  ...  2024-10-18    0.65  1162.70\n2    301626  苏州天脉         NaT  ...  2024-10-17    0.70  1258.05\n3    301628  强达电路         NaT  ...  2024-10-23    1.85  1884.40\n4    603205   健尔康         NaT  ...  2024-10-29     NaN  1200.00\n..      ...   ...         ...  ...         ...     ...      ...\n926  301087  可孚医疗  2021-10-25  ...  2021-10-15    1.10  1918.55\n927  605566  福莱蒽特  2021-10-25  ...  2021-10-13    1.30  3000.60\n928  688255   凯尔达  2021-10-25  ...  2021-10-14    0.45   674.75\n929  872925  锦好医疗  2021-10-25  ...  2021-10-08   51.63  1032.60\n930  688737  中自科技  2021-10-22  ...  2021-10-14    0.50   734.70\n[931 rows x 13 columns]\n```\n\n##### 董监高及相关人员持股变动-上证\n\n接口: stock_share_hold_change_sse\n\n目标地址: http://www.sse.com.cn/disclosure/credibility/supervision/change/\n\n描述: 上海证券交易所-披露-监管信息公开-公司监管-董董监高人员股份变动\n\n限量: 单次获取指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                          |\n|--------|-----|---------------------------------------------|\n| symbol | str | symbol=\"600000\"; choice of {\"全部\", \"具体股票代码\"} |\n\n输出参数\n\n| 名称       | 类型      | 描述 |\n|----------|---------|----|\n| 公司代码     | object  | -  |\n| 公司名称     | object  | -  |\n| 姓名       | object  | -  |\n| 职务       | object  | -  |\n| 股票种类     | object  | -  |\n| 货币种类     | object  | -  |\n| 本次变动前持股数 | int64   | -  |\n| 变动数      | int64   | -  |\n| 本次变动平均价格 | float64 | -  |\n| 变动后持股数   | int64   | -  |\n| 变动原因     | object  | -  |\n| 变动日期     | object  | -  |\n| 填报日期     | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_share_hold_change_sse_df = ak.stock_share_hold_change_sse(symbol=\"600000\")\nprint(stock_share_hold_change_sse_df)\n```\n\n数据示例\n\n```\n    公司代码  公司名称   姓名         职务  ...  变动后持股数    变动原因   变动日期        填报日期\n0   600000  浦发银行   谢伟     高级管理人员  ...  217000  二级市场买卖  2021-07-15  2021-07-16\n1   600000  浦发银行  王新浩     高级管理人员  ...  231000  二级市场买卖  2021-07-15  2021-07-16\n2   600000  浦发银行  潘卫东  董事、高级管理人员  ...  400000  二级市场买卖  2021-07-15  2021-07-16\n3   600000  浦发银行  刘以研  董事、高级管理人员  ...  235900  二级市场买卖  2021-07-15  2021-07-16\n4   600000  浦发银行  崔炳文     高级管理人员  ...  206700  二级市场买卖  2021-07-15  2021-07-16\n5   600000  浦发银行   谢伟     高级管理人员  ...  158000  二级市场买卖  2020-07-16  2020-07-17\n6   600000  浦发银行  王新浩     高级管理人员  ...  171000  二级市场买卖  2020-07-16  2020-07-17\n7   600000  浦发银行  潘卫东  董事、高级管理人员  ...  200000  二级市场买卖  2020-07-16  2020-07-17\n8   600000  浦发银行  刘以研  董事、高级管理人员  ...  177400  二级市场买卖  2020-07-15  2020-07-17\n9   600000  浦发银行  崔炳文     高级管理人员  ...  148700  二级市场买卖  2020-07-16  2020-07-17\n10  600000  浦发银行  刘以研  董事、高级管理人员  ...  163500  二级市场买卖  2020-07-10  2020-07-15\n11  600000  浦发银行  刘以研  董事、高级管理人员  ...  168500  二级市场买卖  2020-07-13  2020-07-15\n12  600000  浦发银行  刘以研  董事、高级管理人员  ...  173500  二级市场买卖  2020-07-14  2020-07-15\n13  600000  浦发银行  徐海燕     高级管理人员  ...  108000  二级市场买卖  2019-06-10  2019-06-11\n14  600000  浦发银行   谢伟     高级管理人员  ...  106000  二级市场买卖  2019-06-10  2019-06-11\n15  600000  浦发银行  王新浩     高级管理人员  ...  111000  二级市场买卖  2019-06-10  2019-06-11\n16  600000  浦发银行  潘卫东     高级管理人员  ...  120000  二级市场买卖  2019-06-10  2019-06-11\n17  600000  浦发银行  刘以研     高级管理人员  ...  103500  二级市场买卖  2019-06-10  2019-06-11\n18  600000  浦发银行  刘信义     高级管理人员  ...  160000  二级市场买卖  2019-06-10  2019-06-11\n19  600000  浦发银行  崔炳文     高级管理人员  ...   99700  二级市场买卖  2019-06-10  2019-06-11\n20  600000  浦发银行  崔炳文     高级管理人员  ...   51700  二级市场买卖  2018-07-17  2018-07-17\n21  600000  浦发银行  徐海燕     高级管理人员  ...   48000  二级市场买卖  2018-07-12  2018-07-12\n22  600000  浦发银行   谢伟     高级管理人员  ...   53000  二级市场买卖  2018-07-11  2018-07-12\n23  600000  浦发银行  王新浩     高级管理人员  ...   60000  二级市场买卖  2018-07-11  2018-07-12\n24  600000  浦发银行  潘卫东     高级管理人员  ...   55000  二级市场买卖  2018-07-11  2018-07-12\n25  600000  浦发银行  刘以研     高级管理人员  ...   52500  二级市场买卖  2018-07-11  2018-07-12\n26  600000  浦发银行  刘信义     高级管理人员  ...   80000  二级市场买卖  2018-07-11  2018-07-12\n[27 rows x 13 columns]\n```\n\n##### 董监高及相关人员持股变动-深证\n\n接口: stock_share_hold_change_szse\n\n目标地址: http://www.szse.cn/disclosure/supervision/change/index.html\n\n描述: 深圳证券交易所-信息披露-监管信息公开-董监高人员股份变动\n\n限量: 单次获取指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                          |\n|--------|-----|---------------------------------------------|\n| symbol | str | symbol=\"001308\"; choice of {\"全部\", \"具体股票代码\"} |\n\n输出参数\n\n| 名称         | 类型      | 描述         |\n|------------|---------|------------|\n| 证券代码       | object  | -          |\n| 证券简称       | object  | -          |\n| 董监高姓名      | object  | -          |\n| 变动日期       | object  | -          |\n| 变动股份数量     | float64 | 注意单位: 万股   |\n| 成交均价       | float64 | -          |\n| 变动原因       | object  | -          |\n| 变动比例       | float64 | 注意单位: 千分之一 |\n| 当日结存股数     | float64 | 注意单位: 万股   |\n| 股份变动人姓名    | object  | -          |\n| 职务         | object  | -          |\n| 变动人与董监高的关系 | object  | -          |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_share_hold_change_szse_df = ak.stock_share_hold_change_szse(symbol=\"001308\")\nprint(stock_share_hold_change_szse_df)\n```\n\n数据示例\n\n```\n   证券代码  证券简称 董监高姓名 变动日期  ...    当日结存股数  股份变动人姓名     职务  变动人与董监高的关系\n0  001308  康冠科技    凌斌  2023-08-21  ...  18752.80       凌斌     董事          本人\n1  001308  康冠科技    凌斌  2023-08-18  ...  18743.80       凌斌     董事          本人\n2  001308  康冠科技    凌斌  2023-08-17  ...  18737.80       凌斌     董事          本人\n3  001308  康冠科技    凌斌  2023-08-16  ...  18734.80       凌斌     董事          本人\n4  001308  康冠科技    江微  2023-08-09  ...      1.00       江微     监事          本人\n5  001308  康冠科技    吴远  2023-08-08  ...      7.48       吴远     高管          本人\n6  001308  康冠科技   孙建华  2023-08-08  ...      3.88      孙建华  董秘、高管          本人\n7  001308  康冠科技    吴远  2022-08-24  ...      4.95       吴远     高管          本人\n8  001308  康冠科技    吴远  2022-06-17  ...      3.55       吴远     高管          本人\n[9 rows x 12 columns]\n```\n\n##### 董监高及相关人员持股变动-北证\n\n接口: stock_share_hold_change_bse\n\n目标地址: https://www.bse.cn/disclosure/djg_sharehold_change.html\n\n描述: 北京证券交易所-信息披露-监管信息-董监高及相关人员持股变动\n\n限量: 单次获取指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                          |\n|--------|-----|---------------------------------------------|\n| symbol | str | symbol=\"430489\"; choice of {\"全部\", \"具体股票代码\"} |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 代码     | object  | -        |\n| 简称     | object  | -        |\n| 姓名     | object  | -        |\n| 职务     | object  | -        |\n| 变动日期   | object  | -        |\n| 变动股数   | float64 | 注意单位: 万股 |\n| 变动前持股数 | float64 | 注意单位: 万股 |\n| 变动后持股数 | float64 | 注意单位: 万股 |\n| 变动均价   | float64 | 注意单位: 元  |\n| 变动原因   | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_share_hold_change_bse_df = ak.stock_share_hold_change_bse(symbol=\"430489\")\nprint(stock_share_hold_change_bse_df)\n```\n\n数据示例\n\n```\n   代码    简称   姓名     职务        变动日期   变动股数   变动前持股数   变动后持股数  变动均价  变动原因\n0  430489  佳先股份   李兑      董事  2023-07-28  7.151   0.0000   7.1510  4.66  竞价交易\n1  430489  佳先股份   李平  高级管理人员  2023-07-14  2.000  23.0565  25.0565  4.64  竞价交易\n2  430489  佳先股份  周星源  高级管理人员  2023-06-21  2.000  28.2896  30.2896  4.59  竞价交易\n3  430489  佳先股份   汪静  高级管理人员  2023-06-20  1.000  70.0360  71.0360  4.52  竞价交易\n4  430489  佳先股份   汪静  高级管理人员  2023-06-19  1.000  69.0360  70.0360  4.56  竞价交易\n5  430489  佳先股份   丁柱  高级管理人员  2023-06-16  0.500  53.2920  53.7920  4.50  竞价交易\n6  430489  佳先股份   丁柱  高级管理人员  2023-06-15  0.500  52.7920  53.2920  4.48  竞价交易\n7  430489  佳先股份   丁柱  高级管理人员  2023-06-14  1.000  51.7920  52.7920  4.48  竞价交易\n```\n\n##### 股东人数及持股集中度\n\n接口: stock_hold_num_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-专题统计-股东股本-股东人数及持股集中度\n\n限量: 单次指定 date 的股东人数及持股集中度数据, 从 20170331 开始\n\n输入参数\n\n| 名称   | 类型  | 描述                                                                                         |\n|------|-----|--------------------------------------------------------------------------------------------|\n| date | str | date=\"20210630\"; choice of {\"XXXX0331\", \"XXXX0630\", \"XXXX0930\", \"XXXX1231\"}; 从 20170331 开始 |\n\n输出参数\n\n| 名称       | 类型      | 描述       |\n|----------|---------|----------|\n| 证劵代码     | object  | -        |\n| 证券简称     | object  | -        |\n| 变动日期     | object  | -        |\n| 本期股东人数   | int64   | -        |\n| 上期股东人数   | float64 | -        |\n| 股东人数增幅   | float64 | 注意单位: %  |\n| 本期人均持股数量 | int64   | 注意单位: 万股 |\n| 上期人均持股数量 | float64 | 注意单位: %  |\n| 人均持股数量增幅 | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hold_num_cninfo_df = ak.stock_hold_num_cninfo(date=\"20210630\")\nprint(stock_hold_num_cninfo_df)\n```\n\n数据示例\n\n```\n      证券代码  证券简称   变动日期  本期股东人数  ... 股东人数增幅  本期人均持股数量  上期人均持股数量  人均持股数量增幅\n0     002054  德美化工  2021-06-30   17768  ...   -8.71   27134.0   24771.0      9.54\n1     002055  得润电子  2021-06-30   57449  ...   15.55    8242.0    9524.0    -13.46\n2     002056  横店东磁  2021-06-30   94339  ...    8.63   17243.0   18927.0     -8.90\n3     600048  保利发展  2021-06-30  264212  ...    5.63   45303.0   47855.0     -5.33\n4     002057  中钢天源  2021-06-30   44197  ...   -3.58   16883.0   12550.0     34.53\n...      ...   ...         ...     ...  ...     ...       ...       ...       ...\n4203  600918  中泰证券  2021-06-30  152424  ...   11.38   45719.0   50923.0    -10.22\n4204  601375  中原证券  2021-06-30  158626  ...    2.38   29269.0   29966.0     -2.33\n4205  601108  财通证券  2021-06-30  158061  ...   -5.50   22706.0   21458.0      5.82\n4206  002945  华林证券  2021-06-30   54407  ...  -11.32   49626.0   44008.0     12.77\n4207  601066  中信建投  2021-06-30  201162  ...    1.18   38559.0   39013.0     -1.16\n[4208 rows x 9 columns]\n```\n\n##### 股本变动\n\n接口: stock_hold_change_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-专题统计-股东股本-股本变动\n\n限量: 单次指定 symbol 的股本变动数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                               |\n|--------|-----|------------------------------------------------------------------|\n| symbol | str | symbol=\"全部\"; choice of {\"深市主板\", \"沪市\", \"创业板\", \"科创板\", \"北交所\", \"全部\"} |\n\n输出参数\n\n| 名称     | 类型      | 描述     |\n|--------|---------|--------|\n| 证券代码   | object  | -      |\n| 证券简称   | object  | -      |\n| 交易市场   | object  | -      |\n| 公告日期   | object  | -      |\n| 变动日期   | object  | -      |\n| 变动原因   | object  | -      |\n| 总股本    | float64 | 单位: 万股 |\n| 已流通股份  | float64 | 单位: 万股 |\n| 已流通比例  | float64 | 单位: %  |\n| 流通受限股份 | float64 | 单位: 万股 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hold_change_cninfo_df = ak.stock_hold_change_cninfo(symbol=\"全部\")\nprint(stock_hold_change_cninfo_df)\n```\n\n数据示例\n\n```\n      证券代码   证券简称   交易市场  ...   已流通股份  已流通比例  流通受限股份\n0     000001   平安银行  深交所主板  ...  1940561.75  100.00     30.07\n1     000002  万  科Ａ  深交所主板  ...  1192344.88   99.94    726.07\n2     000004   国华网安  深交所主板  ...    12628.81   95.40    609.22\n3     000006   深振业Ａ  深交所主板  ...   134998.74  100.00      0.77\n4     000007    全新好  深交所主板  ...    34644.80  100.00       NaN\n...      ...    ...    ...  ...         ...     ...       ...\n5463  920106   林泰新材    北交所  ...     1210.57   31.04   2689.43\n5464  920111   聚星科技    北交所  ...     3688.85   23.78  11826.60\n5465  920116   星图测控    北交所  ...     2612.50   23.75   8387.50\n5466  920118   太湖远大    北交所  ...     1379.50   27.10   3710.10\n5467  920128   胜业电气    北交所  ...     1710.00   21.06   6409.00\n[5468 rows x 10 columns]\n```\n\n##### 实际控制人持股变动\n\n接口: stock_hold_control_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-专题统计-股东股本-实际控制人持股变动\n\n限量: 单次指定 symbol 的实际控制人持股变动数据, 从 2010 开始\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                         |\n|--------|-----|----------------------------------------------------------------------------|\n| symbol | str | symbol=\"全部\"; choice of {\"单独控制\", \"实际控制人\", \"一致行动人\", \"家族控制\", \"全部\"}; 从 2010 开始 |\n\n输出参数\n\n| 名称      | 类型      | 描述       |\n|---------|---------|----------|\n| 证劵代码    | object  | -        |\n| 证券简称    | object  | -        |\n| 变动日期    | object  | -        |\n| 实际控制人名称 | object  | -        |\n| 控股数量    | float64 | 注意单位: 万股 |\n| 控股比例    | float64 | 注意单位: %  |\n| 直接控制人名称 | object  | -        |\n| 控制类型    | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hold_control_cninfo_df = ak.stock_hold_control_cninfo(symbol=\"全部\")\nprint(stock_hold_control_cninfo_df)\n```\n\n数据示例\n\n```\n        证券代码  证券简称  ...                                        直接控制人名称   控制类型\n0     601777  力帆股份  ...                 尹明善\\r;陈巧凤\\r;尹喜地\\r;尹索微\\r;重庆力帆控股有限公司  一致行动人\n1     002460  赣锋锂业  ...                           李良彬;黄闻;熊剑浪;李良学;罗顺香\\r;李华彪  一致行动人\n2     000966  长源电力  ...                                           中国国电集团公司   单独控制\n3     600019  宝钢股份  ...                                           宝钢集团有限公司   单独控制\n4     600031  三一重工  ...                                       三一集团有限公司;梁稳根   单独控制\n...      ...   ...  ...                                                ...    ...\n5391  600354  敦煌种业  ...                                     酒泉钢铁(集团)有限责任公司   单独控制\n5392  600208  新湖中宝  ...                          衢州工业投资集团有限公司;衢州工业发展集团有限公司   单独控制\n5393  600399  抚顺特钢  ...  江苏沙钢集团有限公司;沙钢集团的股东张家港市保税区润源不锈钢贸易有限公司;宁波梅山保税港区锦...  一致行动人\n5394  002075  沙钢股份  ...  江苏沙钢集团有限公司;宁波梅山保税港区锦程沙洲股权投资有限公司;张家港保税区润源不锈钢贸易有限公司   单独控制\n5395  301552  科力装备  ...                   张万武;郭艳芝;张子恒;天津科达企业管理咨询合伙企业(有限合伙)   家族控制\n[5396 rows x 8 columns]\n```\n\n##### 高管持股变动明细\n\n接口: stock_hold_management_detail_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-专题统计-股东股本-高管持股变动明细\n\n限量: 单次指定 symbol 的高管持股变动明细数据, 返回近一年的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                  |\n|--------|-----|-------------------------------------|\n| symbol | str | symbol=\"增持\"; choice of {\"增持\", \"减持\"} |\n\n输出参数\n\n| 名称        | 类型      | 描述       |\n|-----------|---------|----------|\n| 证劵代码      | object  | -        |\n| 证券简称      | object  | -        |\n| 截止日期      | object  | -        |\n| 公告日期      | object  | -        |\n| 高管姓名      | object  | -        |\n| 董监高姓名     | object  | -        |\n| 董监高职务     | object  | -        |\n| 变动人与董监高关系 | object  | -        |\n| 期初持股数量    | float64 | 注意单位: 万股 |\n| 期末持股数量    | float64 | 注意单位: 万股 |\n| 变动数量      | float64 | -        |\n| 变动比例      | int64   | 注意单位: %  |\n| 成交均价      | float64 | 注意单位: 元  |\n| 期末市值      | float64 | 注意单位: 万元 |\n| 持股变动原因    | object  | -        |\n| 数据来源      | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hold_management_detail_cninfo_df = ak.stock_hold_management_detail_cninfo(symbol=\"增持\")\nprint(stock_hold_management_detail_cninfo_df)\n```\n\n数据示例\n\n```\n        证券代码  证券简称  截止日期    公告日期 高管姓名  ... 变动比例 成交均价 期末市值  持股变动原因  数据来源\n0      000010  美丽生态  2023-12-31  2024-04-27   张琳  ...  NaN  NaN  NaN    None  定期报告\n1      000010  美丽生态  2023-12-31  2024-04-27   张龙  ...  NaN  NaN  NaN    None  定期报告\n2      000010  美丽生态  2023-12-31  2024-04-27  周成斌  ...  NaN  NaN  NaN    None  定期报告\n3      000010  美丽生态  2023-12-31  2024-04-27  林孔凤  ...  NaN  NaN  NaN    None  定期报告\n4      000010  美丽生态  2023-12-31  2024-04-27  江成汉  ...  NaN  NaN  NaN    None  定期报告\n...       ...   ...         ...         ...  ...  ...  ...  ...  ...     ...   ...\n15229  900946  天雁B股  2023-12-31  2024-04-20  何光清  ...  NaN  NaN  NaN    None  定期报告\n15230  900946  天雁B股  2023-12-31  2024-04-20  刘青娥  ...  NaN  NaN  NaN    None  定期报告\n15231  900946  天雁B股  2023-12-31  2024-04-20  杨国旗  ...  NaN  NaN  NaN    None  定期报告\n15232  900946  天雁B股  2023-12-31  2024-04-20  杨宝全  ...  NaN  NaN  NaN    None  定期报告\n15233  900946  天雁B股  2023-12-31  2024-04-20  胡辽平  ...  NaN  NaN  NaN    None  定期报告\n[15234 rows x 16 columns]\n```\n\n##### 董监高及相关人员持股变动明细\n\n接口: stock_hold_management_detail_em\n\n目标地址: https://data.eastmoney.com/executive/list.html\n\n描述: 东方财富网-数据中心-特色数据-高管持股-董监高及相关人员持股变动明细\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称         | 类型      | 描述 |\n|------------|---------|----|\n| 日期         | object  | -  |\n| 代码         | object  | -  |\n| 名称         | object  | -  |\n| 变动人        | object  | -  |\n| 变动股数       | int64   | -  |\n| 成交均价       | int64   | -  |\n| 变动金额       | float64 | -  |\n| 变动原因       | object  | -  |\n| 变动比例       | float64 | -  |\n| 变动后持股数     | float64 | -  |\n| 持股种类       | object  | -  |\n| 董监高人员姓名    | object  | -  |\n| 职务         | object  | -  |\n| 变动人与董监高的关系 | object  | -  |\n| 开始时持有      | float64 | -  |\n| 结束后持有      | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hold_management_detail_em_df = ak.stock_hold_management_detail_em()\nprint(stock_hold_management_detail_em_df)\n```\n\n数据示例\n\n```\n        日期      代码    名称  ... 变动人与董监高的关系    开始时持有  结束后持有\n0       2023-08-08  001308  康冠科技  ...         本人  64350.0     74350.0\n1       2023-08-08  001308  康冠科技  ...         本人      0.0     38800.0\n2       2023-08-07  002533  金杯电工  ...         本人      NaN  45718400.0\n3       2023-08-07  300389   艾比森  ...         本人      NaN     50600.0\n4       2023-08-07  300827  上能电气  ...         本人      NaN  31879000.0\n            ...     ...   ...  ...        ...      ...         ...\n141380  2006-05-26  600500  中化国际  ...         本人      0.0      9000.0\n141381  2006-03-02  000045  深纺织A  ...         本人      0.0      7050.0\n141382  2006-02-17  002039  黔源电力  ...         本人      0.0     10000.0\n141383  2005-09-22  000999  华润三九  ...         本人      0.0      2000.0\n141384  2004-11-29  000030  富奥股份  ...         本人      0.0      6000.0\n[141385 rows x 16 columns]\n```\n\n##### 人员增减持股变动明细\n\n接口: stock_hold_management_person_em\n\n目标地址: https://data.eastmoney.com/executive/personinfo.html?name=%E5%90%B4%E8%BF%9C&code=001308\n\n描述: 东方财富网-数据中心-特色数据-高管持股-人员增减持股变动明细\n\n限量: 单次返回指定 symbol 和 name 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"001308\"; 股票代码 |\n| name   | str | name=\"吴远\"; 高管名称       |\n\n输出参数\n\n| 名称         | 类型      | 描述 |\n|------------|---------|----|\n| 日期         | object  | -  |\n| 代码         | object  | -  |\n| 名称         | object  | -  |\n| 变动人        | object  | -  |\n| 变动股数       | int64   | -  |\n| 成交均价       | int64   | -  |\n| 变动金额       | float64 | -  |\n| 变动原因       | object  | -  |\n| 变动比例       | float64 | -  |\n| 变动后持股数     | float64 | -  |\n| 持股种类       | object  | -  |\n| 董监高人员姓名    | object  | -  |\n| 职务         | object  | -  |\n| 变动人与董监高的关系 | object  | -  |\n| 开始时持有      | float64 | -  |\n| 结束后持有      | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hold_management_person_em_df = ak.stock_hold_management_person_em(symbol=\"001308\", name=\"孙建华\")\nprint(stock_hold_management_person_em_df)\n```\n\n数据示例\n\n```\n   日期      代码    名称 变动人   变动股数  ...  董监高人员姓名    职务 变动人与董监高的关系    开始时持有  结束后持有\n0  2023-08-08  001308  康冠科技  吴远  10000  ...       吴远  财务总监         本人  64350.0  74350\n1  2022-08-24  001308  康冠科技  吴远  14000  ...       吴远    高管         本人      NaN  49500\n2  2022-06-17  001308  康冠科技  吴远  35500  ...       吴远  财务总监         本人      0.0  35500\n[3 rows x 16 columns]\n```\n\n##### 对外担保\n\n接口: stock_cg_guarantee_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-专题统计-公司治理-对外担保\n\n限量: 单次指定 symbol 和起始日期的对外担保数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                        |\n|------------|-----|-----------------------------------------------------------|\n| symbol     | str | symbol=\"全部\"; choice of {\"全部\", \"深市主板\", \"沪市\", \"创业板\", \"科创板\"} |\n| start_date | str | start_date=\"20180630\"                                     |\n| end_date   | str | end_date=\"20210927\"                                       |\n\n输出参数\n\n| 名称          | 类型      | 描述       |\n|-------------|---------|----------|\n| 证劵代码        | object  | -        |\n| 证券简称        | object  | -        |\n| 公告统计区间      | object  | -        |\n| 担保笔数        | int64   | -        |\n| 担保金额        | float64 | 注意单位: 万元 |\n| 归属于母公司所有者权益 | float64 | 注意单位: 万元 |\n| 担保金融占净资产比例  | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_corporate_governance_guarantee_df = ak.stock_cg_guarantee_cninfo(symbol=\"全部\", start_date=\"20180630\", end_date=\"20210927\")\nprint(stock_corporate_governance_guarantee_df)\n```\n\n数据示例\n\n```\n      证券代码  证券简称  ... 归属于母公司所有者权益  担保金融占净资产比例\n0     000683  远兴能源  ...  1416683.55       93.19\n1     000698  沈阳化工  ...   152836.81     1413.11\n2     000732  ST泰禾  ...   387149.45    11353.60\n3     000751  锌业股份  ...   358173.79       64.21\n4     000818  航锦科技  ...   368945.73       30.90\n...      ...   ...  ...         ...         ...\n3075  688025   杰普特  ...   196706.09        5.08\n3076  300822  贝仕达克  ...   126328.08        3.96\n3077  300907  康平科技  ...    78724.85       10.16\n3078  688296  和达科技  ...    70535.91        1.42\n3079  300632  光莆股份  ...   189380.21       24.29\n[3080 rows x 7 columns]\n```\n\n##### 公司诉讼\n\n接口: stock_cg_lawsuit_cninfo\n\n目标地址: http://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-专题统计-公司治理-公司诉讼\n\n限量: 单次指定 symbol 和起始日期的公司诉讼数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                        |\n|------------|-----|-----------------------------------------------------------|\n| symbol     | str | symbol=\"全部\"; choice of {\"全部\", \"深市主板\", \"沪市\", \"创业板\", \"科创板\"} |\n| start_date | str | start_date=\"20180630\"                                     |\n| end_date   | str | end_date=\"20210927\"                                       |\n\n输出参数\n\n| 名称     | 类型      | 描述       |\n|--------|---------|----------|\n| 证劵代码   | object  | -        |\n| 证券简称   | object  | -        |\n| 公告统计区间 | object  | -        |\n| 诉讼次数   | int64   | -        |\n| 诉讼金额   | float64 | 注意单位: 万元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_cg_lawsuit_cninfo_df = ak.stock_cg_lawsuit_cninfo(symbol=\"全部\", start_date=\"20180630\", end_date=\"20210927\")\nprint(stock_cg_lawsuit_cninfo_df)\n```\n\n数据示例\n\n```\n        证券代码  证券简称                   公告统计区间  诉讼次数      诉讼金额\n0     002524  光正眼科  2018-09-28---2021-09-27     1       NaN\n1     603507  振江股份  2018-09-28---2021-09-27     1       NaN\n2     600410  华胜天成  2018-09-28---2021-09-27     2       NaN\n3     601333  广深铁路  2018-09-28---2021-09-27     1       NaN\n4     301013   利和兴  2018-09-28---2021-09-27     1       NaN\n      ...   ...                      ...   ...       ...\n1020  600310  桂东电力  2018-09-28---2021-09-27     2   5360.63\n1021  600815  厦工股份  2018-09-28---2021-09-27    75  75569.33\n1022  600830  香溢融通  2018-09-28---2021-09-27     6  17109.27\n1023  603986  兆易创新  2018-09-28---2021-09-27     6  29200.00\n1024  002673  西部证券  2018-09-28---2021-09-27     4  75380.45\n```\n\n##### 股权质押\n\n接口: stock_cg_equity_mortgage_cninfo\n\n目标地址: https://webapi.cninfo.com.cn/#/thematicStatistics\n\n描述: 巨潮资讯-数据中心-专题统计-公司治理-股权质押\n\n限量: 单次指定 date 的股权质押数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date=\"20210930\" |\n\n输出参数\n\n| 名称         | 类型      | 描述       |\n|------------|---------|----------|\n| 股票代码       | object  | -        |\n| 股票简称       | object  | -        |\n| 公告日期       | object  | -        |\n| 出质人        | object  | -        |\n| 质权人        | object  | -        |\n| 质押数量       | float64 | 注意单位: 万股 |\n| 占总股本比例     | float64 | 注意单位: %  |\n| 质押解除数量     | float64 | 注意单位: 万股 |\n| 质押事项       | object  | 注意单位: 万元 |\n| 累计质押占总股本比例 | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_cg_equity_mortgage_cninfo_df = ak.stock_cg_equity_mortgage_cninfo(date=\"20210930\")\nprint(stock_cg_equity_mortgage_cninfo_df)\n```\n\n数据示例\n\n```\n      股票代码   股票简称  ...                                               质押事项  \\\n0   000892   欢瑞世纪  ...  本公司持股5%以上股东欢瑞世纪(天津)资产管理合伙企业(有限合伙)将2020年04月20日质...\n1   000892   欢瑞世纪  ...  本公司持股5%以上股东赵枳程将持有的本公司4743836股流通A股质押给方正证券股份有限公司...\n2   000948   南天信息  ...  本公司控股股东云南省工业投资控股集团有限责任公司将2020年09月18日质押给云南国际信托有...\n3   002074   国轩高科  ...  本公司控股股东南京国轩控股集团有限公司将持有的本公司20620000股质押给海通证券股份有限...\n4   002074   国轩高科  ...  本公司实际控制人李缜将2019年09月25日质押给华安证券股份有限公司的11270000股解...\n5   002074   国轩高科  ...  本公司实际控制人李缜将2019年09月27日质押给华安证券股份有限公司的11100000股解...\n6   002138   顺络电子  ...  本公司股东新余市恒顺通电子科技开发有限公司将持有的本公司3635000股流通A股质押给广发证...\n7   002375   亚厦股份  ...  本公司控股股东亚厦控股有限公司将持有的本公司68000000股流通A股质押给杭州银行股份有限...\n8   002375   亚厦股份  ...  本公司控股股东亚厦控股有限公司将持有的本公司97000000股流通A股质押给绍兴银行股份有限...\n9   002466   天齐锂业  ...  本公司控股股东成都天齐实业(集团)有限公司将持有的本公司12000000股流通A股质押给中国...\n10  002466   天齐锂业  ...  本公司控股股东成都天齐实业(集团)有限公司将持有的本公司4600000股流通A股质押给交通银...\n11  002475   立讯精密  ...  本公司控股股东香港立讯有限公司将持有的本公司72620000股流通A股质押给招商银行股份有限...\n12  002584   西陇科学  ...  本公司实际控制人黄伟波将持有的本公司8470000股流通受限股份质押给华鑫证券有限责任公司用...\n13  002584   西陇科学  ...  本公司实际控制人黄伟波将持有的本公司9480000股流通受限股份质押给华鑫证券有限责任公司用...\n14  002584   西陇科学  ...  本公司实际控制人黄伟鹏将2017年08月10日质押给华鑫证券有限责任公司的4480000股解...\n15  002584   西陇科学  ...  本公司实际控制人黄伟鹏将持有的本公司5260000股流通受限股份质押给华鑫证券有限责任公司用...\n16  002584   西陇科学  ...  本公司实际控制人黄伟鹏将持有的本公司7680000股流通受限股份质押给华鑫证券有限责任公司用...\n17  002584   西陇科学  ...  本公司实际控制人黄伟鹏将持有的本公司9970000股流通受限股份质押给华鑫证券有限责任公司用...\n18  002584   西陇科学  ...  本公司实际控制人黄伟鹏将持有的本公司5260000股流通受限股份质押给华鑫证券有限责任公司用...\n19  002584   西陇科学  ...  本公司实际控制人黄少群将持有的本公司6290000股流通A股质押给华鑫证券有限责任公司用于办...\n20  002584   西陇科学  ...  本公司实际控制人黄少群将持有的本公司7360000股流通受限股份质押给华鑫证券有限责任公司用...\n21  002584   西陇科学  ...  本公司实际控制人黄少群将持有的本公司8200000股流通受限股份质押给华鑫证券有限责任公司用...\n22  002584   西陇科学  ...  本公司实际控制人黄少群将持有的本公司9700000股流通受限股份质押给华鑫证券有限责任公司用...\n23  002584   西陇科学  ...  本公司实际控制人黄少群将持有的本公司6290000股流通A股质押给华鑫证券有限责任公司用于办...\n24  002602   世纪华通  ...  本公司大股东王佶将2018年02月12日质押给大连银行股份有限公司上海分行的25000000...\n25  002602   世纪华通  ...  本公司大股东王佶将2018年02月12日质押给大连银行股份有限公司上海分行的26000000...\n26  002602   世纪华通  ...  本公司大股东王佶将持有的本公司26000000股流通A股质押给泰安复星招银壹号股权投资基金合...\n27  002602   世纪华通  ...  本公司大股东王佶将持有的本公司5000000股流通A股质押给泰安复星招银壹号股权投资基金合伙...\n28  002677   浙江美大  ...  本公司股东夏鼎将2020年12月28日质押给上海海通证券资产管理有限公司用于办理质押式回购业...\n29  002677   浙江美大  ...  本公司股东夏鼎将2021年05月18日质押给上海海通证券资产管理有限公司用于办理质押式回购业...\n30  002677   浙江美大  ...  本公司股东夏鼎将2021年08月25日质押给上海海通证券资产管理有限公司用于办理质押式回购业...\n31  002853    皮阿诺  ...  本公司控股股东、实际控制人马礼斌将持有的本公司1000000股流通A股质押给中信证券股份有限...\n32  002922    伊戈尔  ...  本公司控股股东佛山市麦格斯投资有限公司将持有的本公司5000000股流通A股质押给国金证券股...\n33  300175   朗源股份  ...  本公司控股股东新疆尚龙股权投资管理有限公司将持有的本公司17000000股流通A股质押给邳州...\n34  300275    梅安森  ...  本公司控股股东马焰将持有的本公司2000000股流通受限股份质押给交通银行股份有限公司重庆市...\n35  600093  *ST易见  ...  本公司股东云南省滇中产业发展集团有限责任公司将质押给中国工商银行股份有限公司昆明正义支行的8...\n36  600093  *ST易见  ...  本公司股东云南省滇中产业发展集团有限责任公司将持有的本公司86380000股流通A股质押给中...\n37  600176   中国巨石  ...  本公司股东振石控股集团有限公司将持有的本公司126680000股流通A股质押给中国民生银行股...\n38  600176   中国巨石  ...  本公司股东振石控股集团有限公司将质押的211672605股解除质押，解除日期为2021年09...\n39  600246   万通发展  ...  本公司第二大股东万通投资控股股份有限公司将2021年07月12日质押给江苏银行股份有限公司北...\n40  600516   方大炭素  ...  本公司控股股东辽宁方大集团实业有限公司将持有的本公司56000000股流通A股质押给平安银行...\n41  600516   方大炭素  ...  本公司控股股东辽宁方大集团实业有限公司将质押给平安银行股份有限公司沈阳分行的70700000...\n42  600572    康恩贝  ...  本公司持股5%以上股东胡季强将持有的本公司27000000股流通A股质押给中信证券股份有限公...\n43  600572    康恩贝  ...  本公司持股5%以上股东胡季强将质押给中信证券股份有限公司用于办理质押式回购业务的210000...\n44  600739   辽宁成大  ...  本公司控股股东辽宁省国有资产经营有限公司将持有的本公司5500000股流通A股质押给华夏银行...\n45  600745   闻泰科技  ...  本公司股东张丹琳将持有的本公司171095股流通A股质押给云南国际信托有限公司，质押开始日期...\n46  600745   闻泰科技  ...  本公司股东张秋红将持有的本公司305364股流通A股质押给云南国际信托有限公司，质押开始日期...\n47  600866   星湖科技  ...  本公司股东深圳长城汇理资产服务企业(有限合伙)将质押给东方证券股份有限公司的13080000...\n48  600903   贵州燃气  ...  本公司控股股东北京东嘉投资有限公司将质押给华能贵诚信托有限公司的91507780股解除质押，...\n49  600998    九州通  ...  本公司股东上海弘康实业投资有限公司将持有的本公司15600000股流通A股质押给汉口银行股份...\n50  601012   隆基股份  ...  本公司控股股东李振国将质押给国信证券股份有限公司的28000000股流通A股解除质押，解除日...\n51  603501   韦尔股份  ...  本公司控股股东虞仁荣将持有的本公司590000股流通A股质押给平安证券股份有限公司，质押开始...\n52  603619   中曼石油  ...     本公司实际控制人李玉池将质押的16038460股解除质押，解除日期为2021年09月28日。\n53  603638   艾迪精密  ...  本公司控股股东烟台翔宇投资有限公司将持有的本公司6000000股流通A股质押给云南国际信托有...\n54  603661   恒林股份  ...  本公司持股5%以上股东安吉恒林商贸有限公司将持有的本公司1500000股流通A股质押给浙商证...\n```\n\n#### 美港目标价\n\n接口: stock_price_js\n\n目标地址: https://www.ushknews.com/report.html\n\n描述: 美港电讯-美港目标价数据\n\n限量: 单次获取所有数据, 数据从 2019-至今; 该接口暂时不能使用\n\n输入参数\n\n| 名称     | 类型  | 描述                                  |\n|--------|-----|-------------------------------------|\n| symbol | str | symbol=\"us\"; choice of {\"us\", \"hk\"} |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| 日期    | object  | -   |\n| 个股名称  | object  | -   |\n| 评级    | object  | -   |\n| 先前目标价 | float64 | -   |\n| 最新目标价 | float64 | -   |\n| 机构名称  | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_price_js_df = ak.stock_price_js(symbol=\"us\")\nprint(stock_price_js_df)\n```\n\n数据示例\n\n```\n               日期                    个股名称     评级  先前目标价  最新目标价       机构名称\n0      2022-02-12  Teladoc Health(TDOC.N)     买入    NaN  121.0         高盛\n1      2022-02-12       Cloudflare(NET.N)   None  132.0  150.0    KeyBanc\n2      2022-02-12             Zillow(Z.O)   None   74.0   76.0      摩根士丹利\n3      2022-02-11             Zillow(Z.O)   None  105.0  115.0  Benchmark\n4      2022-02-11       Cloudflare(NET.N)     中性  210.0  130.0         贝雅\n...           ...                     ...    ...    ...    ...        ...\n46039  2019-01-02             美国银行(BAC.N)  与大市持平   37.0   34.0        巴克莱\n46040  2019-01-02             亚马逊(AMZN.O)     买入    NaN    NaN    加拿大皇家银行\n46041  2019-01-02              苹果(AAPL.O)   跑赢大市  266.0  228.0       摩根大通\n46042  2019-01-02              苹果(AAPL.O)   跑赢大市    NaN  220.0    加拿大皇家银行\n46043  2019-01-01               强生(JNJ.N)     中性  139.0  148.0         花旗\n```\n\n#### 券商业绩月报\n\n接口: stock_qsjy_em\n\n目标地址: http://data.eastmoney.com/other/qsjy.html\n\n描述: 东方财富网-数据中心-特色数据-券商业绩月报\n\n限量: 单次获取所有数据, 数据从 201006-202007, 月频率\n\n输入参数\n\n| 名称   | 类型  | 描述                                |\n|------|-----|-----------------------------------|\n| date | str | date=\"20200430\"; 输入需要查询月份的最后一天的日期 |\n\n输出参数\n\n| 名称              | 类型      | 描述       |\n|-----------------|---------|----------|\n| 简称              | object  | -        |\n| 代码              | object  | -        |\n| 当月净利润-净利润       | float64 | 注意单位: 万元 |\n| 当月净利润-同比增长      | float64 | -        |\n| 当月净利润-环比增长      | float64 | -        |\n| 当年累计净利润-累计净利润   | float64 | 注意单位: 万元 |\n| 当年累计净利润-同比增长    | float64 | -        |\n| 当月营业收入-营业收入     | float64 | 注意单位: 万元 |\n| 当月营业收入-环比增长     | float64 | -        |\n| 当月营业收入-同比增长     | float64 | -        |\n| 当年累计营业收入-累计营业收入 | float64 | 注意单位: 万元 |\n| 当年累计营业收入-同比增长   | float64 | -        |\n| 净资产-净资产         | float64 | 注意单位: 万元 |\n| 净资产-同比增长        | float64 | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_qsjy_em_df = ak.stock_qsjy_em(date=\"20200430\")\nprint(stock_qsjy_em_df)\n```\n\n数据示例\n\n```\n      简称      代码      当月净利润-净利润  ...  当年累计营业收入-同比增长       净资产-净资产   净资产-同比增长\n0   国海证券  000750   19194.615013  ...      54.032161  1.776790e+06  33.096526\n1   国金证券  600109   20891.770000  ...      50.235759  2.097736e+06   6.747984\n2   光大证券  601788   60001.753808  ...       1.940449  5.191309e+06   2.343186\n3   方正证券  601901   12395.300000  ...      15.571724  4.278250e+06  -8.135272\n4   兴业证券  601377   32467.150000  ...     -14.595211  3.430436e+06   5.441332\n5   国信证券  002736   56775.290000  ...      32.460693  5.529023e+06   2.995151\n6   华泰证券  601688   78019.450000  ...       5.858672  1.234187e+07  14.817958\n7   天风证券  601162    7704.010000  ...      13.050550  1.687778e+06  50.755090\n8   华西证券  002926   24595.360000  ...       1.709712  2.002422e+06   6.198522\n9   西南证券  600369   10153.900000  ...     -32.599011  1.976813e+06   5.182443\n10  长城证券  002939   12596.910000  ...      14.546146  1.725532e+06   3.114500\n11  东吴证券  601555   15202.270000  ...       8.220710  2.664589e+06  30.763186\n12  东兴证券  601198   23724.000000  ...       1.505702  2.069308e+06   4.788353\n13  浙商证券  601878   10729.640000  ...      71.999008  1.508543e+06   4.119564\n14  申万宏源  000166  156658.000000  ...      29.308936  7.945952e+06  10.579253\n15  华林证券  002945    3286.100000  ...      43.888841  5.492524e+05   8.617837\n16  国泰君安  601211   79724.170000  ...      -9.160164  1.364813e+07   1.784078\n17  东北证券  000686   19464.850000  ...       3.469984  1.618389e+06   4.375444\n18  华安证券  600909   11005.490000  ...       7.830548  1.371776e+06   9.652564\n19  中原证券  601375    8586.950000  ...      15.216216  1.004165e+06   2.114908\n20  长江证券  000783   28988.140000  ...            NaN  3.115692e+06  10.237273\n21  东方证券  600958   59493.090000  ...      36.465438  5.598729e+06   4.538278\n22  红塔证券  601236   21168.110000  ...            NaN  1.352354e+06        NaN\n23   太平洋  601099    1074.460000  ...     -35.504783  1.046198e+06   3.302652\n24  中信证券  600030  162426.000000  ...      52.561662  1.683170e+07  23.936907\n25  山西证券  002500   11175.370000  ...      35.841437  1.411993e+06   4.424647\n26  中银证券  601696   10172.510000  ...            NaN  1.415213e+06        NaN\n27  第一创业  002797   10003.990000  ...      32.569921  9.662962e+05   5.396208\n28  招商证券  600999   82020.637477  ...      24.449430  8.590377e+06   6.038244\n29  中信建投  601066  103886.720000  ...      61.480355  5.799100e+06  20.862475\n30  国元证券  000728    4848.630000  ...      27.615097  2.366435e+06  -1.110733\n31  华鑫股份  600621    4442.740000  ...      58.946622  6.125237e+05  14.145368\n32  中国银河  601881   83429.360000  ...      30.440181  7.297874e+06   7.543491\n33  西部证券  002673   19674.240000  ...     -10.968199  1.828071e+06   1.750810\n34  广发证券  000776   68079.485932  ...      -4.933729  8.878713e+06   6.098383\n35  财通证券  601108   17561.630000  ...      -8.775579  2.116647e+06   6.241030\n36  南京证券  601990    9131.740000  ...      19.802440  1.139362e+06   5.430794\n37  海通证券  600837   96773.380000  ...       3.011836  1.203286e+07   3.822430\n```\n\n#### A 股股息率\n\n接口: stock_a_gxl_lg\n\n目标地址: https://legulegu.com/stockdata/guxilv\n\n描述: 乐咕乐股-股息率-A 股股息率\n\n限量: 单次获取指定 symbol 的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                      |\n|--------|-----|---------------------------------------------------------|\n| symbol | str | symbol=\"上证A股\"; choice of {\"上证A股\", \"深证A股\", \"创业板\", \"科创板\"} |\n\n输出参数\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 日期  | object  | -   |\n| 股息率 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_a_gxl_lg_df = ak.stock_a_gxl_lg(symbol=\"上证A股\")\nprint(stock_a_gxl_lg_df)\n```\n\n数据示例\n\n```\n           日期   股息率\n0     2005-01-04  2.03\n1     2005-01-05  2.05\n2     2005-01-06  2.07\n3     2005-01-07  2.06\n4     2005-01-10  2.05\n          ...   ...\n4685  2024-04-18  3.44\n4686  2024-04-19  3.44\n4687  2024-04-22  3.48\n4688  2024-04-23  3.52\n4689  2024-04-24  3.50\n[4690 rows x 2 columns]\n```\n\n#### 恒生指数股息率\n\n接口: stock_hk_gxl_lg\n\n目标地址: https://legulegu.com/stockdata/market/hk/dv/hsi\n\n描述: 乐咕乐股-股息率-恒生指数股息率\n\n限量: 单次获取所有月度历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 日期  | object  | -   |\n| 股息率 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_gxl_lg_df = ak.stock_hk_gxl_lg()\nprint(stock_hk_gxl_lg_df)\n```\n\n数据示例\n\n```\n          日期   股息率\n0    1973-05-31  0.00\n1    1973-06-30  0.00\n2    1973-07-31  0.00\n3    1973-08-31  0.00\n4    1973-09-30  0.00\n..          ...   ...\n606  2023-11-30  4.10\n607  2023-12-31  3.97\n608  2024-01-31  4.37\n609  2024-02-28  4.45\n610  2024-03-31  4.34\n[611 rows x 2 columns]\n```\n\n#### 大盘拥挤度\n\n接口: stock_a_congestion_lg\n\n目标地址: https://legulegu.com/stockdata/ashares-congestion\n\n描述: 乐咕乐股-大盘拥挤度\n\n限量: 单次获取近 4 年的历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称         | 类型      | 描述  |\n|------------|---------|-----|\n| date       | object  | 日期  |\n| close      | float64 | 收盘价 |\n| congestion | float64 | 拥挤度 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_a_congestion_lg_df = ak.stock_a_congestion_lg()\nprint(stock_a_congestion_lg_df)\n```\n\n数据示例\n\n```\n           date    close  congestion\n0    2020-04-27  2815.49      0.3783\n1    2020-04-28  2810.02      0.3797\n2    2020-04-29  2822.44      0.3876\n3    2020-04-30  2860.08      0.4009\n4    2020-05-06  2878.14      0.4080\n..          ...      ...         ...\n962  2024-04-18  3074.22      0.3848\n963  2024-04-19  3065.26      0.3896\n964  2024-04-22  3044.60      0.3834\n965  2024-04-23  3021.98      0.3808\n966  2024-04-24  3044.82      0.3786\n[967 rows x 3 columns]\n```\n\n#### 股债利差\n\n接口: stock_ebs_lg\n\n目标地址: https://legulegu.com/stockdata/equity-bond-spread\n\n描述: 乐咕乐股-股债利差\n\n限量: 单次所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述  |\n|---------|---------|-----|\n| 日期      | object  | -   |\n| 沪深300指数 | float64 | -   |\n| 股债利差    | float64 | -   |\n| 股债利差均线  | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_ebs_lg_df = ak.stock_ebs_lg()\nprint(stock_ebs_lg_df)\n```\n\n数据示例\n\n```\n            日期  沪深300指数   股债利差 股债利差均线\n0     2005-04-08  1003.45  0.022656  0.022656\n1     2005-04-11   995.42  0.021938  0.022297\n2     2005-04-12   978.70  0.024697  0.023097\n3     2005-04-13  1000.90  0.022538  0.022957\n4     2005-04-14   986.98  0.022811  0.022928\n          ...      ...       ...       ...\n4619  2024-04-18  3569.80  0.064876  0.061882\n4620  2024-04-19  3541.66  0.064949  0.061909\n4621  2024-04-22  3530.90  0.065748  0.061983\n4622  2024-04-23  3506.22  0.066550  0.062014\n4623  2024-04-24  3521.62  0.065847  0.062020\n[4624 rows x 4 columns]\n```\n\n#### 巴菲特指标\n\n接口: stock_buffett_index_lg\n\n目标地址: https://legulegu.com/stockdata/marketcap-gdp\n\n描述: 乐估乐股-底部研究-巴菲特指标\n\n限量: 单次获取所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述                             |\n|--------|---------|--------------------------------|\n| 日期     | object  | 交易日                            |\n| 收盘价    | float64 | -                              |\n| 总市值    | float64 | A股收盘价*已发行股票总股本（A股+B股+H股）       |\n| GDP    | float64 | 上年度国内生产总值（例如：2019年，则取2018年GDP） |\n| 近十年分位数 | float64 | 当前\"总市值/GDP\"在历史数据上的分位数          |\n| 总历史分位数 | float64 | 当前\"总市值/GDP\"在历史数据上的分位数          |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_buffett_index_lg_df = ak.stock_buffett_index_lg()\nprint(stock_buffett_index_lg_df)\n```\n\n数据示例\n\n```\n            日期   收盘价       总市值      GDP   近十年分位数  总历史分位数\n0     2005-04-07  1003.45   38470.47   161840.16  1.00000  1.00000\n1     2005-04-10   995.42   39184.81   161840.16  1.00000  1.00000\n2     2005-04-11   978.70   38955.09   161840.16  0.66667  0.66667\n3     2005-04-12  1000.90   38287.33   161840.16  0.25000  0.25000\n4     2005-04-13   986.98   39166.32   161840.16  0.80000  0.80000\n...          ...      ...        ...         ...      ...      ...\n4646  2024-05-26  3635.71  894146.43  1260582.10  0.34239  0.47837\n4647  2024-05-27  3609.17  888429.78  1260582.10  0.32593  0.46601\n4648  2024-05-28  3613.52  889703.17  1260582.10  0.32840  0.46870\n4649  2024-05-29  3594.31  884208.63  1260582.10  0.31235  0.45699\n4650  2024-05-30  3579.92  884322.56  1260582.10  0.31304  0.45732\n[4651 rows x 6 columns]\n```\n\n#### A 股等权重与中位数市盈率\n\n接口: stock_a_ttm_lyr\n\n目标地址: https://www.legulegu.com/stockdata/a-ttm-lyr\n\n描述: 乐咕乐股-A 股等权重市盈率与中位数市盈率\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称                                  | 类型      | 描述                               |\n|-------------------------------------|---------|----------------------------------|\n| date                                | object  | 日期                               |\n| middlePETTM                         | float64 | 全A股滚动市盈率(TTM)中位数                 |\n| averagePETTM                        | float64 | 全A股滚动市盈率(TTM)等权平均                |\n| middlePELYR                         | float64 | 全A股静态市盈率(LYR)中位数                 |\n| averagePELYR                        | float64 | 全A股静态市盈率(LYR)等权平均                |\n| quantileInAllHistoryMiddlePeTtm     | float64 | 当前\"TTM(滚动市盈率)中位数\"在历史数据上的分位数      |\n| quantileInRecent10YearsMiddlePeTtm  | float64 | 当前\"TTM(滚动市盈率)中位数\"在最近10年数据上的分位数   |\n| quantileInAllHistoryAveragePeTtm    | float64 | 当前\"TTM(滚动市盈率)等权平均\"在历史数据上的分位数     |\n| quantileInRecent10YearsAveragePeTtm | float64 | 当前\"TTM(滚动市盈率)等权平均\"在在最近10年数据上的分位数 |\n| quantileInAllHistoryMiddlePeLyr     | float64 | 当前\"LYR(静态市盈率)中位数\"在历史数据上的分位数      |\n| quantileInRecent10YearsMiddlePeLyr  | float64 | 当前\"LYR(静态市盈率)中位数\"在最近10年数据上的分位数   |\n| quantileInAllHistoryAveragePeLyr    | float64 | 当前\"LYR(静态市盈率)等权平均\"在历史数据上的分位数     |\n| quantileInRecent10YearsAveragePeLyr | float64 | 当前\"LYR(静态市盈率)等权平均\"在最近10年数据上的分位数  |\n| close                               | float64 | 沪深300指数                          |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_a_ttm_lyr_df = ak.stock_a_ttm_lyr()\nprint(stock_a_ttm_lyr_df)\n```\n\n数据示例\n\n```\n            date  middlePETTM  ...  quantileInRecent10YearsAveragePeLyr    close\n0     2005-01-05        28.79  ...                              1.00000     0.00\n1     2005-01-06        29.18  ...                              1.00000     0.00\n2     2005-01-07        28.73  ...                              0.66667     0.00\n3     2005-01-10        28.84  ...                              0.50000     0.00\n4     2005-01-11        29.09  ...                              1.00000     0.00\n...          ...          ...  ...                                  ...      ...\n4795  2024-10-13        29.58  ...                              0.15534  3887.17\n4796  2024-10-14        30.34  ...                              0.20725  3961.34\n4797  2024-10-15        29.75  ...                              0.18995  3855.99\n4798  2024-10-16        29.67  ...                              0.20643  3831.59\n4799  2024-10-17        29.56  ...                              0.20107  3788.22\n[4800 rows x 14 columns]\n```\n\n#### A 股等权重与中位数市净率\n\n接口: stock_a_all_pb\n\n目标地址: https://www.legulegu.com/stockdata/all-pb\n\n描述: 乐咕乐股-A 股等权重与中位数市净率\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述 |\n|-----|-----|----|\n| -   | -   | -  |\n\n输出参数\n\n| 名称                                          | 类型      | 描述                     |\n|---------------------------------------------|---------|------------------------|\n| date                                        | object  | 日期                     |\n| middlePB                                    | float64 | 全部A股市净率中位数             |\n| equalWeightAveragePB                        | float64 | 全部A股市净率等权平均            |\n| close                                       | float64 | 上证指数                   |\n| quantileInAllHistoryMiddlePB                | float64 | 当前市净率中位数在历史数据上的分位数     |\n| quantileInRecent10YearsMiddlePB             | float64 | 当前市净率中位数在最近10年数据上的分位数  |\n| quantileInAllHistoryEqualWeightAveragePB    | float64 | 当前市净率等权平均在历史数据上的分位数    |\n| quantileInRecent10YearsEqualWeightAveragePB | float64 | 当前市净率等权平均在最近10年数据上的分位数 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_a_all_pb_df = ak.stock_a_all_pb()\nprint(stock_a_all_pb_df)\n```\n\n数据示例\n\n```\n            date  ...  quantileInRecent10YearsEqualWeightAveragePB\n0     2005-01-04  ...                                      1.00000\n1     2005-01-05  ...                                      1.00000\n2     2005-01-06  ...                                      0.66667\n3     2005-01-07  ...                                      0.75000\n4     2005-01-10  ...                                      1.00000\n...          ...  ...                                          ...\n4793  2024-10-11  ...                                      0.10763\n4794  2024-10-14  ...                                      0.12170\n4795  2024-10-15  ...                                      0.11551\n4796  2024-10-16  ...                                      0.11840\n4797  2024-10-17  ...                                      0.12129\n[4798 rows x 8 columns]\n```\n\n#### 主板市盈率\n\n接口: stock_market_pe_lg\n\n目标地址: https://legulegu.com/stockdata/shanghaiPE\n\n描述: 乐咕乐股-主板市盈率\n\n限量: 单次获取指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                |\n|--------|-----|---------------------------------------------------|\n| symbol | str | symbol=\"上证\"; choice of {\"上证\", \"深证\", \"创业板\", \"科创版\"} |\n\n输出参数-上证, 深证, 创业板\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| 日期    | object  | -   |\n| 指数    | float64 | -   |\n| 平均市盈率 | float64 | -   |\n\n接口示例-上证, 深证, 创业板\n\n```python\nimport akshare as ak\n\nstock_market_pe_lg_df = ak.stock_market_pe_lg(symbol=\"上证\")\nprint(stock_market_pe_lg_df)\n```\n\n数据示例-上证, 深证, 创业板\n\n```\n        日期       指数  平均市盈率\n0    1999-01-29  1134.67  34.03\n1    1999-02-09  1090.08  33.50\n2    1999-03-31  1158.05  34.30\n3    1999-04-30  1120.92  34.39\n4    1999-05-31  1279.32  35.30\n..          ...      ...    ...\n306  2024-06-28  2967.40  12.69\n307  2024-07-31  2938.75  12.55\n308  2024-08-30  2842.21  12.16\n309  2024-09-30  3336.50  14.24\n310  2024-10-18  3261.56  13.89\n[311 rows x 3 columns]\n```\n\n输出参数-科创版\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 日期  | object  | -   |\n| 总市值 | float64 | -   |\n| 市盈率 | float64 | -   |\n\n接口示例-科创版\n\n```python\nimport akshare as ak\n\nstock_market_pe_lg_df = ak.stock_market_pe_lg(symbol=\"科创版\")\nprint(stock_market_pe_lg_df)\n```\n\n数据示例-科创版\n\n```\n        日期       总市值    市盈率\n0     2019-07-22   5293.39  81.43\n1     2019-07-23   4821.95  74.18\n2     2019-07-24   5135.78  79.00\n3     2019-07-25   5373.12  82.65\n4     2019-07-26   5000.56  76.92\n...          ...       ...    ...\n1265  2024-10-14  58559.78  39.19\n1266  2024-10-15  56996.68  38.18\n1267  2024-10-16  55961.92  37.50\n1268  2024-10-17  56181.48  37.54\n1269  2024-10-18  61039.80  40.72\n[1270 rows x 3 columns]\n```\n\n#### 指数市盈率\n\n接口: stock_index_pe_lg\n\n目标地址: https://legulegu.com/stockdata/sz50-ttm-lyr\n\n描述: 乐咕乐股-指数市盈率\n\n限量: 单次获取指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                                                  |\n|--------|-----|-------------------------------------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"上证50\"; choice of {\"上证50\", \"沪深300\", \"上证380\", \"创业板50\", \"中证500\", \"上证180\", \"深证红利\", \"深证100\", \"中证1000\", \"上证红利\", \"中证100\", \"中证800\"} |\n\n输出参数\n\n| 名称       | 类型      | 描述  |\n|----------|---------|-----|\n| 日期       | object  | -   |\n| 指数       | float64 | -   |\n| 等权静态市盈率  | float64 | -   |\n| 静态市盈率    | float64 | -   |\n| 静态市盈率中位数 | float64 | -   |\n| 等权滚动市盈率  | float64 | -   |\n| 滚动市盈率    | float64 | -   |\n| 滚动市盈率中位数 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_index_pe_lg_df = ak.stock_index_pe_lg(symbol=\"上证50\")\nprint(stock_index_pe_lg_df)\n```\n\n数据示例\n\n```\n      日期         指数  等权静态市盈率  静态市盈率  静态市盈率中位数  等权滚动市盈率  滚动市盈率  滚动市盈率中位数\n0     2005-01-05   831.43    32.48  20.69     27.02    29.52  14.93     18.97\n1     2005-01-06   822.50    32.57  20.37     27.00    29.74  14.69     18.81\n2     2005-01-07   823.62    32.59  20.50     27.10    29.81  14.79     18.73\n3     2005-01-10   832.99    32.99  20.58     27.29    30.13  14.83     19.07\n4     2005-01-11   837.86    33.13  20.69     27.25    30.26  14.91     19.26\n...          ...      ...      ...    ...       ...      ...    ...       ...\n4800  2024-10-14  2723.18    33.03  11.48     17.17    32.32  11.27     17.79\n4801  2024-10-15  2655.12    32.16  11.17     16.68    31.50  10.97     17.43\n4802  2024-10-16  2650.18    31.65  11.19     16.42    30.20  11.00     17.45\n4803  2024-10-17  2610.47    31.47  11.05     16.13    30.05  10.86     16.94\n4804  2024-10-18  2681.91    33.61  11.29     16.60    32.22  11.09     17.35\n[4805 rows x 8 columns]\n```\n\n#### 主板市净率\n\n接口: stock_market_pb_lg\n\n目标地址: https://legulegu.com/stockdata/shanghaiPB\n\n描述: 乐咕乐股-主板市净率\n\n限量: 单次获取指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                |\n|--------|-----|---------------------------------------------------|\n| symbol | str | symbol=\"上证\"; choice of {\"上证\", \"深证\", \"创业板\", \"科创版\"} |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 日期     | object  | -   |\n| 指数     | float64 | -   |\n| 市净率    | float64 | -   |\n| 等权市净率  | float64 | -   |\n| 市净率中位数 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_market_pb_lg_df = ak.stock_market_pb_lg(symbol=\"上证\")\nprint(stock_market_pb_lg_df)\n```\n\n数据示例\n\n```\n          日期     指数     市净率  等权市净率 市净率中位数\n0     2005-01-04  3025.42  2.09   2.57    2.06\n1     2005-01-05  3052.86  2.09   2.58    2.06\n2     2005-01-06  3028.73  2.06   2.56    2.05\n3     2005-01-07  3035.59  2.06   2.57    2.06\n4     2005-01-10  3062.73  2.08   2.60    2.08\n          ...      ...   ...    ...     ...\n4686  2024-04-19  9279.46  1.79   2.65    1.87\n4687  2024-04-22  9239.14  1.78   2.62    1.84\n4688  2024-04-23  9183.14  1.77   2.62    1.86\n4689  2024-04-24  9251.13  1.78   2.67    1.89\n4690  2024-04-25  9264.48  1.78   2.69    1.90\n[4691 rows x 5 columns]\n```\n\n#### 指数市净率\n\n接口: stock_index_pb_lg\n\n目标地址: https://legulegu.com/stockdata/sz50-pb\n\n描述: 乐咕乐股-指数市净率\n\n限量: 单次获取指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                                                  |\n|--------|-----|-------------------------------------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"上证50\"; choice of {\"上证50\", \"沪深300\", \"上证380\", \"创业板50\", \"中证500\", \"上证180\", \"深证红利\", \"深证100\", \"中证1000\", \"上证红利\", \"中证100\", \"中证800\"} |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 日期     | object  | -   |\n| 指数     | float64 | -   |\n| 市净率    | float64 | -   |\n| 等权市净率  | float64 | -   |\n| 市净率中位数 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_index_pb_lg_df = ak.stock_index_pb_lg(symbol=\"上证50\")\nprint(stock_index_pb_lg_df)\n```\n\n数据示例\n\n```\n          日期     指数   市净率  等权市净率  市净率中位数\n0     2005-01-05   831.43  2.10   2.35    2.12\n1     2005-01-06   822.50  2.07   2.34    2.12\n2     2005-01-07   823.62  2.08   2.34    2.13\n3     2005-01-10   832.99  2.08   2.37    2.16\n4     2005-01-11   837.86  2.10   2.38    2.16\n          ...      ...   ...    ...     ...\n4686  2024-04-22  2424.75  1.14   2.97    1.92\n4687  2024-04-23  2413.74  1.14   2.96    1.90\n4688  2024-04-24  2424.12  1.14   2.98    1.90\n4689  2024-04-25  2431.62  1.14   2.96    1.90\n4690  2024-04-26  2461.86  1.15   2.96    1.94\n[4691 rows x 5 columns]\n```\n\n#### A 股估值指标\n\n接口: stock_zh_valuation_baidu\n\n目标地址: https://gushitong.baidu.com/stock/ab-002044\n\n描述: 百度股市通-A 股-财务报表-估值数据\n\n限量: 单次获取指定 symbol 和 indicator 的所有历史数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                     |\n|-----------|-----|------------------------------------------------------------------------|\n| symbol    | str | symbol=\"002044\"; A 股代码                                                 |\n| indicator | str | indicator=\"总市值\"; choice of {\"总市值\", \"市盈率(TTM)\", \"市盈率(静)\", \"市净率\", \"市现率\"} |\n| period    | str | period=\"近一年\"; choice of {\"近一年\", \"近三年\", \"近五年\", \"近十年\", \"全部\"}             |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| date  | object  | -   |\n| value | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_valuation_baidu_df = ak.stock_zh_valuation_baidu(symbol=\"002044\", indicator=\"总市值\", period=\"近一年\")\nprint(stock_zh_valuation_baidu_df)\n```\n\n数据示例\n\n```\n           date   value\n0    2023-05-29  245.42\n1    2023-05-30  246.60\n2    2023-05-31  249.73\n3    2023-06-01  253.64\n4    2023-06-02  259.52\n..          ...     ...\n362  2024-05-25  167.92\n363  2024-05-26  167.92\n364  2024-05-27  165.96\n365  2024-05-28  164.40\n366  2024-05-29  167.14\n[367 rows x 2 columns]\n```\n\n#### 个股估值\n\n接口: stock_value_em\n\n目标地址: https://data.eastmoney.com/gzfx/detail/300766.html\n\n描述: 东方财富网-数据中心-估值分析-每日互动-每日互动-估值分析\n\n限量: 单次获取指定 symbol 的所有历史数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                     |\n|-----------|-----|------------------------------------------------------------------------|\n| symbol    | str | symbol=\"002044\"; A 股代码                                                 |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 数据日期    | object  | -       |\n| 当日收盘价   | float64 | 注意单位: 元 |\n| 当日涨跌幅   | float64 | 注意单位: % |\n| 总市值     | float64 | 注意单位: 元 |\n| 流通市值    | float64 | 注意单位: 元 |\n| 总股本     | float64 | 注意单位: 股 |\n| 流通股本    | float64 | -       |\n| PE(TTM) | float64 | -       |\n| PE(静)   | float64 | -       |\n| 市净率     | float64 | -       |\n| PEG值    | float64 | -       |\n| 市现率     | float64 | -       |\n| 市销率     | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_value_em_df = ak.stock_value_em(symbol=\"300766\")\nprint(stock_value_em_df)\n```\n\n数据示例\n\n```\n        数据日期  当日收盘价   当日涨跌幅  ...  PEG值      市现率       市销率\n0     2019-03-25  18.84  44.036697  ... -1.428399   34.410716  13.976938\n1     2019-03-26  20.72   9.978769  ... -1.570936   37.844482  15.371664\n2     2019-03-27  22.79   9.990347  ... -1.727878   41.625277  16.907347\n3     2019-03-28  25.07  10.004388  ... -1.900741   45.789631  18.598823\n4     2019-03-29  27.58  10.011966  ... -2.091043   50.374074  20.460931\n...          ...    ...        ...  ...       ...         ...        ...\n1373  2024-11-20  15.30   6.397775  ... -0.055226 -128.339565  13.236721\n1374  2024-11-21  15.33   0.196078  ... -0.055334 -128.591212  13.262675\n1375  2024-11-22  14.82  -3.326810  ... -0.053493 -124.313226  12.821451\n1376  2024-11-25  14.80  -0.134953  ... -0.053421 -124.145462  12.804148\n1377  2024-11-26  14.85   0.337838  ... -0.053601 -124.564872  12.847406\n[1378 rows x 13 columns]\n```\n\n#### 涨跌投票\n\n接口: stock_zh_vote_baidu\n\n目标地址: https://gushitong.baidu.com/index/ab-000001\n\n描述: 百度股市通- A 股或指数-股评-投票\n\n限量: 单次获取指定 symbol 和 indicator 的所有数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                     |\n|-----------|-----|----------------------------------------|\n| symbol    | str | symbol=\"000001\"; A 股股票或指数代码            |\n| indicator | str | indicator=\"指数\"; choice of {\"指数\", \"股票\"} |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| 周期   | object | -   |\n| 看涨   | object | -   |\n| 看跌   | object | -   |\n| 看涨比例 | object | -   |\n| 看跌比例 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_vote_baidu_df = ak.stock_zh_vote_baidu(symbol=\"000001\", indicator=\"指数\")\nprint(stock_zh_vote_baidu_df)\n```\n\n数据示例\n\n```\n   周期    看涨      看跌 看涨比例 看跌比例\n0  今日    1531    4765  24%  76%\n1  本周    1531    4765  24%  76%\n2  本月    2442    7109  26%  74%\n3  今年  15.04万  36.01万  29%  71%\n```\n\n#### 港股个股指标\n\nP.S. 该数据源暂未更新数据\n\n接口: stock_hk_indicator_eniu\n\n目标地址: https://eniu.com/gu/hk01093/roe\n\n描述: 亿牛网-港股个股指标: 市盈率, 市净率, 股息率, ROE, 市值\n\n限量: 单次获取指定 symbol 和 indicator 的所有历史数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                                              |\n|-----------|-----|-------------------------------------------------------------------------------------------------|\n| symbol    | str | symbol=\"hk01093\"; 可通过调用 **ak.stock_hk_indicator_eniu(symbol=\"hk01093\", indicator=\"港股\")** 获取股票代码 |\n| indicator | str | indicator=\"市盈率\"; choice of {\"港股\", \"市盈率\", \"市净率\", \"股息率\", \"ROE\", \"市值\"}                             |\n\n输出参数\n\n| 名称  | 类型  | 描述              |\n|-----|-----|-----------------|\n| -   | -   | 根据 indicator 而异 |\n\n接口示例-ROE\n\n```python\nimport akshare as ak\n\nstock_hk_indicator_eniu_df = ak.stock_hk_indicator_eniu(symbol=\"hk01093\", indicator=\"市净率\")\nprint(stock_hk_indicator_eniu_df)\n```\n\n数据示例-ROE\n\n```\n            date    pb  price\n0     2000-01-03  1.17   0.00\n1     2000-01-04  1.24   0.00\n2     2000-01-05  1.19   0.00\n3     2000-01-06  1.06   0.00\n4     2000-01-07  1.08   0.00\n          ...   ...    ...\n5041  2020-08-07  7.31  15.74\n5042  2020-08-10  7.22  15.54\n5043  2020-08-11  7.31  15.74\n5044  2020-08-12  7.15  15.40\n5045  2020-08-13  7.18  15.46\n```\n\n#### 港股估值指标\n\n接口: stock_hk_valuation_baidu\n\n目标地址: https://gushitong.baidu.com/stock/hk-06969\n\n描述: 百度股市通-港股-财务报表-估值数据\n\n限量: 单次获取指定 symbol 的指定 indicator 的特定 period 的历史数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                     |\n|-----------|-----|------------------------------------------------------------------------|\n| symbol    | str | symbol=\"02358\"; 港股代码                                                   |\n| indicator | str | indicator=\"总市值\"; choice of {\"总市值\", \"市盈率(TTM)\", \"市盈率(静)\", \"市净率\", \"市现率\"} |\n| period    | str | period=\"近一年\"; choice of {\"近一年\", \"近三年\", \"全部\"}                           |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| date  | object  | -   |\n| value | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_valuation_baidu_df = ak.stock_hk_valuation_baidu(symbol=\"06969\", indicator=\"总市值\", period=\"近一年\")\nprint(stock_hk_valuation_baidu_df)\n```\n\n数据示例\n\n```\n           date   value\n0    2023-11-21  427.15\n1    2023-11-22  428.99\n2    2023-11-23  441.88\n3    2023-11-24  430.83\n4    2023-11-25  430.83\n..          ...     ...\n362  2024-11-17  602.46\n363  2024-11-18  632.73\n364  2024-11-19  679.69\n365  2024-11-20  713.06\n366  2024-11-21  688.35\n[367 rows x 2 columns]\n```\n\n#### 美股估值指标\n\n接口: stock_us_valuation_baidu\n\n目标地址: https://gushitong.baidu.com/stock/us-NVDA\n\n描述: 百度股市通-美股-财务报表-估值数据\n\n限量: 单次获取指定 symbol 的指定 indicator 的特定 period 的历史数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                     |\n|-----------|-----|------------------------------------------------------------------------|\n| symbol    | str | symbol=\"NVDA\"; 美股代码                                                    |\n| indicator | str | indicator=\"总市值\"; choice of {\"总市值\", \"市盈率(TTM)\", \"市盈率(静)\", \"市净率\", \"市现率\"} |\n| period    | str | period=\"近一年\"; choice of {\"近一年\", \"近三年\", \"全部\"}                           |\n\n输出参数\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| date  | object  | -   |\n| value | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_us_valuation_baidu_df = ak.stock_us_valuation_baidu(symbol=\"NVDA\", indicator=\"总市值\", period=\"近一年\")\nprint(stock_us_valuation_baidu_df)\n```\n\n数据示例\n\n```\n           date     value\n0    2024-12-24  34339.88\n1    2024-12-26  34268.86\n2    2024-12-27  33553.75\n3    2024-12-30  33671.30\n4    2024-12-31  32887.62\n..          ...       ...\n245  2025-12-17  41538.42\n246  2025-12-18  42316.02\n247  2025-12-19  43980.57\n248  2025-12-22  44636.67\n249  2025-12-23  45978.03\n[250 rows x 2 columns]\n```\n\n#### 创新高和新低的股票数量\n\n接口: stock_a_high_low_statistics\n\n目标地址: https://www.legulegu.com/stockdata/high-low-statistics\n\n描述: 不同市场的创新高和新低的股票数量\n\n限量: 单次获取指定 market 的近两年的历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                |\n|--------|-----|-----------------------------------------------------------------------------------|\n| symbol | str | symbol=\"all\"; {\"all\": \"全部A股\", \"sz50\": \"上证50\", \"hs300\": \"沪深300\", \"zz500\": \"中证500\"} |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| date    | object  | 交易日     |\n| close   | float64 | 相关指数收盘价 |\n| high20  | int64   | 20日新高   |\n| low20   | int64   | 20日新低   |\n| high60  | int64   | 60日新高   |\n| low60   | int64   | 60日新低   |\n| high120 | int64   | 120日新高  |\n| low120  | int64   | 120日新低  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_a_high_low_statistics_df = ak.stock_a_high_low_statistics(symbol=\"all\")\nprint(stock_a_high_low_statistics_df)\n```\n\n数据示例\n\n```\n           date    close  high20  low20  high60  low60  high120  low120\n0    2021-08-18  3485.29     441    293     212    143      143      67\n1    2021-08-19  3465.55     303    332     162    189      132     106\n2    2021-08-20  3427.33     361    628     214    399      168     227\n3    2021-08-23  3477.13     827    102     417     68      332      44\n4    2021-08-24  3514.47     843    128     399     83      306      50\n..          ...      ...     ...    ...     ...    ...      ...     ...\n495  2023-09-04  3177.06     811     65     269     30      139      17\n496  2023-09-05  3154.37     512    203     125     57       70      24\n497  2023-09-06  3122.35     254    240     103    125       74      65\n498  2023-09-06  3158.08     867    200     169     84       91      44\n499  2023-09-08  3116.72     393    513     104    281       60     167\n[500 rows x 8 columns]\n```\n\n#### 破净股统计\n\n接口: stock_a_below_net_asset_statistics\n\n目标地址: https://www.legulegu.com/stockdata/below-net-asset-statistics\n\n描述: 乐咕乐股-A 股破净股统计数据\n\n限量: 单次获取指定 symbol 的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                          |\n|--------|-----|-------------------------------------------------------------|\n| symbol | str | symbol=\"全部A股\"; choice of {\"全部A股\", \"沪深300\", \"上证50\", \"中证500\"} |\n\n输出参数-全部A股\n\n| 名称                    | 类型      | 描述    |\n|-----------------------|---------|-------|\n| date                  | object  | 交易日   |\n| below_net_asset       | float64 | 破净股家数 |\n| total_company         | float64 | 总公司数  |\n| below_net_asset_ratio | float64 | 破净股比率 |\n\n接口示例-全部 A 股\n\n```python\nimport akshare as ak\n\nstock_a_below_net_asset_statistics_df = ak.stock_a_below_net_asset_statistics(symbol=\"全部A股\")\nprint(stock_a_below_net_asset_statistics_df)\n```\n\n数据示例-全部 A 股\n\n```\n            date  below_net_asset  total_company  below_net_asset_ratio\n0     2005-01-04               36           1352                 0.0266\n1     2005-01-05               31           1352                 0.0229\n2     2005-01-06               32           1352                 0.0237\n3     2005-01-09               33           1352                 0.0244\n4     2005-01-10               29           1352                 0.0214\n          ...              ...            ...                    ...\n4682  2024-04-21              577           5114                 0.1128\n4683  2024-04-22              561           5114                 0.1097\n4684  2024-04-23              551           5114                 0.1077\n4685  2024-04-24              533           5114                 0.1042\n4686  2024-04-25              516           5113                 0.1009\n[4687 rows x 4 columns]\n```\n\n输出参数-沪深 300\n\n| 名称                    | 类型      | 描述    |\n|-----------------------|---------|-------|\n| date                  | object  | 交易日   |\n| below_net_asset       | float64 | 破净股家数 |\n| total_company         | float64 | 总公司数  |\n| below_net_asset_ratio | float64 | 破净股比率 |\n\n接口示例-沪深 300\n\n```python\nimport akshare as ak\n\nstock_a_below_net_asset_statistics_df = ak.stock_a_below_net_asset_statistics(symbol=\"沪深300\")\nprint(stock_a_below_net_asset_statistics_df)\n```\n\n数据示例-沪深 300\n\n```\n            date  below_net_asset  total_company  below_net_asset_ratio\n0     2005-04-07               22            299                 0.0736\n1     2005-04-10               21            299                 0.0702\n2     2005-04-11               23            299                 0.0769\n3     2005-04-12               20            299                 0.0669\n4     2005-04-13               22            299                 0.0736\n          ...              ...            ...                    ...\n4627  2024-04-21               63            300                 0.2100\n4628  2024-04-22               63            300                 0.2100\n4629  2024-04-23               63            300                 0.2100\n4630  2024-04-24               63            300                 0.2100\n4631  2024-04-25               62            300                 0.2067\n[4632 rows x 4 columns]\n```\n\n#### 基金持股\n\n接口: stock_report_fund_hold\n\n目标地址: http://data.eastmoney.com/zlsj/2020-06-30-1-2.html\n\n描述: 东方财富网-数据中心-主力数据-基金持仓\n\n限量: 单次返回指定 symbol 和 date 的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                          |\n|--------|-----|-----------------------------------------------------------------------------|\n| symbol | str | symbol=\"基金持仓\"; choice of {\"基金持仓\", \"QFII持仓\", \"社保持仓\", \"券商持仓\", \"保险持仓\", \"信托持仓\"} |\n| date   | str | date=\"20200630\"; 财报发布日期, xxxx-03-31, xxxx-06-30, xxxx-09-30, xxxx-12-31     |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 股票代码   | object  | -       |\n| 股票简称   | object  | -       |\n| 持有基金家数 | int64   | 注意单位: 家 |\n| 持股总数   | int64   | 注意单位: 股 |\n| 持股市值   | float64 | 注意单位: 元 |\n| 持股变化   | object  | -       |\n| 持股变动数值 | int64   | 注意单位: 股 |\n| 持股变动比例 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_report_fund_hold_df = ak.stock_report_fund_hold(symbol=\"基金持仓\", date=\"20200630\")\nprint(stock_report_fund_hold_df)\n```\n\n数据示例\n\n```\n        序号    股票代码  股票简称  ... 持股变化   持股变动数值             持股变动比例\n0        1  300846  首都在线  ...   新进  3024892         0.00219976\n1        2  300843  胜蓝股份  ...   新进  1984496         0.00293824\n2        3  300842  帝科股份  ...   新进  1190928   1.19092800000001\n3        4  600956  新天绿能  ...   新进  6460517  0.167734880000004\n4        5  300845  捷安高科  ...   新进  1211353         0.00388496\n    ...     ...   ...  ...  ...      ...                ...\n3555  3556  300752  隆利科技  ...   增持     3100         0.00258868\n3556  3557  300778   新城市  ...   新进      125           0.000125\n3557  3558  300786  国林科技  ...   增持     2800         0.00327715\n3558  3559  300818  耐普矿机  ...   新进      500         0.00071429\n3559  3560  688981  中芯国际  ...   新进   139500         0.00255926\n```\n\n#### 基金持股明细\n\n接口: stock_report_fund_hold_detail\n\n目标地址: http://data.eastmoney.com/zlsj/ccjj/2020-12-31-008286.html\n\n描述: 东方财富网-数据中心-主力数据-基金持仓-基金持仓明细表\n\n限量: 单次返回指定 symbol 和 date 的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                      |\n|--------|-----|-------------------------------------------------------------------------|\n| symbol | str | symbol=\"005827\"; 基金代码                                                   |\n| date   | str | date=\"20200630\"; 财报发布日期, xxxx-03-31, xxxx-06-30, xxxx-09-30, xxxx-12-31 |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int64   | -       |\n| 股票代码    | object  | -       |\n| 股票简称    | object  | -       |\n| 持股数     | int64   | 注意单位: 股 |\n| 持股市值    | float64 | 注意单位: 元 |\n| 占总股本比例  | float64 | 注意单位: % |\n| 占流通股本比例 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_report_fund_hold_detail_df = ak.stock_report_fund_hold_detail(symbol=\"005827\", date=\"20201231\")\nprint(stock_report_fund_hold_detail_df)\n```\n\n数据示例\n\n```\n   序号       股票代码  股票简称       持股数           持股市值 占总股本比例 占流通股本比例\n0   1  600519.SH  贵州茅台   3265532     6524532936   0.26    0.26\n1   2  300015.SZ  爱尔眼科  32000005  2396480374.45   0.78    0.80\n2   3  002415.SZ  海康威视  70000025  3395701212.75   0.75    0.85\n3   4  002304.SZ  洋河股份  27200000     6418928000   1.80    2.16\n4   5  000858.SZ   五粮液  21858499  6379402933.15   0.56    0.58\n5   6  000568.SZ  泸州老窖  27700000     6264632000   1.89    1.89\n```\n\n#### 龙虎榜\n\n##### 龙虎榜-东财\n\n###### 龙虎榜详情\n\n接口: stock_lhb_detail_em\n\n目标地址: https://data.eastmoney.com/stock/tradedetail.html\n\n描述: 东方财富网-数据中心-龙虎榜单-龙虎榜详情\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| start_date | str | start_date=\"20220314\" |\n| end_date   | str | end_date=\"20220315\"   |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 序号       | int64   | -       |\n| 代码       | object  | -       |\n| 名称       | object  | -       |\n| 上榜日      | object  | -       |\n| 解读       | object  | -       |\n| 收盘价      | float64 | -       |\n| 涨跌幅      | float64 | 注意单位: % |\n| 龙虎榜净买额   | float64 | 注意单位: 元 |\n| 龙虎榜买入额   | float64 | 注意单位: 元 |\n| 龙虎榜卖出额   | float64 | 注意单位: 元 |\n| 龙虎榜成交额   | float64 | 注意单位: 元 |\n| 市场总成交额   | int64   | 注意单位: 元 |\n| 净买额占总成交比 | float64 | 注意单位: % |\n| 成交额占总成交比 | float64 | 注意单位: % |\n| 换手率      | float64 | 注意单位: % |\n| 流通市值     | float64 | 注意单位: 元 |\n| 上榜原因     | object  | -       |\n| 上榜后1日    | float64 | 注意单位: % |\n| 上榜后2日    | float64 | 注意单位: % |\n| 上榜后5日    | float64 | 注意单位: % |\n| 上榜后10日   | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lhb_detail_em_df = ak.stock_lhb_detail_em(start_date=\"20230403\", end_date=\"20230417\")\nprint(stock_lhb_detail_em_df)\n```\n\n数据示例\n\n```\n      序号  代码    名称    上榜日  ...     上榜后1日      上榜后2日      上榜后5日    上榜后10日\n0      1  000021   深科技  2023-04-06  ... -1.304348  -0.193237  -8.212560       NaN\n1      2  000021   深科技  2023-04-03  ...  2.338227  12.561175  11.201740  7.667210\n2      3  000021   深科技  2023-04-03  ...  2.338227  12.561175  11.201740  7.667210\n3      4  000032  深桑达A  2023-04-06  ...  2.087576  -2.214868  -2.265784       NaN\n4      5  000063  中兴通讯  2023-04-07  ... -3.783784  -5.270270  -7.027027       NaN\n..   ...     ...   ...         ...  ...       ...        ...        ...       ...\n630  631  688698  伟创电气  2023-04-12  ... -4.407407  -2.592593        NaN       NaN\n631  632  688787  海天瑞声  2023-04-10  ...  2.028249   5.644068   6.073446       NaN\n632  633  873593  鼎智科技  2023-04-17  ... -7.805655        NaN        NaN       NaN\n633  634  900915  中路B股  2023-04-12  ...  2.981030   1.490515        NaN       NaN\n634  635  900915  中路B股  2023-04-03  ...  5.807365   3.824363  12.039660  3.399433\n```\n\n###### 个股上榜统计\n\n接口: stock_lhb_stock_statistic_em\n\n目标地址: https://data.eastmoney.com/stock/tradedetail.html\n\n描述: 东方财富网-数据中心-龙虎榜单-个股上榜统计\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                   |\n|--------|-----|------------------------------------------------------|\n| symbol | str | symbol=\"近一月\"; choice of {\"近一月\", \"近三月\", \"近六月\", \"近一年\"} |\n\n输出参数\n\n| 名称      | 类型      | 描述 |\n|---------|---------|----|\n| 序号      | int64   | -  |\n| 代码      | object  | -  |\n| 名称      | object  | -  |\n| 最近上榜日   | object  | -  |\n| 收盘价     | float64 | -  |\n| 涨跌幅     | float64 | -  |\n| 上榜次数    | int64   | -  |\n| 龙虎榜净买额  | float64 | -  |\n| 龙虎榜买入额  | float64 | -  |\n| 龙虎榜卖出额  | float64 | -  |\n| 龙虎榜总成交额 | float64 | -  |\n| 买方机构次数  | int64   | -  |\n| 卖方机构次数  | int64   | -  |\n| 机构买入净额  | float64 | -  |\n| 机构买入总额  | float64 | -  |\n| 机构卖出总额  | float64 | -  |\n| 近1个月涨跌幅 | float64 | -  |\n| 近3个月涨跌幅 | float64 | -  |\n| 近6个月涨跌幅 | float64 | -  |\n| 近1年涨跌幅  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lhb_stock_statistic_em_df = ak.stock_lhb_stock_statistic_em(symbol=\"近一月\")\nprint(stock_lhb_stock_statistic_em_df)\n```\n\n数据示例\n\n```\n      序号  代码    名称     最近上榜日  ...   近1个月涨跌幅  近3个月涨跌幅 近6个月涨跌幅  近1年涨跌幅\n0      1  605180  华生科技  2024-04-18  ...  39.940828  -8.274079   7.744875   19.350450\n1      2  603603  退市博天  2024-04-18  ... -61.000000 -61.386139 -86.315789  -90.250000\n2      3  002089   新海退  2024-04-17  ... -69.230769 -76.699029 -80.645161  -75.510204\n3      4  000506  中润资源  2024-04-19  ...  55.844156  61.725067  26.849894   11.940299\n4      5  301500  飞南资源  2024-04-19  ...  16.005874  21.788284   3.765324   -1.126408\n..   ...     ...   ...         ...  ...        ...        ...        ...         ...\n653  654  603322  超讯通信  2024-03-21  ...  22.253172   4.969439  39.035551  127.403569\n654  655  603528  多伦科技  2024-03-21  ...  57.685353  -4.803493  20.275862   12.761000\n655  656  605296  神农集团  2024-03-21  ...  19.154229  10.477759  59.590671   33.666462\n656  657  688103  国力股份  2024-03-21  ...  22.362869 -16.219563 -24.842651  -32.964050\n657  658  900921  丹科B股  2024-03-21  ...   2.097902   8.955224   5.797101  -18.435754\n[658 rows x 20 columns]\n```\n\n###### 机构买卖每日统计\n\n接口: stock_lhb_jgmmtj_em\n\n目标地址: https://data.eastmoney.com/stock/jgmmtj.html\n\n描述: 东方财富网-数据中心-龙虎榜单-机构买卖每日统计\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| start_date | str | start_date=\"20240417\" |\n| end_date   | str | end_date=\"20240430\"   |\n\n输出参数\n\n| 名称          | 类型      | 描述       |\n|-------------|---------|----------|\n| 序号          | int64   | -        |\n| 代码          | object  | -        |\n| 名称          | object  | -        |\n| 收盘价         | float64 | -        |\n| 涨跌幅         | float64 | -        |\n| 买方机构数       | float64 | -        |\n| 卖方机构数       | float64 | -        |\n| 机构买入总额      | float64 | 注意单位: 元  |\n| 机构卖出总额      | float64 | 注意单位: 元  |\n| 机构买入净额      | float64 | 注意单位: 元  |\n| 市场总成交额      | float64 | 注意单位: 元  |\n| 机构净买额占总成交额比 | float64 | -        |\n| 换手率         | float64 | -        |\n| 流通市值        | float64 | 注意单位: 亿元 |\n| 上榜原因        | object  | -        |\n| 上榜日期        | object  | -        |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lhb_jgmmtj_em_df = ak.stock_lhb_jgmmtj_em(start_date=\"20240417\", end_date=\"20240430\")\nprint(stock_lhb_jgmmtj_em_df)\n```\n\n数据示例\n\n```\n      序号  代码  ...                                    上榜原因                   上榜日期\n0      1  600919  ...           有价格涨跌幅限制的日收盘价格跌幅偏离值达到7%的前五只证券  2024-04-26\n1      2  603486  ...  非ST、*ST和S证券连续三个交易日内收盘价格涨幅偏离值累计达到20%的证券  2024-04-22\n2      3  688019  ...             有价格涨跌幅限制的日收盘价格涨幅达到15%的前五只证券  2024-04-29\n3      4  002920  ...                        日跌幅偏离值达到7%的前5只证券  2024-04-19\n4      5  000628  ...                         日换手率达到20%的前5只证券  2024-04-29\n..   ...     ...  ...                                     ...         ...\n334  335  000628  ...                连续三个交易日内，涨幅偏离值累计达到20%的证券  2024-04-26\n335  336  000099  ...                        日涨幅偏离值达到7%的前5只证券  2024-04-18\n336  337  688027  ...             有价格涨跌幅限制的日收盘价格涨幅达到15%的前五只证券  2024-04-26\n337  338  002085  ...                        日涨幅偏离值达到7%的前5只证券  2024-04-24\n338  339  603882  ...           有价格涨跌幅限制的日收盘价格跌幅偏离值达到7%的前五只证券  2024-04-26\n[339 rows x 16 columns]\n```\n\n###### 机构席位追踪\n\n接口: stock_lhb_jgstatistic_em\n\n目标地址: https://data.eastmoney.com/stock/jgstatistic.html\n\n描述: 东方财富网-数据中心-龙虎榜单-机构席位追踪\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                   |\n|--------|-----|------------------------------------------------------|\n| symbol | str | symbol=\"近一月\"; choice of {\"近一月\", \"近三月\", \"近六月\", \"近一年\"} |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int64   | -       |\n| 代码      | object  | -       |\n| 名称      | object  | -       |\n| 收盘价     | float64 | -       |\n| 涨跌幅     | float64 | 注意单位: % |\n| 龙虎榜成交金额 | float64 | 注意单位: 元 |\n| 上榜次数    | int64   | -       |\n| 机构买入额   | float64 | 注意单位: 元 |\n| 机构买入次数  | int64   | -       |\n| 机构卖出额   | float64 | 注意单位: 元 |\n| 机构卖出次数  | int64   | -       |\n| 机构净买额   | float64 | 注意单位: 元 |\n| 近1个月涨跌幅 | float64 | 注意单位: % |\n| 近3个月涨跌幅 | float64 | 注意单位: % |\n| 近6个月涨跌幅 | float64 | 注意单位: % |\n| 近1年涨跌幅  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lhb_jgstatistic_em_df = ak.stock_lhb_jgstatistic_em(symbol=\"近一月\")\nprint(stock_lhb_jgstatistic_em_df)\n```\n\n数据示例\n\n```\n    序号   代码    名称    收盘价  ...   近1个月涨跌幅  近3个月涨跌幅  近6个月涨跌幅  近1年涨跌幅\n0      1  000099  中信海直  22.28  ...   41.730280  142.966194  179.197995  196.852398\n1      2  000506  中润资源   5.40  ...   27.962085   45.945946   13.924051   -1.459854\n2      3  301500  飞南资源  23.90  ...   18.199802   25.459318    5.752212   -0.292032\n3      4  001376  百通能源  20.05  ...   15.537337   10.231084  344.168612  344.168612\n4      5  300139  晓程科技  13.70  ...   56.930126   50.715072   27.205200   22.759857\n..   ...     ...   ...    ...  ...         ...         ...         ...         ...\n366  367  688691  灿芯股份  50.37  ...  153.625378  153.625378  153.625378  153.625378\n367  368  688701  卓锦股份   4.80  ...  -20.265781  -47.426068  -45.080092  -43.195266\n368  369  830839  万通液压  10.99  ...   -8.263773   -2.397869   45.370370   77.031095\n369  370  835438   戈碧迦  26.93  ...  169.300000  169.300000  169.300000  169.300000\n370  371  837006  晟楠科技  14.20  ...   -0.350877   -5.396402   40.454995   74.433640\n[371 rows x 16 columns]\n```\n\n###### 每日活跃营业部\n\n接口: stock_lhb_hyyyb_em\n\n目标地址: https://data.eastmoney.com/stock/hyyyb.html\n\n描述: 东方财富网-数据中心-龙虎榜单-每日活跃营业部\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| start_date | str | start_date=\"20220311\" |\n| end_date   | str | end_date=\"20220315\"   |\n\n输出参数\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 序号    | int64   | -       |\n| 营业部名称 | object  | -       |\n| 上榜日   | object  | -       |\n| 买入个股数 | float64 | -       |\n| 卖出个股数 | float64 | -       |\n| 买入总金额 | float64 | 注意单位: 元 |\n| 卖出总金额 | float64 | 注意单位: 元 |\n| 总买卖净额 | float64 | 注意单位: 元 |\n| 买入股票  | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lhb_hyyyb_em_df = ak.stock_lhb_hyyyb_em(start_date=\"20220324\", end_date=\"20220324\")\nprint(stock_lhb_hyyyb_em_df)\n```\n\n数据示例\n\n```\n       序号  ...                                               买入股票\n0        1  ...  中信海直 高新发展 张裕A 新乡化纤 宗申动力 湖南黄金 桂林三金 科华数据 柘中股份 *S...\n1        2  ...  中信海直 焦作万方 北方铜业 钱江摩托 新乡化纤 ST中南 百通能源 宗申动力 万丰奥威 百...\n2        3  ...                                               宗申动力\n3        4  ...                                               罗博特科\n4        5  ...                                          中科通达 神州信息\n...    ...  ...                                                ...\n7532  7533  ...  万科A 中信海直 神州信息 高新发展 康冠科技 宗申动力 万丰奥威 沃尔核材 江特电机 雪迪...\n7533  7534  ...  中信海直 我爱我家 长安汽车 高新发展 天保基建 万丰奥威 荣盛发展 百川股份 万安科技 奥...\n7534  7535  ...                                               长安汽车\n7535  7536  ...  双良节能 鲁信创投 江苏银行 太平洋 东方材料 日出东方 金域医学 国盾量子 信安世纪 财富...\n7536  7537  ...                                          长安汽车 荣盛发展\n[7537 rows x 9 columns]\n```\n\n#### 营业部详情数据-东财\n\n接口: stock_lhb_yyb_detail_em\n\n目标地址: https://data.eastmoney.com/stock/lhb/yyb/10188715.html\n\n描述: 东方财富网-数据中心-龙虎榜单-营业部历史交易明细-营业部交易明细\n\n限量: 单次返回指定营业部的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                        |\n|--------|-----|-----------------------------------------------------------|\n| symbol | str | symbol=\"10026729\"; 营业部代码, 通过 ak.stock_lhb_hyyyb_em() 接口获取 |\n\n输出参数\n\n| 名称       | 类型      | 描述                     |\n|----------|---------|------------------------|\n| 序号       | int64   | -                      |\n| 营业部代码    | object  | -                      |\n| 营业部名称    | object  | -                      |\n| 营业部简称    | object  | -                      |\n| 交易日期     | object  | -                      |\n| 股票代码     | object  | -                      |\n| 股票名称     | object  | -                      |\n| 涨跌幅      | float64 | 注意单位: %                |\n| 买入金额     | float64 | 注意单位: 元                |\n| 卖出金额     | float64 | 注意单位: 元                |\n| 净额       | float64 | 注意单位: 元                |\n| 上榜原因     | object  | -                      |\n| 1日后涨跌幅   | float64 | 注意单位: %                |\n| 2日后涨跌幅   | float64 | 注意单位: %                |\n| 3日后涨跌幅   | float64 | 注意单位: %                |\n| 5日后涨跌幅   | float64 | 注意单位: %                |\n| 10日后涨跌幅  | float64 | 注意单位: %                |\n| 20日后涨跌幅  | float64 | 注意单位: %                |\n| 30日后涨跌幅  | float64 | 注意单位: %                |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lhb_yyb_detail_em_df = ak.stock_lhb_yyb_detail_em(symbol=\"10188715\")\nprint(stock_lhb_yyb_detail_em_df)\n```\n\n数据示例\n\n```\n     序号  营业部代码                      营业部名称  ...    10日后涨跌幅    20日后涨跌幅    30日后涨跌幅\n0      1  10188715  东方证券股份有限公司上海普陀区云岭东路证券营业部  ... -18.448276        NaN        NaN\n1      2  10188715  东方证券股份有限公司上海普陀区云岭东路证券营业部  ... -16.309524 -32.023810        NaN\n2      3  10188715  东方证券股份有限公司上海普陀区云岭东路证券营业部  ...  -0.361011   2.045728 -12.033694\n3      4  10188715  东方证券股份有限公司上海普陀区云岭东路证券营业部  ...   8.633094  14.388489  -0.719424\n4      5  10188715  东方证券股份有限公司上海普陀区云岭东路证券营业部  ...  13.247863  38.632479  22.564103\n..   ...       ...                       ...  ...        ...        ...        ...\n97    98  10188715  东方证券股份有限公司上海普陀区云岭东路证券营业部  ...  -2.818991  -9.792285  -1.483680\n98    99  10188715  东方证券股份有限公司上海普陀区云岭东路证券营业部  ...  12.643678  24.856322  30.747126\n99   100  10188715  东方证券股份有限公司上海普陀区云岭东路证券营业部  ...  84.564546  58.426793  58.604601\n100  101  10188715  东方证券股份有限公司上海普陀区云岭东路证券营业部  ...   6.680370  -7.502569  -6.269270\n101  102  10188715  东方证券股份有限公司上海普陀区云岭东路证券营业部  ... -19.966159 -20.135364  -9.983080\n[102 rows x 19 columns]\n```\n\n###### 营业部排行\n\n接口: stock_lhb_yybph_em\n\n目标地址: https://data.eastmoney.com/stock/yybph.html\n\n描述: 东方财富网-数据中心-龙虎榜单-营业部排行\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                   |\n|--------|-----|------------------------------------------------------|\n| symbol | str | symbol=\"近一月\"; choice of {\"近一月\", \"近三月\", \"近六月\", \"近一年\"} |\n\n输出参数\n\n| 名称          | 类型      | 描述      |\n|-------------|---------|---------|\n| 序号          | int64   | -       |\n| 营业部名称       | object  | -       |\n| 上榜后1天-买入次数  | int64   | -       |\n| 上榜后1天-平均涨幅  | float64 | 注意单位: % |\n| 上榜后1天-上涨概率  | float64 | 注意单位: % |\n| 上榜后2天-买入次数  | int64   | -       |\n| 上榜后2天-平均涨幅  | float64 | 注意单位: % |\n| 上榜后2天-上涨概率  | float64 | 注意单位: % |\n| 上榜后3天-买入次数  | int64   | -       |\n| 上榜后3天-平均涨幅  | float64 | 注意单位: % |\n| 上榜后3天-上涨概率  | float64 | 注意单位: % |\n| 上榜后4天-买入次数  | int64   | -       |\n| 上榜后4天-平均涨幅  | float64 | 注意单位: % |\n| 上榜后4天-上涨概率  | float64 | 注意单位: % |\n| 上榜后10天-买入次数 | int64   | -       |\n| 上榜后10天-平均涨幅 | float64 | 注意单位: % |\n| 上榜后10天-上涨概率 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lhb_yybph_em_df = ak.stock_lhb_yybph_em(symbol=\"近一月\")\nprint(stock_lhb_yybph_em_df)\n```\n\n数据示例\n\n```\n      序号               营业部名称  ...  上榜后10天-平均涨幅  上榜后10天-上涨概率\n0        1  东方财富证券拉萨东环路第二证券营业部  ...   -10.314787    26.900585\n1        2    东方财富证券拉萨八一路证券营业部  ...   -11.566581    19.161677\n2        3  东方财富证券拉萨团结路第二证券营业部  ...    -9.394130    30.147059\n3        4  东方财富证券拉萨团结路第一证券营业部  ...   -10.351127    20.833333\n4        5               深股通专用  ...    -4.880778    30.769231\n...    ...                 ...  ...          ...          ...\n1619  1620   中银国际证券焦作解放东路证券营业部  ...     8.383234   100.000000\n1620  1621    华西证券北京马家堡东路证券营业部  ...   -14.800262     0.000000\n1621  1622      平安证券东莞石竹路证券营业部  ...     0.000000     0.000000\n1622  1623  中国银河证券北京东四环南路证券营业部  ...     0.000000     0.000000\n1623  1624      招商证券郑州北龙湖证券营业部  ...     9.370988   100.000000\n[1624 rows x 17 columns]\n```\n\n###### 营业部统计\n\n接口: stock_lhb_traderstatistic_em\n\n目标地址: https://data.eastmoney.com/stock/traderstatistic.html\n\n描述: 东方财富网-数据中心-龙虎榜单-营业部统计\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                   |\n|--------|-----|------------------------------------------------------|\n| symbol | str | symbol=\"近一月\"; choice of {\"近一月\", \"近三月\", \"近六月\", \"近一年\"} |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 序号      | int64   | -       |\n| 营业部名称   | object  | -       |\n| 龙虎榜成交金额 | float64 | -       |\n| 上榜次数    | int64   | -       |\n| 买入额     | float64 | 注意单位: 元 |\n| 买入次数    | int64   | -       |\n| 卖出额     | float64 | 注意单位: 元 |\n| 卖出次数    | int64   | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lhb_traderstatistic_em_df = ak.stock_lhb_traderstatistic_em(symbol=\"近一月\")\nprint(stock_lhb_traderstatistic_em_df)\n```\n\n数据示例\n\n```\n    序号                     营业部名称       龙虎榜成交金额  ...  买入次数           卖出额  卖出次数\n0        1                     深股通专用  2.143017e+10  ...   269  1.116966e+10   269\n1        2     华宝证券股份有限公司上海东大名路证券营业部  1.043461e+10  ...    46  5.103830e+09    42\n2        3           华鑫证券有限责任公司上海分公司  7.489912e+09  ...   180  3.422379e+09   155\n3        4    国泰君安证券股份有限公司成都双庆路证券营业部  7.023039e+09  ...    14  3.509692e+09    13\n4        5                     沪股通专用  6.663151e+09  ...    96  3.758107e+09   107\n...    ...                       ...           ...  ...   ...           ...   ...\n1620  1621    中信建投证券股份有限公司锦州解放路证券营业部  1.794000e+04  ...     1  0.000000e+00     0\n1621  1622      中信证券股份有限公司如皋福寿路证券营业部  1.346730e+04  ...     1  0.000000e+00     0\n1622  1623  申万宏源证券有限公司上海浦东新区沪南路证券营业部  1.178100e+04  ...     1  0.000000e+00     0\n1623  1624      华泰证券股份有限公司沈阳光荣街证券营业部  1.155000e+04  ...     1  0.000000e+00     0\n1624  1625      国信证券股份有限公司天津友谊路证券营业部  6.560000e+02  ...     1  0.000000e+00     0\n[1625 rows x 8 columns]\n```\n\n###### 个股龙虎榜详情\n\n接口: stock_lhb_stock_detail_em\n\n目标地址: https://data.eastmoney.com/stock/lhb/600077.html\n\n描述: 东方财富网-数据中心-龙虎榜单-个股龙虎榜详情\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                            |\n|--------|-----|-----------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"600077\";                                                                              |\n| date   | str | date=\"20220310\"; 需要通过 ak.stock_lhb_stock_detail_date_em(symbol=\"600077\") 接口获取相应股票的有龙虎榜详情数据的日期 |\n| flag   | str | flag=\"卖出\";  choice of {\"买入\", \"卖出\"}                                                            |\n\n输出参数\n\n| 名称          | 类型      | 描述               |\n|-------------|---------|------------------|\n| 序号          | int64   | -                |\n| 交易营业部名称     | object  | -                |\n| 买入金额        | float64 | -                |\n| 买入金额-占总成交比例 | float64 | -                |\n| 卖出金额-占总成交比例 | float64 | -                |\n| 净额          | float64 | -                |\n| 类型          | object  | 该字段主要处理多种龙虎榜标准问题 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lhb_stock_detail_em_df = ak.stock_lhb_stock_detail_em(symbol=\"600077\", date=\"20070416\", flag=\"买入\")\nprint(stock_lhb_stock_detail_em_df)\n```\n\n数据示例\n\n```\n   序号                  交易营业部名称  ...          净额                        类型\n0   1           国泰君安证券股份有限公司总部  ...  5025114.99  有价格涨跌幅限制的日换手率达到20％的前三只证券\n1   2  中银国际证券有限责任公司武汉黄孝河路证券营业部  ...  3435790.02  有价格涨跌幅限制的日换手率达到20％的前三只证券\n2   3    华泰证券有限责任公司梧州蝶山二路证券营业部  ...  2723460.00  有价格涨跌幅限制的日换手率达到20％的前三只证券\n3   4    东吴证券有限责任公司昆山前进中路证券营业部  ...  1844064.62  有价格涨跌幅限制的日换手率达到20％的前三只证券\n4   5    国信证券有限责任公司深圳红岭中路证券营业部  ...  1770274.92  有价格涨跌幅限制的日换手率达到20％的前三只证券\n[5 rows x 8 columns]\n```\n\n##### 龙虎榜-营业部排行\n\n###### 龙虎榜-营业部排行-上榜次数最多\n\n接口: stock_lh_yyb_most\n\n目标地址: https://data.10jqka.com.cn/market/longhu/\n\n描述: 龙虎榜-营业部排行-上榜次数最多\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称        | 类型     | 描述  |\n|-----------|--------|-----|\n| 序号        | int64  | -   |\n| 营业部名称     | object | -   |\n| 上榜次数      | int64  | -   |\n| 合计动用资金    | object | -   |\n| 年内上榜次数    | int64  | -   |\n| 年内买入股票只数  | int64  | -   |\n| 年内3日跟买成功率 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lh_yyb_most_df = ak.stock_lh_yyb_most()\nprint(stock_lh_yyb_most_df)\n```\n\n数据示例\n\n```\n      序号                         营业部名称  上榜次数  ... 年内上榜次数  年内买入股票只数  年内3日跟买成功率\n0      1  东方财富证券股份有限公司拉萨金融城南环...  一线游资    15  ...   3160      2369     41.40%\n1      2  东方财富证券股份有限公司拉萨东环路第二...  一线游资    14  ...   4145      2978     43.94%\n2      3  东方财富证券股份有限公司拉萨团结路第二...  一线游资    13  ...   3985      2856     43.21%\n3      4        东方财富证券股份有限公司拉萨团结路第一...    13  ...   2685      1858     44.00%\n4      5                   深股通专用  一线游资    11  ...   1780      1567     44.99%\n..   ...                           ...   ...  ...    ...       ...        ...\n288  289  华泰证券股份有限公司上海奉贤区望园南路...  跟风高手     1  ...     37        11    100.00%\n289  290          华创证券有限责任公司贵阳北京路证券营业部     1  ...      4         1      无符合数据\n290  291        中信建投证券股份有限公司东三环中路证券...     1  ...      4         1      无符合数据\n291  292        国泰君安证券股份有限公司深圳福田中心区...     1  ...     43        24     48.00%\n292  293         大同证券有限责任公司运城人民北路证券营业部     1  ...      1         1      无符合数据\n[293 rows x 7 columns]\n```\n\n###### 龙虎榜-营业部排行-资金实力最强\n\n接口: stock_lh_yyb_capital\n\n目标地址: https://data.10jqka.com.cn/market/longhu/\n\n描述: 龙虎榜-营业部排行-资金实力最强\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型     | 描述  |\n|----------|--------|-----|\n| 序号       | int64  | -   |\n| 营业部名称    | object | -   |\n| 今日最高操作   | int64  | -   |\n| 今日最高金额   | object | -   |\n| 今日最高买入金额 | object | -   |\n| 累计参与金额   | object | -   |\n| 累计买入金额   | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lh_yyb_capital_df = ak.stock_lh_yyb_capital()\nprint(stock_lh_yyb_capital_df)\n```\n\n数据示例\n\n```\n      序号                         营业部名称  今日最高操作  今日最高金额 今日最高买入金额  累计参与金额  累计买入金额\n0      1   华宝证券股份有限公司上海东大名路证券营业部  一线游资       5  14.72亿    7.35亿  20.32亿  10.18亿\n1      2  东方证券股份有限公司上海松江区沪亭北路...  知名游资       2   8.98亿    4.49亿  10.80亿   5.40亿\n2      3         华鑫证券有限责任公司上海分公司  一线游资       8   8.63亿    4.32亿  12.23亿   6.52亿\n3      4        国泰君安证券股份有限公司成都双庆路证券...       2   8.00亿    4.00亿   9.77亿   4.88亿\n4      5        东方证券股份有限公司上海静安区延平路证...       2   4.60亿    2.30亿   6.36亿   3.18亿\n..   ...                           ...     ...     ...      ...     ...     ...\n288  289        长江证券股份有限公司北京百万庄大街证券...       1   2.00万    2.00万   2.00万   2.00万\n289  290          国联证券股份有限公司无锡中山路证券营业部       1   1.87万     0.00   1.87万    0.00\n290  291        中信建投证券股份有限公司武汉建设八路证...       1   1.79万    1.79万   1.79万   1.79万\n291  292          长江证券股份有限公司成都东大街证券营业部       1   1.74万     0.00   1.74万    0.00\n292  293           中国银河证券股份有限公司德清证券营业部       1   1.21万     0.00   1.21万    0.00\n[293 rows x 7 columns]\n```\n\n###### 龙虎榜-营业部排行-抱团操作实力\n\n接口: stock_lh_yyb_control\n\n目标地址: https://data.10jqka.com.cn/market/longhu/\n\n描述: 龙虎榜-营业部排行-抱团操作实力\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称        | 类型     | 描述  |\n|-----------|--------|-----|\n| 序号        | int64  | -   |\n| 营业部名称     | object | -   |\n| 携手营业部家数   | int64  | -   |\n| 年内最佳携手对象  | object | -   |\n| 年内最佳携手股票数 | int64  | -   |\n| 年内最佳携手成功率 | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lh_yyb_control_df = ak.stock_lh_yyb_control()\nprint(stock_lh_yyb_control_df)\n```\n\n数据示例\n\n```\n      序号                         营业部名称  ...  年内最佳携手股票数 年内最佳携手成功率\n0      1                   深股通专用  一线游资  ...        207    50.73%\n1      2  东方财富证券股份有限公司拉萨金融城南环...  一线游资  ...        240    42.44%\n2      3  东方财富证券股份有限公司拉萨团结路第二...  一线游资  ...        241    46.86%\n3      4        东方财富证券股份有限公司拉萨团结路第一...  ...        241    46.86%\n4      5  东方财富证券股份有限公司拉萨东环路第二...  一线游资  ...        241    46.03%\n..   ...                           ...  ...        ...       ...\n263  264         海通证券股份有限公司常熟海虞北路证券营业部  ...          1     无符合数据\n264  265          兴业证券股份有限公司福州湖东路证券营业部  ...          4     无符合数据\n265  266         光大证券股份有限公司贵阳长岭北路证券营业部  ...          2     无符合数据\n266  267        华泰证券股份有限公司深圳平安金融中心证...  ...          3     无符合数据\n267  268               中信证券股份有限公司深圳分公司  ...          4     无符合数据\n[268 rows x 6 columns]\n```\n\n##### 龙虎榜-每日详情\n\n接口: stock_lhb_detail_daily_sina\n\n目标地址: https://vip.stock.finance.sina.com.cn/q/go.php/vInvestConsult/kind/lhb/index.phtml\n\n描述: 新浪财经-龙虎榜-每日详情\n\n限量: 单次返回指定 date 的所有数据\n\n输入参数\n\n| 名称   | 类型  | 描述                   |\n|------|-----|----------------------|\n| date | str | date=\"20240222\"; 交易日 |\n\n输出参数\n\n| 名称   | 类型      | 描述       |\n|------|---------|----------|\n| 序号   | int64   | -        |\n| 股票代码 | object  | -        |\n| 股票名称 | object  | -        |\n| 收盘价  | float64 | 注意单位: 元  |\n| 对应值  | float64 | 注意单位: %  |\n| 成交量  | float64 | 注意单位: 万股 |\n| 成交额  | float64 | 注意单位: 万元 |\n| 指标   | object  | 注意单位: 万元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lhb_detail_daily_sina_df = ak.stock_lhb_detail_daily_sina(date=\"20240222\")\nprint(stock_lhb_detail_daily_sina_df)\n```\n\n数据示例\n\n```\n    序号    股票代码  ...          成交额                                                 指标\n0    1  000005  ...   12350.1150           连续三个交易日内，涨幅偏离值累计达到12%的ST证券、*ST证券和未完成股改证券\n1    2  000023  ...    5569.3887           连续三个交易日内，涨幅偏离值累计达到12%的ST证券、*ST证券和未完成股改证券\n2    3  002087  ...    7799.9948           连续三个交易日内，涨幅偏离值累计达到12%的ST证券、*ST证券和未完成股改证券\n3    4  002251  ...   17824.5730           连续三个交易日内，涨幅偏离值累计达到12%的ST证券、*ST证券和未完成股改证券\n4    5  002309  ...     625.8694           连续三个交易日内，涨幅偏离值累计达到12%的ST证券、*ST证券和未完成股改证券\n5    1  000017  ...  182261.0964                                         振幅值达15%的证券\n6    2  002767  ...   19027.4927                                         振幅值达15%的证券\n7    3  002779  ...   26323.3751                                         振幅值达15%的证券\n8    4  002976  ...   21965.7357                                         振幅值达15%的证券\n9    5  603958  ...   88089.9000                                         振幅值达15%的证券\n10   6  600715  ...   30483.4000                                         振幅值达15%的证券\n11   7  601599  ...   83517.0300                                         振幅值达15%的证券\n12   1  000017  ...  182261.0964                                         换手率达20%的证券\n13   2  000628  ...  338104.2782                                         换手率达20%的证券\n14   3  001300  ...   26419.9729                                         换手率达20%的证券\n15   4  001314  ...   55316.8666                                         换手率达20%的证券\n16   5  001376  ...   22526.3696                                         换手率达20%的证券\n17   6  603082  ...   57471.2900                                         换手率达20%的证券\n18   7  600520  ...   96413.6700                                         换手率达20%的证券\n19   8  601136  ...  254881.6100                                         换手率达20%的证券\n20   9  600355  ...   43150.3900                                         换手率达20%的证券\n21  10  603375  ...   21939.2800                                         换手率达20%的证券\n22  11  837748  ...   17402.7500                                         换手率达20%的证券\n23  12  871753  ...   32244.5500                                         换手率达20%的证券\n24  13  873122  ...   29711.8900                                         换手率达20%的证券\n25  14  870976  ...    9089.6900                                         换手率达20%的证券\n26  15  837592  ...   11167.0400                                         换手率达20%的证券\n27   1  000070  ...   87688.7663                                        涨幅偏离值达7%的证券\n28   2  000536  ...   40405.8869                                        涨幅偏离值达7%的证券\n29   3  000628  ...  338104.2782                                        涨幅偏离值达7%的证券\n30   4  002657  ...   58771.5639                                        涨幅偏离值达7%的证券\n31   5  002916  ...   48520.0120                                        涨幅偏离值达7%的证券\n32   6  601996  ...   22519.3300                                        涨幅偏离值达7%的证券\n33   7  600792  ...   30895.5200                                        涨幅偏离值达7%的证券\n34   8  603528  ...   29088.9000                                        涨幅偏离值达7%的证券\n35   9  603963  ...   10527.9800                                        涨幅偏离值达7%的证券\n36  10  600602  ...   87019.3500                                        涨幅偏离值达7%的证券\n37   1  000416  ...   15786.0704  连续三个交易日内，日均换手率与前五个交易日的日均换手率的比值达到30倍，且换手率累计达20%的股票\n38   1  002217  ...   76899.5978                            连续三个交易日内，涨幅偏离值累计达20%的证券\n39   2  002789  ...   10830.8319                            连续三个交易日内，涨幅偏离值累计达20%的证券\n40   3  603363  ...   59315.0400                            连续三个交易日内，涨幅偏离值累计达20%的证券\n41   1  300157  ...   30524.4363                                                NaN\n42   2  300209  ...    1587.7636                                                NaN\n43   3  300321  ...   13573.3626                                                NaN\n44   1  300188  ...   48544.7464                                                NaN\n45   2  300210  ...   19151.3472                                                NaN\n46   3  300249  ...   34312.9720                                                NaN\n47   4  301252  ...   13744.3625                                                NaN\n48   5  301318  ...   50108.3350                                                NaN\n49   1  300781  ...  153086.7566                                                NaN\n50   2  300949  ...   26507.2743                                                NaN\n51   3  301502  ...   25688.4905                                                NaN\n52   4  301516  ...   60720.4662                                                NaN\n53   5  301577  ...   24623.2346                                                NaN\n54   6  688709  ...   58862.6200                                                NaN\n[55 rows x 8 columns]\n```\n\n##### 龙虎榜-个股上榜统计\n\n接口: stock_lhb_ggtj_sina\n\n目标地址: https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/ggtj/index.phtml\n\n描述: 新浪财经-龙虎榜-个股上榜统计\n\n限量: 单次返回指定 symbol 的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                |\n|--------|-----|-----------------------------------------------------------------------------------|\n| symbol | str | symbol=\"5\"; choice of {\"5\": 最近 5 天; \"10\": 最近 10 天; \"30\": 最近 30 天; \"60\": 最近 60 天;} |\n\n输出参数\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 股票代码  | object  | -       |\n| 股票名称  | object  | -       |\n| 上榜次数  | int64   | -       |\n| 累积购买额 | float64 | 注意单位: 万 |\n| 累积卖出额 | float64 | 注意单位: 万 |\n| 净额    | float64 | 注意单位: 万 |\n| 买入席位数 | int64   | -       |\n| 卖出席位数 | int64   | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lhb_ggtj_sina_df = ak.stock_lhb_ggtj_sina(symbol=\"5\")\nprint(stock_lhb_ggtj_sina_df)\n```\n\n数据示例\n\n```\n     股票代码 股票名称  上榜次数  累积购买额   累积卖出额   净额  买入席位数  卖出席位数\n0    300364  中文在线     2  171289.25   97538.13   73751.12      9      9\n1    000001  平安银行     1  126080.24   64719.50   61360.74      5      4\n2    002673  西部证券     1   22404.44    8677.21   13727.22      5      4\n3    601595  上海电影     1   26953.47   13537.77   13415.70      3      4\n4    601136  首创证券     2   50349.55   37874.81   12474.74      9      7\n..      ...   ...   ...        ...        ...        ...    ...    ...\n310  001314  亿道信息     4   27524.67   46756.32  -19231.65     13     10\n311  300502   新易盛     1  122834.08  142750.78  -19916.70      5      5\n312  002229  鸿博股份     2  116669.40  137884.32  -21214.92     10      9\n313  000628  高新发展     4  372969.77  421664.91  -48695.14     14     15\n314  603259  药明康德     1   66436.38  248845.50 -182409.12      5      3\n[315 rows x 8 columns]\n```\n\n##### 龙虎榜-营业上榜统计\n\n接口: stock_lhb_yytj_sina\n\n目标地址: https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/yytj/index.phtml\n\n描述: 新浪财经-龙虎榜-营业上榜统计\n\n限量: 单次返回指定 symbol 的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                |\n|--------|-----|-----------------------------------------------------------------------------------|\n| symbol | str | symbol=\"5\"; choice of {\"5\": 最近 5 天; \"10\": 最近 10 天; \"30\": 最近 30 天; \"60\": 最近 60 天;} |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 营业部名称  | object  | -       |\n| 上榜次数   | int64   | -       |\n| 累积购买额  | float64 | 注意单位: 万 |\n| 买入席位数  | int64   | -       |\n| 累积卖出额  | float64 | 注意单位: 万 |\n| 卖出席位数  | int64   | -       |\n| 买入前三股票 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lhb_yytj_sina_df = ak.stock_lhb_yytj_sina(symbol=\"5\")\nprint(stock_lhb_yytj_sina_df)\n```\n\n数据示例\n\n```\n                营业部名称  上榜次数    累积购买额  ...    累积卖出额  卖出席位数           买入前三股票\n0      渤海证券股份有限公司天津滨海新区第一分公司     1     0.00  ...   116.29      1             ST星源\n1       平安证券股份有限公司深圳香蜜湖证券营业部     3   879.44  ...   522.60      1   科新发展,ST星源,中重科技\n2       华泰证券股份有限公司姜堰东大街证券营业部     2     0.00  ...   165.14      2       ST星源,*ST西发\n3       海通证券股份有限公司庆阳西大街证券营业部     2     0.00  ...   504.69      2             ST星源\n4    东方财富证券股份有限公司山南香曲东路证券营业部    26  5593.35  ...  5962.82     17  亚世光电,中视传媒,光大嘉宝,\n..                       ...   ...      ...  ...      ...    ...              ...\n315          华泰证券股份有限公司湖南分公司     7  6542.40  ...  3553.71      2        哈森股份,开元教育\n316  上海证券有限责任公司绍兴新昌人民西路证券营业部     1  1458.00  ...     0.00      0             昂立教育\n317     华安证券股份有限公司合肥高新区证券营业部     5  1868.41  ...  1788.15      2   中科金财,昀冢科技,普路通,\n318     兴业证券股份有限公司福州湖东路证券营业部     1  1047.27  ...     0.00      0              香飘飘\n319  申万宏源证券有限公司上海徐汇区龙漕路证券营业部     1   678.26  ...     0.00      0            *ST碳元\n[320 rows x 7 columns]\n```\n\n##### 龙虎榜-机构席位追踪\n\n接口: stock_lhb_jgzz_sina\n\n目标地址: https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/jgzz/index.phtml\n\n描述: 新浪财经-龙虎榜-机构席位追踪\n\n限量: 单次返回指定 symbol 的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                |\n|--------|-----|-----------------------------------------------------------------------------------|\n| symbol | str | symbol=\"5\"; choice of {\"5\": 最近 5 天; \"10\": 最近 10 天; \"30\": 最近 30 天; \"60\": 最近 60 天;} |\n\n输出参数\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 股票代码  | object  | -       |\n| 股票名称  | object  | -       |\n| 累积买入额 | float64 | 注意单位: 万 |\n| 买入次数  | float64 | -       |\n| 累积卖出额 | float64 | 注意单位: 万 |\n| 卖出次数  | float64 | -       |\n| 净额    | float64 | 注意单位: 万 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lhb_jgzz_sina_df = ak.stock_lhb_jgzz_sina(symbol=\"5\")\nprint(stock_lhb_jgzz_sina_df)\n```\n\n数据示例\n\n```\n     股票代码  股票名称  累积买入额  买入次数  累积卖出额  卖出次数  净额\n0    688498  源杰科技  19589.28     6   3035.09     2  16554.19\n1    300308  中际旭创  19269.73     1   9088.94     1  10180.79\n2    603135  中重科技   5824.15     1      0.00     0   5824.15\n3    003032  传智教育   5388.51     4    118.46     0   5270.05\n4    688601   力芯微  10427.99     6   5463.37     4   4964.62\n..      ...   ...       ...   ...       ...   ...       ...\n192  000628  高新发展   8635.84     2  21545.41     3 -12909.57\n193  300063  天龙集团   7426.88     1  20736.26     5 -13309.38\n194  002463  沪电股份   4700.87     1  18997.89     3 -14297.02\n195  300781  因赛集团  13758.05     2  39308.41     8 -25550.36\n196  603259  药明康德      0.00     0  54874.30     3 -54874.30\n[197 rows x 7 columns]\n```\n\n##### 龙虎榜-机构席位成交明细\n\n接口: stock_lhb_jgmx_sina\n\n目标地址: https://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/jgzz/index.phtml\n\n描述: 新浪财经-龙虎榜-机构席位成交明细\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 股票代码    | object  | -       |\n| 股票名称    | object  | -       |\n| 交易日期    | object  | -       |\n| 机构席位买入额 | float64 | 注意单位: 万 |\n| 机构席位卖出额 | float64 | 注意单位: 万 |\n| 类型      | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_lhb_jgmx_sina_df = ak.stock_lhb_jgmx_sina()\nprint(stock_lhb_jgmx_sina_df)\n```\n\n数据示例\n\n```\n    股票代码  股票名称    交易日期  机构席位买入额(万)  机构席位卖出额(万)   类型\n0    001300   三柏硕  2024-02-23     2231.89     5214.88   换手率达20%的证券\n1    301378   通达海  2024-02-23      249.88     2318.76          NaN\n2    300781  因赛集团  2024-02-23     7237.09    20345.79          NaN\n3    300486  东杰智能  2024-02-23     3921.15     7344.49          NaN\n4    300078  思创医惠  2024-02-23     2423.62     4956.84          NaN\n..      ...   ...         ...         ...         ...          ...\n235  301516   中远通  2024-02-19     1606.70       78.07          NaN\n236  300624  万兴科技  2024-02-19        0.00    10913.05          NaN\n237  002281  光迅科技  2024-02-19      224.76     2618.77  涨幅偏离值达7%的证券\n238  300067   安诺其  2024-02-19     1329.52     2784.87          NaN\n239  002621   美吉姆  2024-02-19      833.72     1391.98   振幅值达15%的证券\n[240 rows x 6 columns]\n```\n\n#### 首发申报信息\n\n接口: stock_ipo_declare_em\n\n目标地址: https://data.eastmoney.com/xg/xg/sbqy.html\n\n描述: 东方财富网-数据中心-新股申购-首发申报信息-首发申报企业信息\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型     | 描述 |\n|--------|--------|----|\n| 序号     | int64  | -  |\n| 企业名称   | object | -  |\n| 最新状态   | object | -  |\n| 注册地    | object | -  |\n| 保荐机构   | object | -  |\n| 律师事务所  | object | -  |\n| 会计师事务所 | object | -  |\n| 拟上市地点  | object | -  |\n| 更新日期   | object | -  |\n| 招股说明书  | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_ipo_declare_em_df = ak.stock_ipo_declare_em()\nprint(stock_ipo_declare_em_df)\n```\n\n数据示例\n\n```\n      序号     申报企业 拟上市地  ...               会计师事务所        律师事务所      备注\n0      1     奥精医疗科技股份有限公司  科创板  ...     立信会计师事务所(特殊普通合伙)  北京观韬中茂律师事务所  进一步问询中\n1      2       爱威科技股份有限公司  科创板  ...     天健会计师事务所(特殊普通合伙)    湖南启元律师事务所  进一步问询中\n2      3   北京弘成立业科技股份有限公司  创业板  ...     大华会计师事务所(特殊普通合伙)   北京市君合律师事务所  进一步问询中\n3      4   北京海天瑞声科技股份有限公司  科创板  ...  毕马威华振会计师事务所(特殊普通合伙)   北京市天元律师事务所  进一步问询中\n4      5  北京挖金客信息科技股份有限公司  创业板  ...     容诚会计师事务所(特殊普通合伙)  国浩律师(北京)事务所  进一步问询中\n..   ...              ...  ...  ...                  ...          ...     ...\n106  107   浙江嘉益保温科技股份有限公司  创业板  ...     天健会计师事务所(特殊普通合伙)   北京市金杜律师事务所  进一步问询中\n107  108   浙江日发纺织机械股份有限公司  创业板  ...     天健会计师事务所(特殊普通合伙)    浙江天册律师事务所  进一步问询中\n108  109     浙江泰福泵业股份有限公司  创业板  ...     天健会计师事务所(特殊普通合伙)  国浩律师(杭州)事务所  进一步问询中\n109  110     中兰环保科技股份有限公司  创业板  ...     立信会计师事务所(特殊普通合伙)    北京国枫律师事务所  进一步问询中\n110  111   中联云港数据科技股份有限公司  创业板  ...   天职国际会计师事务所(特殊普通合伙)  国浩律师(北京)事务所  进一步问询中\n```\n\n#### IPO审核信息\n\n##### 全部\n\n接口: stock_register_all_em\n\n目标地址: https://data.eastmoney.com/xg/ipo/\n\n描述: 东方财富网-数据中心-新股数据-IPO审核信息-全部\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型     | 描述 |\n|--------|--------|----|\n| 序号     | int64  | -  |\n| 企业名称   | object | -  |\n| 最新状态   | object | -  |\n| 注册地    | object | -  |\n| 行业     | object | -  |\n| 保荐机构   | object | -  |\n| 律师事务所  | object | -  |\n| 会计师事务所 | object | -  |\n| 更新日期   | object | -  |\n| 受理日期   | object | -  |\n| 拟上市地点  | object | -  |\n| 招股说明书  | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_register_all_em_df = ak.stock_register_all_em()\nprint(stock_register_all_em_df)\n```\n\n数据示例\n\n```\n       序号  ...                                    招股说明书\n0        1  ...  https://pdf.dfcfw.com/pdf/H2_AN202512251807880...\n1        2  ...  https://pdf.dfcfw.com/pdf/H2_AN202506301700470...\n2        3  ...  https://pdf.dfcfw.com/pdf/H2_AN202512241807247...\n3        4  ...  https://pdf.dfcfw.com/pdf/H2_AN202512241807270...\n4        5  ...  https://pdf.dfcfw.com/pdf/H2_AN202512241807300...\n...    ...  ...                                                ...\n4145  4146  ...  https://pdf.dfcfw.com/pdf/H2_AN201609240017728...\n4146  4147  ...  https://pdf.dfcfw.com/pdf/H2_AN201607140016578...\n4147  4148  ...  https://pdf.dfcfw.com/pdf/H2_AN201611160102988...\n4148  4149  ...  https://pdf.dfcfw.com/pdf/H2_AN201410300007493...\n4149  4150  ...  https://pdf.dfcfw.com/pdf/H2_AN201611080074226...\n[4150 rows x 12 columns]\n```\n\n##### 科创板\n\n接口: stock_register_kcb\n\n目标地址: https://data.eastmoney.com/xg/ipo/\n\n描述: 东方财富网-数据中心-新股数据-IPO审核信息-科创板\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 序号     | int64  | -   |\n| 发行人全称  | object | -   |\n| 审核状态   | object | -   |\n| 注册地    | object | -   |\n| 证监会行业  | object | -   |\n| 保荐机构   | object | -   |\n| 律师事务所  | object | -   |\n| 会计师事务所 | object | -   |\n| 更新日期   | object | -   |\n| 受理日期   | object | -   |\n| 拟上市地点  | object | -   |\n| 招股说明书  | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_register_kcb_df = ak.stock_register_kcb()\nprint(stock_register_kcb_df)\n```\n\n数据示例\n\n```\n       序号              企业名称     最新状态 注册地                行业          保荐机构  \\\n0      1    联芸科技(杭州)股份有限公司     注册生效  浙江  计算机、通信和其他电子设备制造业  中信建投证券股份有限公司\n1      2  赛诺威盛科技(北京)股份有限公司       终止  北京           专用设备制造业    国金证券股份有限公司\n2      3   青岛信芯微电子科技股份有限公司       终止  山东        软件和信息技术服务业  中国国际金融股份有限公司\n3      4   北京凯普林光电科技股份有限公司  上市委会议通过  北京  计算机、通信和其他电子设备制造业  国泰君安证券股份有限公司\n4      5    深圳垦拓流体技术股份有限公司       终止  广东           通用设备制造业    中信证券股份有限公司\n..   ...               ...      ...  ..               ...           ...\n866  867        澜起科技股份有限公司     注册生效  上海  计算机、通信和其他电子设备制造业    中信证券股份有限公司\n867  868      浙江杭可科技股份有限公司     注册生效  浙江           专用设备制造业    国信证券股份有限公司\n868  869      苏州天准科技股份有限公司     注册生效  江苏           专用设备制造业    海通证券股份有限公司\n869  870    苏州华兴源创科技股份有限公司     注册生效  江苏           专用设备制造业  华泰联合证券有限责任公司\n870  871    烟台睿创微纳技术股份有限公司     注册生效  山东  计算机、通信和其他电子设备制造业    中信证券股份有限公司\n           律师事务所              会计师事务所        更新日期        受理日期 拟上市地点  \\\n0     北京市君合律师事务所  德勤华永会计师事务所(特殊普通合伙)  2024-06-14  2022-12-28   科创板\n1     北京市中伦律师事务所    大信会计师事务所(特殊普通合伙)  2024-06-14  2023-03-27   科创板\n2     北京市君合律师事务所    天健会计师事务所(特殊普通合伙)  2024-06-14  2023-06-12   科创板\n3     北京市天元律师事务所    天健会计师事务所(特殊普通合伙)  2024-06-14  2023-05-09   科创板\n4     北京市中伦律师事务所    致同会计师事务所(特殊普通合伙)  2024-06-13  2023-12-27   科创板\n..           ...                 ...         ...         ...   ...\n866  国浩律师(上海)事务所    瑞华会计师事务所(特殊普通合伙)  2019-06-26  2019-04-01   科创板\n867   北京市金杜律师事务所    天健会计师事务所(特殊普通合伙)  2019-06-24  2019-04-15   科创板\n868    浙江六和律师事务所    瑞华会计师事务所(特殊普通合伙)  2019-06-20  2019-04-02   科创板\n869   上海市通力律师事务所  华普天健会计师事务所(特殊普通合伙)  2019-06-18  2019-03-27   科创板\n870   北京市中银律师事务所  信永中和会计师事务所(特殊普通合伙)  2019-06-18  2019-03-22   科创板\n                                                 招股说明书\n0    https://pdf.dfcfw.com/pdf/H2_AN202302171583296...\n1    https://pdf.dfcfw.com/pdf/H2_AN202303271584589...\n2    https://pdf.dfcfw.com/pdf/H2_AN202306121590862...\n3    https://pdf.dfcfw.com/pdf/H2_AN202305091586404...\n4    https://pdf.dfcfw.com/pdf/H2_AN202312271615032...\n..                                                 ...\n866  https://pdf.dfcfw.com/pdf/H2_AN201904011312907...\n867  https://pdf.dfcfw.com/pdf/H2_AN201904151319351...\n868  https://pdf.dfcfw.com/pdf/H2_AN201904021313966...\n869  https://pdf.dfcfw.com/pdf/H2_AN201903271310281...\n870  https://pdf.dfcfw.com/pdf/H2_AN201903221308711...\n[871 rows x 12 columns]\n```\n\n###### 创业板\n\n接口: stock_register_cyb\n\n目标地址: https://data.eastmoney.com/xg/ipo/\n\n描述: 东方财富网-数据中心-新股数据-IPO审核信息-创业板\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 序号     | int32  | -   |\n| 发行人全称  | object | -   |\n| 审核状态   | object | -   |\n| 注册地    | object | -   |\n| 证监会行业  | object | -   |\n| 保荐机构   | object | -   |\n| 律师事务所  | object | -   |\n| 会计师事务所 | object | -   |\n| 更新日期   | object | -   |\n| 受理日期   | object | -   |\n| 拟上市地点  | object | -   |\n| 招股说明书  | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_register_cyb_df = ak.stock_register_cyb()\nprint(stock_register_cyb_df)\n```\n\n数据示例\n\n```\n       序号               企业名称  最新状态 注册地          行业              保荐机构  \\\n0        1   北京易诚互动网络技术股份有限公司    撤回  北京  软件和信息技术服务业        东北证券股份有限公司\n1        2     基因科技(上海)股份有限公司    撤回  上海  科技推广和应用服务业        广发证券股份有限公司\n2        3         黄山谷捷股份有限公司   已问询  安徽       汽车制造业        国元证券股份有限公司\n3        4       迪嘉药业集团股份有限公司    撤回  山东       医药制造业        民生证券股份有限公司\n4        5   中航上大高温合金材料股份有限公司  提交注册  河北       金属制品业      中国国际金融股份有限公司\n...    ...                ...   ...  ..         ...               ...\n1122  1123    宁波卡倍亿电气技术股份有限公司  注册生效  浙江       汽车制造业        东莞证券股份有限公司\n1123  1124      杨凌美畅新材料股份有限公司  注册生效  陕西    非金属矿物制品业      中信建投证券股份有限公司\n1124  1125   北京锋尚世纪文化传媒股份有限公司  注册生效  北京       文化艺术业      中信建投证券股份有限公司\n1125  1126  康泰医学系统(秦皇岛)股份有限公司  注册生效  河北     专用设备制造业  申万宏源证券承销保荐有限责任公司\n1126  1127      安徽蓝盾光电子股份有限公司  注册生效  安徽     仪器仪表制造业        华龙证券股份有限公司\n            律师事务所              会计师事务所        更新日期        受理日期 拟上市地点  \\\n0       北京德恒律师事务所  信永中和会计师事务所(特殊普通合伙)  2024-06-14  2022-06-27   创业板\n1      上海市广发律师事务所    容诚会计师事务所(特殊普通合伙)  2024-06-13  2023-06-27   创业板\n2       安徽天禾律师事务所  中审众环会计师事务所(特殊普通合伙)  2024-06-12  2023-05-08   创业板\n3       上海泽昌律师事务所    天健会计师事务所(特殊普通合伙)  2024-06-12  2023-06-16   创业板\n4      北京市嘉源律师事务所    立信会计师事务所(特殊普通合伙)  2024-06-11  2022-06-29   创业板\n...           ...                 ...         ...         ...   ...\n1122  上海市锦天城律师事务所    立信会计师事务所(特殊普通合伙)  2020-07-29  2020-06-22   创业板\n1123    北京国枫律师事务所  立信中联会计师事务所(特殊普通合伙)  2020-07-24  2020-06-24   创业板\n1124   北京市中伦律师事务所  信永中和会计师事务所(特殊普通合伙)  2020-07-24  2020-06-22   创业板\n1125   北京市中伦律师事务所  德勤华永会计师事务所(特殊普通合伙)  2020-07-24  2020-07-02   创业板\n1126    安徽承义律师事务所    容诚会计师事务所(特殊普通合伙)  2020-07-24  2020-06-30   创业板\n                                                  招股说明书\n0     https://pdf.dfcfw.com/pdf/H2_AN202401251618103...\n1     https://pdf.dfcfw.com/pdf/H2_AN202312291615486...\n2     https://pdf.dfcfw.com/pdf/H2_AN202406121636034...\n3     https://pdf.dfcfw.com/pdf/H2_AN202311161611034...\n4     https://pdf.dfcfw.com/pdf/H2_AN202406111635973...\n...                                                 ...\n1122  https://pdf.dfcfw.com/pdf/H2_AN202008121398114...\n1123  https://pdf.dfcfw.com/pdf/H2_AN202008091397452...\n1124  https://pdf.dfcfw.com/pdf/H2_AN202008091397452...\n1125  https://pdf.dfcfw.com/pdf/H2_AN202008131398337...\n1126  https://pdf.dfcfw.com/pdf/H2_AN202008161398984...\n[1127 rows x 12 columns]\n```\n\n###### 上海主板\n\n接口: stock_register_sh\n\n目标地址: https://data.eastmoney.com/xg/ipo/\n\n描述: 东方财富网-数据中心-新股数据-IPO审核信息-上海主板\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 序号     | int32  | -   |\n| 发行人全称  | object | -   |\n| 审核状态   | object | -   |\n| 注册地    | object | -   |\n| 证监会行业  | object | -   |\n| 保荐机构   | object | -   |\n| 律师事务所  | object | -   |\n| 会计师事务所 | object | -   |\n| 更新日期   | object | -   |\n| 受理日期   | object | -   |\n| 拟上市地点  | object | -   |\n| 招股说明书  | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_register_sh_df = ak.stock_register_sh()\nprint(stock_register_sh_df)\n```\n\n数据示例\n\n```\n      序号              企业名称       最新状态 注册地          行业              保荐机构  \\\n0      1      浙江亘古电缆股份有限公司         终止  浙江  电气机械和器材制造业        招商证券股份有限公司\n1      2  上海生生医药冷链科技股份有限公司         终止  上海  多式联运和运输代理业      中国国际金融股份有限公司\n2      3    新疆凯龙清洁能源股份有限公司         终止  新疆  开采专业及辅助性活动        东兴证券股份有限公司\n3      4      广州三晶电气股份有限公司  已收到注册申请材料  广东        None        民生证券股份有限公司\n4      5      合肥汇通控股股份有限公司  已收到注册申请材料  安徽        None      中银国际证券股份有限公司\n..   ...               ...        ...  ..         ...               ...\n874  875             上海数据港     已通过发审会  上海        None      中信建投证券股份有限公司\n875  876            镇海石化工程     已通过发审会  浙江        None        浙商证券股份有限公司\n876  877          浙江德创环保科技     已通过发审会  浙江        None        民生证券股份有限公司\n877  878           重庆建工集团*     已通过发审会  重庆        None        华融证券股份有限公司\n878  879            大连百傲化学     已通过发审会  辽宁        None  申万宏源证券承销保荐有限责任公司\n           律师事务所              会计师事务所        更新日期        受理日期 拟上市地点  \\\n0      北京国枫律师事务所    天健会计师事务所(特殊普通合伙)  2024-06-17  2023-03-03   沪主板\n1    上海市锦天城律师事务所    立信会计师事务所(特殊普通合伙)  2024-06-17  2023-06-30   沪主板\n2     北京市中伦律师事务所  信永中和会计师事务所(特殊普通合伙)  2024-06-14  2023-06-15   沪主板\n3      国信信扬律师事务所    立信会计师事务所(特殊普通合伙)  2024-06-13         NaT   沪主板\n4      安徽天禾律师事务所    容诚会计师事务所(特殊普通合伙)  2024-06-13         NaT   沪主板\n..           ...                 ...         ...         ...   ...\n874  上海市锦天城律师事务所    立信会计师事务所(特殊普通合伙)  2017-01-05         NaT   沪主板\n875   北京市天元律师事务所    天健会计师事务所(特殊普通合伙)  2017-01-05         NaT   沪主板\n876   北京市天元律师事务所    天健会计师事务所(特殊普通合伙)  2017-01-05         NaT   沪主板\n877   北京市金杜律师事务所    大信会计师事务所(特殊普通合伙)  2017-01-05         NaT   沪主板\n878    北京德恒律师事务所    瑞华会计师事务所(特殊普通合伙)  2017-01-05         NaT   沪主板\n                                                 招股说明书\n0    https://pdf.dfcfw.com/pdf/H2_AN202303031584027...\n1    https://pdf.dfcfw.com/pdf/H2_AN202306301591956...\n2    https://pdf.dfcfw.com/pdf/H2_AN202306151590972...\n3    https://pdf.dfcfw.com/pdf/H2_AN202303031584027...\n4    https://pdf.dfcfw.com/pdf/H2_AN202303031584027...\n..                                                 ...\n874  https://pdf.dfcfw.com/pdf/H2_AN201701150271855...\n875  https://pdf.dfcfw.com/pdf/H2_AN201701180277302...\n876  https://pdf.dfcfw.com/pdf/H2_AN201701170274362...\n877  https://pdf.dfcfw.com/pdf/H2_AN201701170274362...\n878  https://pdf.dfcfw.com/pdf/H2_AN201701160272431...\n[879 rows x 12 columns]\n```\n\n###### 深圳主板\n\n接口: stock_register_sz\n\n目标地址: https://data.eastmoney.com/xg/ipo/\n\n描述: 东方财富网-数据中心-新股数据-IPO审核信息-深圳主板\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 序号     | int32  | -   |\n| 发行人全称  | object | -   |\n| 审核状态   | object | -   |\n| 注册地    | object | -   |\n| 证监会行业  | object | -   |\n| 保荐机构   | object | -   |\n| 律师事务所  | object | -   |\n| 会计师事务所 | object | -   |\n| 更新日期   | object | -   |\n| 受理日期   | object | -   |\n| 拟上市地点  | object | -   |\n| 招股说明书  | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_register_sz_df = ak.stock_register_sz()\nprint(stock_register_sz_df)\n```\n\n数据示例\n\n```\n     序号             企业名称    最新状态 注册地            行业          保荐机构  \\\n0      1    山东金鸿新材料股份有限公司      撤回  山东      非金属矿物制品业    中泰证券股份有限公司\n1      2    金永和精工制造股份有限公司      撤回  山东         汽车制造业    中德证券有限责任公司\n2      3     江苏大艺科技股份有限公司      撤回  江苏       通用设备制造业  中信建投证券股份有限公司\n3      4   浙江新纳材料科技股份有限公司      撤回  浙江  化学原料及化学制品制造业    中信证券股份有限公司\n4      5  深圳宏业基岩土科技股份有限公司      中止  广东          None    招商证券股份有限公司\n..   ...              ...     ...  ..           ...           ...\n512  513         深圳市科达利实业  已通过发审会  广东          None  中国国际金融股份有限公司\n513  514         浙江威星智能仪表  已通过发审会  浙江          None    东吴证券股份有限公司\n514  515         高斯贝尔数码科技  已通过发审会  湖南          None    招商证券股份有限公司\n515  516           盐津铺子食品  已通过发审会  湖南          None    西部证券股份有限公司\n516  517           广东英联包装  已通过发审会  广东          None    国海证券股份有限公司\n           律师事务所              会计师事务所        更新日期        受理日期 拟上市地点  \\\n0     北京市汉坤律师事务所    永拓会计师事务所(特殊普通合伙)  2024-06-17  2023-12-28   深主板\n1      北京大成律师事务所  信永中和会计师事务所(特殊普通合伙)  2024-06-16  2023-06-30   深主板\n2    国浩律师(上海)事务所    天健会计师事务所(特殊普通合伙)  2024-06-15  2023-03-02   深主板\n3     北京市康达律师事务所    天健会计师事务所(特殊普通合伙)  2024-06-14  2023-03-01   深主板\n4      广东华商律师事务所    大华会计师事务所(特殊普通合伙)  2024-06-13         NaT   深主板\n..           ...                 ...         ...         ...   ...\n512    广东信达律师事务所    瑞华会计师事务所(特殊普通合伙)  2017-02-09         NaT   深主板\n513  国浩律师(杭州)事务所    天健会计师事务所(特殊普通合伙)  2017-01-19         NaT   深主板\n514    湖南启元律师事务所    天健会计师事务所(特殊普通合伙)  2017-01-12         NaT   深主板\n515    湖南启元律师事务所    天健会计师事务所(特殊普通合伙)  2017-01-05         NaT   深主板\n516    北京国枫律师事务所    立信会计师事务所(特殊普通合伙)  2017-01-05         NaT   深主板\n                                                 招股说明书\n0    https://pdf.dfcfw.com/pdf/H2_AN202312281615219...\n1    https://pdf.dfcfw.com/pdf/H2_AN202312261614904...\n2    https://pdf.dfcfw.com/pdf/H2_AN202312271615081...\n3    https://pdf.dfcfw.com/pdf/H2_AN202312291615534...\n4    https://pdf.dfcfw.com/pdf/H2_AN202307061592065...\n..                                                 ...\n512  https://pdf.dfcfw.com/pdf/H2_AN201702190353685...\n513  https://pdf.dfcfw.com/pdf/H2_AN201702060321215...\n514  https://pdf.dfcfw.com/pdf/H2_AN201701250290802...\n515  https://pdf.dfcfw.com/pdf/H2_AN201701180274398...\n516  https://pdf.dfcfw.com/pdf/H2_AN201701180274398...\n[517 rows x 12 columns]\n```\n\n###### 北交所\n\n接口: stock_register_bj\n\n目标地址: https://data.eastmoney.com/xg/ipo/\n\n描述: 东方财富网-数据中心-新股数据-IPO审核信息-北交所\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型     | 描述  |\n|--------|--------|-----|\n| 序号     | int32  | -   |\n| 发行人全称  | object | -   |\n| 审核状态   | object | -   |\n| 注册地    | object | -   |\n| 证监会行业  | object | -   |\n| 保荐机构   | object | -   |\n| 律师事务所  | object | -   |\n| 会计师事务所 | object | -   |\n| 更新日期   | object | -   |\n| 受理日期   | object | -   |\n| 拟上市地点  | object | -   |\n| 招股说明书  | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_register_bj_df = ak.stock_register_bj()\nprint(stock_register_bj_df)\n```\n\n数据示例\n\n```\n      序号              企业名称 最新状态      注册地                行业        保荐机构  \\\n0      1   浙江太湖远大新材料股份有限公司  已问询  浙江省 湖州市          橡胶和塑料制品业  招商证券股份有限公司\n1      2      大连瑞克科技股份有限公司  已问询  辽宁省 大连市      化学原料和化学制品制造业  国融证券股份有限公司\n2      3    江苏永创医药科技股份有限公司   终止  江苏省 淮安市      化学原料和化学制品制造业  开源证券股份有限公司\n3      4    成都成电光信科技股份有限公司  已问询  四川省 成都市        软件和信息技术服务业  广发证券股份有限公司\n4      5    浙江圣兆药物科技股份有限公司   终止  浙江省 杭州市             医药制造业  东吴证券股份有限公司\n..   ...               ...  ...      ...               ...         ...\n519  520      上海艾融软件股份有限公司   核准  上海市 崇明县        软件和信息技术服务业  光大证券股份有限公司\n520  521  北京颖泰嘉和生物科技股份有限公司   核准  北京市 昌平区      化学原料和化学制品制造业  西南证券股份有限公司\n521  522  晨越建设项目管理集团股份有限公司   终止  四川省 成都市           专业技术服务业  华福证券有限责任公司\n522  523        东亚装饰股份有限公司   终止  山东省 青岛市        建筑装饰和其他建筑业  红塔证券股份有限公司\n523  524      北京蓝山科技股份有限公司   终止  北京市 海淀区  计算机、通信和其他电子设备制造业  华龙证券股份有限公司\n           律师事务所                  会计师事务所        更新日期        受理日期 拟上市地点  \\\n0      北京大成律师事务所      公证天业会计师事务所(特殊普通合伙)  2024-06-13  2023-11-30   北交所\n1    北京海润天睿律师事务所        和信会计师事务所(特殊普通合伙)  2024-06-11  2023-12-28   北交所\n2      北京大成律师事务所      苏亚金诚会计师事务所(特殊普通合伙)  2024-06-07  2023-09-28   北交所\n3      北京国枫律师事务所      信永中和会计师事务所(特殊普通合伙)  2024-06-07  2023-09-27   北交所\n4     上海市联合律师事务所      立信中联会计师事务所(特殊普通合伙)  2024-06-06  2023-06-30   北交所\n..           ...                     ...         ...         ...   ...\n519   上海天衍禾律师事务所        天健会计师事务所(特殊普通合伙)  2020-06-12  2020-04-29   北交所\n520   北京市康达律师事务所  四川华信(集团)会计师事务所(特殊普通合伙)  2020-06-12  2020-04-28   北交所\n521   北京市中伦律师事务所      信永中和会计师事务所(特殊普通合伙)  2020-06-10  2020-04-28   北交所\n522   北京市中银律师事务所        立信会计师事务所(特殊普通合伙)  2020-05-26  2020-05-19   北交所\n523   北京市天元律师事务所     中兴财光华会计师事务所(特殊普通合伙)  2020-05-13  2020-04-29   北交所\n                                                 招股说明书\n0    https://pdf.dfcfw.com/pdf/H2_AN202406131636105...\n1    https://pdf.dfcfw.com/pdf/H2_AN202312281615150...\n2    https://pdf.dfcfw.com/pdf/H2_AN202309281600193...\n3    https://pdf.dfcfw.com/pdf/H2_AN202406071635887...\n4    https://pdf.dfcfw.com/pdf/H2_AN202306301591947...\n..                                                 ...\n519  https://pdf.dfcfw.com/pdf/H2_AN202007061389895...\n520  https://pdf.dfcfw.com/pdf/H2_AN202007061389821...\n521  https://pdf.dfcfw.com/pdf/H2_AN201507130010192...\n522  https://pdf.dfcfw.com/pdf/H2_AN201401220005024...\n523  https://pdf.dfcfw.com/pdf/H2_AN201406160006074...\n[524 rows x 12 columns]\n```\n\n##### 达标企业\n\n接口: stock_register_db\n\n目标地址: https://data.eastmoney.com/xg/cyb/\n\n描述: 东方财富网-数据中心-新股数据-注册制审核-达标企业\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称           | 类型      | 描述      |\n|--------------|---------|---------|\n| 序号           | int32   | -       |\n| 企业名称         | object  | -       |\n| 经营范围         | object  | -       |\n| 近三年营业收入-2019 | float64 | 注意单位: 元 |\n| 近三年净利润-2019  | float64 | 注意单位: 元 |\n| 近三年研发费用-2019 | object  | 注意单位: 元 |\n| 近三年营业收入-2018 | float64 | 注意单位: 元 |\n| 近三年净利润-2018  | float64 | 注意单位: 元 |\n| 近三年研发费用-2018 | object  | 注意单位: 元 |\n| 近三年营业收入-2017 | object  | 注意单位: 元 |\n| 近三年净利润-2017  | object  | 注意单位: 元 |\n| 近三年研发费用-2017 | object  | 注意单位: 元 |\n| 近两年累计净利润     | float64 | 注意单位: 元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_register_db_df = ak.stock_register_db()\nprint(stock_register_db_df)\n```\n\n数据示例\n\n```\n        序号              企业名称  ... 近三年研发费用-2017      近两年累计净利润\n0        1   上海宏力达信息技术股份有限公司  ...  19932141.20  3.360614e+08\n1        2   上海阿拉丁生化科技股份有限公司  ...   8962209.85  1.171064e+08\n2        3  河北华友文化遗产保护股份有限公司  ...   2203545.49  5.992881e+07\n3        4    大连豪森设备制造股份有限公司  ...  38364081.96  6.224462e+07\n4        5            九号有限公司  ...  91330278.85 -2.258809e+09\n    ...               ...  ...          ...           ...\n1713  1714  武汉同济现代医药科技股份有限公司  ...   2796051.27  2.762509e+07\n1714  1715      上海雷腾软件股份有限公司  ...   7793124.89  1.014579e+08\n1715  1716    上海银音信息科技股份有限公司  ...  12518776.19  1.107391e+07\n1716  1717    上海致远绿色能源股份有限公司  ...  18035201.48  3.533665e+07\n1717  1718    上海四维文化传媒股份有限公司  ...  16961496.21  2.896218e+07\n```\n\n#### 增发\n\n接口: stock_qbzf_em\n\n目标地址: https://data.eastmoney.com/other/gkzf.html\n\n描述: 东方财富网-数据中心-新股数据-增发-全部增发\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 股票代码   | object  | -       |\n| 股票简称   | object  | -       |\n| 增发代码   | object  | -       |\n| 发行方式   | object  | -       |\n| 发行总数   | int64   | 注意单位: 股 |\n| 网上发行   | object  | 注意单位: 股 |\n| 发行价格   | float64 | -       |\n| 最新价    | float64 | -       |\n| 发行日期   | object  | -       |\n| 增发上市日期 | object  | -       |\n| 锁定期    | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_qbzf_em_df = ak.stock_qbzf_em()\nprint(stock_qbzf_em_df)\n```\n\n数据示例\n\n```\n      股票代码  股票简称 增发代码  发行方式  ...  最新价    发行日期  增发上市日期  锁定期\n0     872931  无锡鼎邦  None  公开增发  ...    NaN  2024-03-27  2024-04-08  0.5年\n1     837023  芭薇股份  None  公开增发  ...  13.10  2024-03-20  2024-03-29  0.5年\n2     600773  西藏城投  None  定向增发  ...  12.21  2024-03-15  2024-04-02  0.5年\n3     600038  中直股份  None  定向增发  ...  39.27  2024-03-14  2024-03-19    3年\n4     600028  中国石化  None  定向增发  ...   6.50  2024-03-13  2024-03-18    3年\n      ...   ...   ...   ...  ...    ...         ...         ...   ...\n5656  601880  辽港股份  None  定向增发  ...   1.42         NaT  2021-02-09  None\n5657  600056  中国医药  None  定向增发  ...  11.03         NaT  2013-08-01  None\n5658  600372  中航机载  None  定向增发  ...  11.57         NaT  2023-04-19  None\n5659  600827  百联股份  None  定向增发  ...   9.09         NaT  2011-08-31  None\n5660  600332   白云山  None  定向增发  ...  29.13         NaT  2013-05-23  None\n[5661 rows x 11 columns]\n```\n\n#### 配股\n\n接口: stock_pg_em\n\n目标地址: https://data.eastmoney.com/xg/pg/\n\n描述: 东方财富网-数据中心-新股数据-配股\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 股票代码   | object  | -       |\n| 股票简称   | object  | -       |\n| 配售代码   | object  | -       |\n| 配股数量   | int64   | 注意单位: 股 |\n| 配股比例   | object  | -       |\n| 配股价    | float64 | -       |\n| 最新价    | float64 | -       |\n| 配股前总股本 | int64   | 注意单位: 股 |\n| 配股后总股本 | int64   | 注意单位: 股 |\n| 股权登记日  | object  | -       |\n| 缴款起始日期 | object  | -       |\n| 缴款截止日期 | object  | -       |\n| 上市日    | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_pg_em_df = ak.stock_pg_em()\nprint(stock_pg_em_df)\n```\n\n数据示例\n\n```\n     股票代码  股票简称   配售代码  ... 缴款起始日期   缴款截止日期    上市日\n0     000049  德赛电池  080049  ...  2023-11-30  2023-12-06  2023-12-25\n1     600081  东风科技  700081  ...  2023-08-02  2023-08-08  2023-08-24\n2     601916  浙商银行  760916  ...  2023-06-15  2023-06-21  2023-07-06\n3     300475  香农芯创  380475  ...  2023-02-08  2023-02-14  2023-03-03\n4     600459  贵研铂业  700459  ...  2022-12-14  2022-12-20  2023-01-04\n      ...   ...     ...  ...         ...         ...         ...\n1017  600651  飞乐音响    None  ...         NaT         NaT  1994-04-25\n1018  600653  申华控股    None  ...         NaT         NaT  1993-06-10\n1019  600609  金杯汽车    None  ...         NaT         NaT  1993-01-29\n1020  600601  方正科技    None  ...         NaT         NaT  1992-06-10\n1021  000002   万科A    None  ...  1991-06-01  1991-06-08         NaT\n[1022 rows x 13 columns]\n```\n\n#### 股票回购数据\n\n接口: stock_repurchase_em\n\n目标地址: https://data.eastmoney.com/gphg/hglist.html\n\n描述: 东方财富网-数据中心-股票回购-股票回购数据\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称             | 类型      | 描述      |\n|----------------|---------|---------|\n| 序号             | int64   | -       |\n| 股票代码           | object  | -       |\n| 股票简称           | object  | -       |\n| 最新价            | float64 | -       |\n| 计划回购价格区间       | float64 | 注意单位: 元 |\n| 计划回购数量区间-下限    | float64 | 注意单位: 股 |\n| 计划回购数量区间-上限    | float64 | 注意单位: 股 |\n| 占公告前一日总股本比例-下限 | float64 | 注意单位: % |\n| 占公告前一日总股本比例-上限 | float64 | 注意单位: % |\n| 计划回购金额区间-下限    | float64 | 注意单位: 元 |\n| 计划回购金额区间-上限    | float64 | 注意单位: 元 |\n| 回购起始时间         | object  | -       |\n| 实施进度           | object  | -       |\n| 已回购股份价格区间-下限   | float64 | 注意单位: % |\n| 已回购股份价格区间-上限   | float64 | 注意单位: % |\n| 已回购股份数量        | float64 | 注意单位: 股 |\n| 已回购金额          | float64 | 注意单位: 元 |\n| 最新公告日期         | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_repurchase_em_df = ak.stock_repurchase_em()\nprint(stock_repurchase_em_df)\n```\n\n数据示例\n\n```\n        序号 股票代码  股票简称  ...  已回购股份数量    已回购金额      最新公告日期\n0        1  600028  中国石化  ...         NaN           NaN  2022-08-29\n1        2  301021  英诺激光  ...      6500.0  1.625000e+05  2022-08-29\n2        3  688185   康希诺  ...    500000.0  1.137614e+08  2022-08-29\n3        4  603700  宁水集团  ...   2291336.0  4.005009e+07  2021-09-15\n4        5  000338  潍柴动力  ...  55950000.0  6.822452e+08  2022-08-27\n    ...     ...   ...  ...         ...           ...         ...\n1977  1978  002048  宁波华翔  ...  23152838.0  1.598245e+08  2012-08-16\n1978  1979  002032   苏泊尔  ...   2750000.0  3.467148e+07  2012-07-18\n1979  1980  002054  德美化工  ...   5484773.0  5.473750e+07  2012-01-05\n1980  1981  002048  宁波华翔  ...  13940012.0  1.442085e+08  2011-12-02\n1981  1982  600380   健康元  ...  29252223.0  2.999997e+08  2011-11-30\n```\n\n#### 股本结构\n\n接口: stock_zh_a_gbjg_em\n\n目标地址: https://emweb.securities.eastmoney.com/pc_hsf10/pages/index.html#/gbjg\n\n描述: 东方财富-A股数据-股本结构\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                 |\n|--------|-----|--------------------|\n| symbol | str | symbol=\"603392.SH\" |\n\n输出参数\n\n| 名称          | 类型      | 描述 |\n|-------------|---------|----|\n| 变更日期        | object  | -  |\n| 总股本         | int64   | -  |\n| 流通受限股份      | float64 | -  |\n| 其他内资持股(受限)  | float64 | -  |\n| 境内法人持股(受限)  | float64 | -  |\n| 境内自然人持股(受限) | float64 | -  |\n| 已流通股份       | float64 | -  |\n| 已上市流通A股     | int64   | -  |\n| 变动原因        | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zh_a_gbjg_em_df = ak.stock_zh_a_gbjg_em(symbol=\"603392.SH\")\nprint(stock_zh_a_gbjg_em_df)\n```\n\n数据示例\n\n```\n    变更日期       总股本    流通受限股份  ...    已流通股份    已上市流通A股        变动原因\n0   2024-09-12  1265122774          NaN  ...  1265122774  1.265123e+09          回购\n1   2024-01-15  1268206999          NaN  ...  1268206999  1.268207e+09    网下配售股份上市\n2   2023-06-05  1268206999    3620778.0  ...  1268206999  1.264586e+09       转增股上市\n3   2023-05-04   906070705    2586270.0  ...   906070705  9.034844e+08    首发限售股份上市\n4   2023-01-13   906070705  664113571.0  ...   906070705  2.419571e+08    网下配售股份上市\n5   2022-07-13   906070705  687390006.0  ...   906070705  2.186807e+08      增发A股上市\n6   2022-04-21   880208000  661527301.0  ...   880208000  2.186807e+08  送股上市,转增股上市\n7   2021-05-18   607040000  456225725.0  ...   607040000  1.508143e+08        送股上市\n8   2021-04-29   433600000  325875518.0  ...   433600000  1.077245e+08    首发限售股份上市\n9   2020-04-15   433600000  390000000.0  ...   433600000  4.360000e+07      首发A股上市\n10  2018-11-16   390000000  390000000.0  ...   390000000           NaN       上市前股本\n11  2016-06-24   361200000  361200000.0  ...   361200000           NaN       上市前股本\n[12 rows x 9 columns]\n```\n\n### 大宗交易\n\n#### 市场统计\n\n接口: stock_dzjy_sctj\n\n目标地址: https://data.eastmoney.com/dzjy/dzjy_sctj.html\n\n描述: 东方财富网-数据中心-大宗交易-市场统计\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 序号       | int64   | -       |\n| 交易日期     | object  | -       |\n| 上证指数     | float64 | -       |\n| 上证指数涨跌幅  | float64 | 注意单位: % |\n| 大宗交易成交总额 | float64 | 注意单位: 元 |\n| 溢价成交总额   | float64 | 注意单位: 元 |\n| 溢价成交总额占比 | float64 | 注意单位: % |\n| 折价成交总额   | float64 | 注意单位: 元 |\n| 折价成交总额占比 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_dzjy_sctj_df = ak.stock_dzjy_sctj()\nprint(stock_dzjy_sctj_df)\n```\n\n数据示例\n\n```\n        序号 交易日期      上证指数  ...    溢价成交总额占比 折价成交总额 折价成交总额占比\n0        1  2025-01-13  3160.7550  ...    3.952040  414053400.0   65.605380\n1        2  2025-01-10  3168.5238  ...    5.291598  736478342.1   93.934773\n2        3  2025-01-09  3211.3933  ...   29.431536  426177100.0   66.837397\n3        4  2025-01-08  3230.1679  ...    3.562115  493815200.0   89.406862\n4        5  2025-01-07  3229.6439  ...   26.093856  683763300.0   61.112711\n...    ...         ...        ...  ...         ...          ...         ...\n4230  4231  2003-03-14  1466.0440  ...    0.000000   62720000.0  100.000000\n4231  4232  2003-01-20  1482.6810  ...  100.000000          0.0    0.000000\n4232  4233  2003-01-08  1372.0670  ...    0.000000  151742709.0  100.000000\n4233  4234  2002-03-19  1665.3570  ...    0.000000  121770000.0  100.000000\n4234  4235  2000-08-29  2105.4760  ...    0.000000   14910000.0  100.000000\n[4235 rows x 9 columns]\n```\n\n#### 每日明细\n\n接口: stock_dzjy_mrmx\n\n目标地址: https://data.eastmoney.com/dzjy/dzjy_mrmx.html\n\n描述: 东方财富网-数据中心-大宗交易-每日明细\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                              |\n|------------|-----|-------------------------------------------------|\n| symbol     | str | symbol='债券'; choice of {'A股', 'B股', '基金', '债券'} |\n| start_date | str | start_date='20201123'; 开始日期                     |\n| end_date   | sr  | end_date='20201204'; 结束日期                       |\n\n输出参数-A股\n\n| 名称       | 类型      | 描述      |\n|----------|---------|---------|\n| 序号       | int64   | -       |\n| 交易日期     | object  | -       |\n| 证券代码     | object  | -       |\n| 证券简称     | object  | -       |\n| 涨跌幅      | float64 | 注意单位: % |\n| 收盘价      | float64 | -       |\n| 成交价      | float64 | -       |\n| 折溢率      | float64 | -       |\n| 成交量      | float64 | 注意单位: 股 |\n| 成交额      | float64 | 注意单位: 元 |\n| 成交额/流通市值 | float64 | 注意单位: % |\n| 买方营业部    | object  | -       |\n| 卖方营业部    | object  | -       |\n\n接口示例-A股\n\n```python\nimport akshare as ak\n\nstock_dzjy_mrmx_df = ak.stock_dzjy_mrmx(symbol='A股', start_date='20220104', end_date='20220104')\nprint(stock_dzjy_mrmx_df)\n```\n\n数据示例-A股\n\n```\n      序号   交易日期  ...                       买方营业部                     卖方营业部\n0      1  2022-01-04  ...  中信建投证券股份有限公司上海浦东新区福山路证券营业部    国泰君安证券股份有限公司上海江苏路证券营业部\n1      2  2022-01-04  ...       国信证券股份有限公司株洲神农大道证券营业部      长城证券股份有限公司株洲天台路证券营业部\n2      3  2022-01-04  ...             开源证券股份有限公司上海分公司       中信建投证券股份有限公司北京东城分公司\n3      4  2022-01-04  ...                        机构专用                      机构专用\n4      5  2022-01-04  ...      华泰证券股份有限公司南京清凉门大街证券营业部      华泰证券股份有限公司广州天河城证券营业部\n..   ...         ...  ...                         ...                       ...\n130  131  2022-01-04  ...        信达证券股份有限公司深圳白石路证券营业部    兴业证券股份有限公司上海自由贸易试验区分公司\n131  132  2022-01-04  ...        民生证券股份有限公司上海自贸试验区分公司         国信证券股份有限公司客户资产管理部\n132  133  2022-01-04  ...               中信证券(山东)青岛分公司             中信证券(山东)青岛分公司\n133  134  2022-01-04  ...           广发证券股份有限公司深圳前海营业部      财通证券股份有限公司江山中山路证券营业部\n134  135  2022-01-04  ...     申万宏源证券有限公司成都火车南站东路证券营业部  申万宏源西部证券有限公司霍尔果斯亚欧路证券营业部\n[135 rows x 13 columns]\n```\n\n输出参数-B股\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 序号    | int64   | -       |\n| 交易日期  | object  | -       |\n| 证券代码  | object  | -       |\n| 证券简称  | object  | -       |\n| 成交价   | float64 | -       |\n| 成交量   | float64 | 注意单位: 股 |\n| 成交额   | float64 | 注意单位: 元 |\n| 买方营业部 | object  | -       |\n| 卖方营业部 | object  | -       |\n\n接口示例-B股\n\n```python\nimport akshare as ak\n\nstock_dzjy_mrmx_df = ak.stock_dzjy_mrmx(symbol='B股', start_date='20211104', end_date='20220104')\nprint(stock_dzjy_mrmx_df)\n```\n\n数据示例-B股\n\n```\n   序号        交易日期    证券代码  ...          成交额                 买方营业部             卖方营业部\n0   1  2021-11-19  200596  ...  29031500.00  华鑫证券有限责任公司上海茅台路证券营业部  申万宏源交易单元(001698)\n1   2  2021-12-02  900926  ...    762204.34         申万宏源证券有限公司国际部     申万宏源证券有限公司国际部\n[2 rows x 9 columns]\n```\n\n输出参数-基金\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 序号    | int64   | -       |\n| 交易日期  | object  | -       |\n| 证券代码  | object  | -       |\n| 证券简称  | object  | -       |\n| 成交价   | float64 | -       |\n| 成交量   | float64 | 注意单位: 股 |\n| 成交额   | float64 | 注意单位: 元 |\n| 买方营业部 | object  | -       |\n| 卖方营业部 | object  | -       |\n\n接口示例-基金\n\n```python\nimport akshare as ak\n\nstock_dzjy_mrmx_df = ak.stock_dzjy_mrmx(symbol='基金', start_date='20220104', end_date='20220104')\nprint(stock_dzjy_mrmx_df)\n```\n\n数据示例-基金\n\n```\n   序号        交易日期    证券代码  ...        成交额            买方营业部                  卖方营业部\n0   1  2022-01-04  159919  ...   13503700  东北证券股份有限公司四川分公司  长城证券股份有限公司深圳深南大道证券营业部\n1   2  2022-01-04  510050  ...  162350000   国泰君安证券股份有限公司总部  广发证券股份有限公司广州环市东路证券营业部\n2   3  2022-01-04  510050  ...  584460000   国泰君安证券股份有限公司总部  广发证券股份有限公司广州环市东路证券营业部\n[3 rows x 9 columns]\n```\n\n输出参数-债券\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 序号    | int64   | -       |\n| 交易日期  | object  | -       |\n| 证券代码  | object  | -       |\n| 证券简称  | object  | -       |\n| 成交价   | float64 | -       |\n| 成交量   | float64 | 注意单位: 股 |\n| 成交额   | float64 | 注意单位: 元 |\n| 买方营业部 | object  | -       |\n| 卖方营业部 | object  | -       |\n\n接口示例-债券\n\n```python\nimport akshare as ak\n\nstock_dzjy_mrmx_df = ak.stock_dzjy_mrmx(symbol='债券', start_date='20220104', end_date='20220104')\nprint(stock_dzjy_mrmx_df)\n```\n\n数据示例-债券\n\n```\n      序号     交易日期  ...                 买方营业部                 卖方营业部\n0      1  2022-01-04  ...  华安证券股份有限公司合肥高新区证券营业部  华福证券有限责任公司上海银城路证券营业部\n1      2  2022-01-04  ...                  机构专用                  机构专用\n2      3  2022-01-04  ...                  机构专用                  机构专用\n3      4  2022-01-04  ...                  机构专用                  机构专用\n4      5  2022-01-04  ...                  机构专用                  机构专用\n..   ...         ...  ...                   ...                   ...\n162  163  2022-01-04  ...                  机构专用                  机构专用\n163  164  2022-01-04  ...                  机构专用                  机构专用\n164  165  2022-01-04  ...                  机构专用                  机构专用\n165  166  2022-01-04  ...                  机构专用                  机构专用\n166  167  2022-01-04  ...                  机构专用                  机构专用\n[167 rows x 9 columns]\n```\n\n#### 每日统计\n\n接口: stock_dzjy_mrtj\n\n目标地址: https://data.eastmoney.com/dzjy/dzjy_mrtj.html\n\n描述: 东方财富网-数据中心-大宗交易-每日统计\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称         | 类型  | 描述                          |\n|------------|-----|-----------------------------|\n| start_date | str | start_date='20220105'; 开始日期 |\n| end_date   | sr  | end_date='20220105'; 结束日期   |\n\n输出参数\n\n| 名称        | 类型      | 描述       |\n|-----------|---------|----------|\n| 序号        | int64   | -        |\n| 交易日期      | object  | -        |\n| 证券代码      | object  | -        |\n| 证券简称      | object  | -        |\n| 涨跌幅       | float64 | 注意单位: %  |\n| 收盘价       | float64 | -        |\n| 成交均价      | float64 | -        |\n| 折溢率       | float64 | -        |\n| 成交笔数      | int64   |          |\n| 成交总量      | float64 | 注意单位: 万股 |\n| 成交总额      | float64 | 注意单位: 万元 |\n| 成交总额/流通市值 | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_dzjy_mrtj_df = ak.stock_dzjy_mrtj(start_date='20220105', end_date='20220105')\nprint(stock_dzjy_mrtj_df)\n```\n\n数据示例\n\n```\n    序号  交易日期    证券代码 证券简称  ...  成交笔数 成交总量 成交总额  成交总额/流通市值\n0    1  2022-01-05  833509  同惠电子  ...     1   130.00  1783.6000   2.574944\n1    2  2022-01-05  600617  国新能源  ...     1  1825.55  7046.6230   1.712782\n2    3  2022-01-05  002919  名臣健康  ...     3   191.79  7427.8500   1.604464\n3    4  2022-01-05  300858  科拓生物  ...     2    75.00  2779.7500   1.389459\n4    5  2022-01-05  836263  中航泰达  ...     1   101.39   654.9794   1.380876\n..  ..         ...     ...   ...  ...   ...      ...        ...        ...\n76  77  2022-01-05  002475  立讯精密  ...     1    10.00   482.1000   0.001415\n77  78  2022-01-05  600036  招商银行  ...     1    20.43   987.7905   0.000976\n78  79  2022-01-05  601138  工业富联  ...     1    16.48   200.0672   0.000837\n79  80  2022-01-05  603288  海天味业  ...     1     2.30   219.5120   0.000480\n80  81  2022-01-05  600519  贵州茅台  ...     1     0.45   923.0535   0.000363\n[81 rows x 12 columns]\n```\n\n#### 活跃 A 股统计\n\n接口: stock_dzjy_hygtj\n\n目标地址: https://data.eastmoney.com/dzjy/dzjy_hygtj.html\n\n描述: 东方财富网-数据中心-大宗交易-活跃 A 股统计\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                   |\n|--------|-----|------------------------------------------------------|\n| symbol | str | symbol='近三月'; choice of {'近一月', '近三月', '近六月', '近一年'} |\n\n输出参数\n\n| 名称            | 类型      | 描述       |\n|---------------|---------|----------|\n| 序号            | int64   | -        |\n| 证券代码          | object  | -        |\n| 证券简称          | object  | -        |\n| 最新价           | float64 | -        |\n| 涨跌幅           | float64 | 注意单位: %  |\n| 最近上榜日         | object  | -        |\n| 上榜次数-总计       | int64   | -        |\n| 上榜次数-溢价       | int64   | -        |\n| 上榜次数-折价       | int64   |          |\n| 总成交额          | float64 | 注意单位: 万元 |\n| 折溢率           | float64 | 注意单位: 万元 |\n| 成交总额/流通市值     | float64 | -        |\n| 上榜日后平均涨跌幅-1日  | float64 | 注意符号: %  |\n| 上榜日后平均涨跌幅-5日  | float64 | 注意符号: %  |\n| 上榜日后平均涨跌幅-10日 | float64 | 注意符号: %  |\n| 上榜日后平均涨跌幅-20日 | float64 | 注意符号: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_dzjy_hygtj_df = ak.stock_dzjy_hygtj(symbol='近三月')\nprint(stock_dzjy_hygtj_df)\n```\n\n数据示例\n\n```\n        序号 证券代码  证券简称  ... 上榜日后平均涨跌幅-5日  上榜日后平均涨跌幅-10日 上榜日后平均涨跌幅-20日\n0        1  300750  宁德时代  ...     -1.088728      -1.637595      0.231556\n1        2  601156  东航物流  ...      2.363677       3.253657      2.078001\n2        3  601127   赛力斯  ...      3.137805       7.196673      3.697366\n3        4  301498  乖宝宠物  ...      1.984983       4.387132     10.152126\n4        5  689009  九号公司  ...      2.749486       4.166386     -0.388344\n...    ...     ...   ...  ...           ...            ...           ...\n1595  1596  000034  神州数码  ...     -8.193717     -15.026178     -8.664921\n1596  1597  000021   深科技  ...     -1.542700       0.000000      0.000000\n1597  1598  000016  深康佳A  ...     -7.954545      -1.136364      0.000000\n1598  1599  000010  美丽生态  ...     20.187793      60.093897     31.455399\n1599  1600  000009  中国宝安  ...     -5.544148       2.874743     -2.464066\n[1600 rows x 16 columns]\n```\n\n#### 活跃营业部统计\n\n接口: stock_dzjy_hyyybtj\n\n目标地址: https://data.eastmoney.com/dzjy/dzjy_hyyybtj.html\n\n描述: 东方财富网-数据中心-大宗交易-活跃营业部统计\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                              |\n|--------|-----|-----------------------------------------------------------------|\n| symbol | str | symbol='近3日'; choice of {'当前交易日', '近3日', '近5日', '近10日', '近30日'} |\n\n输出参数\n\n| 名称          | 类型      | 描述       |\n|-------------|---------|----------|\n| 序号          | int64   | -        |\n| 营业部名称       | str     | -        |\n| 最近上榜日       | object  | -        |\n| 次数总计-买入     | float64 | -        |\n| 次数总计-卖出     | float64 | 注意单位: %  |\n| 成交金额统计-买入   | float64 | 注意单位: 万元 |\n| 成交金额统计-卖出   | float64 | 注意单位: 万元 |\n| 成交金额统计-净买入额 | float64 | 注意单位: 万元 |\n| 买入的股票       | object  |          |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_dzjy_hyyybtj_df = ak.stock_dzjy_hyyybtj(symbol='近3日')\nprint(stock_dzjy_hyyybtj_df)\n```\n\n数据示例\n\n```\n      序号  ...                                              买入的股票\n0      1  ...  000426|兴业银锡,000703|恒逸石化,000736|中交地产,001236|弘业期...\n1      2  ...  605376|博迁新材,688165|埃夫特,688234|天岳先进,688469|芯联集成...\n2      3  ...  002156|通富微电,300398|飞凯材料,300783|三只松鼠,301091|深城交...\n3      4  ...  002156|通富微电,003009|中天火箭,300398|飞凯材料,688234|天岳先...\n4      5  ...    600021|上海电力,600033|福建高速,601326|秦港股份,603378|亚士创能\n..   ...  ...                                                ...\n242  243  ...                                               None\n243  244  ...                                               None\n244  245  ...                                               None\n245  246  ...                                               None\n246  247  ...                                               None\n[247 rows x 9 columns]\n```\n\n#### 营业部排行\n\n接口: stock_dzjy_yybph\n\n目标地址: https://data.eastmoney.com/dzjy/dzjy_yybph.html\n\n描述: 东方财富网-数据中心-大宗交易-营业部排行\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                   |\n|--------|-----|------------------------------------------------------|\n| symbol | str | symbol='近三月'; choice of {'近一月', '近三月', '近六月', '近一年'} |\n\n输出参数\n\n| 名称          | 类型      | 描述      |\n|-------------|---------|---------|\n| 序号          | int64   | -       |\n| 营业部名称       | object  | -       |\n| 上榜后1天-买入次数  | float64 | -       |\n| 上榜后1天-平均涨幅  | float64 | 注意单位: % |\n| 上榜后1天-上涨概率  | float64 | -       |\n| 上榜后5天-买入次数  | float64 | -       |\n| 上榜后5天-平均涨幅  | float64 | 注意单位: % |\n| 上榜后5天-上涨概率  | float64 | -       |\n| 上榜后10天-买入次数 | float64 | -       |\n| 上榜后10天-平均涨幅 | float64 | 注意单位: % |\n| 上榜后10天-上涨概率 | float64 |         |\n| 上榜后20天-买入次数 | float64 | -       |\n| 上榜后20天-平均涨幅 | float64 | 注意单位: % |\n| 上榜后20天-上涨概率 | float64 |         |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_dzjy_yybph_df = ak.stock_dzjy_yybph(symbol='近三月')\nprint(stock_dzjy_yybph_df)\n```\n\n数据示例\n\n```\n        序号               营业部名称  ...  上榜后20天-平均涨幅  上榜后20天-上涨概率\n0        1                机构专用  ...     4.105711    52.522101\n1        2     华泰证券营业总部(非营业场所)  ...     2.933068    51.394422\n2        3       中信证券总部(非营业场所)  ...     7.533781    60.317460\n3        4            国泰君安证券总部  ...     6.994607    60.606061\n4        5      招商证券西安北大街证券营业部  ...     7.372532    67.346939\n...    ...                 ...  ...          ...          ...\n1226  1227           华福证券浙江分公司  ...          NaN          NaN\n1227  1228    财通证券杭州富阳公望街证券营业部  ...          NaN          NaN\n1228  1229   申万宏源证券重庆中山一路证券营业部  ...          NaN          NaN\n1229  1230  国泰君安证券苏州苏州大道东证券营业部  ...          NaN          NaN\n1230  1231           兴业证券莆田分公司  ...          NaN          NaN\n[1231 rows x 14 columns]\n```\n\n### 一致行动人\n\n接口: stock_yzxdr_em\n\n目标地址: http://data.eastmoney.com/yzxdr/\n\n描述: 东方财富网-数据中心-特色数据-一致行动人\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称   | 类型  | 描述                         |\n|------|-----|----------------------------|\n| date | str | date=\"20200930\"; 每年的季度末时间点 |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 股票代码   | object  | -       |\n| 股票简称   | object  | -       |\n| 一致行动人  | object  | -       |\n| 股东排名   | object  | -       |\n| 持股数量   | int64   | -       |\n| 持股比例   | float64 | -       |\n| 持股数量变动 | object  | 注意单位: % |\n| 行业     | object  | -       |\n| 公告日期   | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_yzxdr_em_df = ak.stock_yzxdr_em(date=\"20210331\")\nprint(stock_yzxdr_em_df)\n```\n\n数据示例\n\n```\n      序号    股票代码  股票简称  ... 持股数量变动     行业        公告日期\n0        1  688981  中芯国际  ...    NaN    半导体  2024-11-08\n1        2  688981  中芯国际  ...    NaN    半导体  2024-11-08\n2        3  688981  中芯国际  ...    NaN    半导体  2024-11-08\n3        4  688347  华虹公司  ...    NaN    半导体  2024-11-08\n4        5  688347  华虹公司  ...    NaN    半导体  2024-11-08\n...    ...     ...   ...  ...    ...    ...         ...\n4637  4638  002521  齐峰新材  ...    NaN   造纸印刷  2024-10-12\n4638  4639  300102  乾照光电  ...    NaN  光学光电子  2024-10-12\n4639  4640  301227  森鹰窗业  ...    NaN   装修建材  2024-10-12\n4640  4641  301227  森鹰窗业  ...    NaN   装修建材  2024-10-12\n4641  4642  300708  聚灿光电  ...    NaN  光学光电子  2024-10-11\n[4642 rows x 10 columns]\n```\n\n### 融资融券\n\n#### 标的证券名单及保证金比例查询\n\n接口: stock_margin_ratio_pa\n\n目标地址: https://stock.pingan.com/static/webinfo/margin/business.html?businessType=0\n\n描述: 融资融券-标的证券名单及保证金比例查询\n\n限量: 单次返回指定交易所和交易日的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                         |\n|--------|-----|--------------------------------------------|\n| symbol | str | symbol=\"深市\"; choice of {\"深市\", \"沪市\", \"北交所\"} |\n| date   | str | date=\"20260113\"                            |\n\n输出参数\n\n| 名称   | 类型      | 描述 |\n|------|---------|----|\n| 证券代码 | object  | -  |\n| 证券简称 | object  | -  |\n| 融资比例 | float64 | -  |\n| 融券比例 | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_margin_ratio_pa_df = ak.stock_margin_ratio_pa(symbol=\"沪市\", date=\"20260113\")\nprint(stock_margin_ratio_pa_df)\n```\n\n数据示例\n\n```\n      证券代码   证券简称  融资比例 融券比例\n0     510050    50ETF   0.8   1.0\n1     510100  SZ50ETF   0.8   1.0\n2     510150    消费ETF   0.8   1.0\n3     510180   180ETF   0.8   1.0\n4     510210    综指ETF   0.8   1.0\n...      ...      ...   ...   ...\n1950  688807     优迅股份   1.0   1.8\n1951  688809     强一股份   1.0   1.8\n1952  688819     天能股份   0.8   1.5\n1953  688981     中芯国际   0.8   1.5\n1954  689009     九号公司   1.3   1.5\n[1955 rows x 4 columns]\n```\n\n#### 两融账户信息\n\n接口: stock_margin_account_info\n\n目标地址: https://data.eastmoney.com/rzrq/zhtjday.html\n\n描述: 东方财富网-数据中心-融资融券-融资融券账户统计-两融账户信息\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称            | 类型      | 描述       |\n|---------------|---------|----------|\n| 日期            | object  | -        |\n| 融资余额          | float64 | 注意单位: 亿  |\n| 融券余额          | float64 | 注意单位: 亿  |\n| 融资买入额         | float64 | 注意单位: 亿  |\n| 融券卖出额         | float64 | 注意单位: 亿  |\n| 证券公司数量        | float64 | 注意单位: 家  |\n| 营业部数量         | float64 | 注意单位: 家  |\n| 个人投资者数量       | float64 | 注意单位: 万名 |\n| 机构投资者数量       | float64 | 注意单位: 家  |\n| 参与交易的投资者数量    | float64 | 注意单位: 名  |\n| 有融资融券负债的投资者数量 | float64 | 注意单位: 名  |\n| 担保物总价值        | float64 | 注意单位: 亿  |\n| 平均维持担保比例      | float64 | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_margin_account_info_df = ak.stock_margin_account_info()\nprint(stock_margin_account_info_df)\n```\n\n数据示例\n\n```\n      日期           融资余额 融券余额  ...  有融资融券负债的投资者数量   担保物总价值 平均维持担保比例\n0     2012-09-27    704.53   15.31  ...            NaN       NaN       NaN\n1     2012-09-28    685.47   15.20  ...            NaN       NaN       NaN\n2     2012-10-08    696.69   15.64  ...            NaN       NaN       NaN\n3     2012-10-09    699.63   17.59  ...            NaN       NaN       NaN\n4     2012-10-10    708.57   17.63  ...            NaN       NaN       NaN\n...          ...       ...     ...  ...            ...       ...       ...\n2836  2024-06-06  14761.62  367.59  ...      1545084.0  44142.04     247.5\n2837  2024-06-07  14697.46  341.56  ...      1538584.0  44096.42     248.3\n2838  2024-06-11  14744.14  336.41  ...      1545026.0  44228.19     249.0\n2839  2024-06-12  14761.55  338.57  ...      1547653.0  44506.55     250.1\n2840  2024-06-13  14769.50  338.84  ...      1548858.0  44328.60     249.3\n[2841 rows x 13 columns]\n```\n\n#### 上海证券交易所\n\n##### 融资融券汇总\n\n接口: stock_margin_sse\n\n目标地址: http://www.sse.com.cn/market/othersdata/margin/sum/\n\n描述: 上海证券交易所-融资融券数据-融资融券汇总数据\n\n限量: 单次返回指定时间段内的所有历史数据\n\n输入参数\n\n| 名称         | 类型  | 描述                    |\n|------------|-----|-----------------------|\n| start_date | str | start_date=\"20010106\" |\n| end_date   | str | end_date=\"20010106\"   |\n\n输出参数\n\n| 名称     | 类型     | 描述      |\n|--------|--------|---------|\n| 信用交易日期 | object | -       |\n| 融资余额   | int64  | 注意单位: 元 |\n| 融资买入额  | int64  | 注意单位: 元 |\n| 融券余量   | int64  | -       |\n| 融券余量金额 | int64  | 注意单位: 元 |\n| 融券卖出量  | int64  | -       |\n| 融资融券余额 | int64  | 注意单位: 元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_margin_sse_df = ak.stock_margin_sse(start_date=\"20010106\", end_date=\"20210208\")\nprint(stock_margin_sse_df)\n```\n\n数据示例\n\n```\n      信用交易日期   融资余额     融资买入额  ...    融券余量金额   融券卖出量   融资融券余额\n0     20210208  796355371775  33386752258  ...  87718590706  148374362  884073962481\n1     20210205  798537947597  39256505179  ...  87230537840  169481352  885768485437\n2     20210204  802902827539  41486860920  ...  87780973049  164920794  890683800588\n3     20210203  807189978760  42621756166  ...  88548469683  251518719  895738448443\n4     20210202  807418158794  37533872673  ...  88303226275  230032183  895721385069\n        ...           ...          ...  ...          ...        ...           ...\n1995  20121127   52059352556   1561381214  ...   1384086520  255616186   53443439076\n1996  20121126   52224867623   1322180521  ...   1366826765  234474541   53591694388\n1997  20121123   52163842479   1543727769  ...   1347840020  257859771   53511682499\n1998  20121122   52326315202   1332145449  ...   1302639373  214932697   53628954575\n1999  20121121   52338359165   1943146103  ...   1306569346  308581665   53644928511\n[2000 rows x 7 columns]\n```\n\n##### 融资融券明细\n\n接口: stock_margin_detail_sse\n\n目标地址: http://www.sse.com.cn/market/othersdata/margin/detail/\n\n描述: 上海证券交易所-融资融券数据-融资融券明细数据\n\n限量: 单次返回交易日的所有历史数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date=\"20210205\" |\n\n输出参数\n\n| 名称     | 类型     | 描述      |\n|--------|--------|---------|\n| 信用交易日期 | object | -       |\n| 标的证券代码 | object | -       |\n| 标的证券简称 | object | -       |\n| 融资余额   | int64  | 注意单位: 元 |\n| 融资买入额  | int64  | 注意单位: 元 |\n| 融资偿还额  | int64  | 注意单位: 元 |\n| 融券余量   | int64  | -       |\n| 融券卖出量  | int64  | -       |\n| 融券偿还量  | int64  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_margin_detail_sse_df = ak.stock_margin_detail_sse(date=\"20230922\")\nprint(stock_margin_detail_sse_df)\n```\n\n数据示例\n\n```\n      信用交易日期  标的证券代码   标的证券简称  ...  融券余量 融券卖出量  融券偿还量\n0     20230922  510050    50ETF  ...  31081200  21114800  11402100\n1     20230922  510100  SZ50ETF  ...         0         0         0\n2     20230922  510150    消费ETF  ...         0         0         0\n3     20230922  510180   180ETF  ...    409300    173200    130900\n4     20230922  510210    综指ETF  ...         0         0         0\n        ...     ...      ...  ...       ...       ...       ...\n1735  20230922  688799     华纳药厂  ...         0         0         0\n1736  20230922  688800      瑞可达  ...    124592      3617     21777\n1737  20230922  688819     天能股份  ...   1231449     75962      3000\n1738  20230922  688981     中芯国际  ...   4747379    389501    606169\n1739  20230922  689009     九号公司  ...  11236510    112012     27234\n[1740 rows x 9 columns]\n```\n\n#### 深圳证券交易所\n\n##### 融资融券汇总\n\n接口: stock_margin_szse\n\n目标地址: https://www.szse.cn/disclosure/margin/margin/index.html\n\n描述: 深圳证券交易所-融资融券数据-融资融券汇总数据\n\n限量: 单次返回指定时间内的所有历史数据\n\n输入参数\n\n| 名称   | 类型  | 描述                    |\n|------|-----|-----------------------|\n| date | str | date=\"20240411\"; 交易日期 |\n\n输出参数\n\n| 名称     | 类型      | 描述          |\n|--------|---------|-------------|\n| 融资买入额  | float64 | 注意单位: 亿元    |\n| 融资余额   | float64 | 注意单位: 亿元    |\n| 融券卖出量  | float64 | 注意单位: 亿股/亿份 |\n| 融券余量   | float64 | 注意单位: 亿股/亿份 |\n| 融券余额   | float64 | 注意单位: 亿元    |\n| 融资融券余额 | float64 | 注意单位: 亿元    |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_margin_sse_df = ak.stock_margin_szse(date=\"20240411\")\nprint(stock_margin_sse_df)\n```\n\n数据示例\n\n```\n    融资买入额     融资余额  融券卖出量   融券余量   融券余额   融资融券余额\n0  321.08  7077.67   0.28  24.34  157.3  7234.97\n```\n\n##### 融资融券明细\n\n接口: stock_margin_detail_szse\n\n目标地址: https://www.szse.cn/disclosure/margin/margin/index.html\n\n描述: 深证证券交易所-融资融券数据-融资融券交易明细数据\n\n限量: 单次返回指定 date 的所有历史数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date=\"20220118\" |\n\n输出参数\n\n| 名称     | 类型     | 描述        |\n|--------|--------|-----------|\n| 证券代码   | object | -         |\n| 证券简称   | object | -         |\n| 融资买入额  | int64  | 注意单位: 元   |\n| 融资余额   | int64  | 注意单位: 元   |\n| 融券卖出量  | int64  | 注意单位: 股/份 |\n| 融券余量   | int64  | 注意单位: 股/份 |\n| 融券余额   | int64  | 注意单位: 元   |\n| 融资融券余额 | int64  | 注意单位: 元   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_margin_detail_sse_df = ak.stock_margin_detail_szse(date=\"20230925\")\nprint(stock_margin_detail_sse_df)\n```\n\n数据示例\n\n```\n        证券代码   证券简称     融资买入额  ...     融券余量      融券余额      融资融券余额\n0     000001   平安银行  67452975  ...  1791277  20098128  4365763792\n1     000002  万  科Ａ  78869157  ...  6637572  87217696  4819262864\n2     000006   深振业Ａ  11862407  ...   893154   4037056   471912480\n3     000008   神州高铁   6467970  ...    37100     89411   264908600\n4     000009   中国宝安   5545586  ...  2540168  26036723  1501197300\n      ...    ...       ...  ...      ...       ...         ...\n1806  301528    多浦乐   9457046  ...      600     52212    60245085\n1807  301529   福赛科技  10576005  ...    67138   3056121    41545975\n1808  301533   威马农机   1615519  ...     1000     43110    23167466\n1809  301548  C崇德科技  23852209  ...        0         0    41105017\n1810  301550   斯菱股份  17612051  ...     2300     98486    36562401\n[1811 rows x 8 columns]\n```\n\n##### 标的证券信息\n\n接口: stock_margin_underlying_info_szse\n\n目标地址: https://www.szse.cn/disclosure/margin/object/index.html\n\n描述: 深圳证券交易所-融资融券数据-标的证券信息\n\n限量: 单次返回交易日的所有历史数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date=\"20210205\" |\n\n输出参数\n\n| 名称       | 类型     | 描述  |\n|----------|--------|-----|\n| 证券代码     | object | -   |\n| 证券简称     | object | -   |\n| 融资标的     | object | -   |\n| 融券标的     | object | -   |\n| 当日可融资    | object | -   |\n| 当日可融券    | object | -   |\n| 融券卖出价格限制 | object | -   |\n| 涨跌幅限制    | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_margin_underlying_info_szse_df = ak.stock_margin_underlying_info_szse(date=\"20210727\")\nprint(stock_margin_underlying_info_szse_df)\n```\n\n数据示例\n\n```\n    证券代码  证券简称 融资标的 融券标的 当日可融资 当日可融券 融券卖出价格限制 涨跌幅限制\n0     000001  平安银行    Y    Y     Y     Y        Y   10%\n1     000002   万科Ａ    Y    Y     Y     Y        Y   10%\n2     000006  深振业Ａ    Y    Y     Y     Y        Y   10%\n3     000008  神州高铁    Y    Y     Y     Y        Y   10%\n4     000009  中国宝安    Y    Y     Y     Y        Y   10%\n      ...   ...  ...  ...   ...   ...      ...   ...\n1000  301030   C仕净    Y    Y     Y     Y        Y   无限制\n1001  301031  中熔电气    Y    Y     Y     Y        Y   20%\n1002  301032   C新柴    Y    Y     Y     Y        Y   无限制\n1003  301033   C迈普    Y    Y     Y     Y        Y   无限制\n1004  301039  中集车辆    Y    Y     Y     Y        Y   20%\n```\n\n### 盈利预测-东方财富\n\n接口: stock_profit_forecast_em\n\n目标地址: http://data.eastmoney.com/report/profitforecast.jshtml\n\n描述: 东方财富网-数据中心-研究报告-盈利预测; 该数据源网页端返回数据有异常, 本接口已修复该异常\n\n限量: 单次返回指定 symbol 的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                 |\n|--------|-----|----------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"\", 默认为获取全部数据; symbol=\"船舶制造\", 则获取具体行业板块的数据; 行业板块可以通过 ak.stock_board_industry_name_em() 接口获取 |\n\n输出参数\n\n| 名称              | 类型      | 描述  |\n|-----------------|---------|-----|\n| 序号              | int64   | -   |\n| 代码              | object  | -   |\n| 名称              | object  | -   |\n| 研报数             | int64   | -   |\n| 机构投资评级(近六个月)-买入 | float64 | -   |\n| 机构投资评级(近六个月)-增持 | float64 | -   |\n| 机构投资评级(近六个月)-中性 | float64 | -   |\n| 机构投资评级(近六个月)-减持 | int64   | -   |\n| 机构投资评级(近六个月)-卖出 | int64   | -   |\n| xxxx预测每股收益      | float64 | -   |\n| xxxx预测每股收益      | float64 | -   |\n| xxxx预测每股收益      | float64 | -   |\n| xxxx预测每股收益      | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_profit_forecast_em_df = ak.stock_profit_forecast_em()\nprint(stock_profit_forecast_em_df)\n```\n\n数据示例\n\n```\n      序号  代码    名称  研报数  ...  2022预测每股收益  2023预测每股收益  2024预测每股收益  2025预测每股收益\n0        1  600519  贵州茅台   57  ...   49.925612   58.933509   69.944737   81.378268\n1        2  603605   珀莱雅   53  ...    2.060203    2.832283    3.571340    4.412750\n2        3  000858   五粮液   52  ...    6.876187    7.795654    8.837846   10.038078\n3        4  300957   贝泰妮   50  ...    2.481654    3.066469    3.869959    4.834542\n4        5  300896   爱美客   47  ...    5.840074    8.793660   12.255915   16.379000\n    ...     ...   ...  ...  ...         ...         ...         ...         ...\n3026  3027  002428  云南锗业    1  ...   -0.095546    0.020000    0.050000    0.060000\n3027  3028  688058   宝兰德    1  ...   -0.618857    1.060000    1.710000    2.660000\n3028  3029  688309  恒誉环保    1  ...    0.182819    0.720000    0.810000    0.910000\n3029  3030  300552  万集科技    1  ...   -0.136009   -0.050000    0.380000    0.670000\n3030  3031  600637  东方明珠    1  ...    0.051296    0.280000    0.290000         NaN\n[3031 rows x 13 columns]\n```\n\n### 港股盈利预测-经济通\n\n接口: stock_hk_profit_forecast_et\n\n目标地址: https://www.etnet.com.hk/www/sc/stocks/realtime/quote_profit.php?code=9999\n\n描述: 经济通-公司资料-盈利预测\n\n限量: 单次返回指定 symbol 和 indicator 的数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                    |\n|-----------|-----|-----------------------------------------------------------------------|\n| symbol    | str | symbol=\"09999\"                                                        |\n| indicator | str | indicator=\"盈利预测概览\"; choice of {\"评级总览\", \"去年度业绩表现\", \"综合盈利预测\", \"盈利预测概览\"} |\n\n输出参数-盈利预测概览\n\n| 名称    | 类型      | 描述               |\n|-------|---------|------------------|\n| 财政年度  | object  | -                |\n| 纯利/亏损 | float64 | 注意单位：百万元人民币/百万港元 |\n| 每股盈利  | float64 | 注意单位：分/港仙        |\n| 每股派息  | float64 | 注意单位：分/港仙        |\n| 证券商   | object  | -                |\n| 评级    | object  | -                |\n| 目标价   | float64 | 注意单位：港元          |\n| 更新日期  | object  | -                |\n\n接口示例-盈利预测概览\n\n```python\nimport akshare as ak\n\nstock_hk_profit_forecast_et_df = ak.stock_hk_profit_forecast_et(symbol=\"09999\", indicator=\"盈利预测概览\")\nprint(stock_hk_profit_forecast_et_df)\n```\n\n数据示例-盈利预测概览\n\n```\n    财政年度    纯利/亏损    每股盈利     每股派息     证券商    评级    目标价       更新日期\n0   2023  26568.0   814.0   256.62   星展唯高达    买入  237.0 2023-08-25\n1   2023  29960.0   909.9   272.90      大和    买入  215.0 2023-11-16\n2   2023  29679.0   913.0  1364.00      野村    买入  215.0 2023-11-17\n3   2023  29968.0   922.0   260.30    中银国际    买入  212.0 2023-12-18\n4   2023  32835.0  1010.0   255.00  中国国际金融  优於大市  211.0 2023-11-17\n5   2023  29719.2   924.4  1453.00      高盛    买入  206.0 2023-11-17\n6   2023  36308.0  1013.3   258.19    大华继显    买入  204.0 2023-11-17\n7   2023  27710.0   860.0      NaN    中信证券    买入  200.0 2023-11-02\n8   2023  33891.0   953.0  1435.00    摩根大通  优於大市  195.0 2023-12-13\n10  2024  28143.0   862.0   271.72   星展唯高达    --    NaN 2023-08-25\n11  2024  28151.0   875.0  1294.00      野村    --    NaN 2023-11-17\n12  2024  28799.0   874.6   262.30      大和    --    NaN 2023-11-16\n13  2024  30892.0   954.0   269.30    中银国际    --    NaN 2023-12-18\n14  2024  33983.0  1046.0   264.00  中国国际金融    --    NaN 2023-11-17\n15  2024  30592.2   957.0  1508.00      高盛    --    NaN 2023-11-17\n16  2024  36514.0  1021.8  1113.46    大华继显    --    NaN 2023-11-17\n17  2024  28630.0   890.0      NaN    中信证券    --    NaN 2023-11-02\n18  2024  35252.0   996.0  1476.00    摩根大通    --    NaN 2023-12-13\n20  2025  31448.0   964.0   301.91   星展唯高达    --    NaN 2023-08-25\n21  2025  31188.0   947.2   284.10      大和    --    NaN 2023-11-16\n22  2025  30540.0   959.0  1404.00      野村    --    NaN 2023-11-17\n23  2025  33620.0  1037.2   292.80    中银国际    --    NaN 2023-12-18\n24  2025  34070.8  1064.4  1678.00      高盛    --    NaN 2023-11-17\n25  2025  31709.0  1106.7  1210.28    大华继显    --    NaN 2023-11-17\n26  2025  31400.0   970.0      NaN    中信证券    --    NaN 2023-11-02\n27  2025  39789.0  1130.0  1674.00    摩根大通    --    NaN 2023-12-13\n```\n\n### 盈利预测-同花顺\n\n接口: stock_profit_forecast_ths\n\n目标地址: http://basic.10jqka.com.cn/new/600519/worth.html\n\n描述: 同花顺-盈利预测\n\n限量: 单次返回指定 symbol 和 indicator 的数据\n\n输入参数\n\n| 名称        | 类型  | 描述                                                                                    |\n|-----------|-----|---------------------------------------------------------------------------------------|\n| symbol    | str | symbol=\"600519\"; 股票代码                                                                 |\n| indicator | str | indicator=\"预测年报每股收益\"; choice of {\"预测年报每股收益\", \"预测年报净利润\", \"业绩预测详表-机构\", \"业绩预测详表-详细指标预测\"} |\n\n输出参数-预测年报每股收益\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| 年度    | object  | -   |\n| 预测机构数 | int64   | -   |\n| 最小值   | float64 | -   |\n| 均值    | float64 | -   |\n| 最大值   | float64 | -   |\n| 行业平均数 | float64 | -   |\n\n接口示例-预测年报每股收益\n\n```python\nimport akshare as ak\n\nstock_profit_forecast_ths_df = ak.stock_profit_forecast_ths(symbol=\"600519\", indicator=\"预测年报每股收益\")\nprint(stock_profit_forecast_ths_df)\n```\n\n数据示例-预测年报每股收益\n\n```\n     年度  预测机构数    最小值     均值    最大值  行业平均数\n0  2022     48  48.46  49.73  50.58   7.00\n1  2023     48  56.01  58.31  61.53   8.45\n2  2024     48  63.79  67.59  73.67  10.12\n```\n\n输出参数-预测年报净利润\n\n| 名称    | 类型      | 描述  |\n|-------|---------|-----|\n| 年度    | object  | -   |\n| 预测机构数 | int64   | -   |\n| 最小值   | float64 | -   |\n| 均值    | float64 | -   |\n| 最大值   | float64 | -   |\n| 行业平均数 | float64 | -   |\n\n接口示例-预测年报净利润\n\n```python\nimport akshare as ak\n\nstock_profit_forecast_ths_df = ak.stock_profit_forecast_ths(symbol=\"600519\", indicator=\"预测年报净利润\")\nprint(stock_profit_forecast_ths_df)\n```\n\n数据示例-预测年报净利润\n\n```\n     年度  预测机构数     最小值      均值     最大值   行业平均数\n0  2022     48  608.70  624.70  635.37   92.07\n1  2023     48  703.55  732.50  772.89  109.92\n2  2024     48  801.30  849.09  925.44  130.04\n```\n\n输出参数-业绩预测详表-机构\n\n| 名称             | 类型      | 描述  |\n|----------------|---------|-----|\n| 机构名称           | object  | -   |\n| 研究员            | object  | -   |\n| 预测年报每股收益2022预测 | float64 | -   |\n| 预测年报每股收益2023预测 | float64 | -   |\n| 预测年报每股收益2024预测 | float64 | -   |\n| 预测年报净利润2022预测  | object  | -   |\n| 预测年报净利润2023预测  | object  | -   |\n| 预测年报净利润2024预测  | object  | -   |\n| 报告日期           | object  | -   |\n\n接口示例-业绩预测详表-机构\n\n```python\nimport akshare as ak\n\nstock_profit_forecast_ths_df = ak.stock_profit_forecast_ths(symbol=\"600519\", indicator=\"业绩预测详表-机构\")\nprint(stock_profit_forecast_ths_df)\n```\n\n数据示例-业绩预测详表-机构\n\n```\n       机构名称          研究员  ...  预测年报净利润2024预测        报告日期\n0      东方证券          叶书怀  ...        829.14亿  2023-03-07\n1      中泰证券          范劲松  ...        848.80亿  2023-02-13\n2      中信证券           李鑫  ...        832.79亿  2023-02-13\n3      招银证券  Joseph Wong  ...        866.26亿  2023-02-06\n4      华鑫证券          孙山山  ...        860.24亿  2023-01-03\n5      开源证券          张宇光  ...        860.49亿  2023-01-03\n6  群益证券(香港)          顾向君  ...        845.28亿  2023-01-03\n7      财通证券           苏铖  ...        850.53亿  2023-01-02\n8      东吴证券           汤军  ...        845.27亿  2022-12-30\n9      东莞证券          魏红梅  ...        846.24亿  2022-12-30\n```\n\n输出参数-业绩预测详表-详细指标预测\n\n| 名称        | 类型     | 描述  |\n|-----------|--------|-----|\n| 预测指标      | object | -   |\n| 2019-实际值  | object | -   |\n| 2020-实际值  | object | -   |\n| 2021-实际值  | object | -   |\n| 预测2022-平均 | object | -   |\n| 预测2023-平均 | object | -   |\n| 预测2024-平均 | object | -   |\n\n接口示例-业绩预测详表-详细指标预测\n\n```python\nimport akshare as ak\n\nstock_profit_forecast_ths_df = ak.stock_profit_forecast_ths(symbol=\"600519\", indicator=\"业绩预测详表-详细指标预测\")\nprint(stock_profit_forecast_ths_df)\n```\n\n数据示例-业绩预测详表-详细指标预测\n\n```\n       预测指标 2019-实际值 2020-实际值  2021-实际值 预测2022-平均 预测2023-平均 预测2024-平均\n0   营业收入(元)  854.30亿  949.15亿  1061.90亿  1268.88亿  1471.77亿  1691.60亿\n1   营业收入增长率   15.10%   10.29%    11.71%    19.49%    15.99%    14.93%\n2   利润总额(元)  587.83亿  661.97亿   745.28亿   883.27亿  1034.55亿  1198.90亿\n3    净利润(元)  412.06亿  466.97亿   524.60亿   624.70亿   732.50亿   849.09亿\n4    净利润增长率   17.05%   13.33%    12.34%    18.92%    17.23%    15.96%\n5  每股现金流(元)    35.99    41.13     50.97     55.46     59.37     72.57\n6  每股净资产(元)   108.27   128.42    150.88    177.18    210.97    251.11\n7    净资产收益率   33.09%   31.41%    29.90%    28.62%    28.26%    27.64%\n8   市盈率(动态)    53.98    47.63     42.40     35.65     30.41     26.24\n```\n\n### 概念板块\n\n#### 同花顺-概念板块指数\n\n接口: stock_board_concept_index_ths\n\n目标地址: https://q.10jqka.com.cn/gn/detail/code/301558\n\n描述: 同花顺-板块-概念板块-指数日频率数据\n\n限量: 单次返回所有日频指数数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                         |\n|------------|-----|----------------------------------------------------------------------------|\n| symbol     | str | symbol=\"阿里巴巴概念\"; 可以通过调用 **ak.stock_board_concept_name_ths()** 查看同花顺的所有概念名称 |\n| start_date | str | start_date=\"20200101\"; 开始时间                                                |\n| end_date   | str | end_date=\"20250228\"; 结束时间                                                  |\n\n输出参数\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 日期  | object  | -   |\n| 开盘价 | float64 | -   |\n| 最高价 | float64 | -   |\n| 最低价 | float64 | -   |\n| 收盘价 | float64 | -   |\n| 成交量 | int64   | -   |\n| 成交额 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_board_concept_index_ths_df = ak.stock_board_concept_index_ths(symbol=\"阿里巴巴概念\", start_date=\"20200101\", end_date=\"20250321\")\nprint(stock_board_concept_index_ths_df)\n```\n\n数据示例\n\n```\n        日期       开盘价     最高价  ...     收盘价      成交量           成交额\n0     2020-01-02  1105.430  1133.391  ...  1130.280   1867106700  2.270406e+10\n1     2020-01-03  1133.673  1143.881  ...  1140.087   1734555400  2.049213e+10\n2     2020-01-06  1132.865  1160.416  ...  1152.178   1926283700  2.349216e+10\n3     2020-01-07  1154.766  1173.157  ...  1173.068   1750895500  2.130472e+10\n4     2020-01-08  1163.282  1165.660  ...  1145.718   1803020900  2.088292e+10\n...          ...       ...       ...  ...       ...          ...           ...\n1258  2025-03-17  1876.853  1885.138  ...  1873.981  10514337100  1.814942e+11\n1259  2025-03-18  1878.808  1895.155  ...  1880.904  10643759300  1.781277e+11\n1260  2025-03-19  1869.726  1870.423  ...  1853.801  10066894000  1.679532e+11\n1261  2025-03-20  1846.304  1869.670  ...  1839.816   9905099800  1.734386e+11\n1262  2025-03-21  1826.952  1830.013  ...  1790.115  10158278900  1.719123e+11\n[1263 rows x 7 columns]\n```\n\n#### 同花顺-概念板块简介\n\n接口: stock_board_concept_info_ths\n\n目标地址: http://q.10jqka.com.cn/gn/detail/code/301558/\n\n描述: 同花顺-板块-概念板块-板块简介\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                |\n|--------|-----|-----------------------------------------------------------------------------------|\n| symbol | str | symbol: str = \"阿里巴巴概念\"; 可以通过调用 **ak.stock_board_concept_name_ths()** 查看同花顺的所有概念名称 |\n\n输出参数\n\n| 名称 | 类型      | 描述 |\n|----|---------|----|\n| 项目 | object  | -  |\n| 值  | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_board_concept_info_ths_df = ak.stock_board_concept_info_ths(symbol=\"阿里巴巴概念\")\nprint(stock_board_concept_info_ths_df)\n```\n\n数据示例\n\n```\n         项目         值\n0        今开   1825.71\n1        昨收   1844.18\n2        最低   1752.74\n3        最高   1827.99\n4   成交量(万手)  12324.70\n5      板块涨幅    -4.96%\n6      涨幅排名   317/396\n7      涨跌家数    25/222\n8  资金净流入(亿)   -251.00\n9    成交额(亿)   2167.43\n```\n\n#### 东方财富-概念板块\n\n接口: stock_board_concept_name_em\n\n目标地址: https://quote.eastmoney.com/center/boardlist.html#concept_board\n\n描述: 东方财富网-行情中心-沪深京板块-概念板块\n\n限量: 单次返回当前时刻所有概念板块的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型      | 描述     |\n|----------|---------|--------|\n| 排名       | int64   | -      |\n| 板块名称     | object  | -      |\n| 板块代码     | object  | -      |\n| 最新价      | float64 | -      |\n| 涨跌额      | float64 | -      |\n| 涨跌幅      | float64 | 注意单位：% |\n| 总市值      | int64   | -      |\n| 换手率      | float64 | 注意单位：% |\n| 上涨家数     | int64   | -      |\n| 下跌家数     | int64   | -      |\n| 领涨股票     | object  | -      |\n| 领涨股票-涨跌幅 | float64 | 注意单位：% |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_board_concept_name_em_df = ak.stock_board_concept_name_em()\nprint(stock_board_concept_name_em_df)\n```\n\n数据示例\n\n```\n      排名  板块名称    板块代码  最新价    涨跌额  ...  换手率  上涨家数  下跌家数  领涨股票  领涨股票-涨跌幅\n0      1        乳业  BK0892  1045.53   42.05  ...   2.85    26     3  庄园牧场     10.04\n1      2      免税概念  BK0927  1308.35   48.13  ...   2.58    30     1  海南发展     10.01\n2      3      退税商店  BK0933  1214.86   40.97  ...   2.33    10     0  广百股份      9.97\n3      4  昨日连板_含一字  BK1051  3886.96  110.94  ...  16.32    13     7  广聚能源     10.01\n4      5      社区团购  BK0965   890.88   25.13  ...   5.56    36     3  宏辉果蔬      9.95\n..   ...       ...     ...      ...     ...  ...    ...   ...   ...   ...       ...\n457  458      商汤概念  BK0942  1309.35  -37.91  ...   3.60     1    13  上海临港      0.20\n458  459      数字哨兵  BK1084  1581.94  -45.94  ...   6.93     1    11  雄帝科技      1.21\n459  460     CPO概念  BK1128  2681.19  -79.49  ...   4.25     2    41  奥飞数据     11.02\n460  461   MLOps概念  BK1132  1171.08  -36.92  ...   5.50     1     9  安恒信息      2.16\n461  462     国资云概念  BK1008  1769.93  -60.23  ...  11.46     3    16  杭钢股份     10.01\n[462 rows x 12 columns]\n```\n\n#### 东方财富-概念板块-实时行情\n\n接口: stock_board_concept_spot_em\n\n目标地址: https://quote.eastmoney.com/bk/90.BK0818.html\n\n描述: 东方财富网-行情中心-沪深京板块-概念板块-实时行情\n\n限量: 单次返回指定概念板块的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| item  | object  | -  |\n| value | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_board_concept_spot_em_df = ak.stock_board_concept_spot_em(symbol=\"可燃冰\")\nprint(stock_board_concept_spot_em_df)\n```\n\n数据示例\n\n```\n  item         value\n0   最新  1.138760e+03\n1   最高  1.149370e+03\n2   最低  1.119960e+03\n3   开盘  1.119960e+03\n4  成交量  4.543638e+06\n5  成交额  2.916916e+09\n6  换手率  1.190000e+00\n7  涨跌额  2.487000e+01\n8  涨跌幅  2.230000e+00\n9   振幅  2.640000e+00\n```\n\n#### 东方财富-成份股\n\n接口: stock_board_concept_cons_em\n\n目标地址: http://quote.eastmoney.com/center/boardlist.html#boards-BK06551\n\n描述: 东方财富-沪深板块-概念板块-板块成份\n\n限量: 单次返回当前时刻所有成份股\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                              |\n|--------|-----|-------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"融资融券\"; 支持传入板块代码比如：BK0655，可以通过调用 **ak.stock_board_concept_name_em()** 查看东方财富-概念板块的所有行业名称 |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 代码     | object  | -       |\n| 名称     | object  | -       |\n| 最新价    | float64 | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 涨跌额    | float64 | -       |\n| 成交量    | float64 | 注意单位: 手 |\n| 成交额    | float64 | -       |\n| 振幅     | float64 | 注意单位: % |\n| 最高     | float64 | -       |\n| 最低     | float64 | -       |\n| 今开     | float64 | -       |\n| 昨收     | float64 | -       |\n| 换手率    | float64 | 注意单位: % |\n| 市盈率-动态 | float64 | -       |\n| 市净率    | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_board_concept_cons_em_df = ak.stock_board_concept_cons_em(symbol=\"融资融券\")\nprint(stock_board_concept_cons_em_df)\n```\n\n数据示例\n\n```\n       序号  代码    名称    最新价     涨跌幅  ...     今开      昨收    换手率  市盈率-动态    市净率\n0        1  301557   N常友  89.99  211.60  ...  80.23   28.88  83.66   37.89   4.00\n1        2  603409   N汇通  50.81  110.13  ...  48.50   24.18  75.43   38.13   4.44\n2        3  832149   利尔达  17.29   30.00  ...  13.01   13.30  37.53  -49.74  10.49\n3        4  837006  晟楠科技  31.39   29.98  ...  24.24   24.15  47.44 -195.48   8.85\n4        5  831167   鑫汇科  33.87   29.97  ...  29.90   26.06  15.82   59.27   6.26\n...    ...     ...   ...    ...     ...  ...    ...     ...    ...     ...    ...\n3669  3670  603663  三祥新材  24.75  -10.00  ...  24.75   27.50  14.56  102.19   8.02\n3670  3671  603906  龙蟠科技  12.13  -10.01  ...  13.01   13.48   9.35  -19.98   2.73\n3671  3672  000042  中洲控股   6.71  -10.05  ...   7.45    7.46   3.17   -6.45   0.86\n3672  3673  870436  大地电气  25.53  -10.20  ...  26.72   28.43  11.62  -32.46   6.16\n3673  3674  920106  林泰新材  93.35  -11.93  ...  98.00  106.00  25.92   34.45   8.44\n[3674 rows x 16 columns]\n```\n\n#### 东方财富-指数\n\n接口: stock_board_concept_hist_em\n\n目标地址: http://quote.eastmoney.com/bk/90.BK0715.html\n\n描述: 东方财富-沪深板块-概念板块-历史行情数据\n\n限量: 单次返回指定 symbol 和 adjust 的历史数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                            |\n|------------|-----|-------------------------------------------------------------------------------|\n| symbol     | str | symbol=\"绿色电力\"; 可以通过调用 **ak.stock_board_concept_name_em()** 查看东方财富-概念板块的所有概念代码 |\n| period     | str | period=\"daily\"; choice of {\"daily\", \"weekly\", \"monthly\"}                      |\n| start_date | str | start_date=\"20220101\"                                                         |\n| end_date   | str | end_date=\"20221128\"                                                           |\n| adjust     | str | adjust=\"\"; choice of {'': 不复权, 默认; \"qfq\": 前复权, \"hfq\": 后复权}                    |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 日期  | object  | -       |\n| 开盘  | float64 | -       |\n| 收盘  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 涨跌额 | float64 | -       |\n| 成交量 | int64   | -       |\n| 成交额 | float64 | -       |\n| 振幅  | float64 | 注意单位: % |\n| 换手率 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_board_concept_hist_em_df = ak.stock_board_concept_hist_em(symbol=\"绿色电力\", period=\"daily\", start_date=\"20220101\", end_date=\"20250227\", adjust=\"\")\nprint(stock_board_concept_hist_em_df)\n```\n\n数据示例\n\n```\n      日期        开盘      收盘      最高  ...     成交量       成交额    振幅   换手率\n0    2022-01-04  1151.48  1143.13  1155.59  ...  57503811  4.502800e+10  1.22  1.42\n1    2022-01-05  1141.91  1106.74  1141.91  ...  54859005  4.212589e+10  3.74  1.35\n2    2022-01-06  1100.52  1115.16  1122.27  ...  42174619  3.282551e+10  2.25  1.04\n3    2022-01-07  1115.49  1089.20  1118.08  ...  44604672  3.478526e+10  2.61  1.10\n4    2022-01-10  1083.43  1082.51  1088.21  ...  36095282  2.706919e+10  1.23  0.89\n..          ...      ...      ...      ...  ...       ...           ...   ...   ...\n756  2025-02-21   985.80   986.71   987.88  ...  42772223  2.825437e+10  0.91  1.06\n757  2025-02-24   986.75   996.56   997.62  ...  43658453  3.027056e+10  1.13  1.08\n758  2025-02-25   990.79   990.51   997.28  ...  38009252  2.627609e+10  1.00  0.94\n759  2025-02-26   991.87  1002.54  1002.57  ...  39788170  2.634823e+10  1.08  0.98\n760  2025-02-27  1002.54   995.28  1003.97  ...  38629884  2.581886e+10  1.89  0.95\n[761 rows x 11 columns]\n```\n\n#### 东方财富-指数-分时\n\n接口: stock_board_concept_hist_min_em\n\n目标地址: http://quote.eastmoney.com/bk/90.BK0715.html\n\n描述: 东方财富-沪深板块-概念板块-分时历史行情数据\n\n限量: 单次返回指定 symbol 和 period 的历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                           |\n|--------|-----|------------------------------------------------------------------------------|\n| symbol | str | symbol=\"长寿药\"; 可以通过调用 **ak.stock_board_concept_name_em()** 查看东方财富-概念板块的所有概念代码 |\n| period | str | period=\"5\"; choice of {\"1\", \"5\", \"15\", \"30\", \"60\"}                           |\n\n输出参数-1分钟\n\n| 名称   | 类型      | 描述 |\n|------|---------|----|\n| 日期时间 | object  | -  |\n| 开盘   | float64 | -  |\n| 收盘   | float64 | -  |\n| 最高   | float64 | -  |\n| 最低   | float64 | -  |\n| 成交量  | int64   | -  |\n| 成交额  | float64 | -  |\n| 最新价  | float64 | -  |\n\n接口示例-1分钟\n\n```python\nimport akshare as ak\n\nstock_board_concept_hist_min_em_df = ak.stock_board_concept_hist_min_em(symbol=\"长寿药\", period=\"1\")\nprint(stock_board_concept_hist_min_em_df)\n```\n\n数据示例-1分钟\n\n```\n     日期时间      开盘      收盘  ...    成交量         成交额      最新价\n0    2023-06-29 09:30  982.68  982.68  ...   4108   3937927.0  982.676\n1    2023-06-29 09:31  982.68  983.77  ...  17078  17015428.0  982.802\n2    2023-06-29 09:32  983.74  982.80  ...   7764   8582773.0  982.864\n3    2023-06-29 09:33  982.70  984.44  ...  14440  12411281.0  983.023\n4    2023-06-29 09:34  984.15  986.00  ...  11301  10606470.0  983.438\n..                ...     ...     ...  ...    ...         ...      ...\n236  2023-06-29 14:56  989.46  988.81  ...  10894  10521292.0  989.834\n237  2023-06-29 14:57  988.91  988.82  ...  11955  13259401.0  989.828\n238  2023-06-29 14:58  988.93  989.12  ...    615    927170.0  989.828\n239  2023-06-29 14:59  989.12  989.12  ...      0         0.0  989.828\n240  2023-06-29 15:00  989.12  989.03  ...  13803  14810685.0  989.819\n[241 rows x 8 columns]\n```\n\n输出参数-其他\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 日期时间 | object  | -       |\n| 开盘   | float64 | -       |\n| 收盘   | float64 | -       |\n| 最高   | float64 | -       |\n| 最低   | float64 | -       |\n| 涨跌幅  | float64 | 注意单位: % |\n| 涨跌额  | float64 | -       |\n| 成交量  | int64   | -       |\n| 成交额  | float64 | -       |\n| 振幅   | float64 | 注意单位: % |\n| 换手率  | float64 | 注意单位: % |\n\n接口示例-其他\n\n```python\nimport akshare as ak\n\nstock_board_concept_hist_min_em_df = ak.stock_board_concept_hist_min_em(symbol=\"长寿药\", period=\"5\")\nprint(stock_board_concept_hist_min_em_df)\n```\n\n数据示例-其他\n\n```\n        日期时间      开盘      收盘      最高  ...     成交量          成交额    振幅   换手率\n0     2023-05-15 09:35  991.11  989.41  991.29  ...  143820  179947201.0  0.67  0.12\n1     2023-05-15 09:40  989.10  985.13  991.33  ...  106496  125452569.0  0.67  0.09\n2     2023-05-15 09:45  985.10  983.65  985.35  ...   79590  103164009.0  0.22  0.07\n3     2023-05-15 09:50  983.35  979.80  983.38  ...   95082  128923628.0  0.41  0.08\n4     2023-05-15 09:55  979.61  979.81  981.33  ...   62847   84142446.0  0.25  0.05\n                ...     ...     ...     ...  ...     ...          ...   ...   ...\n1531  2023-06-29 14:40  989.05  989.00  989.70  ...   26887   29158991.0  0.10  0.02\n1532  2023-06-29 14:45  989.00  988.57  989.31  ...   23680   26278319.0  0.12  0.02\n1533  2023-06-29 14:50  988.41  988.41  989.17  ...   32369   38999798.0  0.11  0.03\n1534  2023-06-29 14:55  988.54  989.29  989.34  ...   43791   49956030.0  0.12  0.04\n1535  2023-06-29 15:00  989.46  989.03  989.71  ...   37267   39518548.0  0.10  0.03\n[1536 rows x 11 columns]\n```\n\n#### 富途牛牛-美股概念-成分股\n\n接口: stock_concept_cons_futu\n\n目标地址: https://www.futunn.com/quote/sparks-us\n\n描述: 富途牛牛-主题投资-概念板块-成分股\n\n限量: 单次返回指定概念板块成分股数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                      |\n|--------|-----|---------------------------------------------------------|\n| symbol | str | symbol=\"特朗普概念股\"; choice of {\"巴菲特持仓\", \"佩洛西持仓\", \"特朗普概念股\"} |\n\n输出参数\n\n| 名称   | 类型      | 描述 |\n|------|---------|----|\n| 代码   | object  | -  |\n| 股票名称 | object  | -  |\n| 最新价  | float64 | -  |\n| 涨跌额  | float64 | -  |\n| 涨跌幅  | object  | -  |\n| 成交量  | object  | -  |\n| 成交额  | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_concept_cons_futu_df = ak.stock_concept_cons_futu(symbol=\"特朗普概念股\")\nprint(stock_concept_cons_futu_df)\n```\n\n数据示例\n\n```\n      代码     股票名称     最新价    涨跌额   涨跌幅   成交量       成交额\n0   RIOT   Riot Platforms    9.71   0.73  +8.13%  2032.27万     1.94亿\n1   CLSK       CleanSpark   10.56   0.76  +7.76%  2610.58万     2.71亿\n2   MARA    MARA Holdings   16.24   0.74  +4.77%  3255.48万     5.23亿\n3   COIN         Coinbase  193.96   7.69  +4.13%   995.08万    19.27亿\n4     GM             通用汽车   53.70   1.90  +3.67%  1153.40万     6.15亿\n5   INTC              英特尔   23.32   0.80  +3.55%  5915.33万    13.73亿\n6   TSLA              特斯拉  251.44   8.60  +3.54%  6928.25万   174.84亿\n7    FLR               福陆   54.59   1.78  +3.37%   257.97万     1.40亿\n8    BTU   Peabody Energy   27.20   0.87  +3.30%   290.58万  7876.67万\n9    RUM           Rumble    5.95   0.18  +3.12%   295.22万  1744.41万\n10   EVR         Evercore  271.84   8.08  +3.06%    42.95万     1.17亿\n11    GS               高盛  526.96  15.49  +3.03%   216.99万    11.35亿\n12  AMAT             应用材料  186.48   4.66  +2.56%   405.30万     7.54亿\n13     F             福特汽车   10.60   0.24  +2.32%  4930.90万     5.20亿\n14  TSCO          拖拉机供应公司  276.21   5.85  +2.16%   105.19万     2.89亿\n15  MSTR    MicroStrategy  227.80   4.81  +2.16%  1799.39万    42.09亿\n16   LNG  Cheniere Energy  192.58   3.81  +2.02%   166.95万     3.21亿\n17   HUM              哈门那  260.60   5.05  +1.98%   146.09万     3.80亿\n18   UNH             联合健康  567.03   9.26  +1.66%   260.81万    14.75亿\n19  STLD   Steel Dynamics  135.65   2.07  +1.55%    92.67万     1.25亿\n20    MS            摩根士丹利  117.81   1.67  +1.44%   479.84万     5.64亿\n21   NUE             纽柯钢铁  144.61   2.01  +1.41%   122.78万     1.77亿\n22   BAC             美国银行   41.88   0.55  +1.33%  3085.14万    12.90亿\n23  KLAC               科磊  670.33   6.96  +1.05%   101.66万     6.84亿\n24   JPM             摩根大通  221.49   1.71  +0.78%   560.07万    12.38亿\n25   WFC             富国银行   64.07   0.37  +0.58%  1344.72万     8.60亿\n26   COP             康菲石油  109.21   0.35  +0.32%   600.31万     6.56亿\n27   XOM            埃克森美孚  118.96   0.35  +0.30%  1043.67万    12.40亿\n28   LLY               礼来  806.06  -0.08  -0.01%   373.33万    30.00亿\n29   MRK              默沙东  101.65  -0.22  -0.22%   674.14万     6.84亿\n30   OXY             西方石油   50.40  -0.16  -0.32%   799.79万     4.03亿\n31    DE             迪尔股份  400.37  -1.31  -0.33%    90.26万     3.61亿\n32   CVX              雪佛龙  153.41  -0.56  -0.36%   597.89万     9.18亿\n33   TXN             德州仪器  202.46  -1.20  -0.59%   525.32万    10.65亿\n34   DJT        特朗普媒体科技集团   33.94  -0.40  -1.16%     1.69亿    63.70亿\n35  PHUN         Phunware    6.37  -0.54  -7.81%  1239.14万  8446.10万\n```\n\n### 行业板块\n\n#### 同花顺-同花顺行业一览表\n\n接口: stock_board_industry_summary_ths\n\n目标地址: https://q.10jqka.com.cn/thshy/\n\n描述: 同花顺-同花顺行业一览表\n\n限量: 单次返回当前时刻同花顺行业一览表\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述       |\n|---------|---------|----------|\n| 序号      | int64   | -        |\n| 板块      | object  | -        |\n| 涨跌幅     | object  | 注意单位: %  |\n| 总成交量    | float64 | 注意单位: 万手 |\n| 总成交额    | float64 | 注意单位: 亿元 |\n| 净流入     | float64 | 注意单位: 亿元 |\n| 上涨家数    | float64 | -        |\n| 下跌家数    | float64 | -        |\n| 均价      | float64 | -        |\n| 领涨股     | float64 | -        |\n| 领涨股-最新价 | object  | -        |\n| 领涨股-涨跌幅 | object  | 注意单位: %  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_board_industry_summary_ths_df = ak.stock_board_industry_summary_ths()\nprint(stock_board_industry_summary_ths_df)\n```\n\n数据示例\n\n```\n   序号     板块  涨跌幅 总成交量  总成交额  ...  下跌家数 均价 领涨股  领涨股-最新价 领涨股-涨跌幅\n0    1     传媒  6.17  3737.04  278.19  ...     6   7.44  旗天科技     4.54   20.11\n1    2   通信服务  5.28   764.85   63.64  ...     3   8.32  线上线下    27.64   20.02\n2    3  计算机应用  4.97  3581.73  423.25  ...     9  11.82  当虹科技    24.72   20.00\n3    4  互联网电商  4.46   254.22   15.38  ...     1   6.05   跨境通     1.38    7.81\n4    5   其他电子  4.23   444.29   66.62  ...     2  14.99  百邦科技    20.83   17.29\n..  ..    ...   ...      ...     ...  ...   ...    ...   ...      ...     ...\n71  72  酒店及餐饮  0.70    68.58    7.73  ...     2  11.27  金陵饭店     6.41    2.40\n72  73   港口航运  0.68   779.30   49.41  ...     9   6.34  国航远洋     3.88    2.65\n73  74     银行  0.50  2349.83  147.23  ...     8   6.27  渝农商行     5.15    1.78\n74  75  房地产服务  0.06   267.35   11.01  ...     4   4.12   世联行     1.63    2.52\n75  76    贵金属 -0.73   270.28   35.48  ...     8  13.13  西部黄金    11.69    1.39\n[76 rows x 12 columns]\n```\n\n#### 同花顺-指数\n\n接口: stock_board_industry_index_ths\n\n目标地址: https://q.10jqka.com.cn/thshy/detail/code/881270/\n\n描述: 同花顺-板块-行业板块-指数日频率数据\n\n限量: 单次返回所有日频指数数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                      |\n|------------|-----|-------------------------------------------------------------------------|\n| symbol     | str | symbol=\"元件\"; 可以通过调用 **ak.stock_board_industry_name_ths()** 查看同花顺的所有行业名称 |\n| start_date | str | start_date=\"20200101\"; 开始时间                                             |\n| end_date   | str | end_date=\"20211027\"; 结束时间                                               |\n\n输出参数\n\n| 名称  | 类型      | 描述  |\n|-----|---------|-----|\n| 日期  | object  | -   |\n| 开盘价 | float64 | -   |\n| 最高价 | float64 | -   |\n| 最低价 | float64 | -   |\n| 收盘价 | float64 | -   |\n| 成交量 | int64   | -   |\n| 成交额 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_board_industry_index_ths_df = ak.stock_board_industry_index_ths(symbol=\"元件\", start_date=\"20240101\", end_date=\"20240718\")\nprint(stock_board_industry_index_ths_df)\n```\n\n数据示例\n\n```\n      日期       开盘价      最高价  ...      收盘价        成交量          成交额\n0    2024-01-02  8383.164  8434.157  ...  8369.686   378801210  6.537645e+09\n1    2024-01-03  8336.885  8348.720  ...  8200.462   397687380  6.681469e+09\n2    2024-01-04  8181.495  8195.721  ...  8122.310   320899470  5.532075e+09\n3    2024-01-05  8129.346  8193.125  ...  7927.934   400481990  6.126120e+09\n4    2024-01-08  7920.488  7936.585  ...  7687.373   425991150  5.932317e+09\n..          ...       ...       ...  ...       ...         ...           ...\n126  2024-07-12  7963.094  8054.884  ...  7975.548  1195854040  2.105850e+10\n127  2024-07-15  7951.025  7975.132  ...  7909.781   992999090  1.719067e+10\n128  2024-07-16  7883.687  8248.755  ...  8239.074  1328925150  2.387857e+10\n129  2024-07-17  8258.454  8260.010  ...  7946.988  1309263550  2.460237e+10\n130  2024-07-18  7810.944  7838.241  ...  7755.153  1248902920  2.164933e+10\n[131 rows x 7 columns]\n```\n\n#### 东方财富-行业板块\n\n接口: stock_board_industry_name_em\n\n目标地址: https://quote.eastmoney.com/center/boardlist.html#industry_board\n\n描述: 东方财富-沪深京板块-行业板块\n\n限量: 单次返回当前时刻所有行业板的实时行情数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型      | 描述     |\n|----------|---------|--------|\n| 排名       | int64   | -      |\n| 板块名称     | object  | -      |\n| 板块代码     | object  | -      |\n| 最新价      | float64 | -      |\n| 涨跌额      | float64 | -      |\n| 涨跌幅      | float64 | 注意单位：% |\n| 总市值      | int64   | -      |\n| 换手率      | float64 | 注意单位：% |\n| 上涨家数     | int64   | -      |\n| 下跌家数     | int64   | -      |\n| 领涨股票     | object  | -      |\n| 领涨股票-涨跌幅 | float64 | 注意单位：% |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_board_industry_name_em_df = ak.stock_board_industry_name_em()\nprint(stock_board_industry_name_em_df)\n```\n\n数据示例\n\n```\n    排名   板块名称 板块代码 最新价     涨跌额  ...   换手率  上涨家数  下跌家数  领涨股票  领涨股票-涨跌幅\n0    1   煤炭行业  BK0437  11332.18  518.57  ...  1.34    35     0  云煤能源     10.12\n1    2  互联网服务  BK0447  16332.38  673.12  ...  3.38   144     3   信雅达      9.97\n2    3  计算机设备  BK0735    867.59   34.86  ...  3.00    50     1  中威电子     20.08\n3    4   通信服务  BK0736    793.26   28.90  ...  1.56    40     1   二六三      9.95\n4    5   软件开发  BK0737    691.48   24.85  ...  3.02   179     8  国投智能     20.00\n..  ..    ...     ...       ...     ...  ...   ...   ...   ...   ...       ...\n81  82   航空机场  BK0420   4109.35   11.15  ...  0.43     9     5  南方航空      1.67\n82  83   航运港口  BK0450   8431.11   22.32  ...  0.45    19     8   唐山港      2.33\n83  84   能源金属  BK1015    399.07    0.36  ...  1.19     6     5  寒锐钴业      1.03\n84  85     银行  BK0475   3050.18   -0.42  ...  0.23    16    16  成都银行      1.80\n85  86   珠宝首饰  BK0734    351.08   -0.05  ...  1.56     8     9   曼卡龙      3.36\n[86 rows x 12 columns]\n```\n\n#### 东方财富-行业板块-实时行情\n\n接口: stock_board_industry_spot_em\n\n目标地址: https://quote.eastmoney.com/bk/90.BK1027.html\n\n描述: 东方财富网-沪深板块-行业板块-实时行情\n\n限量: 单次返回指定板块的实时行情数据\n\n输入参数\n\n| 名称     | 类型  | 描述           |\n|--------|-----|--------------|\n| symbol | str | symbol=\"小金属\" |\n\n输出参数\n\n| 名称    | 类型      | 描述 |\n|-------|---------|----|\n| item  | object  | -  |\n| value | float64 | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_board_industry_spot_em_df = ak.stock_board_industry_spot_em(symbol=\"小金属\")\nprint(stock_board_industry_spot_em_df)\n```\n\n数据示例\n\n```\n  item         value\n0   最新  1.957370e+03\n1   最高  1.990130e+03\n2   最低  1.953700e+03\n3   开盘  1.964160e+03\n4  成交量  1.386981e+07\n5  成交额  2.165428e+10\n6  换手率  2.970000e+00\n7  涨跌额 -1.791000e+01\n8  涨跌幅 -9.100000e-01\n9   振幅  1.840000e+00\n```\n\n#### 东方财富-成份股\n\n接口: stock_board_industry_cons_em\n\n目标地址: https://data.eastmoney.com/bkzj/BK1027.html\n\n描述: 东方财富-沪深板块-行业板块-板块成份\n\n限量: 单次返回指定 symbol 的所有成份股\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                              |\n|--------|-----|-------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"小金属\"; 支持传入板块代码比如：BK1027，可以通过调用 **ak.stock_board_industry_name_em()** 查看东方财富-行业板块的所有行业代码 |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 代码     | object  | -       |\n| 名称     | object  | -       |\n| 最新价    | float64 | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 涨跌额    | float64 | -       |\n| 成交量    | float64 | 注意单位: 手 |\n| 成交额    | float64 | -       |\n| 振幅     | float64 | 注意单位: % |\n| 最高     | float64 | -       |\n| 最低     | float64 | -       |\n| 今开     | float64 | -       |\n| 昨收     | float64 | -       |\n| 换手率    | float64 | 注意单位: % |\n| 市盈率-动态 | float64 | -       |\n| 市净率    | float64 | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_board_industry_cons_em_df = ak.stock_board_industry_cons_em(symbol=\"小金属\")\nprint(stock_board_industry_cons_em_df)\n```\n\n数据示例\n\n```\n    序号  代码   名称    最新价   涨跌幅  ...  今开 昨收    换手率   市盈率-动态 市净率\n0    1  300811  铂科新材  53.34  5.17  ...  52.18  50.72   2.93     42.12  5.82\n1    2  002842  翔鹭钨业   5.36  3.68  ...   5.16   5.17   5.22    -27.42  1.77\n2    3  000962  东方钽业   9.89  3.13  ...   9.58   9.59   1.94     25.59  2.15\n3    4  600980  北矿科技  13.21  2.72  ...  12.76  12.86   2.96     26.17  1.95\n4    5  300328  宜安科技   4.92  2.71  ...   4.77   4.79   1.37    495.38  3.10\n5    6  002428  云南锗业   9.84  2.29  ...   9.63   9.62   2.53   -991.04  4.58\n6    7  603993  洛阳钼业   6.13  2.17  ...   5.98   6.00   0.59     40.65  2.48\n7    8  600281  华阳新材   2.95  2.08  ...   2.85   2.89   4.80     -9.12  4.74\n8    9  688077   大地熊  15.40  2.05  ...  15.17  15.09   1.26    -38.03  1.58\n9   10  300127  银河磁体  13.90  1.98  ...  13.56  13.63   2.18     23.07  3.17\n10  11  000831  中国稀土  28.14  1.74  ...  26.90  27.66   3.43    178.41  5.76\n11  12  000960  锡业股份  13.26  1.69  ...  13.00  13.04   0.82     14.94  1.25\n12  13  605376  博迁新材  19.39  1.52  ...  18.99  19.10   0.73    296.20  3.12\n13  14  301141  中科磁业  45.27  1.39  ...  43.90  44.65  19.94     78.91  3.19\n14  15  600259  广晟有色  29.04  1.29  ...  28.50  28.67   1.07     44.03  2.71\n15  16  002149  西部材料  12.68  1.20  ...  12.47  12.53   0.87     30.81  2.14\n16  17  600206  有研新材  10.22  1.19  ...  10.11  10.10   0.94     46.45  2.34\n17  18  603399  吉翔股份   6.96  1.16  ...   6.83   6.88   2.23    -13.83  1.80\n18  19  300835  龙磁科技  23.70  1.11  ...  23.23  23.44   2.30     32.74  2.73\n19  20  600111  北方稀土  18.59  1.03  ...  18.28  18.40   0.88     36.51  3.25\n20  21  301026  浩通科技  21.66  1.03  ...  21.44  21.44   1.76     17.86  1.70\n21  22  002167  东方锆业   4.94  1.02  ...   4.87   4.89   1.46   -380.23  2.53\n22  23  600456  宝钛股份  26.40  0.92  ...  26.30  26.16   0.83     17.22  1.93\n23  24  300224  正海磁材  10.32  0.58  ...  10.20  10.26   0.66     17.27  2.43\n24  25  002378  章源钨业   4.73  0.42  ...   4.71   4.71   0.52     38.67  2.83\n25  26  601958  金钼股份   9.86  0.41  ...   9.82   9.82   0.57     10.18  2.07\n26  27  600366  宁波韵升   5.86  0.34  ...   5.85   5.84   0.78    -19.79  1.12\n27  28  000970  中科三环   8.95  0.34  ...   8.89   8.92   1.04     36.51  1.67\n28  29  600549  厦门钨业  16.19  0.31  ...  16.05  16.14   0.68     14.36  2.05\n29  30  600392  盛和资源   8.93  0.22  ...   8.87   8.91   1.01     74.21  1.77\n30  31  600459  贵研铂业  13.54  0.22  ...  13.50  13.51   0.44     19.26  1.63\n31  32  600615  丰华股份   9.44  0.21  ...   9.35   9.42   2.03 -20739.46  2.80\n32  33  000657  中钨高新   8.08  0.12  ...   8.02   8.07   0.89     26.84  1.97\n33  34  300748  金力永磁  16.25  0.00  ...  16.10  16.25   1.02     33.16  3.09\n34  35  000795   英洛华   5.04  0.00  ...   5.04   5.04   1.00     52.08  2.16\n35  36  688190  云路股份  61.66 -0.48  ...  61.99  61.96   0.67     23.29  3.38\n36  37  002738  中矿资源  32.29 -1.10  ...  32.10  32.65   2.25      8.54  1.96\n[37 rows x 16 columns]\n```\n\n#### 东方财富-指数-日频\n\n接口: stock_board_industry_hist_em\n\n目标地址: https://quote.eastmoney.com/bk/90.BK1027.html\n\n描述: 东方财富-沪深板块-行业板块-历史行情数据\n\n限量: 单次返回指定 symbol 和 adjust 的所有历史数据\n\n输入参数\n\n| 名称         | 类型  | 描述                                                                            |\n|------------|-----|-------------------------------------------------------------------------------|\n| symbol     | str | symbol=\"小金属\"; 可以通过调用 **ak.stock_board_industry_name_em()** 查看东方财富-行业板块的所有行业代码 |\n| start_date | str | start_date=\"20211201\";                                                        |\n| end_date   | str | end_date=\"20220401\";                                                          |\n| period     | str | period=\"日k\"; 周期; choice of {\"日k\", \"周k\", \"月k\"}                                 |\n| adjust     | str | adjust=\"\"; choice of {'': 不复权, 默认; \"qfq\": 前复权, \"hfq\": 后复权}                    |\n\n输出参数\n\n| 名称  | 类型      | 描述      |\n|-----|---------|---------|\n| 日期  | object  | -       |\n| 开盘  | float64 | -       |\n| 收盘  | float64 | -       |\n| 最高  | float64 | -       |\n| 最低  | float64 | -       |\n| 涨跌幅 | float64 | 注意单位: % |\n| 涨跌额 | float64 | -       |\n| 成交量 | int64   | -       |\n| 成交额 | float64 | -       |\n| 振幅  | float64 | 注意单位: % |\n| 换手率 | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_board_industry_hist_em_df = ak.stock_board_industry_hist_em(symbol=\"小金属\", start_date=\"20211201\", end_date=\"20240222\", period=\"日k\", adjust=\"\")\nprint(stock_board_industry_hist_em_df)\n```\n\n数据示例\n\n```\n        日期      开盘      收盘     最高  ...       成交量        成交额    振幅   换手率\n0    2021-12-01  1915.46  1915.23  1919.43  ...  17207231  3.134633e+10  1.77  3.68\n1    2021-12-02  1909.70  1925.26  1947.38  ...  17723129  3.914958e+10  3.32  3.79\n2    2021-12-03  1912.86  1923.48  1930.06  ...  14027893  3.125242e+10  2.52  3.00\n3    2021-12-06  1924.43  1901.92  1940.57  ...  15612344  3.377371e+10  2.07  3.34\n4    2021-12-07  1914.66  1851.77  1917.07  ...  14501660  3.131906e+10  4.61  3.10\n..          ...      ...      ...      ...  ...       ...           ...   ...   ...\n534  2024-02-08  1234.37  1271.41  1284.17  ...   9309314  1.033029e+10  5.01  1.99\n535  2024-02-19  1271.91  1285.67  1294.59  ...   7797152  9.248781e+09  2.22  1.67\n536  2024-02-20  1279.11  1285.77  1288.37  ...   5182130  6.270108e+09  1.86  1.11\n537  2024-02-21  1274.53  1303.25  1336.49  ...   6059774  7.920041e+09  5.11  1.30\n538  2024-02-22  1298.16  1320.27  1320.27  ...   4594781  5.684279e+09  1.94  0.98\n[539 rows x 11 columns]\n```\n\n#### 东方财富-指数-分时\n\n接口: stock_board_industry_hist_min_em\n\n目标地址: http://quote.eastmoney.com/bk/90.BK1027.html\n\n描述: 东方财富-沪深板块-行业板块-分时历史行情数据\n\n限量: 单次返回指定 symbol 和 period 的所有历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                            |\n|--------|-----|-------------------------------------------------------------------------------|\n| symbol | str | symbol=\"小金属\"; 可以通过调用 **ak.stock_board_industry_name_em()** 查看东方财富-行业板块的所有行业代码 |\n| period | str | period=\"\"; choice of {\"1\", \"5\", \"15\", \"30\", \"60\"}                             |\n\n输出参数-1分钟\n\n| 名称   | 类型      | 描述 |\n|------|---------|----|\n| 日期时间 | object  | -  |\n| 开盘   | float64 | -  |\n| 收盘   | float64 | -  |\n| 最高   | float64 | -  |\n| 最低   | float64 | -  |\n| 成交量  | int64   | -  |\n| 成交额  | float64 | -  |\n| 最新价  | float64 | -  |\n\n接口示例-1分钟\n\n```python\nimport akshare as ak\n\nstock_board_industry_hist_min_em_df = ak.stock_board_industry_hist_min_em(symbol=\"小金属\", period=\"1\")\nprint(stock_board_industry_hist_min_em_df)\n```\n\n数据示例-1分钟\n\n```\n         日期时间       开盘       收盘  ...    成交量          成交额       最新价\n0    2023-06-27 09:30  1560.07  1560.07  ...  19551   27815455.0  1560.071\n1    2023-06-27 09:31  1560.07  1560.12  ...  82736  120214342.0  1559.491\n2    2023-06-27 09:32  1560.22  1563.32  ...  43374   70802338.0  1560.403\n3    2023-06-27 09:33  1563.78  1564.85  ...  46300   71769286.0  1561.553\n4    2023-06-27 09:34  1564.86  1566.13  ...  55577   77527242.0  1562.524\n..                ...      ...      ...  ...    ...          ...       ...\n236  2023-06-27 14:56  1581.26  1581.44  ...  21701   30935379.0  1572.689\n237  2023-06-27 14:57  1581.79  1581.75  ...  30772   40940268.0  1572.758\n238  2023-06-27 14:58  1581.62  1581.64  ...   2585    2789725.0  1572.763\n239  2023-06-27 14:59  1581.64  1581.64  ...      0          0.0  1572.763\n240  2023-06-27 15:00  1581.64  1581.39  ...  52691   74537630.0  1572.874\n[241 rows x 8 columns]\n```\n\n输出参数-其他\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 日期时间 | object  | -       |\n| 开盘   | float64 | -       |\n| 收盘   | float64 | -       |\n| 最高   | float64 | -       |\n| 最低   | float64 | -       |\n| 涨跌幅  | float64 | 注意单位: % |\n| 涨跌额  | float64 | -       |\n| 成交量  | int64   | -       |\n| 成交额  | float64 | -       |\n| 振幅   | float64 | 注意单位: % |\n| 换手率  | float64 | 注意单位: % |\n\n接口示例-其他\n\n```python\nimport akshare as ak\n\nstock_board_industry_hist_min_em_df = ak.stock_board_industry_hist_min_em(symbol=\"小金属\", period=\"5\")\nprint(stock_board_industry_hist_min_em_df)\n```\n\n数据示例-其他\n\n```\n                  日期时间       开盘       收盘  ...          成交额    振幅   换手率\n0     2023-05-11 09:35  1601.02  1599.16  ...  472122686.0  0.19  0.04\n1     2023-05-11 09:40  1598.86  1595.23  ...  307441109.0  0.39  0.04\n2     2023-05-11 09:45  1595.47  1592.76  ...  231066676.0  0.27  0.03\n3     2023-05-11 09:50  1592.91  1596.50  ...  165816236.0  0.24  0.02\n4     2023-05-11 09:55  1596.65  1598.37  ...  128737348.0  0.16  0.02\n                ...      ...      ...  ...          ...   ...   ...\n1531  2023-06-27 14:40  1580.65  1581.91  ...  117492687.0  0.09  0.03\n1532  2023-06-27 14:45  1581.77  1581.88  ...  106035779.0  0.05  0.02\n1533  2023-06-27 14:50  1581.86  1581.49  ...  129199767.0  0.07  0.02\n1534  2023-06-27 14:55  1581.20  1580.99  ...  147442240.0  0.07  0.02\n1535  2023-06-27 15:00  1581.26  1581.39  ...  149203002.0  0.06  0.02\n[1536 rows x 11 columns]\n```\n\n### 股票热度\n\n#### 股票热度-雪球\n\n##### 关注排行榜\n\n接口: stock_hot_follow_xq\n\n目标地址: https://xueqiu.com/hq\n\n描述: 雪球-沪深股市-热度排行榜-关注排行榜\n\n限量: 单次返回指定 symbol 的排行数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                      |\n|--------|-----|-----------------------------------------|\n| symbol | str | symbol=\"最热门\"; choice of {\"本周新增\", \"最热门\"} |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 股票代码 | object  | -       |\n| 股票简称 | object  | -       |\n| 关注   | float64 | -       |\n| 最新价  | float64 | 注意单位: 元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hot_follow_xq_df = ak.stock_hot_follow_xq(symbol=\"最热门\")\nprint(stock_hot_follow_xq_df)\n```\n\n数据示例\n\n```\n     股票代码  股票简称         关注      最新价\n0     SH600519  贵州茅台  2763065.0  1663.36\n1     SH601318  中国平安  2321952.0    38.97\n2     SH600036  招商银行  2039407.0    28.29\n3     SZ000651  格力电器  1768422.0    32.98\n4     SZ002594   比亚迪  1494585.0   192.68\n        ...   ...        ...      ...\n5420  BJ836957  汉维科技      180.0     9.42\n5421  BJ836942  恒立钻具      178.0    13.07\n5422  BJ836419  万德股份      176.0    11.15\n5423  BJ873690   N捷众       30.0    21.01\n5424  SZ300307  慈星股份        NaN     6.20\n[5425 rows x 4 columns]\n```\n\n##### 讨论排行榜\n\n接口: stock_hot_tweet_xq\n\n目标地址: https://xueqiu.com/hq\n\n描述: 雪球-沪深股市-热度排行榜-讨论排行榜\n\n限量: 单次返回指定 symbol 的排行数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                      |\n|--------|-----|-----------------------------------------|\n| symbol | str | symbol=\"最热门\"; choice of {\"本周新增\", \"最热门\"} |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 股票代码 | object  | -       |\n| 股票简称 | object  | -       |\n| 关注   | float64 | -       |\n| 最新价  | float64 | 注意单位: 元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hot_tweet_xq_df = ak.stock_hot_tweet_xq(symbol=\"最热门\")\nprint(stock_hot_tweet_xq_df)\n```\n\n数据示例\n\n```\n      股票代码  股票简称     关注       最新价\n0     SZ002594   比亚迪  89745   192.680\n1     SH600519  贵州茅台  85990  1663.360\n2     SZ300750  宁德时代  52705   150.900\n3     SZ000977  浪潮信息  50664    30.160\n4     SZ002229  鸿博股份  46794    24.690\n        ...   ...    ...       ...\n5420  SH900913  国新B股      0     0.246\n5421  SH900901  云赛B股      0     0.496\n5422  BJ870508  丰安股份      0    12.530\n5423  BJ836149  旭杰科技      0     7.970\n5424  BJ831175  派诺科技      0    22.490\n[5425 rows x 4 columns]\n```\n\n##### 交易排行榜\n\n接口: stock_hot_deal_xq\n\n目标地址: https://xueqiu.com/hq\n\n描述: 雪球-沪深股市-热度排行榜-交易排行榜\n\n限量: 单次返回指定 symbol 的排行数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                      |\n|--------|-----|-----------------------------------------|\n| symbol | str | symbol=\"最热门\"; choice of {\"本周新增\", \"最热门\"} |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 股票代码 | object  | -       |\n| 股票简称 | object  | -       |\n| 关注   | float64 | -       |\n| 最新价  | float64 | 注意单位: 元 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hot_deal_xq_df = ak.stock_hot_deal_xq(symbol=\"最热门\")\nprint(stock_hot_deal_xq_df)\n```\n\n数据示例\n\n```\n     股票代码  股票简称   关注      最新价\n0     SH601318  中国平安  304    38.97\n1     SZ002229  鸿博股份  258    24.69\n2     SH600519  贵州茅台  257  1663.36\n3     SZ002594   比亚迪  257   192.68\n4     SH600880  博瑞传播  231     4.90\n        ...   ...  ...      ...\n5420  SZ300932  三友联众    0    15.95\n5421  SZ300956  英力股份    0    18.21\n5422  SH688618  三旺通信    0    52.82\n5423  BJ836149  旭杰科技    0     7.97\n5424  SH688655   迅捷兴    0    14.64\n[5425 rows x 4 columns]\n```\n\n#### 股票热度-东财\n\n##### 人气榜-A股\n\n接口: stock_hot_rank_em\n\n目标地址: http://guba.eastmoney.com/rank/\n\n描述: 东方财富网站-股票热度\n\n限量: 单次返回当前交易日前 100 个股票的人气排名数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 当前排名 | int64   | -       |\n| 代码   | object  | -       |\n| 股票名称 | object  | -       |\n| 最新价  | float64 | -       |\n| 涨跌额  | float64 | -       |\n| 涨跌幅  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hot_rank_em_df = ak.stock_hot_rank_em()\nprint(stock_hot_rank_em_df)\n```\n\n数据示例\n\n```\n    当前排名   代码  股票名称    最新价       涨跌额    涨跌幅\n0      1  SZ002261  拓维信息  18.83  0.090384   0.48\n1      2  SH603000   人民网  34.35  2.881965   8.39\n2      3  SH601127   赛力斯  33.72  3.378744  10.02\n3      4  SZ002229  鸿博股份  35.09  0.021054   0.06\n4      5  SZ000936  华西股份  10.41  1.045164  10.04\n..   ...       ...   ...    ...       ...    ...\n95    96  SZ002585  双星新材   9.69  0.968031   9.99\n96    97  SZ002670  国盛金控   8.46  0.520290   6.15\n97    98  SZ300116   保力新   1.53  0.191250  12.50\n98    99  SH603533  掌阅科技  33.14 -3.231150  -9.75\n99   100  SZ301368  丰立智能  58.32  3.563352   6.11\n[100 rows x 6 columns]\n```\n\n##### 飙升榜-A股\n\n接口: stock_hot_up_em\n\n目标地址: http://guba.eastmoney.com/rank/\n\n描述: 东方财富-个股人气榜-飙升榜\n\n限量: 单次返回当前交易日前 100 个股票的飙升榜排名数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称      | 类型      | 描述      |\n|---------|---------|---------|\n| 排名较昨日变动 | int64   | -       |\n| 当前排名    | int64   | -       |\n| 代码      | object  | -       |\n| 股票名称    | object  | -       |\n| 最新价     | float64 | -       |\n| 涨跌额     | float64 | -       |\n| 涨跌幅     | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hot_up_em_df = ak.stock_hot_up_em()\nprint(stock_hot_up_em_df)\n```\n\n数据示例\n\n```\n    排名较昨日变动  当前排名    代码  股票名称   最新价  涨跌额    涨跌幅\n0      4491   484  SH688226  威腾电气  18.89  2.349916  12.44\n1      4240   454  SZ301079  邵阳液压  19.42  1.648758   8.49\n2      4029   645  SH688698  伟创电气  31.45  2.858805   9.09\n3      4023   366  SZ002523  天桥起重   2.87  0.180810   6.30\n4      4019   568  SZ300402  宝色股份  20.50  1.377600   6.72\n..      ...   ...       ...   ...    ...       ...    ...\n95     2261   504  SZ000795   英洛华   6.31  0.217064   3.44\n96     2253  2816  SZ430425  乐创技术  13.78  0.826800   6.00\n97     2234  1515  SZ300861  美畅股份  41.60  2.025920   4.87\n98     2230   367  SH688003  天准科技  46.06  4.900784  10.64\n99     2230  2825  SZ835985  海泰新能   6.56  0.217136   3.31\n[100 rows x 7 columns]\n```\n\n##### 人气榜-港股\n\n接口: stock_hk_hot_rank_em\n\n目标地址: https://guba.eastmoney.com/rank/\n\n描述: 东方财富-个股人气榜-人气榜-港股市场\n\n限量: 单次返回当前交易日前 100 个股票的人气排名数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 当前排名 | int64   | -       |\n| 代码   | object  | -       |\n| 股票名称 | object  | -       |\n| 最新价  | float64 | -       |\n| 涨跌幅  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_hot_rank_em_df = ak.stock_hk_hot_rank_em()\nprint(stock_hk_hot_rank_em_df)\n```\n\n数据示例\n\n```\n    当前排名     代码    股票名称      最新价   涨跌幅\n0      1  00700    腾讯控股  376.800  0.32\n1      2  01810  小米集团-W   12.440  1.80\n2      3  02158    医渡科技    8.350  3.73\n3      4  03690    美团-W  140.200 -0.64\n4      5  09955    智云健康    7.880  4.51\n..   ...    ...     ...      ...   ...\n95    96  01951    锦欣生殖    5.380 -1.28\n96    97  01898    中煤能源    5.910 -8.51\n97    98  02768  佳源国际控股    0.179 -2.19\n98    99  00388   香港交易所  342.000  0.00\n99   100  01816   中广核电力    1.900 -1.55\n```\n\n#### 历史趋势及粉丝特征\n\n##### A股\n\n接口: stock_hot_rank_detail_em\n\n目标地址: http://guba.eastmoney.com/rank/stock?code=000665\n\n描述: 东方财富网-股票热度-历史趋势及粉丝特征\n\n限量: 单次返回指定 symbol 的股票近期历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"SZ000665\" |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 排名   | int64   | -   |\n| 证券代码 | object  | -   |\n| 新晋粉丝 | float64 | -   |\n| 铁杆粉丝 | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hot_rank_detail_em_df = ak.stock_hot_rank_detail_em(symbol=\"SZ000665\")\nprint(stock_hot_rank_detail_em_df)\n```\n\n数据示例\n\n```\n         时间    排名   证券代码   新晋粉丝 铁杆粉丝\n0    2024-07-24  4973  SZ871245  0.4259  0.5741\n1    2024-07-25  2231  SZ871245  0.5476  0.4524\n2    2024-07-26  2870  SZ871245  0.6578  0.3422\n3    2024-07-27  4862  SZ871245  0.6669  0.3331\n4    2024-07-28  4452  SZ871245  0.6725  0.3275\n..          ...   ...       ...     ...     ...\n361  2025-07-20  5052  SZ871245  0.5067  0.4933\n362  2025-07-21   459  SZ871245  0.8479  0.1521\n363  2025-07-22   548  SZ871245  0.9044  0.0956\n364  2025-07-23  1610  SZ871245  0.9134  0.0866\n365  2025-07-24  3646  SZ871245  0.9175  0.0825\n[366 rows x 5 columns]\n```\n\n##### 港股\n\n接口: stock_hk_hot_rank_detail_em\n\n目标地址: https://guba.eastmoney.com/rank/stock?code=HK_00700\n\n描述: 东方财富网-股票热度-历史趋势\n\n限量: 单次返回指定 symbol 的股票近期历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述             |\n|--------|-----|----------------|\n| symbol | str | symbol=\"00700\" |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 排名   | int64   | -   |\n| 证券代码 | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_hot_rank_detail_em_df = ak.stock_hk_hot_rank_detail_em(symbol=\"00700\")\nprint(stock_hk_hot_rank_detail_em_df)\n```\n\n数据示例\n\n```\n      时间    排名   证券代码\n0    2022-11-26   1  00700\n1    2022-11-27   2  00700\n2    2022-11-28   1  00700\n3    2022-11-29   1  00700\n4    2022-11-30   1  00700\n..          ...  ..    ...\n115  2023-03-21   1  00700\n116  2023-03-22   1  00700\n117  2023-03-23   1  00700\n118  2023-03-24   1  00700\n119  2023-03-25   1  00700\n```\n\n#### 互动平台\n\n##### 互动易-提问\n\n接口: stock_irm_cninfo\n\n目标地址: https://irm.cninfo.com.cn/\n\n描述: 互动易-提问\n\n限量: 单次返回近期 10000 条提问数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"002594\";  |\n\n输出参数\n\n| 名称    | 类型             | 描述 |\n|-------|----------------|----|\n| 股票代码  | object         | -  |\n| 公司简称  | object         | -  |\n| 行业    | object         | -  |\n| 行业代码  | object         | -  |\n| 问题    | object         | -  |\n| 提问者   | object         | -  |\n| 来源    | object         | -  |\n| 提问时间  | datetime64[ns] | -  |\n| 更新时间  | datetime64[ns] | -  |\n| 提问者编号 | object         | -  |\n| 问题编号  | object         | -  |\n| 回答ID  | object         | -  |\n| 回答内容  | object         | -  |\n| 回答者   | object         | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_irm_cninfo_df = ak.stock_irm_cninfo(symbol=\"002594\")\nprint(stock_irm_cninfo_df)\n```\n\n数据示例\n\n```\n      股票代码 公司简称  ...                                               回答内容   回答者\n0     002594  比亚迪  ...                                               None  None\n1     002594  比亚迪  ...                                               None  None\n2     002594  比亚迪  ...                                               None  None\n3     002594  比亚迪  ...                                               None  None\n4     002594  比亚迪  ...                                               None  None\n...      ...  ...  ...                                                ...   ...\n9995  002594  比亚迪  ...                                            感谢您的建议！   比亚迪\n9996  002594  比亚迪  ...             感谢对公司的关注，未来公司将综合各个基地的产能协调生产，保证产能充足，谢谢！   比亚迪\n9997  002594  比亚迪  ...  目前电动叉车项目还在产品推广的初期，市场尚不够熟悉，未来公司会通过创新销售方式、拓宽销售渠道...   比亚迪\n9998  002594  比亚迪  ...                                         请见之前回复，谢谢！   比亚迪\n9999  002594  比亚迪  ...                                                谢谢！   比亚迪\n[10000 rows x 14 columns]\n```\n\n##### 互动易-回答\n\n接口: stock_irm_ans_cninfo\n\n目标地址: https://irm.cninfo.com.cn/\n\n描述: 互动易-回答\n\n限量: 单次返回指定 symbol 的回答数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                               |\n|--------|-----|------------------------------------------------------------------|\n| symbol | str | symbol=\"1495108801386602496\"; 通过 ak.stock_irm_cninfo 来获取具体的提问者编号 |\n\n输出参数\n\n| 名称   | 类型             | 描述 |\n|------|----------------|----|\n| 股票代码 | object         | -  |\n| 公司简称 | object         | -  |\n| 问题   | object         | -  |\n| 回答内容 | object         | -  |\n| 提问者  | object         | -  |\n| 提问时间 | datetime64[ns] | -  |\n| 回答时间 | datetime64[ns] | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_irm_ans_cninfo_df = ak.stock_irm_ans_cninfo(symbol=\"1495108801386602496\")\nprint(stock_irm_ans_cninfo_df)\n```\n\n数据示例\n\n```\n     股票代码 公司简称  ...                提问时间                回答时间\n0  002594  比亚迪  ... 2023-07-08 04:12:53 2023-07-12 00:34:31\n[1 rows x 7 columns]\n```\n\n##### 上证e互动\n\n接口: stock_sns_sseinfo\n\n目标地址: https://sns.sseinfo.com/company.do?uid=65\n\n描述: 上证e互动-提问与回答\n\n限量: 单次返回指定 symbol 的提问与回答数据\n\n输入参数\n\n| 名称     | 类型  | 描述                    |\n|--------|-----|-----------------------|\n| symbol | str | symbol=\"603119\"; 股票代码 |\n\n输出参数\n\n| 名称   | 类型     | 描述 |\n|------|--------|----|\n| 股票代码 | object | -  |\n| 公司简称 | object | -  |\n| 问题   | object | -  |\n| 回答   | object | -  |\n| 问题时间 | object | -  |\n| 回答时间 | object | -  |\n| 问题来源 | object | -  |\n| 回答来源 | object | -  |\n| 用户名  | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_sns_sseinfo_df = ak.stock_sns_sseinfo(symbol=\"603119\")\nprint(stock_sns_sseinfo_df)\n```\n\n数据示例\n\n```\n       股票代码  公司简称  ... 回答来源              用户名\n0    603119  浙江荣泰  ...   网站             YiQi\n1    603119  浙江荣泰  ...   网站             YiQi\n2    603119  浙江荣泰  ...   网站            春暖花未开\n3    603119  浙江荣泰  ...   网站  guest_zT0NfLL0L\n4    603119  浙江荣泰  ...   网站              Kgk\n..      ...   ...  ...  ...              ...\n150  603119  浙江荣泰  ...   网站              龙投宝\n151  603119  浙江荣泰  ...   网站       SummerIcey\n152  603119  浙江荣泰  ...   网站  guest_Usy8rr8Ik\n153  603119  浙江荣泰  ...   网站            赵子龙常山\n154  603119  浙江荣泰  ...   网站            赵子龙常山\n[155 rows x 9 columns]\n```\n\n#### 个股人气榜-实时变动\n\n##### A股\n\n接口: stock_hot_rank_detail_realtime_em\n\n目标地址: http://guba.eastmoney.com/rank/stock?code=000665\n\n描述: 东方财富网-个股人气榜-实时变动\n\n限量: 单次返回指定 symbol 的股票近期历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"SZ000665\" |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 排名   | int64   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hot_rank_detail_realtime_em_df = ak.stock_hot_rank_detail_realtime_em(symbol=\"SZ000665\")\nprint(stock_hot_rank_detail_realtime_em_df)\n```\n\n数据示例\n\n```\n                  时间   排名\n0   2022-02-26 00:00:00  170\n1   2022-02-26 00:10:00  170\n2   2022-02-26 00:20:00  170\n3   2022-02-26 00:30:00  170\n4   2022-02-26 00:40:00  171\n..                  ...  ...\n94  2022-02-26 15:40:00  225\n95  2022-02-26 15:50:00  224\n96  2022-02-26 16:00:00  222\n97  2022-02-26 16:10:00  215\n98  2022-02-26 16:20:00  211\n```\n\n##### 港股\n\n接口: stock_hk_hot_rank_detail_realtime_em\n\n目标地址: https://guba.eastmoney.com/rank/stock?code=HK_00700\n\n描述: 东方财富网-个股人气榜-实时变动\n\n限量: 单次返回指定 symbol 的股票近期历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述             |\n|--------|-----|----------------|\n| symbol | str | symbol=\"00700\" |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| 时间   | object  | -   |\n| 排名   | int64   | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_hot_rank_detail_realtime_em_df = ak.stock_hk_hot_rank_detail_realtime_em(symbol=\"00700\")\nprint(stock_hk_hot_rank_detail_realtime_em_df)\n```\n\n数据示例\n\n```\n                      时间  排名\n0    2023-03-25 00:00:00   1\n1    2023-03-25 00:10:00   1\n2    2023-03-25 00:20:00   1\n3    2023-03-25 00:30:00   1\n4    2023-03-25 00:40:00   1\n..                   ...  ..\n137  2023-03-25 22:50:00   1\n138  2023-03-25 23:00:00   1\n139  2023-03-25 23:10:00   1\n140  2023-03-25 23:20:00   1\n141  2023-03-25 23:30:00   1\n```\n\n#### 热门关键词\n\n接口: stock_hot_keyword_em\n\n目标地址: http://guba.eastmoney.com/rank/stock?code=000665\n\n描述: 东方财富-个股人气榜-热门关键词\n\n限量: 单次返回指定 symbol 的最近交易日时点数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"SZ000665\" |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| 时间   | object | -   |\n| 股票代码 | object | -   |\n| 概念名称 | object | -   |\n| 概念代码 | object | -   |\n| 热度   | int64  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hot_keyword_em_df = ak.stock_hot_keyword_em(symbol=\"SZ000665\")\nprint(stock_hot_keyword_em_df)\n```\n\n数据示例\n\n```\n               时间      股票代码   概念名称    概念代码  热度\n0  2022-02-28 12:00:00  SZ000665  元宇宙概念  BK1009  2138\n1  2022-02-28 12:00:00  SZ000665     广电  BK0904  1082\n2  2022-02-28 12:00:00  SZ000665    云计算  BK0579   411\n3  2022-02-28 12:00:00  SZ000665   虚拟现实  BK0722   152\n4  2022-02-28 12:00:00  SZ000665   彩票概念  BK0671   131\n5  2022-02-28 12:00:00  SZ000665   转债标的  BK0528    51\n6  2022-02-28 12:00:00  SZ000665   华为概念  BK0854    36\n7  2022-02-28 12:00:00  SZ000665   智慧城市  BK0628    31\n8  2022-02-28 12:00:00  SZ000665   预盈预增  BK0571    13\n9  2022-02-28 12:00:00  SZ000665   超清视频  BK0859     1\n```\n\n#### 内部交易\n\n接口: stock_inner_trade_xq\n\n目标地址: https://xueqiu.com/hq/insider\n\n描述: 雪球-行情中心-沪深股市-内部交易\n\n限量: 单次返回所有历史数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 股票代码   | object  | -   |\n| 股票名称   | object  | -   |\n| 变动日期   | object  | -   |\n| 变动人    | object  | -   |\n| 变动股数   | int64   | -   |\n| 成交均价   | float64 | -   |\n| 变动后持股数 | float64 | -   |\n| 与董监高关系 | object  | -   |\n| 董监高职务  | object  | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_inner_trade_xq_df = ak.stock_inner_trade_xq()\nprint(stock_inner_trade_xq_df)\n```\n\n数据示例\n\n```\n        股票代码  股票名称   变动日期  变动人  ...   成交均价    变动后持股数 与董监高关系  董监高职务\n0      SH688787  海天瑞声  2024-11-04  吕思遥  ...  63.00     42850.0      本人      董事\n1      SH688550  瑞联新材  2024-11-04   胡湛  ...  31.11     39014.0      本人  高级管理人员\n2      SH600868  梅雁吉祥  2024-11-04   李明  ...   2.39  26650702.0      本人      董事\n3      SZ301206  三元生物  2024-11-01  聂在建  ...  27.71  93698700.0      本人      董事\n4      SZ300963  中洲特材  2024-11-01   韩明  ...   9.69  32119500.0      本人      董事\n...         ...   ...         ...  ...  ...    ...         ...     ...     ...\n23300  SH601028  玉龙股份  2023-01-03   张鹏  ...  11.69      7000.0      本人      董事\n23301  SH600875  东方电气  2023-01-03  胡修奎  ...  22.60     65000.0      本人  高级管理人员\n23302  SH600089  特变电工  2023-01-03  胡有成  ...   6.51    700000.0      本人  高级管理人员\n23303  SH600079  人福医药  2023-01-03  王学海  ...  24.00   4615346.0      本人      董事\n23304  SH600079  人福医药  2023-01-03  徐华斌  ...  25.04  14300716.0\n[23305 rows x 9 columns]\n```\n\n#### 个股人气榜-最新排名\n\n##### A股\n\n接口: stock_hot_rank_latest_em\n\n目标地址: http://guba.eastmoney.com/rank/stock?code=000665\n\n描述: 东方财富-个股人气榜-最新排名\n\n限量: 单次返回指定 symbol 的股票近期历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"SZ000665\" |\n\n输出参数\n\n| 名称    | 类型     | 描述  |\n|-------|--------|-----|\n| item  | object | -   |\n| value | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hot_rank_latest_em_df = ak.stock_hot_rank_latest_em(symbol=\"SZ000665\")\nprint(stock_hot_rank_latest_em_df)\n```\n\n数据示例\n\n```\n                 item                value\n0          marketType               000001\n1      marketAllCount                 4735\n2            calcTime  2022-02-28 13:30:00\n3           innerCode               000665\n4     srcSecurityCode             SZ000665\n5                rank                  155\n6          rankChange                   -2\n7       hisRankChange                  141\n8  hisRankChange_rank                 1654\n9                flag                    0\n```\n\n##### 港股\n\n接口: stock_hk_hot_rank_latest_em\n\n目标地址: https://guba.eastmoney.com/rank/stock?code=HK_00700\n\n描述: 东方财富-个股人气榜-最新排名\n\n限量: 单次返回指定 symbol 的股票近期历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述             |\n|--------|-----|----------------|\n| symbol | str | symbol=\"00700\" |\n\n输出参数\n\n| 名称    | 类型     | 描述  |\n|-------|--------|-----|\n| item  | object | -   |\n| value | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hk_hot_rank_latest_em_df = ak.stock_hk_hot_rank_latest_em(symbol=\"00700\")\nprint(stock_hk_hot_rank_latest_em_df)\n```\n\n数据示例\n\n```\n                 item                value\n0          marketType               000003\n1      marketAllCount                 2613\n2            calcTime  2023-03-25 23:30:00\n3           innerCode              00700_2\n4     srcSecurityCode             HK|00700\n5                rank                    1\n6          rankChange                    0\n7       hisRankChange                    0\n8  hisRankChange_rank                 1253\n9                flag                    0\n```\n\n#### 热搜股票\n\n接口: stock_hot_search_baidu\n\n目标地址: https://gushitong.baidu.com/expressnews\n\n描述: 百度股市通-热搜股票\n\n限量: 单次返回指定 symbol, date 和 time 的热搜股票数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                              |\n|--------|-----|-------------------------------------------------|\n| symbol | str | symbol=\"A股\"; choice of {\"全部\", \"A股\", \"港股\", \"美股\"} |\n| date   | str | date=\"20250616\"                                 |\n| time   | str | time=\"今日\"; choice of {\"今日\", \"1小时\"}              |\n\n输出参数\n\n| 名称    | 类型     | 描述 |\n|-------|--------|----|\n| 名称/代码 | object | -  |\n| 涨跌幅   | object | -  |\n| 综合热度  | int64  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hot_search_baidu_df = ak.stock_hot_search_baidu(symbol=\"A股\", date=\"20250616\", time=\"今日\")\nprint(stock_hot_search_baidu_df)\n```\n\n数据示例\n\n```\n    名称/代码      涨跌幅    综合热度\n0    融发核电   +1.72%  866000\n1    永安药业   +7.13%  865000\n2   中毅达    +10.00%  857000\n3    恒宝股份   +9.98%  828000\n4    利民股份   +9.98%  788000\n5    中超控股   -1.34%  786000\n6    百利电气   -4.24%  734000\n7     比亚迪   -0.45%  716000\n8    贵州茅台   -0.33%  569000\n9    元隆雅图   +9.99%  561000\n10   宁波韵升   +4.04%  555000\n11   长安汽车   -1.47%  553000\n```\n\n#### 相关股票\n\n接口: stock_hot_rank_relate_em\n\n目标地址: http://guba.eastmoney.com/rank/stock?code=000665\n\n描述: 东方财富-个股人气榜-相关股票\n\n限量: 单次返回指定 symbol 的股票近期历史数据\n\n输入参数\n\n| 名称     | 类型  | 描述                |\n|--------|-----|-------------------|\n| symbol | str | symbol=\"SZ000665\" |\n\n输出参数\n\n| 名称     | 类型      | 描述  |\n|--------|---------|-----|\n| 时间     | object  | -   |\n| 股票代码   | object  | -   |\n| 相关股票代码 | object  | -   |\n| 涨跌幅    | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_hot_rank_relate_em_df = ak.stock_hot_rank_relate_em(symbol=\"SZ000665\")\nprint(stock_hot_rank_relate_em_df)\n```\n\n数据示例\n\n```\n              时间       股票代码   相关股票代码 涨跌幅\n0  2024-09-30 20:00:00  SZ000665  SZ300059  6.18\n1  2024-09-30 20:00:00  SZ000665  SZ000158  4.46\n2  2024-09-30 20:00:00  SZ000665  SH600519  2.71\n3  2024-09-30 20:00:00  SZ000665  SH601162  2.29\n4  2024-09-30 20:00:00  SZ000665  SZ000595  2.01\n5  2024-09-30 20:00:00  SZ000665  SZ002717  1.72\n6  2024-09-30 20:00:00  SZ000665  SZ300085  1.72\n7  2024-09-30 20:00:00  SZ000665  SZ301551  1.59\n8  2024-09-30 20:00:00  SZ000665  SZ000002  1.54\n9  2024-09-30 20:00:00  SZ000665  SZ000980  1.50\n```\n\n### 盘口异动\n\n接口: stock_changes_em\n\n目标地址: http://quote.eastmoney.com/changes/\n\n描述: 东方财富-行情中心-盘口异动数据\n\n限量: 单次指定 symbol 的最近交易日的盘口异动数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                                                                                                                                    |\n|--------|-----|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"大笔买入\"; choice of {'火箭发射', '快速反弹', '大笔买入', '封涨停板', '打开跌停板', '有大买盘', '竞价上涨', '高开5日线', '向上缺口', '60日新高', '60日大幅上涨', '加速下跌', '高台跳水', '大笔卖出', '封跌停板', '打开涨停板', '有大卖盘', '竞价下跌', '低开5日线', '向下缺口', '60日新低', '60日大幅下跌'} |\n\n输出参数\n\n| 名称   | 类型     | 描述                   |\n|------|--------|----------------------|\n| 时间   | object | -                    |\n| 代码   | object | -                    |\n| 名称   | object | -                    |\n| 板块   | object | -                    |\n| 相关信息 | object | 注意: 不同的 symbol 的单位不同 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_changes_em_df = ak.stock_changes_em(symbol=\"大笔买入\")\nprint(stock_changes_em_df)\n```\n\n数据示例\n\n```\n            时间   代码    名称    板块                       相关信息\n0     14:55:51  872953  国子软件  大笔买入   124230,19.24000,0.300000\n1     14:55:43  834021  流金科技  大笔买入    296001,4.52000,0.280453\n2     14:55:28  301292  海科新源  大笔买入   142800,14.90000,0.119459\n3     14:55:27  001277  速达股份  大笔买入    54500,38.29000,0.099971\n4     14:55:22  301052  果麦文化  大笔买入    98571,30.31000,0.181676\n...        ...     ...   ...   ...                        ...\n3169  09:25:19  603918  金桥信息  大笔买入   496600,11.83000,0.045053\n3170  09:25:19  601136  首创证券  大笔买入  2743700,23.50000,0.088467\n3171  09:25:17  688631  莱斯信息  大笔买入   118450,67.00000,0.078905\n3172  09:25:16  600864  哈投股份  大笔买入   3876600,6.37000,0.083333\n3173  09:25:16  688709  成都华微  大笔买入   130346,17.40000,0.055825\n[3174 rows x 5 columns]\n```\n\n### 板块异动详情\n\n接口: stock_board_change_em\n\n目标地址: https://quote.eastmoney.com/changes/\n\n描述: 东方财富-行情中心-当日板块异动详情\n\n限量: 返回最近交易日的数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称                  | 类型      | 描述        |\n|---------------------|---------|-----------|\n| 板块名称                | object  | -         |\n| 涨跌幅                 | float64 | 注意单位: %   |\n| 主力净流入               | float64 | 注意单位: 万元  |\n| 板块异动总次数             | float64 | -         |\n| 板块异动最频繁个股及所属类型-股票代码 | object  | -         |\n| 板块异动最频繁个股及所属类型-股票名称 | object  | -         |\n| 板块异动最频繁个股及所属类型-买卖方向 | object  | -         |\n| 板块具体异动类型列表及出现次数     | object  | 返回具体异动的字典 |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_board_change_em_df = ak.stock_board_change_em()\nprint(stock_board_change_em_df)\n```\n\n数据示例\n\n```\n       板块名称  ...                                    板块具体异动类型列表及出现次数\n0      融资融券  ...  [{'t': 8201, 'ct': 10821}, {'t': 8219, 'ct': 1...\n1       深股通  ...  [{'t': 8219, 'ct': 4564}, {'t': 8201, 'ct': 38...\n2      创业板综  ...  [{'t': 8201, 'ct': 5584}, {'t': 8203, 'ct': 40...\n3       沪股通  ...  [{'t': 8219, 'ct': 4973}, {'t': 8201, 'ct': 27...\n4      富时罗素  ...  [{'t': 8219, 'ct': 4654}, {'t': 8201, 'ct': 26...\n..      ...  ...                                                ...\n563    千金藤素  ...  [{'t': 8201, 'ct': 18}, {'t': 8219, 'ct': 13},...\n564  同步磁阻电机  ...  [{'t': 8201, 'ct': 18}, {'t': 8219, 'ct': 18},...\n565  第四代半导体  ...  [{'t': 8201, 'ct': 10}, {'t': 8203, 'ct': 10},...\n566  光伏高速公路  ...  [{'t': 8219, 'ct': 17}, {'t': 8201, 'ct': 11},...\n567    赛马概念  ...  [{'t': 8219, 'ct': 17}, {'t': 8203, 'ct': 10},...\n[568 rows x 8 columns]\n```\n\n### 涨停板行情\n\n#### 涨停股池\n\n接口: stock_zt_pool_em\n\n目标地址: https://quote.eastmoney.com/ztb/detail#type=ztgc\n\n描述: 东方财富网-行情中心-涨停板行情-涨停股池\n\n限量: 单次返回指定 date 的涨停股池数据; 该接口只能获取近期的数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date='20241008' |\n\n输出参数\n\n| 名称     | 类型      | 描述             |\n|--------|---------|----------------|\n| 序号     | int64   | -              |\n| 代码     | object  | -              |\n| 名称     | object  | -              |\n| 涨跌幅    | float64 | 注意单位: %        |\n| 最新价    | float64 | -              |\n| 成交额    | int64   | -              |\n| 流通市值   | float64 | -              |\n| 总市值    | float64 | -              |\n| 换手率    | float64 | 注意单位: %        |\n| 封板资金   | int64   | -              |\n| 首次封板时间 | object  | 注意格式: 09:25:00 |\n| 最后封板时间 | object  | 注意格式: 09:25:00 |\n| 炸板次数   | int64   | -              |\n| 涨停统计   | object  | -              |\n| 连板数    | int64   | 注意格式: 1 为首板    |\n| 所属行业   | object  | -              |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zt_pool_em_df = ak.stock_zt_pool_em(date='20241008')\nprint(stock_zt_pool_em_df)\n```\n\n数据示例\n\n```\n      序号 代码    名称      涨跌幅    最新价  ...  最后封板时间 炸板次数 涨停统计 连板数 所属行业\n0      1  000004  国华网安  10.000000  17.93  ...  141354     1  10/6    2  软件开发\n1      2  000021   深科技   9.981852  18.18  ...  142309     1   1/1    1  消费电子\n2      3  000027  深圳能源  10.014306   7.69  ...  142912     3   1/1    1  电力行业\n3      4  000032  深桑达Ａ   9.994223  19.04  ...  144248     1   3/3    3  通信设备\n4      5  000034  神州数码  10.006497  33.86  ...  144533     2   2/2    2  计算机设\n..   ...     ...   ...        ...    ...  ...     ...   ...   ...  ...   ...\n771  772  300222  科大智能  20.053122   9.04  ...  150000     0   1/1    1  电网设备\n772  773  300248   新开普  20.022123  10.85  ...  150000     0   1/1    1  互联网服\n773  774  688095  福昕软件  20.002993  80.21  ...  150000     0   1/1    1  软件开发\n774  775  688205   德科立  20.009701  49.48  ...  150000     0   1/1    1  光学光电\n775  776  688653  康希通信  20.030350  15.82  ...  150000     0   1/1    1   半导体\n[776 rows x 16 columns]\n```\n\n#### 昨日涨停股池\n\n接口: stock_zt_pool_previous_em\n\n目标地址: https://quote.eastmoney.com/ztb/detail#type=zrzt\n\n描述: 东方财富网-行情中心-涨停板行情-昨日涨停股池\n\n限量: 单次返回指定 date 的昨日涨停股池数据; 该接口只能获取近期的数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date='20240415' |\n\n输出参数\n\n| 名称     | 类型      | 描述             |\n|--------|---------|----------------|\n| 序号     | int32   | -              |\n| 代码     | object  | -              |\n| 名称     | object  | -              |\n| 涨跌幅    | float64 | 注意单位: %        |\n| 最新价    | int64   | -              |\n| 涨停价    | int64   | -              |\n| 成交额    | int64   | -              |\n| 流通市值   | float64 | -              |\n| 总市值    | float64 | -              |\n| 换手率    | float64 | 注意单位: %        |\n| 涨速     | float64 | 注意单位: %        |\n| 振幅     | float64 | 注意单位: %        |\n| 昨日封板时间 | int64   | 注意格式: 09:25:00 |\n| 昨日连板数  | int64   | 注意格式: 1 为首板    |\n| 涨停统计   | object  | -              |\n| 所属行业   | object  | -              |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zt_pool_previous_em_df = ak.stock_zt_pool_previous_em(date='20240415')\nprint(stock_zt_pool_previous_em_df)\n```\n\n数据示例\n\n```\n    序号   代码    名称      涨跌幅    最新价  ...     振幅  昨日封板时间  昨日连板数  涨停统计  所属行业\n0    1  001202   炬申股份  -5.521886  14.03  ...  18.585859  093957      1   2/1  物流行业\n1    2  603822   嘉澳环保  -5.987780  23.08  ...   8.472506  131416      1   2/1  化学制品\n2    3  001333   光华股份  -8.636837  17.56  ...   9.781478  130703      1   2/1  化学制品\n3    4  603276   恒兴新材  -8.216784  21.00  ...  10.926574  142402      1   2/1  化学原料\n4    5  603968   醋化股份  -8.055329  11.30  ...   7.648495  112937      1   2/1  化学制品\n5    6  600854   春兰股份  -6.808510   4.38  ...  14.042553  092501      1   2/1  家电行业\n6    7  603067   振华股份  -4.146101   9.71  ...   6.910168  144529      1   2/1  化学原料\n7    8  601179   中国西电   6.184012   7.04  ...  14.027150  142250      2   3/2  电网设备\n8    9  603335    迪生力  -8.802817   5.18  ...   8.802817  093119      1   2/1  汽车零部\n9   10  605118   力鼎光电  -5.382586  17.93  ...   7.229552  095804      1   2/1  光学光电\n10  11  001228    永泰运  -1.821494  26.95  ...   5.173042  132433      1   2/1  物流行业\n11  12  002552   宝鼎科技  -6.556334  14.68  ...   7.702100  095245      1   2/1  通用设备\n12  13  601956   东贝集团  -6.972477   5.07  ...  13.761468  094931      1   2/1  家电行业\n13  14  603116    红蜻蜓  -9.844560   5.22  ...   8.635578  144142      1   2/1  纺织服装\n14  15  002264  新 华 都   5.389221   5.28  ...  10.778442  093200      1   2/1  互联网服\n15  16  000888   峨眉山Ａ   0.271924  14.75  ...  12.984364  140624      2   5/3  旅游酒店\n16  17  605336   帅丰电器   1.520637  14.02  ...  15.133961  093000      1   2/1  家电行业\n17  18  605378   野马电池  -4.830054  21.28  ...   9.749553  093211      1   2/1    电池\n18  19  000059   华锦股份 -10.016420   5.48  ...   8.045978  130045      1   2/1  石油行业\n19  20  000506   中润资源  -9.956710   6.24  ...   0.000000  140100      2   8/5   贵金属\n20  21  000603   盛达资源  -7.873528  14.86  ...   5.455673  130006      1   2/1  有色金属\n21  22  000622   恒立实业  -9.883721   3.10  ...   6.686047  093215      1   2/1  汽车零部\n22  23  000856   冀东装备  -9.967846   8.40  ...  10.610932  094142      1   2/1  专用设备\n23  24  002059   云南旅游   5.111821   6.58  ...  15.814696  145415      1   2/1  旅游酒店\n24  25  002476   宝莫股份  -9.960938   4.61  ...   6.250000  100633      1   2/1  化学制品\n25  26  002562   兄弟科技  -5.191257   3.47  ...   6.557377  112212      1   2/1  化学制品\n26  27  002574   明牌珠宝  -9.941521   6.16  ...   5.555556  142530      1   2/1  珠宝首饰\n27  28  002716   湖南白银  -7.579462   3.78  ...   5.134474  145154      1   2/1   贵金属\n28  29  002828   贝肯能源  -3.445065  10.37  ...  13.966480  093821      1   2/1  采掘行业\n29  30  002835   同为股份   9.973227  16.43  ...   5.488621  092500      1   2/2  计算机设\n30  31  300641   正丹股份  11.195929   8.74  ...   9.796437  093248      2   3/2  化学制品\n31  32  300721   怡达股份 -14.406779  11.11  ...  16.409863  145109      1   2/1  化学制品\n32  33  300824   北鼎股份   3.828829   9.22  ...  25.788290  093606      1   2/1  家电行业\n33  34  300931   通用电梯  -8.356164   6.69  ...  16.164383  144054      1   2/1  专用设备\n34  35  300945    曼卡龙  -9.520401  12.64  ...   8.017179  102900      1   2/1  珠宝首饰\n35  36  301008   宏昌科技  -1.414743  26.48  ...  20.476545  093254      1   2/1  家电行业\n36  37  600363   联创光电  -0.864074  29.83  ...   5.882353  132434      1   2/1  光学光电\n37  38  600857   宁波中百  -9.979633   8.84  ...  16.395111  092500      3   4/3  商业百货\n38  39  600984   建设机械  10.129870   4.24  ...   0.000000  092502      3   4/4  工程机械\n39  40  603213   镇洋发展  -9.933143   9.43  ...  10.028653  093011      1   2/1  化学原料\n40  41  603320   迪贝电气 -10.029283  12.29  ...  15.080526  093804      1   2/1    电机\n41  42  603657   春光科技  10.029717  14.81  ...   8.989598  100149      1   2/2  家电行业\n42  43  603813   原尚股份 -10.012754  14.11  ...  20.025509  092503      2   5/3  物流行业\n43  44  603900   莱绅通灵  -9.981685   9.83  ...   0.000000  093620      9  10/9  珠宝首饰\n44  45  688663    新风光  -2.955271  24.30  ...   6.669329  144856      1   2/1  电网设备\n45  46  603082   北自科技   4.895862  38.78  ...   7.222072  144152      1   2/1  通用设备\n46  47  001389   广合科技   2.957523  51.87  ...   9.170305  112151      1   2/1  电子元件\n47  48  603893    瑞芯微   2.849442  53.42  ...   5.602618  131557      1   2/1   半导体\n48  49  603789   星光农机  -4.013015   8.85  ...   6.832972  100438      1   4/2  专用设备\n49  50  001239   永达股份   4.634496  21.90  ...  14.524606  093021      2   3/2  专用设备\n50  51  002313   日海智能  -9.167544   8.62  ...  10.010537  100815      1   2/1  通信设备\n51  52  870726   鸿智科技 -15.000001  17.00  ...  19.500000  094042      1   2/1  家电行业\n52  53  600490   鹏欣资源  -6.077348   3.40  ...   7.182320  095846      1   2/1  有色金属\n53  54  603661   恒林股份   1.083032  47.60  ...   8.027182  131046      1   2/1  装修建材\n54  55  002295   精艺股份  -3.393665   8.54  ...  19.683258  093233      1   2/1  有色金属\n55  56  600815   厦工股份 -10.033445   2.69  ...  14.046823  145336      2   3/2  工程机械\n56  57  002455   百川股份  -5.270656   6.65  ...  15.242166  100733      2   5/3  化学制品\n57  58  001387   雪祺电气  -0.170285  23.45  ...  10.174542  092500      1   2/1  家电行业\n58  59  002102   冠福股份  -7.801419   2.60  ...   6.737588  102645      1   2/1  化学制药\n[59 rows x 16 columns]\n```\n\n#### 强势股池\n\n接口: stock_zt_pool_strong_em\n\n目标地址: https://quote.eastmoney.com/ztb/detail#type=qsgc\n\n描述: 东方财富网-行情中心-涨停板行情-强势股池\n\n限量: 单次返回指定 date 的强势股池数据；该接口只能获取近期的数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date='20241009' |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 序号   | int64   | -       |\n| 代码   | object  | -       |\n| 名称   | object  | -       |\n| 涨跌幅  | float64 | 注意单位: % |\n| 最新价  | float64 | -       |\n| 涨停价  | float64 | -       |\n| 成交额  | int64   | -       |\n| 流通市值 | float64 | -       |\n| 总市值  | float64 | -       |\n| 换手率  | float64 | 注意单位: % |\n| 涨速   | float64 | 注意单位: % |\n| 是否新高 | object  | -       |\n| 量比   | float64 | -       |\n| 涨停统计 | object  | -       |\n| 入选理由 | object  | -       |\n| 所属行业 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zt_pool_strong_em_df = ak.stock_zt_pool_strong_em(date='20241231')\nprint(stock_zt_pool_strong_em_df)\n```\n\n数据示例\n\n```\n      序号    代码   名称      涨跌幅  ...       量比  涨停统计        入选理由  所属行业\n0      1  301202  朗威股份  19.994860  ...  2.298022   1/1         60日新高  通用设备\n1      2  002629  仁智股份  10.103627  ...  1.863184   2/2        近期多次涨停  采掘行业\n2      3  002361  神剑股份  10.101010  ...  8.426764   3/3  60日新高且近期多次涨停  塑料制品\n3      4  002442  龙星化工  10.073260  ...  1.979328   1/1         60日新高  橡胶制品\n4      5  600693  东百集团  10.062893  ...  1.475128  16/8  60日新高且近期多次涨停  商业百货\n..   ...     ...   ...        ...  ...       ...   ...           ...   ...\n122  123  002577  雷柏科技  -9.985735  ...  1.397206   5/3        近期多次涨停  消费电子\n123  124  002067  景兴纸业 -10.000000  ...  1.227895   6/3        近期多次涨停  造纸印刷\n124  125  002137   实益达 -10.010010  ...  1.372619   9/6        近期多次涨停  电子元件\n125  126  603958  哈森股份 -10.015175  ...  2.310775   5/4  60日新高且近期多次涨停  纺织服装\n126  127  603980  吉华集团 -10.082304  ...  0.823222   6/3        近期多次涨停  化学制品\n[127 rows x 16 columns]\n```\n\n#### 次新股池\n\n接口: stock_zt_pool_sub_new_em\n\n目标地址: https://quote.eastmoney.com/ztb/detail#type=cxgc\n\n描述: 东方财富网-行情中心-涨停板行情-次新股池\n\n限量: 单次返回指定 date 的次新股池数据；该接口只能获取近期的数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date='20241231' |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 序号   | int32   | -       |\n| 代码   | object  | -       |\n| 名称   | object  | -       |\n| 涨跌幅  | float64 | 注意单位: % |\n| 最新价  | float64 | -       |\n| 涨停价  | float64 | -       |\n| 成交额  | int64   | -       |\n| 流通市值 | float64 | -       |\n| 总市值  | float64 | -       |\n| 转手率  | float64 | 注意单位: % |\n| 开板几日 | int64   | -       |\n| 开板日期 | int64   | -       |\n| 上市日期 | int64   | -       |\n| 是否新高 | int64   | -       |\n| 涨停统计 | object  | -       |\n| 所属行业 | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zt_pool_sub_new_em_df = ak.stock_zt_pool_sub_new_em(date='20241231')\nprint(stock_zt_pool_sub_new_em_df)\n```\n\n数据示例\n\n```\n    序号  代码   名称      涨跌幅    最新价  ...   开板日期    上市日期  是否新高  涨停统计  所属行业\n0    1  001391  C国货航 -0.967742   9.21  ...  2024-12-30  2024-12-30     否   0/0  物流行业\n1    2  920082  方正阀门  1.915185  14.90  ...  2024-12-26  2024-12-26     否   0/0  通用设备\n2    3  603194  中力股份 -6.406904  35.79  ...  2024-12-24  2024-12-24     否   0/0  工程机械\n3    4  301585  蓝宇股份 -1.644876  46.64  ...  2024-12-20  2024-12-20     否   0/0  化学制品\n4    5  301598  博科测试 -7.260816  67.95  ...  2024-12-20  2024-12-20     否   0/0  专用设备\n..  ..     ...   ...       ...    ...  ...         ...         ...   ...   ...   ...\n86  87  301567  贝隆精密 -4.102564  44.88  ...  2024-01-16  2024-01-16     否   0/0  消费电子\n87  88  001387  雪祺电气 -3.814147  13.87  ...  2024-01-11  2024-01-11     否   0/0  家电行业\n88  89  603312  西典新能 -2.946482  32.28  ...  2024-01-11  2024-01-11     否   0/0  电网设备\n89  90  603325  博隆技术  0.012642  79.11  ...  2024-01-10  2024-01-10     否   0/0  通用设备\n90  91  688717  艾罗能源 -0.383877  46.71  ...  2024-01-03  2024-01-03     否   0/0  光伏设备\n[91 rows x 16 columns]\n```\n\n#### 炸板股池\n\n接口: stock_zt_pool_zbgc_em\n\n目标地址: https://quote.eastmoney.com/ztb/detail#type=zbgc\n\n描述: 东方财富网-行情中心-涨停板行情-炸板股池\n\n限量: 单次返回指定 date 的炸板股池数据；该接口只能获取近期的数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date='20241011' |\n\n输出参数\n\n| 名称     | 类型      | 描述             |\n|--------|---------|----------------|\n| 序号     | int32   | -              |\n| 代码     | object  | -              |\n| 名称     | object  | -              |\n| 涨跌幅    | float64 | 注意单位: %        |\n| 最新价    | float64 | -              |\n| 涨停价    | float64 | -              |\n| 成交额    | int64   | -              |\n| 流通市值   | float64 | -              |\n| 总市值    | float64 | -              |\n| 换手率    | float64 | 注意单位: %        |\n| 涨速     | int64   | -              |\n| 首次封板时间 | object  | 注意格式: 09:25:00 |\n| 炸板次数   | int64   | -              |\n| 涨停统计   | int64   | -              |\n| 振幅     | object  | -              |\n| 所属行业   | object  | -              |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zt_pool_zbgc_em_df = ak.stock_zt_pool_zbgc_em(date='20241011')\nprint(stock_zt_pool_zbgc_em_df)\n```\n\n数据示例\n\n```\n    序号  代码   名称       涨跌幅    最新价  ... 首次封板时间  炸板次数  涨停统计  振幅  所属行业\n0    1  002347  泰尔股份  -0.920810   5.38  ...  092500     3   3/2  17.311234  通用设备\n1    2  002835  同为股份   5.509817  16.66  ...  092500     2   0/0   5.509817  计算机设\n2    3  002570   贝因美   7.619048   3.39  ...  093336     1   0/0   7.301588  食品饮料\n3    4  301178   天亿马   0.065466  30.57  ...  094215     1   4/2  20.000000  软件开发\n4    5  600239  云南城投   8.363637   2.98  ...  094658     4   7/4   9.454545  房地产服\n5    6  603016   新宏泰   9.251101  24.80  ...  095251     2   0/0  12.202642  电网设备\n6    7  301058  中粮科工  11.724724  13.15  ...  100542     1   2/1  19.456245  工程建设\n7    8  002423  中粮资本   2.907712  16.28  ...  102224     8   9/8  16.434893  多元金融\n8    9  002537  海联金汇   8.580858   6.58  ...  103254     4   0/0  12.211222  汽车零部\n9   10  002703  浙江世宝   7.892528  12.85  ...  110724     2   0/0  11.335012  汽车零部\n10  11  603767  中马传动   3.935599  11.62  ...  111110     1   0/0  14.221825  汽车零部\n11  12  001278  一彬科技   4.915993  16.86  ...  111357     2   0/0  14.747977  汽车零部\n12  13  301398  星源卓镁   8.176848  45.51  ...  111430     1   0/0  25.623959  汽车零部\n13  14  603499  翔港科技   7.900001  21.58  ...  112102     1   0/0  12.850000  造纸印刷\n14  15  002075  沙钢股份   7.460035   6.05  ...  131539     2   0/0  10.124334  钢铁行业\n15  16  600770  综艺股份  10.000000   3.74  ...  132618     2   0/0  11.470589  综合行业\n[16 rows x 16 columns]\n```\n\n#### 跌停股池\n\n接口: stock_zt_pool_dtgc_em\n\n目标地址: https://quote.eastmoney.com/ztb/detail#type=zbgc\n\n描述: 东方财富网-行情中心-涨停板行情-跌停股池\n\n限量: 单次返回指定 date 的跌停股池数据；该接口只能获取近期的数据\n\n输入参数\n\n| 名称   | 类型  | 描述              |\n|------|-----|-----------------|\n| date | str | date='20241011' |\n\n输出参数\n\n| 名称     | 类型      | 描述             |\n|--------|---------|----------------|\n| 序号     | int64   | -              |\n| 代码     | object  | -              |\n| 名称     | object  | -              |\n| 涨跌幅    | float64 | 注意单位: %        |\n| 最新价    | float64 | -              |\n| 成交额    | int64   | -              |\n| 流通市值   | float64 | -              |\n| 总市值    | float64 | -              |\n| 动态市盈率  | float64 | -              |\n| 换手率    | float64 | 注意单位: %        |\n| 封单资金   | int64   | -              |\n| 最后封板时间 | object  | 注意格式: 09:25:00 |\n| 板上成交额  | int64   | -              |\n| 连续跌停   | int64   | -              |\n| 开板次数   | int64   | -              |\n| 所属行业   | object  | -              |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_zt_pool_dtgc_em_df = ak.stock_zt_pool_dtgc_em(date='20241011')\nprint(stock_zt_pool_dtgc_em_df)\n```\n\n数据示例\n\n```\n    序号  代码     名称      涨跌幅    最新价  ... 最后封板时间  板上成交额  连续跌停  开板次数  所属行业\n0    1  002795   永和智控  -9.905661   3.82  ...  143233     24222238     1     1  通用设备\n1    2  603978   深圳新星  -9.981167  14.34  ...  144754    143723833     1     9  有色金属\n2    3  000668   荣丰控股 -10.000000   7.38  ...  145651     14545980     1     2  房地产开\n3    4  000697   炼石航空 -10.012836   7.01  ...  143442     32945926     1     1  航天航空\n4    5  603496   恒为科技 -10.010427  25.89  ...  143203    123642303     1     4  互联网服\n5    6  000850   华茂股份  -9.902912   4.64  ...  145618     16800512     1     2  纺织服装\n6    7  002355   兴民智通  -9.985315   6.13  ...  145403     55676338     1     4  汽车零部\n7    8  002883   中设股份  -9.991236  10.27  ...  140433     20144605     1     1  工程咨询\n8    9  600099   林海股份  -9.970090   9.03  ...  140728     31065906     1     3  交运设备\n9   10  300853   申昊科技 -19.991270  18.33  ...  142454    557961581     1    12  通用设备\n10  11  601858   中国科传  -9.986801  20.46  ...  140544     68199318     1     3  文化传媒\n11  12  600650   锦江在线  -9.993109  13.06  ...  145053     27841308     1     2  铁路公路\n12  13  002908   德生科技  -9.979633   8.84  ...  140139     25946284     1     1  软件开发\n13  14  600696   岩石股份 -10.018726   9.61  ...  134317     20594230     1     1  酿酒行业\n14  15  600560   金自天正 -10.000000  14.49  ...  135223     39492234     1     2  专用设备\n15  16  603728   鸣志电器 -10.008137  44.24  ...  140306     49712488     1     0    电机\n16  17  600990   四创电子 -10.000000  21.15  ...  112710     65182833     1     7  通信设备\n17  18  601777   力帆科技  -9.925094   4.81  ...  134409    123372309     1     7  汽车整车\n18  19  600666    奥瑞德  -9.767442   1.94  ...  135702     28302466     1     0  光学光电\n19  20  000536   华映科技  -9.944751   3.26  ...  134951    103476310     2     1  光学光电\n20  21  000717   中南股份  -9.824561   2.57  ...  132045    104712542     1     0  钢铁行业\n21  22  600390  XD五矿资  -9.972299   6.50  ...  144845  15307499959     2     2  多元金融\n22  23  603188   亚邦股份  -9.975062   3.61  ...  093132     30793661     1     0  化学制品\n23  24  603383   顶点软件 -10.007468  36.15  ...  134435   2683979703     2     9  软件开发\n24  25  000062   深圳华强  -9.985528  24.88  ...  143854    137266692     2     0  电子元件\n25  26  000628   高新发展  -9.994529  49.35  ...  140412    141856575     1     0  工程建设\n26  27  600702   舍得酒业 -10.001374  65.51  ...  135511    133242819     1     1  酿酒行业\n27  28  601162   天风证券 -10.041842   4.30  ...  145050  45859221240     2     9    证券\n28  29  601933   永辉超市  -9.907121   2.91  ...  135047   1763205191     3     0  商业百货\n29  30  603106   恒银科技  -9.967497   8.31  ...  092501    818423646     2     0  计算机设\n30  31  000032   深桑达Ａ  -9.984795  17.76  ...  093206   1348257504     1     0  通信设备\n31  32  002693   双成药业  -9.988776  16.04  ...  092500   1244147412     2     0  生物制品\n[32 rows x 16 columns]\n```\n\n### 赚钱效应分析\n\n接口: stock_market_activity_legu\n\n目标地址: https://www.legulegu.com/stockdata/market-activity\n\n描述: 乐咕乐股网-赚钱效应分析数据\n\n限量: 单次返回当前赚钱效应分析数据\n\n说明：\n\n1. 涨跌比：即沪深两市上涨个股所占比例，体现的是市场整体涨跌，占比越大则代表大部分个股表现活跃。\n2. 涨停板数与跌停板数的意义：涨停家数在一定程度上反映了市场的投机氛围。当涨停家数越多，则市场的多头氛围越强。真实涨停是非一字无量涨停。真实跌停是非一字无量跌停。\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型     | 描述  |\n|-------|--------|-----|\n| item  | object | -   |\n| value | object | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_market_activity_legu_df = ak.stock_market_activity_legu()\nprint(stock_market_activity_legu_df)\n```\n\n数据示例\n\n```\n        item                value\n0         上涨               4770.0\n1         涨停                119.0\n2       真实涨停                101.0\n3   st st*涨停                 10.0\n4         下跌                281.0\n5         跌停                  6.0\n6       真实跌停                  4.0\n7   st st*跌停                  4.0\n8         平盘                 39.0\n9         停牌                 10.0\n10       活跃度               93.53%\n11      统计日期  2024-10-14 15:00:00\n```\n\n### 资讯数据\n\n#### 财经早餐-东财财富\n\n接口：stock_info_cjzc_em\n\n目标地址：https://stock.eastmoney.com/a/czpnc.html\n\n描述：东方财富-财经早餐\n\n限量：单次返回全部历史数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型     | 描述 |\n|------|--------|----|\n| 标题   | object | -  |\n| 摘要   | object | -  |\n| 发布时间 | object | -  |\n| 链接   | object | -  |\n\n接口示例：\n\n```python\nimport akshare as ak\n\nstock_info_cjzc_em_df = ak.stock_info_cjzc_em()\nprint(stock_info_cjzc_em_df)\n```\n\n数据示例\n\n```\n                                       标题  ...                                                 链接\n0                        东方财富财经早餐 3月13日周三  ...  http://finance.eastmoney.com/a/202403133009961...\n1                        东方财富财经早餐 3月12日周二  ...  http://finance.eastmoney.com/a/202403113008262...\n2                        东方财富财经早餐 3月11日周一  ...  http://finance.eastmoney.com/a/202403103007214...\n3                         东方财富财经早餐 3月8日周五  ...  http://finance.eastmoney.com/a/202403073005282...\n4                         东方财富财经早餐 3月7日周四  ...  http://finance.eastmoney.com/a/202403073004092...\n..                                    ...  ...                                                ...\n338                     东方财富财经早餐 10月14日周五  ...  http://finance.eastmoney.com/a/202210142528794...\n339                     东方财富早盘内参 10月13日周四  ...  http://finance.eastmoney.com/a/202210132527637...\n340                     东方财富早盘内参 10月12日周三  ...  http://finance.eastmoney.com/a/202210122526415...\n341  【早盘内参】宁德时代：前三季度净利同比预增112.87%-132.22%  ...  http://finance.eastmoney.com/a/202210112525318...\n342           【早盘内参】央行：进一步简化境外投资者进入中国投资流程  ...  http://finance.eastmoney.com/a/202210102524284...\n[343 rows x 4 columns]\n```\n\n#### 全球财经快讯-东财财富\n\n接口：stock_info_global_em\n\n目标地址：https://kuaixun.eastmoney.com/7_24.html\n\n描述：东方财富-全球财经快讯\n\n限量：单次返回最近 200 条新闻数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型     | 描述 |\n|------|--------|----|\n| 标题   | object | -  |\n| 摘要   | object | -  |\n| 发布时间 | object | -  |\n| 链接   | object | -  |\n\n接口示例：\n\n```python\nimport akshare as ak\n\nstock_info_global_em_df = ak.stock_info_global_em()\nprint(stock_info_global_em_df)\n```\n\n数据示例\n\n```\n                                     标题  ...                                                 链接\n0                     法本信息与鸿蒙生态服务公司签约合作  ...  https://finance.eastmoney.com/a/20240313301075...\n1    欧洲央行管委维勒鲁瓦：6月降息的可能性高于4月 但仍有可能在春季降息  ...  https://finance.eastmoney.com/a/20240313301075...\n2        海马汽车：目前公司氢燃料电池汽车7X-H已开始小批量上线生产  ...  https://finance.eastmoney.com/a/20240313301075...\n3     茉酸奶回应被消保委点名：目前配方只有酸奶和水果 后续有官方渠道回应  ...  https://finance.eastmoney.com/a/20240313301075...\n4         大众重押合肥：ID.品牌将推U系列车型 计划建独立销售渠道  ...  https://finance.eastmoney.com/a/20240313301075...\n..                                  ...  ...                                                ...\n195              加速电动化 江淮汽车与大众中国拟增资合资公司  ...  https://finance.eastmoney.com/a/20240313301015...\n196                    农业银行普惠贷款余额突破4万亿元  ...  https://finance.eastmoney.com/a/20240313301015...\n197            中金公司：AI Agent或开启AI原生应用时代  ...  https://finance.eastmoney.com/a/20240313301015...\n198                          日韩股市周三双双高开  ...  https://finance.eastmoney.com/a/20240313301015...\n199             委内瑞拉：不允许阿根廷任何形式的飞机使用委领空  ...  https://finance.eastmoney.com/a/20240313301015...\n[200 rows x 4 columns]\n```\n\n#### 全球财经快讯-新浪财经\n\n接口：stock_info_global_sina\n\n目标地址：https://finance.sina.com.cn/7x24\n\n描述：新浪财经-全球财经快讯\n\n限量：单次返回最近 20 条新闻数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型     | 描述 |\n|------|--------|----|\n| 时间   | object | -  |\n| 内容   | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_info_global_sina_df = ak.stock_info_global_sina()\nprint(stock_info_global_sina_df)\n```\n\n数据示例\n\n```\n                     时间                                                 内容\n0   2024-03-13 16:18:40  【Canalys：2023年Q4英特尔CPU出货5000万颗占比78% 是AMD的6倍】根据...\n1   2024-03-13 16:18:19  俄罗斯别尔哥罗德市联邦安全局发布消息称，该部门大楼遭到乌军无人机袭击，没有造成人员伤亡，大楼...\n2   2024-03-13 16:18:08  日本首相顾问Yata：（当被问及工资提议是否可能会推动在三月结束负利率时）政府不会干涉日本央...\n3   2024-03-13 16:16:35  【基金经理：日企大赚而劳动力短缺，加薪5%不足为奇】“与往年相比，日本企业在加薪方面要开放得...\n4   2024-03-13 16:15:41  【梅西代言白酒重新上架】多款梅西代言白酒已重新上架。3月13日搜索发现，赤水河白酒电商平台店...\n5   2024-03-13 16:15:35         土耳其银行家表示，资产规模超过1000亿里拉的土耳其银行将执行15%的里拉准备金率。\n6   2024-03-13 16:15:10                          地区官员表示，俄罗斯梁赞石油精炼厂的火灾已被扑灭。\n7   2024-03-13 16:14:46  【九部门：鼓励在有条件的村布放智能快件箱】商务部等9部门发布关于推动农村电商高质量发展的实施...\n8   2024-03-13 16:14:23        两名安全消息人士表示，以色列袭击了黎巴嫩南部城市泰尔附近的一辆汽车，导致两名乘客死亡。\n9   2024-03-13 16:13:38  【九部门：造县域直播电商基地】商务部等9部门发布关于推动农村电商高质量发展的实施意见。其中提...\n10  2024-03-13 16:12:30       土耳其银行家表示，资产规模超过5000亿里拉的土耳其银行将执行25%的里拉存款准备金率。\n11  2024-03-13 16:12:25           名创优品美股盘前涨超4%，去年第四季度营收及毛利率双双创新高，拟派特别现金股息。\n12  2024-03-13 16:11:08  【商务部等9部门发布关于推动农村电商高质量发展的实施】意见商务部等9部门发布关于推动农村电商...\n13  2024-03-13 16:09:50  【乘联会：3月1-10日乘用车市场零售35.5万辆 同比去年同期增长4%】乘联会数据显示，3...\n14  2024-03-13 16:08:56  【港股收评：恒指收跌0.07% 科指收涨0.34%】港股收盘，恒指收跌0.07%，科指收涨0...\n15  2024-03-13 16:08:01  【韩国总统尹锡悦承诺到2027年将航天产业发展相关预算增至1.5万亿韩元】韩国总统尹锡悦3月...\n16  2024-03-13 16:05:34  【恢复两融业务正常平仓措施？业内人士否认】今天盘中，市场突然传出：风险解除，市场秩序恢复正常...\n17  2024-03-13 16:05:26  【中欧民航合作项目预先飞行计划研讨会在京召开】日前，中欧民航合作项目（EU-CHINA AP...\n18  2024-03-13 16:05:21          英伟达在美股盘前上涨1.8%，报936美元/股。上一交易日，英伟达收盘大涨超7%。\n19  2024-03-13 16:04:07  【中国或将调查法国酒业是否与欧盟调查中国电车有关？外交部回应】外交部发言人汪文斌主持例行记者...\n```\n\n#### 快讯-富途牛牛\n\n接口：stock_info_global_futu\n\n目标地址：https://news.futunn.com/main/live\n\n描述：富途牛牛-快讯\n\n限量：单次返回最近 50 条新闻数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型     | 描述 |\n|------|--------|----|\n| 标题   | object | -  |\n| 内容   | object | -  |\n| 发布时间 | object | -  |\n| 链接   | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_info_global_futu_df = ak.stock_info_global_futu()\nprint(stock_info_global_futu_df)\n```\n\n数据示例\n\n```\n                                               标题  ...                                             链接\n0                                                  ...  https://news.futunn.com/flash/16697438?src=48\n1      Canalys：2023年Q4英特尔CPU出货5000万颗占比78% 是AMD的6倍  ...  https://news.futunn.com/flash/16697433?src=48\n2                                                  ...  https://news.futunn.com/flash/16697427?src=48\n3                        基金经理：日企大赚而劳动力短缺，加薪5%不足为奇  ...  https://news.futunn.com/flash/16697407?src=48\n4                             九部门：鼓励在有条件的村布放智能快件箱  ...  https://news.futunn.com/flash/16697383?src=48\n5                                   九部门：造县域直播电商基地  ...  https://news.futunn.com/flash/16697371?src=48\n6                                                  ...  https://news.futunn.com/flash/16697361?src=48\n7                       商务部等9部门发布关于推动农村电商高质量发展的实施  ...  https://news.futunn.com/flash/16697341?src=48\n8                                                  ...  https://news.futunn.com/flash/16697328?src=48\n9             乘联会：3月1-10日乘用车市场零售35.5万辆 同比去年同期增长4%  ...  https://news.futunn.com/flash/16697322?src=48\n10                            恢复两融业务正常平仓措施？业内人士否认  ...  https://news.futunn.com/flash/16697275?src=48\n11                          中欧民航合作项目预先飞行计划研讨会在京召开  ...  https://news.futunn.com/flash/16697270?src=48\n12                                                 ...  https://news.futunn.com/flash/16697271?src=48\n13                          蔚来推出买车送手机活动，面向2024款车型  ...  https://news.futunn.com/flash/16697255?src=48\n14                                                 ...  https://news.futunn.com/flash/16697185?src=48\n15                           洛阳钼业：KFM 2月产铜量再创历史新高  ...  https://news.futunn.com/flash/16697158?src=48\n16                     策略师：人为压低通胀，日本央行无权继续维持超宽松政策  ...  https://news.futunn.com/flash/16697130?src=48\n17                                                 ...  https://news.futunn.com/flash/16697108?src=48\n18                                                 ...  https://news.futunn.com/flash/16697090?src=48\n19                              法本信息与鸿蒙生态服务公司签约合作  ...  https://news.futunn.com/flash/16697083?src=48\n20                            港股医药股尾盘拉升 和黄医药涨超10%  ...  https://news.futunn.com/flash/16697084?src=48\n21                   美众议院将就“封禁TikTok”法案进行表决 外交部回应  ...  https://news.futunn.com/flash/16697069?src=48\n22                       互金协会：建议将所有涉金融APP纳入备案管理范围  ...  https://news.futunn.com/flash/16697058?src=48\n23                           凯投宏观：英国经济在隧道的尽头看到了光明  ...  https://news.futunn.com/flash/16697054?src=48\n24                  报告：去年全球艺术品销售额下降4%，中国销售额逆势增长9%  ...  https://news.futunn.com/flash/16697051?src=48\n25                          高盛：沟通不足，日本央行会推迟一个月再加息  ...  https://news.futunn.com/flash/16697046?src=48\n26                                                 ...  https://news.futunn.com/flash/16697048?src=48\n27                                                 ...  https://news.futunn.com/flash/16696995?src=48\n28                             天津调整公积金贷款首付比例 首套两成  ...  https://news.futunn.com/flash/16696984?src=48\n29                                                 ...  https://news.futunn.com/flash/16696915?src=48\n30                                                 ...  https://news.futunn.com/flash/16696860?src=48\n31                        小米生态链模式十年来最大调整，提出分级管理策略  ...  https://news.futunn.com/flash/16696189?src=48\n32                         《我国支持科技创新主要税费优惠政策指引》发布  ...  https://news.futunn.com/flash/16696803?src=48\n33               美国家运输安全委员会将于8月就波音客机“掉门”事故举行调查听证会  ...  https://news.futunn.com/flash/16696764?src=48\n34                                                 ...  https://news.futunn.com/flash/16696744?src=48\n35                                                 ...  https://news.futunn.com/flash/16696702?src=48\n36                                                 ...  https://news.futunn.com/flash/16696682?src=48\n37                 香港文旅局：首两个月日均访港人次达13万 旅游业复苏势头强劲  ...  https://news.futunn.com/flash/16696679?src=48\n38                                                 ...  https://news.futunn.com/flash/16696632?src=48\n39                                                 ...  https://news.futunn.com/flash/16696592?src=48\n40                         北向资金净买入15.67亿元，连续4日净买入  ...  https://news.futunn.com/flash/16696597?src=48\n41                          财经网站Forexlive评英国GDP数据  ...  https://news.futunn.com/flash/16696577?src=48\n42                                                 ...  https://news.futunn.com/flash/16696578?src=48\n43  AI研发投资超100亿：荣耀AI PC技术将在荣耀MagicBook Pro 16全面落地  ...  https://news.futunn.com/flash/16696540?src=48\n44                    A股收评：沪指缩量调整跌0.4% 传媒、游戏股逆势大涨  ...  https://news.futunn.com/flash/16696512?src=48\n45                   二手平台VisionPro租赁每小时199元 需3万押金  ...  https://news.futunn.com/flash/16696336?src=48\n46            小米汽车 SU7 新配置申报：宁德时代磷酸铁锂电池，220kW 单电机  ...  https://news.futunn.com/flash/16696331?src=48\n47                              大众汽车计划今年推出30多款新产品  ...  https://news.futunn.com/flash/16696328?src=48\n48               极氪发布安徽马鞍山极氪 001 过火事件说明：电池无异常、无燃烧  ...  https://news.futunn.com/flash/16696320?src=48\n49                 中钢协：3月上旬重点统计钢铁企业共生产钢材1927.62万吨  ...  https://news.futunn.com/flash/16696278?src=48\n[50 rows x 4 columns]\n```\n\n#### 全球财经直播-同花顺财经\n\n接口：stock_info_global_ths\n\n目标地址：https://news.10jqka.com.cn/realtimenews.html\n\n描述：同花顺财经-全球财经直播\n\n限量：单次返回最近 20 条新闻数据\n\n输入参数\n\n| 名称 | 类型 | 描述 |\n|----|----|----|\n| -  | -  | -  |\n\n输出参数\n\n| 名称   | 类型     | 描述 |\n|------|--------|----|\n| 标题   | object | -  |\n| 内容   | object | -  |\n| 发布时间 | object | -  |\n| 链接   | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_info_global_ths_df = ak.stock_info_global_ths()\nprint(stock_info_global_ths_df)\n```\n\n数据示例\n\n```\n                                            标题  ...                                                 链接\n0                       机构论市：指数一波三折 传媒、游戏逆势走强！  ...  https://news.10jqka.com.cn/20240313/c655877020...\n1                            日本决定启动与孟加拉国的EPA谈判  ...  https://news.10jqka.com.cn/20240313/c655876966...\n2   Canalys：2023年Q4英特尔CPU出货5000万颗占比78% 是AMD的6倍  ...  https://news.10jqka.com.cn/20240313/c655876921...\n3                  英伟达美股盘前涨近2% 市值再度升至2.3万亿美元上方  ...  https://news.10jqka.com.cn/20240313/c655876900...\n4                          九部门：鼓励在有条件的村布放智能快件箱  ...  https://news.10jqka.com.cn/20240313/c655876856...\n5                               九部门：打造县域直播电商基地  ...  https://news.10jqka.com.cn/20240313/c655876844...\n6          乘联会：3月1-10日乘用车市场零售35.5万辆 同比去年同期增长4%  ...  https://news.10jqka.com.cn/20240313/c655876794...\n7            商务部等9部门：用5年时间在全国培育100个左右农村电商“领跑县”  ...  https://news.10jqka.com.cn/20240313/c655876780...\n8                     港股收评：恒指收跌0.07% 科指收涨0.34%  ...  https://news.10jqka.com.cn/20240313/c655876701...\n9                        蔚来推出买车送手机活动，面向2024款车型  ...  https://news.10jqka.com.cn/20240313/c655876687...\n10         韩国总统尹锡悦承诺到2027年将航天产业发展相关预算增至1.5万亿韩元  ...  https://news.10jqka.com.cn/20240313/c655876677...\n11                         恢复两融业务正常平仓措施？业内人士否认  ...  https://news.10jqka.com.cn/20240313/c655876644...\n12                       中欧民航合作项目预先飞行计划研讨会在京召开  ...  https://news.10jqka.com.cn/20240313/c655876634...\n13                                      欧股多数高开  ...  https://news.10jqka.com.cn/20240313/c655876611...\n14                        洛阳钼业：KFM 2月产铜量再创历史新高  ...  https://news.10jqka.com.cn/20240313/c655876547...\n15                    第十三届中国数控机床展览会将于4月8日在上海启幕  ...  https://news.10jqka.com.cn/20240313/c655876458...\n16                        浙大网新：子公司中标1.28亿元施工项目  ...  https://news.10jqka.com.cn/20240313/c655876449...\n17                外交部：不管谁当选下一届美国总统 我们都希望更好造福两国  ...  https://news.10jqka.com.cn/20240313/c655876428...\n18                   小米SU7展车已进驻王府井门店，店内仍在装修未开业  ...  https://news.10jqka.com.cn/20240313/c655876412...\n19       中证指数有限公司将发布中证港股通人工智能主题指数和中证香港人工智能主题指数  ...  https://news.10jqka.com.cn/20240313/c655876408...\n[20 rows x 4 columns]\n```\n\n#### 电报-财联社\n\n接口：stock_info_global_cls\n\n目标地址：https://www.cls.cn/telegraph\n\n描述：财联社-电报\n\n限量：单次返回指定 symbol 的最近 20 条财联社-电报的数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                 |\n|--------|-----|------------------------------------|\n| symbol | str | symbol=\"全部\"；choice of {\"全部\", \"重点\"} |\n\n输出参数\n\n| 名称   | 类型     | 描述  |\n|------|--------|-----|\n| 标题   | object | -   |\n| 内容   | object | -   |\n| 发布日期 | object | -   |\n| 发布时间 | object | -   |\n\n接口示例：\n\n```python\nimport akshare as ak\n\nstock_info_global_cls_df = ak.stock_info_global_cls(symbol=\"全部\")\nprint(stock_info_global_cls_df)\n```\n\n数据示例\n\n```\n                               标题  ...      发布时间\n0    华为轮值董事长徐直军谈鸿蒙生态未来目标：拥有10万个应用  ...  14:05:03\n1       中国牵头首个冷链物流无接触配送领域国际标准正式发布  ...  14:12:02\n2           以军袭击黎巴嫩首都住宅楼 死亡人数升至5人  ...  14:37:34\n3            上交所与三大石油石化集团将进一步深化合作  ...  14:50:34\n4                                  ...  14:56:22\n5    至少19人食用后患病 美国企业紧急召回近76吨牛肉泥产品  ...  15:13:18\n6       《加强长江流域生物多样性司法保护倡议书》在武汉发布  ...  15:27:53\n7               阿联酋哈伊马角酋长一行到访亿航智能  ...  15:41:35\n8           以军称空袭贝鲁特南郊多个真主党武装军事目标  ...  15:43:30\n9          以军空袭加沙地带多地 致17名巴勒斯坦人死亡  ...  15:46:34\n10             北约秘书长在美国佛州与特朗普举行会谈  ...  15:49:04\n11     经济观察报：央国企市值管理更多相关政策在酝酿和推进中  ...  15:56:06\n12      华为徐直军：鸿蒙生态就是基于开源鸿蒙共建共享的生态  ...  16:00:29\n13  我国牵头的首个工业化建造自动标识与数据采集应用国际标准发布  ...  16:02:03\n14     AI辅助诊断首次被列入 国家医保局解读17批价格立项  ...  16:12:22\n15            以军袭击贝鲁特中部住宅楼 已致9人死亡  ...  16:32:07\n16        俄宣布12月1日起临时禁止废旧贵金属出口6个月  ...  16:36:40\n17                                 ...  16:41:55\n18          波兰农民在波乌边境抗议 将封锁梅迪卡过境点  ...  16:56:41\n19            吉林省将迎大范围明显雨雪及寒潮大风天气  ...  17:17:38\n[20 rows x 4 columns]\n```\n\n### 手续费\n\n#### 国内券商佣金\n\n##### 以万 2.5 佣金结构为例\n\n深证证券交易所\n\n| 项目   | 费用      | 收取部门    |\n|------|---------|---------|\n| 过户费  | 万 0.2   | 由中国结算收取 |\n| 证管费  | 万 0.2   | 由证监会收取  |\n| 经手费  | 万 0.487 | 由交易所收取  |\n| 券商收入 | 万 1.613 | 由券商收取   |\n\n上海证券交易所\n\n| 项目   | 费用      | 收取部门   |\n|------|---------|--------|\n| 证管费  | 万 0.2   | 由证监会收取 |\n| 经手费  | 万 0.487 | 由交易所收取 |\n| 券商收入 | 万 1.813 | 由券商收取  |\n\n##### 以万 1.2 佣金结构为例\n\n深证证券交易所\n\n| 项目   | 费用      | 收取部门    |\n|------|---------|---------|\n| 过户费  | 万 0.2   | 由中国结算收取 |\n| 证管费  | 万 0.2   | 由证监会收取  |\n| 经手费  | 万 0.487 | 由交易所收取  |\n| 券商收入 | 万 0.313 | 由券商收取   |\n\n上海证券交易所\n\n| 项目   | 费用      | 收取部门   |\n|------|---------|--------|\n| 证管费  | 万 0.2   | 由证监会收取 |\n| 经手费  | 万 0.487 | 由交易所收取 |\n| 券商收入 | 万 0.513 | 由券商收取  |\n\n##### 结构图\n\n![交易费用](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/mindmap/cost_of_trade.svg)\n\n### 技术指标\n\n#### 创新高\n\n接口：stock_rank_cxg_ths\n\n目标地址：https://data.10jqka.com.cn/rank/cxg/\n\n描述：同花顺-数据中心-技术选股-创新高\n\n限量：单次指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                        |\n|--------|-----|-----------------------------------------------------------|\n| symbol | str | symbol=\"创月新高\"; choice of {\"创月新高\", \"半年新高\", \"一年新高\", \"历史新高\"} |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 股票代码   | object  | -       |\n| 股票简称   | object  | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 换手率    | float64 | 注意单位: % |\n| 最新价    | float64 | 注意单位: 元 |\n| 前期高点   | float64 | -       |\n| 前期高点日期 | object  | -       |\n\n接口示例：\n\n```python\nimport akshare as ak\n\nstock_rank_cxg_ths_df = ak.stock_rank_cxg_ths(symbol=\"创月新高\")\nprint(stock_rank_cxg_ths_df)\n```\n\n数据示例\n\n```\n    序号 股票代码  股票简称  涨跌幅 换手率  最新价  前期高点  前期高点日期\n0    1  000157  中联重科   1.23  1.20   7.44   7.37  2024-01-30\n1    2  000333  美的集团   2.06  0.67  59.45  58.81  2024-02-01\n2    3  000423  东阿阿胶   3.25  1.86  55.25  55.09  2024-01-29\n3    4  000425  徐工机械   2.71  1.57   5.69   5.68  2024-01-29\n4    5  000429  粤高速A   4.28  1.54   9.75   9.35  2024-02-02\n..  ..     ...   ...    ...   ...    ...    ...         ...\n63  64  603156  养元饮品   5.03  0.70  24.62  23.44  2024-02-02\n64  65  603195  公牛集团   2.95  0.25  96.96  95.03  2024-01-29\n65  66  603369   今世缘   1.00  0.80  47.55  47.08  2024-02-02\n66  67  603871  嘉友国际   4.32  1.48  19.81  19.64  2024-01-31\n67  68  603960  克来机电  10.01  2.62  15.82  14.38  2024-02-02\n[68 rows x 8 columns]\n```\n\n#### 创新低\n\n接口：stock_rank_cxd_ths\n\n目标地址：https://data.10jqka.com.cn/rank/cxd/\n\n描述：同花顺-数据中心-技术选股-创新低\n\n限量：单次指定 symbol 的所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                        |\n|--------|-----|-----------------------------------------------------------|\n| symbol | str | symbol=\"创月新低\"; choice of {\"创月新低\", \"半年新低\", \"一年新低\", \"历史新低\"} |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 股票代码   | object  | -       |\n| 股票简称   | object  | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 换手率    | float64 | 注意单位: % |\n| 最新价    | float64 | 注意单位: 元 |\n| 前期低点   | float64 | -       |\n| 前期低点日期 | object  | -       |\n\n接口示例：\n\n```python\nimport akshare as ak\n\nstock_rank_cxd_ths_df = ak.stock_rank_cxd_ths(symbol=\"创月新低\")\nprint(stock_rank_cxd_ths_df)\n```\n\n数据示例\n\n```\n     序号   股票代码  股票简称  涨跌幅 换手率  最新价  前期低点  前期低点日期\n0        1  000004  国华网安 -10.04  3.97  10.22  11.36  2024-02-02\n1        2  000005  ST星源  -4.71  0.22   0.81   0.85  2024-02-02\n2        3  000006  深振业A  -9.62  3.56   3.57   3.93  2024-02-01\n3        4  000008  神州高铁  -5.37  1.17   1.94   2.05  2024-02-02\n4        5  000009  中国宝安  -4.21  1.20  10.00  10.44  2024-02-02\n    ...     ...   ...    ...   ...    ...    ...         ...\n3535  3536  605580  恒盛能源 -10.01  4.73   8.09   8.99  2024-02-02\n3536  3537  605588  冠石科技 -10.00  7.30  32.77  36.41  2024-02-02\n3537  3538  605589  圣泉集团  -4.05  2.18  16.10  16.78  2024-02-02\n3538  3539  605598  上海港湾  -9.97  4.55  15.35  17.05  2024-02-02\n3539  3540  605599  菜百股份  -2.93  0.74  11.27  11.61  2024-02-02\n[3540 rows x 8 columns]\n```\n\n#### 连续上涨\n\n接口：stock_rank_lxsz_ths\n\n目标地址：https://data.10jqka.com.cn/rank/lxsz/\n\n描述：同花顺-数据中心-技术选股-连续上涨\n\n限量：单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 序号    | int64   | -       |\n| 股票代码  | object  | -       |\n| 股票简称  | object  | -       |\n| 收盘价   | float64 | 注意单位: 元 |\n| 最高价   | float64 | 注意单位: 元 |\n| 最低价   | float64 | 注意单位: 元 |\n| 连涨天数  | int64   | -       |\n| 连续涨跌幅 | float64 | 注意单位: % |\n| 累计换手率 | float64 | 注意单位: % |\n| 所属行业  | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_rank_lxsz_ths_df = ak.stock_rank_lxsz_ths()\nprint(stock_rank_lxsz_ths_df)\n```\n\n数据示例\n\n```\n    序号股票代码  股票简称  收盘价  最高价  最低价  连涨天数  连续涨跌幅 累计换手率 所属行业\n0    1  603192  汇得科技   27.33   27.87   24.31     7   2.90  10.05   化学制品\n1    2  688330   宏力达   98.50   99.30   83.24     7   6.41  21.48   电力设备\n2    3  300870   欧陆通   67.60   67.99   58.08     5   6.46   7.75   电力设备\n3    4  603507  振江股份   47.70   48.21   35.28     5  21.59  36.38   电力设备\n4    5  603855  华荣股份   23.50   24.12   20.91     5   8.60   6.72   专用设备\n..  ..     ...   ...     ...     ...     ...   ...    ...    ...    ...\n58  59  688122  西部超导   81.26   82.50   75.37     3   5.12   5.13   国防军工\n59  60  688166  博瑞医药   33.39   34.16   30.31     3   0.57   4.75   化学制药\n60  61  688369  致远互联   59.30   60.97   55.22     3   6.23   1.74  计算机应用\n61  62  688395  正弦电气   25.45   25.93   23.85     3   6.71  10.89  自动化设备\n62  63  688788  科思科技  139.13  140.20  126.53     3   7.84   7.82   国防军工\n```\n\n#### 连续下跌\n\n接口：stock_rank_lxxd_ths\n\n目标地址：https://data.10jqka.com.cn/rank/lxxd/\n\n描述：同花顺-数据中心-技术选股-连续下跌\n\n限量：单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型      | 描述      |\n|-------|---------|---------|\n| 序号    | int64   | -       |\n| 股票代码  | object  | -       |\n| 股票简称  | object  | -       |\n| 收盘价   | float64 | 注意单位: 元 |\n| 最高价   | float64 | 注意单位: 元 |\n| 最低价   | float64 | 注意单位: 元 |\n| 连涨天数  | int64   | -       |\n| 连续涨跌幅 | float64 | 注意单位: % |\n| 累计换手率 | float64 | 注意单位: % |\n| 所属行业  | object  | -       |\n\n接口示例：\n\n```python\nimport akshare as ak\n\nstock_rank_lxxd_ths_df = ak.stock_rank_lxxd_ths()\nprint(stock_rank_lxxd_ths_df)\n```\n\n数据示例\n\n```\n     序号   股票代码  股票简称  收盘价 最高价  最低价  连涨天数 连续涨跌幅 累计换手率 所属行业\n0        1  603038  华立股份   8.02  19.60   7.75    14 -55.30  178.79    建筑材料\n1        2  605180  华生科技   7.38  16.87   7.38    14 -56.64  265.53    纺织制造\n2        3  605255  天普股份   9.82  22.00   9.82    12 -52.24   73.00   汽车零部件\n3        4  000889  ST中嘉   1.46   2.28   1.46    11 -35.40   27.92    通信服务\n4        5  001217   华尔泰   8.34  17.03   8.06    11 -50.00  234.23    化学原料\n    ...     ...   ...    ...    ...    ...   ...    ...     ...     ...\n1315  1316  603922   金鸿顺  21.70  23.00  20.70     3  -9.43    2.94   汽车零部件\n1316  1317  605218  伟时电子  13.55  19.74  13.55     3 -27.03   21.34   光学光电子\n1317  1318  605296  神农集团  27.26  28.54  26.60     3  -4.35   14.78     养殖业\n1318  1319  688087  英科再生  19.05  20.50  18.21     3  -7.07    3.97  化工合成材料\n1319  1320  688398  赛特新材  25.79  30.80  24.37     3 -17.97    4.15    化学制品\n[1320 rows x 10 columns]\n```\n\n#### 持续放量\n\n接口: stock_rank_cxfl_ths\n\n目标地址: https://data.10jqka.com.cn/rank/cxfl/\n\n描述: 同花顺-数据中心-技术选股-持续放量\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 股票代码   | object  | -       |\n| 股票简称   | object  | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 最新价    | float64 | 注意单位: 元 |\n| 成交量    | object  | 注意单位: 股 |\n| 基准日成交量 | object  | 注意单位: 股 |\n| 放量天数   | int64   | -       |\n| 阶段涨跌幅  | float64 | 注意单位: % |\n| 所属行业   | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_rank_cxfl_ths_df = ak.stock_rank_cxfl_ths()\nprint(stock_rank_cxfl_ths_df)\n```\n\n数据示例\n\n```\n     序号    股票代码  股票简称    涨跌幅  ...      基准日成交量 放量天数  阶段涨跌幅   所属行业\n0        1  000565  渝三峡A   9.97  ...   486.72万(01月26日)    8 -31.55   化学制品\n1        2  000880  潍柴重机  -5.37  ...   354.53万(01月26日)    8 -29.51  汽车零部件\n2        3  000959  首钢股份   2.82  ...  2486.70万(01月26日)    8  -1.80     钢铁\n3        4  002159  三特索道  -6.66  ...   418.88万(01月26日)    8 -30.14  景点及旅游\n4        5  002286   保龄宝  -9.55  ...   298.40万(01月26日)    8 -36.36  农产品加工\n    ...     ...   ...    ...  ...               ...  ...    ...    ...\n1139  1140  688656   浩欧博  -7.63  ...    67.71万(02月02日)    3 -16.46   医疗器械\n1140  1141  688658  悦康药业   2.36  ...   364.38万(02月02日)    3  -1.42   化学制药\n1141  1142  688677  海泰新光   4.57  ...   116.19万(02月02日)    3  13.83   医疗器械\n1142  1143  688683  莱尔科技 -16.04  ...   133.01万(02月02日)    3 -31.20   消费电子\n1143  1144  688701  卓锦股份 -14.72  ...   219.35万(02月02日)    3 -34.92     环保\n[1144 rows x 10 columns]\n```\n\n#### 持续缩量\n\n接口: stock_rank_cxsl_ths\n\n目标地址: https://data.10jqka.com.cn/rank/cxsl/\n\n描述: 同花顺-数据中心-技术选股-持续缩量\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 股票代码   | object  | -       |\n| 股票简称   | object  | -       |\n| 涨跌幅    | float64 | 注意单位: % |\n| 最新价    | float64 | 注意单位: 元 |\n| 成交量    | object  | 注意单位: 股 |\n| 基准日成交量 | object  | 注意单位: 股 |\n| 缩量天数   | int64   | -       |\n| 阶段涨跌幅  | float64 | 注意单位: % |\n| 所属行业   | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_rank_cxsl_ths_df = ak.stock_rank_cxsl_ths()\nprint(stock_rank_cxsl_ths_df)\n```\n\n数据示例\n\n```\n    序号  股票代码  股票简称 涨跌幅  ...     基准日成交量 缩量天数  阶段涨跌幅    所属行业\n0      1  300350   华鹏飞 -4.59  ...     1.14亿(01月24日)   10 -37.46   计算机应用\n1      2  688648  中邮科技 -5.08  ...  1622.39万(01月29日)    7 -28.90    通用设备\n2      3  000058   深赛格  1.89  ...  5392.48万(01月30日)    6 -22.18      零售\n3      4  600121  郑州煤电 -2.80  ...  5509.10万(01月30日)    6 -22.19  煤炭开采加工\n4      5  600816  建元信托 -1.93  ...     1.94亿(01月30日)    6  -9.29   保险及其他\n..   ...     ...   ...   ...  ...               ...  ...    ...     ...\n112  113  688093  世华科技 -0.98  ...   483.17万(02月02日)    3  -5.13    其他电子\n113  114  688293   奥浦迈  0.80  ...   170.12万(02月02日)    3   5.61    医疗服务\n114  115  688334   西高院 -1.69  ...   278.80万(02月02日)    3  -1.20  其他社会服务\n115  116  688376  美埃科技 -1.18  ...   158.60万(02月02日)    3   5.94      环保\n116  117  688787  海天瑞声 -4.58  ...   302.30万(02月02日)    3 -17.38   计算机应用\n[117 rows x 10 columns]\n```\n\n#### 向上突破\n\n接口: stock_rank_xstp_ths\n\n目标地址: https://data.10jqka.com.cn/rank/xstp/\n\n描述: 同花顺-数据中心-技术选股-向上突破\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                   |\n|--------|-----|------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"500日均线\"; choice of {\"5日均线\", \"10日均线\", \"20日均线\", \"30日均线\", \"60日均线\", \"90日均线\", \"250日均线\", \"500日均线\"} |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 序号   | int64   | -       |\n| 股票代码 | object  | -       |\n| 股票简称 | object  | -       |\n| 最新价  | float64 | 注意单位: 元 |\n| 成交额  | object  | 注意单位: 元 |\n| 成交量  | object  | 注意单位: 股 |\n| 涨跌幅  | float64 | 注意单位: % |\n| 换手率  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_rank_xstp_ths_df = ak.stock_rank_xstp_ths(symbol=\"500日均线\")\nprint(stock_rank_xstp_ths_df)\n```\n\n数据示例\n\n```\n   序号    股票代码  股票简称  最新价  成交额  成交量    涨跌幅    换手率\n0      1  300466  赛摩智能   6.13  6.42亿  9499.20万 -11.03  22.62\n1      2  300374  中铁装配  14.28  6.98亿  4488.57万 -10.69  23.72\n2      3  000972  中基健康   4.58  4.62亿  8499.21万 -10.02  11.02\n3      4  600630  龙头股份   9.70  8.09亿  7629.75万 -10.02  17.96\n4      5  603721  中广天择  17.24  3.40亿  1934.10万 -10.02  14.88\n..   ...     ...   ...    ...    ...       ...    ...    ...\n385  386  603178  圣龙股份  27.89  2.87亿  1066.88万  10.02   4.51\n386  387  603225   新凤鸣  13.37  2.67亿  2070.78万  10.04   1.35\n387  388  688728   格科微  19.96  3.61亿  1882.35万  11.63   1.69\n388  389  688127  蓝特光学  19.74  1.54亿   818.44万  12.74   3.40\n389  390  300128  锦富技术   4.20  3.43亿  8830.80万  16.02   8.07\n[390 rows x 8 columns]\n```\n\n#### 向下突破\n\n接口: stock_rank_xxtp_ths\n\n目标地址: https://data.10jqka.com.cn/rank/xxtp/\n\n描述: 同花顺-数据中心-技术选股-向下突破\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称     | 类型  | 描述                                                                                                   |\n|--------|-----|------------------------------------------------------------------------------------------------------|\n| symbol | str | symbol=\"500日均线\"; choice of {\"5日均线\", \"10日均线\", \"20日均线\", \"30日均线\", \"60日均线\", \"90日均线\", \"250日均线\", \"500日均线\"} |\n\n输出参数\n\n| 名称   | 类型      | 描述      |\n|------|---------|---------|\n| 序号   | int64   | -       |\n| 股票代码 | object  | -       |\n| 股票简称 | object  | -       |\n| 最新价  | float64 | 注意单位: 元 |\n| 成交额  | object  | 注意单位: 元 |\n| 成交量  | object  | 注意单位: 股 |\n| 涨跌幅  | float64 | 注意单位: % |\n| 换手率  | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_rank_xxtp_ths_df = ak.stock_rank_xxtp_ths(symbol=\"500日均线\")\nprint(stock_rank_xxtp_ths_df)\n```\n\n数据示例\n\n```\n     序号    股票代码   股票简称  最新价   成交额     成交量    涨跌幅   换手率\n0        1  301106   骏成科技  28.00  7312.44万   234.10万 -20.00  11.23\n1        2  300405   科隆股份   3.61     1.25亿  3107.45万 -19.96  14.20\n2        3  300391   长药控股   3.16  8421.59万  2479.90万 -19.80   7.08\n3        4  300716   泉为科技   5.01  6863.18万  1282.18万 -18.40   8.01\n4        5  300710   万隆光电  11.06  6636.05万   559.99万 -17.95   6.30\n    ...     ...    ...    ...       ...       ...    ...    ...\n3267  3268  000565   渝三峡A   3.97     1.00亿  2680.46万   9.97   6.18\n3268  3269  605155    西大门  10.91     1.04亿  1054.60万   9.98   7.85\n3269  3270  002453   华软科技   6.05  9283.25万  1578.67万  10.00   2.60\n3270  3271  002819   东方中科  22.40     1.41亿   649.21万  10.02   2.77\n3271  3272  300799  *ST左江  20.86     2.54亿  1554.33万  20.02  23.00\n[3272 rows x 8 columns]\n```\n\n#### 量价齐升\n\n接口: stock_rank_ljqs_ths\n\n目标地址: https://data.10jqka.com.cn/rank/ljqs/\n\n描述: 同花顺-数据中心-技术选股-量价齐升\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 股票代码   | object  | -       |\n| 股票简称   | object  | -       |\n| 最新价    | float64 | 注意单位: 元 |\n| 量价齐升天数 | int64   | -       |\n| 阶段涨幅   | float64 | 注意单位: % |\n| 累计换手率  | float64 | 注意单位: % |\n| 所属行业   | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_rank_ljqs_ths_df = ak.stock_rank_ljqs_ths()\nprint(stock_rank_ljqs_ths_df)\n```\n\n数据示例\n\n```\n    序号    股票代码  股票简称  最新价  量价齐升天数   阶段涨幅  累计换手率    所属行业\n0        1  000423  东阿阿胶  60.12       4  14.51   6.77      中药\n1        2  000932  华菱钢铁   5.71       4   5.94   5.57      钢铁\n2        3  002028  思源电气  57.99       4  14.02   7.04    电力设备\n3        4  002444  巨星科技  22.04       4  18.88   6.16    通用设备\n4        5  002595  豪迈科技  32.80       4  21.48   4.45    专用设备\n    ...     ...   ...    ...     ...    ...    ...     ...\n1588  1589  688711  宏微科技  26.54       1   6.29   5.47  半导体及元件\n1589  1590  688739  成大生物  28.90       1   2.88   1.99    生物制品\n1590  1591  688798  艾为电子  54.03       1   3.31   2.17  半导体及元件\n1591  1592  688799  华纳药厂  36.95       1   4.23   4.11    化学制药\n1592  1593  689009  九号公司  28.04       1   7.68   1.76   非汽车交运\n[1593 rows x 8 columns]\n```\n\n#### 量价齐跌\n\n接口: stock_rank_ljqd_ths\n\n目标地址: https://data.10jqka.com.cn/rank/ljqd/\n\n描述: 同花顺-数据中心-技术选股-量价齐跌\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述      |\n|--------|---------|---------|\n| 序号     | int64   | -       |\n| 股票代码   | object  | -       |\n| 股票简称   | object  | -       |\n| 最新价    | float64 | 注意单位: 元 |\n| 量价齐跌天数 | int64   | -       |\n| 阶段涨幅   | float64 | 注意单位: % |\n| 累计换手率  | float64 | 注意单位: % |\n| 所属行业   | object  | -       |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_rank_ljqd_ths_df = ak.stock_rank_ljqd_ths()\nprint(stock_rank_ljqd_ths_df)\n```\n\n数据示例\n\n```\n    序号    股票代码  股票简称  最新价  量价齐跌天数  阶段涨幅 累计换手率  所属行业\n0        1  600322  津投城开   1.53       5 -22.73   21.21   房地产开发\n1        2  600622  光大嘉宝   2.21       5 -28.94   45.42   房地产开发\n2        3  603082  北自科技  25.84       5 -45.83  248.34    通用设备\n3        4  002269  美邦服饰   1.53       4 -17.30   20.10    服装家纺\n4        5  002523  天桥起重   2.52       4 -22.94   24.58    专用设备\n    ...     ...   ...    ...     ...    ...     ...     ...\n1464  1465  688719  爱科赛博  44.18       1  -3.85    4.42    电力设备\n1465  1466  688722   同益中  10.76       1  -0.46    1.45  化工合成材料\n1466  1467  688737  中自科技  19.15       1  -5.53    1.59   汽车零部件\n1467  1468  688767  博拓生物  23.20       1  -2.93    1.80    医疗器械\n1468  1469  688787  海天瑞声  40.17       1  -4.58    5.64   计算机应用\n[1469 rows x 8 columns]\n```\n\n#### 险资举牌\n\n接口: stock_rank_xzjp_ths\n\n目标地址: https://data.10jqka.com.cn/financial/xzjp/\n\n描述: 同花顺-数据中心-技术选股-险资举牌\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称         | 类型      | 描述      |\n|------------|---------|---------|\n| 序号         | int64   | -       |\n| 举牌公告日      | object  | -       |\n| 股票代码       | object  | -       |\n| 股票简称       | object  | -       |\n| 现价         | float64 | 注意单位: 元 |\n| 涨跌幅        | float64 | 注意单位: % |\n| 举牌方        | object  | -       |\n| 增持数量       | object  | 注意单位: 股 |\n| 交易均价       | float64 | 注意单位: 元 |\n| 增持数量占总股本比例 | float64 | 注意单位: % |\n| 变动后持股总数    | object  | 注意单位: 股 |\n| 变动后持股比例    | float64 | 注意单位: % |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_rank_xzjp_ths_df = ak.stock_rank_xzjp_ths()\nprint(stock_rank_xzjp_ths_df)\n```\n\n数据示例\n\n```\n    序号       举牌公告日    股票代码   股票简称  ...   交易均价  增持数量占总股本比例   变动后持股总数 变动后持股比例\n0    1  2025-01-04  600582   天地科技  ...   6.23        0.10     2.07亿    5.00\n1    2  2024-12-24  600236   桂冠电力  ...   6.60        1.00    10.25亿   13.00\n2    3  2024-12-24  002005   ST德豪  ...   1.58        0.67     1.23亿    7.04\n3    4  2024-12-17  600016   民生银行  ...   2.92        0.04    21.89亿    5.00\n4    5  2024-12-10  300036   超图软件  ...  19.39        4.80  2538.69万    5.15\n5    6  2024-12-07  601330   绿色动力  ...   6.38        0.03     1.14亿    8.16\n6    7  2024-11-27  600527   江南高纤  ...   1.97        0.02     1.10亿    6.35\n7    8  2024-11-21  600113   浙江东日  ...  10.16        2.53  2129.42万    5.05\n8    9  2024-11-19  001288   运机集团  ...  28.14        0.99   987.89万    5.93\n9   10  2024-11-15  300436    广生堂  ...  24.50        5.02   800.00万    5.02\n10  11  2024-11-15  000088    盐田港  ...   0.00        6.66     2.85亿    5.49\n11  12  2024-11-15  000088    盐田港  ...   0.00        6.66     2.85亿    5.49\n12  13  2024-11-15  000088    盐田港  ...   0.00        6.66     2.85亿    5.49\n13  14  2024-11-15  000088    盐田港  ...   0.00        6.66     2.85亿    5.49\n14  15  2024-11-15  000088    盐田港  ...   0.00        6.66     2.85亿    5.49\n15  16  2024-11-15  000088    盐田港  ...   0.00        6.66     2.85亿    5.49\n16  17  2024-11-15  000088    盐田港  ...   0.00        6.66     2.85亿    5.49\n17  18  2024-11-14  601607   上海医药  ...  21.23        0.31     1.87亿    5.04\n18  19  2024-11-14  600511   国药股份  ...  35.22        0.20  3824.44万    5.07\n19  20  2024-11-13  300201    海伦哲  ...   5.07        0.85  4974.50万    5.00\n20  21  2024-11-12  300499   高澜股份  ...   0.00        0.00  1729.40万    5.67\n21  22  2024-11-11  300499   高澜股份  ...  13.77        5.67  1729.40万    5.67\n22  23  2024-11-09  688118   普元信息  ...  22.11        5.01   471.13万    5.01\n23  24  2024-11-08  002488   金固股份  ...   0.00        0.15  4978.08万    5.00\n24  25  2024-10-31  601963   重庆银行  ...   7.51        0.10     1.75亿    5.03\n25  26  2024-10-31  601963   重庆银行  ...   7.51        0.00     1.75亿    5.03\n26  27  2024-10-17  000007    全新好  ...   5.38        5.00  1732.25万    5.00\n27  28  2024-09-26  002870   香山股份  ...  28.73        0.85  2493.19万   18.88\n28  29  2024-09-14  002870   香山股份  ...  28.98        0.38  2380.74万   18.03\n29  30  2024-09-11  002052  *ST同洲  ...   2.38        0.45  5735.96万    7.69\n30  31  2024-09-07  002870   香山股份  ...  28.87        0.63  2330.34万   17.64\n31  32  2024-09-06  002005   ST德豪  ...   1.27        1.16     1.12亿    6.36\n32  33  2024-09-03  002052  *ST同洲  ...   2.26        0.32  5396.98万    7.24\n33  34  2024-08-30  601199   江南水务  ...   5.31        1.00  5611.41万    6.00\n34  35  2024-08-28  002870   香山股份  ...  27.93        0.52  2246.98万   17.01\n35  36  2024-08-24  002870   香山股份  ...  28.95        1.05  2178.52万   16.49\n36  37  2024-08-23  002052  *ST同洲  ...   1.54        0.13  5155.56万    6.91\n37  38  2024-08-10  603018   华设集团  ...   8.42        0.37  3612.86万    5.28\n38  39  2024-08-10  603018   华设集团  ...   8.42        0.37  3612.86万    5.28\n39  40  2024-08-08  002870   香山股份  ...  28.58        1.01  2039.34万   15.44\n40  41  2024-08-03  002005   ST德豪  ...   1.00        5.21  9127.13万    5.21\n41  42  2024-08-02  601330   绿色动力  ...   2.64        5.03  7015.00万    5.03\n42  43  2024-07-27  001288   运机集团  ...  26.59        5.14   822.59万    5.14\n43  44  2024-07-26  601963   重庆银行  ...   5.03        0.00     1.77亿    5.10\n44  45  2024-07-26  601963   重庆银行  ...   7.97        0.00     2.95亿    8.50\n[45 rows x 12 columns]\n```\n\n### ESG 评级\n\n#### ESG 评级数据\n\n接口: stock_esg_rate_sina\n\n目标地址: https://finance.sina.com.cn/esg/grade.shtml\n\n描述: 新浪财经-ESG评级中心-ESG评级-ESG评级数据\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称    | 类型     | 描述 |\n|-------|--------|----|\n| 成分股代码 | object | -  |\n| 评级机构  | object | -  |\n| 评级    | object | -  |\n| 评级季度  | object | -  |\n| 标识    | object | -  |\n| 交易市场  | object | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_esg_rate_sina_df = ak.stock_esg_rate_sina()\nprint(stock_esg_rate_sina_df)\n```\n\n数据示例\n\n```\n    成分股代码              评级机构     评级    评级季度             标识 交易市场\n0      SZ000001             中财绿金院     A-  2022Q4            NaN   cn\n1      SZ000001              商道融绿     B+  2022Q4            NaN   cn\n2      SZ000001                盟浪      A  2022Q2            NaN   cn\n3      SZ000001               中诚信    AA-  2023Q3            NaN   cn\n4      SZ000001  晨星Sustainalytics  24.96  2022Q4  Comprehensive   cn\n         ...               ...    ...     ...            ...  ...\n46888   HK02361                盟浪      -  2022Q2            NaN   hk\n46889   HK02361               中诚信     BB  2023Q3            NaN   hk\n46890   HK02361  晨星Sustainalytics      -  2022Q4                  hk\n46891   HK02361                妙盈      -  2022Q2            NaN   hk\n46892   HK02361             华测CTI      -  2022Q1            NaN   hk\n[46893 rows x 6 columns]\n```\n\n#### MSCI\n\n接口: stock_esg_msci_sina\n\n目标地址: https://finance.sina.com.cn/esg/grade.shtml\n\n描述: 新浪财经-ESG评级中心-ESG评级-MSCI\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述 |\n|--------|---------|----|\n| 股票代码   | object  | -  |\n| ESG评分  | object  | -  |\n| 环境总评   | float64 | -  |\n| 社会责任总评 | float64 | -  |\n| 治理总评   | float64 | -  |\n| 评级日期   | object  | -  |\n| 交易市场   | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_esg_msci_sina_df = ak.stock_esg_msci_sina()\nprint(stock_esg_msci_sina_df)\n```\n\n数据示例\n\n```\n        股票代码 ESG评分 环境总评 社会责任总评 治理总评 评级日期 交易市场\n0      00019.HK   AAA   7.0     7.3   6.3  2024-04-24   HK\n1     000513.SZ   AAA   6.8     6.4   6.1  2024-06-25   CN\n2      00066.HK   AAA   7.2     5.6   6.5  2024-07-11   HK\n3      00087.HK   AAA   7.0     7.3   6.3  2024-04-24   HK\n4      00992.HK   AAA   5.1     6.2   5.5  2024-07-08   HK\n...         ...   ...   ...     ...   ...         ...  ...\n4619   UONEK.US   CCC   7.0     3.2   1.0  2024-06-24   US\n4620     UVE.US   CCC   1.9     2.0   5.4  2024-07-08   US\n4621     VTS.US   CCC   1.1     2.4   6.8  2024-04-24   US\n4622    WULF.US   CCC   0.3     1.3   3.9  2024-05-20   US\n4623    ZETA.US   CCC   6.7     3.1   2.0  2024-06-24   US\n[4624 rows x 7 columns]\n```\n\n#### 路孚特\n\n接口: stock_esg_rft_sina\n\n目标地址: https://finance.sina.com.cn/esg/grade.shtml\n\n描述: 新浪财经-ESG评级中心-ESG评级-路孚特\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称       | 类型      | 描述 |\n|----------|---------|----|\n| 股票代码     | object  | -  |\n| ESG评分    | object  | -  |\n| ESG评分日期  | object  | -  |\n| 环境总评     | float64 | -  |\n| 环境总评日期   | float64 | -  |\n| 社会责任总评   | float64 | -  |\n| 社会责任总评日期 | object  | -  |\n| 治理总评     | object  | -  |\n| 治理总评日期   | object  | -  |\n| 争议总评     | object  | -  |\n| 争议总评日期   | object  | -  |\n| 行业       | object  | -  |\n| 交易所      | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_esg_rft_sina_df = ak.stock_esg_rft_sina()\nprint(stock_esg_rft_sina_df)\n```\n\n数据示例\n\n```\n           股票代码     ESG评分     ESG评分日期  ...      争议总评日期          行业   交易所\n0          MNTX   10.9(D)  2024-03-23  ...  2023-08-26  卡车-建筑-农用机械  纳斯达克\n1     600958.SH  52.3(B-)  2024-03-23  ...  2023-08-26         证券Ⅱ   上交所\n2     000799.SZ  27.4(C-)  2024-03-23  ...  2023-08-26         白酒Ⅱ   深交所\n3     600745.SH  52.5(B-)  2024-03-23  ...  2023-09-09        消费电子   上交所\n4         DISCA   59.9(B)  2024-03-23  ...  2024-03-16     有线-卫星电视  纳斯达克\n         ...       ...         ...  ...         ...         ...   ...\n5418    BILI.US   35.3(C)  2024-03-23  ...  2024-03-23        ????  纳斯达克\n5419    TCOM.US  29.0(C-)  2024-03-23  ...  2023-12-16        ????  纳斯达克\n5420     HCM.US  52.4(B-)  2024-03-23  ...  2023-08-26     ???????  纳斯达克\n5421    XPEV.US   60.4(B)  2024-03-23  ...  2023-08-26          ??   纽交所\n5422      LI.US   35.7(C)  2024-03-23  ...  2023-09-23          ??  纳斯达克\n[5423 rows x 13 columns]\n```\n\n#### 秩鼎\n\n接口: stock_esg_zd_sina\n\n目标地址: https://finance.sina.com.cn/esg/grade.shtml\n\n描述: 新浪财经-ESG评级中心-ESG评级-秩鼎\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型     | 描述 |\n|--------|--------|----|\n| 股票代码   | object | -  |\n| ESG评分  | object | -  |\n| 环境总评   | object | -  |\n| 社会责任总评 | object | -  |\n| 治理总评   | object | -  |\n| 评分日期   | object | -  |\n\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_esg_zd_sina_df = ak.stock_esg_zd_sina()\nprint(stock_esg_zd_sina_df)\n```\n\n数据示例\n\n```\n       股票代码      ESG评分     环境总评   社会责任总评   治理总评    评分日期\n0     600775.SH   70.96(AA)    68.36(A)    65.06(A)   78.76(AA)  2024-03-31\n1     601717.SH   78.64(AA)  87.28(AAA)  57.09(BBB)  89.15(AAA)  2024-03-31\n2     600801.SH   79.78(AA)  85.55(AAA)    68.95(A)  82.06(AAA)  2024-03-31\n3     601618.SH   78.31(AA)  86.90(AAA)    64.58(A)  81.37(AAA)  2024-03-31\n4     600808.SH   78.17(AA)   78.22(AA)    67.38(A)  87.46(AAA)  2024-03-31\n         ...         ...         ...         ...         ...         ...\n7670   00247.HK   70.46(AA)   78.32(AA)    63.93(A)    67.50(A)  2024-03-31\n7671  301016.SZ   51.54(BB)   36.89(CC)    46.12(B)   73.94(AA)  2024-03-31\n7672   03309.HK  56.38(BBB)  56.22(BBB)   35.18(CC)   72.42(AA)  2024-03-31\n7673  301166.SZ   51.82(BB)    27.78(C)   39.81(CC)  81.81(AAA)  2024-03-31\n7674  837212.BJ    46.57(B)    34.34(C)   51.46(BB)  55.51(BBB)  2024-03-31\n[7675 rows x 6 columns]\n```\n\n#### 华证指数\n\n接口: stock_esg_hz_sina\n\n目标地址: https://finance.sina.com.cn/esg/grade.shtml\n\n描述: 新浪财经-ESG评级中心-ESG评级-华证指数\n\n限量: 单次返回所有数据\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称     | 类型      | 描述 |\n|--------|---------|----|\n| 日期     | object  | -  |\n| 股票代码   | object  | -  |\n| 交易市场   | object  | -  |\n| 股票名称   | object  | -  |\n| ESG评分  | float64 | -  |\n| ESG等级  | object  | -  |\n| 环境     | float64 | -  |\n| 环境等级   | object  | -  |\n| 社会     | float64 | -  |\n| 社会等级   | object  | -  |\n| 公司治理   | float64 | -  |\n| 公司治理等级 | object  | -  |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_esg_hz_sina_df = ak.stock_esg_hz_sina()\nprint(stock_esg_hz_sina_df)\n```\n\n数据示例\n\n```\n        日期       股票代码 交易市场   股票名称  ESG评分  ... 环境等级     社会 社会等级   公司治理 公司治理等级\n0     2023-04-30  300760.SZ   cn   迈瑞医疗  88.85  ...  BBB  92.77   AA  89.90      A\n1     2023-04-30  601825.SH   cn   沪农商行  88.09  ...  BBB  88.64    A  89.79      A\n2     2023-04-30  601166.SH   cn   兴业银行  88.08  ...   AA  86.00    A  88.78      A\n3     2023-04-30  300021.SZ   cn   大禹节水  87.91  ...    A  91.78   AA  85.77      A\n4     2023-04-30  600803.SH   cn   新奥股份  87.90  ...    A  90.49   AA  85.99      A\n          ...        ...  ...    ...    ...  ...  ...    ...  ...    ...    ...\n5159  2023-04-30  000150.SZ   cn  *ST宜康  60.24  ...    C  69.49  CCC  53.14      C\n5160  2023-04-30  600242.SH   cn  *ST中昌  59.79  ...    C  68.36  CCC  54.08      C\n5161  2023-04-30  000752.SZ   cn  *ST西发  59.55  ...    C  67.36  CCC  56.29      C\n5162  2023-04-30  688086.SH   cn  *ST紫晶  57.11  ...   CC  63.37   CC  47.49      C\n5163  2023-04-30  000038.SZ   cn  *ST大通  56.95  ...   CC  65.05  CCC  49.79      C\n[5164 rows x 12 columns]\n```\n"
  },
  {
    "path": "docs/data/tool/tool.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 工具箱\n\n### 交易日历\n\n接口: tool_trade_date_hist_sina\n\n目标地址: https://finance.sina.com.cn\n\n描述: 新浪财经-股票交易日历数据\n\n限量: 单次返回从 1990-12-19 到 2024-12-31 之间的股票交易日历数据, 这里补充 1992-05-04 进入交易日\n\n输入参数\n\n| 名称  | 类型  | 描述  |\n|-----|-----|-----|\n| -   | -   | -   |\n\n输出参数\n\n| 名称         | 类型     | 描述                                                        |\n|------------|--------|-----------------------------------------------------------|\n| trade_date | object | 从 1990-12-19 至 2024-12-31 的股票交易日数据; 这里补充 1992-05-04 进入交易日 |\n\n接口示例\n\n```python\nimport akshare as ak\n\ntool_trade_date_hist_sina_df = ak.tool_trade_date_hist_sina()\nprint(tool_trade_date_hist_sina_df)\n```\n\n数据示例\n\n```\n      trade_date\n0     1990-12-19\n1     1990-12-20\n2     1990-12-21\n3     1990-12-24\n4     1990-12-25\n...          ...\n8550  2025-12-25\n8551  2025-12-26\n8552  2025-12-29\n8553  2025-12-30\n8554  2025-12-31\n[8555 rows x 1 columns]\n```\n"
  },
  {
    "path": "docs/data_tips.md",
    "content": "# [AKShare](https://github.com/akfamily/akshare) 数据说明\n\n## 专栏介绍\n\n本专栏主要目的是提示数据使用的风险，包括但不限于股票、期货、期权、债券、基金、外汇等数据。\n\n## 股票数据\n\n### stock_zh_a_hist\n\n接口：stock_zh_a_hist\n\n问题描述：股票 `600734` 后复权数据的开高低收字段出现负值\n\n代码复现：\n\n```python\nimport akshare as ak\n\nstock_zh_a_hist_df = ak.stock_zh_a_hist(\n    symbol=\"600734\",\n    period=\"daily\",\n    start_date=\"20050501\",\n    end_date=\"20050520\",\n    adjust=\"hfq\"\n)\nprint(stock_zh_a_hist_df)\n```\n\n结果复现：\n\n```shell\n      日期    开盘    收盘    最高    最低  ...  成交额     振幅    涨跌幅   涨跌额   换手率\n0  2005-05-09 -0.13 -0.53  0.00 -0.53  ...  1571616.0   407.69 -507.69 -0.66  0.60\n1  2005-05-10 -0.53 -0.50 -0.36 -0.79  ...  1150869.0   -81.13    5.66  0.03  0.45\n2  2005-05-11 -0.50 -0.30 -0.20 -0.69  ...  1651719.0   -98.00   40.00  0.20  0.63\n3  2005-05-12 -0.33 -0.20  0.00 -0.43  ...  2175707.0  -143.33   33.33  0.10  0.81\n4  2005-05-13 -0.33 -0.13  0.07 -0.40  ...  1569427.0  -235.00   35.00  0.07  0.58\n5  2005-05-16 -0.30 -0.10  0.10 -0.40  ...  2324469.0  -384.62   23.08  0.03  0.85\n6  2005-05-17 -0.10  0.04  0.13 -0.23  ...  2682900.0  -360.00  140.00  0.14  0.96\n7  2005-05-18  0.00  0.20  0.27 -0.13  ...  2261494.0  1000.00  400.00  0.16  0.81\n8  2005-05-19  0.10  0.07  0.17 -0.06  ...  1589463.0   115.00  -65.00 -0.13  0.57\n9  2005-05-20  0.07  0.00  0.13 -0.03  ...  1355000.0   228.57 -100.00 -0.07  0.48\n[10 rows x 11 columns]\n```\n"
  },
  {
    "path": "docs/demo.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 策略示例\n\n本策略示例文档的主要目的是为了方便的展示 [AKShare](https://github.com/akfamily/akshare) 的数据接口\n调用、基本的数据处理和回测框架使用，并不涉及任何投资建议，提供的示例代码也仅供参考。\n\n本策略示例是基于 Python 编程语言的开源投研和交易框架 [PyBroker](https://www.pybroker.com) 和\n[Backtrader](https://www.backtrader.com) 来演示！\n注意：本教程的开发是基于：Python (64 位) 3.12.4 来进行的\n\n### AKQuant 介绍（强烈推荐）\n\nAKQuant 是一款专为量化投研 (Quantitative Research) 打造的高性能混合架构引擎。它以 \nRust 铸造极速撮合内核，以 Python 链接数据与 AI 生态，旨在为量化投资者提供可靠高效的解决方案。\n它超越了传统工具的范畴，将**事件驱动**、**机器学习**与**生产级风控**深度融合，让量化交易不再受限于计算性能，专注于策略本身的逻辑与价值。\n\n### AKQuant 安装\n\nAKQuant 支持在 Windows、macOS 和 Linux 中的 Python 3.10（建议使用 Python 3.13）及以上版本使用。其安装非常简单，\n只需要 ```pip install akquant``` 就可以实现一键安装。\n\n### AKQuant 教程\n\nAKShare 拥有最齐全的量化投研和使用文档，请访问：[AKQuant](https://akquant.akfamily.xyz)\n\n### AKQuant 策略示例\n\n```python\nimport akquant as aq\nimport akshare as ak\nfrom akquant import Strategy\n\n# 1. 准备数据\n# 使用 akshare 获取 A 股历史数据 (需安装: pip install akshare)\ndf = ak.stock_zh_a_daily(symbol=\"sh600000\", start_date=\"20230101\", end_date=\"20231231\")\n\n\nclass MyStrategy(Strategy):\n    def on_bar(self, bar):\n        # 简单策略示例:\n        # 当收盘价 > 开盘价 (阳线) -> 买入\n        # 当收盘价 < 开盘价 (阴线) -> 卖出\n\n        # 获取当前持仓\n        current_pos = self.get_position(bar.symbol)\n\n        if current_pos == 0 and bar.close > bar.open:\n            self.buy(bar.symbol, 100)\n            print(f\"[{bar.timestamp_str}] Buy 100 at {bar.close:.2f}\")\n\n        elif current_pos > 0 and bar.close < bar.open:\n            self.close_position(bar.symbol)\n            print(f\"[{bar.timestamp_str}] Sell 100 at {bar.close:.2f}\")\n\n\n# 运行回测\nresult = aq.run_backtest(\n    data=df,\n    strategy=MyStrategy,\n    symbol=\"sh600000\"\n)\n\n# 打印回测结果\nprint(\"\\n=== Backtest Result ===\")\nprint(result.metrics_df)\n\n```\n\n**运行结果示例:**\n\n```text\n=== Backtest Result ===\n                                            value\nname                                             \nstart_time              2023-01-03 00:00:00+08:00\nend_time                2023-12-29 00:00:00+08:00\nduration                        360 days, 0:00:00\ntotal_bars                                    242\ntrade_count                                  56.0\ninitial_market_value                    1000000.0\nend_market_value                     999433.06461\ntotal_pnl                                    17.0\nunrealized_pnl                                2.0\ntotal_return_pct                        -0.056694\nannualized_return                       -0.000575\nvolatility                               0.000091\ntotal_profit                                175.0\ntotal_loss                                 -158.0\ntotal_commission                        585.93539\nmax_drawdown                            566.93539\nmax_drawdown_pct                         0.056694\nwin_rate                                33.928571\nloss_rate                               66.071429\nwinning_trades                               19.0\nlosing_trades                                37.0\navg_pnl                                  0.303571\navg_return_pct                           0.042808\navg_trade_bars                           1.946429\navg_profit                               9.210526\navg_profit_pct                           1.269445\navg_winning_trade_bars                   2.789474\navg_loss                                 -4.27027\navg_loss_pct                            -0.587086\navg_losing_trade_bars                    1.513514\nlargest_win                                  45.0\nlargest_win_pct                          6.016043\nlargest_win_bars                              4.0\nlargest_loss                                -33.0\nlargest_loss_pct                        -4.441454\nlargest_loss_bars                             1.0\nmax_wins                                      3.0\nmax_losses                                    7.0\nsharpe_ratio                            -6.320253\nsortino_ratio                           -6.831061\nprofit_factor                            1.107595\nulcer_index                              0.000307\nupi                                     -1.874895\nequity_r2                                0.981117\nstd_error                               22.958262\ncalmar_ratio                            -1.013885\nexposure_time_pct                       45.867769\nvar_95                                  -0.000009\nvar_99                                  -0.000019\ncvar_95                                 -0.000015\ncvar_99                                 -0.000025\nsqn                                       0.20869\nkelly_criterion                          0.032959\n```\n\n### PyBroker 介绍\n\n你是否希望借助 Python 和机器学习的力量来优化您的交易策略？ 那么你需要了解一下 PyBroker！这个 Python 框架专为开发算法交易策略而设计，\n尤其关注使用机器学习的策略。借助 PyBroker，你可以轻松创建和微调交易规则， 构建强大的模型，并深入了解你的策略表现。\n\n### PyBroker 安装\n\nPyBroker 支持在 Windows、macOS 和 Linux 中的 Python 3.9（建议使用 Python 3.11）及以上版本使用。其安装非常简单，\n只需要 ```pip install lib-pybroker``` 就可以实现一键安装。\n\n### PyBroker 系列教程\n\n1. [AKBroker-开源项目](https://akbroker.akfamily.xyz)\n\n### PyBroker 策略示例\n\n```python\n# 导入所需的库和模块\nimport pybroker as pb\nfrom pybroker import Strategy, ExecContext\nfrom pybroker.ext.data import AKShare\n\n# 定义全局参数 \"stock_code\"（股票代码）、\"percent\"（持仓百分比）和 \"stop_profit_pct\"（止盈百分比）\npb.param(name='stock_code', value='600000')\npb.param(name='percent', value=1)\npb.param(name='stop_loss_pct', value=10)\npb.param(name='stop_profit_pct', value=10)\n\n# 初始化 AKShare 数据源\nakshare = AKShare()\n\n# 使用 AKShare 数据源查询特定股票（由 \"stock_code\" 参数指定）在指定日期范围内的数据\ndf = akshare.query(symbols=[pb.param(name='stock_code')], start_date='20200131', end_date='20230228')\n\n\n# 定义交易策略：如果当前没有持有该股票，则买入股票，并设置止盈点位\ndef buy_with_stop_loss(ctx: ExecContext):\n    pos = ctx.long_pos()\n    if not pos:\n        # 计算目标股票数量，根据 \"percent\" 参数确定应购买的股票数量\n        ctx.buy_shares = ctx.calc_target_shares(pb.param(name='percent'))\n        ctx.hold_bars = 100\n    else:\n        ctx.sell_shares = pos.shares\n        # 设置止盈点位，根据 \"stop_profit_pct\" 参数确定止盈点位\n        ctx.stop_profit_pct = pb.param(name='stop_profit_pct')\n\n\n# 创建策略配置，初始资金为 500000\nmy_config = pb.StrategyConfig(initial_cash=500000)\n# 使用配置、数据源、起始日期、结束日期，以及刚才定义的交易策略创建策略对象\nstrategy = Strategy(akshare, start_date='20200131', end_date='20230228', config=my_config)\n# 添加执行策略，设置股票代码和要执行的函数\nstrategy.add_execution(fn=buy_with_stop_loss, symbols=[pb.param(name='stock_code')])\n# 执行回测，并打印出回测结果的度量值（四舍五入到小数点后四位）\nresult = strategy.backtest()\nprint(result.metrics_df.round(4))\n```\n\n```shell\nLoading bar data...\nLoaded bar data: 0:00:00\nBacktesting: 2020-01-31 00:00:00 to 2023-02-28 00:00:00\nLoading bar data...\nLoaded bar data: 0:00:00\nTest split: 2020-02-03 00:00:00 to 2023-02-28 00:00:00\n100% (748 of 748) |######################| Elapsed Time: 0:00:00 Time:  0:00:00\nFinished backtest: 0:00:03\n                      name        value\n0              trade_count     373.0000\n1     initial_market_value  500000.0000\n2         end_market_value  467328.0900\n3                total_pnl  -33322.7800\n4           unrealized_pnl     650.8700\n5         total_return_pct      -6.6646\n6             total_profit  530528.5100\n7               total_loss -563851.2900\n8               total_fees       0.0000\n9             max_drawdown -113004.2700\n10        max_drawdown_pct     -20.2704\n11                win_rate      45.9215\n12               loss_rate      54.0785\n13          winning_trades     152.0000\n14           losing_trades     179.0000\n15                 avg_pnl     -89.3372\n16          avg_return_pct      -0.0160\n17          avg_trade_bars       1.0000\n18              avg_profit    3490.3191\n19          avg_profit_pct       0.6958\n20  avg_winning_trade_bars       1.0000\n21                avg_loss   -3150.0072\n22            avg_loss_pct      -0.6241\n23   avg_losing_trade_bars       1.0000\n24             largest_win   31157.9400\n25         largest_win_pct       5.9200\n26        largest_win_bars       1.0000\n27            largest_loss  -12682.6000\n28        largest_loss_pct      -2.3100\n29       largest_loss_bars       1.0000\n30                max_wins       8.0000\n31              max_losses       7.0000\n32                  sharpe      -0.0132\n33                 sortino      -0.0231\n34           profit_factor       0.9638\n35             ulcer_index       1.7639\n36                     upi      -0.0039\n37               equity_r2       0.5876\n38               std_error   27448.1177\n```\n\n### Backtrader 介绍\n\n[Backtrader](https://www.backtrader.com) 是基于 Python 编程语言的主要用于量化投资开源回测和交易的框架，可以用于多种资产的回测。\n目前，[Backtrader](https://www.backtrader.com) 可以用于实现股票、期货、期权、外汇、加密货币等资产的回测，同时该开源框架也有强大的第三方社区支持，目前已经实现了\n基于 IB、Oanda、VC、CCXT、MT5 等接口量化交易，随着该框架的流行，后期会有更多的小伙伴提供更多的第三方模块，学习和使用该框架是一个不错的选择！\n\n#### Backtrader 下载和安装\n\n[Backtrader](https://www.backtrader.com) 的下载和安装都比较简单，尤其是在配置好 [AKShare](https://github.com/akfamily/akshare) 的\n基础上，我们只需要 `pip install backtrader` 就可以实现一键安装。如果需要了解 [AKShare](https://github.com/akfamily/akshare) 的\n环境配置，请参考 [AKShare 环境配置](https://akshare.akfamily.xyz/anaconda.html) 来设置本地环境。想要通过源码来安装的小伙伴，可以访问 [Backtrader 的 GitHub 地址](https://github.com/mementum/backtrader) 来下\n载安装，由于源码安装比较繁琐，建议直接通过 `pip` 或 `conda` 来安装和使用。需要注意的是如果要输出图形，请安装 `pip install matplotlib==3.2.2`\n\n### Backtrader 系列教程\n\n1. [Backtrader-系列教程-01-介绍](https://zhuanlan.zhihu.com/p/418247765)\n2. [Backtrader-系列教程-02-环境配置](https://zhuanlan.zhihu.com/p/418255493)\n\n### Backtrader 策略教程\n\n#### 基本策略\n\n##### 代码\n\n```python\nfrom datetime import datetime\n\nimport backtrader as bt  # 升级到最新版\nimport matplotlib.pyplot as plt  # 由于 Backtrader 的问题，此处要求 pip install matplotlib==3.2.2\nimport akshare as ak  # 升级到最新版\nimport pandas as pd\n\nplt.rcParams[\"font.sans-serif\"] = [\"SimHei\"]\nplt.rcParams[\"axes.unicode_minus\"] = False\n\n# 利用 AKShare 获取股票的后复权数据，这里只获取前 7 列\nstock_hfq_df = ak.stock_zh_a_hist(symbol=\"000001\", adjust=\"hfq\").iloc[:, :7]\n# 删除 `股票代码` 列\ndel stock_hfq_df['股票代码']\n# 处理字段命名，以符合 Backtrader 的要求\nstock_hfq_df.columns = [\n    'date',\n    'open',\n    'close',\n    'high',\n    'low',\n    'volume',\n]\n# 把 date 作为日期索引，以符合 Backtrader 的要求\nstock_hfq_df.index = pd.to_datetime(stock_hfq_df['date'])\n\n\nclass MyStrategy(bt.Strategy):\n    \"\"\"\n    主策略程序\n    \"\"\"\n    params = ((\"maperiod\", 20),)  # 全局设定交易策略的参数\n\n    def __init__(self):\n        \"\"\"\n        初始化函数\n        \"\"\"\n        self.data_close = self.datas[0].close  # 指定价格序列\n        # 初始化交易指令、买卖价格和手续费\n        self.order = None\n        self.buy_price = None\n        self.buy_comm = None\n        # 添加移动均线指标\n        self.sma = bt.indicators.SimpleMovingAverage(\n            self.datas[0], period=self.params.maperiod\n        )\n\n    def next(self):\n        \"\"\"\n        执行逻辑\n        \"\"\"\n        if self.order:  # 检查是否有指令等待执行,\n            return\n        # 检查是否持仓\n        if not self.position:  # 没有持仓\n            if self.data_close[0] > self.sma[0]:  # 执行买入条件判断：收盘价格上涨突破20日均线\n                self.order = self.buy(size=100)  # 执行买入\n        else:\n            if self.data_close[0] < self.sma[0]:  # 执行卖出条件判断：收盘价格跌破20日均线\n                self.order = self.sell(size=100)  # 执行卖出\n\n\ncerebro = bt.Cerebro()  # 初始化回测系统\nstart_date = datetime(1991, 4, 3)  # 回测开始时间\nend_date = datetime(2020, 6, 16)  # 回测结束时间\ndata = bt.feeds.PandasData(dataname=stock_hfq_df, fromdate=start_date, todate=end_date)  # 加载数据\ncerebro.adddata(data)  # 将数据传入回测系统\ncerebro.addstrategy(MyStrategy)  # 将交易策略加载到回测系统中\nstart_cash = 1000000\ncerebro.broker.setcash(start_cash)  # 设置初始资本为 100000\ncerebro.broker.setcommission(commission=0.002)  # 设置交易手续费为 0.2%\ncerebro.run()  # 运行回测系统\n\nport_value = cerebro.broker.getvalue()  # 获取回测结束后的总资金\npnl = port_value - start_cash  # 盈亏统计\n\nprint(f\"初始资金: {start_cash}\\n回测期间：{start_date.strftime('%Y%m%d')}:{end_date.strftime('%Y%m%d')}\")\nprint(f\"总资金: {round(port_value, 2)}\")\nprint(f\"净收益: {round(pnl, 2)}\")\n\ncerebro.plot(style='candlestick')  # 画图\n```\n\n##### 结果\n\n```\n初始资金: 1000000\n回测期间：20000101:20200421\n总资金: 1010238.65\n净收益: 10238.65\n```\n\n##### 可视化\n\n![](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/strategy/Figure_0.png)\n\n#### 参数优化\n\n##### 代码\n\n```python\nfrom datetime import datetime\n\nimport akshare as ak\nimport backtrader as bt\nimport matplotlib.pyplot as plt  # 由于 Backtrader 的问题，此处要求 pip install matplotlib==3.2.2\nimport pandas as pd\n\nplt.rcParams[\"font.sans-serif\"] = [\"SimHei\"]  # 设置画图时的中文显示\nplt.rcParams[\"axes.unicode_minus\"] = False  # 设置画图时的负号显示\n\n\nclass MyStrategy(bt.Strategy):\n    \"\"\"\n    主策略程序\n    \"\"\"\n    params = ((\"maperiod\", 20),\n              ('printlog', False),)  # 全局设定交易策略的参数, maperiod是 MA 均值的长度\n\n    def __init__(self):\n        \"\"\"\n        初始化函数\n        \"\"\"\n        self.data_close = self.datas[0].close  # 指定价格序列\n        # 初始化交易指令、买卖价格和手续费\n        self.order = None\n        self.buy_price = None\n        self.buy_comm = None\n        # 添加移动均线指标\n        self.sma = bt.indicators.SimpleMovingAverage(\n            self.datas[0], period=self.params.maperiod\n        )\n\n    def next(self):\n        \"\"\"\n        主逻辑\n        \"\"\"\n\n        # self.log(f'收盘价, {data_close[0]}')  # 记录收盘价\n        if self.order:  # 检查是否有指令等待执行,\n            return\n        # 检查是否持仓\n        if not self.position:  # 没有持仓\n            # 执行买入条件判断：收盘价格上涨突破15日均线\n            if self.data_close[0] > self.sma[0]:\n                self.log(\"BUY CREATE, %.2f\" % self.data_close[0])\n                # 执行买入\n                self.order = self.buy()\n        else:\n            # 执行卖出条件判断：收盘价格跌破15日均线\n            if self.data_close[0] < self.sma[0]:\n                self.log(\"SELL CREATE, %.2f\" % self.data_close[0])\n                # 执行卖出\n                self.order = self.sell()\n\n    def log(self, txt, dt=None, do_print=False):\n        \"\"\"\n        Logging function fot this strategy\n        \"\"\"\n        if self.params.printlog or do_print:\n            dt = dt or self.datas[0].datetime.date(0)\n            print('%s, %s' % (dt.isoformat(), txt))\n\n    def notify_order(self, order):\n        \"\"\"\n        记录交易执行情况\n        \"\"\"\n        # 如果 order 为 submitted/accepted,返回空\n        if order.status in [order.Submitted, order.Accepted]:\n            return\n        # 如果order为buy/sell executed,报告价格结果\n        if order.status in [order.Completed]:\n            if order.isbuy():\n                self.log(\n                    f\"买入:\\n价格:{order.executed.price},\\\n                成本:{order.executed.value},\\\n                手续费:{order.executed.comm}\"\n                )\n                self.buyprice = order.executed.price\n                self.buycomm = order.executed.comm\n            else:\n                self.log(\n                    f\"卖出:\\n价格：{order.executed.price},\\\n                成本: {order.executed.value},\\\n                手续费{order.executed.comm}\"\n                )\n            self.bar_executed = len(self)\n\n            # 如果指令取消/交易失败, 报告结果\n        elif order.status in [order.Canceled, order.Margin, order.Rejected]:\n            self.log(\"交易失败\")\n        self.order = None\n\n    def notify_trade(self, trade):\n        \"\"\"\n        记录交易收益情况\n        \"\"\"\n        if not trade.isclosed:\n            return\n        self.log(f\"策略收益：\\n毛收益 {trade.pnl:.2f}, 净收益 {trade.pnlcomm:.2f}\")\n\n    def stop(self):\n        \"\"\"\n        回测结束后输出结果\n        \"\"\"\n        self.log(\"(MA均线： %2d日) 期末总资金 %.2f\" % (self.params.maperiod, self.broker.getvalue()), do_print=True)\n\n\ndef main(code=\"600070\", start_cash=1000000, stake=100, commission_fee=0.001):\n    cerebro = bt.Cerebro()  # 创建主控制器\n    cerebro.optstrategy(MyStrategy, maperiod=range(3, 31))  # 导入策略参数寻优\n    # 利用 AKShare 获取股票的后复权数据，这里只获取前 7 列\n    stock_hfq_df = ak.stock_zh_a_hist(symbol=code, adjust=\"hfq\", start_date='20000101', end_date='20210617').iloc[:, :7]\n    # 删除 `股票代码` 列\n    del stock_hfq_df['股票代码']\n    # 处理字段命名，以符合 Backtrader 的要求\n    stock_hfq_df.columns = [\n        'date',\n        'open',\n        'close',\n        'high',\n        'low',\n        'volume',\n    ]\n    # 把 date 作为日期索引，以符合 Backtrader 的要求\n    stock_hfq_df.index = pd.to_datetime(stock_hfq_df['date'])\n    start_date = datetime(1991, 4, 3)  # 回测开始时间\n    end_date = datetime(2021, 6, 16)  # 回测结束时间\n    data = bt.feeds.PandasData(dataname=stock_hfq_df, fromdate=start_date, todate=end_date)  # 规范化数据格式\n    cerebro.adddata(data)  # 将数据加载至回测系统\n    cerebro.broker.setcash(start_cash)  # broker设置资金\n    cerebro.broker.setcommission(commission=commission_fee)  # broker手续费\n    cerebro.addsizer(bt.sizers.FixedSize, stake=stake)  # 设置买入数量\n    print(\"期初总资金: %.2f\" % cerebro.broker.getvalue())\n    cerebro.run(maxcpus=1)  # 用单核 CPU 做优化\n    print(\"期末总资金: %.2f\" % cerebro.broker.getvalue())\n\n\nif __name__ == '__main__':\n    main(code=\"600070\", start_cash=1000000, stake=100, commission_fee=0.001)\n```\n\n##### 结果\n\n```\n期初总资金: 1000000.00\n2020-06-12, (MA均线：  3日) 期末总资金 1004105.69\n2020-06-12, (MA均线：  4日) 期末总资金 1002384.49\n2020-06-12, (MA均线：  5日) 期末总资金 1002063.96\n2020-06-12, (MA均线：  6日) 期末总资金 1002113.63\n2020-06-12, (MA均线：  7日) 期末总资金 1001715.32\n2020-06-12, (MA均线：  8日) 期末总资金 999702.60\n2020-06-12, (MA均线：  9日) 期末总资金 1001658.65\n2020-06-12, (MA均线： 10日) 期末总资金 999698.63\n2020-06-12, (MA均线： 11日) 期末总资金 1003370.08\n2020-06-12, (MA均线： 12日) 期末总资金 1002183.37\n2020-06-12, (MA均线： 13日) 期末总资金 1006154.29\n2020-06-12, (MA均线： 14日) 期末总资金 1007900.55\n2020-06-12, (MA均线： 15日) 期末总资金 1008421.63\n2020-06-12, (MA均线： 16日) 期末总资金 1008708.77\n2020-06-12, (MA均线： 17日) 期末总资金 1008734.88\n2020-06-12, (MA均线： 18日) 期末总资金 1010371.15\n2020-06-12, (MA均线： 19日) 期末总资金 1010186.34\n2020-06-12, (MA均线： 20日) 期末总资金 1010201.81\n2020-06-12, (MA均线： 21日) 期末总资金 1010782.44\n2020-06-12, (MA均线： 22日) 期末总资金 1011271.23\n2020-06-12, (MA均线： 23日) 期末总资金 1011711.92\n2020-06-12, (MA均线： 24日) 期末总资金 1012475.96\n2020-06-12, (MA均线： 25日) 期末总资金 1010726.64\n2020-06-12, (MA均线： 26日) 期末总资金 1012502.74\n2020-06-12, (MA均线： 27日) 期末总资金 1011219.53\n2020-06-12, (MA均线： 28日) 期末总资金 1013569.11\n2020-06-12, (MA均线： 29日) 期末总资金 1014176.30\n2020-06-12, (MA均线： 30日) 期末总资金 1014076.32\n期末总资金: 1014076.32\n```\n"
  },
  {
    "path": "docs/dependency.md",
    "content": "## [AKShare](https://github.com/akfamily/akshare) 依赖说明\n\n### Python 依赖\n\n1. [AKShare](https://github.com/akfamily/akshare) 文档的依赖说明部分主要是为了对 [AKShare](https://github.com/akfamily/akshare) 库的所有依赖库做一个描述，\n方便小伙伴在对 [AKShare](https://github.com/akfamily/akshare) 进行二次封装进行参考；\n2. 提供选择该库函数的部分原因说明；\n3. 所有的依赖名称都跟 PyPI 提供的库名称统一；\n4. 打包的时候注意 mini-racer 库如报错，请重新编译。\n\n#### mini-racer\n\n1. 版本 >=0.12.4\n2. 推荐使用最新版\n3. [PyPI 地址](https://pypi.org/project/mini-racer/)\n4. [GitHub 地址](https://github.com/bpcreech/PyMiniRacer)\n5. [文档地址](https://blog.sqreen.com/embedding-javascript-into-python/)\n6. 选用原因如下\n    1. 由于 [PyExecJS](https://pypi.org/project/PyExecJS/) 在 20180118 推出最后一个版本后，\n       主要的开发者不再对该库进行升级维护，导致部分问题无法通过升级该库来修复，\n       该库的 [GitHub 地址](https://github.com/doloopwhile/PyExecJS) 可以访问如下地址，所以没有使用该库;\n    2. [Js2Py](https://pypi.org/project/Js2Py/) 是目前比较使用量较大和维护较好的库，其 [GitHub 地址](https://github.com/PiotrDabkowski/Js2Py) 但是考虑到在测试中，\n       对部分 Javascript 代码的运行不稳定，所以没有使用该库。\n\n#### pandas\n\n1. 版本 >=0.25.0\n2. 推荐使用最新版\n3. [PYPI 地址](https://pypi.org/project/pandas/)\n4. [GitHub 地址](https://github.com/pandas-dev/pandas/)\n5. [文档地址](https://pandas.pydata.org/)\n6. 选用原因如下\n    1. 该库主要用于采集后的数据清洗，此处建议升级到最新版，[AKShare](https://github.com/akfamily/akshare/) 会优先支持最新的版本；\n    2. 默认会安装 [NumPy](https://numpy.org/) 依赖。\n"
  },
  {
    "path": "docs/deploy_http.md",
    "content": "# [AKShare](https://github.com/akfamily/akshare) HTTP 部署\n\n## 说明\n\nAKShare HTTP 版本的部署主要依赖 AKTools、AKShare、FastAPI、Uvicorn、Typer 等开源 Python 库，部署的核心程序在 AKTools 中。\n非常感谢给 [AKTools 项目](https://github.com/akfamily/aktools) 点 Star，您的支持是我们持续开发最大的动力！\n\n## 快速启动\n\n### 安装库\n\n```shell\npip install aktools\n```\n\n### 运行库\n\n```shell\npython -m aktools\n```\n\n## 版本说明\n\n1. 仅体验 HTTP API 功能则只需要安装：`pip install aktools==0.0.68` 版本；\n2. 体验完整功能请安装最新版，支持用于认证、权限、可视化页面等更多功能。\n\n## 更多详情\n\n[参见 AKTools 项目文档](https://aktools.akfamily.xyz/)\n"
  },
  {
    "path": "docs/index.rst",
    "content": ".. AKShare documentation master file, created by\n   sphinx-quickstart on Fri Oct 11 00:10:59 2019.\n   You can adapt this file completely to your liking, but it should at least\n   contain the root `toctree` directive.\n\n欢迎访问 AKShare 在线文档！\n===========================================\n\n.. note::\n\n   推荐高性能量化投研框架 AKQuant，欢迎使用：https://github.com/akfamily/akquant\n\n   推荐关注微信公众号【数据科学实战】获取更多财经数据与量化投研知识\n\n.. image:: https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/readme/qrcode/ds.png\n   :width: 400px\n   :align: center\n   :alt: WeChat QR code\n\n.. toctree::\n   :maxdepth: 2\n   :glob:\n   :caption: Table of contents:\n\n   introduction\n   installation\n   data/index\n   indicator\n   data_tips\n   trade\n   answer\n   tutorial\n   articles\n   anaconda\n   platform\n   demo\n   changelog\n   contributing\n   dependency\n   deploy_http\n   akdocker/akdocker\n   special\n"
  },
  {
    "path": "docs/indicator.md",
    "content": "# [AKShare](https://github.com/akfamily/akshare) 指标计算\n\n## 已实现波动率指标\n\n### YZ 已实现波动率\n\n接口: volatility_yz_rv\n\n目标地址: https://github.com/hugogobato/Yang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python\n\n描述: 波动率-已实现波动率-Yang-Zhang已实现波动率\n\n限量: 单次返回日频率的已实现波动率数据\n\n输入参数\n\n| 名称   | 类型               | 描述                                    |\n|------|------------------|---------------------------------------|\n| data | pandas.DataFrame | 包含日期和 OHLC(开高低收) 价格的 pandas.DataFrame |\n\n输出参数\n\n| 名称   | 类型      | 描述  |\n|------|---------|-----|\n| date | object  | -   |\n| rv   | float64 | -   |\n\n接口示例\n\n```python\nimport akshare as ak\n\nstock_df = ak.rv_from_stock_zh_a_hist_min_em(\n    symbol=\"000001\",\n    start_date=\"2021-10-20 09:30:00\",\n    end_date=\"2024-11-01 15:00:00\",\n    period=\"5\",\n    adjust=\"\"\n)\nvolatility_yz_rv_df = ak.volatility_yz_rv(data=stock_df)\nprint(volatility_yz_rv_df)\n```\n\n数据示例\n\n```\n          date        rv\n0   2024-09-10  0.001955\n1   2024-09-11  0.002207\n2   2024-09-12  0.002113\n3   2024-09-13  0.002216\n4   2024-09-18  0.002039\n5   2024-09-19  0.002631\n6   2024-09-20  0.002043\n7   2024-09-23  0.002116\n8   2024-09-24  0.002374\n9   2024-09-25  0.003624\n10  2024-09-26  0.003392\n11  2024-09-27  0.005944\n12  2024-09-30  0.008488\n13  2024-10-08  0.011529\n14  2024-10-09  0.008031\n15  2024-10-10  0.006964\n16  2024-10-11  0.004970\n17  2024-10-14  0.004435\n18  2024-10-15  0.003706\n19  2024-10-16  0.004293\n20  2024-10-17  0.003534\n21  2024-10-18  0.004322\n22  2024-10-21  0.004417\n23  2024-10-22  0.002922\n24  2024-10-23  0.002124\n25  2024-10-24  0.001814\n26  2024-10-25  0.001605\n27  2024-10-28  0.002125\n28  2024-10-29  0.002045\n29  2024-10-30  0.002428\n30  2024-10-31  0.002718\n31  2024-11-01  0.002932\n```\n"
  },
  {
    "path": "docs/installation.md",
    "content": "# [AKShare](https://github.com/akfamily/akshare) 安装指导\n\n## 重要提示\n\n1. 目前 [AKShare](https://github.com/akfamily/akshare) 仅支持 64 位版本的操作系统安装和使用;\n2. 目前 [AKShare](https://github.com/akfamily/akshare) 仅支持 [Python](https://www.python.org/) 3.9(64 位) 及以上版本, \n3. 这里推荐 [Python](https://www.python.org/) 3.11.x(64 位) 版本;\n3. [AKShare](https://github.com/akfamily/akshare) 推荐安装最新版本的 [Anaconda (64 位)](https://www.anaconda.com/), 可以解决大部分环境配置问题;\n4. 对于熟悉容器技术的小伙伴, 可以安装 Docker 使用, 指导教程如下: [AKShare Docker 部署](https://akshare.akfamily.xyz/akdocker/akdocker.html).\n\n## 安装 [AKShare](https://github.com/akfamily/akshare)\n\n### 通用安装\n\n```\npip install akshare --upgrade\n```\n\n注意：程序运行时，文件名、文件夹名不能是：akshare\n\n### 国内安装-Python\n\n```\npip install akshare --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple\n```\n\n### 国内安装-Anaconda\n\n```\npip install akshare --upgrade --user -i https://pypi.tuna.tsinghua.edu.cn/simple\n```\n\n## 升级 [AKShare](https://github.com/akfamily/akshare)\n\nP.S. **由于目前版本更新迭代频繁, 请在使用 [AKShare](https://github.com/akfamily/akshare) 前先升级, 命令如下所示**\n\n```\npip install akshare --upgrade -i https://pypi.org/simple\n```\n\n## M 系列芯片支持\n\n1. AKShare 目前已经默认适合苹果 M 系列芯片，直接通过 `pip install akshare --upgrade` 即可使用\n2. 如果需要编译，请参考该文章：[Building V8 on an M1 MacBook](https://joyeecheung.github.io/blog/2021/08/27/binding-v8-on-an-m1-macbook/)\n\n## 树莓派支持\n\n目前 AKShare 已支持在树莓派 4B 上安装和使用，具体安装方法如下：\n\n1. 安装 [Raspberry Pi OS (64-bit)](https://www.raspberrypi.com/software/operating-systems/) 操作系统，目前支持树莓派于 20231010 发布的 64 位版本\n2. 通过 `sudo apt-get install python3-venv` 安装虚拟环境支持\n3. 通过 `python3 -m venv myenv` 创建名为 `myenv` 的虚拟环境\n4. 通过 `source myenv/bin/activate` 来激活创建好的虚拟环境\n5. 通过 `pip install akshare --upgrade` 来安装和升级 AKShare 到最新版本\n\n## R 语言调用支持\n\n**推荐使用 [AKTools 项目](https://github.com/akfamily/aktools) 来部署 AKShare 的 HTTP API 使用，运行速度更快，更稳定，兼容各种编程语言，详情参考 [AKTools 文档](https://aktools.readthedocs.io/)**\n\n### 安装 Anaconda\n\n[下载 Windows 64 位 Python 3.9 的 Anaconda](https://repo.anaconda.com/archive/Anaconda3-2020.07-Windows-x86_64.exe)\n\n[安装教程参见 AKShare 文档的环境配置专栏](https://akshare.akfamily.xyz/anaconda.html)\n\n### 安装 R 语言\n\n[下载 R](https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/)\n\n[下载 RStudio](https://download1.rstudio.org/desktop/windows/RStudio-1.3.959.exe)\n\n先安装 R，再安装 RStudio，选择默认步骤安装即可。\n\n### 升级 R 语言到最新版本\n\n#### Windows\n\n```\ninstall.packages('installr')\nlibrary(installr)\nupdateR()\n```\n\n#### Mac\n\n从 [CRAN website](https://cran.r-project.org/) 网站下载和安装最新的版本，覆盖升级即可。\n\n### 在 R 语言中安装相应的包\n\n[Reticulate](https://rstudio.github.io/reticulate/)\n\n```\ninstall.packages(\"reticulate\")\n```\n\n在安装完成后通过运行\n\n```\nlibrary(reticulate)\nuse_python(\"/usr/local/bin/python\")  # 默认使用本地的 Python, 如果需要使用虚拟环境的 Pyhton, 请参考 reticulate 的提示\n```\n\n调用本地的 Python 程序，其中 usr 需要替换为本地计算机的用户名。\n\n最后展示一段演示代码，此代码在 R 语言中通过 reticulate 包来调用 [AKShare](https://github.com/akfamily/akshare) 获取数据：\n\n```\nlibrary(reticulate)  # 导入 reticulate 包\nuse_python(\"/king/local/bin/python\")  # 其中的 king 为本地计算机用户名\n# use_condaenv(condaenv=\"ak_test\", required = TRUE)  # 也可以使用 conda 创建的虚拟环境，其中的 ak_test 为虚拟环境名称\nak <- import(\"akshare\")  # 类似于 import akshare as ak\nstock_df <- ak$stock_zh_a_hist()  # 类似于 ak.stock_zh_a_hist()\nhead(stock_df)  # 查看数据\n```\n\n```\n        日期  开盘   收盘  最高   最低     成交量 成交额  振幅  涨跌幅 涨跌额 换手率\n1 1991-04-03 49.00 49.00 49.00 49.00      1   5000    0  22.50   9.00  0\n2 1991-04-04 48.76 48.76 48.76 48.76      3  15000    0  -0.49  -0.24  0\n3 1991-04-05 48.52 48.52 48.52 48.52      2  10000    0  -0.49  -0.24  0\n4 1991-04-06 48.28 48.28 48.28 48.28      7  34000    0  -0.49  -0.24  0\n5 1991-04-08 48.04 48.04 48.04 48.04      2  10000    0  -0.50  -0.24  0\n6 1991-04-09 47.80 47.80 47.80 47.80      4  19000    0  -0.50  -0.24  0\n```\n\n## MATLAB 调用支持\n\n**推荐使用 [AKTools 项目](https://github.com/akfamily/aktools) 来部署 AKShare 的 HTTP API 使用，运行速度更快，更稳定，兼容各种编程语言，详情参考 [AKTools 文档](https://aktools.readthedocs.io/)**\n\n### 安装 Anaconda\n\n[下载 Windows 平台带 64 位 Python 的 Anaconda](https://repo.anaconda.com/archive/)，其需要符合\n[Matlab 各版本对 Python 的支持](https://www.mathworks.com/support/requirements/python-compatibility.html?s_tid=srchtitle_site_search_1_python%20compatibility)\n，比如 `Matlab R2023b` 目前支持 `Python` 的 `3.9, 3.10, 3.11` 版本。\n\n[Anaconda 安装教程参见 AKShare 文档的环境配置专栏](https://akshare.akfamily.xyz/anaconda.html)\n\n### 安装 MATLAB\n\n通过 [下载 64 位 MATLAB R2023b](https://ww2.mathworks.cn/downloads/message/error_page/unlicensed?release=R2023b) 页面\n来登录后下载激活。\n\n通过官方安装文档 [安装 64 位 MATLAB](https://ww2.mathworks.cn/help/install/ug/install-products-on-client-machines.html) 来\n进行安装配置。\n\n### 配置环境\n\n1. Matlab 官方文档：[配置您的系统使用 Python](https://ww2.mathworks.cn/help/matlab/matlab_external/install-supported-python-implementation.html)\n2. 帮助社区解答：[Python virtual environments with MATLAB](https://www.mathworks.com/support/search.html/answers/1750425-python-virtual-environments-with-python-interface.html?fq%5B%5D=asset_type_name:answer&page=1)\n\n如果使用虚拟环境，则 `pyenv(Version=\"C:\\Users\\albert\\.conda\\envs\\matlab\\python.exe\");` 即可激活相关环境，\n此处 `C:\\Users\\albert\\.conda\\envs\\matlab\\python.exe` 为本地虚拟环境的路径。\n\n#### 测试环境配置\n\n在 MATLAB 命令行窗口输入：\n\n```\npyenv\n```\n\n如返回：\n\n```\nans =\n\n  PythonEnvironment - 属性:\n\n          Version: \"3.10\"\n       Executable: \"C:\\Users\\albert\\.conda\\envs\\matlab\\python.EXE\"\n          Library: \"C:\\Users\\albert\\.conda\\envs\\matlab\\python310.dll\"\n             Home: \"C:\\Users\\albert\\.conda\\envs\\matlab\"\n           Status: NotLoaded\n    ExecutionMode: InProcess\n```\n\n则表示可以正常使用 `C:\\Users\\albert\\.conda\\envs\\matlab\\python` 虚拟环境中的 Python，\n同时确保在该环境中已经安装最新版的 AKShare（可以在本地 conda 中名为 `matlab` 的虚拟环境中查看）。\n\n#### 测试调用 AKShare 接口\n\n在 MATLAB 命令行窗口输入：\n\n```\npy.akshare.stock_zh_a_hist\n```\n\n如返回：\n\n```\nans =\n\n  Python DataFrame - 属性:\n\n          T: [1×1 py.pandas.core.frame.DataFrame]\n         at: [1×1 py.pandas.core.indexing._AtIndexer]\n      attrs: [1×1 py.dict]\n       axes: [1×2 py.list]\n    columns: [1×1 py.pandas.core.indexes.base.Index]\n     dtypes: [1×1 py.pandas.core.series.Series]\n      empty: 0\n      flags: [1×1 py.pandas.core.flags.Flags]\n        iat: [1×1 py.pandas.core.indexing._iAtIndexer]\n       iloc: [1×1 py.pandas.core.indexing._iLocIndexer]\n      index: [1×1 py.pandas.core.indexes.range.RangeIndex]\n        loc: [1×1 py.pandas.core.indexing._LocIndexer]\n       ndim: [1×1 py.int]\n      shape: [1×2 py.tuple]\n       size: [1×1 py.int]\n     values: [1×1 py.numpy.ndarray]\n\n                  日期     开盘     收盘     最高  ...    振幅    涨跌幅   涨跌额   换手率\n    0     1991-04-03  49.00  49.00  49.00  ...  0.00  22.50  9.00  0.00\n    1     1991-04-04  48.76  48.76  48.76  ...  0.00  -0.49 -0.24  0.00\n    2     1991-04-05  48.52  48.52  48.52  ...  0.00  -0.49 -0.24  0.00\n    3     1991-04-06  48.28  48.28  48.28  ...  0.00  -0.49 -0.24  0.00\n    4     1991-04-08  48.04  48.04  48.04  ...  0.00  -0.50 -0.24  0.00\n    ...          ...    ...    ...    ...  ...   ...    ...   ...   ...\n    7867  2024-03-11  10.38  10.47  10.47  ...  1.25   0.87  0.09  0.62\n    7868  2024-03-12  10.48  10.56  10.59  ...  1.72   0.86  0.09  0.85\n    7869  2024-03-13  10.53  10.33  10.55  ...  2.37  -2.18 -0.23  0.91\n    7870  2024-03-14  10.30  10.23  10.38  ...  1.74  -0.97 -0.10  0.73\n    7871  2024-03-15  10.55  10.60  10.75  ...  2.44   3.62  0.37  1.93\n\n    [7872 rows x 11 columns]\n```\n\n则表示可以在 MATLAB 中调用 AKShare 的数据接口。\n\n### 调用 AKShare\n\n#### 不带参数接口调用\n\n在 MATLAB 命令行窗口输入：\n\n```\npy.akshare.macro_cnbs\n```\n\n如返回：\n\n```\nans =\n\n  Python DataFrame - 属性:\n\n          T: [1×1 py.pandas.core.frame.DataFrame]\n         at: [1×1 py.pandas.core.indexing._AtIndexer]\n      attrs: [1×1 py.dict]\n       axes: [1×2 py.list]\n    columns: [1×1 py.pandas.core.indexes.base.Index]\n     dtypes: [1×1 py.pandas.core.series.Series]\n      empty: 0\n        iat: [1×1 py.pandas.core.indexing._iAtIndexer]\n       iloc: [1×1 py.pandas.core.indexing._iLocIndexer]\n      index: [1×1 py.pandas.core.indexes.range.RangeIndex]\n        loc: [1×1 py.pandas.core.indexing._LocIndexer]\n       ndim: [1×1 py.int]\n      shape: [1×2 py.tuple]\n       size: [1×1 py.numpy.int32]\n      style: [1×1 py.pandas.io.formats.style.Styler]\n     values: [1×1 py.numpy.ndarray]\n\n              年份       居民部门     非金融企业部门  ...      实体经济部门    金融部门资产方    金融部门负债方\n    0    1993-12   8.311222   91.658000  ...  107.791459   8.896441   7.128428\n    1    1994-12   7.808230   82.411703  ...   98.354271   9.808787   6.796868\n    2    1995-12   8.200000   81.000000  ...   97.900000  10.000000   7.000000\n    3    1996-03   8.400000   81.700000  ...   99.200000  10.200000   7.200000\n    4    1996-06   8.600000   82.100000  ...   99.700000  10.400000   7.400000\n    ..       ...        ...         ...  ...         ...        ...        ...\n    101  2020-09  61.700000  164.600000  ...  271.200000  55.800000  62.400000\n    102  2020-12  62.200000  162.300000  ...  270.100000  54.200000  62.700000\n    103  2021-03  62.100000  161.400000  ...  267.800000  52.800000  62.300000\n    104  2021-06  62.000000  158.800000  ...  265.400000  51.300000  61.700000\n    105  2021-09  62.100000  157.200000  ...  264.800000  49.200000  61.900000\n\n    [106 rows x 9 columns]\n```\n\n则表示可以在 MATLAB 中调用 AKShare 的不带参数的接口。\n\n#### 带参数接口调用\n\n在 MATLAB 命令行窗口输入：\n\n```\n% 注意其中的传参方式，从左到右，依次传递参数，形参（及其‘=’）都不需要，参数必须按顺序传递\npy.akshare.stock_zh_a_hist(\"000001\", \"daily\", \"20170301\", '20210907', \"\")\n```\n\n如返回：\n\n```\nans =\n\n  Python DataFrame - 属性:\n\n          T: [1×1 py.pandas.core.frame.DataFrame]\n         at: [1×1 py.pandas.core.indexing._AtIndexer]\n      attrs: [1×1 py.dict]\n       axes: [1×2 py.list]\n    columns: [1×1 py.pandas.core.indexes.base.Index]\n     dtypes: [1×1 py.pandas.core.series.Series]\n      empty: 0\n        iat: [1×1 py.pandas.core.indexing._iAtIndexer]\n       iloc: [1×1 py.pandas.core.indexing._iLocIndexer]\n      index: [1×1 py.pandas.core.indexes.range.RangeIndex]\n        loc: [1×1 py.pandas.core.indexing._LocIndexer]\n       ndim: [1×1 py.int]\n      shape: [1×2 py.tuple]\n       size: [1×1 py.numpy.int32]\n      style: [1×1 py.pandas.io.formats.style.Styler]\n     values: [1×1 py.numpy.ndarray]\n\n                  日期     开盘     收盘     最高  ...    振幅   涨跌幅   涨跌额   换手率\n    0     2017-03-01   9.49   9.49   9.55  ...  0.84  0.11  0.01  0.21\n    1     2017-03-02   9.51   9.43   9.54  ...  1.26 -0.63 -0.06  0.24\n    2     2017-03-03   9.41   9.40   9.43  ...  0.74 -0.32 -0.03  0.20\n    3     2017-03-06   9.40   9.45   9.46  ...  0.74  0.53  0.05  0.24\n    4     2017-03-07   9.44   9.45   9.46  ...  0.63  0.00  0.00  0.17\n    ...          ...    ...    ...    ...  ...   ...   ...   ...   ...\n    1100  2021-09-01  17.48  17.88  17.92  ...  5.11  0.45  0.08  1.19\n    1101  2021-09-02  18.00  18.40  18.78  ...  5.48  2.91  0.52  1.25\n    1102  2021-09-03  18.50  18.04  18.50  ...  4.35 -1.96 -0.36  0.72\n    1103  2021-09-06  17.93  18.45  18.60  ...  4.55  2.27  0.41  0.78\n    1104  2021-09-07  18.60  19.24  19.56  ...  6.56  4.28  0.79  0.84\n\n    [1105 rows x 11 columns]\n```\n\n则表示可以在 MATLAB 中调用 AKShare 的带参数的接口。\n\n### 转换数据格式\n\n#### 演示\n\n```\n% 导入 AKShare 库\nak = py.importlib.import_module('akshare');\n% 代用 AKShare 数据接口\ntemp_df = ak.stock_zh_a_hist();\n% 转化数据格式\ndf = py2matlab(temp_df);\n% 展示获取到本地的数据\ndisp(df)\n```\n\n## 安装报错解决方案\n\n### 1. 安装超时的错误\n\n1.大致报错如下, 出现关键词 **amt** :\n\n```\nTraceback (most recent call last):\nFile \"/home/xiaoduc/.pyenv/versions/3.7.3/lib/python3.7/site-packages/pip/_vendor/requests/packages/urllib3/response.py\", line 228, in _error_catcher\nyield\nFile \"/home/xiaoduc/.pyenv/versions/3.7.3/lib/python3.7/site-packages/pip/_vendor/requests/packages/urllib3/response.py\", line 310, in read\ndata = self._fp.read(amt)\nFile \"/home/xiaoduc/.pyenv/versions/3.7.3/lib/python3.7/site-packages/pip/_vendor/cachecontrol/filewrapper.py\", line 49, in read\ndata = self.__fp.read(amt)\n```\n\n2.解决方案如下:\n\n方法一\n\n```\npip --default-timeout=100 install -U akshare\n```\n\n方法二\n\n使用全局代理解决\n\n### 2. 拒绝访问错误\n\n1.大致报错如下, 出现关键词 **拒绝访问** :\n\n```\nCould not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/Users/mac/Anaconda/anaconda3/lib/python3.7/site-packages/cv2/__init__.py'\nConsider using the `--user` option or check the permissions.\n```\n\n2.解决方案如下:\n\n方法一\n\n```\npip install akshare --user\n```\n\n方法二\n\n使用管理员权限(右键单击选择管理员权限)打开 Anaconda Prompt 进行安装\n\n### 3. 提示其他的错误\n\n- 方法一: 确认并升级您已安装 64 位的 **Python 3.9** 及以上版本\n- 方法二: 使用 conda 的虚拟环境来安装, 详见 **[AKShare](https://github.com/akfamily/akshare) 环境配置** 板块的内容\n"
  },
  {
    "path": "docs/introduction.md",
    "content": "# [AKShare](https://github.com/akfamily/akshare) 项目概览\n\n本次发布 [AKTools](https://github.com/akfamily/aktools) 作为 AKShare 的 HTTP API 版本，突破 Python 语言的限制，欢迎各位小伙伴试用并提出更好的意见或建议！\n点击 [AKTools](https://github.com/akfamily/aktools) 查看使用指南。\n\n**风险提示**：[AKShare](https://github.com/akfamily/akshare) 开源财经数据接口库所采集的数据皆来自公开的数据源，不涉及任何个人隐私数据和非公开数据。\n同时本项目提供的数据接口及相关数据仅用于学术研究，任何个人、机构及团体使用本项目的数据接口及相关数据请注意商业风险。\n\n1. 本文档更新时间：**2026-04-02**；\n2. 如有 [AKShare](https://github.com/akfamily/akshare) 库、文档及数据的相关问题，请在 [AKShare Issues](https://github.com/akfamily/akshare/issues) 中提 Issues；\n\n## 引用\n\n如果您想在文章或者项目中引用 [AKShare](https://github.com/akfamily/akshare/)，请使用如下 **bibtex** 格式：\n\n```\n@misc{akshare2022,\n    author = {Albert King},\n    title = {AKShare},\n    year = {2022},\n    publisher = {GitHub},\n    journal = {GitHub repository},\n    howpublished = {\\url{https://github.com/akfamily/akshare}},\n}\n```\n\n## [AKShare](https://github.com/akfamily/akshare) 的介绍\n\n首先要特别感谢 [FuShare](https://github.com/LowinLi/fushare) 和 [TuShare](https://github.com/waditu/tushare) 在代码和项目开发上对本项目提供的借鉴和学习的机会!\n\n[AKShare](https://github.com/akfamily/akshare) 是基于 Python 的财经数据接口库，目的是实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据从数据采集、数据清洗到数据落地的一套工具，主要用于学术研究目的。\n\n[AKShare](https://github.com/akfamily/akshare) 的特点是获取的是相对权威的财经数据网站公布的原始数据，通过利用原始数据进行各数据源之间的交叉验证，进而再加工，从而得出科学的结论。\n\n**[AKShare](https://github.com/akfamily/akshare) 后续会基于学术论文和研究报告来添加更多数据接口和衍生指标，并提供相应的计算代码，敬请关注。**\n\n## [AKShare](https://github.com/akfamily/akshare) 的特色\n\n[AKShare](https://github.com/akfamily/akshare) 主要改进如下：\n\n1. 代码语法符合 [PEP8](https://peps.python.org/pep-0008/) 规范，数据接口的命名统一；\n2. 最佳支持 Python 3.12 及其以上版本；\n3. 提供最佳的文档支持，每个数据接口均提供详细的说明和示例，只需要复制粘贴就可以下载数据；\n4. 持续维护由于目标网页变化而导致的部分数据接口运行异常问题；\n5. 持续更新财经数据接口，同时优化源代码；\n6. 提供完善的接口文档，提高 [AKShare](https://github.com/akfamily/akshare) 的易用性；\n7. 对于非 Python 用户，提供 HTTP API 接口工具 [AKTools](https://aktools.akfamily.xyz/)。\n\n## [AKShare](https://github.com/akfamily/akshare) 的初衷\n\n[AKShare](https://github.com/akfamily/akshare) 主要是用于财经研究，解决在财经研究中数据获取的问题。目前的版本主要是基于 Python\n语言，通过调用相关的数据接口来获取数据到本地。原理上，就是在用户本地运行 Python\n代码，实时从网络采集数据到本地，便利与数据分析。由于网络数据采集需要维护的接口众多，且经常由于目标网站变换网页格式需要维护及更新相关接口，所以用户在使用本项目的过程中需要经常更新本项目到最新版本。同时也需要关注项目文档的更新，因为最新的使用方式和接口变更都会第一时间更新到文档中。\n"
  },
  {
    "path": "docs/platform.md",
    "content": "# [AKShare](https://github.com/akfamily/akshare) 量化专题\n\n## 开源平台\n\n- [AKQuant](https://github.com/akfamily/akquant)\n- [PyBroker](https://www.pybroker.com/)\n- [Backtrader](https://www.backtrader.com/)\n- [VN.PY](https://www.vnpy.com/)\n- [功夫量化](https://www.kungfu-trader.com/)\n\n## 网页端\n\n- [BigQuant](https://bigquant.com/)\n- [JoinQuant](https://www.joinquant.com/)\n- [MyQuant](https://www.myquant.cn/)\n- [Uqer](https://uqer.datayes.com/)\n- [RiceQuant](https://www.ricequant.com/welcome/)\n- [WindQuant](https://www.windquant.com/)\n\n## 量化策略\n\n- 双均线策略(期货)\n- alpha对冲(股票+期货)\n- 集合竞价选股(股票)\n- 多因子选股(股票)\n- 网格交易(期货)\n- 指数增强(股票)\n- 跨品种套利(期货)\n- 跨期套利(期货)\n- 日内回转交易(股票)\n- 做市商交易(期货)\n- 海龟交易法(期货)\n- 行业轮动(股票)\n- 机器学习(股票)\n"
  },
  {
    "path": "docs/requirements.txt",
    "content": "sphinx>=7.4.3\nsphinx_rtd_theme>=2.0.0\nreadthedocs-sphinx-search>=0.3.2\nsphinx-markdown-tables>=0.0.17\nsetuptools>=69.2.0\nrecommonmark>=0.7.1\nmarkdown>=3.6\n"
  },
  {
    "path": "docs/special.md",
    "content": "# [AKShare](https://github.com/akfamily/akshare) 特别说明\n\n## 致谢\n\n特别感谢 [FuShare](https://github.com/LowinLi/fushare), [TuShare](https://github.com/waditu/tushare) 和 [OpenData](https://github.com/PKUJohnson/OpenData) 项目提供借鉴学习的机会;\n\n感谢[东方财富网站](http://data.eastmoney.com)提供的数据;\n\n感谢[新浪财经网站](https://finance.sina.com.cn/)提供的数据;\n\n感谢[生意社网站](http://www.100ppi.com)提供的相关数据;\n\n感谢[奇货可查网站](https://qhkch.com)提供的相关数据;\n\n感谢[中国银行间市场交易商协会网站](http://www.nafmii.org.cn)提供的相关数据;\n\n感谢[99期货网站](http://www.99qh.com)提供的相关数据;\n\n感谢[中国外汇交易中心暨全国银行间同业拆借中心网站](http://www.chinamoney.com.cn)提供的相关数据;\n\n感谢[金十数据网站](https://www.jin10.com)提供的相关数据;\n\n感谢[和讯财经网站](http://www.hexun.com)提供的相关数据;\n\n感谢[新浪财经网站](https://finance.sina.com.cn)提供的相关数据;\n\n感谢[Oxford-Man Institute网站](https://realized.oxford-man.ox.ac.uk)提供的相关数据;\n\n感谢[DACHENG-XIU网站](https://dachxiu.chicagobooth.edu)提供的相关数据;\n\n感谢[上海证券交易所网站](http://www.sse.com.cn)提供的相关数据;\n\n感谢[深证证券交易所网站](http://www.szse.cn)提供的相关数据;\n\n感谢[中国金融期货交易所网站](http://www.cffex.com.cn)提供的相关数据;\n\n感谢[上海期货交易所网站](http://www.shfe.com.cn)提供的相关数据;\n\n感谢[大连商品交易所网站](http://www.dce.com.cn)提供的相关数据;\n\n感谢[郑州商品交易所网站](http://www.czce.com.cn)提供的相关数据;\n\n感谢[上海国际能源交易中心网站](http://www.ine.com.cn)提供的相关数据;\n\n感谢[timeanddate网站](https://www.timeanddate.com)提供的日出和日落数据;\n\n感谢[河北省空气质量预报信息发布系统网站](http://110.249.223.67)提供的河北省空气质量数据;\n\n感谢[南华期货网站](http://www.nanhua.net)提供南华期货-南华指数数据;\n\n感谢[Economic Policy Uncertainty网站](http://www.nanhua.net)提供经济政策不确定性(EPU)指数数据;\n\n感谢[申万指数](http://www.swsindex.com)提供的相关数据;\n\n感谢[真气网](https://www.zq12369.com)提供空气质量数据;\n\n感谢[财富网站](http://www.fortunechina.com)提供财富企业世界500强数据;\n\n感谢[中国证券投资基金业协会网站](http://gs.amac.org.cn)提供私募基金数据;\n\n感谢[Expatistan网站](https://www.expatistan.com)提供的世界各大城市生活成本数据;\n\n感谢[国家金融与发展实验室网站](http://www.nifd.cn)提供的宏观杠杆率;\n\n感谢[北京市碳排放权电子交易平台网站](https://www.bjets.com.cn)提供的碳排放行情数据;\n\n感谢[义乌小商品指数网站](http://www.ywindex.com)提供的相关数据;\n\n感谢[中国国家发展和改革委员会网站](http://jgjc.ndrc.gov.cn)提供的相关数据;\n\n感谢[思知网站](https://www.ownthink.com/)提供的相关数据;\n\n感谢[Currencyscoop 网站](https://currencyscoop.com/)提供的相关数据;\n\n感谢[新加坡交易所](https://www.sgx.com/zh-hans/research-education/derivatives)提供的相关数据;\n\n## 声明\n\n1. [AKShare](https://github.com/akfamily/akshare) 提供的数据接口和数据仅用于学术研究, 不可做任何商业用途;\n2. [AKShare](https://github.com/akfamily/akshare) 提供的数据仅供参考, 不构成任何投资建议;\n3. 任何基于 [AKShare](https://github.com/akfamily/akshare) 进行研究的投资者请注意数据风险;\n4. [AKShare](https://github.com/akfamily/akshare) 坚持提供开源财经数据, 未来或因不可抗拒之力可能会移除部分数据接口, 请注意此风险;\n5. 任何基于 [AKShare](https://github.com/akfamily/akshare) 的项目, 请遵循相关开源协议;\n"
  },
  {
    "path": "docs/trade.md",
    "content": "# [AKShare](https://github.com/akfamily/akshare) 实盘交易\n\n## 证券实盘\n\n### 股票量化交易服务\n\n提供股票、期权、两融等账户的实盘 API 接口对接，让量化模型不仅仅停留在一次次的回测中，真正做到让策略跑起来。\n\n专注于为股票、可转债、ETF 期权以及两融策略提供全面的量化服务；针对各种个性化的量化策略，提供高效的解决方案。\n\n为了满足不同的客户需求，我们还提供策略编写、个性化工具开发等定制服务，确保不同阶段的量化投资者都能得到有效的支持。\n\n当下由**上市证券**专业量化服务团队提供支持，微信：cmdtzz168\n\n![gj_wechat](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/ad/gj_wechat.png)\n\n一、多维度的专业量化服务\n\n1. 费用优惠：股票/ETF/可转债/港股通/北交所/两融等费率超优惠。\n2. 专业服务：团队专注量化领域十载，提供多种定制化服务和量化工具，积累了大量的成功案例。\n3. 高效服务：多对一，响应快，提供 7*12 小时服务。\n\n二、辅助量化工具的使用\n\n1. 数据库：AKShare\n2. 股票软件：通达信/大智慧/同花顺等\n3. 量化软件：QMT/PTRADE/聚宽/bigquant等\n\n三、更多个性化定制服务\n\n1. 【极速策略】如追涨停、盘前/盘中打板、尾盘强筹，根据具体需求，优化每个环节，给出极速解决方案，提高策略效率，快人一步。\n2. 【指标定制】将通达信/大智慧/同花顺等指标转化为可执行的量化策略，做到条件预警、展示买卖点等。\n3. 【量化工具定制】各种量化小插件随心定制，如自动止盈止损/自动仓位管理等。\n\n与**某AA级期货公司**量化服务团队携手开发对冲策略，股期联动，祝您一臂之力。\n\n在量化领域：专业、专心、专注。\n\n## 期货实盘\n\n### 期货量化交易服务\n\n什么是量化交易服务？\n\n以服务客户为核心的增值服务，服务包括量化咨询、量化软件指导、策略编写、软件定制、外接托管等服务，为客户量化交易之路保驾护航。\n目前我们发现**某AA级期货公司**在此服务上比较专业。![futures](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/ad/futures.jpg)\n\n有什么样的量化交易服务综合方案？\n\n一、量化咨询，维度提升\n\n1. 超优惠的政策：期货交易手续费的杀伤力非常大，手续费成本可能决定交易策略期望值是否为正；\n2. 超高效的服务：为客户实行一对一、二对一私享服务，及时解决客户问题；\n3. 超专业的咨询：宏源量化服务团队成员在期货领域经验丰富，可提供量化咨询服务，助力客户高效开发策略，少走弯路；\n\n二、软件指导，轻松上手\n\nAKShare 的金融数据能够给大家带来许多帮助，也可以结合其他量化交易软件进行实战应用，每个交易软件都有自己的特色功能，\n有了专业的指导，可以更高效的运用起来。\n\n三、编写策略，解放双手\n\n服务团队成员有交易经历丰富的私募基金交易员，能够高效的转化客户的主观交易策略，让客户实现程序化交易，解放双手。\n\n四、速度优化，快人一步\n\n![futures_process](https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/ad/futures_process.png)\n\n提供托管定制服务：通过专用网络、专用系统、专用席位、服务器托管等手段来保障高效、稳定的交易。\n\n专业的事找专业的人！\n"
  },
  {
    "path": "docs/tutorial.md",
    "content": "# [AKShare](https://github.com/akfamily/akshare/) 快速入门\n\n## 查看数据\n\n具体函数使用详情, 请查看 [AKShare 文档](https://akshare.akfamily.xyz/) 每个接口的示例代码\n\n[AKShare](https://github.com/akfamily/akshare/) 数据接口一览\n\n```\n # 交易所期货数据\n \"get_cffex_daily\",  # 中国金融期货交易所每日交易数据\n \"get_cffex_rank_table\",  # 中国金融期货交易所前20会员持仓数据明细\n \"get_czce_daily\",  # 郑州商品交易所每日交易数据\n \"get_rank_table_czce\",  # 郑州商品交易所前20会员持仓数据明细\n \"get_dce_daily\",  # 大连商品交易所每日交易数据\n \"get_gfex_daily\",  # 广州期货交易所每日交易数据\n \"get_ine_daily\",  # 上海国际能源交易中心每日交易数据\n \"futures_settlement_price_sgx\",  # 新加坡交易所期货品种每日交易数据\n \"get_dce_rank_table\",  # 大连商品交易所前20会员持仓数据明细\n \"get_futures_daily\",  # 中国金融期货交易所每日基差数据\n \"get_rank_sum\",  # 四个期货交易所前5, 10, 15, 20会员持仓排名数据\n \"get_rank_sum_daily\",  # 每日四个期货交易所前5, 10, 15, 20会员持仓排名数据\n \"futures_dce_position_rank\",  # 大连商品交易所前 20 会员持仓排名数据\n \"get_receipt\",  # 大宗商品注册仓单数据\n \"get_roll_yield\",  # 某一天某品种(主力和次主力)或固定两个合约的展期收益率\n \"get_roll_yield_bar\",  # 展期收益率\n \"get_shfe_daily\",  # 上海期货交易所每日交易数据\n \"get_shfe_rank_table\",  # 上海期货交易所前20会员持仓数据明细\n \"get_shfe_v_wap\",  # 上海期货交易所日成交均价数据\n \"futures_spot_price\",  # 具体交易日大宗商品现货价格及相应基差数据\n \"futures_spot_price_previous\",  # 具体交易日大宗商品现货价格及相应基差数据-该接口补充历史数据\n \"futures_spot_price_daily\"  # 一段交易日大宗商品现货价格及相应基差数据\n \"futures_warehouse_receipt_czce\"  # 郑州商品交易所-交易数据-仓单日报\n \"futures_shfe_warehouse_receipt\"  # 上海期货交易所-交易数据-仓单日报\n \"futures_warehouse_receipt_dce\"  # 大连商品交易所-交易数据-仓单日报\n \"futures_gfex_warehouse_receipt\"  # 广州期货交易所-行情数据-仓单日报\n \"futures_rule\"  # 国泰君安-交易日历\n # 奇货可查数据\n \"get_qhkc_index\"  # 奇货可查-指数-数值数据\n \"get_qhkc_index_profit_loss\"  # 奇货可查-指数-累计盈亏数据\n \"get_qhkc_index_trend\"  # 奇货可查-指数-大资金动向数据\n \"get_qhkc_fund_bs\"  # 奇货可查-资金-净持仓分布数据\n \"get_qhkc_fund_position\"  # 奇货可查-资金-总持仓分布数据\n \"get_qhkc_fund_position_change\"  # 奇货可查-资金-净持仓变化分布数据\n \"get_qhkc_tool_foreign\"  # 奇货可查-工具-外盘比价数据\n \"get_qhkc_tool_gdp\"  # 奇货可查-工具-各地区经济数据\n # 中国银行间市场交易商协会-非金融企业债务融资工具注册信息系统\n \"bond_debt_nafmii\"  # 中国银行间市场交易商协会-非金融企业债务融资工具注册信息系统\n # 交易所商品期权数据\n \"option_hist_dce\"  # 提供大连商品交易所商品期权数据\n \"option_hist_czce\"  # 提供郑州商品交易所商品期权数据\n \"option_hist_shfe\"  # 提供上海期货交易所商品期权数据\n \"option_hist_gfex\"  # 提供广州期货交易所商品期权数据\n \"option_vol_gfex\"  # 提供广州期货交易所-合约隐含波动率数据\n \"option_vol_shfe\"  # 提供上海期货交易所-合约隐含波动率数据\n \"option_hist_yearly_czce\"  # 郑州商品交易所-交易数据-历史行情下载-期权历史行情下载\n # 中国银行间市场债券行情数据\n \"get_bond_market_quote\"  # 债券市场行情-现券市场成交行情数据\n \"get_bond_market_trade\"  # 债券市场行情-现券市场做市报价数据\n # 外汇\n \"get_fx_spot_quote\"  # 人民币外汇即期报价数据\n \"get_fx_swap_quote\"  # 人民币外汇远掉报价数据\n \"get_fx_pair_quote\"  # 外币对即期报价数据\n # 宏观-欧洲\n \"macro_euro_interest_rate\"  # 欧洲央行决议报告\n # 宏观-主要机构\n \"macro_cons_gold\"  # 全球最大黄金ETF—SPDR Gold Trust持仓报告\n \"macro_cons_silver\"  # 全球最大白银ETF--iShares Silver Trust持仓报告\n \"macro_cons_opec_month\"  # 欧佩克报告\n # 期货-仓单有效期\n \"get_receipt_date\"  # 期货仓单有效期数据\n # 新浪财经-期货\n \"futures_zh_spot\"  # 国内期货实时行情数据\n \"futures_zh_realtime\"  # 国内期货实时行情数据(品种)\n \"futures_foreign_commodity_realtime\"  # 外盘期货实时行情数据\n \"futures_foreign_hist\"  # 外盘期货历史行情数据\n \"futures_foreign_detail\"  # 外盘期货合约详情\n \"futures_zh_minute_sina\"  # 内盘分时数据\n # 交易所金融期权数据\n \"get_finance_option\"  # 提供上海证券交易所期权数据\n # 加密货币行情\n \"crypto_js_spot\"  # 提供主流加密货币行情数据接口\n # 新浪财经-港股\n \"stock_hk_spot\"  # 港股的历史行情数据(包括前后复权因子)\n \"stock_hk_daily\"  # 港股的实时行情数据(也可以用于获得所有港股代码)\n # 东方财富\n \"stock_hk_spot_em\"  # 港股实时行情\n \"stock_hk_main_board_spot_em\"  # 港股主板实时行情\n # 新浪财经-美股\n \"get_us_stock_name\"  # 获得美股的所有股票代码\n \"stock_us_spot\"  # 美股行情报价\n \"stock_us_daily\"  # 美股的历史数据(包括前复权因子)\n # A+H股实时行情数据和历史行情数据\n \"stock_zh_ah_spot\"  #  A+H 股实时行情数据(延迟15分钟)\n \"stock_zh_ah_daily\"  #  A+H 股历史行情数据(日频)\n \"stock_zh_ah_name\"  #  A+H 股所有股票代码\n # A股实时行情数据和历史行情数据\n \"stock_zh_a_spot\"  # 新浪 A 股实时行情数据\n \"stock_zh_a_spot_em\"  # 东财 A 股实时行情数据\n \"stock_sh_a_spot_em\"  # 东财沪 A 股实时行情数据\n \"stock_sz_a_spot_em\"  # 东财深 A 股实时行情数据\n \"stock_bj_a_spot_em\"  # 东财京 A 股实时行情数据\n \"stock_new_a_spot_em\"  # 东财新股实时行情数据\n \"stock_kc_a_spot_em\"  # 东财科创板实时行情数据\n \"stock_zh_b_spot_em\"  # 东财 B 股实时行情数据\n \"stock_zh_a_daily\"  #  A 股历史行情数据(日频)\n \"stock_zh_a_minute\"  #  A 股分时历史行情数据(分钟)\n \"stock_zh_a_cdr_daily\"  #  A 股 CDR 历史行情数据(日频)\n # 科创板实时行情数据和历史行情数据\n \"stock_zh_kcb_spot\"  # 科创板实时行情数据\n \"stock_zh_kcb_daily\"  # 科创板历史行情数据(日频)\n # 银保监分局本级行政处罚数据\n \"bank_fjcf_table_detail\"  # 银保监分局本级行政处罚-信息公开表\n # 已实现波动率数据\n \"article_oman_rv\"  # O-MAN已实现波动率\n \"article_rlab_rv\"  # Risk-Lab已实现波动率\n # FF多因子模型数据\n \"ff_crr\"  # FF当前因子\n # 指数实时行情和历史行情\n \"stock_zh_index_daily\"  # 股票指数历史行情数据\n \"stock_zh_index_daily_tx\"  # 股票指数历史行情数据-腾讯\n \"stock_zh_index_daily_em\"  # 股票指数历史行情数据-东方财富\n \"stock_zh_index_spot_sina\"  # 股票指数实时行情数据-新浪\n \"stock_zh_index_spot_em\"  # 股票指数实时行情数据-东财\n # 股票分笔数据\n \"stock_zh_a_tick_tx_js\"  # A 股票分笔行情数据-腾讯-当日数据\n # 世界各地区日出和日落数据-日\n \"weather_daily\"  # 每日日出和日落数据\n # 世界各地区日出和日落数据-月\n \"weather_monthly\"  # 每月日出和日落数据\n # 河北空气质量数据(期货-钢铁)\n \"air_quality_hebei\"  # 河北空气质量数据\n # 经济政策不确定性(EPU)指数\n \"article_epu_index\"  # 主要国家和地区的经济政策不确定性(EPU)指数\n # 申万行业指数\n \"sw_index_third_info\"  # 申万三级信息\n \"sw_index_third_cons\"  # 申万三级信息成份\n # 空气质量\n \"air_quality_hist\"  # 空气质量历史数据\n \"air_quality_rank\"  # 空气质量排行\n \"air_quality_watch_point\"  # 空气质量观测点历史数据\n \"air_city_table\"  # 所有城市列表\n # 财富世界五百强公司\n \"fortune_rank\"  # 财富世界500强公司历年排名\n # 中国证券投资基金业协会-信息公示\n \"amac_member_info\" # 中国证券投资基金业协会-信息公示-会员信息-会员机构综合查询\n \"amac_person_fund_org_list\" # 中国证券投资基金业协会-信息公示-从业人员信息-基金从业人员资格注册信息\n \"amac_person_bond_org_list\" # 中国证券投资基金业协会-信息公示-从业人员信息-债券投资交易相关人员公示\n \"amac_manager_info\" # 中国证券投资基金业协会-信息公示-私募基金管理人公示-私募基金管理人综合查询\n \"amac_manager_classify_info\" # 中国证券投资基金业协会-信息公示-私募基金管理人公示-私募基金管理人分类公示\n \"amac_member_sub_info\" # 中国证券投资基金业协会-信息公示-私募基金管理人公示-证券公司私募基金子公司管理人信息公示\n \"amac_fund_info\" # 中国证券投资基金业协会-信息公示-基金产品-私募基金管理人基金产品\n \"amac_securities_info\" # 中国证券投资基金业协会-信息公示-基金产品-证券公司集合资管产品公示\n \"amac_aoin_info\" # 中国证券投资基金业协会-信息公示-基金产品-证券公司直投基金\n \"amac_fund_sub_info\" # 中国证券投资基金业协会-信息公示-基金产品公示-证券公司私募投资基金\n \"amac_fund_account_info\" # 中国证券投资基金业协会-信息公示-基金产品公示-基金公司及子公司集合资管产品公示\n \"amac_fund_abs\" # 中国证券投资基金业协会-信息公示-基金产品公示-资产支持专项计划\n \"amac_futures_info\" # 中国证券投资基金业协会-信息公示-基金产品公示-期货公司集合资管产品公示\n \"amac_manager_cancelled_info\" # 中国证券投资基金业协会-信息公示-诚信信息-已注销私募基金管理人名单\n # 全国银行间同业拆借中心-市场数据-市场行情-外汇市场行情\n \"fx_spot_quote\"  # 市场行情-外汇市场行情-人民币外汇即期报价\n \"fx_swap_quote\"  # 市场行情-债券市场行情-人民币外汇远掉报价\n \"fx_pair_quote\"  # 市场行情-债券市场行情-外币对即期报价\n # 能源-碳排放权\n \"energy_carbon_domestic\"  # 碳排放权-国内\n \"energy_carbon_bj\"  # 碳排放权-北京\n \"energy_carbon_sz\"  # 碳排放权-深圳\n \"energy_carbon_eu\"  # 碳排放权-国际\n \"energy_carbon_hb\"  # 碳排放权-湖北\n \"energy_carbon_gz\"  # 碳排放权-广州\n # 商品现货价格指数\n \"spot_goods\"  # 商品现货价格指数\n # 中国宏观杠杆率\n \"macro_cnbs\"  # 中国宏观杠杆率数据\n # 金融期权\n \"option_finance_board\"  # 金融期权数据\n # 期货连续合约\n \"futures_main_sina\"  # 新浪期货连续合约的历史数据\n # 机构调研数据\n \"stock_jgdy_tj_em\"  # 机构调研数据-统计\n \"stock_jgdy_detail_em\"  # 机构调研数据-详细\n # 股权质押数据\n \"stock_gpzy_profile_em\"  # 股权质押市场概况\n \"stock_gpzy_pledge_ratio_em\"  # 上市公司质押比例\n \"stock_gpzy_pledge_ratio_detail_em\"  # 重要股东股权质押明细\n \"stock_gpzy_individual_pledge_ratio_detail_em\"  # 个股重要股东股权质押明细\n \"stock_gpzy_distribute_statistics_company_em\"  # 质押机构分布统计-证券公司\n \"stock_gpzy_distribute_statistics_bank_em\"  # 质押机构分布统计-银行\n \"stock_gpzy_industry_data_em\"  # 上市公司质押比例-行业数据\n # 商誉专题数据\n \"stock_sy_profile_em\"  # A股商誉市场概况\n \"stock_sy_yq_em\"  # 商誉减值预期明细\n \"stock_sy_jz_em\"  # 个股商誉减值明细\n \"stock_sy_em\"  # 个股商誉明细\n \"stock_sy_hy_em\"  # 行业商誉\n # 股票账户统计数据\n \"stock_account_statistics_em\"  # 股票账户统计数据\n # 股票指数-成份股\n \"index_stock_cons\"  # 股票指数-成份股-最新成份股\n \"index_stock_cons_csindex\"  # 中证指数-成份股\n \"index_stock_cons_weight_csindex\"  # 中证指数成份股的权重\n \"index_stock_info\"  # 股票指数-成份股-所有可以的指数表\n \"index_stock_info_sina\"  # 股票指数-成份股-所有可以的指数表-新浪新接口\n # 义乌小商品指数\n \"index_yw\"  # 义乌小商品指数\n # 世界银行间拆借利率\n \"rate_interbank\"  #  银行间拆借利率\n # 主要央行利率\n \"macro_bank_usa_interest_rate\"  # 美联储利率决议报告\n \"macro_bank_euro_interest_rate\"  # 欧洲央行决议报告\n \"macro_bank_newzealand_interest_rate\"  # 新西兰联储决议报告\n \"macro_bank_switzerland_interest_rate\"  # 瑞士央行决议报告\n \"macro_bank_english_interest_rate\"  # 英国央行决议报告\n \"macro_bank_australia_interest_rate\"  # 澳洲联储决议报告\n \"macro_bank_japan_interest_rate\"  # 日本央行决议报告\n \"macro_bank_russia_interest_rate\"  # 俄罗斯央行决议报告\n \"macro_bank_india_interest_rate\"  # 印度央行决议报告\n \"macro_bank_brazil_interest_rate\"  # 巴西央行决议报告\n # 中国\n \"macro_china_urban_unemployment\"  # 城镇调查失业率\n \"macro_china_shrzgm\"  # 社会融资规模增量统计\n \"macro_china_gdp_yearly\"  # 金十数据中心-经济指标-中国-国民经济运行状况-经济状况-中国GDP年率报告\n \"macro_china_cpi_yearly\"  # 金十数据中心-经济指标-中国-国民经济运行状况-物价水平-中国CPI年率报告\n \"macro_china_cpi_monthly\"  # 金十数据中心-经济指标-中国-国民经济运行状况-物价水平-中国CPI月率报告\n \"macro_china_ppi_yearly\"  # 金十数据中心-经济指标-中国-国民经济运行状况-物价水平-中国PPI年率报告\n \"macro_china_exports_yoy\"  # 金十数据中心-经济指标-中国-贸易状况-以美元计算出口年率报告\n \"macro_china_imports_yoy\"  # 金十数据中心-经济指标-中国-贸易状况-以美元计算进口年率\n \"macro_china_trade_balance\"  # 金十数据中心-经济指标-中国-贸易状况-以美元计算贸易帐(亿美元)\n \"macro_china_industrial_production_yoy\"  # 金十数据中心-经济指标-中国-产业指标-规模以上工业增加值年率\n \"macro_china_pmi_yearly\"  # 金十数据中心-经济指标-中国-产业指标-官方制造业PMI\n \"macro_china_cx_pmi_yearly\"  # 金十数据中心-经济指标-中国-产业指标-财新制造业PMI终值\n \"macro_china_cx_services_pmi_yearly\"  # 金十数据中心-经济指标-中国-产业指标-财新服务业PMI\n \"macro_china_non_man_pmi\"  # 金十数据中心-经济指标-中国-产业指标-中国官方非制造业PMI\n \"macro_china_fx_reserves_yearly\"  # 金十数据中心-经济指标-中国-金融指标-外汇储备(亿美元)\n \"macro_china_m2_yearly\"  # 金十数据中心-经济指标-中国-金融指标-M2货币供应年率\n \"macro_china_shibor_all\"  # 金十数据中心-经济指标-中国-金融指标-上海银行业同业拆借报告\n \"macro_china_hk_market_info\"  # 金十数据中心-经济指标-中国-金融指标-人民币香港银行同业拆息\n \"macro_china_daily_energy\"  # 金十数据中心-经济指标-中国-其他-中国日度沿海六大电库存数据\n \"macro_china_rmb\"  # 金十数据中心-经济指标-中国-其他-中国人民币汇率中间价报告\n \"macro_china_market_margin_sz\"  # 金十数据中心-经济指标-中国-其他-深圳融资融券报告\n \"macro_china_market_margin_sh\"  # 金十数据中心-经济指标-中国-其他-上海融资融券报告\n \"macro_china_au_report\"  # 金十数据中心-经济指标-中国-其他-上海黄金交易所报告\n \"macro_china_lpr\"  # 中国-利率-贷款报价利率\n \"macro_china_new_house_price\"  # 中国-新房价指数\n \"macro_china_enterprise_boom_index\"  # 中国-企业景气及企业家信心指数\n \"macro_china_national_tax_receipts\"  # 中国-全国税收收入\n \"macro_china_bank_financing\"  # 中国-银行理财产品发行数量\n \"macro_china_new_financial_credit\"  # 中国-新增信贷数据\n \"macro_china_fx_gold\"  # 中国-外汇和黄金储备\n \"macro_china_stock_market_cap\"  # 中国-全国股票交易统计表\n \"macro_china_cpi\"  # 中国-居民消费价格指数\n \"macro_china_gdp\"  # 中国-国内生产总值\n \"macro_china_ppi\"  # 中国-工业品出厂价格指数\n \"macro_china_pmi\"  # 中国-采购经理人指数\n \"macro_china_gdzctz\"  # 中国-城镇固定资产投资\n \"macro_china_hgjck\"  # 中国-海关进出口增减情况一览表\n \"macro_china_czsr\"  # 中国-财政收入\n \"macro_china_whxd\"  # 中国-外汇贷款数据\n \"macro_china_wbck\"  # 中国-本外币存款\n \"macro_china_bond_public\"  # 中国-债券发行\n # 美国\n \"macro_usa_gdp_monthly\"  # 金十数据中心-经济指标-美国-经济状况-美国GDP\n \"macro_usa_cpi_monthly\"  # 金十数据中心-经济指标-美国-物价水平-美国CPI月率报告\n \"macro_usa_cpi_yoy\"  # 东方财富-经济数据一览-美国-CPI年率\n \"macro_usa_core_cpi_monthly\"  # 金十数据中心-经济指标-美国-物价水平-美国核心CPI月率报告\n \"macro_usa_personal_spending\"  # 金十数据中心-经济指标-美国-物价水平-美国个人支出月率报告\n \"macro_usa_retail_sales\"  # 金十数据中心-经济指标-美国-物价水平-美国零售销售月率报告\n \"macro_usa_import_price\"  # 金十数据中心-经济指标-美国-物价水平-美国进口物价指数报告\n \"macro_usa_export_price\"  # 金十数据中心-经济指标-美国-物价水平-美国出口价格指数报告\n \"macro_usa_lmci\"  # 金十数据中心-经济指标-美国-劳动力市场-LMCI\n \"macro_usa_unemployment_rate\"  # 金十数据中心-经济指标-美国-劳动力市场-失业率-美国失业率报告\n \"macro_usa_job_cuts\"  # 金十数据中心-经济指标-美国-劳动力市场-失业率-美国挑战者企业裁员人数报告\n \"macro_usa_non_farm\"  # 金十数据中心-经济指标-美国-劳动力市场-就业人口-美国非农就业人数报告\n \"macro_usa_adp_employment\"  # 金十数据中心-经济指标-美国-劳动力市场-就业人口-美国ADP就业人数报告\n \"macro_usa_core_pce_price\"  # 金十数据中心-经济指标-美国-劳动力市场-消费者收入与支出-美国核心PCE物价指数年率报告\n \"macro_usa_real_consumer_spending\"  # 金十数据中心-经济指标-美国-劳动力市场-消费者收入与支出-美国实际个人消费支出季率初值报告\n \"macro_usa_trade_balance\"  # 金十数据中心-经济指标-美国-贸易状况-美国贸易帐报告\n \"macro_usa_current_account\"  # 金十数据中心-经济指标-美国-贸易状况-美国经常帐报告\n \"macro_usa_rig_count\"  # 金十数据中心-经济指标-美国-产业指标-制造业-贝克休斯钻井报告\n # 金十数据中心-经济指标-美国-产业指标-制造业-美国个人支出月率报告\n \"macro_usa_ppi\"  # 金十数据中心-经济指标-美国-产业指标-制造业-美国生产者物价指数(PPI)报告\n \"macro_usa_core_ppi\"  # 金十数据中心-经济指标-美国-产业指标-制造业-美国核心生产者物价指数(PPI)报告\n \"macro_usa_api_crude_stock\"  # 金十数据中心-经济指标-美国-产业指标-制造业-美国API原油库存报告\n \"macro_usa_pmi\"  # 金十数据中心-经济指标-美国-产业指标-制造业-美国Markit制造业PMI初值报告\n \"macro_usa_ism_pmi\"  # 金十数据中心-经济指标-美国-产业指标-制造业-美国ISM制造业PMI报告\n \"macro_usa_nahb_house_market_index\"  # 金十数据中心-经济指标-美国-产业指标-房地产-美国NAHB房产市场指数报告\n \"macro_usa_house_starts\"  # 金十数据中心-经济指标-美国-产业指标-房地产-美国新屋开工总数年化报告\n \"macro_usa_new_home_sales\"  # 金十数据中心-经济指标-美国-产业指标-房地产-美国新屋销售总数年化报告\n \"macro_usa_building_permits\"  # 金十数据中心-经济指标-美国-产业指标-房地产-美国营建许可总数报告\n \"macro_usa_exist_home_sales\"  # 金十数据中心-经济指标-美国-产业指标-房地产-美国成屋销售总数年化报告\n \"macro_usa_house_price_index\"  # 金十数据中心-经济指标-美国-产业指标-房地产-美国FHFA房价指数月率报告\n \"macro_usa_spcs20\" # 金十数据中心-经济指标-美国-产业指标-房地产-美国S&P/CS20座大城市房价指数年率报告\n \"macro_usa_pending_home_sales\"  # 金十数据中心-经济指标-美国-产业指标-房地产-美国成屋签约销售指数月率报告\n \"macro_usa_cb_consumer_confidence\"  # 金十数据中心-经济指标-美国-领先指标-美国谘商会消费者信心指数报告\n \"macro_usa_nfib_small_business\" # 金十数据中心-经济指标-美国-领先指标-美国NFIB小型企业信心指数报告\n \"macro_usa_michigan_consumer_sentiment\" # 金十数据中心-经济指标-美国-领先指标-美国密歇根大学消费者信心指数初值报告\n \"macro_usa_eia_crude_rate\"  # 金十数据中心-经济指标-美国-其他-美国EIA原油库存报告\n \"macro_usa_initial_jobless\"  # 金十数据中心-经济指标-美国-其他-美国初请失业金人数报告\n \"macro_usa_crude_inner\"  # 金十数据中心-经济指标-美国-其他-美国原油产量报告\n # 宏观数据\n \"macro_cons_gold_volume\"  # 全球最大黄金ETF—SPDR Gold Trust持仓报告\n \"macro_cons_gold_change\"  # 全球最大黄金ETF—SPDR Gold Trust持仓报告\n \"macro_cons_gold_amount\"  # 全球最大黄金ETF—SPDR Gold Trust持仓报告\n \"macro_cons_silver_volume\"  # 全球最大白银ETF--iShares Silver Trust持仓报告\n \"macro_cons_silver_change\"  # 全球最大白银ETF--iShares Silver Trust持仓报告\n \"macro_cons_silver_amount\"  # 全球最大白银ETF--iShares Silver Trust持仓报告\n # 伦敦金属交易所(LME)\n \"macro_euro_lme_holding\"  # 伦敦金属交易所(LME)-持仓报告\n \"macro_euro_lme_stock\"  # 伦敦金属交易所(LME)-库存报告\n # 美国商品期货交易委员会\n \"macro_usa_cftc_nc_holding\"  # 外汇类非商业持仓报告\n \"macro_usa_cftc_c_holding\"  # 商品类非商业持仓报告\n \"macro_usa_cftc_merchant_currency_holding\"  # 外汇类商业持仓报告\n \"macro_usa_cftc_merchant_goods_holding\"  # 商品类商业持仓报告\n # 货币对-投机情绪报告\n \"macro_fx_sentiment\"  # 货币对-投机情绪报告\n # 百度迁徙地图接口\n \"migration_area_baidu\"  # 百度迁徙地图-迁入/出地详情\n \"migration_scale_baidu\"  # 百度迁徙地图-迁徙规模\n # 债券-沪深债券\n \"bond_zh_hs_daily\"  # 债券-沪深债券-历史行情数据\n \"bond_zh_hs_spot\"  # 债券-沪深债券-实时行情数据\n # 债券-沪深可转债\n \"bond_zh_hs_cov_daily\"  # 债券-沪深可转债-历史行情数据\n \"bond_zh_hs_cov_spot\"  # 债券-沪深可转债-实时行情数据\n \"bond_zh_cov\"  # 债券-可转债数据一览表\n \"bond_cov_comparison\"  # 债券-可转债数据比价\n \"bond_cb_jsl\"  # 可转债实时数据-集思录\n \"bond_cb_adj_logs_jsl\"  # 可转债转股价变动-集思录\n \"bond_cb_index_jsl\"  # 可转债-集思录可转债等权指数\n \"bond_cb_redeem_jsl\"  # 可转债-集思录可转债-强赎\n # 金融期权-新浪\n \"option_cffex_sz50_list_sina\"  # 上证50期权列表\n \"option_cffex_sz50_spot_sina\"  # 沪深300期权实时行情\n \"option_cffex_sz50_daily_sina\"  # 沪深300期权历史行情-日频\n \"option_cffex_hs300_list_sina\"  # 沪深300期权列表\n \"option_cffex_hs300_spot_sina\"  # 沪深300期权实时行情\n \"option_cffex_hs300_daily_sina\"  # 沪深300期权历史行情-日频\n \"option_cffex_zz1000_list_sina\"  # 中证1000期权列表\n \"option_cffex_zz1000_spot_sina\"  # 中证1000期权实时行情\n \"option_cffex_zz1000_daily_sina\"  # 中证1000期权历史行情-日频\n \"option_sse_list_sina\"  # 上交所期权列表\n \"option_sse_expire_day_sina\"  # 上交所期权剩余到期日\n \"option_sse_codes_sina\"  # 上交所期权代码\n \"option_sse_spot_price_sina\"  # 上交所期权实时行情\n \"option_sse_underlying_spot_price_sina\"  # 上交所期权标的物实时行情\n \"option_sse_greeks_sina\"  # 上交所期权希腊字母\n \"option_sse_minute_sina\"  # 上交所期权分钟数据\n \"option_sse_daily_sina\"  # 上交所期权日频数据\n \"option_finance_minute_sina\"  # 金融股票期权分时数据\n \"option_minute_em\"  # 股票期权分时数据\n # 商品期权-新浪\n \"option_sina_option_commodity_dict\"  # 商品期权合约字典查询\n \"option_sina_option_commodity_contract_list\"  # 商品期权合约查询\n \"option_sina_option_commodity_hist\"  # 商品期权行情历史数据\n # 微博舆情报告\n \"stock_js_weibo_report\"  # 微博舆情报告\n # 自然语言处理\n \"nlp_ownthink\"  # 知识图谱\n \"nlp_answer\"  # 智能问答\n # 货币\n \"currency_latest\"  # 最新货币报价\n \"currency_history\"  # 指定历史日期的所有货币报价\n \"currency_time_series\"  # 指定日期间的时间序列数据-需要权限\n \"currency_currencies\"  # 查询所支持的货币信息\n \"currency_convert\"  # 货币换算\n \"currency_pair_map\"  # 指定货币的所有可货币对的数据\n # 公募基金\n \"fund_name_em\",  # 基金基本信息\n \"fund_info_index_em\",  # 指数型基金-基本信息\n \"fund_purchase_em\",  # 基金申购状态\n \"fund_open_fund_daily_em\",  # 开放式基金-实时数据\n \"fund_open_fund_info_em\",  # 开放式基金-历史数据\n \"fund_etf_fund_daily_em\",  # 场内交易基金-实时数据\n \"fund_etf_fund_info_em\",  # 场内交易基金-历史数据\n \"fund_financial_fund_daily_em\",  # 理财型基金-实时数据\n \"fund_financial_fund_info_em\",  # 理财型基金-历史数据\n \"fund_graded_fund_daily_em\",  # 分级基金-实时数据\n \"fund_graded_fund_info_em\",  # 分级基金-历史数据\n \"fund_money_fund_daily_em\",  # 货币型基金-实时数据\n \"fund_money_fund_info_em\",  # 货币型基金-历史数据\n \"fund_value_estimation_em\",  # 基金估值\n # 分析师指数\n \"stock_analyst_rank_em\"  # 分析师排名\n \"stock_analyst_detail_em\"  # 分析师详情\n # 千股千评\n \"stock_comment_em\"  # 股市关注度\n \"stock_comment_detail_zlkp_jgcyd_em\"  # 机构参与度\n \"stock_comment_detail_zhpj_lspf_em\"  # 综合评价-历史评分\n \"stock_comment_detail_scrd_focus_em\"  # 市场热度-用户关注指数\n \"stock_comment_detail_scrd_desire_em\"  # 市场热度-市场参与意愿\n # 沪深港通\n \"stock_hk_ggt_components_em\"  # 港股通成份股\n \"stock_hsgt_hold_stock_em\"  # 沪深港通持股-个股排行\n \"stock_hsgt_stock_statistics_em\"  # 沪深港通持股-每日个股统计\n \"stock_hsgt_institution_statistics_em\"  # 沪深港通持股-每日机构统计\n \"stock_hsgt_hist_em\"  # 沪深港通历史数据\n \"stock_hsgt_board_rank_em\"  # 板块排行\n \"stock_hsgt_fund_flow_summary_em\"  # 沪深港通资金流向\n # 两市停复牌\n \"stock_tfp_em\"  # 两市停复牌数据\n # 中国油价\n \"energy_oil_hist\"  # 汽柴油历史调价信息\n \"energy_oil_detail\"  # 地区油价\n # 现货与股票\n \"futures_spot_stock\"  # 现货与股票接口\n # 中证商品指数\n \"futures_index_ccidx\"  # 中证商品指数\n # 打新收益率\n \"stock_dxsyl_em\"  # 打新收益率\n \"stock_xgsglb_em\"  # 新股申购与中签查询\n # 年报季报\n \"stock_yjyg_em\"  # 上市公司业绩预告\n \"stock_yysj_em\"  # 上市公司预约披露时间\n # 高频数据-标普500指数\n \"hf_sp_500\"  # 标普500指数的分钟数据\n # 商品期货库存数据\n \"futures_inventory_em\"  # 库存数据-东方财富\n # 个股资金流\n \"stock_individual_fund_flow\"  # 个股资金流\n \"stock_individual_fund_flow_rank\"  # 个股资金流排名\n \"stock_market_fund_flow\"  # 大盘资金流\n \"stock_sector_fund_flow_rank\"  # 板块资金流排名\n \"stock_sector_fund_flow_summary\"  # xx行业个股资金流\n \"stock_sector_fund_flow_hist\"  # 行业历史资金流\n \"stock_concept_fund_flow_hist\"  # 概念历史资金流\n \"stock_main_fund_flow\"  # 主力净流入排名\n # 股票基本面数据\n \"stock_financial_abstract\"  # 财务摘要\n \"stock_financial_report_sina\"  # 三大财务报表\n \"stock_financial_analysis_indicator\"  # 财务指标\n \"stock_add_stock\"  # 股票增发\n \"stock_ipo_info\"  # 股票新股\n \"stock_ipo_ths\"  # 新股申购与中签\n \"stock_ipo_hk_ths\"  # 新股申购与中签\n \"stock_history_dividend_detail\"  # 分红配股\n \"stock_history_dividend\"  # 历史分红\n \"stock_dividend_cninfo\"  # 个股历史分红\n \"stock_restricted_release_queue_sina\"  # 限售解禁-新浪\n \"stock_restricted_release_summary_em\"  # 东方财富网-数据中心-特色数据-限售股解禁\n \"stock_restricted_release_detail_em\"  # 东方财富网-数据中心-限售股解禁-解禁详情一览\n \"stock_restricted_release_queue_em\"  # 东方财富网-数据中心-个股限售解禁-解禁批次\n \"stock_restricted_release_stockholder_em\"  # 东方财富网-数据中心-个股限售解禁-解禁股东\n \"stock_circulate_stock_holder\"  # 流动股东\n \"stock_fund_stock_holder\"  # 基金持股\n \"stock_main_stock_holder\"  # 主要股东\n # 股票板块\n \"stock_sector_spot\"  # 板块行情\n \"stock_sector_detail\"  # 板块详情(具体股票)\n # 股票信息\n \"stock_info_sz_name_code\"  # 深证证券交易所股票代码和简称\n \"stock_info_sh_name_code\"  # 上海证券交易所股票代码和简称\n \"stock_info_bj_name_code\"  # 北京证券交易所股票代码和简称\n \"stock_info_sh_delist\"  # 上海证券交易所暂停和终止上市\n \"stock_info_sz_delist\"  # 深证证券交易所暂停和终止上市\n \"stock_info_sz_change_name\"  # 深证证券交易所名称变更\n \"stock_info_change_name\"  # A 股股票曾用名列表\n \"stock_info_a_code_name\"  # A 股股票代码和简称\n # 机构持股\n \"stock_institute_hold\"  # 机构持股一览表\n \"stock_institute_hold_detail\"  # 机构持股详情\n # 机构推荐股票\n \"stock_institute_recommend\"  # 机构推荐\n \"stock_institute_recommend_detail\"  # 股票评级记录\n # 股票市场总貌\n \"stock_szse_summary\"  # 深圳证券交易所-市场总貌-证券类别统计\n \"stock_szse_area_summary\"  # 深圳证券交易所-市场总貌-地区交易排序\n  \"stock_szse_sector_summary\"  # 深圳证券交易所-统计资料-股票行业成交\n \"stock_sse_summary\"  # 上海证券交易所-股票数据总貌\n \"stock_sse_deal_daily\"  # 上海证券交易所-每日股票情况\n # 美股港股目标价\n \"stock_price_js\"  # 美股港股目标价\n # 券商业绩月报\n \"stock_qsjy_em\"  # 券商业绩月报\n # 彭博亿万富豪指数\n \"index_bloomberg_billionaires\"  # 彭博亿万富豪指数\n \"index_bloomberg_billionaires_hist\"  # 彭博亿万富豪历史指数\n # A 股市盈率和市净率\n \"stock_market_pe_lg\"  # 乐咕乐股-主板市盈率\n \"stock_index_pe_lg\"  # 乐咕乐股-指数市盈率\n \"stock_market_pb_lg\"  # 乐咕乐股-主板市净率\n \"stock_index_pb_lg\"  # 乐咕乐股-指数市净率\n \"stock_hk_indicator_eniu\"  # 港股股个股市盈率、市净率和股息率指标\n \"stock_a_high_low_statistics\"  # 创新高和新低的股票数量\n \"stock_a_below_net_asset_statistics\"  # 破净股统计\n # 交易日历\n \"tool_trade_date_hist_sina\"  # 新浪财经-交易日历\n # 基金行情\n \"fund_etf_category_sina\"  # 基金实时行情-新浪\n \"fund_etf_hist_sina\"  # 基金行情-新浪\n \"fund_etf_dividend_sina\"  # 新浪财经-基金-ETF 基金-累计分红\n \"fund_etf_hist_em\"  # 基金历史行情-东财\n \"fund_etf_hist_min_em\"  # 基金分时行情-东财\n \"fund_etf_spot_em\"  # 基金实时行情-东财\n \"fund_etf_spot_ths\"  # 基金实时行情-同花顺\n # 股票财务报告-预约披露\n \"stock_report_disclosure\"  # 股票财务报告-预约披露时间\n # 基金持股\n \"stock_report_fund_hold\"  # 个股-基金持股\n \"stock_report_fund_hold_detail\"  # 个股-基金持股-明细\n # 中证指数\n \"stock_zh_index_hist_csindex\"  # 中证指数\n \"stock_zh_index_value_csindex\"  # 中证指数-指数估值\n # A股龙虎榜\n \"stock_lhb_detail_daily_sina\"  # 龙虎榜-每日详情\n \"stock_lhb_ggtj_sina\"  # 龙虎榜-个股上榜统计\n \"stock_lhb_yytj_sina\"  # 龙虎榜-营业上榜统计\n \"stock_lhb_jgzz_sina\"  # 龙虎榜-机构席位追踪\n \"stock_lhb_jgmx_sina\"  # 龙虎榜-机构席位成交明细\n # 注册制审核\n \"stock_register_kcb\"  # IPO审核信息-科创板\n \"stock_register_cyb\"  # IPO审核信息-创业板\n \"stock_register_bj\"  # IPO审核信息-北交所\n \"stock_register_sh\"  # IPO审核信息-上海主板\n \"stock_register_sz\"  # IPO审核信息-深圳主板\n \"stock_register_db\"  # 注册制审核-达标企业\n # 次新股\n \"stock_zh_a_new\"  # 股票数据-次新股\n # COMEX库存数据\n \"futures_comex_inventory\"  # COMEX库存数据\n # 消费者信心指数\n \"macro_china_xfzxx\"  # 消费者信心指数\n # 工业增加值增长\n \"macro_china_gyzjz\"  # 工业增加值增长\n # 存款准备金率\n \"macro_china_reserve_requirement_ratio\"  # 存款准备金率\n # 社会消费品零售总额\n \"macro_china_consumer_goods_retail\"  # 社会消费品零售总额\n # 海关进出口增减情况\n \"macro_china_hgjck\"  # 海关进出口增减情况\n # 全社会用电分类情况表\n \"macro_china_society_electricity\"  # 全社会用电分类情况表\n # 全社会客货运输量\n \"macro_china_society_traffic_volume\"  # 全社会客货运输量\n # 邮电业务基本情况\n \"macro_china_postal_telecommunicational\"  # 邮电业务基本情况\n # 国际旅游外汇收入构成\n \"macro_china_international_tourism_fx\"  # 国际旅游外汇收入构成\n # 民航客座率及载运率\n \"macro_china_passenger_load_factor\"  # 民航客座率及载运率\n # 航贸运价指数\n \"macro_china_freight_index\"  # 航贸运价指数\n # 央行货币当局资产负债\n \"macro_china_central_bank_balance\"  # 央行货币当局资产负债\n # FR007利率互换曲线历史数据\n \"macro_china_swap_rate\"  # FR007利率互换曲线历史数据\n # 收盘收益率曲线历史数据\n \"bond_china_close_return\"  # 收盘收益率曲线历史数据\n # 保险业经营情况\n \"macro_china_insurance\"  # 保险业经营情况\n # 货币供应量\n \"macro_china_supply_of_money\"  # 货币供应量\n # 央行黄金和外汇储备\n \"macro_china_foreign_exchange_gold\"  # 央行黄金和外汇储备\n # 商品零售价格指数\n \"macro_china_retail_price_index\"  # 商品零售价格指数\n # 新闻联播文字稿\n \"news_cctv\"  # 新闻联播文字稿\n # 电影票房\n \"movie_boxoffice_realtime\"  # 电影实时票房\n \"movie_boxoffice_daily\"  # 电影单日票房\n \"movie_boxoffice_weekly\"  # 电影单周票房\n \"movie_boxoffice_monthly\"  # 电影单月票房\n \"movie_boxoffice_yearly\"  # 电影年度票房\n \"movie_boxoffice_yearly_first_week\"  # 电影年度首周票房\n \"movie_boxoffice_cinema_daily\"  # 电影院单日票房\n \"movie_boxoffice_cinema_weekly\"  # 电影院单周票房\n # 国房景气指数\n \"macro_china_real_estate\"  # 国房景气指数\n # 加密货币历史数据\n \"crypto_name_url_table\"  # 加密货币货币名称\n # 基金排行\n \"fund_open_fund_rank_em\"  # 开放式基金排行\n \"fund_em_exchange_rank\"  # 场内交易基金排行\n \"fund_em_money_rank\"  # 货币型基金排行\n \"fund_em_lcx_rank\"  # 理财基金排行\n \"fund_em_hk_rank\"  # 香港基金排行\n # 回购定盘利率\n \"repo_rate_hist\"  # 回购定盘利率\n # 福布斯中国榜单\n \"forbes_rank\"  # 福布斯中国榜单\n # 新财富500富豪榜\n \"xincaifu_rank\"  # 新财富500富豪榜\n # 胡润排行榜\n \"hurun_rank\"  # 胡润排行榜\n # 期货合约详情\n \"futures_contract_detail\"  # 新浪期货合约详情\n \"futures_contract_detail_em\"  # 东方财富期货合约详情\n # 科创板报告\n \"stock_zh_kcb_report_em\"  # 科创板报告\n # 东方财富-期权\n \"option_current_em\"  # 东方财富-期权\n # 国证指数\n \"index_all_cni\"  # 国证指数-所有指数\n \"index_hist_cni\"  # 国证指数-指数行情\n \"index_detail_cni\"  # 国证指数-样本详情\n \"index_detail_hist_cni\"  # 国证指数-历史样本\n \"index_detail_hist_adjust_cni\"  # 国证指数-历史调样\n # 大宗交易\n \"stock_dzjy_sctj\"  # 大宗交易-市场统计\n \"stock_dzjy_mrmx\"  # 大宗交易-每日明细\n \"stock_dzjy_mrtj\"  # 大宗交易-每日统计\n \"stock_dzjy_hygtj\"  # 大宗交易-活跃 A 股统计\n \"stock_dzjy_yybph\"  # 大宗交易-营业部排行\n \"stock_dzjy_hyyybtj\"  # 大宗交易-活跃营业部统计\n \"stock_dzjy_yybph\"  # 大宗交易-营业部排行\n # 一致行动人\n \"stock_yzxdr_em\"  # 股票数据-一致行动人\n # 新闻-个股新闻\n \"stock_news_em\"  # 新闻-个股新闻\n # 债券概览\n \"bond_cash_summary_sse\"  # 上登债券信息网-债券现券市场概览\n \"bond_deal_summary_sse\"  # 上登债券信息网-债券成交概览\n # 中国货币供应量\n \"macro_china_money_supply\"  # 中国货币供应量\n # 期货交割和期转现\n \"futures_to_spot_czce\"  # 郑商所期转现\n \"futures_to_spot_shfe\"  # 上期所期转现\n \"futures_to_spot_dce\"  # 大商所期转现\n \"futures_delivery_dce\"  # 大商所交割统计\n \"futures_delivery_czce\"  # 郑商所交割统计\n \"futures_delivery_shfe\"  # 上期所交割统计\n \"futures_delivery_match_dce\"  # 大商所交割配对\n \"futures_delivery_match_czce\"  # 郑商所交割配对\n # 融资融券\n \"stock_margin_sse\"  # 上海证券交易所-融资融券汇总\n \"stock_margin_detail_sse\"  # 上海证券交易所-融资融券详情\n # 基金评级\n \"fund_rating_all\"  # 基金评级-基金评级总汇\n \"fund_rating_sh\"  # 基金评级-上海证券评级\n \"fund_rating_zs\"  # 基金评级-招商证券评级\n \"fund_rating_ja\"  # 基金评级-济安金信评级\n # 基金经理\n \"fund_manager_em\"  # 基金经理-基金经理大全\n # 盈利预测\n \"stock_profit_forecast_em\"  # 盈利预测-东财\n \"stock_profit_forecast_ths\"  # 盈利预测-同花顺\n # 中美国债收益率\n \"bond_zh_us_rate\"  # 中美国债收益率\n # 分红配送\n \"stock_fhps_em\"  # 分红配送\n # 业绩快报\n \"stock_yjkb_em\"  # 业绩快报\n # 业绩报告\n \"stock_yjbb_em\"  # 业绩报告\n # 三大表报\n \"stock_zcfz_em\"  # 三大表报-资产负债表\n \"stock_zcfz_bj_em\"  # 三大表报-资产负债表-北交所\n \"stock_lrb_em\"  # 三大表报-利润表\n \"stock_xjll_em\"  # 三大表报-现金流量表\n # 首发企业申报\n \"stock_ipo_declare_em\"  # 首发企业申报\n # 行业板块\n \"stock_board_industry_index_ths\"  # 同花顺-行业板块-指数日频数据\n # 概念板块\n \"stock_board_concept_index_ths\"  # 同花顺-概念板块-指数日频数据\n # 营业部\n \"stock_lh_yyb_most\"  # 营业部排名-上榜次数最多\n \"stock_lh_yyb_capital\"  # 营业部排名-资金实力最强\n \"stock_lh_yyb_control\"  # 营业部排名-抱团操作实力\n # 比特比持仓\n \"crypto_bitcoin_hold_report\"  # 比特比持仓\n # 同花顺-数据中心-资金流向\n \"stock_fund_flow_individual\"  # 同花顺-数据中心-资金流向-个股资金流\n \"stock_fund_flow_industry\"  # 同花顺-数据中心-资金流向-行业资金流\n \"stock_fund_flow_concept\"  # 同花顺-数据中心-资金流向-概念资金流\n \"stock_fund_flow_big_deal\"  # 同花顺-数据中心-资金流向-大单追踪\n # 高管持股\n \"stock_ggcg_em\"  # 高管持股\n # 新发基金\n \"fund_new_found_em\"  # 新发基金\n \"fund_new_found_ths\"  # 新发基金\n # 柯桥指数\n \"index_kq_fz\"  # 柯桥纺织指数\n \"index_kq_fashion\"  # 柯桥时尚指数\n # Drewry 集装箱指数\n \"drewry_wci_index\"  # Drewry 集装箱指数\n # 浙江省排污权交易指数\n \"index_eri\"  # 浙江省排污权交易指数\n # 赚钱效应分析\n \"stock_market_activity_legu\"  # 赚钱效应分析\n # 中国公路物流运价指数\n \"index_price_cflp\"  # 中国公路物流运价指数\n # 中国公路物流运量指数\n \"index_volume_cflp\"  # 中国公路物流运量指数\n # 汽车销量\n \"car_sale_rank_gasgoo\"  # 盖世汽车-汽车行业制造企业数据库-销量数据\n \"car_market_total_cpca\"  # 乘联会-统计数据-总体市场\n \"car_market_man_rank_cpca\"  # 乘联会-统计数据-厂商排名\n \"car_market_cate_cpca\"  # 乘联会-统计数据-车型大类\n \"car_market_country_cpca\"  # 乘联会-统计数据-国别细分市场\n \"car_market_segment_cpca\"  # 乘联会-统计数据-级别细分市场\n \"car_market_fuel_cpca\"  # 乘联会-统计数据-新能源细分市场\n # 增发\n \"stock_qbzf_em\"  # 增发\n # 配股\n \"stock_pg_em\"  # 配股\n # 中国-香港-宏观经济指标\n \"macro_china_hk_cpi\"  # 中国-香港-消费者物价指数\n \"macro_china_hk_cpi_ratio\"  # 中国-香港-消费者物价指数年率\n \"macro_china_hk_rate_of_unemployment\"  # 中国-香港-失业率\n \"macro_china_hk_gbp\"  # 中国-香港-香港 GDP\n \"macro_china_hk_gbp_ratio\"  # 中国-香港-香港 GDP 同比\n \"macro_china_hk_building_volume\"  # 中国-香港-香港楼宇买卖合约数量\n \"macro_china_hk_building_amount\"  # 中国-香港-香港楼宇买卖合约成交金额\n \"macro_china_hk_trade_diff_ratio\"  # 中国-香港-香港商品贸易差额年率\n \"macro_china_hk_ppi\"  # 中国-香港-香港制造业 PPI 年率\n # 涨停板行情\n \"stock_zt_pool_em\"  # 涨停板行情-涨停股池\n \"stock_zt_pool_previous_em\"  # 涨停板行情-昨日涨停股池\n \"stock_zt_pool_strong_em\"  # 涨停板行情-强势股池\n \"stock_zt_pool_sub_new_em\"  # 涨停板行情-次新股池\n \"stock_zt_pool_zbgc_em\"  # 涨停板行情-炸板股池\n \"stock_zt_pool_dtgc_em\"  # 涨停板行情-跌停股池\n # 两网及退市\n \"stock_staq_net_stop\"  # 两网及退市\n # 股东户数\n \"stock_zh_a_gdhs\"  # 股东户数\n \"stock_zh_a_gdhs_detail_em\"  # 股东户数详情\n # 中行人民币牌价历史数据查询\n \"currency_boc_sina\"  # 中行人民币牌价历史数据查询\n # A 股日频率数据-东方财富\n \"stock_zh_a_hist\"  # A 股日频率数据-东方财富\n # A 股日频率数据-腾讯\n \"stock_zh_a_hist_tx\"  # A 股日频率数据-腾讯\n # 盘口异动\n \"stock_changes_em\"  # 盘口异动\n \"stock_board_change_em\"  # 板块异动\n # CME 比特币成交量\n \"crypto_bitcoin_cme\"  # CME 比特币成交量\n # 基金规模和规模趋势\n \"fund_aum_em\"  # 基金公司规模排名列表\n \"fund_aum_trend_em\"  # 基金市场管理规模走势图\n \"fund_aum_hist_em\"  # 基金市场管理规模历史\n # 企业商品价格指数\n \"macro_china_qyspjg\"  # 企业商品价格指数\n \"macro_china_fdi\"  # 外商直接投资数据\n # 未决房屋销售月率\n \"macro_usa_phs\"  # 未决房屋销售月率\n # 德国经济指标\n \"macro_germany_ifo\"  # ifo商业景气指数\n \"macro_germany_cpi_monthly\"  # 消费者物价指数月率终值\n \"macro_germany_cpi_yearly\"  # 消费者物价指数年率终值\n \"macro_germany_trade_adjusted\"  # 贸易帐(季调后)\n \"macro_germany_gdp\"  # GDP\n \"macro_germany_retail_sale_monthly\"  # 实际零售销售月率\n \"macro_germany_retail_sale_yearly\"  # 实际零售销售年率\n \"macro_germany_zew\"  # ZEW经济景气指数\n # 东方财富-概念板块\n \"stock_board_concept_name_em\"  # 概念板块-名称\n \"stock_board_concept_spot_em\"  # 概念板块-实时行情\n \"stock_board_concept_hist_em\"  # 概念板块-历史行情\n \"stock_board_concept_hist_min_em\"  # 概念板块-分时历史行情\n \"stock_board_concept_cons_em\"  # 概念板块-板块成份\n # 瑞士-宏观\n \"macro_swiss_svme\"  # 瑞士-宏观-SVME采购经理人指数\n \"macro_swiss_trade\"  # 瑞士-宏观-贸易帐\n \"macro_swiss_cpi_yearly\"  # 瑞士-宏观-消费者物价指数年率\n \"macro_swiss_gdp_quarterly\"  # 瑞士-宏观-GDP季率\n \"macro_swiss_gbd_yearly\"  # 瑞士-宏观-GDP年率\n \"macro_swiss_gbd_bank_rate\"  # 瑞士-宏观-央行公布利率决议\n # 日本-宏观\n \"macro_japan_bank_rate\"  # 日本-央行公布利率决议\n \"macro_japan_cpi_yearly\"  # 日本-全国消费者物价指数年率\n \"macro_japan_core_cpi_yearly\"  # 日本-全国核心消费者物价指数年率\n \"macro_japan_unemployment_rate\"  # 日本-失业率\n \"macro_japan_head_indicator\"  # 日本-领先指标终值\n # 英国-宏观\n \"macro_uk_halifax_monthly\"  # 英国-Halifax 房价指数月率\n \"macro_uk_halifax_yearly\"  # 英国-Halifax 房价指数年率\n \"macro_uk_trade\"  # 英国-贸易帐\n \"macro_uk_bank_rate\"  # 英国-央行公布利率决议\n \"macro_uk_core_cpi_yearly\"  # 英国-核心消费者物价指数年率\n \"macro_uk_core_cpi_monthly\"  # 英国-核心消费者物价指数月率\n \"macro_uk_cpi_yearly\"  # 英国-消费者物价指数年率\n \"macro_uk_cpi_monthly\"  # 英国-消费者物价指数月率\n \"macro_uk_retail_monthly\"  # 英国-零售销售月率\n \"macro_uk_retail_yearly\"  # 英国-零售销售年率\n \"macro_uk_rightmove_yearly\"  # 英国-Rightmove 房价指数年率\n \"macro_uk_rightmove_monthly\"  # 英国-Rightmove 房价指数月率\n \"macro_uk_gdp_quarterly\"  # 英国-GDP 季率初值\n \"macro_uk_gdp_yearly\"  # 英国-GDP 年率初值\n \"macro_uk_unemployment_rate\"  # 英国-失业率\n # 融资融券-深圳\n \"stock_margin_underlying_info_szse\"  # 标的证券信息\n \"stock_margin_detail_szse\"  # 融资融券明细\n \"stock_margin_szse\"  # 融资融券汇总\n # 宏观-澳大利亚\n \"macro_australia_bank_rate\"  # 央行公布利率决议\n \"macro_australia_unemployment_rate\"  # 失业率\n \"macro_australia_trade\"  # 贸易帐\n \"macro_australia_cpi_quarterly\"  # 消费者物价指数季率\n \"macro_australia_cpi_yearly\"  # 消费者物价指数年率\n \"macro_australia_ppi_quarterly\"  # 生产者物价指数季率\n \"macro_australia_retail_rate_monthly\"  # 零售销售月率\n # 养猪数据中心\n \"futures_hog_core\"  # 生猪信息-核心数据\n \"futures_hog_cost\"  # 生猪信息-成本维度\n \"futures_hog_supply\"  # 生猪信息-供应维度\n # 宏观-加拿大\n \"macro_canada_new_house_rate\"  # 新屋开工\n \"macro_canada_unemployment_rate\"  # 失业率\n \"macro_canada_trade\"  # 贸易帐\n \"macro_canada_retail_rate_monthly\"  # 零售销售月率\n \"macro_canada_bank_rate\"  # 央行公布利率决议\n \"macro_canada_core_cpi_yearly\"  # 核心消费者物价指数年率\n \"macro_canada_core_cpi_monthly\"  # 核心消费者物价指数月率\n \"macro_canada_cpi_yearly\"  # 消费者物价指数年率\n \"macro_canada_cpi_monthly\"  # 消费者物价指数月率\n \"macro_canada_gdp_monthly\"  # GDP 月率\n # 港股财报\n \"stock_financial_hk_report_em\"  # 东方财富-港股-财务报表-三大报表\n \"stock_financial_hk_analysis_indicator_em\"  # 东方财富-港股-财务分析-主要指标\n # 全部 A 股-等权重市盈率、中位数市盈率\n \"stock_a_ttm_lyr\"  # 全部 A 股-等权重市盈率、中位数市盈率\n \"stock_a_all_pb\"  # 全部 A 股-等权重市净率、中位数市净率\n # REITs\n \"reits_realtime_em\"  #  REITs-实时行情\n \"reits_hist_em\"  #  REITs-历史行情\n \"reits_hist_min_em\"  #  REITs-历史分钟行情\n # A 股分时数据\n \"stock_zh_a_hist_min_em\"  # 东财-股票分时\n \"stock_zh_a_hist_pre_min_em\"  # 东财-股票盘前分时\n # 港股分时数据\n \"stock_hk_hist_min_em\"  # 东财-港股分时数据\n # 美股分时数据\n \"stock_us_hist_min_em\"  # 东财-美股分时数据\n # 可转债详情\n \"bond_zh_cov_info\"  # 东财-可转债详情\n # 风险警示板\n \"stock_zh_a_st_em\"  # 风险警示板\n # 美股-粉单市场\n \"stock_us_pink_spot_em\"  # 美股-粉单市场\n # 美股-知名美股\n \"stock_us_famous_spot_em\"  # 美股-知名美股\n # 股票-投资评级\n \"stock_rank_forecast_cninfo\"  # 股票-投资评级\n # 股票-行业市盈率\n \"stock_industry_pe_ratio_cninfo\"  # 股票-行业市盈率\n # 新股-新股过会\n \"stock_new_gh_cninfo\"  # 新股-新股过会\n # 新股-IPO\n \"stock_new_ipo_cninfo\"  # 新股-IPO\n # 股东人数及持股集中度\n \"stock_hold_num_cninfo\"  # 股东人数及持股集中度\n # 实际控制人持股变动\n \"stock_hold_control_cninfo\"  # 实际控制人持股变动\n # 高管持股变动明细\n \"stock_hold_management_detail_cninfo\"  # 高管持股变动明细\n # 巨潮资讯-数据中心-专题统计-股东股本-股本变动\n \"stock_hold_change_cninfo\"  # 巨潮资讯-数据中心-专题统计-股东股本-股本变动\n # 期货手续费\n \"futures_comm_info\"  # 期货手续费\n \"futures_fees_info\"  # 期货交易费用参照表\n # B 股实时行情数据和历史行情数据\n \"stock_zh_b_spot\"  # B 股实时行情数据\n \"stock_zh_b_daily\"  # B 股历史行情数据(日频)\n \"stock_zh_b_minute\"  # B 股分时历史行情数据(分钟)\n # 公司治理-对外担保\n \"stock_cg_guarantee_cninfo\"  # 公司治理-对外担保\n # 公司治理-公司诉讼\n \"stock_cg_lawsuit_cninfo\"  # 公司治理-公司诉讼\n # 公司治理-股权质押\n \"stock_cg_equity_mortgage_cninfo\"  # 公司治理-股权质押\n # 债券报表-债券发行-国债发行\n \"bond_treasure_issue_cninfo\"  # 债券报表-债券发行-国债发行\n # 债券报表-债券发行-地方债发行\n \"bond_local_government_issue_cninfo\"  # 债券报表-债券发行-地方债\n # 债券报表-债券发行-企业债发行\n \"bond_corporate_issue_cninfo\"  # 债券报表-债券发行-企业债\n # 债券报表-债券发行-可转债发行\n \"bond_cov_issue_cninfo\"  # 债券报表-债券发行-可转债发行\n # 债券报表-债券发行-可转债转股\n \"bond_cov_stock_issue_cninfo\"  # 债券报表-债券发行-可转债转股\n # 基金报表-基金重仓股\n \"fund_report_stock_cninfo\"  # 基金报表-基金重仓股\n # 公告大全-沪深 A 股公告\n \"stock_notice_report\"  # 公告大全-沪深 A 股公告\n # 基金报表-基金行业配置\n \"fund_report_industry_allocation_cninfo\"  # 基金报表-基金行业配置\n \"fund_report_asset_allocation_cninfo\"  # 基金报表-基金资产配置\n # 基金规模\n \"fund_scale_open_sina\"  # 基金规模-开放式基金\n \"fund_scale_close_sina\"  # 基金规模-封闭式基金\n \"fund_scale_structured_sina\"  # 基金规模-分级子基金\n # 沪深港通持股\n \"stock_hsgt_individual_em\"  # 沪深港通持股-具体股票\n \"stock_hsgt_individual_detail_em\"  # 沪深港通持股-具体股票-详情\n # IPO 受益股\n \"stock_ipo_benefit_ths\"  # IPO 受益股\n \"stock_xgsr_ths\"  # 新股上市首日\n # 同花顺-数据中心-技术选股-创新高\n \"stock_rank_cxg_ths\"  # 创新高\n \"stock_rank_cxd_ths\"  # 创新低\n \"stock_rank_lxsz_ths\"  # 连续上涨\n \"stock_rank_lxxd_ths\"  # 连续下跌\n \"stock_rank_cxfl_ths\"  # 持续放量\n \"stock_rank_cxsl_ths\"  # 持续缩量\n \"stock_rank_xstp_ths\"  # 向上突破\n \"stock_rank_xxtp_ths\"  # 向下突破\n \"stock_rank_ljqs_ths\"  # 量价齐升\n \"stock_rank_ljqd_ths\"  # 量价齐跌\n \"stock_rank_xzjp_ths\"  # 险资举牌\n # 可转债分时数据\n \"bond_zh_hs_cov_min\"  # 可转债分时数据\n \"bond_zh_hs_cov_pre_min\"  # 可转债分时数据-分时行情-盘前\n # 艺人\n \"business_value_artist\"  # 艺人商业价值\n \"online_value_artist\"  # 艺人流量价值\n # 视频\n \"video_tv\"  # 电视剧集\n \"video_variety_show\"  # 综艺节目\n # 基金数据-分红送配\n \"fund_cf_em\"  # 基金拆分\n \"fund_fh_rank_em\"  # 基金分红排行\n \"fund_fh_em\"  # 基金分红\n # 基金数据-规模变动\n \"fund_scale_change_em\"  # 规模变动\n \"fund_hold_structure_em\"  # 持有人结构\n # 行业板块\n \"stock_board_industry_cons_em\"  # 行业板块-板块成份\n \"stock_board_industry_hist_em\"  # 行业板块-历史行情\n \"stock_board_industry_hist_min_em\"  # 行业板块-分时历史行情\n \"stock_board_industry_name_em\"  # 行业板块-板块名称\n # 股票回购数据\n \"stock_repurchase_em\"  # 股票回购数据\n # 期货品种字典\n \"futures_hq_subscribe_exchange_symbol\"  # 期货品种字典\n # 上海黄金交易所\n \"spot_hist_sge\"  # 上海黄金交易所-历史行情走势\n \"spot_quotations_sge\"  # 上海黄金交易所-实时行情走势\n \"spot_golden_benchmark_sge\"  # 上海金基准价\n \"spot_silver_benchmark_sge\"  # 上海银基准价\n # 个股信息查询\n \"stock_individual_info_em\"  # 个股信息查询-东财\n \"stock_individual_basic_info_xq\"  # 个股信息查询-雪球\n \"stock_individual_basic_info_us_xq\"  # 个股信息查询-雪球-美股\n \"stock_individual_basic_info_hk_xq\"  # 个股信息查询-雪球-港股\n # 中国食糖指数\n \"index_sugar_msweet\"  # 中国食糖指数\n # 配额内进口糖估算指数\n \"index_inner_quote_sugar_msweet\"  # 配额内进口糖估算指数\n # 配额外进口糖估算指数\n \"index_outer_quote_sugar_msweet\"  # 配额外进口糖估算指数\n # 东方财富网-数据中心-股东分析-股东持股分析\n \"stock_gdfx_free_holding_analyse_em\"  # 股东持股分析-十大流通股东\n \"stock_gdfx_holding_analyse_em\"  # 股东持股分析-十大股东\n \"stock_gdfx_free_top_10_em\"  # 东方财富网-个股-十大流通股东\n \"stock_gdfx_top_10_em\"  # 东方财富网-个股-十大股东\n \"stock_gdfx_free_holding_detail_em\"  # 股东持股明细-十大流通股东\n \"stock_gdfx_holding_detail_em\"  # 股东持股明细-十大股东\n \"stock_gdfx_free_holding_change_em\"  # 股东持股变动统计-十大流通股东\n \"stock_gdfx_holding_change_em\"  # 股东持股变动统计-十大股东\n \"stock_gdfx_free_holding_statistics_em\"  # 股东持股统计-十大流通股东\n \"stock_gdfx_holding_statistics_em\"  # 股东持股统计-十大股东\n \"stock_gdfx_free_holding_teamwork_em\"  # 股东协同-十大流通股东\n \"stock_gdfx_holding_teamwork_em\"  # 股东协同-十大股东\n # 期权龙虎榜\n \"option_lhb_em\"  # 期权龙虎榜\n \"option_value_analysis_em\"  # 期权价值分析\n \"option_risk_analysis_em\"  # 期权风险分析\n \"option_premium_analysis_em\"  # 期权折溢价分析\n # 财新指数\n \"index_pmi_com_cx\"  # 财新数据-指数报告-财新中国 PMI-综合 PMI\n \"index_pmi_man_cx\"  # 财新数据-指数报告-财新中国 PMI-制造业 PMI\n \"index_pmi_ser_cx\"  # 财新数据-指数报告-财新中国 PMI-服务业 PMI\n \"index_dei_cx\"  # 财新数据-指数报告-数字经济指数\n \"index_ii_cx\"  # 财新数据-指数报告-产业指数\n \"index_si_cx\"  # 财新数据-指数报告-溢出指数\n \"index_fi_cx\"  # 财新数据-指数报告-融合指数\n \"index_bi_cx\"  # 财新数据-指数报告-基础指数\n \"index_nei_cx\"  # 财新数据-指数报告-中国新经济指数\n \"index_li_cx\"  # 财新数据-指数报告-劳动力投入指数\n \"index_ci_cx\"  # 财新数据-指数报告-资本投入指数\n \"index_ti_cx\"  # 财新数据-指数报告-科技投入指数\n \"index_neaw_cx\"  # 财新数据-指数报告-新经济行业入职平均工资水平\n \"index_awpr_cx\"  # 财新数据-指数报告-新经济入职工资溢价水平\n \"index_cci_cx\"  # 财新数据-指数报告-大宗商品指数\n \"index_qli_cx\"  # 财新数据-指数报告-高质量因子\n \"index_ai_cx\"  # 财新数据-指数报告-AI策略指数\n \"index_bei_cx\"  # 财新数据-指数报告-基石经济指数\n \"index_neei_cx\"  # 财新数据-指数报告-新动能指数\n # 指数历史数据\n \"index_zh_a_hist\"  # 中国股票指数历史数据\n # 指数分时数据\n \"index_zh_a_hist_min_em\"  # 中国股票指数-指数分时数据\n # 东方财富-个股人气榜-A股\n \"stock_hot_rank_em\"  # 东方财富-个股人气榜-人气榜\n \"stock_hot_up_em\"  # 东方财富-个股人气榜-飙升榜\n \"stock_hot_rank_detail_em\"  # 东方财富-个股人气榜-历史趋势及粉丝特征\n \"stock_hot_rank_detail_realtime_em\"  # 东方财富-个股人气榜-实时变动\n \"stock_hot_keyword_em\"  # 东方财富-个股人气榜-关键词\n \"stock_hot_rank_latest_em\"  # 东方财富-个股人气榜-最新排名\n \"stock_hot_rank_relate_em\"  # 东方财富-个股人气榜-相关股票\n # 东方财富-个股人气榜-港股\n \"stock_hk_hot_rank_em\"  # 东方财富-个股人气榜-人气榜-港股\n \"stock_hk_hot_rank_detail_em\"  # 东方财富-个股人气榜-历史趋势-港股\n \"stock_hk_hot_rank_detail_realtime_em\"  # 东方财富-个股人气榜-实时变动-港股\n \"stock_hk_hot_rank_latest_em\"  # 东方财富-个股人气榜-最新排名-港股\n # 东方财富-股票数据-龙虎榜\n \"stock_lhb_detail_em\"  # 东方财富网-数据中心-龙虎榜单-龙虎榜详情\n \"stock_lhb_stock_statistic_em\"  # 东方财富网-数据中心-龙虎榜单-个股上榜统计\n \"stock_lhb_stock_detail_em\"  # 东方财富网-数据中心-龙虎榜单-个股龙虎榜详情\n \"stock_lhb_jgmmtj_em\"  # 东方财富网-数据中心-龙虎榜单-机构买卖每日统计\n \"stock_lhb_hyyyb_em\"  # 东方财富网-数据中心-龙虎榜单-每日活跃营业部\n \"stock_lhb_yyb_detail_em\"  # 东方财富网-数据中心-龙虎榜单-营业部详情\n \"stock_lhb_yybph_em\"  # 东方财富网-数据中心-龙虎榜单-营业部排行\n \"stock_lhb_jgstatistic_em\"  # 东方财富网-数据中心-龙虎榜单-机构席位追踪\n \"stock_lhb_traderstatistic_em\"  # 东方财富网-数据中心-龙虎榜单-营业部统计\n # 投资组合-基金持仓\n \"fund_portfolio_hold_em\"  # 天天基金网-基金档案-投资组合-基金持仓\n \"fund_portfolio_bond_hold_em\"  # 天天基金网-基金档案-投资组合-债券持仓\n # 投资组合-重大变动\n \"fund_portfolio_change_em\"  # 天天基金网-基金档案-投资组合-重大变动\n \"fund_portfolio_industry_allocation_em\"  # 天天基金网-基金档案-投资组合-行业配置\n # 中国宏观\n \"macro_china_insurance_income\"  # 原保险保费收入\n \"macro_china_mobile_number\"  # 手机出货量\n \"macro_china_vegetable_basket\"  # 菜篮子产品批发价格指数\n \"macro_china_agricultural_product\"  # 农产品批发价格总指数\n \"macro_china_agricultural_index\"  # 农副指数\n \"macro_china_energy_index\"  # 能源指数\n \"macro_china_commodity_price_index\"  # 大宗商品价格\n \"macro_global_sox_index\"  # 费城半导体指数\n \"macro_china_yw_electronic_index\"  # 义乌小商品指数-电子元器件\n \"macro_china_construction_index\"  # 建材指数\n \"macro_china_construction_price_index\"  # 建材价格指数\n \"macro_china_lpi_index\"  # 物流景气指数\n \"macro_china_bdti_index\"  # 原油运输指数\n \"macro_china_bsi_index\"  # 超灵便型船运价指数\n # 可转债溢价率分析和可转债价值分析\n \"bond_zh_cov_value_analysis\"  # 可转债溢价率分析\n \"bond_zh_cov_value_analysis\"  # 可转债价值分析\n # 股票热度-雪球\n \"stock_hot_follow_xq\"  # 雪球-沪深股市-热度排行榜-关注排行榜\n \"stock_hot_tweet_xq\"  # 雪球-沪深股市-热度排行榜-讨论排行榜\n \"stock_hot_deal_xq\"  # 雪球-沪深股市-热度排行榜-分享交易排行榜\n # 内部交易\n \"stock_inner_trade_xq\"  # 内部交易\n # 股票-三大报表\n \"stock_balance_sheet_by_report_em\"  # 东方财富-股票-财务分析-资产负债表-按报告期\n \"stock_balance_sheet_by_yearly_em\"  # 东方财富-股票-财务分析-资产负债表-按年度\n \"stock_profit_sheet_by_report_em\"  # 东方财富-股票-财务分析-利润表-报告期\n \"stock_profit_sheet_by_yearly_em\"  # 东方财富-股票-财务分析-利润表-按年度\n \"stock_profit_sheet_by_quarterly_em\"  # 东方财富-股票-财务分析-利润表-按单季度\n \"stock_cash_flow_sheet_by_report_em\"  # 东方财富-股票-财务分析-现金流量表-按报告期\n \"stock_cash_flow_sheet_by_yearly_em\"  # 东方财富-股票-财务分析-现金流量表-按年度\n \"stock_cash_flow_sheet_by_quarterly_em\"  # 东方财富-股票-财务分析-现金流量表-按单季度\n \"stock_balance_sheet_by_report_delisted_em\"  # 东方财富-股票-财务分析-资产负债表-已退市股票-按报告期\n \"stock_profit_sheet_by_report_delisted_em\"  # 东方财富-股票-财务分析-利润表-已退市股票-按报告期\n \"stock_cash_flow_sheet_by_report_delisted_em\"  # 东方财富-股票-财务分析-现金流量表-已退市股票-按报告期\n # 宏观-全球事件\n \"news_economic_baidu\"  # 宏观-全球事件\n # 停复牌\n \"news_trade_notify_suspend_baidu\"  # 停复牌\n # 财报发行\n \"news_report_time_baidu\"  # 财报发行\n # 金融期权\n \"option_risk_indicator_sse\"  # 上海证券交易所-产品-股票期权-期权风险指标\n # 人民币汇率中间价\n \"currency_boc_safe\"  # 人民币汇率中间价\n # 主营构成\n \"stock_zygc_em\"  # 主营构成-东财\n # 行业分类数据\n \"stock_industry_category_cninfo\"  # 巨潮资讯-行业分类数据\n # 上市公司行业归属的变动情况\n \"stock_industry_change_cninfo\"  # 巨潮资讯-上市公司行业归属的变动情况\n # 公司股本变动\n \"stock_share_change_cninfo\"  # 巨潮资讯-公司股本变动\n # 上海金属网\n \"futures_news_shmet\"  # 上海金属网-快讯\n # 分红配股\n \"news_trade_notify_dividend_baidu\"  # 分红配股\n # 中国债券信息网-中债指数-中债指数族系-总指数-综合类指数\n \"bond_new_composite_index_cbond\"  # 中债-新综合指数\n \"bond_composite_index_cbond\"  # 中债-综合指数\n # 沪深港股通-参考汇率和结算汇率\n \"stock_sgt_settlement_exchange_rate_szse\"  # 深港通-港股通业务信息-结算汇率\n \"stock_sgt_reference_exchange_rate_szse\"  # 深港通-港股通业务信息-参考汇率\n \"stock_sgt_reference_exchange_rate_sse\"  # 沪港通-港股通信息披露-参考汇率\n \"stock_sgt_settlement_exchange_rate_sse\"  # 沪港通-港股通信息披露-结算汇兑\n # 配股实施方案-巨潮资讯\n \"stock_allotment_cninfo\"  # 配股实施方案-巨潮资讯\n # 巨潮资讯-个股-公司概况\n \"stock_profile_cninfo\"  # 巨潮资讯-个股-公司概况\n  # 巨潮资讯-个股-上市相关\n \"stock_ipo_summary_cninfo\"  # 巨潮资讯-个股-上市相关\n # 百度股市通-港股-财务报表-估值数据\n \"stock_hk_valuation_baidu\"  # 百度股市通-港股-财务报表-估值数据\n # 百度股市通-A 股-财务报表-估值数据\n \"stock_zh_valuation_baidu\"  # 百度股市通-A 股-财务报表-估值数据\n # 百度股市通- A 股或指数-股评-投票\n \"stock_zh_vote_baidu\"  # 百度股市通- A 股或指数-股评-投票\n # 百度股市通-热搜股票\n \"stock_hot_search_baidu\"  # 百度股市通-热搜股票\n # 乐估乐股-底部研究-巴菲特指标\n \"stock_buffett_index_lg\"  # 乐估乐股-底部研究-巴菲特指标\n # 百度股市通-外汇-行情榜单\n \"fx_quote_baidu\"  # 百度股市通-外汇-行情榜单\n # 50ETF 期权波动率指数\n \"index_option_50etf_qvix\"  # 50ETF 期权波动率指数\n # 50ETF 期权波动率指数 QVIX-分时\n \"index_option_50etf_min_qvix\"  # 50ETF 期权波动率指数 QVIX-分时\n # 300 ETF 期权波动率指数\n \"index_option_300etf_qvix\"  # 300 ETF 期权波动率指数\n # 300 ETF 期权波动率指数 QVIX-分时\n \"index_option_300etf_min_qvix\"  # 300 ETF 期权波动率指数 QVIX-分时\n # 500 ETF 期权波动率指数\n \"index_option_500etf_qvix\"  # 500 ETF 期权波动率指数\n # 500 ETF 期权波动率指数 QVIX-分时\n \"index_option_500etf_min_qvix\"  # 500 ETF 期权波动率指数 QVIX-分时\n # 创业板 期权波动率指数\n \"index_option_cyb_qvix\"  # 创业板 期权波动率指数\n # 创业板 期权波动率指数 QVIX-分时\n \"index_option_cyb_min_qvix\"  # 创业板 期权波动率指数 QVIX-分时\n # 科创板 期权波动率指数\n \"index_option_kcb_qvix\"  # 科创板 期权波动率指数\n # 科创板 期权波动率指数 QVIX-分时\n \"index_option_kcb_min_qvix\"  # 科创板 期权波动率指数 QVIX-分时\n # 深证100ETF 期权波动率指数\n \"index_option_100etf_qvix\"  # 深证100ETF 期权波动率指数\n # 深证100ETF 期权波动率指数 QVIX-分时\n \"index_option_100etf_min_qvix\"  # 深证100ETF 期权波动率指数 QVIX-分时\n # 中证300股指 期权波动率指数\n \"index_option_300index_qvix\"  # 中证300股指 期权波动率指数\n # 中证300股指 期权波动率指数 QVIX-分时\n \"index_option_300index_min_qvix\"  # 中证300股指 期权波动率指数 QVIX-分时\n # 中证1000股指 期权波动率指数\n \"index_option_1000index_qvix\"  # 中证1000股指 期权波动率指数\n # 中证1000股指 期权波动率指数 QVIX-分时\n \"index_option_1000index_min_qvix\"  # 中证1000股指 期权波动率指数 QVIX-分时\n # 上证50股指 期权波动率指数\n \"index_option_50index_qvix\"  # 上证50股指 期权波动率指数\n # 上证50股指 期权波动率指数 QVIX-分时\n \"index_option_50index_min_qvix\"  # 上证50股指 期权波动率指数 QVIX-分时\n # 申万指数实时行情\n \"index_realtime_sw\"  # 申万指数实时行情\n # 申万指数历史行情\n \"index_hist_sw\"  # 申万指数历史行情\n # 申万宏源研究-行业分类-全部行业分类\n \"stock_industry_clf_hist_sw\"  # 申万宏源研究-行业分类-全部行业分类\n # 申万指数分时行情\n \"index_min_sw\"  # 申万指数分时行情\n # 申万指数成分股\n \"index_component_sw\"  # 申万指数成分股\n # 申万宏源研究-指数分析\n \"index_analysis_daily_sw\"  # 申万宏源研究-指数分析-日报表\n \"index_analysis_weekly_sw\"  # 申万宏源研究-指数分析-周报表\n \"index_analysis_monthly_sw\"  # 申万宏源研究-指数分析-月报表\n \"index_analysis_week_month_sw\"  # 申万宏源研究-指数分析-周/月-日期序列\n \"index_realtime_fund_sw\"  # 申万宏源研究-申万指数-指数发布-基金指数-实时行情\n \"index_hist_fund_sw\"  # 申万宏源研究-申万指数-指数发布-基金指数-历史行情\n # 债券-信息查询结果\n \"bond_info_cm\"  # 中国外汇交易中心暨全国银行间同业拆借中心-债券-信息查询结果\n \"bond_info_detail_cm\"  # 中国外汇交易中心暨全国银行间同业拆借中心-债券-债券详情\n # 生猪市场价格指数\n \"index_hog_spot_price\"  # 生猪市场价格指数\n # 乐咕乐股-股息率-A 股股息率\n \"stock_a_gxl_lg\"  # 乐咕乐股-股息率-A 股股息率\n \"stock_hk_gxl_lg\"  # 乐咕乐股-股息率-恒生指数股息率\n # 乐咕乐股-大盘拥挤度\n \"stock_a_congestion_lg\"  # 乐咕乐股-大盘拥挤度\n # 乐咕乐股-基金仓位\n \"fund_stock_position_lg\"  # 乐咕乐股-基金仓位-股票型基金仓位\n \"fund_balance_position_lg\"  # 乐咕乐股-基金仓位-平衡混合型基金仓位\n \"fund_linghuo_position_lg\"  # 乐咕乐股-基金仓位-灵活配置型基金仓位\n \"stock_zyjs_ths\"  # 主营介绍\n # 东方财富-行情报价\n \"stock_bid_ask_em\"  # 东方财富-行情报价\n # 可转债\n \"bond_zh_cov_info_ths\"  # 同花顺-数据中心-可转债\n # 港股股票指数数据\n \"stock_hk_index_spot_sina\"  # 新浪财经-行情中心-港股指数\n \"stock_hk_index_daily_sina\"  # 新浪财经-港股指数-历史行情数据\n \"stock_hk_index_spot_em\"  # 东方财富网-行情中心-港股-指数实时行情\n \"stock_hk_index_daily_em\"  # 东方财富网-港股-股票指数数据\n # 同花顺-财务指标-主要指标\n \"stock_financial_abstract_new_ths\"  # 同花顺-财务指标-主要指标\n \"stock_financial_debt_new_ths\"  # 同花顺-财务指标-资产负债表\n \"stock_financial_benefit_new_ths\"  # 同花顺-财务指标-利润表\n \"stock_financial_cash_new_ths\"  # 同花顺-财务指标-现金流量表\n # LOF 行情\n \"fund_lof_hist_em\"  # 东方财富-LOF 行情\n \"fund_lof_spot_em\"  # 东方财富-LOF 实时行情\n \"fund_lof_hist_min_em\"  # 东方财富-LOF 分时行情\n # 新浪财经-ESG评级中心\n \"stock_esg_msci_sina\"  # 新浪财经-ESG评级中心-ESG评级-MSCI\n \"stock_esg_rft_sina\"  # 新浪财经-ESG评级中心-ESG评级-路孚特\n \"stock_esg_rate_sina\"  # 新浪财经-ESG评级中心-ESG评级-ESG评级数据\n \"stock_esg_zd_sina\"  # 新浪财经-ESG评级中心-ESG评级-秩鼎\n \"stock_esg_hz_sina\"  # 新浪财经-ESG评级中心-ESG评级-华证指数\n # 基金公告\n \"fund_announcement_dividend_em\"  # 东方财富网站-天天基金网-基金档案-基金公告-分红配送\n \"fund_announcement_report_em\"  # 东方财富网站-天天基金网-基金档案-基金公告-定期报告\n \"fund_announcement_personnel_em\"  # 东方财富网站-天天基金网-基金档案-基金公告-人事调整\n # 互动易\n \"stock_irm_cninfo\"  # 互动易-提问\n \"stock_irm_ans_cninfo\"  # 互动易-回答\n # 上证e互动\n \"stock_sns_sseinfo\"  # 上证e互动-提问与回答\n # 新浪财经-债券-可转债\n \"bond_cb_profile_sina\"  # 新浪财经-债券-可转债-详情资料\n \"bond_cb_summary_sina\"  # 新浪财经-债券-可转债-债券概况\n # 东方财富网-数据中心-特色数据-高管持股\n \"stock_hold_management_detail_em\"  # 东方财富网-数据中心-特色数据-高管持股-董监高及相关人员持股变动明细\n \"stock_hold_management_person_em\"  # 东方财富网-数据中心-特色数据-高管持股-人员增减持股变动明细\n # 股市日历\n \"stock_gsrl_gsdt_em\"  # 东方财富网-数据中心-股市日历-公司动态\n # 东方财富网-数据中心-股东大会\n \"stock_gddh_em\"  # 东方财富网-数据中心-股东大会\n # 东方财富网-数据中心-重大合同-重大合同明细\n \"stock_zdhtmx_em\"  # 重大合同明细\n # 东方财富网-数据中心-研究报告-个股研报\n \"stock_research_report_em\"  # 个股研报\n # 董监高及相关人员持股变动\n \"stock_share_hold_change_sse\"  # 董监高及相关人员持股变动-上海证券交易所\n \"stock_share_hold_change_szse\"  # 董监高及相关人员持股变动-深圳证券交易所\n \"stock_share_hold_change_bse\"  # 董监高及相关人员持股变动-北京证券交易所\n # 统计局接口\n \"macro_china_nbs_nation\"  # 国家统计局全国数据通用接口\n \"macro_china_nbs_region\"  # 国家统计局地区数据通用接口\n # 新浪财经-美股指数行情\n \"index_us_stock_sina\"  # 新浪财经-美股指数行情\n # 融资融券-标的证券名单及保证金比例查询\n \"stock_margin_ratio_pa\"  # 融资融券-标的证券名单及保证金比例查询\n # 东财财富-日内分时数据\n \"stock_intraday_em\"  # 东财财富-日内分时数据\n # 新浪财经-日内分时数据\n \"stock_intraday_sina\"  # 新浪财经-日内分时数据\n # 筹码分布\n \"stock_cyq_em\"  # 筹码分布\n # 雪球基金-基金详情\n \"fund_individual_basic_info_xq\"  # 雪球基金-基金详情\n \"fund_individual_achievement_xq\"  # 雪球基金-基金业绩\n \"fund_individual_analysis_xq\"  # 雪球基金-基金数据分析\n \"fund_individual_profit_probability_xq\"  # 雪球基金-盈利概率\n \"fund_individual_detail_info_xq\"  # 雪球基金-交易规则\n \"fund_individual_detail_hold_xq\"  # 雪球基金-持仓详情\n # 港股盈利预测\n \"stock_hk_profit_forecast_et\"  # 港股盈利预测\n # 雪球-行情中心-个股\n \"stock_individual_spot_xq\"  # 雪球-行情中心-个股\n # 东方财富网-行情中心-期货市场-国际期货\n \"futures_global_spot_em\"  # 东方财富网-行情中心-期货市场-国际期货-实时行情\n \"futures_global_hist_em\"  # 东方财富网-行情中心-期货市场-国际期货-历史行情\n # 东方财富-数据中心-沪深港通-市场概括-分时数据\n \"stock_hsgt_fund_min_em\"  # 东方财富-数据中心-沪深港通-市场概括-分时数据\n # 新浪财经-商品期货-成交持仓\n \"futures_hold_pos_sina\"  # 新浪财经-商品期货-成交持仓\n # 生意社-商品与期货-现期图\n \"futures_spot_sys\"  # 生意社-商品与期货-现期图\n # 上海期货交易所指定交割仓库库存周报\n \"futures_stock_shfe_js\"  # 上海期货交易所指定交割仓库库存周报\n # 期货合约信息\n \"futures_contract_info_shfe\"  # 上海期货交易所-期货合约信息\n \"futures_contract_info_ine\"  # 上海国际能源交易中心-期货合约信息\n \"futures_contract_info_dce\"  # 大连商品交易所-期货合约信息\n \"futures_contract_info_czce\"  # 郑州商品交易所-期货合约信息\n \"futures_contract_info_gfex\"  # 广州期货交易所-期货合约信息\n \"futures_contract_info_cffex\"  # 中国金融期货交易所-期货合约信息\n # 资讯数据\n \"stock_info_cjzc_em\"  # 资讯数据-财经早餐-东方财富\n \"stock_info_global_em\"  # 资讯数据-东方财富\n \"stock_info_global_sina\"  # 资讯数据-新浪财经\n \"stock_info_global_futu\"  # 资讯数据-富途牛牛\n \"stock_info_global_ths\"  # 资讯数据-同花顺\n \"stock_info_global_cls\"  # 资讯数据-财联社\n # 数库-A股新闻情绪指数\n \"index_news_sentiment_scope\"  # 数库-A股新闻情绪指数\n # 华尔街见闻-日历-宏观\n \"macro_info_ws\"  # 华尔街见闻-日历-宏观\n # 现货走势\n \"spot_price_qh\"  # 现货走势\n # 东方财富网-数据中心-融资融券-融资融券账户统计-两融账户信息\n \"stock_margin_account_info\"  # 东方财富网-数据中心-融资融券-融资融券账户统计-两融账户信息\n # 股票期权-每日统计\n \"option_daily_stats_sse\"  # 上海证券交易所-产品-股票期权-每日统计\n \"option_daily_stats_szse\"  # 深圳证券交易所-市场数据-期权数据-日度概况\n # 商品期权手续费\n \"option_comm_info\"  # 商品期权手续费\n # 富途牛牛-主题投资-概念板块-成分股\n \"stock_concept_cons_futu\"  # 富途牛牛-主题投资-概念板块-成分股\n # 同花顺-数据中心-宏观数据-股票筹资\n \"macro_stock_finance\"  # 同花顺-数据中心-宏观数据-股票筹资\n # 同花顺-数据中心-宏观数据-新增人民币贷款\n \"macro_rmb_loan\"  # 同花顺-数据中心-宏观数据-新增人民币贷款\n # 同花顺-数据中心-宏观数据-人民币存款余额\n \"macro_rmb_deposit\"  # 同花顺-数据中心-宏观数据-人民币存款余额\n # 知名港股\n \"stock_us_famous_spot_em\"  # 知名港股\n # 搜猪-生猪大数据-各省均价实时排行榜\n \"spot_hog_soozhu\"  # 搜猪-生猪大数据-各省均价实时排行榜\n \"spot_hog_year_trend_soozhu\"  # 搜猪-生猪大数据-今年以来全国出栏均价走势\n \"spot_hog_lean_price_soozhu\"  # 搜猪-生猪大数据-全国瘦肉型肉猪\n \"spot_hog_three_way_soozhu\"  # 搜猪-生猪大数据-全国三元仔猪\n \"spot_hog_crossbred_soozhu\"  # 搜猪-生猪大数据-全国后备二元母猪\n \"spot_corn_price_soozhu\"  # 搜猪-生猪大数据-全国玉米价格走势\n \"spot_soybean_price_soozhu\"  # 搜猪-生猪大数据-全国豆粕价格走势\n \"spot_mixed_feed_soozhu\"  # 搜猪-生猪大数据-全国育肥猪合料（含自配料）半月走势\n # 财新网-财新数据通\n \"stock_news_main_cx\"  # 财新网-财新数据通\n # QDII\n \"qdii_e_index_jsl\"  # 集思录-T+0 QDII-欧美市场-欧美指数\n \"qdii_e_comm_jsl\"  # 集思录-T+0 QDII-欧美市场-商品\n \"qdii_a_index_jsl\"  # 集思录-T+0 QDII-亚洲市场-亚洲指数\n # 同花顺-公司大事-股东持股变动\n \"stock_shareholder_change_ths\"  # 同花顺-公司大事-股东持股变动\n \"stock_management_change_ths\"  # 同花顺-公司大事-高管持股变动\n # 计算指标\n \"volatility_yz_rv\"  # 已实现波动率计算\n # 东方财富网-数据中心-估值分析-每日互动-每日互动-估值分析\n \"stock_value_em\"  # 东方财富网-数据中心-估值分析-每日互动-每日互动-估值分析\n # 基金基本概况\n \"fund_overview_em\"  # 基金基本概况\n # 基金费率\n \"fund_fee_em\"  # 基金费率\n # 期货行情-东方财富\n \"futures_hist_em\"  # 期货行情-东方财富\n # 美股财报\n \"stock_financial_us_report_em\"  # 东方财富-美股-财务报表-三大报表\n \"stock_financial_us_analysis_indicator_em\"  # 东方财富-美股-财务分析-主要指标\n # 东方财富网-行情中心-沪深港通\n \"stock_zh_ah_spot_em\"  # 东方财富网-行情中心-沪深港通-AH股比价-实时行情\n \"stock_hsgt_sh_hk_spot_em\"  # 东方财富网-行情中心-沪深港通-港股通(沪>港)-股票\n # 东方财富网-行情中心-外汇市场-所有汇率\n \"forex_spot_em\"  # 东方财富网-行情中心-外汇市场-所有汇率-实时行情数据\n \"forex_hist_em\"  # 东方财富网-行情中心-外汇市场-所有汇率-历史行情数据\n # 东方财富网-行情中心-全球指数\n \"index_global_spot_em\"  # 东方财富网-行情中心-全球指数-实时行情数据\n \"index_global_hist_em\"  # 东方财富网-行情中心-全球指数-历史行情数据\n # 新浪财经-行情中心-环球市场\n \"index_global_name_table\"  # 新浪财经-行情中心-环球市场-名称代码映射表\n \"index_global_hist_em\"  # 新浪财经-行情中心-环球市场-历史行情\n # 股本结构\n \"stock_zh_a_gbjg_em\"  # 股本结构\n # 质押式回购\n \"bond_sh_buy_back_em\"  # 上证质押式回购\n \"bond_sz_buy_back_em\"  # 深证质押式回购\n \"bond_buy_back_hist_em\"  # 质押式回购-历史数据\n # 东方财富-港股-公司资料\n \"stock_hk_security_profile_em\"  # 港股-证券资料\n \"stock_hk_company_profile_em\"  # 港股-公司资料\n # 东方财富-港股-核心必读\n \"stock_hk_financial_indicator_em\"  # 港股-最新指标\n \"stock_hk_dividend_payout_em\"  # 港股-分红派息\n # 东方财富-港股-行业对比\n \"stock_hk_growth_comparison_em\"  # 港股-行业对比-成长性对比\n \"stock_hk_valuation_comparison_em\"  # 港股-行业对比-估值对比\n \"stock_hk_scale_comparison_em\"  # 港股-行业对比-规模对比\n # 东方财富-行情中心-同行比较\n \"stock_zh_growth_comparison_em\"  # 行情中心-同行比较-成长性比较\n \"stock_zh_valuation_comparison_em\"  # 行情中心-同行比较-估值比较\n \"stock_zh_dupont_comparison_em\"  # 行情中心-同行比较-杜邦分析比较\n \"stock_zh_scale_comparison_em\"  # 行情中心-同行比较-公司规模\n # 期权保证金\n \"option_margin\"  # 期权保证金\n # 全部AB股比价\n \"stock_zh_ab_comparison_em\"  # 全部AB股比价\n # 中证指数网站-指数列表\n \"index_csindex_all\"  # 中证指数网站-指数列表\n # 东方财富-A股-财务分析-主要指标\n \"stock_financial_analysis_indicator_em\"  # 东方财富-A股-财务分析-主要指标\n # 中国外汇交易中心暨全国银行间同业拆借中心-基准-外汇市场-外汇掉期曲线-外汇掉漆 C-Swap 定盘曲线\n \"fx_c_swap_cm\"  # 中国外汇交易中心暨全国银行间同业拆借中心-基准-外汇市场-外汇掉期曲线-外汇掉漆 C-Swap 定盘曲线\n # 股票期权\n \"option_current_day_szse\"  # 深圳证券交易所-期权子网-行情数据-当日合约\n \"option_current_day_sse\"  # 上海证券交易所-产品-股票期权-信息披露-当日合约\n # 期权合约信息\n \"option_contract_info_ctp\"  # 期权合约信息\n # 百度股市通-美股-财务报表-估值数据\n \"stock_us_valuation_baidu\"  # 百度股市通-美股-财务报表-估值数据\n # 基金份额\n \"fund_etf_scale_szse\"  # 深圳证券交易所-基金产品-基金列表-ETF基金份额\n \"fund_etf_scale_sse\"  # 上海证券交易所-产品-基金产品-ETF产品-ETF产品列表-基金规模\n # 新浪财经-债券-美国国债收益率行情数据\n \"bond_gb_us_sina\"  # 新浪财经-债券-美国国债收益率行情数据\n \"bond_gb_zh_sina\"  # 新浪财经-债券-中国国债收益率行情数据\n # 期货交易所结算参数\n \"futures_settle\"  # 期货交易所结算参数\n```\n\n## 案例演示\n\n### 期货展期收益率\n\n示例代码\n\n```python\nimport akshare as ak\n\nget_roll_yield_bar_df = ak.get_roll_yield_bar(type_method=\"date\", var=\"RB\", start_day=\"20180618\", end_day=\"20180718\")\nprint(get_roll_yield_bar_df)\n```\n\n结果显示: 日期, 展期收益率, 最近合约, 下一期合约\n\n```\n              roll_yield  near_by deferred\n2018-06-19    0.191289  RB1810   RB1901\n2018-06-20    0.192123  RB1810   RB1901\n2018-06-21    0.183304  RB1810   RB1901\n2018-06-22    0.190642  RB1810   RB1901\n2018-06-25    0.194838  RB1810   RB1901\n2018-06-26    0.204314  RB1810   RB1901\n2018-06-27    0.213667  RB1810   RB1901\n2018-06-28    0.211701  RB1810   RB1901\n2018-06-29    0.205892  RB1810   RB1901\n2018-07-02    0.224809  RB1810   RB1901\n2018-07-03    0.229198  RB1810   RB1901\n2018-07-04    0.222853  RB1810   RB1901\n2018-07-05    0.247187  RB1810   RB1901\n2018-07-06    0.261259  RB1810   RB1901\n2018-07-09    0.253283  RB1810   RB1901\n2018-07-10    0.225832  RB1810   RB1901\n2018-07-11    0.210659  RB1810   RB1901\n2018-07-12    0.212805  RB1810   RB1901\n2018-07-13    0.170282  RB1810   RB1901\n2018-07-16    0.218066  RB1810   RB1901\n2018-07-17    0.229768  RB1810   RB1901\n2018-07-18    0.225529  RB1810   RB1901\n```\n"
  },
  {
    "path": "pyproject.toml",
    "content": "[build-system]\nrequires = [\"setuptools>=61.0\"]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"akshare\"\ndynamic = [\"version\"]\ndescription = \"AKShare is an elegant and simple financial data interface library for Python, built for human beings!\"\nreadme = \"README.md\"\nrequires-python = \">=3.9\"\nlicense = {text = \"MIT\"}\nauthors = [\n    {name = \"AKFamily\", email = \"albertandking@gmail.com\"}\n]\nkeywords = [\n    \"stock\",\n    \"option\",\n    \"futures\",\n    \"fund\",\n    \"bond\",\n    \"index\",\n    \"air\",\n    \"finance\",\n    \"spider\",\n    \"quant\",\n    \"quantitative\",\n    \"investment\",\n    \"trading\",\n    \"algotrading\",\n    \"data\",\n]\nclassifiers = [\n    \"Programming Language :: Python :: 3.9\",\n    \"Programming Language :: Python :: 3.10\",\n    \"Programming Language :: Python :: 3.11\",\n    \"Programming Language :: Python :: 3.12\",\n    \"Programming Language :: Python :: 3.13\",\n    \"Programming Language :: Python :: 3.14\",\n    \"License :: OSI Approved :: MIT License\",\n    \"Operating System :: OS Independent\",\n]\ndependencies = [\n    \"beautifulsoup4>=4.9.1\",\n    \"lxml>=4.2.1\",\n    \"pandas>=2.0.0\",\n    \"requests>=2.22.0\",\n    \"curl_cffi>=0.13.0\",\n    \"html5lib>=1.0.1\",\n    \"xlrd>=1.2.0\",\n    \"urllib3>=1.25.8\",\n    \"tqdm>=4.43.0\",\n    \"openpyxl>=3.0.3\",\n    \"jsonpath>=0.82\",\n    \"tabulate>=0.8.6\",\n    \"decorator>=4.4.2\",\n    \"mini-racer>=0.12.4; platform_system != 'Linux'\",\n    \"py-mini-racer>=0.6.0; platform_system == 'Linux'\",\n    \"akracer>=0.0.13; platform_system == 'Linux'\",\n]\n\n[project.optional-dependencies]\nfull = [\"akqmt\"]\nqmt = [\"akqmt\"]\ndev = [\n    \"akqmt>=0.1.0\",\n    \"commitizen>=4.12.1; python_version >= '3.10'\",\n    \"pre-commit>=3.6.2; python_version >= '3.9'\",\n    \"sphinx>=7.4.3\",\n    \"recommonmark>=0.7.1\",\n    \"sphinx_markdown_tables>=0.0.17\",\n    \"sphinx_rtd_theme>=1.0.0\",\n    \"mplfinance>=0.12.10b0\",\n    \"ruff>=0.14.14; python_version >= '3.10'\",\n    \"ruff-lsp>=0.0.53; python_version >= '3.10'\",\n]\n\n[project.urls]\nHomepage = \"https://github.com/akfamily/akshare\"\n\n[tool.setuptools.dynamic]\nversion = {attr = \"akshare._version.__version__\"}\n\n[tool.setuptools.packages.find]\ninclude = [\"akshare*\"]\n\n[tool.setuptools.package-data]\n\"*\" = [\"*.py\", \"*.json\", \"*.pk\", \"*.js\", \"*.zip\"]\n\n[tool.ruff]\n# Exclude a variety of commonly ignored directories.\nexclude = [\n    \"akshare/__init__.py\",  # 初始化导入库文件，必须包含本文件\n    \".bzr\",\n    \".direnv\",\n    \".eggs\",\n    \".git\",\n    \".git-rewrite\",\n    \".hg\",\n    \".ipynb_checkpoints\",\n    \".mypy_cache\",\n    \".nox\",\n    \".pants.d\",\n    \".pyenv\",\n    \".pytest_cache\",\n    \".pytype\",\n    \".ruff_cache\",\n    \".svn\",\n    \".tox\",\n    \".venv\",\n    \".vscode\",\n    \"__pypackages__\",\n    \"_build\",\n    \"buck-out\",\n    \"build\",\n    \"dist\",\n    \"node_modules\",\n    \"site-packages\",\n    \"venv\",\n]\n\n# Same as Black.\nline-length = 88\nindent-width = 4\n\n# Assume Python 3.13\ntarget-version = \"py313\"\n\n[tool.ruff.lint]\n# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`)  codes by default.\n# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or\n# McCabe complexity (`C901`) by default.\nselect = [\"E4\", \"E7\", \"E9\", \"F\"]\nignore = []\n\n# Allow fix for all enabled rules (when `--fix`) is provided.\nfixable = [\"ALL\"]\nunfixable = []\n\n# Allow unused variables when underscore-prefixed.\ndummy-variable-rgx = \"^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$\"\n\n[tool.ruff.format]\n# Like Black, use double quotes for strings.\nquote-style = \"double\"\n\n# Like Black, indent with spaces, rather than tabs.\nindent-style = \"space\"\n\n# Like Black, respect magic trailing commas.\nskip-magic-trailing-comma = false\n\n# Like Black, automatically detect the appropriate line ending.\nline-ending = \"auto\"\n\n# Enable auto-formatting of code examples in docstrings. Markdown,\n# reStructuredText code/literal blocks and doctests are all supported.\n#\n# This is currently disabled by default, but it is planned for this\n# to be opt-out in the future.\ndocstring-code-format = false\n\n# Set the line length limit used when formatting code snippets in\n# docstrings.\n#\n# This only has an effect when the `docstring-code-format` setting is\n# enabled.\ndocstring-code-line-length = \"dynamic\"\n"
  },
  {
    "path": "setup.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\nfrom setuptools import setup\n\nsetup()\n"
  },
  {
    "path": "tests/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2019/12/12 18:16\nDesc:\n\"\"\"\n"
  },
  {
    "path": "tests/test_func.py",
    "content": "#!/usr/bin/env python\n# -*- coding:utf-8 -*-\n\"\"\"\nDate: 2024/8/28 15:00\nDesc: To test intention, just write test code here!\n\"\"\"\n\nimport pathlib\n\nfrom akshare.datasets import get_ths_js, get_crypto_info_csv\n\n\ndef test_path_func():\n    \"\"\"\n    test path func\n    :return: path of file\n    :rtype: pathlib.Path\n    \"\"\"\n    temp_path = get_ths_js(\"ths.js\")\n    assert isinstance(temp_path, pathlib.Path)\n\n\ndef test_zipfile_func():\n    \"\"\"\n    test path func\n    :return: path of file\n    :rtype: pathlib.Path\n    \"\"\"\n    temp_path = get_crypto_info_csv(\"crypto_info.zip\")\n    assert isinstance(temp_path, pathlib.Path)\n\n\nif __name__ == \"__main__\":\n    test_path_func()\n    test_zipfile_func()\n"
  }
]