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
@@ -1,297 +1,95 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/1/10 19:00
4
+ Date: 2025/11/25 18:00
5
5
  Desc: 99 期货网-大宗商品库存数据
6
- http://www.99qh.com/d/store.aspx
6
+ https://www.99qh.com/
7
7
  """
8
- from io import StringIO
8
+
9
+ import json
10
+ from datetime import datetime
11
+ from functools import lru_cache
9
12
 
10
13
  import pandas as pd
11
14
  import requests
12
15
  from bs4 import BeautifulSoup
13
16
 
14
- from akshare.futures.cons import (
15
- qh_headers,
16
- sample_headers,
17
- )
17
+
18
+ @lru_cache(maxsize=32)
19
+ def __get_99_symbol_map() -> pd.DataFrame:
20
+ """
21
+ 99 期货网-品种代码对照表
22
+ https://www.99qh.com/data/stockIn?productId=12
23
+ :return: 品种代码对照表
24
+ :rtype: pandas.DataFrame
25
+ """
26
+ url = "https://www.99qh.com/data/stockIn"
27
+ r = requests.get(url)
28
+ soup = BeautifulSoup(r.text, features="lxml")
29
+ raw_data = soup.find(attrs={"id": "__NEXT_DATA__"}).text
30
+ data_json = json.loads(raw_data)
31
+ df_list = []
32
+ for i, item in enumerate(
33
+ data_json["props"]["pageProps"]["data"]["varietyListData"]
34
+ ):
35
+ temp_df = pd.DataFrame(
36
+ data_json["props"]["pageProps"]["data"]["varietyListData"][i]["productList"]
37
+ )
38
+ df_list.append(temp_df)
39
+
40
+ big_df = pd.concat(df_list, ignore_index=True)
41
+ return big_df
18
42
 
19
43
 
20
- def futures_inventory_99(
21
- exchange: str = "大连商品交易所", symbol: str = "豆一"
22
- ) -> pd.DataFrame:
44
+ def futures_inventory_99(symbol: str = "豆一") -> pd.DataFrame:
23
45
  """
24
46
  99 期货网-大宗商品库存数据
25
- http://www.99qh.com/d/store.aspx
26
- :param exchange: 交易所名称; choice of {"上海期货交易所", "郑州商品交易所", "大连商品交易所", "LME", "NYMEX", "CBOT", "NYBOT", "TOCOM", "上海国际能源交易中心", "OSE"}
27
- :type exchange: str
47
+ https://www.99qh.com/data/stockIn?productId=12
28
48
  :param symbol: 交易所对应的具体品种; 如:大连商品交易所的 豆一
29
49
  :type symbol: str
30
50
  :return: 大宗商品库存数据
31
51
  :rtype: pandas.DataFrame
