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
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/5/11 22:00
4
+ Date: 2024/11/30 18:00
5
5
  Desc: 期货日线行情
6
6
  """
7
7
 
@@ -272,12 +272,12 @@ def get_gfex_daily(date: str = "20221223") -> pd.DataFrame:
272
272
  return result_df
273
273
 
274
274
 
275
- def get_ine_daily(date: str = "20220208") -> pd.DataFrame:
275
+ def get_ine_daily(date: str = "20241129") -> pd.DataFrame:
276
276
  """
277
277
  上海国际能源交易中心-日频率-量价数据
278
278
  上海国际能源交易中心: 原油期货(上市时间: 20180326); 20号胶期货(上市时间: 20190812)
279
- trade_price: http://www.ine.cn/statements/daily/?paramid=kx
280
- trade_note: http://www.ine.cn/data/datanote.dat
279
+ trade_price: https://www.ine.cn/statements/daily/?paramid=kx
280
+ trade_note: https://www.ine.cn/data/datanote.dat
281
281
  :param date: 日期 format:YYYY-MM-DD 或 YYYYMMDD 或 datetime.date对象,默认为当前交易日
282
282
  :type date: str or datetime.date
283
283
  :return: 上海国际能源交易中心-日频率-量价数据
@@ -287,7 +287,7 @@ def get_ine_daily(date: str = "20220208") -> pd.DataFrame:
287
287
  if day.strftime("%Y%m%d") not in calendar:
288
288
  # warnings.warn(f"{day.strftime('%Y%m%d')}非交易日")
289
289
  return pd.DataFrame()
290
- url = f"http://www.ine.cn/data/dailydata/kx/kx{day.strftime('%Y%m%d')}.dat"
290
+ url = f"https://www.ine.cn/data/tradedata/future/dailydata/kx{day.strftime('%Y%m%d')}.dat"
291
291
  r = requests.get(url, headers=cons.shfe_headers)
292
292
  result_df = pd.DataFrame()
293
293
  try:
@@ -480,13 +480,13 @@ def get_shfe_daily(date: str = "20220415") -> pd.DataFrame:
480
480
  try:
481
481
  json_data = json.loads(
482
482
  requests_link(
483
- cons.SHFE_DAILY_URL % (day.strftime("%Y%m%d")),
483
+ cons.SHFE_DAILY_URL_20250630 % (day.strftime("%Y%m%d")),
484
484
  headers=cons.shfe_headers,
485
485
  ).text
486
486
  )
487
487
  except requests.HTTPError as reason:
488
488
  if reason.response != 404:
489
- print(cons.SHFE_DAILY_URL % (day.strftime("%Y%m%d")), reason)
489
+ print(cons.SHFE_DAILY_URL_20250630 % (day.strftime("%Y%m%d")), reason)
490
490
  return pd.DataFrame()
491
491
 
492
492
  if len(json_data["o_curinstrument"]) == 0:
@@ -524,7 +524,7 @@ def get_shfe_daily(date: str = "20220415") -> pd.DataFrame:
524
524
  return df
525
525
 
526
526
 
