akshare 1.14.49__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 +595 -129
- akshare/air/air_hebei.py +77 -54
- akshare/air/air_zhenqi.py +0 -4
- akshare/air/cons.py +1 -0
- akshare/air/crypto.js +1 -1
- akshare/air/outcrypto.js +1 -1
- 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 +1 -1
- akshare/bond/bond_convert.py +10 -9
- akshare/bond/bond_em.py +37 -17
- akshare/bond/bond_summary.py +38 -37
- akshare/bond/bond_zh_cov.py +31 -40
- akshare/bond/bond_zh_sina.py +4 -0
- 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/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 +97 -105
- akshare/economic/macro_china_hk.py +0 -1
- akshare/economic/macro_euro.py +103 -56
- akshare/economic/macro_finance_ths.py +7 -5
- akshare/economic/macro_germany.py +1 -1
- 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 +0 -1
- akshare/energy/energy_oil_em.py +1 -2
- akshare/event/cons.py +1 -0
- 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 +1 -37
- 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_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 +75 -27
- akshare/fund/fund_etf_ths.py +2 -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 +23 -21
- akshare/fund/fund_position_lg.py +19 -8
- akshare/fund/fund_rank_em.py +2 -5
- akshare/fund/fund_rating.py +33 -12
- 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 +135 -39
- akshare/futures/cot.py +55 -56
- akshare/futures/futures_basis.py +49 -11
- akshare/futures/futures_comex_em.py +1 -0
- akshare/futures/futures_comm_ctp.py +1 -1
- akshare/futures/futures_contract_detail.py +59 -9
- akshare/futures/futures_daily_bar.py +66 -59
- 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 +5 -3
- 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 +0 -1
- akshare/futures/futures_to_spot.py +5 -6
- akshare/futures/futures_warehouse_receipt.py +48 -47
- akshare/futures/futures_zh_sina.py +3 -3
- 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 +3 -4
- akshare/futures_derivative/futures_cot_sina.py +8 -6
- akshare/futures_derivative/futures_index_sina.py +25 -13
- akshare/fx/cons.py +12 -7
- 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_cni.py +7 -7
- akshare/index/index_cons.py +2 -2
- akshare/index/index_csindex.py +68 -0
- akshare/index/index_cx.py +20 -20
- 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 +21 -21
- akshare/index/index_spot.py +9 -5
- akshare/index/index_stock_hk.py +5 -9
- akshare/index/index_stock_zh.py +111 -24
- akshare/index/index_stock_zh_csindex.py +3 -367
- akshare/index/index_sugar.py +18 -4
- akshare/index/index_sw.py +10 -2
- akshare/index/index_yw.py +53 -75
- akshare/index/index_zh_em.py +15 -82
- akshare/interest_rate/interbank_rate_em.py +0 -1
- akshare/movie/jm.js +0 -1
- akshare/news/__init__.py +1 -1
- akshare/news/news_baidu.py +395 -222
- akshare/news/news_stock.py +49 -16
- akshare/option/cons.py +2 -2
- akshare/option/option_commodity.py +341 -220
- 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 +0 -1
- akshare/option/option_em.py +4 -8
- akshare/option/option_finance.py +60 -12
- akshare/option/option_finance_sina.py +7 -7
- akshare/option/option_lhb_em.py +0 -1
- 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 +3 -4
- akshare/option/option_value_analysis_em.py +62 -55
- akshare/other/__init__.py +1 -1
- 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 +165 -3
- akshare/spot/spot_sge.py +70 -9
- akshare/stock/cons.py +60 -23
- akshare/stock/stock_allotment_cninfo.py +8 -8
- 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_dividend_cninfo.py +31 -17
- akshare/stock/stock_dzjy_em.py +347 -260
- akshare/stock/stock_fund_em.py +72 -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 +4 -5
- 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 +84 -36
- akshare/stock/stock_hold_control_cninfo.py +82 -0
- akshare/stock/stock_hold_control_em.py +0 -2
- 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 +1 -2
- akshare/stock/stock_info.py +6 -4
- akshare/stock/stock_info_em.py +17 -11
- akshare/stock/stock_intraday_em.py +4 -78
- akshare/stock/stock_intraday_sina.py +2 -2
- akshare/stock/stock_news_cx.py +39 -0
- akshare/stock/stock_profile_cninfo.py +7 -7
- akshare/stock/stock_profile_em.py +302 -0
- akshare/stock/stock_rank_forecast.py +6 -5
- akshare/stock/stock_repurchase_em.py +7 -2
- akshare/stock/stock_share_changes_cninfo.py +7 -5
- 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 +5 -6
- akshare/stock/stock_us_js.py +3 -2
- akshare/stock/stock_us_pink.py +38 -27
- akshare/stock/stock_us_sina.py +7 -3
- akshare/stock/stock_weibo_nlp.py +18 -20
- akshare/stock/stock_xq.py +24 -22
- akshare/stock/stock_zh_a_sina.py +8 -5
- 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 +2 -2
- akshare/stock/stock_zh_comparison_em.py +250 -0
- 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_indicator.py +9 -54
- akshare/stock_feature/stock_a_pe_and_pb.py +23 -5
- 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 +328 -0
- akshare/stock_feature/stock_board_industry_ths.py +57 -2
- 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_congestion_lg.py +2 -1
- akshare/stock_feature/stock_cyq_em.py +5 -11
- akshare/stock_feature/stock_disclosure_cninfo.py +6 -6
- 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 +29 -7
- akshare/stock_feature/stock_fhps_em.py +2 -1
- akshare/stock_feature/stock_fhps_ths.py +15 -7
- akshare/stock_feature/stock_fund_flow.py +30 -22
- 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 +137 -234
- 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 +7 -80
- akshare/stock_feature/stock_inner_trade_xq.py +38 -31
- akshare/stock_feature/stock_jgdy_em.py +43 -40
- akshare/stock_feature/stock_lhb_em.py +119 -3
- akshare/stock_feature/stock_margin_em.py +0 -1
- akshare/stock_feature/stock_margin_sse.py +0 -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 +151 -7
- akshare/stock_feature/stock_research_report_em.py +55 -20
- akshare/stock_feature/stock_sy_em.py +20 -15
- akshare/stock_feature/stock_technology_ths.py +122 -77
- akshare/stock_feature/stock_tfp_em.py +2 -1
- akshare/stock_feature/stock_three_report_em.py +21 -5
- 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_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} +60 -7
- 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 +12 -3
- 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_zygc.py +5 -62
- 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-1.14.49.dist-info → akshare-1.17.99.dist-info}/METADATA +54 -80
- akshare-1.17.99.dist-info/RECORD +409 -0
- {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
- {akshare-1.14.49.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/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 -53
- 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/stock_feature/stock_wencai.py +0 -104
- akshare/stock_fundamental/stock_mda_ym.py +0 -40
- akshare-1.14.49.dist-info/RECORD +0 -387
- {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
|
@@ -5,6 +5,7 @@ Date: 2022/1/23 10:21
|
|
|
5
5
|
Desc: 新浪财经-商品期权
|
|
6
6
|
https://stock.finance.sina.com.cn/futures/view/optionsDP.php
|
|
7
7
|
"""
|
|
8
|
+
|
|
8
9
|
import pandas as pd
|
|
9
10
|
import requests
|
|
10
11
|
from bs4 import BeautifulSoup
|
|
@@ -21,9 +22,7 @@ def option_commodity_contract_sina(symbol: str = "玉米期权") -> pd.DataFrame
|
|
|
21
22
|
:return: e.g., {'黄金期权': ['au2012', 'au2008', 'au2010', 'au2104', 'au2102', 'au2106', 'au2108']}
|
|
22
23
|
:rtype: dict
|
|
23
24
|
"""
|
|
24
|
-
url =
|
|
25
|
-
"https://stock.finance.sina.com.cn/futures/view/optionsDP.php/pg_o/dce"
|
|
26
|
-
)
|
|
25
|
+
url = "https://stock.finance.sina.com.cn/futures/view/optionsDP.php/pg_o/dce"
|
|
27
26
|
r = requests.get(url)
|
|
28
27
|
soup = BeautifulSoup(r.text, "lxml")
|
|
29
28
|
url_list = [
|
|
@@ -36,20 +35,15 @@ def option_commodity_contract_sina(symbol: str = "玉米期权") -> pd.DataFrame
|
|
|
36
35
|
for item in soup.find_all("li", attrs={"class": "active"})
|
|
37
36
|
if item.find("a") is not None
|
|
38
37
|
]
|
|
39
|
-
comm_list_dict = {
|
|
40
|
-
key: value for key, value in zip(commodity_list, url_list)
|
|
41
|
-
}
|
|
38
|
+
comm_list_dict = {key: value for key, value in zip(commodity_list, url_list)}
|
|
42
39
|
url = "https://stock.finance.sina.com.cn" + comm_list_dict[symbol]
|
|
43
40
|
r = requests.get(url)
|
|
44
41
|
soup = BeautifulSoup(r.text, "lxml")
|
|
45
42
|
symbol = (
|
|
46
|
-
soup.find(attrs={"id": "option_symbol"})
|
|
47
|
-
.find(attrs={"class": "selected"})
|
|
48
|
-
.text
|
|
43
|
+
soup.find(attrs={"id": "option_symbol"}).find(attrs={"class": "selected"}).text
|
|
49
44
|
)
|
|
50
45
|
contract = [
|
|
51
|
-
item.text
|
|
52
|
-
for item in soup.find(attrs={"id": "option_suffix"}).find_all("li")
|
|
46
|
+
item.text for item in soup.find(attrs={"id": "option_suffix"}).find_all("li")
|
|
53
47
|
]
|
|
54
48
|
temp_df = pd.DataFrame({symbol: contract})
|
|
55
49
|
temp_df.reset_index(inplace=True)
|
|
@@ -71,9 +65,7 @@ def option_commodity_contract_table_sina(
|
|
|
71
65
|
:return: 合约实时行情
|
|
72
66
|
:rtype: pandas.DataFrame
|
|
73
67
|
"""
|
|
74
|
-
url =
|
|
75
|
-
"https://stock.finance.sina.com.cn/futures/view/optionsDP.php/pg_o/dce"
|
|
76
|
-
)
|
|
68
|
+
url = "https://stock.finance.sina.com.cn/futures/view/optionsDP.php/pg_o/dce"
|
|
77
69
|
r = requests.get(url)
|
|
78
70
|
soup = BeautifulSoup(r.text, "lxml")
|
|
79
71
|
url_list = [
|
|
@@ -86,9 +78,7 @@ def option_commodity_contract_table_sina(
|
|
|
86
78
|
for item in soup.find_all("li", attrs={"class": "active"})
|
|
87
79
|
if item.find("a") is not None
|
|
88
80
|
]
|
|
89
|
-
comm_list_dict = {
|
|
90
|
-
key: value for key, value in zip(commodity_list, url_list)
|
|
91
|
-
}
|
|
81
|
+
comm_list_dict = {key: value for key, value in zip(commodity_list, url_list)}
|
|
92
82
|
url = "https://stock.finance.sina.com.cn/futures/api/openapi.php/OptionService.getOptionData"
|
|
93
83
|
params = {
|
|
94
84
|
"type": "futures",
|
|
@@ -122,18 +112,26 @@ def option_commodity_contract_table_sina(
|
|
|
122
112
|
]
|
|
123
113
|
temp_df["看涨合约-买量"] = pd.to_numeric(temp_df["看涨合约-买量"], errors="coerce")
|
|
124
114
|
temp_df["看涨合约-买价"] = pd.to_numeric(temp_df["看涨合约-买价"], errors="coerce")
|
|
125
|
-
temp_df["看涨合约-最新价"] = pd.to_numeric(
|
|
115
|
+
temp_df["看涨合约-最新价"] = pd.to_numeric(
|
|
116
|
+
temp_df["看涨合约-最新价"], errors="coerce"
|
|
117
|
+
)
|
|
126
118
|
temp_df["看涨合约-卖价"] = pd.to_numeric(temp_df["看涨合约-卖价"], errors="coerce")
|
|
127
119
|
temp_df["看涨合约-卖量"] = pd.to_numeric(temp_df["看涨合约-卖量"], errors="coerce")
|
|
128
|
-
temp_df["看涨合约-持仓量"] = pd.to_numeric(
|
|
120
|
+
temp_df["看涨合约-持仓量"] = pd.to_numeric(
|
|
121
|
+
temp_df["看涨合约-持仓量"], errors="coerce"
|
|
122
|
+
)
|
|
129
123
|
temp_df["看涨合约-涨跌"] = pd.to_numeric(temp_df["看涨合约-涨跌"], errors="coerce")
|
|
130
124
|
temp_df["行权价"] = pd.to_numeric(temp_df["行权价"], errors="coerce")
|
|
131
125
|
temp_df["看跌合约-买量"] = pd.to_numeric(temp_df["看跌合约-买量"], errors="coerce")
|
|
132
126
|
temp_df["看跌合约-买价"] = pd.to_numeric(temp_df["看跌合约-买价"], errors="coerce")
|
|
133
|
-
temp_df["看跌合约-最新价"] = pd.to_numeric(
|
|
127
|
+
temp_df["看跌合约-最新价"] = pd.to_numeric(
|
|
128
|
+
temp_df["看跌合约-最新价"], errors="coerce"
|
|
129
|
+
)
|
|
134
130
|
temp_df["看跌合约-卖价"] = pd.to_numeric(temp_df["看跌合约-卖价"], errors="coerce")
|
|
135
131
|
temp_df["看跌合约-卖量"] = pd.to_numeric(temp_df["看跌合约-卖量"], errors="coerce")
|
|
136
|
-
temp_df["看跌合约-持仓量"] = pd.to_numeric(
|
|
132
|
+
temp_df["看跌合约-持仓量"] = pd.to_numeric(
|
|
133
|
+
temp_df["看跌合约-持仓量"], errors="coerce"
|
|
134
|
+
)
|
|
137
135
|
temp_df["看跌合约-涨跌"] = pd.to_numeric(temp_df["看跌合约-涨跌"], errors="coerce")
|
|
138
136
|
return temp_df
|
|
139
137
|
|
|
@@ -170,12 +168,10 @@ if __name__ == "__main__":
|
|
|
170
168
|
)
|
|
171
169
|
print(option_commodity_contract_sina_df)
|
|
172
170
|
|
|
173
|
-
option_commodity_contract_table_sina_df = (
|
|
174
|
-
|
|
171
|
+
option_commodity_contract_table_sina_df = option_commodity_contract_table_sina(
|
|
172
|
+
symbol="棉花期权", contract="cf2301"
|
|
175
173
|
)
|
|
176
174
|
print(option_commodity_contract_table_sina_df)
|
|
177
175
|
|
|
178
|
-
option_commodity_hist_sina_df = option_commodity_hist_sina(
|
|
179
|
-
symbol="cf2301P21600"
|
|
180
|
-
)
|
|
176
|
+
option_commodity_hist_sina_df = option_commodity_hist_sina(symbol="cf2301P21600")
|
|
181
177
|
print(option_commodity_hist_sina_df)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# -*- coding:utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
Date: 2025/10/30 17:40
|
|
5
|
+
Desc: openctp-合约信息接口
|
|
6
|
+
http://openctp.cn/instruments.html
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import pandas as pd
|
|
10
|
+
import requests
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def option_contract_info_ctp() -> pd.DataFrame:
|
|
14
|
+
"""
|
|
15
|
+
openctp-合约信息接口-期权合约
|
|
16
|
+
http://openctp.cn/instruments.html
|
|
17
|
+
:return: 期权合约信息
|
|
18
|
+
:rtype: pandas.DataFrame
|
|
19
|
+
"""
|
|
20
|
+
url = "http://dict.openctp.cn/instruments?types=option"
|
|
21
|
+
r = requests.get(url)
|
|
22
|
+
data_json = r.json()
|
|
23
|
+
temp_df = pd.DataFrame(data_json['data'])
|
|
24
|
+
|
|
25
|
+
# 字段映射:英文字段名 -> 中文字段名
|
|
26
|
+
column_mapping = {
|
|
27
|
+
'ExchangeID': '交易所ID',
|
|
28
|
+
'InstrumentID': '合约ID',
|
|
29
|
+
'InstrumentName': '合约名称',
|
|
30
|
+
'ProductClass': '商品类别',
|
|
31
|
+
'ProductID': '品种ID',
|
|
32
|
+
'VolumeMultiple': '合约乘数',
|
|
33
|
+
'PriceTick': '最小变动价位',
|
|
34
|
+
'LongMarginRatioByMoney': '做多保证金率',
|
|
35
|
+
'ShortMarginRatioByMoney': '做空保证金率',
|
|
36
|
+
'LongMarginRatioByVolume': '做多保证金/手',
|
|
37
|
+
'ShortMarginRatioByVolume': '做空保证金/手',
|
|
38
|
+
'OpenRatioByMoney': '开仓手续费率',
|
|
39
|
+
'OpenRatioByVolume': '开仓手续费/手',
|
|
40
|
+
'CloseRatioByMoney': '平仓手续费率',
|
|
41
|
+
'CloseRatioByVolume': '平仓手续费/手',
|
|
42
|
+
'CloseTodayRatioByMoney': '平今手续费率',
|
|
43
|
+
'CloseTodayRatioByVolume': '平今手续费/手',
|
|
44
|
+
'DeliveryYear': '交割年份',
|
|
45
|
+
'DeliveryMonth': '交割月份',
|
|
46
|
+
'OpenDate': '上市日期',
|
|
47
|
+
'ExpireDate': '最后交易日',
|
|
48
|
+
'DeliveryDate': '交割日',
|
|
49
|
+
'UnderlyingInstrID': '标的合约ID',
|
|
50
|
+
'UnderlyingMultiple': '标的合约乘数',
|
|
51
|
+
'OptionsType': '期权类型',
|
|
52
|
+
'StrikePrice': '行权价',
|
|
53
|
+
'InstLifePhase': '合约状态'
|
|
54
|
+
}
|
|
55
|
+
# 重命名列为中文
|
|
56
|
+
temp_df = temp_df.rename(columns=column_mapping)
|
|
57
|
+
return temp_df
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
# 使用示例
|
|
61
|
+
if __name__ == "__main__":
|
|
62
|
+
option_contract_info_ctp_df = option_contract_info_ctp()
|
|
63
|
+
print(option_contract_info_ctp_df)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# -*- coding:utf-8 -*-
|
|
2
|
+
# !/usr/bin/env python
|
|
3
|
+
"""
|
|
4
|
+
Date: 2025/9/8 16:20
|
|
5
|
+
Desc: 上海证券交易所-产品-股票期权-信息披露-当日合约
|
|
6
|
+
http://www.sse.com.cn/assortment/options/disclo/preinfo/
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import pandas as pd
|
|
10
|
+
import requests
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def option_current_day_sse() -> pd.DataFrame:
|
|
14
|
+
"""
|
|
15
|
+
上海证券交易所-产品-股票期权-信息披露-当日合约
|
|
16
|
+
http://www.sse.com.cn/assortment/options/disclo/preinfo/
|
|
17
|
+
:return: 上交所期权当日合约
|
|
18
|
+
:rtype: pandas.DataFrame
|
|
19
|
+
"""
|
|
20
|
+
url = "http://query.sse.com.cn/commonQuery.do"
|
|
21
|
+
params = {
|
|
22
|
+
"isPagination": "false",
|
|
23
|
+
"expireDate": "",
|
|
24
|
+
"securityId": "",
|
|
25
|
+
"sqlId": "SSE_ZQPZ_YSP_GGQQZSXT_XXPL_DRHY_SEARCH_L",
|
|
26
|
+
}
|
|
27
|
+
headers = {
|
|
28
|
+
"Accept": "*/*",
|
|
29
|
+
"Accept-Encoding": "gzip, deflate",
|
|
30
|
+
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
|
|
31
|
+
"Cache-Control": "no-cache",
|
|
32
|
+
"Connection": "keep-alive",
|
|
33
|
+
"Host": "query.sse.com.cn",
|
|
34
|
+
"Pragma": "no-cache",
|
|
35
|
+
"Referer": "http://www.sse.com.cn/",
|
|
36
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
37
|
+
"Chrome/101.0.4951.67 Safari/537.36",
|
|
38
|
+
}
|
|
39
|
+
r = requests.get(url, params=params, headers=headers)
|
|
40
|
+
data_json = r.json()
|
|
41
|
+
temp_df = pd.DataFrame(data_json["result"])
|
|
42
|
+
dict_df = {
|
|
43
|
+
"SECURITY_ID": "合约编码",
|
|
44
|
+
"CONTRACT_ID": "合约交易代码",
|
|
45
|
+
"CONTRACT_SYMBOL": "合约简称",
|
|
46
|
+
"SECURITYNAMEBYID": "标的券名称及代码",
|
|
47
|
+
"CALL_OR_PUT": "类型",
|
|
48
|
+
"EXERCISE_PRICE": "行权价",
|
|
49
|
+
"CONTRACT_UNIT": "合约单位",
|
|
50
|
+
"END_DATE": "期权行权日",
|
|
51
|
+
"DELIVERY_DATE": "行权交收日",
|
|
52
|
+
"EXPIRE_DATE": "到期日",
|
|
53
|
+
"START_DATE": "开始日期",
|
|
54
|
+
}
|
|
55
|
+
temp_df = temp_df[dict_df.keys()].rename(columns=dict_df)
|
|
56
|
+
return temp_df
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
if __name__ == "__main__":
|
|
60
|
+
option_current_day_sse_df = option_current_day_sse()
|
|
61
|
+
print(option_current_day_sse_df)
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# -*- coding:utf-8 -*-
|
|
2
|
+
# !/usr/bin/env python
|
|
3
|
+
"""
|
|
4
|
+
Date: 2025/9/13 16:00
|
|
5
|
+
Desc: 深圳证券交易所-期权子网-行情数据-当日合约
|
|
6
|
+
"""
|
|
7
|
+
from io import BytesIO
|
|
8
|
+
|
|
9
|
+
import pandas as pd
|
|
10
|
+
import requests
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def option_current_day_szse() -> pd.DataFrame:
|
|
14
|
+
"""
|
|
15
|
+
深圳证券交易所-期权子网-行情数据-当日合约
|
|
16
|
+
https://www.sse.org.cn/option/quotation/contract/daycontract/index.html
|
|
17
|
+
:return: 深圳期权当日合约
|
|
18
|
+
:rtype: pandas.DataFrame
|
|
19
|
+
"""
|
|
20
|
+
import warnings
|
|
21
|
+
warnings.filterwarnings(action='ignore', message="Workbook contains no default style")
|
|
22
|
+
url = "https://www.sse.org.cn/api/report/ShowReport"
|
|
23
|
+
params = {
|
|
24
|
+
"SHOWTYPE": "xlsx",
|
|
25
|
+
"CATALOGID": "option_drhy",
|
|
26
|
+
"TABKEY": "tab1",
|
|
27
|
+
}
|
|
28
|
+
r = requests.get(url, params=params)
|
|
29
|
+
temp_df = pd.read_excel(BytesIO(r.content))
|
|
30
|
+
temp_df['序号'] = pd.to_numeric(temp_df['序号'], errors='coerce')
|
|
31
|
+
temp_df['行权价'] = pd.to_numeric(temp_df['行权价'], errors='coerce')
|
|
32
|
+
temp_df['合约单位'] = pd.to_numeric(temp_df['合约单位'], errors='coerce')
|
|
33
|
+
temp_df['涨停价格'] = pd.to_numeric(temp_df['涨停价格'], errors='coerce')
|
|
34
|
+
temp_df['跌停价格'] = pd.to_numeric(temp_df['跌停价格'], errors='coerce')
|
|
35
|
+
temp_df['前结算价'] = pd.to_numeric(temp_df['前结算价'], errors='coerce')
|
|
36
|
+
temp_df['合约总持仓'] = pd.to_numeric(temp_df['合约总持仓'], errors='coerce')
|
|
37
|
+
temp_df['原行权价格'] = pd.to_numeric(temp_df['原行权价格'], errors='coerce')
|
|
38
|
+
temp_df['原合约单位'] = pd.to_numeric(temp_df['原合约单位'], errors='coerce')
|
|
39
|
+
temp_df['合约到期剩余交易天数'] = pd.to_numeric(temp_df['合约到期剩余交易天数'], errors='coerce')
|
|
40
|
+
temp_df['合约到期剩余自然天数'] = pd.to_numeric(temp_df['合约到期剩余自然天数'], errors='coerce')
|
|
41
|
+
temp_df['下次合约调整剩余交易天数'] = pd.to_numeric(temp_df['下次合约调整剩余交易天数'], errors='coerce')
|
|
42
|
+
temp_df['下次合约调整剩余自然天数'] = pd.to_numeric(temp_df['下次合约调整剩余自然天数'], errors='coerce')
|
|
43
|
+
temp_df['交易日期'] = pd.to_datetime(temp_df['交易日期'], errors='coerce').dt.date
|
|
44
|
+
temp_df['最后交易日'] = pd.to_datetime(temp_df['最后交易日'], errors='coerce').dt.date
|
|
45
|
+
temp_df['行权日'] = pd.to_datetime(temp_df['行权日'], errors='coerce').dt.date
|
|
46
|
+
temp_df['到期日'] = pd.to_datetime(temp_df['到期日'], errors='coerce').dt.date
|
|
47
|
+
temp_df['交收日'] = pd.to_datetime(temp_df['交收日'], errors='coerce').dt.date
|
|
48
|
+
temp_df = temp_df[[
|
|
49
|
+
'序号',
|
|
50
|
+
'合约编码',
|
|
51
|
+
'合约代码',
|
|
52
|
+
'合约简称',
|
|
53
|
+
'标的证券简称(代码)',
|
|
54
|
+
'合约类型',
|
|
55
|
+
'行权价',
|
|
56
|
+
'合约单位',
|
|
57
|
+
'最后交易日',
|
|
58
|
+
'行权日',
|
|
59
|
+
'到期日',
|
|
60
|
+
'交收日',
|
|
61
|
+
'新挂',
|
|
62
|
+
'涨停价格',
|
|
63
|
+
'跌停价格',
|
|
64
|
+
'前结算价',
|
|
65
|
+
'合约调整',
|
|
66
|
+
'停牌',
|
|
67
|
+
'合约总持仓',
|
|
68
|
+
'挂牌原因',
|
|
69
|
+
'原合约代码',
|
|
70
|
+
'原合约简称',
|
|
71
|
+
'原行权价格',
|
|
72
|
+
'原合约单位',
|
|
73
|
+
'合约到期剩余交易天数',
|
|
74
|
+
'合约到期剩余自然天数',
|
|
75
|
+
'下次合约调整剩余交易天数',
|
|
76
|
+
'下次合约调整剩余自然天数',
|
|
77
|
+
'交易日期',
|
|
78
|
+
]]
|
|
79
|
+
return temp_df
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
if __name__ == "__main__":
|
|
83
|
+
option_current_day_szse_df = option_current_day_szse()
|
|
84
|
+
print(option_current_day_szse_df)
|
akshare/option/option_czce.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
# -*- coding:utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Date:
|
|
4
|
+
Date: 2025/10/17 16:30
|
|
5
5
|
Desc: 郑州商品交易所-交易数据-历史行情下载-期权历史行情下载
|
|
6
6
|
http://www.czce.com.cn/cn/jysj/lshqxz/H770319index_1.htm
|
|
7
7
|
自 20200101 起,成交量、空盘量、成交额、行权量均为单边计算
|
|
@@ -12,19 +12,35 @@ http://www.czce.com.cn/cn/jysj/lshqxz/H770319index_1.htm
|
|
|
12
12
|
"MA": "20191217"
|
|
13
13
|
"RM": "20200116"
|
|
14
14
|
"ZC": "20200630"
|
|
15
|
+
"OI": "20220826"
|
|
16
|
+
"PK": "20220826"
|
|
17
|
+
"PX": "20230915"
|
|
18
|
+
"SH": "20230915"
|
|
19
|
+
"SA": "20231020"
|
|
20
|
+
"PF": "20231020"
|
|
21
|
+
"SM": "20231020"
|
|
22
|
+
"SF": "20231020"
|
|
23
|
+
"UR": "20231020"
|
|
24
|
+
"AP": "20231020"
|
|
25
|
+
"CJ": "20240621"
|
|
26
|
+
"FG": "20240621"
|
|
27
|
+
"PR": "20241227"
|
|
15
28
|
"""
|
|
16
|
-
|
|
29
|
+
|
|
17
30
|
import warnings
|
|
31
|
+
from io import StringIO
|
|
18
32
|
|
|
19
33
|
import pandas as pd
|
|
20
34
|
import requests
|
|
21
35
|
|
|
22
36
|
|
|
23
|
-
def
|
|
37
|
+
def option_hist_yearly_czce(symbol: str = "SR", year: str = "2021") -> pd.DataFrame:
|
|
24
38
|
"""
|
|
25
39
|
郑州商品交易所-交易数据-历史行情下载-期权历史行情下载
|
|
26
40
|
http://www.czce.com.cn/cn/jysj/lshqxz/H770319index_1.htm
|
|
27
|
-
:param symbol: choice of {"白糖": "SR", "棉花": "CF", "PTA": "TA", "甲醇": "MA", "菜籽粕": "RM",
|
|
41
|
+
:param symbol: choice of {"白糖": "SR", "棉花": "CF", "PTA": "TA", "甲醇": "MA", "菜籽粕": "RM",
|
|
42
|
+
"动力煤": "ZC", "菜籽油": "OI", "花生": "PK", "对二甲苯": "PX", "烧碱": "SH", "纯碱": "SA", "短纤": "PF",
|
|
43
|
+
"锰硅": "SM", "硅铁": "SF", "尿素": "UR", "苹果": "AP", "红枣": "CJ", "玻璃": "FG", "瓶片": "PR"}
|
|
28
44
|
:type symbol: str
|
|
29
45
|
:param year: 需要获取数据的年份, 注意品种的上市时间
|
|
30
46
|
:type year: str
|
|
@@ -38,17 +54,29 @@ def option_czce_hist(symbol: str = "SR", year: str = "2021") -> pd.DataFrame:
|
|
|
38
54
|
"MA": "2019",
|
|
39
55
|
"RM": "2020",
|
|
40
56
|
"ZC": "2020",
|
|
57
|
+
"OI": "2022",
|
|
58
|
+
"PK": "2022",
|
|
59
|
+
"PX": "2023",
|
|
60
|
+
"SH": "2023",
|
|
61
|
+
"SA": "2023",
|
|
62
|
+
"PF": "2023",
|
|
63
|
+
"SM": "2023",
|
|
64
|
+
"SF": "2023",
|
|
65
|
+
"UR": "2023",
|
|
66
|
+
"AP": "2023",
|
|
67
|
+
"CJ": "2024",
|
|
68
|
+
"FG": "2024",
|
|
69
|
+
"PR": "2024",
|
|
41
70
|
}
|
|
42
71
|
if int(symbol_year_dict[symbol]) > int(year):
|
|
43
72
|
warnings.warn(f"{year} year, symbol {symbol} is not on trade")
|
|
44
|
-
return
|
|
45
|
-
|
|
46
|
-
url = f'http://www.czce.com.cn/cn/DFSStaticFiles/Option/2021/OptionDataAllHistory/{symbol}OPTIONS{year}.txt'
|
|
73
|
+
return pd.DataFrame()
|
|
74
|
+
url = f"http://www.czce.com.cn/cn/DFSStaticFiles/Option/{year}/OptionDataAllHistory/{symbol}OPTIONS{year}.txt"
|
|
47
75
|
r = requests.get(url)
|
|
48
76
|
option_df = pd.read_table(StringIO(r.text), skiprows=1, sep="|", low_memory=False)
|
|
49
77
|
return option_df
|
|
50
78
|
|
|
51
79
|
|
|
52
80
|
if __name__ == "__main__":
|
|
53
|
-
|
|
54
|
-
print(
|
|
81
|
+
option_hist_yearly_czce_df = option_hist_yearly_czce(symbol="RM", year="2025")
|
|
82
|
+
print(option_hist_yearly_czce_df)
|
akshare/option/option_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/2/18 16:30
|
|
5
5
|
Desc: 东方财富网-行情中心-期权市场
|
|
6
6
|
https://quote.eastmoney.com/center/qqsc.html
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
import pandas as pd
|
|
10
10
|
import requests
|
|
11
|
+
from akshare.utils.func import fetch_paginated_data
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
def option_current_em() -> pd.DataFrame:
|
|
@@ -20,7 +21,7 @@ def option_current_em() -> pd.DataFrame:
|
|
|
20
21
|
url = "https://23.push2.eastmoney.com/api/qt/clist/get"
|
|
21
22
|
params = {
|
|
22
23
|
"pn": "1",
|
|
23
|
-
"pz": "
|
|
24
|
+
"pz": "100",
|
|
24
25
|
"po": "1",
|
|
25
26
|
"np": "1",
|
|
26
27
|
"ut": "bd1d9ddb04089700cf9c27f6f7426281",
|
|
@@ -30,13 +31,8 @@ def option_current_em() -> pd.DataFrame:
|
|
|
30
31
|
"fs": "m:10,m:12,m:140,m:141,m:151,m:163,m:226",
|
|
31
32
|
"fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,"
|
|
32
33
|
"f23,f24,f25,f22,f28,f11,f62,f128,f136,f115,f152,f133,f108,f163,f161,f162",
|
|
33
|
-
"_": "1606225274063",
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
data_json = r.json()
|
|
37
|
-
temp_df = pd.DataFrame(data_json["data"]["diff"])
|
|
38
|
-
temp_df.reset_index(inplace=True)
|
|
39
|
-
temp_df["index"] = temp_df["index"] + 1
|
|
35
|
+
temp_df = fetch_paginated_data(url=url, base_params=params)
|
|
40
36
|
temp_df.columns = [
|
|
41
37
|
"序号",
|
|
42
38
|
"_",
|
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)
|