32
52
  """
33
- data_code = {
34
- "1": [
35
- "1",
36
- "2",
37
- "3",
38
- "12",
39
- "32",
40
- "36",
41
- "37",
42
- "40",
43
- "42",
44
- "47",
45
- "56",
46
- "63",
47
- "69",
48
- "70",
49
- "79",
50
- "85",
51
- ],
52
- "2": [
53
- "4",
54
- "14",
55
- "29",
56
- "31",
57
- "33",
58
- "38",
59
- "44",
60
- "45",
61
- "50",
62
- "51",
63
- "52",
64
- "55",
65
- "59",
66
- "64",
67
- "66",
68
- "67",
69
- "75",
70
- "76",
71
- "81",
72
- "82",
73
- "87",
74
- "92",
75
- "95",
76
- ],
77
- "3": [
78
- "6",
79
- "7",
80
- "8",
81
- "15",
82
- "30",
83
- "34",
84
- "35",
85
- "39",
86
- "43",
87
- "53",
88
- "57",
89
- "58",
90
- "61",
91
- "62",
92
- "68",
93
- "80",
94
- "84",
95
- "86",
96
- "88",
97
- "89",
98
- "94",
99
- ],
100
- "4": ["9", "10", "16", "17", "18", "23", "28"],
101
- "5": ["11", "20", "21"],
102
- "6": ["13", "24", "25", "26", "27"],
103
- "7": ["19"],
104
- "8": ["22"],
105
- "10": ["78", "83", "90", "93"],
106
- "11": ["91"],
107
- }
108
- data_name = {
109
- "1": [
110
- "铜",
111
- "铝",
112
- "橡胶",
113
- "燃料油",
114
- "锌",
115
- "黄金",
116
- "螺纹钢",
117
- "线材",
118
- "铅",
119
- "白银",
120
- "石油沥青",
121
- "热轧卷板",
122
- "锡",
123
- "镍",
124
- "纸浆",
125
- "不锈钢",
126
- ],
127
- "2": [
128
- "强麦",
129
- "一号棉",
130
- "白糖",
131
- "PTA",
132
- "菜籽油",
133
- "早籼稻",
134
- "甲醇",
135
- "普麦",
136
- "玻璃",
137
- "油菜籽",
138
- "菜籽粕",
139
- "动力煤",
140
- "粳稻",
141
- "晚籼稻",
142
- "硅铁",
143
- "锰硅",
144
- "棉纱",
145
- "苹果",
146
- "红枣",
147
- "尿素",
148
- "纯碱",
149
- "短纤",
150
- "花生",
151
- ],
152
- "3": [
153
- "豆一",
154
- "豆二",
155
- "豆粕",
156
- "玉米",
157
- "豆油",
158
- "聚乙烯",
159
- "棕榈油",
160
- "聚氯乙烯",
161
- "焦炭",
162
- "焦煤",
163
- "铁矿石",
164
- "鸡蛋",
165
- "胶合板",
166
- "聚丙烯",
167
- "玉米淀粉",
168
- "乙二醇",
169
- "粳米",
170
- "苯乙烯",
171
- "纤维板",
172
- "液化石油气",
173
- "生猪",
174
- ],
175
- "4": ["LME铜", "LME铝", "LME镍", "LME铅", "LME锌", "LME锡", "LME铝合金"],
176
- "5": ["COMEX铜", "COMEX金", "COMEX银"],
177
- "6": ["CBOT大豆", "CBOT小麦", "CBOT玉米", "CBOT燕麦", "CBOT糙米"],
178
- "7": ["NYBOT2号棉"],
179
- "8": ["TOCOM橡胶"],
180
- "10": ["原油", "20号胶", "低硫燃料油", "国际铜"],
181
- "11": ["OSE橡胶"],
182
- }
183
- temp_out_exchange_name = {
184
- "1": "上海期货交易所",
185
- "2": "郑州商品交易所",
186
- "3": "大连商品交易所",
187
- "4": "LME",
188
- "5": "NYMEX",
189
- "6": "CBOT",
190
- "7": "NYBOT",
191
- "8": "TOCOM",
192
- "10": "上海国际能源交易中心",
193
- "11": "OSE",
194
- }
195
- exchange_map = {
196
- value: key for key, value in temp_out_exchange_name.items()
53
+ temp_df = __get_99_symbol_map()
54
+ symbol_name_map = dict(zip(temp_df["name"], temp_df["productId"]))
55
+ symbol_code_map = dict(zip(temp_df["code"], temp_df["productId"]))
56
+ if symbol in symbol_name_map: # 如果输入的是中文名称
57
+ product_id = symbol_name_map[symbol]
58
+ elif symbol in symbol_code_map: # 如果输入的是代码
59
+ product_id = symbol_code_map[symbol]
60
+ else:
61
+ raise ValueError(f"未找到品种 {symbol} 对应的编号")
62
+
63
+ url = "https://centerapi.fx168api.com/app/qh/api/stock/trend"
64
+ headers = {
65
+ "Content-Type": "application/json;charset=UTF-8",
66
+ "_pcc": "Km+8HvRZpwuTQevs9gsuZsqDqExHrbSybJ2owcl8Mlz8vRgIuzoVIGUDD+WkESBlOWbSC3sKLxA4M4sG57vC0V"
67
+ "KPdI+MX+IpDC4NViRU6TSftUi9Jeqer88KW8BvEmYMOTdUgyYuo27yjgAT28wWSYDiHBCBHiWX97lJydFI8ec=",
68
+ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
69
+ "Chrome/58.0.3029.110 Safari/537.3",
70
+ "referer": "https://www.99qh.com",
71
+ "origin": "https://www.99qh.com",
197
72
  }
198
- exchange = exchange_map[exchange]
199
- temp_symbol_code_map = dict(zip(data_name[exchange], data_code[exchange]))
200
- symbol = temp_symbol_code_map[symbol]
201
- out_exchange_name = {
202
- "1": "上海期货交易所",
203
- "2": "郑州商品交易所",
204
- "3": "大连商品交易所",
205
- "4": "LME",
206
- "5": "NYMEX",
207
- "6": "CBOT",
208
- "7": "NYBOT",
209
- "8": "TOCOM",
210
- "10": "上海国际能源交易中心",
211
- "11": "OSE",
73
+ params = {
74
+ "productId": product_id,
75
+ "type": "1",
76
+ "pageNo": "1",
77
+ "pageSize": "5000",
78
+ "startDate": "",
79
+ "endDate": f"{datetime.now().date().isoformat()}",
80
+ "appCategory": "web",
212
81
  }
213
- name_temp_dict = {}
214
- code_temp_dict = {}
215
- for num in data_code.keys():
216
- name_temp_dict[out_exchange_name[num]] = dict(
217
- zip(data_code[num], data_name[num])
218
- )
219
- code_temp_dict[num] = dict(zip(data_code[num], data_name[num]))
220
- n = 10
221
- while n != 0:
222
- try:
223
- n -= 1
224
- session = requests.Session()
225
- url = "http://service.99qh.com/Storage/Storage.aspx"
226
- params = {"page": "99qh"}
227
- r = session.post(url, params=params, headers=sample_headers)
228
- cookie = r.cookies.get_dict()
229
- url = "http://service.99qh.com/Storage/Storage.aspx"
230
- params = {"page": "99qh"}
231
- r = requests.post(
232
- url, params=params, headers=sample_headers, cookies=cookie
233
- )
234
- soup = BeautifulSoup(r.text, "lxml")
235
- view_state = soup.find_all(attrs={"id": "__VIEWSTATE"})[0]["value"]
236
- even_validation = soup.find_all(attrs={"id": "__EVENTVALIDATION"})[
237
- 0
238
- ]["value"]
239
- payload = {
240
- "__EVENTTARGET": "ddlExchName",
241
- "__EVENTARGUMENT": "",
242
- "__LASTFOCUS": "",
243
- "__VIEWSTATE": view_state,
244
- "__VIEWSTATEGENERATOR": "6EAC22FA",
245
- "__EVENTVALIDATION": even_validation,
246
- "ddlExchName": int(exchange),
247
- "ddlGoodsName": 1,
248
- }
249
- res = requests.post(
250
- url,
251
- params={"page": "99qh"},
252
- data=payload,
253
- headers=qh_headers,
254
- cookies=cookie,
255
- )
256
- soup = BeautifulSoup(res.text, "lxml")
257
- view_state = soup.find_all(attrs={"id": "__VIEWSTATE"})[0]["value"]
258
- even_validation = soup.find_all(attrs={"id": "__EVENTVALIDATION"})[
259
- 0
260
- ]["value"]
261
- payload = {
262
- "__EVENTTARGET": "ddlGoodsName",
263
- "__EVENTARGUMENT": "",
264
- "__LASTFOCUS": "",
265
- "__VIEWSTATE": view_state,
266
- "__VIEWSTATEGENERATOR": "6EAC22FA",
267
- "__EVENTVALIDATION": even_validation,
268
- "ddlExchName": int(exchange),
269
- "ddlGoodsName": int(symbol),
270
- }
271
- res = requests.post(
272
- url,
273
- params=params,
274
- data=payload,
275
- headers=qh_headers,
276
- cookies=cookie,
277
- )
278
- data_df = pd.read_html(StringIO(res.text))[-1].T
279
- data_df.columns = data_df.iloc[0, :]
280
- data_df = data_df.iloc[1:, :]
281
- data_df.reset_index(inplace=True, drop=True)
282
- data_df.columns.name = None
283
- data_df["日期"] = pd.to_datetime(data_df["日期"]).dt.date
284
- data_df["库存"] = pd.to_numeric(data_df["库存"])
285
- data_df["增减"] = pd.to_numeric(data_df["增减"])
286
- data_df.sort_values("日期", inplace=True)
287
- data_df.reset_index(inplace=True, drop=True)
288
- return data_df
289
- except:
290
- continue
82
+ r = requests.get(url, params, headers=headers)
83
+ data_json = r.json()
84
+ temp_df = pd.DataFrame(data_json["data"]["list"])
85
+ temp_df.columns = ["日期", "收盘价", "库存"]
86
+ temp_df.sort_values(by=["日期"], ignore_index=True, inplace=True)
87
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
88
+ temp_df["收盘价"] = pd.to_numeric(temp_df["收盘价"], errors="coerce")
89
+ temp_df["库存"] = pd.to_numeric(temp_df["库存"], errors="coerce")
90
+ return temp_df
291
91
 
292
92
 
293
93
  if __name__ == "__main__":
294
- futures_inventory_99_df = futures_inventory_99(
295
- exchange="郑州商品交易所", symbol="菜籽油"
296
- )
94
+ futures_inventory_99_df = futures_inventory_99(symbol="豆一")
297
95
  print(futures_inventory_99_df)
@@ -1,19 +1,21 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2022/11/27 19:58
4
+ Date: 2025/3/5 17:30
5
5
  Desc: 东方财富网-数据中心-期货库存数据
6
6
  https://data.eastmoney.com/ifdata/kcsj.html
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
11
+ from akshare.futures.cons import futures_inventory_em_symbol_dict
10
12
 
11
13
 
12
- def futures_inventory_em(symbol: str = "沪铝") -> pd.DataFrame:
14
+ def futures_inventory_em(symbol: str = "a") -> pd.DataFrame:
13
15
  """
