akshare 1.13.46__py3-none-any.whl → 1.17.99__py3-none-any.whl
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.
- akshare/__init__.py +757 -161
- akshare/air/air_hebei.py +79 -53
- akshare/air/air_zhenqi.py +3 -7
- akshare/air/cons.py +1 -0
- akshare/air/crypto.js +1 -1
- akshare/air/outcrypto.js +1 -1
- akshare/air/sunrise_tad.py +32 -17
- akshare/article/cons.py +1 -0
- akshare/article/epu_index.py +4 -3
- akshare/article/ff_factor.py +19 -8
- akshare/article/fred_md.py +4 -1
- akshare/article/risk_rv.py +3 -8
- akshare/bank/bank_cbirc_2020.py +11 -11
- akshare/bank/cons.py +7 -6
- akshare/bond/bond_buy_back_em.py +228 -0
- akshare/bond/bond_cb_sina.py +1 -0
- akshare/bond/bond_cb_ths.py +17 -9
- akshare/bond/bond_cbond.py +19 -14
- akshare/bond/bond_china.py +38 -39
- akshare/bond/bond_china_money.py +75 -48
- akshare/bond/bond_convert.py +10 -9
- akshare/bond/bond_em.py +37 -17
- akshare/bond/bond_info_cm.py +28 -8
- akshare/bond/bond_issue_cninfo.py +73 -30
- akshare/bond/bond_summary.py +38 -37
- akshare/bond/bond_zh_cov.py +31 -40
- akshare/bond/bond_zh_sina.py +61 -51
- akshare/bond/cons.py +14 -11
- akshare/cal/__init__.py +0 -0
- akshare/cal/rv.py +170 -0
- akshare/cost/cost_living.py +7 -5
- akshare/crypto/__init__.py +1 -1
- akshare/crypto/crypto_bitcoin_cme.py +9 -7
- akshare/crypto/crypto_hold.py +4 -2
- akshare/currency/currency.py +1 -0
- akshare/currency/currency_china_bank_sina.py +11 -6
- akshare/currency/currency_safe.py +7 -6
- akshare/data/__init__.py +1 -1
- akshare/data/cninfo.js +1 -1
- akshare/datasets.py +10 -21
- akshare/economic/cons.py +10 -3
- akshare/economic/macro_australia.py +74 -69
- akshare/economic/macro_bank.py +95 -653
- akshare/economic/macro_canada.py +92 -81
- akshare/economic/macro_china.py +163 -117
- akshare/economic/macro_china_hk.py +0 -1
- akshare/economic/macro_china_nbs.py +24 -7
- akshare/economic/macro_euro.py +103 -56
- akshare/economic/macro_finance_ths.py +135 -0
- akshare/economic/macro_germany.py +1 -1
- akshare/economic/macro_info_ws.py +100 -0
- akshare/economic/macro_japan.py +0 -1
- akshare/economic/macro_other.py +1 -6
- akshare/economic/macro_swiss.py +2 -3
- akshare/economic/macro_uk.py +1 -1
- akshare/economic/macro_usa.py +7 -9
- akshare/economic/marco_cnbs.py +11 -6
- akshare/energy/energy_carbon.py +94 -126
- akshare/energy/energy_oil_em.py +1 -2
- akshare/event/cons.py +1 -0
- akshare/event/migration.py +3 -2
- akshare/exceptions.py +43 -0
- akshare/file_fold/calendar.json +245 -2
- akshare/forex/__init__.py +0 -0
- akshare/forex/cons.py +192 -0
- akshare/forex/forex_em.py +149 -0
- akshare/fortune/fortune_500.py +15 -48
- akshare/fortune/fortune_bloomberg.py +6 -3
- akshare/fortune/fortune_forbes_500.py +3 -6
- akshare/fortune/fortune_hurun.py +2 -1
- akshare/fortune/fortune_xincaifu_500.py +17 -14
- akshare/fund/fund_amac.py +38 -15
- akshare/fund/fund_announcement_em.py +145 -0
- akshare/fund/fund_aum_em.py +49 -35
- akshare/fund/fund_em.py +251 -220
- akshare/fund/fund_etf_em.py +44 -35
- akshare/fund/fund_etf_sina.py +76 -27
- akshare/fund/fund_etf_ths.py +95 -0
- akshare/fund/fund_fee_em.py +172 -0
- akshare/fund/fund_fhsp_em.py +42 -32
- akshare/fund/fund_init_em.py +8 -5
- akshare/fund/fund_lof_em.py +12 -19
- akshare/fund/fund_manager.py +25 -11
- akshare/fund/fund_overview_em.py +42 -0
- akshare/fund/fund_portfolio_em.py +78 -66
- akshare/fund/fund_position_lg.py +19 -8
- akshare/fund/fund_rank_em.py +90 -84
- akshare/fund/fund_rating.py +33 -12
- akshare/fund/fund_report_cninfo.py +63 -48
- akshare/fund/fund_scale_em.py +24 -13
- akshare/fund/fund_scale_sina.py +20 -10
- akshare/fund/fund_xq.py +3 -2
- akshare/futures/cons.py +141 -46
- akshare/futures/cot.py +89 -88
- akshare/futures/futures_basis.py +99 -33
- akshare/futures/futures_comex_em.py +1 -0
- akshare/futures/futures_comm_ctp.py +13 -2
- akshare/futures/futures_contract_detail.py +59 -9
- akshare/futures/futures_daily_bar.py +75 -62
- akshare/futures/futures_foreign.py +14 -8
- akshare/futures/futures_hf_em.py +215 -61
- akshare/futures/futures_hist_em.py +191 -0
- akshare/futures/futures_hq_sina.py +79 -61
- akshare/futures/futures_index_ccidx.py +24 -82
- akshare/futures/futures_inventory_99.py +70 -272
- akshare/futures/futures_inventory_em.py +14 -11
- akshare/futures/futures_news_shmet.py +2 -2
- akshare/futures/futures_roll_yield.py +11 -24
- akshare/futures/futures_rule.py +7 -3
- akshare/futures/futures_rule_em.py +38 -0
- akshare/futures/futures_settlement_price_sgx.py +21 -6
- akshare/futures/futures_stock_js.py +1 -2
- akshare/futures/futures_to_spot.py +43 -39
- akshare/futures/futures_warehouse_receipt.py +53 -48
- akshare/futures/futures_zh_sina.py +4 -4
- akshare/futures/receipt.py +298 -165
- akshare/futures/requests_fun.py +16 -3
- akshare/futures/symbol_var.py +32 -13
- akshare/futures_derivative/cons.py +100 -103
- akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
- akshare/futures_derivative/futures_contract_info_czce.py +2 -0
- akshare/futures_derivative/futures_contract_info_dce.py +43 -17
- akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
- akshare/futures_derivative/futures_contract_info_ine.py +43 -34
- akshare/futures_derivative/futures_contract_info_shfe.py +7 -8
- akshare/futures_derivative/futures_cot_sina.py +28 -19
- akshare/futures_derivative/futures_index_sina.py +25 -13
- akshare/fx/cons.py +12 -7
- akshare/fx/currency_investing.py +19 -285
- akshare/fx/fx_c_swap_cm.py +62 -0
- akshare/fx/fx_quote.py +3 -2
- akshare/fx/fx_quote_baidu.py +2 -1
- akshare/hf/__init__.py +1 -1
- akshare/hf/hf_sp500.py +8 -7
- akshare/index/cons.py +132 -28
- akshare/index/index_cflp.py +29 -26
- akshare/index/index_cni.py +89 -91
- akshare/index/index_cons.py +26 -10
- akshare/index/index_csindex.py +68 -0
- akshare/index/index_cx.py +263 -62
- akshare/index/index_drewry.py +17 -16
- akshare/index/index_eri.py +1 -0
- akshare/index/index_global_em.py +167 -0
- akshare/index/index_global_sina.py +82 -0
- akshare/index/index_kq_fz.py +17 -14
- akshare/index/index_kq_ss.py +1 -0
- akshare/index/index_option_qvix.py +351 -16
- akshare/index/index_research_sw.py +38 -38
- akshare/index/index_spot.py +9 -5
- akshare/index/index_stock_hk.py +6 -10
- akshare/index/index_stock_us_sina.py +1 -1
- akshare/index/index_stock_zh.py +193 -101
- akshare/index/index_stock_zh_csindex.py +15 -369
- akshare/index/index_sugar.py +18 -4
- akshare/index/index_sw.py +62 -34
- akshare/index/index_yw.py +53 -75
- akshare/index/index_zh_em.py +15 -82
- akshare/interest_rate/interbank_rate_em.py +14 -10
- akshare/movie/artist_yien.py +32 -5
- akshare/movie/jm.js +0 -1
- akshare/movie/movie_yien.py +92 -18
- akshare/movie/video_yien.py +28 -5
- akshare/news/__init__.py +1 -1
- akshare/news/news_baidu.py +395 -220
- akshare/news/news_cctv.py +38 -38
- akshare/news/news_stock.py +49 -13
- akshare/nlp/nlp_interface.py +7 -8
- akshare/option/cons.py +12 -12
- akshare/option/option_comm_qihuo.py +86 -0
- akshare/option/option_commodity.py +355 -211
- akshare/option/option_commodity_sina.py +22 -26
- akshare/option/option_contract_info_ctp.py +63 -0
- akshare/option/option_current_sse.py +61 -0
- akshare/option/option_current_szse.py +84 -0
- akshare/option/option_czce.py +37 -9
- akshare/option/option_daily_stats_sse_szse.py +145 -0
- akshare/option/option_em.py +4 -8
- akshare/option/option_finance.py +60 -12
- akshare/option/option_finance_sina.py +28 -26
- akshare/option/option_lhb_em.py +62 -57
- akshare/option/option_margin.py +62 -0
- akshare/option/option_premium_analysis_em.py +58 -53
- akshare/option/option_risk_analysis_em.py +11 -8
- akshare/option/option_risk_indicator_sse.py +18 -16
- akshare/option/option_value_analysis_em.py +62 -55
- akshare/other/__init__.py +1 -1
- akshare/other/other_car_cpca.py +20 -20
- akshare/pro/__init__.py +0 -1
- akshare/pro/client.py +6 -4
- akshare/pro/cons.py +3 -2
- akshare/pro/data_pro.py +6 -5
- akshare/qdii/__init__.py +0 -0
- akshare/qdii/qdii_jsl.py +233 -0
- akshare/qhkc/__init__.py +1 -6
- akshare/qhkc/qhkc_api.py +64 -22
- akshare/qhkc_web/__init__.py +1 -6
- akshare/qhkc_web/qhkc_fund.py +10 -6
- akshare/qhkc_web/qhkc_index.py +28 -14
- akshare/qhkc_web/qhkc_tool.py +62 -59
- akshare/rate/__init__.py +1 -1
- akshare/rate/repo_rate.py +36 -32
- akshare/reits/__init__.py +1 -1
- akshare/reits/reits_basic.py +149 -13
- akshare/request.py +117 -0
- akshare/spot/__init__.py +1 -1
- akshare/spot/spot_hog_soozhu.py +232 -0
- akshare/spot/spot_price_qh.py +121 -0
- akshare/spot/spot_sge.py +70 -9
- akshare/stock/cons.py +60 -23
- akshare/stock/stock_allotment_cninfo.py +10 -9
- akshare/stock/stock_ask_bid_em.py +3 -78
- akshare/stock/stock_board_concept_em.py +160 -35
- akshare/stock/stock_board_industry_em.py +163 -70
- akshare/stock/stock_cg_equity_mortgage.py +15 -11
- akshare/stock/stock_cg_guarantee.py +41 -51
- akshare/stock/stock_cg_lawsuit.py +36 -35
- akshare/stock/stock_dividend_cninfo.py +36 -16
- akshare/stock/stock_dzjy_em.py +347 -260
- akshare/stock/stock_fund_em.py +73 -64
- akshare/stock/stock_fund_hold.py +1 -2
- akshare/stock/stock_gsrl_em.py +1 -0
- akshare/stock/stock_hk_comparison_em.py +175 -0
- akshare/stock/stock_hk_famous.py +107 -0
- akshare/stock/stock_hk_fhpx_ths.py +2 -1
- akshare/stock/stock_hk_hot_rank_em.py +1 -0
- akshare/stock/stock_hk_sina.py +91 -42
- akshare/stock/stock_hold_control_cninfo.py +100 -15
- akshare/stock/stock_hold_control_em.py +4 -5
- akshare/stock/stock_hold_num_cninfo.py +18 -12
- akshare/stock/stock_hot_rank_em.py +4 -1
- akshare/stock/stock_hot_search_baidu.py +32 -19
- akshare/stock/stock_hot_up_em.py +4 -1
- akshare/stock/stock_hsgt_em.py +155 -0
- akshare/stock/stock_industry.py +1 -0
- akshare/stock/stock_industry_cninfo.py +25 -20
- akshare/stock/stock_industry_pe_cninfo.py +45 -31
- akshare/stock/stock_industry_sw.py +5 -9
- akshare/stock/stock_info.py +31 -19
- akshare/stock/stock_info_em.py +17 -11
- akshare/stock/stock_intraday_em.py +9 -80
- akshare/stock/stock_intraday_sina.py +2 -2
- akshare/stock/stock_ipo_summary_cninfo.py +25 -10
- akshare/stock/stock_new_cninfo.py +32 -19
- akshare/stock/stock_news_cx.py +39 -0
- akshare/stock/stock_profile_cninfo.py +9 -8
- akshare/stock/stock_profile_em.py +302 -0
- akshare/stock/stock_rank_forecast.py +8 -6
- akshare/stock/stock_repurchase_em.py +7 -2
- akshare/stock/stock_share_changes_cninfo.py +18 -14
- akshare/stock/stock_share_hold.py +24 -20
- akshare/stock/stock_stop.py +6 -6
- akshare/stock/stock_summary.py +153 -417
- akshare/stock/stock_us_famous.py +19 -11
- akshare/stock/stock_us_js.py +3 -2
- akshare/stock/stock_us_pink.py +38 -27
- akshare/stock/stock_us_sina.py +15 -12
- akshare/stock/stock_weibo_nlp.py +18 -20
- akshare/stock/stock_xq.py +36 -9
- akshare/stock/stock_zh_a_sina.py +58 -80
- akshare/stock/stock_zh_a_special.py +240 -243
- akshare/stock/stock_zh_a_tick_tx.py +11 -3
- akshare/stock/stock_zh_ah_tx.py +23 -26
- akshare/stock/stock_zh_b_sina.py +32 -55
- akshare/stock/stock_zh_comparison_em.py +250 -0
- akshare/stock/stock_zh_kcb_report.py +11 -9
- akshare/stock/stock_zh_kcb_sina.py +67 -64
- akshare/stock_a/__init__.py +0 -0
- akshare/stock_a/stock_board_concept_name_em.py +170 -0
- akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
- akshare/stock_a/stock_zh_a_spot.py +212 -0
- akshare/stock_feature/cons.py +1 -0
- akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
- akshare/stock_feature/stock_a_high_low.py +5 -2
- akshare/stock_feature/stock_a_indicator.py +15 -57
- akshare/stock_feature/stock_a_pe_and_pb.py +39 -9
- akshare/stock_feature/stock_account_em.py +0 -1
- akshare/stock_feature/stock_all_pb.py +2 -1
- akshare/stock_feature/stock_analyst_em.py +36 -30
- akshare/stock_feature/stock_board_concept_ths.py +144 -252
- akshare/stock_feature/stock_board_industry_ths.py +137 -401
- akshare/stock_feature/stock_buffett_index_lg.py +10 -8
- akshare/stock_feature/stock_classify_sina.py +3 -6
- akshare/stock_feature/stock_comment_em.py +81 -144
- akshare/stock_feature/stock_concept_futu.py +183 -0
- akshare/stock_feature/stock_congestion_lg.py +2 -1
- akshare/stock_feature/stock_cyq_em.py +5 -11
- akshare/stock_feature/stock_disclosure_cninfo.py +20 -10
- akshare/stock_feature/stock_dxsyl_em.py +121 -74
- akshare/stock_feature/stock_ebs_lg.py +5 -4
- akshare/stock_feature/stock_esg_sina.py +33 -15
- akshare/stock_feature/stock_fhps_em.py +62 -26
- akshare/stock_feature/stock_fhps_ths.py +34 -7
- akshare/stock_feature/stock_fund_flow.py +38 -25
- akshare/stock_feature/stock_gddh_em.py +19 -11
- akshare/stock_feature/stock_gdfx_em.py +226 -113
- akshare/stock_feature/stock_gdhs.py +75 -50
- akshare/stock_feature/stock_gdzjc_em.py +21 -10
- akshare/stock_feature/stock_gpzy_em.py +78 -46
- akshare/stock_feature/stock_gxl_lg.py +3 -2
- akshare/stock_feature/stock_hist_em.py +158 -237
- akshare/stock_feature/stock_hist_tx.py +13 -10
- akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
- akshare/stock_feature/stock_hot_xq.py +4 -6
- akshare/stock_feature/stock_hsgt_em.py +269 -97
- akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
- akshare/stock_feature/stock_hsgt_min_em.py +13 -16
- akshare/stock_feature/stock_info.py +8 -81
- akshare/stock_feature/stock_inner_trade_xq.py +38 -31
- akshare/stock_feature/stock_irm_cninfo.py +32 -9
- akshare/stock_feature/stock_jgdy_em.py +43 -40
- akshare/stock_feature/stock_lh_yybpm.py +36 -37
- akshare/stock_feature/stock_lhb_em.py +165 -35
- akshare/stock_feature/stock_lhb_sina.py +93 -46
- akshare/stock_feature/stock_margin_em.py +101 -0
- akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -17
- akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +7 -7
- akshare/stock_feature/stock_market_legu.py +4 -2
- akshare/stock_feature/stock_pankou_em.py +71 -35
- akshare/stock_feature/stock_qsjy_em.py +13 -4
- akshare/stock_feature/stock_report_em.py +152 -8
- akshare/stock_feature/stock_research_report_em.py +55 -20
- akshare/stock_feature/stock_sns_sseinfo.py +15 -12
- akshare/stock_feature/stock_sy_em.py +20 -15
- akshare/stock_feature/stock_technology_ths.py +152 -120
- akshare/stock_feature/stock_tfp_em.py +37 -14
- akshare/stock_feature/stock_three_report_em.py +120 -78
- akshare/stock_feature/stock_ttm_lyr.py +18 -9
- akshare/stock_feature/stock_value_em.py +83 -0
- akshare/stock_feature/stock_yjbb_em.py +58 -32
- akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
- akshare/stock_feature/stock_yjyg_em.py +1 -1
- akshare/stock_feature/stock_yzxdr_em.py +24 -22
- akshare/stock_feature/stock_zdhtmx_em.py +20 -6
- akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
- akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
- akshare/stock_feature/stock_ztb_em.py +39 -24
- akshare/stock_fundamental/__init__.py +1 -1
- akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
- akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
- akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +203 -59
- akshare/stock_fundamental/stock_finance_ths.py +524 -57
- akshare/stock_fundamental/stock_finance_us_em.py +268 -0
- akshare/stock_fundamental/stock_gbjg_em.py +80 -0
- akshare/stock_fundamental/stock_hold.py +26 -17
- akshare/stock_fundamental/stock_ipo_declare.py +1 -0
- akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
- akshare/stock_fundamental/stock_kcb_sse.py +26 -25
- akshare/stock_fundamental/stock_notice.py +41 -18
- akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
- akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
- akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
- akshare/stock_fundamental/stock_recommend.py +20 -4
- akshare/stock_fundamental/stock_register_em.py +448 -0
- akshare/stock_fundamental/stock_zygc.py +5 -62
- akshare/tool/trade_date_hist.py +1 -1
- akshare/utils/context.py +43 -0
- akshare/utils/demjson.py +2009 -1338
- akshare/utils/func.py +49 -2
- akshare/utils/multi_decrypt.py +53 -0
- akshare/utils/token_process.py +6 -5
- akshare/utils/tqdm.py +13 -3
- {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/METADATA +56 -86
- akshare-1.17.99.dist-info/RECORD +409 -0
- {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
- {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
- tests/test_func.py +3 -5
- akshare/bond/bond_futures.py +0 -50
- akshare/bond/bond_investing.py +0 -139
- akshare/crypto/crypto_hist_investing.py +0 -249
- akshare/fortune/fortune_it_juzi.py +0 -123
- akshare/fund/fund_announcement.py +0 -56
- akshare/futures/futures_international.py +0 -170
- akshare/futures/futures_news_baidu.py +0 -54
- akshare/futures/inventory_data.py +0 -100
- akshare/futures_derivative/futures_index_price_nh.py +0 -61
- akshare/futures_derivative/futures_index_return_nh.py +0 -47
- akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
- akshare/futures_derivative/futures_other_index_nh.py +0 -145
- akshare/index/index_fear_greed_funddb.py +0 -78
- akshare/index/index_investing.py +0 -232
- akshare/sport/__init__.py +0 -6
- akshare/sport/sport_olympic.py +0 -27
- akshare/sport/sport_olympic_winter.py +0 -39
- akshare/stock_feature/stock_wencai.py +0 -104
- akshare/stock_fundamental/stock_mda_ym.py +0 -40
- akshare/stock_fundamental/stock_register.py +0 -292
- akshare-1.13.46.dist-info/RECORD +0 -380
- {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
akshare/bond/bond_china_money.py
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date: 2024/
|
|
4
|
+
Date: 2024/6/27 16:00
|
|
5
5
|
Desc: 收盘收益率曲线历史数据
|
|
6
6
|
https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
from functools import lru_cache
|
|
9
10
|
|
|
10
11
|
import pandas as pd
|
|
11
12
|
import requests
|
|
13
|
+
from akshare.utils.tqdm import get_tqdm
|
|
12
14
|
|
|
13
15
|
|
|
14
16
|
def __bond_register_service() -> requests.Session:
|
|
@@ -20,16 +22,19 @@ def __bond_register_service() -> requests.Session:
|
|
|
20
22
|
"""
|
|
21
23
|
session = requests.Session()
|
|
22
24
|
headers = {
|
|
23
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
24
|
-
|
|
25
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
26
|
+
"Chrome/108.0.0.0 Safari/537.36",
|
|
25
27
|
}
|
|
26
|
-
session.get(
|
|
27
|
-
|
|
28
|
+
session.get(
|
|
29
|
+
url="https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1",
|
|
30
|
+
headers=headers,
|
|
31
|
+
)
|
|
28
32
|
cookies_dict = session.cookies.get_dict()
|
|
29
|
-
cookies_str =
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
cookies_str = "; ".join(f"{k}={v}" for k, v in cookies_dict.items())
|
|
34
|
+
# 此处需要通过未访问的游览器,首次打开
|
|
35
|
+
# https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1
|
|
36
|
+
# 页面进行人工获取
|
|
37
|
+
data = {"key": "TThwSjc2NWkzV0VSOVRzOA=="}
|
|
33
38
|
headers = {
|
|
34
39
|
"Accept": "application/json, text/javascript, */*; q=0.01",
|
|
35
40
|
"Accept-Encoding": "gzip, deflate, br",
|
|
@@ -37,7 +42,7 @@ def __bond_register_service() -> requests.Session:
|
|
|
37
42
|
"Cache-Control": "no-cache",
|
|
38
43
|
"Connection": "keep-alive",
|
|
39
44
|
"Content-Length": "22",
|
|
40
|
-
|
|
45
|
+
"Cookie": cookies_str,
|
|
41
46
|
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
|
|
42
47
|
"Host": "www.chinamoney.com.cn",
|
|
43
48
|
"Origin": "https://www.chinamoney.com.cn",
|
|
@@ -46,21 +51,26 @@ def __bond_register_service() -> requests.Session:
|
|
|
46
51
|
"Sec-Fetch-Dest": "empty",
|
|
47
52
|
"Sec-Fetch-Mode": "cors",
|
|
48
53
|
"Sec-Fetch-Site": "same-origin",
|
|
49
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
50
|
-
"
|
|
54
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
55
|
+
"Chrome/108.0.0.0 Safari/537.36",
|
|
56
|
+
"X-Requested-With": "XMLHttpRequest",
|
|
51
57
|
}
|
|
52
|
-
session.post(
|
|
58
|
+
session.post(
|
|
59
|
+
url="https://www.chinamoney.com.cn/dqs/rest/cm-u-rbt/apply",
|
|
60
|
+
data=data,
|
|
61
|
+
headers=headers,
|
|
62
|
+
)
|
|
53
63
|
|
|
54
64
|
# 20231127 新增部分 https://github.com/akfamily/akshare/issues/4299
|
|
55
65
|
cookies_dict = session.cookies.get_dict()
|
|
56
|
-
cookies_str =
|
|
66
|
+
cookies_str = "; ".join(f"{k}={v}" for k, v in cookies_dict.items())
|
|
57
67
|
headers = {
|
|
58
68
|
"Accept": "application/json, text/javascript, /; q=0.01",
|
|
59
69
|
"Accept-Encoding": "gzip, deflate, br",
|
|
60
70
|
"Accept-Language": "en",
|
|
61
71
|
"Connection": "keep-alive",
|
|
62
72
|
"Content-Length": "0",
|
|
63
|
-
|
|
73
|
+
"Cookie": cookies_str,
|
|
64
74
|
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
|
|
65
75
|
"Host": "www.chinamoney.com.cn",
|
|
66
76
|
"Origin": "https://www.chinamoney.com.cn",
|
|
@@ -68,10 +78,14 @@ def __bond_register_service() -> requests.Session:
|
|
|
68
78
|
"Sec-Fetch-Dest": "empty",
|
|
69
79
|
"Sec-Fetch-Mode": "cors",
|
|
70
80
|
"Sec-Fetch-Site": "same-origin",
|
|
71
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
72
|
-
"
|
|
81
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
82
|
+
"Chrome/108.0.0.0 Safari/537.36",
|
|
83
|
+
"X-Requested-With": "XMLHttpRequest",
|
|
73
84
|
}
|
|
74
|
-
session.post(
|
|
85
|
+
session.post(
|
|
86
|
+
url="https://www.chinamoney.com.cn/lss/rest/cm-s-account/getSessionUser",
|
|
87
|
+
headers=headers,
|
|
88
|
+
)
|
|
75
89
|
return session
|
|
76
90
|
|
|
77
91
|
|
|
@@ -94,14 +108,15 @@ def bond_china_close_return_map() -> pd.DataFrame:
|
|
|
94
108
|
"Origin": "https://www.chinamoney.com.cn",
|
|
95
109
|
"Pragma": "no-cache",
|
|
96
110
|
"Referer": "https://www.chinamoney.com.cn/chinese/bkcurvclosedyhis/?bondType=CYCC000&reference=1",
|
|
97
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
98
|
-
"
|
|
111
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
112
|
+
"Chrome/108.0.0.0 Safari/537.36",
|
|
113
|
+
"X-Requested-With": "XMLHttpRequest",
|
|
99
114
|
}
|
|
100
|
-
url = "
|
|
115
|
+
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bk-currency/ClsYldCurvCurvGO"
|
|
101
116
|
try:
|
|
102
117
|
r = requests.get(url, headers=headers)
|
|
103
118
|
data_json = r.json()
|
|
104
|
-
except:
|
|
119
|
+
except: # noqa: E722
|
|
105
120
|
session = __bond_register_service()
|
|
106
121
|
r = session.get(url, headers=headers)
|
|
107
122
|
data_json = r.json()
|
|
@@ -110,10 +125,10 @@ def bond_china_close_return_map() -> pd.DataFrame:
|
|
|
110
125
|
|
|
111
126
|
|
|
112
127
|
def bond_china_close_return(
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
128
|
+
symbol: str = "国债",
|
|
129
|
+
period: str = "1",
|
|
130
|
+
start_date: str = "20231101",
|
|
131
|
+
end_date: str = "20231101",
|
|
117
132
|
) -> pd.DataFrame:
|
|
118
133
|
"""
|
|
119
134
|
收盘收益率曲线历史数据
|
|
@@ -133,17 +148,18 @@ def bond_china_close_return(
|
|
|
133
148
|
symbol_code = name_code_df[name_code_df["cnLabel"] == symbol]["value"].values[0]
|
|
134
149
|
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bk-currency/ClsYldCurvHis"
|
|
135
150
|
headers = {
|
|
136
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
151
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
152
|
+
"Chrome/108.0.0.0 Safari/537.36",
|
|
137
153
|
}
|
|
138
154
|
params = {
|
|
139
155
|
"lang": "CN",
|
|
140
156
|
"reference": "1,2,3",
|
|
141
157
|
"bondType": symbol_code,
|
|
142
|
-
"startDate":
|
|
143
|
-
"endDate":
|
|
158
|
+
"startDate": "-".join([start_date[:4], start_date[4:6], start_date[6:]]),
|
|
159
|
+
"endDate": "-".join([end_date[:4], end_date[4:6], end_date[6:]]),
|
|
144
160
|
"termId": period,
|
|
145
161
|
"pageNum": "1",
|
|
146
|
-
"pageSize": "
|
|
162
|
+
"pageSize": "50",
|
|
147
163
|
}
|
|
148
164
|
r = requests.get(url, params=params, headers=headers)
|
|
149
165
|
data_json = r.json()
|
|
@@ -165,16 +181,16 @@ def bond_china_close_return(
|
|
|
165
181
|
"远期收益率",
|
|
166
182
|
]
|
|
167
183
|
]
|
|
168
|
-
temp_df[
|
|
169
|
-
temp_df[
|
|
170
|
-
temp_df[
|
|
171
|
-
temp_df[
|
|
172
|
-
temp_df[
|
|
184
|
+
temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
|
|
185
|
+
temp_df["期限"] = pd.to_numeric(temp_df["期限"], errors="coerce")
|
|
186
|
+
temp_df["到期收益率"] = pd.to_numeric(temp_df["到期收益率"], errors="coerce")
|
|
187
|
+
temp_df["即期收益率"] = pd.to_numeric(temp_df["即期收益率"], errors="coerce")
|
|
188
|
+
temp_df["远期收益率"] = pd.to_numeric(temp_df["远期收益率"], errors="coerce")
|
|
173
189
|
return temp_df
|
|
174
190
|
|
|
175
191
|
|
|
176
192
|
def macro_china_swap_rate(
|
|
177
|
-
|
|
193
|
+
start_date: str = "20231101", end_date: str = "20231204"
|
|
178
194
|
) -> pd.DataFrame:
|
|
179
195
|
"""
|
|
180
196
|
FR007 利率互换曲线历史数据; 只能获取近一年的数据
|
|
@@ -218,7 +234,8 @@ def macro_china_swap_rate(
|
|
|
218
234
|
"Sec-Fetch-Dest": "empty",
|
|
219
235
|
"Sec-Fetch-Mode": "cors",
|
|
220
236
|
"Sec-Fetch-Site": "same-origin",
|
|
221
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
237
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
238
|
+
"Chrome/107.0.0.0 Safari/537.36",
|
|
222
239
|
"X-Requested-With": "XMLHttpRequest",
|
|
223
240
|
}
|
|
224
241
|
r = requests.post(url, data=params, headers=headers)
|
|
@@ -257,7 +274,7 @@ def macro_china_swap_rate(
|
|
|
257
274
|
"7Y",
|
|
258
275
|
"10Y",
|
|
259
276
|
]
|
|
260
|
-
big_df = pd.concat([temp_df, price_df], axis=1)
|
|
277
|
+
big_df = pd.concat(objs=[temp_df, price_df], axis=1)
|
|
261
278
|
big_df = big_df[
|
|
262
279
|
[
|
|
263
280
|
"日期",
|
|
@@ -289,6 +306,7 @@ def macro_china_swap_rate(
|
|
|
289
306
|
big_df["5Y"] = pd.to_numeric(big_df["5Y"], errors="coerce")
|
|
290
307
|
big_df["7Y"] = pd.to_numeric(big_df["7Y"], errors="coerce")
|
|
291
308
|
big_df["10Y"] = pd.to_numeric(big_df["10Y"], errors="coerce")
|
|
309
|
+
big_df.sort_values(["日期"], inplace=True, ignore_index=True)
|
|
292
310
|
return big_df
|
|
293
311
|
|
|
294
312
|
|
|
@@ -302,7 +320,8 @@ def macro_china_bond_public() -> pd.DataFrame:
|
|
|
302
320
|
bond_china_close_return_map()
|
|
303
321
|
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bond-an/bnBondEmit"
|
|
304
322
|
headers = {
|
|
305
|
-
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
|
|
323
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
324
|
+
"Chrome/107.0.0.0 Safari/537.36",
|
|
306
325
|
}
|
|
307
326
|
payload = {
|
|
308
327
|
"enty": "",
|
|
@@ -310,13 +329,21 @@ def macro_china_bond_public() -> pd.DataFrame:
|
|
|
310
329
|
"bondNameCode": "",
|
|
311
330
|
"leadUnderwriter": "",
|
|
312
331
|
"pageNo": "1",
|
|
313
|
-
"pageSize": "
|
|
332
|
+
"pageSize": "10",
|
|
314
333
|
"limit": "1",
|
|
315
334
|
}
|
|
316
335
|
r = requests.post(url, data=payload, headers=headers)
|
|
317
336
|
data_json = r.json()
|
|
318
|
-
|
|
319
|
-
|
|
337
|
+
total_page = int(data_json["data"]["pageTotalSize"]) + 1
|
|
338
|
+
big_df = pd.DataFrame()
|
|
339
|
+
tqdm = get_tqdm()
|
|
340
|
+
for page in tqdm(range(1, total_page), leave=False):
|
|
341
|
+
payload.update({"pageNo": page})
|
|
342
|
+
r = requests.post(url, data=payload, headers=headers)
|
|
343
|
+
data_json = r.json()
|
|
344
|
+
temp_df = pd.DataFrame(data_json["records"])
|
|
345
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
346
|
+
big_df.columns = [
|
|
320
347
|
"债券全称",
|
|
321
348
|
"债券类型",
|
|
322
349
|
"-",
|
|
@@ -331,7 +358,7 @@ def macro_china_bond_public() -> pd.DataFrame:
|
|
|
331
358
|
"价格",
|
|
332
359
|
"计划发行量",
|
|
333
360
|
]
|
|
334
|
-
|
|
361
|
+
big_df = big_df[
|
|
335
362
|
[
|
|
336
363
|
"债券全称",
|
|
337
364
|
"债券类型",
|
|
@@ -343,19 +370,19 @@ def macro_china_bond_public() -> pd.DataFrame:
|
|
|
343
370
|
"债券评级",
|
|
344
371
|
]
|
|
345
372
|
]
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
return
|
|
373
|
+
big_df["价格"] = pd.to_numeric(big_df["价格"], errors="coerce")
|
|
374
|
+
big_df["计划发行量"] = pd.to_numeric(big_df["计划发行量"], errors="coerce")
|
|
375
|
+
return big_df
|
|
349
376
|
|
|
350
377
|
|
|
351
378
|
if __name__ == "__main__":
|
|
352
379
|
bond_china_close_return_df = bond_china_close_return(
|
|
353
|
-
symbol="
|
|
380
|
+
symbol="同业存单(AAA)", period="1", start_date="20240607", end_date="20240607"
|
|
354
381
|
)
|
|
355
382
|
print(bond_china_close_return_df)
|
|
356
383
|
|
|
357
384
|
macro_china_swap_rate_df = macro_china_swap_rate(
|
|
358
|
-
start_date="
|
|
385
|
+
start_date="20251010", end_date="20251208"
|
|
359
386
|
)
|
|
360
387
|
print(macro_china_swap_rate_df)
|
|
361
388
|
|
akshare/bond/bond_convert.py
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2025/5/16 19:00
|
|
5
5
|
Desc: 债券-集思录-可转债
|
|
6
|
-
集思录:https://
|
|
6
|
+
集思录:https://www.jisilu.cn/data/cbnew/#cb
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
from io import StringIO
|
|
10
10
|
import pandas as pd
|
|
11
11
|
import requests
|
|
12
|
+
import time
|
|
12
13
|
|
|
13
14
|
from akshare.utils import demjson
|
|
14
15
|
|
|
@@ -30,13 +31,13 @@ def bond_cb_index_jsl() -> pd.DataFrame:
|
|
|
30
31
|
def bond_cb_jsl(cookie: str = None) -> pd.DataFrame:
|
|
31
32
|
"""
|
|
32
33
|
集思录可转债
|
|
33
|
-
https://
|
|
34
|
+
https://www.jisilu.cn/data/cbnew/#cb
|
|
34
35
|
:param cookie: 输入获取到的游览器 cookie
|
|
35
36
|
:type cookie: str
|
|
36
37
|
:return: 集思录可转债
|
|
37
38
|
:rtype: pandas.DataFrame
|
|
38
39
|
"""
|
|
39
|
-
url = "https://
|
|
40
|
+
url = "https://www.jisilu.cn/data/cbnew/cb_list_new/"
|
|
40
41
|
headers = {
|
|
41
42
|
"accept": "application/json, text/javascript, */*; q=0.01",
|
|
42
43
|
"accept-encoding": "gzip, deflate, br",
|
|
@@ -45,9 +46,9 @@ def bond_cb_jsl(cookie: str = None) -> pd.DataFrame:
|
|
|
45
46
|
"content-length": "220",
|
|
46
47
|
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
|
|
47
48
|
"cookie": cookie,
|
|
48
|
-
"origin": "https://
|
|
49
|
+
"origin": "https://www.jisilu.cn",
|
|
49
50
|
"pragma": "no-cache",
|
|
50
|
-
"referer": "https://
|
|
51
|
+
"referer": "https://www.jisilu.cn/data/cbnew/",
|
|
51
52
|
"sec-ch-ua": '" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
|
|
52
53
|
"sec-ch-ua-mobile": "?0",
|
|
53
54
|
"sec-fetch-dest": "empty",
|
|
@@ -58,7 +59,7 @@ def bond_cb_jsl(cookie: str = None) -> pd.DataFrame:
|
|
|
58
59
|
"x-requested-with": "XMLHttpRequest",
|
|
59
60
|
}
|
|
60
61
|
params = {
|
|
61
|
-
"___jsl": "LST___t=
|
|
62
|
+
"___jsl": f"LST___t={int(time.time() * 1000)}",
|
|
62
63
|
}
|
|
63
64
|
payload = {
|
|
64
65
|
"fprice": "",
|
|
@@ -141,7 +142,7 @@ def bond_cb_jsl(cookie: str = None) -> pd.DataFrame:
|
|
|
141
142
|
"双低",
|
|
142
143
|
]
|
|
143
144
|
]
|
|
144
|
-
temp_df["到期时间"] = pd.to_datetime(temp_df["到期时间"]).dt.date
|
|
145
|
+
temp_df["到期时间"] = pd.to_datetime(temp_df["到期时间"], errors="coerce").dt.date
|
|
145
146
|
temp_df["现价"] = pd.to_numeric(temp_df["现价"], errors="coerce")
|
|
146
147
|
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
|
|
147
148
|
temp_df["正股价"] = pd.to_numeric(temp_df["正股价"], errors="coerce")
|
|
@@ -296,7 +297,7 @@ def bond_cb_redeem_jsl() -> pd.DataFrame:
|
|
|
296
297
|
def bond_cb_adj_logs_jsl(symbol: str = "128013") -> pd.DataFrame:
|
|
297
298
|
"""
|
|
298
299
|
集思录-可转债转股价-调整记录
|
|
299
|
-
https://
|
|
300
|
+
https://www.jisilu.cn/data/cbnew/#cb
|
|
300
301
|
:param symbol: 可转债代码
|
|
301
302
|
:type symbol: str
|
|
302
303
|
:return: 转股价调整记录
|
akshare/bond/bond_em.py
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2025/4/5 17:00
|
|
5
5
|
Desc: 东方财富网-数据中心-经济数据-中美国债收益率
|
|
6
6
|
https://data.eastmoney.com/cjsj/zmgzsyl.html
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
|
-
from tqdm import
|
|
11
|
+
from akshare.utils.tqdm import get_tqdm
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
def bond_zh_us_rate(start_date: str = "19901219") -> pd.DataFrame:
|
|
@@ -30,12 +31,12 @@ def bond_zh_us_rate(start_date: str = "19901219") -> pd.DataFrame:
|
|
|
30
31
|
"ps": "500",
|
|
31
32
|
"pageNo": "1",
|
|
32
33
|
"pageNum": "1",
|
|
33
|
-
"_": "1615791534490",
|
|
34
34
|
}
|
|
35
35
|
r = requests.get(url, params=params)
|
|
36
36
|
data_json = r.json()
|
|
37
37
|
total_page = data_json["result"]["pages"]
|
|
38
38
|
big_df = pd.DataFrame()
|
|
39
|
+
tqdm = get_tqdm()
|
|
39
40
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
40
41
|
params = {
|
|
41
42
|
"type": "RPTA_WEB_TREASURYYIELD",
|
|
@@ -47,14 +48,13 @@ def bond_zh_us_rate(start_date: str = "19901219") -> pd.DataFrame:
|
|
|
47
48
|
"ps": "500",
|
|
48
49
|
"pageNo": page,
|
|
49
50
|
"pageNum": page,
|
|
50
|
-
"_": "1615791534490",
|
|
51
51
|
}
|
|
52
52
|
r = requests.get(url, params=params)
|
|
53
53
|
data_json = r.json()
|
|
54
54
|
temp_df = pd.DataFrame(data_json["result"]["data"])
|
|
55
55
|
for col in temp_df.columns:
|
|
56
56
|
if temp_df[col].isnull().all(): # 检查列是否包含 None 或 NaN
|
|
57
|
-
temp_df[col] = pd.to_numeric(temp_df[col], errors=
|
|
57
|
+
temp_df[col] = pd.to_numeric(temp_df[col], errors="coerce")
|
|
58
58
|
if big_df.empty:
|
|
59
59
|
big_df = temp_df
|
|
60
60
|
else:
|
|
@@ -62,7 +62,7 @@ def bond_zh_us_rate(start_date: str = "19901219") -> pd.DataFrame:
|
|
|
62
62
|
|
|
63
63
|
temp_date_list = pd.to_datetime(big_df["SOLAR_DATE"]).dt.date.to_list()
|
|
64
64
|
if pd.to_datetime(start_date) in pd.date_range(
|
|
65
|
-
|
|
65
|
+
temp_date_list[-1], temp_date_list[0]
|
|
66
66
|
):
|
|
67
67
|
break
|
|
68
68
|
|
|
@@ -102,21 +102,41 @@ def bond_zh_us_rate(start_date: str = "19901219") -> pd.DataFrame:
|
|
|
102
102
|
]
|
|
103
103
|
]
|
|
104
104
|
big_df["日期"] = pd.to_datetime(big_df["日期"], errors="coerce")
|
|
105
|
-
big_df["中国国债收益率2年"] = pd.to_numeric(
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
big_df["中国国债收益率
|
|
109
|
-
|
|
105
|
+
big_df["中国国债收益率2年"] = pd.to_numeric(
|
|
106
|
+
big_df["中国国债收益率2年"], errors="coerce"
|
|
107
|
+
)
|
|
108
|
+
big_df["中国国债收益率5年"] = pd.to_numeric(
|
|
109
|
+
big_df["中国国债收益率5年"], errors="coerce"
|
|
110
|
+
)
|
|
111
|
+
big_df["中国国债收益率10年"] = pd.to_numeric(
|
|
112
|
+
big_df["中国国债收益率10年"], errors="coerce"
|
|
113
|
+
)
|
|
114
|
+
big_df["中国国债收益率30年"] = pd.to_numeric(
|
|
115
|
+
big_df["中国国债收益率30年"], errors="coerce"
|
|
116
|
+
)
|
|
117
|
+
big_df["中国国债收益率10年-2年"] = pd.to_numeric(
|
|
118
|
+
big_df["中国国债收益率10年-2年"], errors="coerce"
|
|
119
|
+
)
|
|
110
120
|
big_df["中国GDP年增率"] = pd.to_numeric(big_df["中国GDP年增率"], errors="coerce")
|
|
111
|
-
big_df["美国国债收益率2年"] = pd.to_numeric(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
big_df["美国国债收益率
|
|
115
|
-
|
|
121
|
+
big_df["美国国债收益率2年"] = pd.to_numeric(
|
|
122
|
+
big_df["美国国债收益率2年"], errors="coerce"
|
|
123
|
+
)
|
|
124
|
+
big_df["美国国债收益率5年"] = pd.to_numeric(
|
|
125
|
+
big_df["美国国债收益率5年"], errors="coerce"
|
|
126
|
+
)
|
|
127
|
+
big_df["美国国债收益率10年"] = pd.to_numeric(
|
|
128
|
+
big_df["美国国债收益率10年"], errors="coerce"
|
|
129
|
+
)
|
|
130
|
+
big_df["美国国债收益率30年"] = pd.to_numeric(
|
|
131
|
+
big_df["美国国债收益率30年"], errors="coerce"
|
|
132
|
+
)
|
|
133
|
+
big_df["美国国债收益率10年-2年"] = pd.to_numeric(
|
|
134
|
+
big_df["美国国债收益率10年-2年"], errors="coerce"
|
|
135
|
+
)
|
|
116
136
|
big_df["美国GDP年增率"] = pd.to_numeric(big_df["美国GDP年增率"], errors="coerce")
|
|
117
137
|
big_df.sort_values("日期", inplace=True)
|
|
118
138
|
big_df.set_index(["日期"], inplace=True)
|
|
119
|
-
big_df = big_df[pd.to_datetime(start_date):]
|
|
139
|
+
big_df = big_df[pd.to_datetime(start_date) :]
|
|
120
140
|
big_df.reset_index(inplace=True)
|
|
121
141
|
big_df["日期"] = pd.to_datetime(big_df["日期"]).dt.date
|
|
122
142
|
return big_df
|
akshare/bond/bond_info_cm.py
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/5/10 14:00
|
|
5
5
|
Desc: 中国外汇交易中心暨全国银行间同业拆借中心
|
|
6
6
|
https://www.chinamoney.com.cn/chinese/scsjzqxx/
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import functools
|
|
9
10
|
|
|
10
11
|
import pandas as pd
|
|
11
12
|
import requests
|
|
12
|
-
from tqdm import
|
|
13
|
+
from akshare.utils.tqdm import get_tqdm
|
|
14
|
+
from akshare.bond.bond_china import bond_china_close_return_map
|
|
13
15
|
|
|
14
16
|
|
|
15
17
|
@functools.lru_cache()
|
|
@@ -22,10 +24,12 @@ def bond_info_cm_query(symbol: str = "评级等级") -> pd.DataFrame:
|
|
|
22
24
|
:return: 查询相关指标的参数
|
|
23
25
|
:rtype: pandas.DataFrame
|
|
24
26
|
"""
|
|
27
|
+
bond_china_close_return_map()
|
|
25
28
|
if symbol == "主承销商":
|
|
26
29
|
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bond-md/EntyFullNameSearchCondition"
|
|
27
30
|
headers = {
|
|
28
|
-
|
|
31
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
32
|
+
"Chrome/109.0.0.0 Safari/537.36"
|
|
29
33
|
}
|
|
30
34
|
r = requests.post(url, headers=headers)
|
|
31
35
|
data_json = r.json()
|
|
@@ -42,7 +46,8 @@ def bond_info_cm_query(symbol: str = "评级等级") -> pd.DataFrame:
|
|
|
42
46
|
}
|
|
43
47
|
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bond-md/BondBaseInfoSearchCondition"
|
|
44
48
|
headers = {
|
|
45
|
-
|
|
49
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
50
|
+
"Chrome/109.0.0.0 Safari/537.36"
|
|
46
51
|
}
|
|
47
52
|
r = requests.post(url, headers=headers)
|
|
48
53
|
data_json = r.json()
|
|
@@ -88,6 +93,7 @@ def bond_info_cm(
|
|
|
88
93
|
:return: 信息查询结果
|
|
89
94
|
:rtype: pandas.DataFrame
|
|
90
95
|
"""
|
|
96
|
+
bond_china_close_return_map()
|
|
91
97
|
if bond_type:
|
|
92
98
|
bond_type_df = bond_info_cm_query(symbol="债券类型")
|
|
93
99
|
bond_type_df_value = bond_type_df[bond_type_df["name"] == bond_type][
|
|
@@ -127,18 +133,20 @@ def bond_info_cm(
|
|
|
127
133
|
"rtngShrt": grade,
|
|
128
134
|
}
|
|
129
135
|
headers = {
|
|
130
|
-
|
|
136
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
137
|
+
"Chrome/109.0.0.0 Safari/537.36"
|
|
131
138
|
}
|
|
132
139
|
r = requests.post(url, data=payload, headers=headers)
|
|
133
140
|
data_json = r.json()
|
|
134
141
|
total_page = data_json["data"]["pageTotal"]
|
|
135
142
|
big_df = pd.DataFrame()
|
|
143
|
+
tqdm = get_tqdm()
|
|
136
144
|
for page in tqdm(range(1, total_page + 1), leave=False):
|
|
137
145
|
payload.update({"pageNo": page})
|
|
138
146
|
r = requests.post(url, data=payload, headers=headers)
|
|
139
147
|
data_json = r.json()
|
|
140
148
|
temp_df = pd.DataFrame(data_json["data"]["resultList"])
|
|
141
|
-
big_df = pd.concat([big_df, temp_df], ignore_index=True)
|
|
149
|
+
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
142
150
|
big_df.rename(
|
|
143
151
|
columns={
|
|
144
152
|
"bondDefinedCode": "查询代码",
|
|
@@ -156,7 +164,17 @@ def bond_info_cm(
|
|
|
156
164
|
},
|
|
157
165
|
inplace=True,
|
|
158
166
|
)
|
|
159
|
-
big_df = big_df[
|
|
167
|
+
big_df = big_df[
|
|
168
|
+
[
|
|
169
|
+
"债券简称",
|
|
170
|
+
"债券代码",
|
|
171
|
+
"发行人/受托机构",
|
|
172
|
+
"债券类型",
|
|
173
|
+
"发行日期",
|
|
174
|
+
"最新债项评级",
|
|
175
|
+
"查询代码",
|
|
176
|
+
]
|
|
177
|
+
]
|
|
160
178
|
return big_df
|
|
161
179
|
|
|
162
180
|
|
|
@@ -170,12 +188,14 @@ def bond_info_detail_cm(symbol: str = "淮安农商行CDSD2022021012") -> pd.Dat
|
|
|
170
188
|
:return: 债券详情
|
|
171
189
|
:rtype: pandas.DataFrame
|
|
172
190
|
"""
|
|
191
|
+
bond_china_close_return_map()
|
|
173
192
|
url = "https://www.chinamoney.com.cn/ags/ms/cm-u-bond-md/BondDetailInfo"
|
|
174
193
|
inner_bond_info_cm_df = bond_info_cm(bond_name=symbol)
|
|
175
194
|
bond_code = inner_bond_info_cm_df["查询代码"].values[0]
|
|
176
195
|
payload = {"bondDefinedCode": bond_code}
|
|
177
196
|
headers = {
|
|
178
|
-
|
|
197
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
198
|
+
"Chrome/109.0.0.0 Safari/537.36"
|
|
179
199
|
}
|
|
180
200
|
r = requests.post(url, data=payload, headers=headers)
|
|
181
201
|
data_json = r.json()
|