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.
Files changed (388) hide show
  1. akshare/__init__.py +757 -161
  2. akshare/air/air_hebei.py +79 -53
  3. akshare/air/air_zhenqi.py +3 -7
  4. akshare/air/cons.py +1 -0
  5. akshare/air/crypto.js +1 -1
  6. akshare/air/outcrypto.js +1 -1
  7. akshare/air/sunrise_tad.py +32 -17
  8. akshare/article/cons.py +1 -0
  9. akshare/article/epu_index.py +4 -3
  10. akshare/article/ff_factor.py +19 -8
  11. akshare/article/fred_md.py +4 -1
  12. akshare/article/risk_rv.py +3 -8
  13. akshare/bank/bank_cbirc_2020.py +11 -11
  14. akshare/bank/cons.py +7 -6
  15. akshare/bond/bond_buy_back_em.py +228 -0
  16. akshare/bond/bond_cb_sina.py +1 -0
  17. akshare/bond/bond_cb_ths.py +17 -9
  18. akshare/bond/bond_cbond.py +19 -14
  19. akshare/bond/bond_china.py +38 -39
  20. akshare/bond/bond_china_money.py +75 -48
  21. akshare/bond/bond_convert.py +10 -9
  22. akshare/bond/bond_em.py +37 -17
  23. akshare/bond/bond_info_cm.py +28 -8
  24. akshare/bond/bond_issue_cninfo.py +73 -30
  25. akshare/bond/bond_summary.py +38 -37
  26. akshare/bond/bond_zh_cov.py +31 -40
  27. akshare/bond/bond_zh_sina.py +61 -51
  28. akshare/bond/cons.py +14 -11
  29. akshare/cal/__init__.py +0 -0
  30. akshare/cal/rv.py +170 -0
  31. akshare/cost/cost_living.py +7 -5
  32. akshare/crypto/__init__.py +1 -1
  33. akshare/crypto/crypto_bitcoin_cme.py +9 -7
  34. akshare/crypto/crypto_hold.py +4 -2
  35. akshare/currency/currency.py +1 -0
  36. akshare/currency/currency_china_bank_sina.py +11 -6
  37. akshare/currency/currency_safe.py +7 -6
  38. akshare/data/__init__.py +1 -1
  39. akshare/data/cninfo.js +1 -1
  40. akshare/datasets.py +10 -21
  41. akshare/economic/cons.py +10 -3
  42. akshare/economic/macro_australia.py +74 -69
  43. akshare/economic/macro_bank.py +95 -653
  44. akshare/economic/macro_canada.py +92 -81
  45. akshare/economic/macro_china.py +163 -117
  46. akshare/economic/macro_china_hk.py +0 -1
  47. akshare/economic/macro_china_nbs.py +24 -7
  48. akshare/economic/macro_euro.py +103 -56
  49. akshare/economic/macro_finance_ths.py +135 -0
  50. akshare/economic/macro_germany.py +1 -1
  51. akshare/economic/macro_info_ws.py +100 -0
  52. akshare/economic/macro_japan.py +0 -1
  53. akshare/economic/macro_other.py +1 -6
  54. akshare/economic/macro_swiss.py +2 -3
  55. akshare/economic/macro_uk.py +1 -1
  56. akshare/economic/macro_usa.py +7 -9
  57. akshare/economic/marco_cnbs.py +11 -6
  58. akshare/energy/energy_carbon.py +94 -126
  59. akshare/energy/energy_oil_em.py +1 -2
  60. akshare/event/cons.py +1 -0
  61. akshare/event/migration.py +3 -2
  62. akshare/exceptions.py +43 -0
  63. akshare/file_fold/calendar.json +245 -2
  64. akshare/forex/__init__.py +0 -0
  65. akshare/forex/cons.py +192 -0
  66. akshare/forex/forex_em.py +149 -0
  67. akshare/fortune/fortune_500.py +15 -48
  68. akshare/fortune/fortune_bloomberg.py +6 -3
  69. akshare/fortune/fortune_forbes_500.py +3 -6
  70. akshare/fortune/fortune_hurun.py +2 -1
  71. akshare/fortune/fortune_xincaifu_500.py +17 -14
  72. akshare/fund/fund_amac.py +38 -15
  73. akshare/fund/fund_announcement_em.py +145 -0
  74. akshare/fund/fund_aum_em.py +49 -35
  75. akshare/fund/fund_em.py +251 -220
  76. akshare/fund/fund_etf_em.py +44 -35
  77. akshare/fund/fund_etf_sina.py +76 -27
  78. akshare/fund/fund_etf_ths.py +95 -0
  79. akshare/fund/fund_fee_em.py +172 -0
  80. akshare/fund/fund_fhsp_em.py +42 -32
  81. akshare/fund/fund_init_em.py +8 -5
  82. akshare/fund/fund_lof_em.py +12 -19
  83. akshare/fund/fund_manager.py +25 -11
  84. akshare/fund/fund_overview_em.py +42 -0
  85. akshare/fund/fund_portfolio_em.py +78 -66
  86. akshare/fund/fund_position_lg.py +19 -8
  87. akshare/fund/fund_rank_em.py +90 -84
  88. akshare/fund/fund_rating.py +33 -12
  89. akshare/fund/fund_report_cninfo.py +63 -48
  90. akshare/fund/fund_scale_em.py +24 -13
  91. akshare/fund/fund_scale_sina.py +20 -10
  92. akshare/fund/fund_xq.py +3 -2
  93. akshare/futures/cons.py +141 -46
  94. akshare/futures/cot.py +89 -88
  95. akshare/futures/futures_basis.py +99 -33
  96. akshare/futures/futures_comex_em.py +1 -0
  97. akshare/futures/futures_comm_ctp.py +13 -2
  98. akshare/futures/futures_contract_detail.py +59 -9
  99. akshare/futures/futures_daily_bar.py +75 -62
  100. akshare/futures/futures_foreign.py +14 -8
  101. akshare/futures/futures_hf_em.py +215 -61
  102. akshare/futures/futures_hist_em.py +191 -0
  103. akshare/futures/futures_hq_sina.py +79 -61
  104. akshare/futures/futures_index_ccidx.py +24 -82
  105. akshare/futures/futures_inventory_99.py +70 -272
  106. akshare/futures/futures_inventory_em.py +14 -11
  107. akshare/futures/futures_news_shmet.py +2 -2
  108. akshare/futures/futures_roll_yield.py +11 -24
  109. akshare/futures/futures_rule.py +7 -3
  110. akshare/futures/futures_rule_em.py +38 -0
  111. akshare/futures/futures_settlement_price_sgx.py +21 -6
  112. akshare/futures/futures_stock_js.py +1 -2
  113. akshare/futures/futures_to_spot.py +43 -39
  114. akshare/futures/futures_warehouse_receipt.py +53 -48
  115. akshare/futures/futures_zh_sina.py +4 -4
  116. akshare/futures/receipt.py +298 -165
  117. akshare/futures/requests_fun.py +16 -3
  118. akshare/futures/symbol_var.py +32 -13
  119. akshare/futures_derivative/cons.py +100 -103
  120. akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
  121. akshare/futures_derivative/futures_contract_info_czce.py +2 -0
  122. akshare/futures_derivative/futures_contract_info_dce.py +43 -17
  123. akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
  124. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  125. akshare/futures_derivative/futures_contract_info_shfe.py +7 -8
  126. akshare/futures_derivative/futures_cot_sina.py +28 -19
  127. akshare/futures_derivative/futures_index_sina.py +25 -13
  128. akshare/fx/cons.py +12 -7
  129. akshare/fx/currency_investing.py +19 -285
  130. akshare/fx/fx_c_swap_cm.py +62 -0
  131. akshare/fx/fx_quote.py +3 -2
  132. akshare/fx/fx_quote_baidu.py +2 -1
  133. akshare/hf/__init__.py +1 -1
  134. akshare/hf/hf_sp500.py +8 -7
  135. akshare/index/cons.py +132 -28
  136. akshare/index/index_cflp.py +29 -26
  137. akshare/index/index_cni.py +89 -91
  138. akshare/index/index_cons.py +26 -10
  139. akshare/index/index_csindex.py +68 -0
  140. akshare/index/index_cx.py +263 -62
  141. akshare/index/index_drewry.py +17 -16
  142. akshare/index/index_eri.py +1 -0
  143. akshare/index/index_global_em.py +167 -0
  144. akshare/index/index_global_sina.py +82 -0
  145. akshare/index/index_kq_fz.py +17 -14
  146. akshare/index/index_kq_ss.py +1 -0
  147. akshare/index/index_option_qvix.py +351 -16
  148. akshare/index/index_research_sw.py +38 -38
  149. akshare/index/index_spot.py +9 -5
  150. akshare/index/index_stock_hk.py +6 -10
  151. akshare/index/index_stock_us_sina.py +1 -1
  152. akshare/index/index_stock_zh.py +193 -101
  153. akshare/index/index_stock_zh_csindex.py +15 -369
  154. akshare/index/index_sugar.py +18 -4
  155. akshare/index/index_sw.py +62 -34
  156. akshare/index/index_yw.py +53 -75
  157. akshare/index/index_zh_em.py +15 -82
  158. akshare/interest_rate/interbank_rate_em.py +14 -10
  159. akshare/movie/artist_yien.py +32 -5
  160. akshare/movie/jm.js +0 -1
  161. akshare/movie/movie_yien.py +92 -18
  162. akshare/movie/video_yien.py +28 -5
  163. akshare/news/__init__.py +1 -1
  164. akshare/news/news_baidu.py +395 -220
  165. akshare/news/news_cctv.py +38 -38
  166. akshare/news/news_stock.py +49 -13
  167. akshare/nlp/nlp_interface.py +7 -8
  168. akshare/option/cons.py +12 -12
  169. akshare/option/option_comm_qihuo.py +86 -0
  170. akshare/option/option_commodity.py +355 -211
  171. akshare/option/option_commodity_sina.py +22 -26
  172. akshare/option/option_contract_info_ctp.py +63 -0
  173. akshare/option/option_current_sse.py +61 -0
  174. akshare/option/option_current_szse.py +84 -0
  175. akshare/option/option_czce.py +37 -9
  176. akshare/option/option_daily_stats_sse_szse.py +145 -0
  177. akshare/option/option_em.py +4 -8
  178. akshare/option/option_finance.py +60 -12
  179. akshare/option/option_finance_sina.py +28 -26
  180. akshare/option/option_lhb_em.py +62 -57
  181. akshare/option/option_margin.py +62 -0
  182. akshare/option/option_premium_analysis_em.py +58 -53
  183. akshare/option/option_risk_analysis_em.py +11 -8
  184. akshare/option/option_risk_indicator_sse.py +18 -16
  185. akshare/option/option_value_analysis_em.py +62 -55
  186. akshare/other/__init__.py +1 -1
  187. akshare/other/other_car_cpca.py +20 -20
  188. akshare/pro/__init__.py +0 -1
  189. akshare/pro/client.py +6 -4
  190. akshare/pro/cons.py +3 -2
  191. akshare/pro/data_pro.py +6 -5
  192. akshare/qdii/__init__.py +0 -0
  193. akshare/qdii/qdii_jsl.py +233 -0
  194. akshare/qhkc/__init__.py +1 -6
  195. akshare/qhkc/qhkc_api.py +64 -22
  196. akshare/qhkc_web/__init__.py +1 -6
  197. akshare/qhkc_web/qhkc_fund.py +10 -6
  198. akshare/qhkc_web/qhkc_index.py +28 -14
  199. akshare/qhkc_web/qhkc_tool.py +62 -59
  200. akshare/rate/__init__.py +1 -1
  201. akshare/rate/repo_rate.py +36 -32
  202. akshare/reits/__init__.py +1 -1
  203. akshare/reits/reits_basic.py +149 -13
  204. akshare/request.py +117 -0
  205. akshare/spot/__init__.py +1 -1
  206. akshare/spot/spot_hog_soozhu.py +232 -0
  207. akshare/spot/spot_price_qh.py +121 -0
  208. akshare/spot/spot_sge.py +70 -9
  209. akshare/stock/cons.py +60 -23
  210. akshare/stock/stock_allotment_cninfo.py +10 -9
  211. akshare/stock/stock_ask_bid_em.py +3 -78
  212. akshare/stock/stock_board_concept_em.py +160 -35
  213. akshare/stock/stock_board_industry_em.py +163 -70
  214. akshare/stock/stock_cg_equity_mortgage.py +15 -11
  215. akshare/stock/stock_cg_guarantee.py +41 -51
  216. akshare/stock/stock_cg_lawsuit.py +36 -35
  217. akshare/stock/stock_dividend_cninfo.py +36 -16
  218. akshare/stock/stock_dzjy_em.py +347 -260
  219. akshare/stock/stock_fund_em.py +73 -64
  220. akshare/stock/stock_fund_hold.py +1 -2
  221. akshare/stock/stock_gsrl_em.py +1 -0
  222. akshare/stock/stock_hk_comparison_em.py +175 -0
  223. akshare/stock/stock_hk_famous.py +107 -0
  224. akshare/stock/stock_hk_fhpx_ths.py +2 -1
  225. akshare/stock/stock_hk_hot_rank_em.py +1 -0
  226. akshare/stock/stock_hk_sina.py +91 -42
  227. akshare/stock/stock_hold_control_cninfo.py +100 -15
  228. akshare/stock/stock_hold_control_em.py +4 -5
  229. akshare/stock/stock_hold_num_cninfo.py +18 -12
  230. akshare/stock/stock_hot_rank_em.py +4 -1
  231. akshare/stock/stock_hot_search_baidu.py +32 -19
  232. akshare/stock/stock_hot_up_em.py +4 -1
  233. akshare/stock/stock_hsgt_em.py +155 -0
  234. akshare/stock/stock_industry.py +1 -0
  235. akshare/stock/stock_industry_cninfo.py +25 -20
  236. akshare/stock/stock_industry_pe_cninfo.py +45 -31
  237. akshare/stock/stock_industry_sw.py +5 -9
  238. akshare/stock/stock_info.py +31 -19
  239. akshare/stock/stock_info_em.py +17 -11
  240. akshare/stock/stock_intraday_em.py +9 -80
  241. akshare/stock/stock_intraday_sina.py +2 -2
  242. akshare/stock/stock_ipo_summary_cninfo.py +25 -10
  243. akshare/stock/stock_new_cninfo.py +32 -19
  244. akshare/stock/stock_news_cx.py +39 -0
  245. akshare/stock/stock_profile_cninfo.py +9 -8
  246. akshare/stock/stock_profile_em.py +302 -0
  247. akshare/stock/stock_rank_forecast.py +8 -6
  248. akshare/stock/stock_repurchase_em.py +7 -2
  249. akshare/stock/stock_share_changes_cninfo.py +18 -14
  250. akshare/stock/stock_share_hold.py +24 -20
  251. akshare/stock/stock_stop.py +6 -6
  252. akshare/stock/stock_summary.py +153 -417
  253. akshare/stock/stock_us_famous.py +19 -11
  254. akshare/stock/stock_us_js.py +3 -2
  255. akshare/stock/stock_us_pink.py +38 -27
  256. akshare/stock/stock_us_sina.py +15 -12
  257. akshare/stock/stock_weibo_nlp.py +18 -20
  258. akshare/stock/stock_xq.py +36 -9
  259. akshare/stock/stock_zh_a_sina.py +58 -80
  260. akshare/stock/stock_zh_a_special.py +240 -243
  261. akshare/stock/stock_zh_a_tick_tx.py +11 -3
  262. akshare/stock/stock_zh_ah_tx.py +23 -26
  263. akshare/stock/stock_zh_b_sina.py +32 -55
  264. akshare/stock/stock_zh_comparison_em.py +250 -0
  265. akshare/stock/stock_zh_kcb_report.py +11 -9
  266. akshare/stock/stock_zh_kcb_sina.py +67 -64
  267. akshare/stock_a/__init__.py +0 -0
  268. akshare/stock_a/stock_board_concept_name_em.py +170 -0
  269. akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
  270. akshare/stock_a/stock_zh_a_spot.py +212 -0
  271. akshare/stock_feature/cons.py +1 -0
  272. akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
  273. akshare/stock_feature/stock_a_high_low.py +5 -2
  274. akshare/stock_feature/stock_a_indicator.py +15 -57
  275. akshare/stock_feature/stock_a_pe_and_pb.py +39 -9
  276. akshare/stock_feature/stock_account_em.py +0 -1
  277. akshare/stock_feature/stock_all_pb.py +2 -1
  278. akshare/stock_feature/stock_analyst_em.py +36 -30
  279. akshare/stock_feature/stock_board_concept_ths.py +144 -252
  280. akshare/stock_feature/stock_board_industry_ths.py +137 -401
  281. akshare/stock_feature/stock_buffett_index_lg.py +10 -8
  282. akshare/stock_feature/stock_classify_sina.py +3 -6
  283. akshare/stock_feature/stock_comment_em.py +81 -144
  284. akshare/stock_feature/stock_concept_futu.py +183 -0
  285. akshare/stock_feature/stock_congestion_lg.py +2 -1
  286. akshare/stock_feature/stock_cyq_em.py +5 -11
  287. akshare/stock_feature/stock_disclosure_cninfo.py +20 -10
  288. akshare/stock_feature/stock_dxsyl_em.py +121 -74
  289. akshare/stock_feature/stock_ebs_lg.py +5 -4
  290. akshare/stock_feature/stock_esg_sina.py +33 -15
  291. akshare/stock_feature/stock_fhps_em.py +62 -26
  292. akshare/stock_feature/stock_fhps_ths.py +34 -7
  293. akshare/stock_feature/stock_fund_flow.py +38 -25
  294. akshare/stock_feature/stock_gddh_em.py +19 -11
  295. akshare/stock_feature/stock_gdfx_em.py +226 -113
  296. akshare/stock_feature/stock_gdhs.py +75 -50
  297. akshare/stock_feature/stock_gdzjc_em.py +21 -10
  298. akshare/stock_feature/stock_gpzy_em.py +78 -46
  299. akshare/stock_feature/stock_gxl_lg.py +3 -2
  300. akshare/stock_feature/stock_hist_em.py +158 -237
  301. akshare/stock_feature/stock_hist_tx.py +13 -10
  302. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  303. akshare/stock_feature/stock_hot_xq.py +4 -6
  304. akshare/stock_feature/stock_hsgt_em.py +269 -97
  305. akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
  306. akshare/stock_feature/stock_hsgt_min_em.py +13 -16
  307. akshare/stock_feature/stock_info.py +8 -81
  308. akshare/stock_feature/stock_inner_trade_xq.py +38 -31
  309. akshare/stock_feature/stock_irm_cninfo.py +32 -9
  310. akshare/stock_feature/stock_jgdy_em.py +43 -40
  311. akshare/stock_feature/stock_lh_yybpm.py +36 -37
  312. akshare/stock_feature/stock_lhb_em.py +165 -35
  313. akshare/stock_feature/stock_lhb_sina.py +93 -46
  314. akshare/stock_feature/stock_margin_em.py +101 -0
  315. akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -17
  316. akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +7 -7
  317. akshare/stock_feature/stock_market_legu.py +4 -2
  318. akshare/stock_feature/stock_pankou_em.py +71 -35
  319. akshare/stock_feature/stock_qsjy_em.py +13 -4
  320. akshare/stock_feature/stock_report_em.py +152 -8
  321. akshare/stock_feature/stock_research_report_em.py +55 -20
  322. akshare/stock_feature/stock_sns_sseinfo.py +15 -12
  323. akshare/stock_feature/stock_sy_em.py +20 -15
  324. akshare/stock_feature/stock_technology_ths.py +152 -120
  325. akshare/stock_feature/stock_tfp_em.py +37 -14
  326. akshare/stock_feature/stock_three_report_em.py +120 -78
  327. akshare/stock_feature/stock_ttm_lyr.py +18 -9
  328. akshare/stock_feature/stock_value_em.py +83 -0
  329. akshare/stock_feature/stock_yjbb_em.py +58 -32
  330. akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
  331. akshare/stock_feature/stock_yjyg_em.py +1 -1
  332. akshare/stock_feature/stock_yzxdr_em.py +24 -22
  333. akshare/stock_feature/stock_zdhtmx_em.py +20 -6
  334. akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
  335. akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
  336. akshare/stock_feature/stock_ztb_em.py +39 -24
  337. akshare/stock_fundamental/__init__.py +1 -1
  338. akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
  339. akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
  340. akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +203 -59
  341. akshare/stock_fundamental/stock_finance_ths.py +524 -57
  342. akshare/stock_fundamental/stock_finance_us_em.py +268 -0
  343. akshare/stock_fundamental/stock_gbjg_em.py +80 -0
  344. akshare/stock_fundamental/stock_hold.py +26 -17
  345. akshare/stock_fundamental/stock_ipo_declare.py +1 -0
  346. akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
  347. akshare/stock_fundamental/stock_kcb_sse.py +26 -25
  348. akshare/stock_fundamental/stock_notice.py +41 -18
  349. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  350. akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
  351. akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
  352. akshare/stock_fundamental/stock_recommend.py +20 -4
  353. akshare/stock_fundamental/stock_register_em.py +448 -0
  354. akshare/stock_fundamental/stock_zygc.py +5 -62
  355. akshare/tool/trade_date_hist.py +1 -1
  356. akshare/utils/context.py +43 -0
  357. akshare/utils/demjson.py +2009 -1338
  358. akshare/utils/func.py +49 -2
  359. akshare/utils/multi_decrypt.py +53 -0
  360. akshare/utils/token_process.py +6 -5
  361. akshare/utils/tqdm.py +13 -3
  362. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/METADATA +56 -86
  363. akshare-1.17.99.dist-info/RECORD +409 -0
  364. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
  365. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
  366. tests/test_func.py +3 -5
  367. akshare/bond/bond_futures.py +0 -50
  368. akshare/bond/bond_investing.py +0 -139
  369. akshare/crypto/crypto_hist_investing.py +0 -249
  370. akshare/fortune/fortune_it_juzi.py +0 -123
  371. akshare/fund/fund_announcement.py +0 -56
  372. akshare/futures/futures_international.py +0 -170
  373. akshare/futures/futures_news_baidu.py +0 -54
  374. akshare/futures/inventory_data.py +0 -100
  375. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  376. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  377. akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
  378. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  379. akshare/index/index_fear_greed_funddb.py +0 -78
  380. akshare/index/index_investing.py +0 -232
  381. akshare/sport/__init__.py +0 -6
  382. akshare/sport/sport_olympic.py +0 -27
  383. akshare/sport/sport_olympic_winter.py +0 -39
  384. akshare/stock_feature/stock_wencai.py +0 -104
  385. akshare/stock_fundamental/stock_mda_ym.py +0 -40
  386. akshare/stock_fundamental/stock_register.py +0 -292
  387. akshare-1.13.46.dist-info/RECORD +0 -380
  388. {akshare-1.13.46.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
@@ -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)
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python
2
2
  """
3
- Date: 2024/4/7 15:30
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: pd.DataFrame
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: pd.DataFrame
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: pd.DataFrame
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: pd.DataFrame
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: pd.DataFrame
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: pd.DataFrame
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 = "http://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionService.getStockName"
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 = "http://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionService.getRemainderDay"
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 = "http://stock.finance.sina.com.cn/futures/api/openapi.php/StockOptionService.getRemainderDay"
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
- "http://hq.sinajs.cn/list=OP_UP_",
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
- "http://hq.sinajs.cn/list=OP_DOWN_",
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"http://hq.sinajs.cn/list=CON_OP_{symbol}"
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"http://hq.sinajs.cn/list={symbol}"
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": "http://vip.stock.finance.sina.com.cn/",
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"http://hq.sinajs.cn/list=CON_SO_{symbol}"
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": "http://vip.stock.finance.sina.com.cn/",
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 = "http://stock.finance.sina.com.cn/futures/api/jsonp_v2.php//StockOptionDaylineService.getSymbolInfo"
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
- option_current_em_df = option_current_em()
862
- return option_current_em_df
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
- option_current_em_df = __option_current_em()
875
- option_current_em_df["标识"] = (
876
- option_current_em_df["市场标识"].astype(str)
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
- + option_current_em_df["代码"]
878
+ + inner_option_current_em_df["代码"]
879
879
  )
880
- id_ = option_current_em_df[option_current_em_df["代码"] == symbol]["标识"].values[0]
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="MO2404-P-4450")
978
+ option_minute_em_df = option_minute_em(symbol="10008594")
977
979
  print(option_minute_em_df)
@@ -1,12 +1,13 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2022/1/23 10:58
4
+ Date: 2024/7/30 17:00
5
5
  Desc: 东方财富网-数据中心-特色数据-期权龙虎榜单
6
6
  https://data.eastmoney.com/other/qqlhb.html
7
7
  """