14
16
  东方财富网-数据中心-期货库存数据
15
17
  https://data.eastmoney.com/ifdata/kcsj.html
16
- :param symbol: https://data.eastmoney.com/ifdata/kcsj.html 对应的中文名称, 如: 沪铝
18
+ :param symbol: 支持品种代码和中文名称,中文名称参见:https://data.eastmoney.com/ifdata/kcsj.html
17
19
  :type symbol: str
18
20
  :return: 指定品种的库存数据
19
21
  :rtype: pandas.DataFrame
@@ -27,40 +29,41 @@ def futures_inventory_em(symbol: str = "沪铝") -> pd.DataFrame:
27
29
  "pageSize": "500",
28
30
  "source": "WEB",
29
31
  "client": "WEB",
30
- "_": "1669352163467",
31
32
  }
32
33
  r = requests.get(url, params=params)
33
34
  data_json = r.json()
34
35
  temp_df = pd.DataFrame(data_json["result"]["data"])
35
36
  symbol_dict = dict(zip(temp_df["TRADE_TYPE"], temp_df["TRADE_CODE"]))
36
-
37
- url = "https://datacenter-web.eastmoney.com/api/data/v1/get"
37
+ if symbol in symbol_dict.keys():
38
+ product_id = symbol_dict[symbol]
39
+ elif symbol in futures_inventory_em_symbol_dict.keys(): # 如果输入的是代码
40
+ product_id = futures_inventory_em_symbol_dict[symbol]
41
+ else:
42
+ raise ValueError(f"请输入正确的 symbol, 可选项为: {symbol_dict}")
38
43
  params = {
39
44
  "reportName": "RPT_FUTU_STOCKDATA",
40
45
  "columns": "SECURITY_CODE,TRADE_DATE,ON_WARRANT_NUM,ADDCHANGE",
41
- "filter": f"""(SECURITY_CODE="{symbol_dict[symbol]}")(TRADE_DATE>='2020-10-28')""",
46
+ "filter": f"""(SECURITY_CODE="{product_id}")(TRADE_DATE>='2020-10-28')""",
42
47
  "pageNumber": "1",
43
48
  "pageSize": "500",
44
49
  "sortTypes": "-1",
45
50
  "sortColumns": "TRADE_DATE",
46
51
  "source": "WEB",
47
52
  "client": "WEB",
48
- "_": "1669352163467",
49
53
  }