527
- def get_dce_daily(date: str = "20220308") -> pd.DataFrame:
527
+ def get_dce_daily(date: str = "20251027") -> pd.DataFrame:
528
528
  """
529
529
  大连商品交易所日交易数据
530
530
  http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/rtj/rxq/index.html
@@ -537,42 +537,42 @@ def get_dce_daily(date: str = "20220308") -> pd.DataFrame:
537
537
  if day.strftime("%Y%m%d") not in calendar:
538
538
  # warnings.warn("%s非交易日" % day.strftime("%Y%m%d"))
539
539
  return pd.DataFrame()
540
- url = "http://www.dce.com.cn/publicweb/quotesdata/exportDayQuotesChData.html"
541
- headers = {
542
- "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,"
543
- "application/signed-exchange;v=b3;q=0.9",
544
- "Accept-Encoding": "gzip, deflate",
545
- "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
546
- "Cache-Control": "no-cache",
547
- "Connection": "keep-alive",
548
- "Content-Length": "86",
549
- "Content-Type": "application/x-www-form-urlencoded",
550
- "Host": "www.dce.com.cn",
551
- "Origin": "http://www.dce.com.cn",
552
- "Pragma": "no-cache",
553
- "Referer": "http://www.dce.com.cn/publicweb/quotesdata/dayQuotesCh.html",
554
- "Upgrade-Insecure-Requests": "1",
555
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
556
- "Chrome/84.0.4147.105 Safari/537.36",
540
+ url = "http://www.dce.com.cn/dcereport/publicweb/dailystat/dayQuotes"
541
+ payload = {
542
+ "contractId": "",
543
+ "lang": "zh",
544
+ "optionSeries": "",
545
+ "statisticsType": "0",
546
+ "tradeDate": date,
547
+ "tradeType": "1",
548
+ "varietyId": "all",
557
549
  }
558
- params = {
559
- "dayQuotes.variety": "all",
560
- "dayQuotes.trade_type": "0",
561
- "year": date[:4],
562
- "month": str(int(date[4:6]) - 1),
563
- "day": date[6:],
564
- "exportFlag": "excel",
565
- }
566
- r = requests.post(url, data=params, headers=headers)
567
- data_df = pd.read_excel(BytesIO(r.content), header=1)
568
-
569
- data_df = data_df[~data_df["商品名称"].str.contains("小计")]
570
- data_df = data_df[~data_df["商品名称"].str.contains("总计")]
571
- data_df["variety"] = data_df["商品名称"].map(lambda x: cons.DCE_MAP[x])
572
- data_df["symbol"] = data_df["合约名称"]
573
- del data_df["商品名称"]
574
- del data_df["合约名称"]
575
- data_df.columns = [
550
+ r = requests.post(url, json=payload)
551
+ data_json = r.json()
552
+ temp_df = pd.DataFrame(data_json['data'])
553
+ temp_df.rename(columns={
554
+ "variety": "品种名称",
555
+ "contractId": "合约",
556
+ "open": "开盘价",
557
+ "high": "最高价",
558
+ "low": "最低价",
559
+ "close": "收盘价",
560
+ "lastClear": "前结算价",
561
+ "clearPrice": "结算价",
562
+ "diff": "涨跌",
563
+ "diff1": "涨跌1",
564
+ "volumn": "成交量",
565
+ "openInterest": "持仓量",
566
+ "diffI": "持仓量变化",
567
+ "turnover": "成交额",
568
+ }, inplace=True)
569
+ temp_df = temp_df[~temp_df["品种名称"].str.contains("小计")]
570
+ temp_df = temp_df[~temp_df["品种名称"].str.contains("总计")]
571
+ temp_df["variety"] = temp_df["品种名称"].map(lambda x: cons.DCE_MAP[x])
572
+ temp_df["symbol"] = temp_df["合约"]
573
+ del temp_df["品种名称"]
574
+ del temp_df["合约"]
575
+ temp_df.columns = [
576
576
  "open",
577
577
  "high",
578
578
  "low",
@@ -581,15 +581,24 @@ def get_dce_daily(date: str = "20220308") -> pd.DataFrame:
581
581
  "settle",
582
582
  "_",
583
583
  "_",
584
+ "_",
584
585
  "volume",
585
586
  "open_interest",
586
587
  "_",
587
588
  "turnover",
589
+ "_",
590
+ "_",
591
+ "_",
592
+ "_",
593
+ "_",
594
+ "_",
595
+ "_",
596
+ "_",
588
597
  "variety",
589
598
  "symbol",
590
599
  ]
591
- data_df["date"] = date
592
- data_df = data_df[
600
+ temp_df["date"] = date
601
+ temp_df = temp_df[
593
602
  [
594
603
  "symbol",
595
604
  "date",
@@ -605,13 +614,7 @@ def get_dce_daily(date: str = "20220308") -> pd.DataFrame:
605
614
  "variety",
606
615
  ]
607
616
  ]
608
- # TODO pandas 2.1.0 change
609
- try:
610
- data_df = data_df.map(lambda x: x.replace(",", ""))
611
- except: # noqa: E722
612
- data_df = data_df.applymap(lambda x: x.replace(",", ""))
613
-
614
- data_df = data_df.astype(
617
+ temp_df = temp_df.astype(
615
618
  {
616
619
  "open": "float",
617
620
  "high": "float",
@@ -624,8 +627,8 @@ def get_dce_daily(date: str = "20220308") -> pd.DataFrame:
624
627
  "pre_settle": "float",
625
628
  }
626
629
  )
627
- data_df.reset_index(inplace=True, drop=True)
628
- return data_df
630
+ temp_df.reset_index(inplace=True, drop=True)
631
+ return temp_df
629
632
 
630
633
 
631
634
  def get_futures_daily(
@@ -674,23 +677,27 @@ def get_futures_daily(
674
677
  df_list = list()
675
678
  while start_date <= end_date:
676
679
  df = f(date=str(start_date).replace("-", ""))
677
- if df is not None:
680
+ if not df.empty:
678
681
  df_list.append(df)
679
682
  start_date += datetime.timedelta(days=1)
680
683
 
681
- if len(df_list) > 0:
684
+ if len(df_list) == 0:
685
+ return pd.DataFrame()
686
+ elif len(df_list) > 0:
682
687
  temp_df = pd.concat(df_list).reset_index(drop=True)
683
688
  temp_df = temp_df[~temp_df["symbol"].str.contains("efp")]
684
689
  return temp_df
690
+ else:
691
+ return pd.DataFrame()
685
692
 
686
693
 
687
694
  if __name__ == "__main__":
688
695
  get_futures_daily_df = get_futures_daily(
689
- start_date="20240506", end_date="20240510", market="SHFE"
696
+ start_date="20250708", end_date="20250708", market="DCE"
690
697
  )
691
698
  print(get_futures_daily_df)
692
699
 
693
- get_dce_daily_df = get_dce_daily(date="20230810")
700
+ get_dce_daily_df = get_dce_daily(date="20251029")
694
701
  print(get_dce_daily_df)
695
702
 
696
703
  get_cffex_daily_df = get_cffex_daily(date="20230810")
@@ -702,7 +709,7 @@ if __name__ == "__main__":
702
709
  get_czce_daily_df = get_czce_daily(date="20210513")
703
710
  print(get_czce_daily_df)
704
711
 
705
- get_shfe_daily_df = get_shfe_daily(date="20210517")
712
+ get_shfe_daily_df = get_shfe_daily(date="20250630")
706
713
  print(get_shfe_daily_df)
707
714
 
708
715
  get_gfex_daily_df = get_gfex_daily(date="20221228")
@@ -1,30 +1,36 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/1/19 23:10
4
+ Date: 2025/3/5 18:00
5
5
  Desc: 外盘期货-历史行情数据-日频率
6
6
  https://finance.sina.com.cn/money/future/hf.html
7
7
  """
