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/option/option_finance.py
CHANGED
|
@@ -8,6 +8,7 @@ http://www.szse.cn/market/product/option/index.html
|
|
|
8
8
|
http://www.cffex.com.cn/hs300gzqq/
|
|
9
9
|
http://www.cffex.com.cn/zz1000gzqq/
|
|
10
10
|
"""
|
|
11
|
+
|
|
11
12
|
from io import BytesIO
|
|
12
13
|
|
|
13
14
|
import pandas as pd
|
|
@@ -69,7 +70,7 @@ def option_finance_sse_underlying(symbol: str = "华夏科创50ETF期权") -> pd
|
|
|
69
70
|
|
|
70
71
|
|
|
71
72
|
def option_finance_board(
|
|
72
|
-
|
|
73
|
+
symbol: str = "嘉实沪深300ETF期权", end_month: str = "2306"
|
|
73
74
|
) -> pd.DataFrame:
|
|
74
75
|
"""
|
|
75
76
|
期权当前交易日的行情数据
|
|
@@ -79,7 +80,8 @@ def option_finance_board(
|
|
|
79
80
|
http://www.szse.cn/market/product/option/index.html
|
|
80
81
|
http://www.cffex.com.cn/hs300gzqq/
|
|
81
82
|
http://www.cffex.com.cn/zz1000gzqq/
|
|
82
|
-
:param symbol: choice of {"华夏上证50ETF期权", "华泰柏瑞沪深300ETF期权", "南方中证500ETF期权",
|
|
83
|
+
:param symbol: choice of {"华夏上证50ETF期权", "华泰柏瑞沪深300ETF期权", "南方中证500ETF期权",
|
|
84
|
+
"华夏科创50ETF期权", "易方达科创50ETF期权", "嘉实沪深300ETF期权", "沪深300股指期权", "中证1000股指期权", "上证50股指期权"}
|
|
83
85
|
:type symbol: str
|
|
84
86
|
:param end_month: 2003; 2020 年 3 月到期的期权
|
|
85
87
|
:type end_month: str
|
|
@@ -100,7 +102,15 @@ def option_finance_board(
|
|
|
100
102
|
raw_data.columns = ["合约交易代码", "当前价", "涨跌幅", "前结价", "行权价"]
|
|
101
103
|
raw_data["数量"] = [data_json["total"]] * data_json["total"]
|
|
102
104
|
raw_data.reset_index(inplace=True)
|
|
103
|
-
raw_data.columns = [
|
|
105
|
+
raw_data.columns = [
|
|
106
|
+
"日期",
|
|
107
|
+
"合约交易代码",
|
|
108
|
+
"当前价",
|
|
109
|
+
"涨跌幅",
|
|
110
|
+
"前结价",
|
|
111
|
+
"行权价",
|
|
112
|
+
"数量",
|
|
113
|
+
]
|
|
104
114
|
return raw_data
|
|
105
115
|
elif symbol == "华泰柏瑞沪深300ETF期权":
|
|
106
116
|
r = requests.get(
|
|
@@ -115,7 +125,15 @@ def option_finance_board(
|
|
|
115
125
|
raw_data.columns = ["合约交易代码", "当前价", "涨跌幅", "前结价", "行权价"]
|
|
116
126
|
raw_data["数量"] = [data_json["total"]] * data_json["total"]
|
|
117
127
|
raw_data.reset_index(inplace=True)
|
|
118
|
-
raw_data.columns = [
|
|
128
|
+
raw_data.columns = [
|
|
129
|
+
"日期",
|
|
130
|
+
"合约交易代码",
|
|
131
|
+
"当前价",
|
|
132
|
+
"涨跌幅",
|
|
133
|
+
"前结价",
|
|
134
|
+
"行权价",
|
|
135
|
+
"数量",
|
|
136
|
+
]
|
|
119
137
|
return raw_data
|
|
120
138
|
elif symbol == "南方中证500ETF期权":
|
|
121
139
|
r = requests.get(
|
|
@@ -130,7 +148,15 @@ def option_finance_board(
|
|
|
130
148
|
raw_data.columns = ["合约交易代码", "当前价", "涨跌幅", "前结价", "行权价"]
|
|
131
149
|
raw_data["数量"] = [data_json["total"]] * data_json["total"]
|
|
132
150
|
raw_data.reset_index(inplace=True)
|
|
133
|
-
raw_data.columns = [
|
|
151
|
+
raw_data.columns = [
|
|
152
|
+
"日期",
|
|
153
|
+
"合约交易代码",
|
|
154
|
+
"当前价",
|
|
155
|
+
"涨跌幅",
|
|
156
|
+
"前结价",
|
|
157
|
+
"行权价",
|
|
158
|
+
"数量",
|
|
159
|
+
]
|
|
134
160
|
return raw_data
|
|
135
161
|
elif symbol == "华夏科创50ETF期权":
|
|
136
162
|
r = requests.get(
|
|
@@ -145,7 +171,15 @@ def option_finance_board(
|
|
|
145
171
|
raw_data.columns = ["合约交易代码", "当前价", "涨跌幅", "前结价", "行权价"]
|
|
146
172
|
raw_data["数量"] = [data_json["total"]] * data_json["total"]
|
|
147
173
|
raw_data.reset_index(inplace=True)
|
|
148
|
-
raw_data.columns = [
|
|
174
|
+
raw_data.columns = [
|
|
175
|
+
"日期",
|
|
176
|
+
"合约交易代码",
|
|
177
|
+
"当前价",
|
|
178
|
+
"涨跌幅",
|
|
179
|
+
"前结价",
|
|
180
|
+
"行权价",
|
|
181
|
+
"数量",
|
|
182
|
+
]
|
|
149
183
|
return raw_data
|
|
150
184
|
elif symbol == "易方达科创50ETF期权":
|
|
151
185
|
r = requests.get(
|
|
@@ -160,7 +194,15 @@ def option_finance_board(
|
|
|
160
194
|
raw_data.columns = ["合约交易代码", "当前价", "涨跌幅", "前结价", "行权价"]
|
|
161
195
|
raw_data["数量"] = [data_json["total"]] * data_json["total"]
|
|
162
196
|
raw_data.reset_index(inplace=True)
|
|
163
|
-
raw_data.columns = [
|
|
197
|
+
raw_data.columns = [
|
|
198
|
+
"日期",
|
|
199
|
+
"合约交易代码",
|
|
200
|
+
"当前价",
|
|
201
|
+
"涨跌幅",
|
|
202
|
+
"前结价",
|
|
203
|
+
"行权价",
|
|
204
|
+
"数量",
|
|
205
|
+
]
|
|
164
206
|
return raw_data
|
|
165
207
|
elif symbol == "嘉实沪深300ETF期权":
|
|
166
208
|
url = "http://www.szse.cn/api/report/ShowReport/data"
|
|
@@ -206,7 +248,7 @@ def option_finance_board(
|
|
|
206
248
|
return big_df
|
|
207
249
|
elif symbol == "沪深300股指期权":
|
|
208
250
|
headers = {
|
|
209
|
-
|
|
251
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
|
|
210
252
|
}
|
|
211
253
|
r = requests.get(CFFEX_OPTION_URL_300, headers=headers)
|
|
212
254
|
raw_df = pd.read_table(BytesIO(r.content), sep=",")
|
|
@@ -224,7 +266,7 @@ def option_finance_board(
|
|
|
224
266
|
return raw_df
|
|
225
267
|
elif symbol == "中证1000股指期权":
|
|
226
268
|
headers = {
|
|
227
|
-
|
|
269
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
|
|
228
270
|
}
|
|
229
271
|
url = "http://www.cffex.com.cn/quote_MO.txt"
|
|
230
272
|
r = requests.get(url, headers=headers)
|
|
@@ -243,7 +285,7 @@ def option_finance_board(
|
|
|
243
285
|
return raw_df
|
|
244
286
|
elif symbol == "上证50股指期权":
|
|
245
287
|
headers = {
|
|
246
|
-
|
|
288
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"
|
|
247
289
|
}
|
|
248
290
|
url = "http://www.cffex.com.cn/quote_HO.txt"
|
|
249
291
|
r = requests.get(url, headers=headers)
|
|
@@ -260,6 +302,8 @@ def option_finance_board(
|
|
|
260
302
|
del raw_df["end_month"]
|
|
261
303
|
raw_df.reset_index(inplace=True, drop=True)
|
|
262
304
|
return raw_df
|
|
305
|
+
else:
|
|
306
|
+
return pd.DataFrame()
|
|
263
307
|
|
|
264
308
|
|
|
265
309
|
if __name__ == "__main__":
|
|
@@ -298,7 +342,9 @@ if __name__ == "__main__":
|
|
|
298
342
|
)
|
|
299
343
|
print(option_finance_board_df)
|
|
300
344
|
|
|
301
|
-
option_finance_board_df = option_finance_board(
|
|
345
|
+
option_finance_board_df = option_finance_board(
|
|
346
|
+
symbol="沪深300股指期权", end_month="2306"
|
|
347
|
+
)
|
|
302
348
|
print(option_finance_board_df)
|
|
303
349
|
|
|
304
350
|
option_finance_board_df = option_finance_board(
|
|
@@ -306,5 +352,7 @@ if __name__ == "__main__":
|
|
|
306
352
|
)
|
|
307
353
|
print(option_finance_board_df)
|
|
308
354
|
|
|
309
|
-
option_finance_board_df = option_finance_board(
|
|
355
|
+
option_finance_board_df = option_finance_board(
|
|
356
|
+
symbol="上证50股指期权", end_month="2306"
|
|
357
|
+
)
|
|
310
358
|
print(option_finance_board_df)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
"""
|
|
3
|
-
Date: 2024/
|
|
3
|
+
Date: 2024/6/21 18:00
|
|
4
4
|
Desc: 新浪财经-股票期权
|
|
5
5
|
https://stock.finance.sina.com.cn/option/quotes.html
|
|
6
6
|
期权-中金所-沪深 300 指数
|
|
@@ -81,7 +81,7 @@ def option_cffex_sz50_spot_sina(symbol: str = "ho2303") -> pd.DataFrame:
|
|
|
81
81
|
:param symbol: 合约代码; 用 ak.option_cffex_sz300_list_sina() 函数查看
|
|
82
82
|
:type symbol: str
|
|
83
83
|
:return: 中金所-上证 50 指数-指定合约-看涨看跌实时行情
|
|
84
|
-
:rtype:
|
|
84
|
+
:rtype: pandas.DataFrame
|
|
85
85
|
"""
|
|
86
86
|
url = "https://stock.finance.sina.com.cn/futures/api/openapi.php/OptionService.getOptionData"
|
|
87
87
|
params = {
|
|
@@ -154,7 +154,7 @@ def option_cffex_hs300_spot_sina(symbol: str = "io2204") -> pd.DataFrame:
|
|
|
154
154
|
:param symbol: 合约代码; 用 option_cffex_hs300_list_sina 函数查看
|
|
155
155
|
:type symbol: str
|
|
156
156
|
:return: 中金所-沪深300指数-指定合约-看涨看跌实时行情
|
|
157
|
-
:rtype:
|
|
157
|
+
:rtype: pandas.DataFrame
|
|
158
158
|
"""
|
|
159
159
|
url = "https://stock.finance.sina.com.cn/futures/api/openapi.php/OptionService.getOptionData"
|
|
160
160
|
params = {
|
|
@@ -227,7 +227,7 @@ def option_cffex_zz1000_spot_sina(symbol: str = "mo2208") -> pd.DataFrame:
|
|
|
227
227
|
:param symbol: 合约代码; 用 option_cffex_zz1000_list_sina 函数查看
|
|
228
228
|
:type symbol: str
|
|
229
229
|
:return: 中金所-中证 1000 指数-指定合约-看涨看跌实时行情
|
|
230
|
-
:rtype:
|
|
230
|
+
:rtype: pandas.DataFrame
|
|
231
231
|
"""
|
|
232
232
|
url = "https://stock.finance.sina.com.cn/futures/api/openapi.php/OptionService.getOptionData"
|
|
233
233
|
params = {
|
|
@@ -299,7 +299,7 @@ def option_cffex_sz50_daily_sina(symbol: str = "ho2303P2350") -> pd.DataFrame:
|
|
|
299
299
|
:param symbol: 具体合约代码(包括看涨和看跌标识), 可以通过 ak.option_cffex_sz50_spot_sina 中的 call-标识 获取
|
|
300
300
|
:type symbol: str
|
|
301
301
|
:return: 日频率数据
|
|
302
|
-
:rtype:
|
|
302
|
+
:rtype: pandas.DataFrame
|
|
303
303
|
"""
|
|
304
304
|
year = datetime.datetime.now().year
|
|
305
305
|
month = datetime.datetime.now().month
|
|
@@ -340,7 +340,7 @@ def option_cffex_hs300_daily_sina(symbol: str = "io2202P4350") -> pd.DataFrame:
|
|
|
340
340
|
:param symbol: 具体合约代码(包括看涨和看跌标识), 可以通过 ak.option_cffex_hs300_spot_sina 中的 call-标识 获取
|
|
341
341
|
:type symbol: str
|
|
342
342
|
:return: 日频率数据
|
|
343
|
-
:rtype:
|
|
343
|
+
:rtype: pandas.DataFrame
|
|
344
344
|
"""
|
|
345
345
|
year = datetime.datetime.now().year
|
|
346
346
|
month = datetime.datetime.now().month
|
|
@@ -383,7 +383,7 @@ def option_cffex_zz1000_daily_sina(
|
|
|
383
383
|
:param symbol: 具体合约代码(包括看涨和看跌标识), 可以通过 ak.option_cffex_zz1000_spot_sina 中的 call-标识 获取
|
|
384
384
|
:type symbol: str
|
|
385
385
|
:return: 日频率数据
|
|
386
|
-
:rtype:
|
|
386
|
+
:rtype: pandas.DataFrame
|
|
387
387
|
"""
|
|
388
388
|
year = datetime.datetime.now().year
|
|
389
389
|
month = datetime.datetime.now().month
|
|
@@ -430,7 +430,7 @@ def option_sse_list_sina(symbol: str = "50ETF", exchange: str = "null") -> List[
|
|
|
430
430
|
:return: 合约到期时间
|
|
431
431
|
:rtype: list
|
|
432
432
|
"""
|
|
433
|
-
url = "
|
|
433
|
+
url = "https://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionService.getStockName"
|
|
434
434
|
params = {"exchange": f"{exchange}", "cate": f"{symbol}"}
|
|
435
435
|
r = requests.get(url, params=params)
|
|
436
436
|
data_json = r.json()
|
|
@@ -452,7 +452,7 @@ def option_sse_expire_day_sina(
|
|
|
452
452
|
:return: (到期时间, 剩余时间)
|
|
453
453
|
:rtype: tuple
|
|
454
454
|
"""
|
|
455
|
-
url = "
|
|
455
|
+
url = "https://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionService.getRemainderDay"
|
|
456
456
|
params = {
|
|
457
457
|
"exchange": f"{exchange}",
|
|
458
458
|
"cate": f"{symbol}",
|
|
@@ -462,7 +462,7 @@ def option_sse_expire_day_sina(
|
|
|
462
462
|
data_json = r.json()
|
|
463
463
|
data = data_json["result"]["data"]
|
|
464
464
|
if int(data["remainderDays"]) < 0:
|
|
465
|
-
url = "
|
|
465
|
+
url = "https://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionService.getRemainderDay"
|
|
466
466
|
params = {
|
|
467
467
|
"exchange": f"{exchange}",
|
|
468
468
|
"cate": f"{'XD' + symbol}",
|
|
@@ -494,7 +494,7 @@ def option_sse_codes_sina(
|
|
|
494
494
|
if symbol == "看涨期权":
|
|
495
495
|
url = "".join(
|
|
496
496
|
[
|
|
497
|
-
"
|
|
497
|
+
"https://hq.sinajs.cn/list=OP_UP_",
|
|
498
498
|
underlying,
|
|
499
499
|
str(trade_date)[-4:],
|
|
500
500
|
]
|
|
@@ -502,7 +502,7 @@ def option_sse_codes_sina(
|
|
|
502
502
|
else:
|
|
503
503
|
url = "".join(
|
|
504
504
|
[
|
|
505
|
-
"
|
|
505
|
+
"https://hq.sinajs.cn/list=OP_DOWN_",
|
|
506
506
|
underlying,
|
|
507
507
|
str(trade_date)[-4:],
|
|
508
508
|
]
|
|
@@ -547,7 +547,7 @@ def option_sse_spot_price_sina(symbol: str = "10003720") -> pd.DataFrame:
|
|
|
547
547
|
:return: 期权量价数据
|
|
548
548
|
:rtype: pandas.DataFrame
|
|
549
549
|
"""
|
|
550
|
-
url = f"
|
|
550
|
+
url = f"https://hq.sinajs.cn/list=CON_OP_{symbol}"
|
|
551
551
|
headers = {
|
|
552
552
|
"Accept": "*/*",
|
|
553
553
|
"Accept-Encoding": "gzip, deflate, br",
|
|
@@ -628,7 +628,7 @@ def option_sse_underlying_spot_price_sina(
|
|
|
628
628
|
:return: 期权标的物的信息
|
|
629
629
|
:rtype: pandas.DataFrame
|
|
630
630
|
"""
|
|
631
|
-
url = f"
|
|
631
|
+
url = f"https://hq.sinajs.cn/list={symbol}"
|
|
632
632
|
headers = {
|
|
633
633
|
"Accept": "*/*",
|
|
634
634
|
"Accept-Encoding": "gzip, deflate",
|
|
@@ -637,7 +637,7 @@ def option_sse_underlying_spot_price_sina(
|
|
|
637
637
|
"Host": "hq.sinajs.cn",
|
|
638
638
|
"Pragma": "no-cache",
|
|
639
639
|
"Proxy-Connection": "keep-alive",
|
|
640
|
-
"Referer": "
|
|
640
|
+
"Referer": "https://vip.stock.finance.sina.com.cn/",
|
|
641
641
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
642
642
|
"Chrome/97.0.4692.71 Safari/537.36",
|
|
643
643
|
}
|
|
@@ -691,7 +691,7 @@ def option_sse_greeks_sina(symbol: str = "10003045") -> pd.DataFrame:
|
|
|
691
691
|
:return: 期权基本信息表
|
|
692
692
|
:rtype: pandas.DataFrame
|
|
693
693
|
"""
|
|
694
|
-
url = f"
|
|
694
|
+
url = f"https://hq.sinajs.cn/list=CON_SO_{symbol}"
|
|
695
695
|
headers = {
|
|
696
696
|
"Accept": "*/*",
|
|
697
697
|
"Accept-Encoding": "gzip, deflate",
|
|
@@ -700,7 +700,7 @@ def option_sse_greeks_sina(symbol: str = "10003045") -> pd.DataFrame:
|
|
|
700
700
|
"Host": "hq.sinajs.cn",
|
|
701
701
|
"Pragma": "no-cache",
|
|
702
702
|
"Proxy-Connection": "keep-alive",
|
|
703
|
-
"Referer": "
|
|
703
|
+
"Referer": "https://vip.stock.finance.sina.com.cn/",
|
|
704
704
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
705
705
|
"Chrome/97.0.4692.71 Safari/537.36",
|
|
706
706
|
}
|
|
@@ -781,7 +781,7 @@ def option_sse_daily_sina(symbol: str = "10003889") -> pd.DataFrame:
|
|
|
781
781
|
:return: 指定期权的所有日频率历史数据
|
|
782
782
|
:rtype: pandas.DataFrame
|
|
783
783
|
"""
|
|
784
|
-
url = "
|
|
784
|
+
url = "https://stock.finance.sina.com.cn/futures/api/jsonp_v2.php//StockOptionDaylineService.getSymbolInfo"
|
|
785
785
|
params = {"symbol": f"CON_OP_{symbol}"}
|
|
786
786
|
headers = {
|
|
787
787
|
"accept": "*/*",
|
|
@@ -858,8 +858,8 @@ def option_finance_minute_sina(symbol: str = "10002530") -> pd.DataFrame:
|
|
|
858
858
|
|
|
859
859
|
@lru_cache()
|
|
860
860
|
def __option_current_em() -> pd.DataFrame:
|
|
861
|
-
|
|
862
|
-
return
|
|
861
|
+
inner_option_current_em_df = option_current_em()
|
|
862
|
+
return inner_option_current_em_df
|
|
863
863
|
|
|
864
864
|
|
|
865
865
|
def option_minute_em(symbol: str = "MO2404-P-4450") -> pd.DataFrame:
|
|
@@ -871,13 +871,15 @@ def option_minute_em(symbol: str = "MO2404-P-4450") -> pd.DataFrame:
|
|
|
871
871
|
:return: 指定期权的分钟频率数据
|
|
872
872
|
:rtype: pandas.DataFrame
|
|
873
873
|
"""
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
874
|
+
inner_option_current_em_df = __option_current_em()
|
|
875
|
+
inner_option_current_em_df["标识"] = (
|
|
876
|
+
inner_option_current_em_df["市场标识"].astype(str)
|
|
877
877
|
+ "."
|
|
878
|
-
+
|
|
878
|
+
+ inner_option_current_em_df["代码"]
|
|
879
879
|
)
|
|
880
|
-
id_ =
|
|
880
|
+
id_ = inner_option_current_em_df[inner_option_current_em_df["代码"] == symbol][
|
|
881
|
+
"标识"
|
|
882
|
+
].values[0]
|
|
881
883
|
url = "https://push2.eastmoney.com/api/qt/stock/trends2/get"
|
|
882
884
|
params = {
|
|
883
885
|
"secid": id_,
|
|
@@ -973,5 +975,5 @@ if __name__ == "__main__":
|
|
|
973
975
|
option_current_em_df = option_current_em()
|
|
974
976
|
print(option_current_em_df)
|
|
975
977
|
|
|
976
|
-
option_minute_em_df = option_minute_em(symbol="
|
|
978
|
+
option_minute_em_df = option_minute_em(symbol="10008594")
|
|
977
979
|
print(option_minute_em_df)
|
akshare/option/option_lhb_em.py
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# -*- coding:utf-8 -*-
|
|
2
2
|
# !/usr/bin/env python
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2024/7/30 17:00
|
|
5
5
|
Desc: 东方财富网-数据中心-特色数据-期权龙虎榜单
|
|
6
6
|
https://data.eastmoney.com/other/qqlhb.html
|
|
7
7
|
"""
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
import pandas as pd
|
|
10
|
+
import requests
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
def option_lhb_em(
|
|
@@ -15,7 +16,7 @@ def option_lhb_em(
|
|
|
15
16
|
trade_date: str = "20220121",
|
|
16
17
|
) -> pd.DataFrame:
|
|
17
18
|
"""
|
|
18
|
-
|
|
19
|
+
东方财富网-数据中心-期货期权-期权龙虎榜单
|
|
19
20
|
https://data.eastmoney.com/other/qqlhb.html
|
|
20
21
|
:param symbol: 期权代码; choice of {"510050", "510300", "159919"}
|
|
21
22
|
:type symbol: str
|
|
@@ -30,13 +31,13 @@ def option_lhb_em(
|
|
|
30
31
|
params = {
|
|
31
32
|
"type": "RPT_IF_BILLBOARD_TD",
|
|
32
33
|
"sty": "ALL",
|
|
33
|
-
"filter": f"""(SECURITY_CODE="{symbol}")(TRADE_DATE='{'-'.join([trade_date[:4],
|
|
34
|
+
"filter": f"""(SECURITY_CODE="{symbol}")(TRADE_DATE='{'-'.join([trade_date[:4],
|
|
35
|
+
trade_date[4:6], trade_date[6:]])}')""",
|
|
34
36
|
"p": "1",
|
|
35
37
|
"pss": "200",
|
|
36
38
|
"source": "IFBILLBOARD",
|
|
37
39
|
"client": "WEB",
|
|
38
40
|
"ut": "b2884a393a59ad64002292a3e90d46a5",
|
|
39
|
-
"_": "1642904215146",
|
|
40
41
|
}
|
|
41
42
|
r = requests.get(url, params=params)
|
|
42
43
|
data_json = r.json()
|
|
@@ -84,12 +85,16 @@ def option_lhb_em(
|
|
|
84
85
|
"占总交易量比例",
|
|
85
86
|
]
|
|
86
87
|
]
|
|
87
|
-
temp_df["交易日期"] = pd.to_datetime(
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
temp_df["
|
|
91
|
-
temp_df["
|
|
92
|
-
temp_df["
|
|
88
|
+
temp_df["交易日期"] = pd.to_datetime(
|
|
89
|
+
temp_df["交易日期"], errors="coerce"
|
|
90
|
+
).dt.date
|
|
91
|
+
temp_df["名次"] = pd.to_numeric(temp_df["名次"], errors="coerce")
|
|
92
|
+
temp_df["交易量"] = pd.to_numeric(temp_df["交易量"], errors="coerce")
|
|
93
|
+
temp_df["增减"] = pd.to_numeric(temp_df["增减"], errors="coerce")
|
|
94
|
+
temp_df["净认沽量"] = pd.to_numeric(temp_df["净认沽量"], errors="coerce")
|
|
95
|
+
temp_df["占总交易量比例"] = pd.to_numeric(
|
|
96
|
+
temp_df["占总交易量比例"], errors="coerce"
|
|
97
|
+
)
|
|
93
98
|
temp_df.reset_index(drop=True, inplace=True)
|
|
94
99
|
return temp_df
|
|
95
100
|
elif indicator == "期权持仓情况-认沽持仓量":
|
|
@@ -135,12 +140,16 @@ def option_lhb_em(
|
|
|
135
140
|
"占总交易量比例",
|
|
136
141
|
]
|
|
137
142
|
]
|
|
138
|
-
temp_df["交易日期"] = pd.to_datetime(
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
temp_df["
|
|
142
|
-
temp_df["
|
|
143
|
-
temp_df["
|
|
143
|
+
temp_df["交易日期"] = pd.to_datetime(
|
|
144
|
+
temp_df["交易日期"], errors="coerce"
|
|
145
|
+
).dt.date
|
|
146
|
+
temp_df["名次"] = pd.to_numeric(temp_df["名次"], errors="coerce")
|
|
147
|
+
temp_df["持仓量"] = pd.to_numeric(temp_df["持仓量"], errors="coerce")
|
|
148
|
+
temp_df["增减"] = pd.to_numeric(temp_df["增减"], errors="coerce")
|
|
149
|
+
temp_df["净持仓量"] = pd.to_numeric(temp_df["净持仓量"], errors="coerce")
|
|
150
|
+
temp_df["占总交易量比例"] = pd.to_numeric(
|
|
151
|
+
temp_df["占总交易量比例"], errors="coerce"
|
|
152
|
+
)
|
|
144
153
|
temp_df.reset_index(drop=True, inplace=True)
|
|
145
154
|
return temp_df
|
|
146
155
|
elif indicator == "期权交易情况-认购交易量":
|
|
@@ -186,43 +195,35 @@ def option_lhb_em(
|
|
|
186
195
|
"占总交易量比例",
|
|
187
196
|
]
|
|
188
197
|
]
|
|
189
|
-
temp_df["交易日期"] = pd.to_datetime(
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
temp_df["
|
|
193
|
-
temp_df["
|
|
194
|
-
temp_df["
|
|
198
|
+
temp_df["交易日期"] = pd.to_datetime(
|
|
199
|
+
temp_df["交易日期"], errors="coerce"
|
|
200
|
+
).dt.date
|
|
201
|
+
temp_df["名次"] = pd.to_numeric(temp_df["名次"], errors="coerce")
|
|
202
|
+
temp_df["交易量"] = pd.to_numeric(temp_df["交易量"], errors="coerce")
|
|
203
|
+
temp_df["增减"] = pd.to_numeric(temp_df["增减"], errors="coerce")
|
|
204
|
+
temp_df["净交易量"] = pd.to_numeric(temp_df["净交易量"], errors="coerce")
|
|
205
|
+
temp_df["占总交易量比例"] = pd.to_numeric(
|
|
206
|
+
temp_df["占总交易量比例"], errors="coerce"
|
|
207
|
+
)
|
|
195
208
|
temp_df.reset_index(drop=True, inplace=True)
|
|
196
209
|
return temp_df
|
|
197
210
|
elif indicator == "期权持仓情况-认购持仓量":
|
|
198
211
|
temp_df = temp_df.iloc[21:, :]
|
|
199
|
-
temp_df.
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
"-",
|
|
215
|
-
"-",
|
|
216
|
-
"-",
|
|
217
|
-
"-",
|
|
218
|
-
"-",
|
|
219
|
-
"-",
|
|
220
|
-
"-",
|
|
221
|
-
"持仓量",
|
|
222
|
-
"增减",
|
|
223
|
-
"净持仓量",
|
|
224
|
-
"占总交易量比例",
|
|
225
|
-
]
|
|
212
|
+
temp_df.rename(
|
|
213
|
+
columns={
|
|
214
|
+
"MEMBER_RANK": "名次",
|
|
215
|
+
"MEMBER_NAME_ABBR": "机构",
|
|
216
|
+
"BUY_POSITION": "持仓量",
|
|
217
|
+
"BUY_POSITION_CHANGE": "增减",
|
|
218
|
+
"NET_BUY_POSITION": "净持仓量",
|
|
219
|
+
"BUY_POSITION_RATIO": "占总交易量比例",
|
|
220
|
+
"TRADE_TYPE": "交易类型",
|
|
221
|
+
"TRADE_DATE": "交易日期",
|
|
222
|
+
"SECURITY_CODE": "证券代码",
|
|
223
|
+
"TARGET_NAME": "标的名称",
|
|
224
|
+
},
|
|
225
|
+
inplace=True,
|
|
226
|
+
)
|
|
226
227
|
temp_df = temp_df[
|
|
227
228
|
[
|
|
228
229
|
"交易类型",
|
|
@@ -237,12 +238,16 @@ def option_lhb_em(
|
|
|
237
238
|
"占总交易量比例",
|
|
238
239
|
]
|
|
239
240
|
]
|
|
240
|
-
temp_df["交易日期"] = pd.to_datetime(
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
temp_df["
|
|
244
|
-
temp_df["
|
|
245
|
-
temp_df["
|
|
241
|
+
temp_df["交易日期"] = pd.to_datetime(
|
|
242
|
+
temp_df["交易日期"], errors="coerce"
|
|
243
|
+
).dt.date
|
|
244
|
+
temp_df["名次"] = pd.to_numeric(temp_df["名次"], errors="coerce")
|
|
245
|
+
temp_df["持仓量"] = pd.to_numeric(temp_df["持仓量"], errors="coerce")
|
|
246
|
+
temp_df["增减"] = pd.to_numeric(temp_df["增减"], errors="coerce")
|
|
247
|
+
temp_df["净持仓量"] = pd.to_numeric(temp_df["净持仓量"], errors="coerce")
|
|
248
|
+
temp_df["占总交易量比例"] = pd.to_numeric(
|
|
249
|
+
temp_df["占总交易量比例"], errors="coerce"
|
|
250
|
+
)
|
|
246
251
|
temp_df.reset_index(drop=True, inplace=True)
|
|
247
252
|
return temp_df
|
|
248
253
|
|
|
@@ -259,7 +264,7 @@ if __name__ == "__main__":
|
|
|
259
264
|
print(option_lhb_em_df)
|
|
260
265
|
|
|
261
266
|
option_lhb_em_df = option_lhb_em(
|
|
262
|
-
symbol="
|
|
267
|
+
symbol="159919", indicator="期权持仓情况-认购持仓量", trade_date="20240712"
|
|
263
268
|
)
|
|
264
269
|
print(option_lhb_em_df)
|
|
265
270
|
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# -*- coding:utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
Date: 2025/6/16 18:00
|
|
5
|
+
Desc: 唯爱期货-期权保证金
|
|
6
|
+
https://www.iweiai.com/qihuo/yuanyou
|
|
7
|
+
"""
|
|
8
|
+
import requests
|
|
9
|
+
import pandas as pd
|
|
10
|
+
from io import StringIO
|
|
11
|
+
|
|
12
|
+
from bs4 import BeautifulSoup
|
|
13
|
+
from functools import lru_cache
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@lru_cache()
|
|
17
|
+
def option_margin_symbol() -> pd.DataFrame:
|
|
18
|
+
"""
|
|
19
|
+
获取商品期权品种代码和名称
|
|
20
|
+
:return: 商品期权品种代码和名称
|
|
21
|
+
:rtype: pandas.DataFrame
|
|
22
|
+
"""
|
|
23
|
+
url = "https://www.iweiai.com/qiquan/yuanyou"
|
|
24
|
+
r = requests.get(url)
|
|
25
|
+
soup = BeautifulSoup(r.content, features="lxml")
|
|
26
|
+
symbol_text = [item.get_text() for item in soup.find_all("a") if "qiquan" in item['href']]
|
|
27
|
+
symbol_url = [item['href'] for item in soup.find_all("a") if "qiquan" in item['href']]
|
|
28
|
+
symbol_df = pd.DataFrame([symbol_text, symbol_url]).T
|
|
29
|
+
symbol_df.columns = ["symbol", "url"]
|
|
30
|
+
return symbol_df
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def option_margin(symbol: str = "原油期权") -> pd.DataFrame:
|
|
34
|
+
"""
|
|
35
|
+
获取商品期权保证金
|
|
36
|
+
:param symbol: 商品期权品种名称, 如 "原油期权",可以通过 ak.option_margin_symbol() 获取所有商品期权品种代码和名称
|
|
37
|
+
:type symbol: str
|
|
38
|
+
:return: 商品期权保证金
|
|
39
|
+
:rtype: pandas.DataFrame
|
|
40
|
+
"""
|
|
41
|
+
option_margin_symbol_df = option_margin_symbol()
|
|
42
|
+
url = option_margin_symbol_df[option_margin_symbol_df['symbol'] == symbol]['url'].values[0]
|
|
43
|
+
r = requests.get(url)
|
|
44
|
+
soup = BeautifulSoup(r.content, features="lxml")
|
|
45
|
+
updated_time = soup.find_all("small")[0].get_text().strip("最近更新:")
|
|
46
|
+
temp_df = pd.read_html(StringIO(r.text))[0]
|
|
47
|
+
temp_df['更新时间'] = updated_time
|
|
48
|
+
|
|
49
|
+
temp_df['结算价'] = pd.to_numeric(temp_df['结算价'], errors='coerce')
|
|
50
|
+
temp_df['交易乘数'] = pd.to_numeric(temp_df['交易乘数'], errors='coerce')
|
|
51
|
+
temp_df['买方权利金'] = pd.to_numeric(temp_df['买方权利金'], errors='coerce')
|
|
52
|
+
temp_df['卖方保证金'] = pd.to_numeric(temp_df['卖方保证金'], errors='coerce')
|
|
53
|
+
temp_df['开仓手续费'] = pd.to_numeric(temp_df['开仓手续费'], errors='coerce')
|
|
54
|
+
temp_df['平今手续费'] = pd.to_numeric(temp_df['平今手续费'], errors='coerce')
|
|
55
|
+
temp_df['平昨手续费'] = pd.to_numeric(temp_df['平昨手续费'], errors='coerce')
|
|
56
|
+
temp_df['手续费(开+平今)'] = pd.to_numeric(temp_df['手续费(开+平今)'], errors='coerce')
|
|
57
|
+
return temp_df
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
if __name__ == '__main__':
|
|
61
|
+
option_margin_df = option_margin(symbol="原油期权")
|
|
62
|
+
print(option_margin_df)
|