50
54
  r = requests.get(url, params=params)
51
55
  data_json = r.json()
52
56
  temp_df = pd.DataFrame(data_json["result"]["data"])
53
-
54
57
  temp_df.columns = ["-", "日期", "库存", "增减"]
55
58
  temp_df = temp_df[["日期", "库存", "增减"]]
56
59
  temp_df.sort_values(["日期"], inplace=True)
57
60
  temp_df.reset_index(inplace=True, drop=True)
58
61
  temp_df["库存"] = pd.to_numeric(temp_df["库存"], errors="coerce")
59
62
  temp_df["增减"] = pd.to_numeric(temp_df["增减"], errors="coerce")
60
- temp_df["日期"] = pd.to_datetime(temp_df["日期"]).dt.date
63
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
61
64
  return temp_df
62
65
 
63
66
 
64
67
  if __name__ == "__main__":
65
- futures_inventory_em_df = futures_inventory_em(symbol="豆一")
68
+ futures_inventory_em_df = futures_inventory_em(symbol="a")
66
69
  print(futures_inventory_em_df)
@@ -1,7 +1,7 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2024/3/21 12:00
4
+ Date: 2024/12/26 18:00
5
5
  Desc: 上海金属网-快讯
6
6
  https://www.shmet.com/newsFlash/newsFlash.html?searchKeyword=