8
- import requests
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], trade_date[4:6], trade_date[6:]])}')""",
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(temp_df["交易日期"]).dt.date
88
- temp_df["名次"] = pd.to_numeric(temp_df["名次"])
89
- temp_df["交易量"] = pd.to_numeric(temp_df["交易量"])
90
- temp_df["增减"] = pd.to_numeric(temp_df["增减"])
91
- temp_df["净认沽量"] = pd.to_numeric(temp_df["净认沽量"])
92
- temp_df["占总交易量比例"] = pd.to_numeric(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(temp_df["交易日期"]).dt.date
139
- temp_df["名次"] = pd.to_numeric(temp_df["名次"])
140
- temp_df["持仓量"] = pd.to_numeric(temp_df["持仓量"])
141
- temp_df["增减"] = pd.to_numeric(temp_df["增减"])
142
- temp_df["净持仓量"] = pd.to_numeric(temp_df["净持仓量"])
143
- temp_df["占总交易量比例"] = pd.to_numeric(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(temp_df["交易日期"]).dt.date
190
- temp_df["名次"] = pd.to_numeric(temp_df["名次"])
191
- temp_df["交易量"] = pd.to_numeric(temp_df["交易量"])
192
- temp_df["增减"] = pd.to_numeric(temp_df["增减"])
193
- temp_df["净交易量"] = pd.to_numeric(temp_df["净交易量"])
194
- temp_df["占总交易量比例"] = pd.to_numeric(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.columns = [
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(temp_df["交易日期"]).dt.date
241
- temp_df["名次"] = pd.to_numeric(temp_df["名次"])
242
- temp_df["持仓量"] = pd.to_numeric(temp_df["持仓量"])
243
- temp_df["增减"] = pd.to_numeric(temp_df["增减"])
244
- temp_df["净持仓量"] = pd.to_numeric(temp_df["净持仓量"])
245
- temp_df["占总交易量比例"] = pd.to_numeric(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="510300", indicator="期权持仓情况-认购持仓量", trade_date="20220124"
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)