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.
Files changed (343) hide show
  1. akshare/__init__.py +595 -129
  2. akshare/air/air_hebei.py +77 -54
  3. akshare/air/air_zhenqi.py +0 -4
  4. akshare/air/cons.py +1 -0
  5. akshare/air/crypto.js +1 -1
  6. akshare/air/outcrypto.js +1 -1
  7. akshare/article/cons.py +1 -0
  8. akshare/article/epu_index.py +4 -3
  9. akshare/article/ff_factor.py +19 -8
  10. akshare/article/fred_md.py +4 -1
  11. akshare/article/risk_rv.py +3 -8
  12. akshare/bank/bank_cbirc_2020.py +11 -11
  13. akshare/bank/cons.py +7 -6
  14. akshare/bond/bond_buy_back_em.py +228 -0
  15. akshare/bond/bond_cb_sina.py +1 -0
  16. akshare/bond/bond_cb_ths.py +17 -9
  17. akshare/bond/bond_cbond.py +19 -14
  18. akshare/bond/bond_china.py +38 -39
  19. akshare/bond/bond_china_money.py +1 -1
  20. akshare/bond/bond_convert.py +10 -9
  21. akshare/bond/bond_em.py +37 -17
  22. akshare/bond/bond_summary.py +38 -37
  23. akshare/bond/bond_zh_cov.py +31 -40
  24. akshare/bond/bond_zh_sina.py +4 -0
  25. akshare/bond/cons.py +14 -11
  26. akshare/cal/__init__.py +0 -0
  27. akshare/cal/rv.py +170 -0
  28. akshare/cost/cost_living.py +7 -5
  29. akshare/crypto/__init__.py +1 -1
  30. akshare/crypto/crypto_bitcoin_cme.py +9 -7
  31. akshare/crypto/crypto_hold.py +4 -2
  32. akshare/currency/currency.py +1 -0
  33. akshare/currency/currency_china_bank_sina.py +11 -6
  34. akshare/data/__init__.py +1 -1
  35. akshare/data/cninfo.js +1 -1
  36. akshare/datasets.py +10 -21
  37. akshare/economic/cons.py +10 -3
  38. akshare/economic/macro_australia.py +74 -69
  39. akshare/economic/macro_bank.py +95 -653
  40. akshare/economic/macro_canada.py +92 -81
  41. akshare/economic/macro_china.py +97 -105
  42. akshare/economic/macro_china_hk.py +0 -1
  43. akshare/economic/macro_euro.py +103 -56
  44. akshare/economic/macro_finance_ths.py +7 -5
  45. akshare/economic/macro_germany.py +1 -1
  46. akshare/economic/macro_japan.py +0 -1
  47. akshare/economic/macro_other.py +1 -6
  48. akshare/economic/macro_swiss.py +2 -3
  49. akshare/economic/macro_uk.py +1 -1
  50. akshare/economic/macro_usa.py +7 -9
  51. akshare/economic/marco_cnbs.py +11 -6
  52. akshare/energy/energy_carbon.py +0 -1
  53. akshare/energy/energy_oil_em.py +1 -2
  54. akshare/event/cons.py +1 -0
  55. akshare/exceptions.py +43 -0
  56. akshare/file_fold/calendar.json +245 -2
  57. akshare/forex/__init__.py +0 -0
  58. akshare/forex/cons.py +192 -0
  59. akshare/forex/forex_em.py +149 -0
  60. akshare/fortune/fortune_500.py +1 -37
  61. akshare/fortune/fortune_bloomberg.py +6 -3
  62. akshare/fortune/fortune_forbes_500.py +3 -6
  63. akshare/fortune/fortune_hurun.py +2 -1
  64. akshare/fortune/fortune_xincaifu_500.py +17 -14
  65. akshare/fund/fund_announcement_em.py +145 -0
  66. akshare/fund/fund_aum_em.py +49 -35
  67. akshare/fund/fund_em.py +251 -220
  68. akshare/fund/fund_etf_em.py +44 -35
  69. akshare/fund/fund_etf_sina.py +75 -27
  70. akshare/fund/fund_etf_ths.py +2 -0
  71. akshare/fund/fund_fee_em.py +172 -0
  72. akshare/fund/fund_fhsp_em.py +42 -32
  73. akshare/fund/fund_init_em.py +8 -5
  74. akshare/fund/fund_lof_em.py +12 -19
  75. akshare/fund/fund_manager.py +25 -11
  76. akshare/fund/fund_overview_em.py +42 -0
  77. akshare/fund/fund_portfolio_em.py +23 -21
  78. akshare/fund/fund_position_lg.py +19 -8
  79. akshare/fund/fund_rank_em.py +2 -5
  80. akshare/fund/fund_rating.py +33 -12
  81. akshare/fund/fund_scale_em.py +24 -13
  82. akshare/fund/fund_scale_sina.py +20 -10
  83. akshare/fund/fund_xq.py +3 -2
  84. akshare/futures/cons.py +135 -39
  85. akshare/futures/cot.py +55 -56
  86. akshare/futures/futures_basis.py +49 -11
  87. akshare/futures/futures_comex_em.py +1 -0
  88. akshare/futures/futures_comm_ctp.py +1 -1
  89. akshare/futures/futures_contract_detail.py +59 -9
  90. akshare/futures/futures_daily_bar.py +66 -59
  91. akshare/futures/futures_foreign.py +14 -8
  92. akshare/futures/futures_hf_em.py +215 -61
  93. akshare/futures/futures_hist_em.py +191 -0
  94. akshare/futures/futures_hq_sina.py +5 -3
  95. akshare/futures/futures_index_ccidx.py +24 -82
  96. akshare/futures/futures_inventory_99.py +70 -272
  97. akshare/futures/futures_inventory_em.py +14 -11
  98. akshare/futures/futures_news_shmet.py +2 -2
  99. akshare/futures/futures_roll_yield.py +11 -24
  100. akshare/futures/futures_rule.py +7 -3
  101. akshare/futures/futures_rule_em.py +38 -0
  102. akshare/futures/futures_settlement_price_sgx.py +21 -6
  103. akshare/futures/futures_stock_js.py +0 -1
  104. akshare/futures/futures_to_spot.py +5 -6
  105. akshare/futures/futures_warehouse_receipt.py +48 -47
  106. akshare/futures/futures_zh_sina.py +3 -3
  107. akshare/futures/receipt.py +298 -165
  108. akshare/futures/requests_fun.py +16 -3
  109. akshare/futures/symbol_var.py +32 -13
  110. akshare/futures_derivative/cons.py +100 -103
  111. akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
  112. akshare/futures_derivative/futures_contract_info_czce.py +2 -0
  113. akshare/futures_derivative/futures_contract_info_dce.py +43 -17
  114. akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
  115. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  116. akshare/futures_derivative/futures_contract_info_shfe.py +3 -4
  117. akshare/futures_derivative/futures_cot_sina.py +8 -6
  118. akshare/futures_derivative/futures_index_sina.py +25 -13
  119. akshare/fx/cons.py +12 -7
  120. akshare/fx/fx_c_swap_cm.py +62 -0
  121. akshare/fx/fx_quote.py +3 -2
  122. akshare/fx/fx_quote_baidu.py +2 -1
  123. akshare/hf/__init__.py +1 -1
  124. akshare/hf/hf_sp500.py +8 -7
  125. akshare/index/cons.py +132 -28
  126. akshare/index/index_cni.py +7 -7
  127. akshare/index/index_cons.py +2 -2
  128. akshare/index/index_csindex.py +68 -0
  129. akshare/index/index_cx.py +20 -20
  130. akshare/index/index_drewry.py +17 -16
  131. akshare/index/index_eri.py +1 -0
  132. akshare/index/index_global_em.py +167 -0
  133. akshare/index/index_global_sina.py +82 -0
  134. akshare/index/index_kq_fz.py +17 -14
  135. akshare/index/index_kq_ss.py +1 -0
  136. akshare/index/index_option_qvix.py +351 -16
  137. akshare/index/index_research_sw.py +21 -21
  138. akshare/index/index_spot.py +9 -5
  139. akshare/index/index_stock_hk.py +5 -9
  140. akshare/index/index_stock_zh.py +111 -24
  141. akshare/index/index_stock_zh_csindex.py +3 -367
  142. akshare/index/index_sugar.py +18 -4
  143. akshare/index/index_sw.py +10 -2
  144. akshare/index/index_yw.py +53 -75
  145. akshare/index/index_zh_em.py +15 -82
  146. akshare/interest_rate/interbank_rate_em.py +0 -1
  147. akshare/movie/jm.js +0 -1
  148. akshare/news/__init__.py +1 -1
  149. akshare/news/news_baidu.py +395 -222
  150. akshare/news/news_stock.py +49 -16
  151. akshare/option/cons.py +2 -2
  152. akshare/option/option_commodity.py +341 -220
  153. akshare/option/option_commodity_sina.py +22 -26
  154. akshare/option/option_contract_info_ctp.py +63 -0
  155. akshare/option/option_current_sse.py +61 -0
  156. akshare/option/option_current_szse.py +84 -0
  157. akshare/option/option_czce.py +37 -9
  158. akshare/option/option_daily_stats_sse_szse.py +0 -1
  159. akshare/option/option_em.py +4 -8
  160. akshare/option/option_finance.py +60 -12
  161. akshare/option/option_finance_sina.py +7 -7
  162. akshare/option/option_lhb_em.py +0 -1
  163. akshare/option/option_margin.py +62 -0
  164. akshare/option/option_premium_analysis_em.py +58 -53
  165. akshare/option/option_risk_analysis_em.py +11 -8
  166. akshare/option/option_risk_indicator_sse.py +3 -4
  167. akshare/option/option_value_analysis_em.py +62 -55
  168. akshare/other/__init__.py +1 -1
  169. akshare/pro/__init__.py +0 -1
  170. akshare/pro/client.py +6 -4
  171. akshare/pro/cons.py +3 -2
  172. akshare/pro/data_pro.py +6 -5
  173. akshare/qdii/__init__.py +0 -0
  174. akshare/qdii/qdii_jsl.py +233 -0
  175. akshare/qhkc/__init__.py +1 -6
  176. akshare/qhkc/qhkc_api.py +64 -22
  177. akshare/qhkc_web/__init__.py +1 -6
  178. akshare/qhkc_web/qhkc_fund.py +10 -6
  179. akshare/qhkc_web/qhkc_index.py +28 -14
  180. akshare/qhkc_web/qhkc_tool.py +62 -59
  181. akshare/rate/__init__.py +1 -1
  182. akshare/rate/repo_rate.py +36 -32
  183. akshare/reits/__init__.py +1 -1
  184. akshare/reits/reits_basic.py +149 -13
  185. akshare/request.py +117 -0
  186. akshare/spot/__init__.py +1 -1
  187. akshare/spot/spot_hog_soozhu.py +165 -3
  188. akshare/spot/spot_sge.py +70 -9
  189. akshare/stock/cons.py +60 -23
  190. akshare/stock/stock_allotment_cninfo.py +8 -8
  191. akshare/stock/stock_ask_bid_em.py +3 -78
  192. akshare/stock/stock_board_concept_em.py +160 -35
  193. akshare/stock/stock_board_industry_em.py +163 -70
  194. akshare/stock/stock_dividend_cninfo.py +31 -17
  195. akshare/stock/stock_dzjy_em.py +347 -260
  196. akshare/stock/stock_fund_em.py +72 -64
  197. akshare/stock/stock_fund_hold.py +1 -2
  198. akshare/stock/stock_gsrl_em.py +1 -0
  199. akshare/stock/stock_hk_comparison_em.py +175 -0
  200. akshare/stock/stock_hk_famous.py +4 -5
  201. akshare/stock/stock_hk_fhpx_ths.py +2 -1
  202. akshare/stock/stock_hk_hot_rank_em.py +1 -0
  203. akshare/stock/stock_hk_sina.py +84 -36
  204. akshare/stock/stock_hold_control_cninfo.py +82 -0
  205. akshare/stock/stock_hold_control_em.py +0 -2
  206. akshare/stock/stock_hot_rank_em.py +4 -1
  207. akshare/stock/stock_hot_search_baidu.py +32 -19
  208. akshare/stock/stock_hot_up_em.py +4 -1
  209. akshare/stock/stock_hsgt_em.py +155 -0
  210. akshare/stock/stock_industry.py +1 -0
  211. akshare/stock/stock_industry_cninfo.py +1 -2
  212. akshare/stock/stock_info.py +6 -4
  213. akshare/stock/stock_info_em.py +17 -11
  214. akshare/stock/stock_intraday_em.py +4 -78
  215. akshare/stock/stock_intraday_sina.py +2 -2
  216. akshare/stock/stock_news_cx.py +39 -0
  217. akshare/stock/stock_profile_cninfo.py +7 -7
  218. akshare/stock/stock_profile_em.py +302 -0
  219. akshare/stock/stock_rank_forecast.py +6 -5
  220. akshare/stock/stock_repurchase_em.py +7 -2
  221. akshare/stock/stock_share_changes_cninfo.py +7 -5
  222. akshare/stock/stock_share_hold.py +24 -20
  223. akshare/stock/stock_stop.py +6 -6
  224. akshare/stock/stock_summary.py +153 -417
  225. akshare/stock/stock_us_famous.py +5 -6
  226. akshare/stock/stock_us_js.py +3 -2
  227. akshare/stock/stock_us_pink.py +38 -27
  228. akshare/stock/stock_us_sina.py +7 -3
  229. akshare/stock/stock_weibo_nlp.py +18 -20
  230. akshare/stock/stock_xq.py +24 -22
  231. akshare/stock/stock_zh_a_sina.py +8 -5
  232. akshare/stock/stock_zh_a_special.py +240 -243
  233. akshare/stock/stock_zh_a_tick_tx.py +11 -3
  234. akshare/stock/stock_zh_ah_tx.py +23 -26
  235. akshare/stock/stock_zh_b_sina.py +2 -2
  236. akshare/stock/stock_zh_comparison_em.py +250 -0
  237. akshare/stock/stock_zh_kcb_sina.py +67 -64
  238. akshare/stock_a/__init__.py +0 -0
  239. akshare/stock_a/stock_board_concept_name_em.py +170 -0
  240. akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
  241. akshare/stock_a/stock_zh_a_spot.py +212 -0
  242. akshare/stock_feature/cons.py +1 -0
  243. akshare/stock_feature/stock_a_indicator.py +9 -54
  244. akshare/stock_feature/stock_a_pe_and_pb.py +23 -5
  245. akshare/stock_feature/stock_account_em.py +0 -1
  246. akshare/stock_feature/stock_all_pb.py +2 -1
  247. akshare/stock_feature/stock_analyst_em.py +36 -30
  248. akshare/stock_feature/stock_board_concept_ths.py +328 -0
  249. akshare/stock_feature/stock_board_industry_ths.py +57 -2
  250. akshare/stock_feature/stock_buffett_index_lg.py +10 -8
  251. akshare/stock_feature/stock_classify_sina.py +3 -6
  252. akshare/stock_feature/stock_comment_em.py +81 -144
  253. akshare/stock_feature/stock_congestion_lg.py +2 -1
  254. akshare/stock_feature/stock_cyq_em.py +5 -11
  255. akshare/stock_feature/stock_disclosure_cninfo.py +6 -6
  256. akshare/stock_feature/stock_dxsyl_em.py +121 -74
  257. akshare/stock_feature/stock_ebs_lg.py +5 -4
  258. akshare/stock_feature/stock_esg_sina.py +29 -7
  259. akshare/stock_feature/stock_fhps_em.py +2 -1
  260. akshare/stock_feature/stock_fhps_ths.py +15 -7
  261. akshare/stock_feature/stock_fund_flow.py +30 -22
  262. akshare/stock_feature/stock_gddh_em.py +19 -11
  263. akshare/stock_feature/stock_gdfx_em.py +226 -113
  264. akshare/stock_feature/stock_gdhs.py +75 -50
  265. akshare/stock_feature/stock_gdzjc_em.py +21 -10
  266. akshare/stock_feature/stock_gpzy_em.py +78 -46
  267. akshare/stock_feature/stock_gxl_lg.py +3 -2
  268. akshare/stock_feature/stock_hist_em.py +137 -234
  269. akshare/stock_feature/stock_hist_tx.py +13 -10
  270. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  271. akshare/stock_feature/stock_hot_xq.py +4 -6
  272. akshare/stock_feature/stock_hsgt_em.py +269 -97
  273. akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
  274. akshare/stock_feature/stock_hsgt_min_em.py +13 -16
  275. akshare/stock_feature/stock_info.py +7 -80
  276. akshare/stock_feature/stock_inner_trade_xq.py +38 -31
  277. akshare/stock_feature/stock_jgdy_em.py +43 -40
  278. akshare/stock_feature/stock_lhb_em.py +119 -3
  279. akshare/stock_feature/stock_margin_em.py +0 -1
  280. akshare/stock_feature/stock_margin_sse.py +0 -2
  281. akshare/stock_feature/stock_pankou_em.py +71 -35
  282. akshare/stock_feature/stock_qsjy_em.py +13 -4
  283. akshare/stock_feature/stock_report_em.py +151 -7
  284. akshare/stock_feature/stock_research_report_em.py +55 -20
  285. akshare/stock_feature/stock_sy_em.py +20 -15
  286. akshare/stock_feature/stock_technology_ths.py +122 -77
  287. akshare/stock_feature/stock_tfp_em.py +2 -1
  288. akshare/stock_feature/stock_three_report_em.py +21 -5
  289. akshare/stock_feature/stock_ttm_lyr.py +18 -9
  290. akshare/stock_feature/stock_value_em.py +83 -0
  291. akshare/stock_feature/stock_yjbb_em.py +58 -32
  292. akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
  293. akshare/stock_feature/stock_yjyg_em.py +1 -1
  294. akshare/stock_feature/stock_yzxdr_em.py +24 -22
  295. akshare/stock_feature/stock_zdhtmx_em.py +20 -6
  296. akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
  297. akshare/stock_feature/stock_ztb_em.py +39 -24
  298. akshare/stock_fundamental/__init__.py +1 -1
  299. akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
  300. akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
  301. akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +60 -7
  302. akshare/stock_fundamental/stock_finance_ths.py +524 -57
  303. akshare/stock_fundamental/stock_finance_us_em.py +268 -0
  304. akshare/stock_fundamental/stock_gbjg_em.py +80 -0
  305. akshare/stock_fundamental/stock_hold.py +26 -17
  306. akshare/stock_fundamental/stock_ipo_declare.py +1 -0
  307. akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
  308. akshare/stock_fundamental/stock_kcb_sse.py +26 -25
  309. akshare/stock_fundamental/stock_notice.py +12 -3
  310. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  311. akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
  312. akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
  313. akshare/stock_fundamental/stock_recommend.py +20 -4
  314. akshare/stock_fundamental/stock_zygc.py +5 -62
  315. akshare/utils/context.py +43 -0
  316. akshare/utils/demjson.py +2009 -1338
  317. akshare/utils/func.py +49 -2
  318. akshare/utils/multi_decrypt.py +53 -0
  319. akshare/utils/token_process.py +6 -5
  320. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/METADATA +54 -80
  321. akshare-1.17.99.dist-info/RECORD +409 -0
  322. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
  323. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
  324. tests/test_func.py +3 -5
  325. akshare/bond/bond_futures.py +0 -50
  326. akshare/bond/bond_investing.py +0 -139
  327. akshare/crypto/crypto_hist_investing.py +0 -249
  328. akshare/fund/fund_announcement.py +0 -56
  329. akshare/futures/futures_international.py +0 -170
  330. akshare/futures/futures_news_baidu.py +0 -54
  331. akshare/futures/inventory_data.py +0 -100
  332. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  333. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  334. akshare/futures_derivative/futures_index_volatility_nh.py +0 -53
  335. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  336. akshare/index/index_fear_greed_funddb.py +0 -78
  337. akshare/index/index_investing.py +0 -232
  338. akshare/sport/__init__.py +0 -6
  339. akshare/sport/sport_olympic.py +0 -27
  340. akshare/stock_feature/stock_wencai.py +0 -104
  341. akshare/stock_fundamental/stock_mda_ym.py +0 -40
  342. akshare-1.14.49.dist-info/RECORD +0 -387
  343. {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(temp_df["看涨合约-最新价"], errors="coerce")
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(temp_df["看涨合约-持仓量"], errors="coerce")
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(temp_df["看跌合约-最新价"], errors="coerce")
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(temp_df["看跌合约-持仓量"], errors="coerce")
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
- option_commodity_contract_table_sina(symbol="棉花期权", contract="cf2301")
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)
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2021/7/21 14:22
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
- from io import StringIO
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 option_czce_hist(symbol: str = "SR", year: str = "2021") -> pd.DataFrame:
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", "动力煤": "ZC"}
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 None
45
- warnings.warn("正在下载中, 请稍等")
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
- option_czce_hist_df = option_czce_hist(symbol="ZC", year="2021")
54
- print(option_czce_hist_df)
81
+ option_hist_yearly_czce_df = option_hist_yearly_czce(symbol="RM", year="2025")
82
+ print(option_hist_yearly_czce_df)
@@ -26,7 +26,6 @@ def option_daily_stats_sse(date: str = "20240626") -> pd.DataFrame:
26
26
  "isPagination": "false",
27
27
  "sqlId": "COMMON_SSE_ZQPZ_YSP_QQ_SJTJ_MRTJ_CX",
28
28
  "tradeDate": date,
29
- "_": "1652877575590",
30
29
  }
31
30
  headers = {
32
31
  "Accept": "*/*",
@@ -1,13 +1,14 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/1/31 16:30
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": "200000",
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
- r = requests.get(url, params=params)
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
  "_",
@@ -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
- symbol: str = "嘉实沪深300ETF期权", end_month: str = "2306"
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期权", "华夏科创50ETF期权", "易方达科创50ETF期权", "嘉实沪深300ETF期权", "沪深300股指期权", "中证1000股指期权", "上证50股指期权"}
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
- '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'
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
- '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'
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
- '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'
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(symbol="沪深300股指期权", end_month="2306")
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(symbol="上证50股指期权", end_month="2306")
355
+ option_finance_board_df = option_finance_board(
356
+ symbol="上证50股指期权", end_month="2306"
357
+ )
310
358
  print(option_finance_board_df)