7
7
  """
@@ -38,7 +38,7 @@ def futures_news_shmet(symbol: str = "全部") -> pd.DataFrame:
38
38
  }
39
39
  payload = {
40
40
  "currentPage": 1,
41
- "pageSize": 1000,
41
+ "pageSize": 2000,
42
42
  "content": "",
43
43
  "flashTag": symbol_map[symbol],
44
44
  }
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/1/12 16:58
4
+ Date: 2025/7/16 17:40
5
5
  Desc: 中国期货各合约展期收益率
6
6
  日线数据从 daily_bar 函数获取, 需要在收盘后运行
7
7
  """
8
+
8
9
  import datetime
9
10
  import re
10
11
  import warnings
@@ -31,9 +32,7 @@ def get_roll_yield(date=None, var="BB", symbol1=None, symbol2=None, df=None):
31
32
  df: DataFrame或None 从dailyBar得到合约价格,如果为空就在函数内部抓dailyBar,直接喂给数据可以让计算加快
32
33
  """
33
34
  # date = "20100104"
34
- date = (
35
- cons.convert_date(date) if date is not None else datetime.date.today()
36
- )
35
+ date = cons.convert_date(date) if date is not None else datetime.date.today()
37
36
  if date.strftime("%Y%m%d") not in calendar:
38
37
  warnings.warn("%s非交易日" % date.strftime("%Y%m%d"))
39
38
  return None
@@ -46,9 +45,7 @@ def get_roll_yield(date=None, var="BB", symbol1=None, symbol2=None, df=None):
46
45
  df = df[
47
46
  ~df["symbol"].str.contains("efp")
48
47
  ] # 20200304 由于交易所获取的数据中会有比如 "CUefp",所以在这里过滤
49
- df = df[df["variety"] == var].sort_values(
50
- "open_interest", ascending=False
51
- )
48
+ df = df[df["variety"] == var].sort_values(by=["open_interest"], ascending=False)
52
49
  # df["close"] = df["close"].astype("float")
53
50
  df["close"] = pd.to_numeric(df["close"])
54
51
  if len(df["close"]) < 2:
@@ -93,20 +90,14 @@ def get_roll_yield_bar(
93
90
  ry 展期收益率
94
91
  index 日期或品种
95
92
  """