8
+
8
9
  from datetime import datetime
9
10
  from io import StringIO
10
11
 
11
12
  import pandas as pd
12
13
  import requests
13
14
 
14
- from akshare.futures.futures_hq_sina import futures_foreign_commodity_subscribe_exchange_symbol
15
+ from akshare.futures.futures_hq_sina import (
16
+ futures_foreign_commodity_subscribe_exchange_symbol,
17
+ )
15
18
 
16
19
 
17
20
  def futures_foreign_hist(symbol: str = "ZSD") -> pd.DataFrame:
18
21
  """
19
22
  外盘期货-历史行情数据-日频率
20
23
  https://finance.sina.com.cn/money/future/hf.html
21
- :param symbol: futures symbol, you can get it from futures_foreign_commodity_subscribe_exchange_symbol
24
+ :param symbol: 外盘期货代码, 可以通过 ak.futures_foreign_commodity_subscribe_exchange_symbol() 来获取所有品种代码
22
25
  :type symbol: str
23
- :return: historical data from 2010
26
+ :return: 历史行情数据-日频率
24
27
  :rtype: pandas.DataFrame
25
28
  """
26
- today = f'{datetime.today().year}_{datetime.today().month}_{datetime.today().day}'
27
- url = f"https://stock2.finance.sina.com.cn/futures/api/jsonp.php/var%20_S{today}=/GlobalFuturesService.getGlobalFuturesDailyKLine"
29
+ today = f"{datetime.today().year}_{datetime.today().month}_{datetime.today().day}"
30
+ url = (
31
+ f"https://stock2.finance.sina.com.cn/futures/api/jsonp.php/var%20_S{today}=/"
32
+ f"GlobalFuturesService.getGlobalFuturesDailyKLine"
33
+ )
28
34
  params = {
29
35
  "symbol": symbol,
30
36
  "_": today,
@@ -32,7 +38,7 @@ def futures_foreign_hist(symbol: str = "ZSD") -> pd.DataFrame:
32
38
  }
