lixinger-python 0.3.8__tar.gz → 0.3.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lixinger_python-0.3.10/.claude/settings.local.json +13 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/.ruff.toml +21 -4
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/ADD_NEW_API_QUICK.md +9 -13
- lixinger_python-0.3.10/ARCHITECTURE.md +60 -0
- lixinger_python-0.3.10/CLAUDE.md +116 -0
- lixinger_python-0.3.10/DOCUMENTATION.md +22 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/PKG-INFO +1 -1
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/PUBLISHING.md +5 -67
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/examples/company_profile_example.py +2 -2
- lixinger_python-0.3.10/examples/index_margin_trading_example.py +54 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/__init__.py +2 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/base.py +1 -1
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/namespace.py +3 -3
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/index/__init__.py +6 -0
- lixinger_python-0.3.10/lixinger/api/cn/index/margin_trading.py +117 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/index/namespace.py +29 -16
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/client.py +15 -4
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/exceptions.py +1 -1
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/index/__init__.py +2 -0
- lixinger_python-0.3.10/lixinger/models/cn/index/margin_trading.py +30 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/utils/rate_limiter.py +1 -1
- lixinger_python-0.3.10/lixinger-api/REMINDER.md +31 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/allotment.md +59 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/announcement.md +108 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/block-deal.md +142 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/candlestick.md +123 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/customers.md +133 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/dividend.md +111 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/equity-change.md +114 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/fs/bank.md +691 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/fs/insurance.md +674 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/fs/non_financial.md +756 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/fs/other_financial.md +547 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/fs/security.md +620 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/fund-collection-shareholders.md +88 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/fund-shareholders.md +99 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/fundamental/bank.md +196 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/fundamental/insurance.md +190 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/fundamental/non_financial.md +155 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/fundamental/other_financial.md +188 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/fundamental/security.md +188 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/hot/capita.md +158 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/hot/df.md +128 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/hot/elr.md +136 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/hot/esc.md +177 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/hot/mm_ha.md +435 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/hot/mssc.md +191 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/hot/mtasl.md +267 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/hot/npd.md +128 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/hot/ple.md +142 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/hot/shnc.md +174 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/hot/t_a.md +148 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/hot/tr.md +175 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/hot/tr_dri.md +182 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/indices.md +116 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/industries.md +115 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/inquiry.md +88 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/major-shareholders-shares-change.md +152 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/majority-shareholders.md +99 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/margin-trading-and-securities-lending.md +107 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/measures.md +93 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/mutual-market.md +68 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/nolimit-shareholders.md +108 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/operating-data.md +286 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/operation-revenue-constitution.md +308 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/pledge.md +67 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/profile.md +127 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/senior-executive-shares-change.md +130 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/shareholders-num.md +79 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/suppliers.md +131 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/trading-abnormal.md +320 -0
- lixinger_python-0.3.10/lixinger-api/cn/company/volatility.md +69 -0
- lixinger_python-0.3.10/lixinger-api/cn/company.md +302 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/announcement.md +97 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/asset-combination.md +134 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/asset-industry-combination.md +163 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/candlestick.md +93 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/dividend.md +56 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/drawdown.md +79 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/fees.md +73 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/hot/f_as.md +123 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/hot/f_nlacan.md +176 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/hot/fet_s.md +214 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/hot/ff.md +160 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/hot/fp.md +152 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/hot/fpr.md +207 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/hot/fss.md +154 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/manager.md +108 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/net-value-of-dividend-reinvestment.md +68 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/net-value.md +68 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/profile.md +111 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/shareholders-structure.md +73 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/shareholdings.md +88 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/shares.md +78 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/split.md +55 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/total-net-value.md +68 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/turnover-rate.md +60 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund/volatility.md +69 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund-company/asset-scale.md +80 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund-company/fund-list.md +950 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund-company/fund-manager-list.md +272 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund-company/hot/fc_as.md +198 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund-company/hot/fc_asr.md +246 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund-company/shareholdings.md +78 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund-company.md +117 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund-manager/hot/fmi.md +311 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund-manager/hot/fmp.md +297 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund-manager/management-funds.md +154 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund-manager/profit-ratio.md +56 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund-manager/shareholdings.md +58 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund-manager.md +108 -0
- lixinger_python-0.3.10/lixinger-api/cn/fund.md +150 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/candlestick.md +103 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/constituent-weightings.md +85 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/constituents.md +514 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/drawdown.md +79 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/fs/bank.md +589 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/fs/hybrid.md +449 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/fs/non_financial.md +669 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/fs/security.md +568 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/fundamental.md +192 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/hot/cp.md +203 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/hot/ic.md +107 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/hot/ifet_sni.md +156 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/hot/mm_ha.md +198 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/hot/mtasl.md +209 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/hot/tr.md +142 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/hot/tr_cp.md +159 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/margin-trading-and-securities-lending.md +96 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/mutual-market.md +76 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/tracking-fund.md +79 -0
- lixinger_python-0.3.10/lixinger-api/cn/index/volatility.md +69 -0
- lixinger_python-0.3.10/lixinger-api/cn/index.md +166 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/constituents/cni.md +1135 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/constituents/sw.md +784 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/constituents/sw_2021.md +802 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fs/cni/bank.md +589 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fs/cni/hybrid.md +449 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fs/cni/insurance.md +587 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fs/cni/non_financial.md +669 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fs/cni/security.md +552 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fs/sw/bank.md +589 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fs/sw/hybrid.md +449 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fs/sw/insurance.md +588 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fs/sw/non_financial.md +669 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fs/sw/security.md +552 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fs/sw_2021/bank.md +589 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fs/sw_2021/hybrid.md +449 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fs/sw_2021/insurance.md +588 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fs/sw_2021/non_financial.md +669 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fs/sw_2021/security.md +552 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fundamental/cni.md +184 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fundamental/sw.md +184 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/fundamental/sw_2021.md +184 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/hot/mm_ha/cni.md +199 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/hot/mm_ha/sw.md +199 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/hot/mm_ha/sw_2021.md +199 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/hot/mtasl/cni.md +207 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/hot/mtasl/sw.md +207 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/hot/mtasl/sw_2021.md +207 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/margin-trading-and-securities-lending/cni.md +96 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/margin-trading-and-securities-lending/sw.md +96 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/margin-trading-and-securities-lending/sw_2021.md +96 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/mutual-market/cni.md +76 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/mutual-market/sw.md +76 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry/mutual-market/sw_2021.md +76 -0
- lixinger_python-0.3.10/lixinger-api/cn/industry.md +151 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/allotment.md +59 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/announcement.md +96 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/candlestick.md +122 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/dividend.md +93 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/employee.md +445 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/equity-change.md +80 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/fs/bank.md +452 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/fs/insurance.md +505 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/fs/non_financial.md +534 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/fs/other_financial.md +418 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/fs/reit.md +439 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/fs/security.md +463 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/fund-collection-shareholders.md +83 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/fund-shareholders.md +94 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/fundamental/bank.md +173 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/fundamental/insurance.md +175 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/fundamental/non_financial.md +173 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/fundamental/other_financial.md +173 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/fundamental/reit.md +173 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/fundamental/security.md +173 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/hot/capita.md +122 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/hot/director_equity_change.md +167 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/hot/mm_ah.md +301 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/hot/npd.md +112 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/hot/rep.md +211 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/hot/ss.md +140 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/hot/ss_ha.md +147 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/hot/tr.md +138 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/hot/tr_dri.md +165 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/indices.md +116 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/industries.md +113 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/latest-shareholders.md +133 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/mutual-market.md +67 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/operation-revenue-constitution.md +229 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/profile.md +86 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/repurchase.md +132 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/shareholders-equity-change.md +253 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/short-selling.md +76 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/split.md +57 -0
- lixinger_python-0.3.10/lixinger-api/hk/company/volatility.md +69 -0
- lixinger_python-0.3.10/lixinger-api/hk/company.md +286 -0
- lixinger_python-0.3.10/lixinger-api/hk/index/candlestick.md +100 -0
- lixinger_python-0.3.10/lixinger-api/hk/index/constituents.md +994 -0
- lixinger_python-0.3.10/lixinger-api/hk/index/drawdown.md +79 -0
- lixinger_python-0.3.10/lixinger-api/hk/index/fs/hybrid.md +343 -0
- lixinger_python-0.3.10/lixinger-api/hk/index/fs/non_financial.md +489 -0
- lixinger_python-0.3.10/lixinger-api/hk/index/fundamental.md +179 -0
- lixinger_python-0.3.10/lixinger-api/hk/index/hot/cp.md +195 -0
- lixinger_python-0.3.10/lixinger-api/hk/index/hot/ic.md +107 -0
- lixinger_python-0.3.10/lixinger-api/hk/index/hot/ifet_sni.md +155 -0
- lixinger_python-0.3.10/lixinger-api/hk/index/hot/mm_ah.md +185 -0
- lixinger_python-0.3.10/lixinger-api/hk/index/mutual-market.md +75 -0
- lixinger_python-0.3.10/lixinger-api/hk/index/tracking-fund.md +79 -0
- lixinger_python-0.3.10/lixinger-api/hk/index/volatility.md +69 -0
- lixinger_python-0.3.10/lixinger-api/hk/index.md +159 -0
- lixinger_python-0.3.10/lixinger-api/hk/industry/constituents/hsi.md +2658 -0
- lixinger_python-0.3.10/lixinger-api/hk/industry/fs/hsi/hybrid.md +359 -0
- lixinger_python-0.3.10/lixinger-api/hk/industry/fs/hsi/non_financial.md +490 -0
- lixinger_python-0.3.10/lixinger-api/hk/industry/fundamental/hsi.md +182 -0
- lixinger_python-0.3.10/lixinger-api/hk/industry/hot/mm_ah/hsi.md +198 -0
- lixinger_python-0.3.10/lixinger-api/hk/industry/mutual-market/hsi.md +75 -0
- lixinger_python-0.3.10/lixinger-api/hk/industry.md +147 -0
- lixinger_python-0.3.10/lixinger-api/macro/bop.md +958 -0
- lixinger_python-0.3.10/lixinger-api/macro/central-bank-balance-sheet.md +307 -0
- lixinger_python-0.3.10/lixinger-api/macro/credit-securities-account.md +223 -0
- lixinger_python-0.3.10/lixinger-api/macro/crude-oil.md +79 -0
- lixinger_python-0.3.10/lixinger-api/macro/currency-exchange-rate.md +149 -0
- lixinger_python-0.3.10/lixinger-api/macro/domestic-debt-securities.md +247 -0
- lixinger_python-0.3.10/lixinger-api/macro/domestic-trade.md +166 -0
- lixinger_python-0.3.10/lixinger-api/macro/energy.md +220 -0
- lixinger_python-0.3.10/lixinger-api/macro/foreign-assets.md +158 -0
- lixinger_python-0.3.10/lixinger-api/macro/foreign-trade.md +190 -0
- lixinger_python-0.3.10/lixinger-api/macro/gdp.md +278 -0
- lixinger_python-0.3.10/lixinger-api/macro/gold-price.md +75 -0
- lixinger_python-0.3.10/lixinger-api/macro/industrialization.md +220 -0
- lixinger_python-0.3.10/lixinger-api/macro/interest-rates.md +152 -0
- lixinger_python-0.3.10/lixinger-api/macro/investment-in-fixed-assets.md +117 -0
- lixinger_python-0.3.10/lixinger-api/macro/investor.md +87 -0
- lixinger_python-0.3.10/lixinger-api/macro/leverage-ratio.md +174 -0
- lixinger_python-0.3.10/lixinger-api/macro/money-supply.md +222 -0
- lixinger_python-0.3.10/lixinger-api/macro/national-debt.md +101 -0
- lixinger_python-0.3.10/lixinger-api/macro/national-finance.md +1040 -0
- lixinger_python-0.3.10/lixinger-api/macro/natural-gas.md +78 -0
- lixinger_python-0.3.10/lixinger-api/macro/non-ferrous-metals.md +83 -0
- lixinger_python-0.3.10/lixinger-api/macro/official-reserve-assets.md +212 -0
- lixinger_python-0.3.10/lixinger-api/macro/platinum-price.md +78 -0
- lixinger_python-0.3.10/lixinger-api/macro/population.md +172 -0
- lixinger_python-0.3.10/lixinger-api/macro/price-index.md +332 -0
- lixinger_python-0.3.10/lixinger-api/macro/real-estate.md +262 -0
- lixinger_python-0.3.10/lixinger-api/macro/required-reserves.md +63 -0
- lixinger_python-0.3.10/lixinger-api/macro/rmb-deposits.md +257 -0
- lixinger_python-0.3.10/lixinger-api/macro/rmb-loans.md +281 -0
- lixinger_python-0.3.10/lixinger-api/macro/rmbidx.md +49 -0
- lixinger_python-0.3.10/lixinger-api/macro/silver-price.md +78 -0
- lixinger_python-0.3.10/lixinger-api/macro/social-financing.md +259 -0
- lixinger_python-0.3.10/lixinger-api/macro/stamp-duty.md +104 -0
- lixinger_python-0.3.10/lixinger-api/macro/traffic-transportation.md +112 -0
- lixinger_python-0.3.10/lixinger-api/macro/unemployment-rate.md +98 -0
- lixinger_python-0.3.10/lixinger-api/macro/usdx.md +71 -0
- lixinger_python-0.3.10/lixinger-api/macro/vix-fear-index.md +155 -0
- lixinger_python-0.3.10/lixinger-api/us/index/candlestick.md +96 -0
- lixinger_python-0.3.10/lixinger-api/us/index/constituents.md +4522 -0
- lixinger_python-0.3.10/lixinger-api/us/index/drawdown.md +79 -0
- lixinger_python-0.3.10/lixinger-api/us/index/fs/non_financial.md +377 -0
- lixinger_python-0.3.10/lixinger-api/us/index/fundamental.md +175 -0
- lixinger_python-0.3.10/lixinger-api/us/index/hot/cp.md +169 -0
- lixinger_python-0.3.10/lixinger-api/us/index/hot/ifet_sni.md +140 -0
- lixinger_python-0.3.10/lixinger-api/us/index/tracking-fund.md +79 -0
- lixinger_python-0.3.10/lixinger-api/us/index/volatility.md +69 -0
- lixinger_python-0.3.10/lixinger-api/us/index.md +137 -0
- lixinger_python-0.3.10/mypy.ini +28 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/pyproject.toml +1 -1
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/scripts/explore_api.py +1 -1
- lixinger_python-0.3.10/tests/test_index_margin_trading.py +125 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/uv.lock +1 -1
- lixinger_python-0.3.8/.claude/settings.local.json +0 -9
- lixinger_python-0.3.8/AGENTS.md +0 -354
- lixinger_python-0.3.8/CLAUDE.md +0 -256
- lixinger_python-0.3.8/DOCS.md +0 -334
- lixinger_python-0.3.8/SETUP.md +0 -383
- lixinger_python-0.3.8/fund_response.json +0 -1
- lixinger_python-0.3.8/mypy.ini +0 -5
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/.env.example +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/.github/copilot-instructions.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/.github/workflows/README.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/.github/workflows/pr-checks.yml +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/.gitignore +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/.pre-commit-config.yaml +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/.python-version +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/CHANGELOG.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/LICENSE +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/MANIFEST.in +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/README.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/codecov.yml +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/client.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/company/announcement.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/company/candlestick.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/company/company.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/company/dividend.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/company/equity_change.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/company/fs/non_financial.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/company/fundamental/bank.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/company/fundamental/insurance.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/company/fundamental/non_financial.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/company/fundamental/other_financial.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/company/fundamental/security.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/company/indices.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/company/profile.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/fund/announcement.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/fund/asset_combination.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/fund/asset_industry_combination.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/fund/candlestick.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/fund/fund.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/fund/profile.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/fund/shareholdings.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/index/candlestick.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/index/constituent_weightings.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/index/constituents.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/index/drawdown.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/index/fundamental.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/index/index.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/index/tracking_fund.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/api/overview.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/development/code-style.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/development/contributing.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/development/testing.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/examples/company.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/examples/fund.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/examples/index.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/getting-started/configuration.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/getting-started/installation.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/getting-started/quickstart.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/docs/index.md +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/examples/company_example.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/examples/dividend_example.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/examples/fs_example.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/examples/index_constituent_weightings_example.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/examples/index_constituents_example.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/examples/index_info_example.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/__init__.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/__init__.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/__init__.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/announcement.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/candlestick.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/company.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/dividend.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/equity_change.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/fs/__init__.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/fs/bank.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/fs/insurance.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/fs/non_financial.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/fs/other_financial.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/fs/security.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/fundamental/__init__.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/fundamental/bank.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/fundamental/insurance.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/fundamental/non_financial.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/fundamental/other_financial.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/fundamental/security.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/indices.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/company/profile.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/fund/__init__.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/fund/announcement.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/fund/asset_combination.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/fund/asset_industry_combination.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/fund/candlestick.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/fund/fund.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/fund/profile.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/fund/shareholdings.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/index/candlestick.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/index/constituent_weightings.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/index/constituents.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/index/drawdown.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/index/fs/__init__.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/index/fs/bank.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/index/fs/hybrid.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/index/fs/non_financial.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/index/fs/security.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/index/fundamental.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/index/index.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/api/cn/index/tracking_fund.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/config.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/__init__.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/__init__.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/__init__.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/announcement.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/candlestick.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/company.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/dividend.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/equity_change.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/fs/__init__.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/fs/bank.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/fs/insurance.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/fs/non_financial.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/fs/other_financial.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/fs/security.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/fundamental/__init__.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/fundamental/bank.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/fundamental/insurance.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/fundamental/non_financial.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/fundamental/other_financial.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/fundamental/security.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/company/indices.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/fund/__init__.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/fund/announcement.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/fund/asset_combination.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/fund/asset_industry_combination.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/fund/candlestick.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/fund/fund.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/fund/profile.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/fund/shareholdings.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/index/candlestick.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/index/constituent_weightings.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/index/constituents.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/index/drawdown.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/index/fs/__init__.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/index/fs/bank.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/index/fs/hybrid.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/index/fs/non_financial.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/index/fs/security.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/index/fundamental.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/index/index.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/models/cn/index/tracking_fund.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/py.typed +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/utils/__init__.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/utils/api.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/utils/dataframe.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/utils/dict.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/lixinger/utils/retry.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/mkdocs.yml +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/scripts/generate_docs.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/scripts/publish.sh +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/api/cn/company/test_announcement.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/api/cn/company/test_dividend.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/api/cn/index/test_constituents.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/conftest.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_bank_statements.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_candlestick.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_client.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_cn_index_candlestick.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_cn_index_constituent_weightings.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_company.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_company_profile.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_equity_change.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_fund.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_fund_announcement.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_fund_asset_combination.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_fund_asset_industry_combination.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_fund_candlestick.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_fund_profile.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_fund_shareholdings.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_fundamental.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_fundamental_bank.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_fundamental_security.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_index.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_index_constituents.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_index_drawdown.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_index_fs_bank.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_index_fs_hybrid.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_index_fs_non_financial.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_index_fs_security.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_index_fundamental.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_indices.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_insurance_statements.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_integration.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_non_financial_statements.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_other_financial_statements.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_security_statements.py +0 -0
- {lixinger_python-0.3.8 → lixinger_python-0.3.10}/tests/test_tracking_fund.py +0 -0
|
@@ -10,15 +10,19 @@ preview = false
|
|
|
10
10
|
select = [
|
|
11
11
|
# Pyflakes (F) - catch common errors
|
|
12
12
|
"F",
|
|
13
|
-
# Pycodestyle (E, W) - PEP 8 style guide
|
|
13
|
+
# Pycodestyle (E, W) - PEP 8 style guide (E722 = bare except)
|
|
14
14
|
"E",
|
|
15
15
|
"W",
|
|
16
16
|
# isort (I) - import sorting
|
|
17
17
|
"I",
|
|
18
|
-
# pep8-naming (N) - naming conventions
|
|
18
|
+
# pep8-naming (N) - PEP 8 naming conventions
|
|
19
19
|
"N",
|
|
20
|
-
# pydocstyle (D) - docstring conventions
|
|
20
|
+
# pydocstyle (D) - docstring conventions (Google style enforced below)
|
|
21
21
|
"D",
|
|
22
|
+
# flake8-annotations (ANN) - require type hints on function signatures
|
|
23
|
+
"ANN",
|
|
24
|
+
# flake8-blind-except (BLE) - forbid bare / overly broad except
|
|
25
|
+
"BLE",
|
|
22
26
|
# pyupgrade (UP) - upgrade syntax for newer Python versions
|
|
23
27
|
"UP",
|
|
24
28
|
# flake8-bugbear (B) - find bugs and design problems
|
|
@@ -43,7 +47,7 @@ select = [
|
|
|
43
47
|
"PGH",
|
|
44
48
|
# Pylint (PL) - additional checks
|
|
45
49
|
"PL",
|
|
46
|
-
# tryceratops (TRY) - exception handling
|
|
50
|
+
# tryceratops (TRY) - exception handling (TRY002 forbids `raise Exception`)
|
|
47
51
|
"TRY",
|
|
48
52
|
# flake8-type-checking (TCH) - type checking imports
|
|
49
53
|
"TCH",
|
|
@@ -64,6 +68,10 @@ ignore = [
|
|
|
64
68
|
"D104", # Missing docstring in public package
|
|
65
69
|
"D105", # Missing docstring in magic method
|
|
66
70
|
"D107", # Missing docstring in __init__
|
|
71
|
+
# Type-hint relaxations: `self`/`cls` and **kwargs need not be annotated
|
|
72
|
+
"ANN101", # Missing type annotation for self
|
|
73
|
+
"ANN102", # Missing type annotation for cls
|
|
74
|
+
"ANN401", # Allow `typing.Any` (SDK returns generic API payloads)
|
|
67
75
|
# Allow relative imports
|
|
68
76
|
"TID252",
|
|
69
77
|
# Allow print statements (useful for debugging)
|
|
@@ -99,6 +107,8 @@ ignore = [
|
|
|
99
107
|
"S101", # Use of assert
|
|
100
108
|
"ARG", # Unused arguments
|
|
101
109
|
"PLR2004", # Magic numbers
|
|
110
|
+
"ANN", # Type annotations not required in tests
|
|
111
|
+
"D", # Docstrings not required in tests
|
|
102
112
|
]
|
|
103
113
|
"data_provider/**/*.py" = [
|
|
104
114
|
"ERA001", # Remove commented-out code
|
|
@@ -111,6 +121,13 @@ ignore = [
|
|
|
111
121
|
"app.py" = [
|
|
112
122
|
"F401", # Unused imports (Flask decorators)
|
|
113
123
|
]
|
|
124
|
+
# Examples & scripts: relaxed docstring / annotation requirements
|
|
125
|
+
"examples/**/*.py" = ["ANN", "D"]
|
|
126
|
+
"scripts/**/*.py" = ["ANN", "D"]
|
|
127
|
+
|
|
128
|
+
[lint.pydocstyle]
|
|
129
|
+
# Enforce Google-style docstrings (required for MkDocs / mkdocstrings)
|
|
130
|
+
convention = "google"
|
|
114
131
|
|
|
115
132
|
[lint.isort]
|
|
116
133
|
known-first-party = ["analyzer", "core", "data_provider"]
|
|
@@ -6,7 +6,11 @@
|
|
|
6
6
|
|
|
7
7
|
## 🎯 三步添加新 API
|
|
8
8
|
|
|
9
|
-
### 1️⃣
|
|
9
|
+
### 1️⃣ 读文档
|
|
10
|
+
|
|
11
|
+
所有API文档都放在了 [lixinger-api](./lixinger-api/)下, 首先阅读 [REMINDER.md](./lixinger-api/REMINDER.md) 了解注意事项, 然后阅读具体的 API 文档, 例如 [lixinger-api/cn/company/financials.md](./lixinger-api/cn/company/financials.md) 了解具体的参数和返回值。
|
|
12
|
+
|
|
13
|
+
### 2️⃣ 写代码 + Docstrings
|
|
10
14
|
|
|
11
15
|
```python
|
|
12
16
|
# lixinger/api/cn/company/your_api.py
|
|
@@ -49,7 +53,7 @@ class YourAPI(BaseAPI):
|
|
|
49
53
|
|
|
50
54
|
---
|
|
51
55
|
|
|
52
|
-
###
|
|
56
|
+
### 3️⃣ 生成文档
|
|
53
57
|
|
|
54
58
|
**方式 A: 自动生成(推荐)**
|
|
55
59
|
|
|
@@ -79,7 +83,7 @@ EOF
|
|
|
79
83
|
|
|
80
84
|
---
|
|
81
85
|
|
|
82
|
-
###
|
|
86
|
+
### 4️⃣ 预览 & 部署
|
|
83
87
|
|
|
84
88
|
```bash
|
|
85
89
|
# 本地预览
|
|
@@ -167,6 +171,8 @@ async def method_name(param: type) -> return_type:
|
|
|
167
171
|
return data
|
|
168
172
|
```
|
|
169
173
|
|
|
174
|
+
参考@DOCUMENTATION.md了解项目的文档规范和 Docstring 规范。
|
|
175
|
+
|
|
170
176
|
---
|
|
171
177
|
|
|
172
178
|
## 🧪 测试模板
|
|
@@ -191,13 +197,3 @@ async def test_your_api(monkeypatch):
|
|
|
191
197
|
|
|
192
198
|
assert not df.empty
|
|
193
199
|
```
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
## 🔗 完整文档
|
|
198
|
-
|
|
199
|
-
详细指南请查看:[ADD_NEW_API.md](ADD_NEW_API.md)
|
|
200
|
-
|
|
201
|
-
---
|
|
202
|
-
|
|
203
|
-
**重点**:只要写好 docstrings,文档会自动生成!✨
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# 🏛️ ARCHITECTURE
|
|
2
|
+
|
|
3
|
+
> Lixinger Python SDK 架构简述
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. 设计原则
|
|
8
|
+
|
|
9
|
+
| 原则 | 说明 |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| **完全异步** | 所有 API 方法为 `async def`,底层 `httpx.AsyncClient` |
|
|
12
|
+
| **端点驱动目录** | 目录严格镜像 REST 路径:`/cn/company/fs/bank` → `lixinger/api/cn/company/fs/bank.py` |
|
|
13
|
+
| **类型安全** | 全量类型注解 + Pandera DataFrame Schema,`mypy` 严格 |
|
|
14
|
+
| **两种调用形态** | `AsyncLixingerClient`(OO)与 `get_xxx()`(函数式)共享同一底层 |
|
|
15
|
+
| **单一 HTTP 出口** | 端点模块**只能**通过 `BaseAPI._request` 发起请求,重试/限速/鉴权/异常映射集中在一处 |
|
|
16
|
+
| **DataFrame 一体化** | 所有 API 返回 `pandas.DataFrame`,字段自动 `camelCase → snake_case`,经 Pandera 校验 |
|
|
17
|
+
| **API Key 只来自环境变量** | 强制 `LIXINGER_API_KEY`,不可通过参数传入 |
|
|
18
|
+
| **文档即代码** | MkDocs + mkdocstrings 从 docstring 自动生成 API 参考 |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 2. 分层结构
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Layer 4 Public Surface lixinger/__init__.py
|
|
26
|
+
└── AsyncLixingerClient / get_xxx() / 异常类
|
|
27
|
+
Layer 3 Endpoint Modules lixinger/api/cn/**/*.py
|
|
28
|
+
└── XxxAPI 类 + get_xxx() 函数 + Namespace 聚合
|
|
29
|
+
Layer 2 BaseAPI lixinger/api/base.py
|
|
30
|
+
└── _request():唯一网络出口(重试 + 限速 + 鉴权 + 解包)
|
|
31
|
+
Layer 1 Infrastructure lixinger/utils/*
|
|
32
|
+
└── httpx / RateLimiter / Retry / Config / Pandera
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 3. 目录结构
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
lixinger-python/
|
|
41
|
+
├── lixinger/ # SDK 主包(client / config / exceptions / __init__)
|
|
42
|
+
│ ├── api/ # Layer 2+3:base.py + 按 REST 路径组织的端点模块
|
|
43
|
+
│ │ └── cn/ # 中国大陆市场
|
|
44
|
+
│ │ ├── company/ # /cn/company/*(含 fs/ 与 fundamental/ 按公司类型细分)
|
|
45
|
+
│ │ ├── index/ # /cn/index/*(含 fs/ 按指数类型细分)
|
|
46
|
+
│ │ └── fund/ # /cn/fund/*
|
|
47
|
+
│ ├── models/ # Pandera DataFrame Schema(结构镜像 api/)
|
|
48
|
+
│ └── utils/ # rate_limiter / retry / dataframe / dict / api 装饰器
|
|
49
|
+
│
|
|
50
|
+
├── tests/ # pytest(含 integration 标记)
|
|
51
|
+
├── examples/ # 各模块使用示例
|
|
52
|
+
├── scripts/ # explore_api / generate_docs / publish
|
|
53
|
+
├── docs/ # MkDocs 源文件
|
|
54
|
+
├── lixinger-api/ # 官方 API 文档镜像(cn/hk/us/macro)
|
|
55
|
+
├── mkdocs.yml
|
|
56
|
+
├── pyproject.toml # uv / ruff / mypy / pytest 配置
|
|
57
|
+
└── .env(.example) # 环境变量
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**核心约束**:目录路径必须与 REST 端点一一对应。端点 `/cn/index/fs/hybrid` → `lixinger/api/cn/index/fs/hybrid.py` → `lixinger/models/cn/index/fs/hybrid.py`。
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
This is a Python SDK for the Lixinger API, which provides financial data services. The project is in early development stages.
|
|
8
|
+
|
|
9
|
+
- **API Documentation**: https://www.lixinger.com/open/api/doc?api-key=cn/company/fundamental/non_financial
|
|
10
|
+
- **API Endpoint**: `https://open.lixinger.com/api`
|
|
11
|
+
- **Python Version**: 3.13+
|
|
12
|
+
- **Package Manager**: uv (fast Python package installer)
|
|
13
|
+
- **Main Dependencies**: httpx (with SOCKS proxy support), python-dotenv, pydantic
|
|
14
|
+
|
|
15
|
+
## Configuration
|
|
16
|
+
|
|
17
|
+
**IMPORTANT**: The SDK uses environment variables for configuration via dotenv. The API key is ALWAYS loaded from the `.env` file and CANNOT be passed as a parameter.
|
|
18
|
+
|
|
19
|
+
1. **Setup**: Copy `.env.example` to `.env` and configure:
|
|
20
|
+
```bash
|
|
21
|
+
cp .env.example .env
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
2. **Required Environment Variables**:
|
|
25
|
+
- `LIXINGER_API_KEY` - Your Lixinger API key (REQUIRED - cannot be passed as parameter)
|
|
26
|
+
|
|
27
|
+
3. **Optional Environment Variables**:
|
|
28
|
+
- `LIXINGER_BASE_URL` - Custom API base URL (default: https://open.lixinger.com/api)
|
|
29
|
+
- `LIXINGER_TIMEOUT` - Request timeout in seconds (default: 30.0)
|
|
30
|
+
- `LIXINGER_MAX_RETRIES` - Maximum retry attempts (default: 3)
|
|
31
|
+
- `LIXINGER_PROXY` - Proxy URL, supports SOCKS (default: None)
|
|
32
|
+
- `LIXINGER_MAX_REQUESTS_PER_MINUTE` - Rate limit (default: 1000)
|
|
33
|
+
|
|
34
|
+
## Development Commands
|
|
35
|
+
|
|
36
|
+
### Setup
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Install dependencies using uv
|
|
40
|
+
uv sync --dev
|
|
41
|
+
|
|
42
|
+
# Install pre-commit hooks (IMPORTANT!)
|
|
43
|
+
uv run pre-commit install
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Running
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Run the main script
|
|
50
|
+
uv run python main.py
|
|
51
|
+
|
|
52
|
+
# Run examples (make sure .env is configured first)
|
|
53
|
+
uv run python examples/company_example.py
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Linting
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Run Ruff linter
|
|
60
|
+
uv run ruff check .
|
|
61
|
+
|
|
62
|
+
# Auto-fix linting issues
|
|
63
|
+
uv run ruff check . --fix
|
|
64
|
+
|
|
65
|
+
# Format code
|
|
66
|
+
uv run ruff format .
|
|
67
|
+
|
|
68
|
+
# Check formatting (used in CI)
|
|
69
|
+
uv run ruff format --check .
|
|
70
|
+
|
|
71
|
+
# Run Mypy type checker
|
|
72
|
+
uv run mypy lixinger/
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Testing
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# Run all tests
|
|
79
|
+
uv run pytest
|
|
80
|
+
|
|
81
|
+
# Run only unit tests (fast, no API key needed)
|
|
82
|
+
uv run pytest -m "not integration"
|
|
83
|
+
|
|
84
|
+
# Run integration tests (requires valid API key in .env)
|
|
85
|
+
uv run pytest -m integration
|
|
86
|
+
|
|
87
|
+
# Run specific test file
|
|
88
|
+
uv run pytest tests/test_client.py
|
|
89
|
+
|
|
90
|
+
# Run with coverage
|
|
91
|
+
uv run pytest --cov=lixinger
|
|
92
|
+
|
|
93
|
+
# Explore API and record real responses
|
|
94
|
+
uv run python scripts/explore_api.py
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
## Hard Constraints
|
|
99
|
+
|
|
100
|
+
- Always using the python via `uv run python`
|
|
101
|
+
- Always using `~=` in `pyproject.toml` for dependencies and always use `uv` for package management.
|
|
102
|
+
- Update [ARCHITECTURE.md](/.ARCHITECTURE.md) if you add / change project structure.
|
|
103
|
+
- Work on one feature at a time
|
|
104
|
+
- Only start the next feature after the current one passes end-to-end verification
|
|
105
|
+
- Don't "also refactor" feature B while implementing feature A
|
|
106
|
+
- All code must pass lint check
|
|
107
|
+
- Run `load_dotenv()` to load environment variables from `.env` file if not already done when running python code.
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# References
|
|
111
|
+
|
|
112
|
+
Read @ADD_NEW_API_QUICK.md to quickly add new API endpoints and models.
|
|
113
|
+
Read @PUBLISHING.md to learn how to publish the SDK to PyPI.
|
|
114
|
+
Read @ARCHITECTURE.md to understand the SDK's architecture and design principles.
|
|
115
|
+
Read @.github/workflows/README.md to understand the CI/CD workflow.
|
|
116
|
+
Read @DOCUMENTATION.md to understand how to write docstrings and generate documentation.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
## Documentation
|
|
3
|
+
|
|
4
|
+
This project uses **MkDocs + mkdocstrings** to automatically generate API documentation from docstrings.
|
|
5
|
+
|
|
6
|
+
**Requirements when adding new APIs**:
|
|
7
|
+
- ✅ Write complete Google-style docstrings
|
|
8
|
+
- ✅ Include `Args`, `Returns`, and `Example` sections
|
|
9
|
+
- ✅ Use full type annotations
|
|
10
|
+
|
|
11
|
+
**Quick workflow**:
|
|
12
|
+
```bash
|
|
13
|
+
# 1. Write code with docstrings
|
|
14
|
+
# 2. Generate docs
|
|
15
|
+
uv run python scripts/generate_docs.py
|
|
16
|
+
# 3. Preview
|
|
17
|
+
uv run mkdocs serve
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Important**:
|
|
21
|
+
- ✅ DO commit: `docs/` (source files), `mkdocs.yml`
|
|
22
|
+
- ❌ DON'T commit: `site/` (auto-generated)
|
|
@@ -142,6 +142,10 @@ git tag -a v0.1.0 -m "Release version 0.1.0"
|
|
|
142
142
|
git push origin v0.1.0
|
|
143
143
|
```
|
|
144
144
|
|
|
145
|
+
### Step 10: Update CHANGELOG.md
|
|
146
|
+
|
|
147
|
+
Update `CHANGELOG.md` with the changes in this release.
|
|
148
|
+
|
|
145
149
|
## Using in Another Project
|
|
146
150
|
|
|
147
151
|
After publishing, you can use it in your other project:
|
|
@@ -168,65 +172,6 @@ with LixingerClient() as client:
|
|
|
168
172
|
print(df)
|
|
169
173
|
```
|
|
170
174
|
|
|
171
|
-
## Automation with GitHub Actions (Optional)
|
|
172
|
-
|
|
173
|
-
You can automate releases with GitHub Actions. Create `.github/workflows/publish.yml`:
|
|
174
|
-
|
|
175
|
-
```yaml
|
|
176
|
-
name: Publish to PyPI
|
|
177
|
-
|
|
178
|
-
on:
|
|
179
|
-
release:
|
|
180
|
-
types: [published]
|
|
181
|
-
|
|
182
|
-
jobs:
|
|
183
|
-
publish:
|
|
184
|
-
runs-on: ubuntu-latest
|
|
185
|
-
steps:
|
|
186
|
-
- uses: actions/checkout@v4
|
|
187
|
-
|
|
188
|
-
- name: Set up Python
|
|
189
|
-
uses: actions/setup-python@v5
|
|
190
|
-
with:
|
|
191
|
-
python-version: '3.13'
|
|
192
|
-
|
|
193
|
-
- name: Install dependencies
|
|
194
|
-
run: |
|
|
195
|
-
pip install build twine
|
|
196
|
-
|
|
197
|
-
- name: Build package
|
|
198
|
-
run: python -m build
|
|
199
|
-
|
|
200
|
-
- name: Publish to PyPI
|
|
201
|
-
env:
|
|
202
|
-
TWINE_USERNAME: __token__
|
|
203
|
-
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
|
|
204
|
-
run: twine upload dist/*
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
Then add `PYPI_API_TOKEN` to your GitHub repository secrets.
|
|
208
|
-
|
|
209
|
-
## Troubleshooting
|
|
210
|
-
|
|
211
|
-
### Error: Package already exists
|
|
212
|
-
|
|
213
|
-
- You cannot re-upload the same version
|
|
214
|
-
- Increment the version number in `pyproject.toml`
|
|
215
|
-
|
|
216
|
-
### Error: Invalid credentials
|
|
217
|
-
|
|
218
|
-
- Check your `~/.pypirc` file
|
|
219
|
-
- Ensure API token is correct and has upload permissions
|
|
220
|
-
|
|
221
|
-
### Error: Package name already taken
|
|
222
|
-
|
|
223
|
-
- Choose a different name in `pyproject.toml`
|
|
224
|
-
- Try variations like `lixinger-sdk`, `pylixinger`, etc.
|
|
225
|
-
|
|
226
|
-
### Import errors after installation
|
|
227
|
-
|
|
228
|
-
- Ensure `lixinger/__init__.py` properly exports all public APIs
|
|
229
|
-
- Check that all required files are included in MANIFEST.in
|
|
230
175
|
|
|
231
176
|
## Best Practices
|
|
232
177
|
|
|
@@ -236,11 +181,4 @@ Then add `PYPI_API_TOKEN` to your GitHub repository secrets.
|
|
|
236
181
|
4. **Write a CHANGELOG.md** to document changes between versions
|
|
237
182
|
5. **Never commit sensitive files** like `.pypirc` or `.env`
|
|
238
183
|
6. **Follow semantic versioning** for version numbers
|
|
239
|
-
7. **Run all tests** before publishing
|
|
240
|
-
|
|
241
|
-
## Additional Resources
|
|
242
|
-
|
|
243
|
-
- [Python Packaging User Guide](https://packaging.python.org/)
|
|
244
|
-
- [PyPI Help](https://pypi.org/help/)
|
|
245
|
-
- [Semantic Versioning](https://semver.org/)
|
|
246
|
-
- [uv Documentation](https://docs.astral.sh/uv/)
|
|
184
|
+
7. **Run all tests** before publishing
|
|
@@ -15,7 +15,7 @@ async def main():
|
|
|
15
15
|
try:
|
|
16
16
|
df = await client.company.get_profile(stock_codes=["600036"])
|
|
17
17
|
print(df)
|
|
18
|
-
except Exception as e:
|
|
18
|
+
except Exception as e: # noqa: BLE001
|
|
19
19
|
print(f"Error fetching profile: {e}")
|
|
20
20
|
print("Note: This example requires a valid LIXINGER_API_KEY in .env")
|
|
21
21
|
finally:
|
|
@@ -26,7 +26,7 @@ async def main():
|
|
|
26
26
|
try:
|
|
27
27
|
df = await get_profile(stock_codes=["000001"])
|
|
28
28
|
print(df)
|
|
29
|
-
except Exception as e:
|
|
29
|
+
except Exception as e: # noqa: BLE001
|
|
30
30
|
print(f"Error fetching profile: {e}")
|
|
31
31
|
|
|
32
32
|
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""Index margin trading and securities lending API example.
|
|
2
|
+
|
|
3
|
+
This example demonstrates how to use the index margin trading API to retrieve
|
|
4
|
+
daily margin trading (融资) and securities lending (融券) metrics for an index.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import asyncio
|
|
8
|
+
|
|
9
|
+
from lixinger import AsyncLixingerClient, get_index_margin_trading
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
async def main():
|
|
13
|
+
"""Demonstrate usage of index margin trading API."""
|
|
14
|
+
# Method 1: Using the async client with context manager (recommended)
|
|
15
|
+
print("Method 1: Using async client...")
|
|
16
|
+
async with AsyncLixingerClient() as client:
|
|
17
|
+
# Get margin trading data for SSE 50 index
|
|
18
|
+
print("\nFetching margin trading data for SSE 50 (000016)...")
|
|
19
|
+
df = await client.cn_index.margin_trading.get_margin_trading(
|
|
20
|
+
stock_code="000016",
|
|
21
|
+
start_date="2025-06-13",
|
|
22
|
+
end_date="2026-06-13",
|
|
23
|
+
)
|
|
24
|
+
print(f"Total records: {len(df)}")
|
|
25
|
+
print("\nLatest 5 records:")
|
|
26
|
+
print(
|
|
27
|
+
df.head(5)[
|
|
28
|
+
[
|
|
29
|
+
"date",
|
|
30
|
+
"financing_balance",
|
|
31
|
+
"financing_net_purchase_amount",
|
|
32
|
+
"securities_balance",
|
|
33
|
+
"securities_net_sell_amount",
|
|
34
|
+
]
|
|
35
|
+
]
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# Analyze balance distribution
|
|
39
|
+
print("\nFinancing balance statistics:")
|
|
40
|
+
print(df["financing_balance"].describe())
|
|
41
|
+
|
|
42
|
+
# Method 2: Using functional API with limit parameter
|
|
43
|
+
print("\nMethod 2: Using functional API (last 10 days)...")
|
|
44
|
+
df = await get_index_margin_trading(
|
|
45
|
+
stock_code="000300", # CSI 300
|
|
46
|
+
start_date="2025-06-01",
|
|
47
|
+
limit=10,
|
|
48
|
+
)
|
|
49
|
+
print(f"Total records: {len(df)}")
|
|
50
|
+
print(df.head(10))
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
if __name__ == "__main__":
|
|
54
|
+
asyncio.run(main())
|
|
@@ -34,6 +34,7 @@ from lixinger.api.cn.index import (
|
|
|
34
34
|
get_index_bank_statements,
|
|
35
35
|
get_index_fundamental,
|
|
36
36
|
get_index_hybrid_statements,
|
|
37
|
+
get_index_margin_trading,
|
|
37
38
|
get_index_non_financial_statements,
|
|
38
39
|
get_index_security_statements,
|
|
39
40
|
get_tracking_fund,
|
|
@@ -75,6 +76,7 @@ __all__ = [
|
|
|
75
76
|
"get_constituent_weightings",
|
|
76
77
|
"get_index_fundamental",
|
|
77
78
|
"get_tracking_fund",
|
|
79
|
+
"get_index_margin_trading",
|
|
78
80
|
"get_candlestick",
|
|
79
81
|
"get_index_candlestick",
|
|
80
82
|
"get_index_drawdown",
|
|
@@ -37,7 +37,7 @@ class BaseAPI:
|
|
|
37
37
|
client: httpx.AsyncClient | None = None,
|
|
38
38
|
config: Config | None = None,
|
|
39
39
|
rate_limiter: AsyncRateLimiter | None = None,
|
|
40
|
-
):
|
|
40
|
+
) -> None:
|
|
41
41
|
self._client = client
|
|
42
42
|
self._config = config or settings
|
|
43
43
|
self._rate_limiter = rate_limiter or _global_rate_limiter
|
|
@@ -37,7 +37,7 @@ class FundamentalNamespace:
|
|
|
37
37
|
insurance: InsuranceFundamentalAPI,
|
|
38
38
|
security: SecurityFundamentalAPI,
|
|
39
39
|
other_financial: OtherFinancialFundamentalAPI,
|
|
40
|
-
):
|
|
40
|
+
) -> None:
|
|
41
41
|
"""Initialize the fundamental namespace."""
|
|
42
42
|
self.non_financial = non_financial
|
|
43
43
|
self.bank = bank
|
|
@@ -65,7 +65,7 @@ class FSNamespace:
|
|
|
65
65
|
insurance: InsuranceStatementAPI,
|
|
66
66
|
security: SecurityStatementAPI,
|
|
67
67
|
other_financial: OtherFinancialStatementAPI,
|
|
68
|
-
):
|
|
68
|
+
) -> None:
|
|
69
69
|
"""Initialize the financial statement namespace."""
|
|
70
70
|
self.non_financial = non_financial
|
|
71
71
|
self.bank = bank
|
|
@@ -121,7 +121,7 @@ class CompanyNamespace:
|
|
|
121
121
|
indices: IndicesAPI,
|
|
122
122
|
dividend: DividendAPI,
|
|
123
123
|
announcement: AnnouncementAPI,
|
|
124
|
-
):
|
|
124
|
+
) -> None:
|
|
125
125
|
"""Initialize the company namespace.
|
|
126
126
|
|
|
127
127
|
Args:
|
|
@@ -22,6 +22,10 @@ from lixinger.api.cn.index.fundamental import (
|
|
|
22
22
|
get_index_fundamental,
|
|
23
23
|
)
|
|
24
24
|
from lixinger.api.cn.index.index import IndexAPI, get_index
|
|
25
|
+
from lixinger.api.cn.index.margin_trading import (
|
|
26
|
+
IndexMarginTradingAPI,
|
|
27
|
+
get_index_margin_trading,
|
|
28
|
+
)
|
|
25
29
|
from lixinger.api.cn.index.tracking_fund import TrackingFundAPI, get_tracking_fund
|
|
26
30
|
|
|
27
31
|
__all__ = [
|
|
@@ -37,6 +41,8 @@ __all__ = [
|
|
|
37
41
|
"get_drawdown",
|
|
38
42
|
"IndexFundamentalAPI",
|
|
39
43
|
"get_index_fundamental",
|
|
44
|
+
"IndexMarginTradingAPI",
|
|
45
|
+
"get_index_margin_trading",
|
|
40
46
|
"TrackingFundAPI",
|
|
41
47
|
"get_tracking_fund",
|
|
42
48
|
# Index financial statements
|