96
- date = (
97
- cons.convert_date(date) if date is not None else datetime.date.today()
98
- )
93
+ date = cons.convert_date(date) if date is not None else datetime.date.today()
99
94
  start_day = (
100
- cons.convert_date(start_day)
101
- if start_day is not None
102
- else datetime.date.today()
95
+ cons.convert_date(start_day) if start_day is not None else datetime.date.today()
103
96
  )
104
97
  end_day = (
105
98
  cons.convert_date(end_day)
106
99
  if end_day is not None
107
- else cons.convert_date(
108
- cons.get_latest_data_date(datetime.datetime.now())
109
- )
100
+ else cons.convert_date(cons.get_latest_data_date(datetime.datetime.now()))
110
101
  )
111
102
 
112
103
  if type_method == "symbol":
@@ -122,13 +113,11 @@ def get_roll_yield_bar(
122
113
  df = pd.concat(
123
114
  [
124
115
  df,
125
- get_futures_daily(
126
- start_date=date, end_date=date, market=market
127
- ),
116
+ get_futures_daily(start_date=date, end_date=date, market=market),
128
117
  ]
129
118
  )
130
119
  var_list = list(set(df["variety"]))
131
- for i_remove in ['IO', 'MO', 'HO']:
120
+ for i_remove in ["IO", "MO", "HO"]:
132
121
  if i_remove in var_list:
133
122
  var_list.remove(i_remove)
134
123
  df_l = pd.DataFrame()
@@ -165,7 +154,7 @@ def get_roll_yield_bar(
165
154
  ),
166
155
  ]
167
156
  )
168
- except:
157
+ except: # noqa: E722
169
158
  pass
170
159
  start_day += datetime.timedelta(days=1)
171
160
  return df_l
@@ -186,7 +175,5 @@ if __name__ == "__main__":
186
175
  )
187
176
  print(get_roll_yield_bar_range_df)
188
177
 
189
- get_roll_yield_bar_symbol = get_roll_yield_bar(
190
- type_method="var", date="20210201"
191
- )
178
+ get_roll_yield_bar_symbol = get_roll_yield_bar(type_method="var", date="20210201")
192
179
  print(get_roll_yield_bar_symbol)
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/12/5 19:00
4
+ Date: 2025/3/31 18:00
5
5
  Desc: 国泰君安期货-交易日历数据表
6
6
  https://www.gtjaqh.com/pc/calendar.html
7
7
  """
8
+
8
9
  from io import StringIO
9
10
 
10
11
  import pandas as pd
@@ -21,6 +22,7 @@ def futures_rule(date: str = "20231205") -> pd.DataFrame:
21
22
  :rtype: pandas.DataFrame
22
23
  """
23
24
  import urllib3
25
+
24
26
  urllib3.disable_warnings()
25
27
  url = " https://www.gtjaqh.com/pc/calendar"
26
28
  params = {"date": f"{date}"}
@@ -32,10 +34,12 @@ def futures_rule(date: str = "20231205") -> pd.DataFrame:
32
34
  big_df["涨跌停板幅度"] = pd.to_numeric(big_df["涨跌停板幅度"], errors="coerce")