33
39
  r = requests.get(url, params=params)
34
40
  data_text = r.text
35
- data_df = pd.read_json(StringIO(data_text[data_text.find("["):-2]))
41
+ data_df = pd.read_json(StringIO(data_text[data_text.find("[") : -2]))
36
42
  return data_df
37
43
 
38
44
 
@@ -52,7 +58,7 @@ def futures_foreign_detail(symbol: str = "ZSD") -> pd.DataFrame:
52
58
  return data_df
53
59
 
54
60
 
55
- if __name__ == '__main__':
61
+ if __name__ == "__main__":
56
62
  futures_foreign_hist_df = futures_foreign_hist(symbol="ZSD")
57
63
  print(futures_foreign_hist_df)
58
64
 
@@ -1,11 +1,13 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/1/18 17:40
4
+ Date: 2025/3/9 22:00
5
5
  Desc: 东方财富网-行情中心-期货市场-国际期货
6
6
  https://quote.eastmoney.com/center/gridlist.html#futures_global
7
7
  """
8
+
8
9
  import math
10
+ from typing import Optional
9
11
 
10
12
  import pandas as pd
11
13
  import requests
@@ -13,7 +15,76 @@ import requests
13
15
  from akshare.utils.tqdm import get_tqdm
14
16
 
15
17
 
16
- def futures_global_em():
18
+ def __futures_global_hist_market_code(symbol: str = "HG00Y") -> Optional[int]:
19
+ """
20
+ 东方财富网-行情中心-期货市场-国际期货-品种市场对照表
21
+ https://quote.eastmoney.com/center/gridlist.html#futures_global
22
+ :param symbol: HG00Y, 品种代码;可以通过 ak.futures_global_spot_em() 来获取所有可获取历史行情数据的品种代码
23
+ :type symbol: str
24
+ :return: 品种所属于的市场
25
+ :rtype: str
26
+ """
27
+ # 提取品种代码(去掉年份和月份部分)
28
+ base_symbol = ""
29
+ i = 0
30
+ while i < len(symbol) and not symbol[i].isdigit():
31
+ base_symbol += symbol[i]
32
+ i += 1
33
+ # 如果代码中没有数字(异常情况),则返回整个代码作为基础品种代码
34
+ if not base_symbol and i == len(symbol):
35
+ base_symbol = symbol
36
+ # 金属和贵金属品种 - 101
37
+ if base_symbol in ["HG", "GC", "SI", "QI", "QO", "MGC", "LTH"]:
38
+ return 101
39
+ # 能源品种 - 102
40
+ if base_symbol in ["CL", "NG", "RB", "HO", "PA", "PL", "QM"]:
41
+ return 102
42
+ # 农产品和金融品种 - 103
43
+ if base_symbol in [
44
+ "ZW",
45
+ "ZM",
46
+ "ZS",
47
+ "ZC",
48
+ "XC",
49
+ "XK",
50
+ "XW",
51
+ "YM",
52
+ "TY",
53
+ "US",
54
+ "EH",
55
+ "ZL",
56
+ "ZR",
57
+ "ZO",
58
+ "FV",
59
+ "TU",
60
+ "UL",
61
+ "NQ",
62
+ "ES",
63
+ ]:
64
+ return 103
65
+ # 中国市场特有品种 - 104
66
+ if base_symbol in ["TF", "RT", "CN"]:
67
+ return 104
68
+ # 软商品期货 - 108
69
+ if base_symbol in ["SB", "CT", "SF"]:
70
+ return 108
71
+ # 特殊L开头品种 - 109
72
+ if base_symbol in ["LCPT", "LZNT", "LALT", "LTNT", "LLDT", "LNKT"]:
73
+ return 109
74
+ # MPM开头品种 - 110
75
+ if base_symbol == "MPM":
76
+ return 110
77
+ # 日本市场品种 - 111
78
+ if base_symbol.startswith("J"):
79
+ return 111
80
+ # 单字母代码品种 - 112
81
+ if base_symbol in ["M", "B", "G"]:
82
+ return 112
83
+ # 如果没有匹配到任何规则,返回一个默认值或者错误
84
+ return None
85
+
86
+
87
+ def futures_global_spot_em() -> pd.DataFrame:
17
88
  """