33
35
  big_df["合约乘数"] = pd.to_numeric(big_df["合约乘数"], errors="coerce")
34
36
  big_df["最小变动价位"] = pd.to_numeric(big_df["最小变动价位"], errors="coerce")
35
- big_df["限价单每笔最大下单手数"] = pd.to_numeric(big_df["限价单每笔最大下单手数"], errors="coerce")
37
+ big_df["限价单每笔最大下单手数"] = pd.to_numeric(
38
+ big_df["限价单每笔最大下单手数"], errors="coerce"
39
+ )
36
40
  return big_df
37
41
 
38
42
 
39
43
  if __name__ == "__main__":
40
- futures_rule_df = futures_rule(date="20231205")
44
+ futures_rule_df = futures_rule(date="20250328")
41
45
  print(futures_rule_df)
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2024/1/17 19:30
5
+ Desc: 东方财富网-期货行情-品种及交易规则
6
+ https://portal.eastmoneyfutures.com/pages/service/jyts.html#jyrl
7
+ """
8
+
9
+ import pandas as pd
10
+ import requests
11
+ from akshare.utils.cons import headers
12
+
13
+
14
+ def futures_rule_em() -> pd.DataFrame:
15
+ """
16
+ 东方财富网-期货行情-品种及交易规则
17
+ https://portal.eastmoneyfutures.com/pages/service/jyts.html#jyrl
18
+ :return: 品种及交易规则
19
+ :rtype: pandas.DataFrame
20
+ """
21
+ url = "https://eastmoneyfutures.com/api/ComManage/GetPZJYInfo"
22
+ r = requests.get(url, headers=headers)
23
+ data_json = r.json()
24
+ temp_df = pd.DataFrame(data_json["Data"])
25
+ return temp_df
26
+
27
+
28
+ def futures_trading_hours_em():
29
+ """
30
+ 东方财富网-期货交易时间
31
+ https://qhweb.eastmoney.com/tradinghours
32
+ """
33
+ pass
34
+
35
+
36
+ if __name__ == "__main__":
37
+ futures_rule_em_df = futures_rule_em()
38
+ print(futures_rule_em_df)
@@ -6,6 +6,7 @@ Desc: 新加坡交易所-衍生品-历史数据-历史结算价格
6
6
  https://www.sgx.com/zh-hans/research-education/derivatives
7
7
  https://links.sgx.com/1.0.0/derivatives-daily/5888/FUTURE.zip
8
8
  """
9
+
9
10
  import zipfile
10
11
  from io import BytesIO
11
12
  from io import StringIO
@@ -33,15 +34,29 @@ def __fetch_ftse_index_futu(date: str = "20231108") -> int:
33
34
  "iscca": "1",
34
35
  "fields1": "f1,f2,f3,f4,f5,f6,f7,f8",
35
36
  "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64",
36
- 'ut': 'f057cbcbce2a86e2866ab8877db1d059',
37
- 'forcect': '1',
37
+ "ut": "f057cbcbce2a86e2866ab8877db1d059",
38
+ "forcect": "1",
38
39
  }
39
40
  r = requests.get(url, params=params)
40
41
  data_json = r.json()
41
- temp_df = pd.DataFrame([item.split(",") for item in data_json['data']['klines']])
42
- temp_df.columns = ['date', "-", "open", "close", "high", "low", "volume", "amount", "_", "-", "open", "close",
43
- "high", "low"]
44
- num = temp_df['date'].index[-1] + 791
42
+ temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["klines"]])
43
+ temp_df.columns = [
44
+ "date",
45
+ "-",
46
+ "open",
47
+ "close",
48
+ "high",
49
+ "low",
50
+ "volume",
51
+ "amount",
52
+ "_",
53
+ "-",
54
+ "open",
55
+ "close",
56
+ "high",
57
+ "low",
58
+ ]
59
+ num = temp_df["date"].index[-1] + 791
45
60
  return num
46
61
 
47
62