18
89
  东方财富网-行情中心-期货市场-国际期货
19
90
  https://quote.eastmoney.com/center/gridlist.html#futures_global
@@ -22,77 +93,160 @@ def futures_global_em():
22
93
  """
23
94
  url = "https://futsseapi.eastmoney.com/list/COMEX,NYMEX,COBOT,SGX,NYBOT,LME,MDEX,TOCOM,IPE"
24
95
  params = {
25
- 'orderBy': 'zdf',
26
- 'sort': 'desc',
27
- 'pageSize': '20',
28
- 'pageIndex': '0',
29
- 'token': '58b2fa8f54638b60b87d69b31969089c',
30
- 'field': 'dm,sc,name,p,zsjd,zde,zdf,f152,o,h,l,zjsj,vol,wp,np,ccl',
31
- 'blockName': 'callback',
32
- '_': '1705570814466'
96
+ "orderBy": "dm",
97
+ "sort": "desc",
98
+ "pageSize": "20",
99
+ "pageIndex": "0",
100
+ "token": "58b2fa8f54638b60b87d69b31969089c",
101
+ "field": "dm,sc,name,p,zsjd,zde,zdf,f152,o,h,l,zjsj,vol,wp,np,ccl",
102
+ "blockName": "callback",
33
103
  }
34
104
  r = requests.get(url, params=params)
35
105
  data_json = r.json()
36
- total_num = data_json['total']
106
+ total_num = data_json["total"]
37
107
  total_page = math.ceil(total_num / 20) - 1
38
108
  tqdm = get_tqdm()
39
109
  big_df = pd.DataFrame()
40
110
  for page in tqdm(range(total_page), leave=False):
41
- params.update({'pageIndex': page})
111
+ params.update({"pageIndex": page})
42
112
  r = requests.get(url, params=params)
43
113
  data_json = r.json()
44
- temp_df = pd.DataFrame(data_json['list'])
45
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
114
+ temp_df = pd.DataFrame(data_json["list"])
115
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
46
116
  big_df.reset_index(inplace=True)
47
- big_df['index'] = big_df['index'] + 1
48
- big_df.rename(columns={
49
- 'index': "序号",
50
- 'np': "卖盘",
51
- 'h': "最新价",
52
- 'dm': "代码",
53
- 'zsjd': "-",
54
- 'l': "最低",
55
- 'ccl': "持仓量",
56
- 'o': "今开",
57
- 'p': "最高",
58
- 'sc': "-",
59
- 'vol': "成交量",
60
- 'name': "名称",
61
- 'wp': "买盘",
62
- 'zde': "涨跌额",
63
- 'zdf': "涨跌幅",
64
- 'zjsj': "昨结"
65
- }, inplace=True)
66
- big_df = big_df[[
67
- "序号",
68
- "代码",
69
- "名称",
117
+ big_df["index"] = big_df["index"] + 1
118
+ big_df.rename(
119
+ columns={
120
+ "index": "序号",
121
+ "np": "卖盘",
122
+ "h": "最高",
123
+ "dm": "代码",
124
+ "zsjd": "-",
125
+ "l": "最低",
126
+ "ccl": "持仓量",
127
+ "o": "今开",
128
+ "p": "最新价",
129
+ "sc": "-",
130
+ "vol": "成交量",
131
+ "name": "名称",
132
+ "wp": "买盘",
133
+ "zde": "涨跌额",
134
+ "zdf": "涨跌幅",
135
+ "zjsj": "昨结",
136
+ },
137
+ inplace=True,
138
+ )
139
+ big_df = big_df[
140
+ [
141
+ "序号",
142
+ "代码",
143
+ "名称",
144
+ "最新价",
145
+ "涨跌额",
146
+ "涨跌幅",
147
+ "今开",
148
+ "最高",
149
+ "最低",
150
+ "昨结",
151
+ "成交量",
152
+ "买盘",
153
+ "卖盘",
154
+ "持仓量",
155
+ ]
156
+ ]
157
+ big_df["最新价"] = pd.to_numeric(big_df["最新价"], errors="coerce")
158
+ big_df["涨跌额"] = pd.to_numeric(big_df["涨跌额"], errors="coerce")
159
+ big_df["涨跌幅"] = pd.to_numeric(big_df["涨跌幅"], errors="coerce")
160
+ big_df["今开"] = pd.to_numeric(big_df["今开"], errors="coerce")
161
+ big_df["最高"] = pd.to_numeric(big_df["最高"], errors="coerce")
162
+ big_df["最低"] = pd.to_numeric(big_df["最低"], errors="coerce")
163
+ big_df["昨结"] = pd.to_numeric(big_df["昨结"], errors="coerce")
164
+ big_df["成交量"] = pd.to_numeric(big_df["成交量"], errors="coerce")
165
+ big_df["买盘"] = pd.to_numeric(big_df["买盘"], errors="coerce")
166
+ big_df["卖盘"] = pd.to_numeric(big_df["卖盘"], errors="coerce")
167
+ big_df["持仓量"] = pd.to_numeric(big_df["持仓量"], errors="coerce")
168
+ return big_df
169
+
170
+
171
+ def futures_global_hist_em(symbol: str = "HG00Y") -> pd.DataFrame:
172
+ """
173
+ 东方财富网-行情中心-期货市场-国际期货-历史行情数据
174
+ https://quote.eastmoney.com/globalfuture/HG25J.html
175
+ :param symbol: 品种代码;可以通过 ak.futures_global_spot_em() 来获取所有可获取历史行情数据的品种代码
176
+ :type symbol: str
177
+ :return: 历史行情数据
178
+ :rtype: pandas.DataFrame
179
+ """
180
+ url = "https://push2his.eastmoney.com/api/qt/stock/kline/get"
181
+ market_code = __futures_global_hist_market_code(symbol)
182
+ params = {
183
+ "secid": f"{market_code}.{symbol}",
184
+ "klt": "101",
185
+ "fqt": "1",
186
+ "lmt": "6600",
187
+ "end": "20500000",
188
+ "iscca": "1",
189
+ "fields1": "f1,f2,f3,f4,f5,f6,f7,f8",
190
+ "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64",
191
+ "ut": "f057cbcbce2a86e2866ab8877db1d059",
192
+ "forcect": "1",
193
+ }
194
+ r = requests.get(url, params=params)
195
+ data_json = r.json()
196
+ temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["klines"]])
197
+ temp_df["code"] = data_json["data"]["code"]
198
+ temp_df["name"] = data_json["data"]["name"]
199
+ temp_df.columns = [
200
+ "日期",
201
+ "开盘",
70
202
  "最新价",
71
- "涨跌额",
72
- "涨跌幅",
73
- "今开",
74
203
  "最高",
75
204
  "最低",
76
- "昨结",
77
- "成交量",
78
- "买盘",
79
- "卖盘",
80
- "持仓量",
81
- ]]
82
- big_df['最新价'] = pd.to_numeric(big_df['最新价'], errors="coerce")
83
- big_df['涨跌额'] = pd.to_numeric(big_df['涨跌额'], errors="coerce")
84
- big_df['涨跌幅'] = pd.to_numeric(big_df['涨跌幅'], errors="coerce")
85
- big_df['今开'] = pd.to_numeric(big_df['今开'], errors="coerce")
86
- big_df['最高'] = pd.to_numeric(big_df['最高'], errors="coerce")
87
- big_df['最低'] = pd.to_numeric(big_df['最低'], errors="coerce")
88
- big_df['昨结'] = pd.to_numeric(big_df['昨结'], errors="coerce")
89
- big_df['成交量'] = pd.to_numeric(big_df['成交量'], errors="coerce")
90
- big_df['买盘'] = pd.to_numeric(big_df['买盘'], errors="coerce")
91
- big_df['卖盘'] = pd.to_numeric(big_df['卖盘'], errors="coerce")
92
- big_df['持仓量'] = pd.to_numeric(big_df['持仓量'], errors="coerce")
93
- return big_df
205
+ "总量",
206
+ "-",
207
+ "-",
208
+ "涨幅",
209
+ "-",
210
+ "-",
211
+ "-",
212
+ "持仓",
213
+ "日增",
214
+ "代码",
215
+ "名称",
216
+ ]
217
+ temp_df = temp_df[
218
+ [
219
+ "日期",
220
+ "代码",
221
+ "名称",
222
+ "开盘",
223
+ "最新价",
224
+ "最高",
225
+ "最低",
226
+ "总量",
227
+ "涨幅",
228
+ "持仓",
229
+ "日增",
230
+ ]
231
+ ]
232
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
233
+ temp_df["开盘"] = pd.to_numeric(temp_df["开盘"], errors="coerce")
234
+ temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
235
+ temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
236
+ temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
237
+ temp_df["总量"] = pd.to_numeric(temp_df["总量"], errors="coerce")
238
+ temp_df["涨幅"] = pd.to_numeric(temp_df["涨幅"], errors="coerce")
239
+ temp_df["日增"] = pd.to_numeric(temp_df["日增"], errors="coerce")
240
+ # 日增修复为有符号32位整数值
241
+ unsigned_max, signed_max = (2 ** 32) - 1, (2 ** 31) - 1
242
+ mask = temp_df["日增"] > signed_max
243
+ temp_df.loc[mask, "日增"] = temp_df.loc[mask, "日增"] - (unsigned_max + 1)
244
+ return temp_df
245
+
94
246
 
247
+ if __name__ == "__main__":
248
+ futures_global_spot_em_df = futures_global_spot_em()
249
+ print(futures_global_spot_em_df)
95
250
 
96
- if __name__ == '__main__':
97
- futures_global_em_df = futures_global_em()
98
- print(futures_global_em_df)
251
+ futures_global_hist_em_df = futures_global_hist_em(symbol="HG00Y")
252
+ print(futures_global_hist_em_df)