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
akshare/cal/rv.py ADDED
@@ -0,0 +1,170 @@
1
+ """
2
+ Yang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python
3
+ https://github.com/hugogobato/Yang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python
4
+ 论文地址:https://www.jstor.org/stable/10.1086/209650
5
+ """
6
+
7
+ import warnings
8
+
9
+ import numpy as np
10
+ import pandas as pd
11
+
12
+
13
+ def rv_from_stock_zh_a_hist_min_em(
14
+ symbol="000001",
15
+ start_date="2021-10-20 09:30:00",
16
+ end_date="2024-11-01 15:00:00",
17
+ period="1",
18
+ adjust="hfq",
19
+ ) -> pd.DataFrame:
20
+ """
21
+ 从东方财富网获取股票的分钟级历史行情数据,并进行数据清洗和格式化为计算 yz 已实现波动率所需的数据格式
22
+ https://quote.eastmoney.com/concept/sh603777.html?from=classic
23
+ :param symbol: 股票代码,如"000001"
24
+ :type symbol: str
25
+ :param start_date: 开始日期时间,格式"YYYY-MM-DD HH:MM:SS"
26
+ :type start_date: str
27
+ :param end_date: 结束日期时间,格式"YYYY-MM-DD HH:MM:SS"
28
+ :type end_date: str
29
+ :param period: 时间周期,可选{'1','5','15','30','60'}分钟
30
+ :type period: str
31
+ :param adjust: 复权方式,可选{'','qfq'(前复权),'hfq'(后复权)}
32
+ :type adjust: str
33
+ :return: 整理后的分钟行情数据,包含Date(索引),Open,High,Low,Close列
34
+ :rtype: pandas.DataFrame
35
+ """
36
+ from akshare.stock_feature.stock_hist_em import stock_zh_a_hist_min_em
37
+
38
+ temp_df = stock_zh_a_hist_min_em(
39
+ symbol=symbol,
40
+ start_date=start_date,
41
+ end_date=end_date,
42
+ period=period,
43
+ adjust=adjust,
44
+ )
45
+ temp_df.rename(
46
+ columns={
47
+ "时间": "Date",
48
+ "开盘": "Open",
49
+ "最高": "High",
50
+ "最低": "Low",
51
+ "收盘": "Close",
52
+ },
53
+ inplace=True,
54
+ )
55
+ temp_df = temp_df[temp_df["Open"] != 0]
56
+ temp_df["Date"] = pd.to_datetime(temp_df["Date"])
57
+ temp_df.set_index(keys="Date", inplace=True)
58
+ return temp_df
59
+
60
+
61
+ def rv_from_futures_zh_minute_sina(
62
+ symbol: str = "IF2008", period: str = "5"
63
+ ) -> pd.DataFrame:
64
+ """
65
+ 从新浪财经获取期货的分钟级历史行情数据,并进行数据清洗和格式化
66
+ https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_3
67
+ :param symbol: 期货合约代码,如"IF2008"代表沪深300期货2020年8月合约
68
+ :type symbol: str
69
+ :param period: 时间周期,可选{'1','5','15','30','60'}分钟
70
+ :type period: str
71
+ :return: 整理后的分钟行情数据,包含Date(索引),Open,High,Low,Close列
72
+ :rtype: pandas.DataFrame
73
+ """
74
+ from akshare.futures.futures_zh_sina import futures_zh_minute_sina
75
+
76
+ temp_df = futures_zh_minute_sina(symbol=symbol, period=period)
77
+ temp_df.rename(
78
+ columns={
79
+ "datetime": "Date",
80
+ "open": "Open",
81
+ "high": "High",
82
+ "low": "Low",
83
+ "close": "Close",
84
+ },
85
+ inplace=True,
86
+ )
87
+ temp_df["Date"] = pd.to_datetime(temp_df["Date"])
88
+ temp_df.set_index(keys="Date", inplace=True)
89
+ return temp_df
90
+
91
+
92
+ def volatility_yz_rv(data: pd.DataFrame) -> pd.DataFrame:
93
+ """
94
+ 波动率-已实现波动率-Yang-Zhang 已实现波动率(Yang-Zhang Realized Volatility)
95
+ https://github.com/hugogobato/Yang-Zhang-s-Realized-Volatility-Automated-Estimation-in-Python
96
+ 论文地址:https://www.jstor.org/stable/10.1086/209650
97
+ 基于以下公式计算:
98
+ RV^2 = Vo + k*Vc + (1-k)*Vrs
99
+ 其中:
100
+ - Vo: 隔夜波动率, Vo = 1/(n-1)*sum(Oi-Obar)^2
101
+ Oi为标准化开盘价, Obar为标准化开盘价均值
102
+ - Vc: 收盘波动率, Vc = 1/(n-1)*sum(ci-Cbar)^2
103
+ ci为标准化收盘价, Cbar为标准化收盘价均值
104
+ - k: 权重系数, k = 0.34/(1.34+(n+1)/(n-1))
105
+ n为样本数量
106
+ - Vrs: Rogers-Satchell波动率代理, Vrs = ui(ui-ci)+di(di-ci)
107
+ ui = ln(Hi/Oi), ci = ln(Ci/Oi), di = ln(Li/Oi), oi = ln(Oi/Ci-1)
108
+ Hi/Li/Ci/Oi分别为最高价/最低价/收盘价/开盘价
109
+
110
+ :param data: 包含 OHLC(开高低收) 价格的 pandas.DataFrame
111
+ :type data: pandas.DataFrame
112
+ :return: 包含 Yang-Zhang 实现波动率的 pandas.DataFrame
113
+ :rtype: pandas.DataFrame
114
+
115
+ 要求输入数据包含以下列:
116
+ - Open: 开盘价
117
+ - High: 最高价
118
+ - Low: 最低价
119
+ - Close: 收盘价
120
+ # yang_zhang_rv formula is give as:
121
+ # RV^2 = Vo + k*Vc + (1-k)*Vrs
122
+ # where Vo = 1/(n-1)*sum(Oi-Obar)^2
123
+ # with oi = normalized opening price at time t and Obar = mean of normalized opening prices
124
+ # Vc = = 1/(n-1)*sum(ci-Cbar)^2
125
+ # with ci = normalized close price at time t and Cbar = mean of normalized close prices
126
+ # k = 0.34/(1.34+(n+1)/(n-1))
127
+ # with n = total number of days or time periods considered
128
+ # Vrs (Rogers & Satchell RV proxy) = ui(ui-ci)+di(di-ci)
129
+ # with ui = ln(Hi/Oi), ci = ln(Ci/Oi), di=(Li/Oi), oi = ln(Oi/Ci-1)
130
+ # where Hi = high price at time t and Li = low price at time t
131
+ """ ""
132
+ warnings.filterwarnings("ignore")
133
+
134
+ data["ui"] = np.log(np.divide(data["High"][1:], data["Open"][1:]))
135
+ data["ci"] = np.log(np.divide(data["Close"][1:], data["Open"][1:]))
136
+ data["di"] = np.log(np.divide(data["Low"][1:], data["Open"][1:]))
137
+ data["oi"] = np.log(np.divide(data["Open"][1:], data["Close"][: len(data) - 1]))
138
+ data = data[1:]
139
+ data["RS"] = data["ui"] * (data["ui"] - data["ci"]) + data["di"] * (
140
+ data["di"] - data["ci"]
141
+ )
142
+ rs_var = data["RS"].groupby(pd.Grouper(freq="1D")).mean().dropna()
143
+ vc_and_vo = data[["oi", "ci"]].groupby(pd.Grouper(freq="1D")).var().dropna()
144
+ n = int(len(data) / len(rs_var))
145
+ k = 0.34 / (1.34 + (n + 1) / (n - 1))
146
+ yang_zhang_rv = np.sqrt((1 - k) * rs_var + vc_and_vo["oi"] + vc_and_vo["ci"] * k)
147
+ yang_zhang_rv_df = pd.DataFrame(yang_zhang_rv)
148
+ yang_zhang_rv_df.rename(columns={0: "yz_rv"}, inplace=True)
149
+ yang_zhang_rv_df.reset_index(inplace=True)
150
+ yang_zhang_rv_df.columns = ["date", "rv"]
151
+ yang_zhang_rv_df["date"] = pd.to_datetime(
152
+ yang_zhang_rv_df["date"], errors="coerce"
153
+ ).dt.date
154
+ return yang_zhang_rv_df
155
+
156
+
157
+ if __name__ == "__main__":
158
+ futures_df = rv_from_futures_zh_minute_sina(symbol="IF2008", period="1")
159
+ volatility_yz_rv_df = volatility_yz_rv(data=futures_df)
160
+ print(volatility_yz_rv_df)
161
+
162
+ stock_df = rv_from_stock_zh_a_hist_min_em(
163
+ symbol="000001",
164
+ start_date="2021-10-20 09:30:00",
165
+ end_date="2024-11-01 15:00:00",
166
+ period="5",
167
+ adjust="",
168
+ )
169
+ volatility_yz_rv_df = volatility_yz_rv(data=stock_df)
170
+ print(volatility_yz_rv_df)
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/1/20 23:30
4
+ Date: 2024/8/28 15:20
5
5
  Desc: 世界各大城市生活成本数据
6
6
  https://expatistan.com/cost-of-living/index
7
7
  """
8
+
8
9
  from io import StringIO
9
10
 
10
11
  import pandas as pd
@@ -20,14 +21,14 @@ def _get_region() -> dict:
20
21
  """
21
22
  url = "https://www.expatistan.com/cost-of-living/index"
22
23
  r = requests.get(url)
23
- soup = BeautifulSoup(r.text, "lxml")
24
+ soup = BeautifulSoup(r.text, features="lxml")
24
25
  half_url_list = [
25
26
  item["href"]
26
- for item in soup.find("ul", attrs={"class": "regions"}).find_all("a")
27
+ for item in soup.find(name="ul", attrs={"class": "regions"}).find_all("a")
27
28
  ]
28
29
  name_list = [
29
30
  item["href"].split("/")[-1]
30
- for item in soup.find("ul", attrs={"class": "regions"}).find_all("a")
31
+ for item in soup.find(name="ul", attrs={"class": "regions"}).find_all("a")
31
32
  ]
32
33
  name_url_dict = dict(zip(name_list, half_url_list))
33
34
  name_url_dict["world"] = "/cost-of-living/index"
@@ -38,7 +39,8 @@ def cost_living(symbol: str = "world") -> pd.DataFrame:
38
39
  """
39
40
  国家或地区生活成本数据
40
41
  https://expatistan.com/cost-of-living/index
41
- :param symbol: choice of {"europe", "north-america", "latin-america", "asia", "middle-east", "africa", "oceania", "world"}
42
+ :param symbol: choice of {"europe", "north-america", "latin-america",
43
+ "asia", "middle-east", "africa", "oceania", "world"}
42
44
  :type symbol: str
43
45
  :return: 国家或地区生活成本数据
44
46
  :rtype: pandas.DataFrame
@@ -2,5 +2,5 @@
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
4
  Date: 2020/10/23 13:51
5
- Desc:
5
+ Desc:
6
6
  """
@@ -5,6 +5,7 @@ Date: 2023/9/5 15:41
5
5
  Desc: 芝加哥商业交易所-比特币成交量报告
6
6
  https://datacenter.jin10.com/reportType/dc_cme_btc_report
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -13,6 +14,8 @@ def crypto_bitcoin_cme(date: str = "20230830") -> pd.DataFrame:
13
14
  """
14
15
  芝加哥商业交易所-比特币成交量报告
15
16
  https://datacenter.jin10.com/reportType/dc_cme_btc_report
17
+ :param date: Specific date, e.g., "20230830"
18
+ :type date: str
16
19
  :return: 比特币成交量报告
17
20
  :rtype: pandas.DataFrame
18
21
  """
@@ -21,7 +24,6 @@ def crypto_bitcoin_cme(date: str = "20230830") -> pd.DataFrame:
21
24
  "category": "cme",
22
25
  "date": "-".join([date[:4], date[4:6], date[6:]]),
23
26
  "attr_id": "4",
24
- "_": "1624354777843",
25
27
  }
26
28
  headers = {
27
29
  "accept": "*/*",
@@ -47,12 +49,12 @@ def crypto_bitcoin_cme(date: str = "20230830") -> pd.DataFrame:
47
49
  [item for item in data_json["data"]["values"]],
48
50
  columns=[item["name"] for item in data_json["data"]["keys"]],
49
51
  )
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")
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
+ temp_df["持仓变化"] = pd.to_numeric(temp_df["持仓变化"], errors="coerce")
56
58
  return temp_df
57
59
 
58
60
 
@@ -5,6 +5,7 @@ Date: 2023/8/31 23:00
5
5
  Desc: 金十数据-比特币持仓报告
6
6
  https://datacenter.jin10.com/dc_report?name=bitcoint
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -22,7 +23,6 @@ def crypto_bitcoin_hold_report():
22
23
  "X-Version": "1.0.0",
23
24
  }
24
25
  r = requests.get(url, headers=headers)
25
-
26
26
  data_json = r.json()
27
27
  temp_df = pd.DataFrame(data_json["data"]["values"])
28
28
  temp_df.columns = [
@@ -62,7 +62,9 @@ def crypto_bitcoin_hold_report():
62
62
  ]
63
63
  ]
64
64
  temp_df["市值"] = pd.to_numeric(temp_df["市值"], errors="coerce")
65
- temp_df["比特币占市值比重"] = pd.to_numeric(temp_df["比特币占市值比重"], errors="coerce")
65
+ temp_df["比特币占市值比重"] = pd.to_numeric(
66
+ temp_df["比特币占市值比重"], errors="coerce"
67
+ )
66
68
  temp_df["持仓成本"] = pd.to_numeric(temp_df["持仓成本"], errors="coerce")
67
69
  temp_df["持仓占比"] = pd.to_numeric(temp_df["持仓占比"], errors="coerce")
68
70
  temp_df["持仓量"] = pd.to_numeric(temp_df["持仓量"], errors="coerce")
@@ -6,6 +6,7 @@ Desc: currencybeacon 提供的外汇数据
6
6
  该网站需要先注册后获取 API 使用
7
7
  https://currencyscoop.com/
8
8
  """
9
+
9
10
  import pandas as pd
10
11
  import requests
11
12
 
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/11/10 15:20
4
+ Date: 2025/12/8 17:20
5
5
  Desc: 新浪财经-中行人民币牌价历史数据查询
6
6
  https://biz.finance.sina.com.cn/forex/forex.php?startdate=2012-01-01&enddate=2021-06-14&money_code=EUR&type=0
7
7
  """
8
+
8
9
  from functools import lru_cache
9
10
  from io import StringIO
10
11
 
@@ -16,7 +17,7 @@ from tqdm import tqdm
16
17
 
17
18
  @lru_cache()
18
19
  def _currency_boc_sina_map(
19
- start_date: str = "20210614", end_date: str = "20230810"
20
+ start_date: str = "20210614", end_date: str = "20230810"
20
21
  ) -> dict:
21
22
  """
22
23
  外汇 symbol 和代码映射
@@ -54,7 +55,7 @@ def _currency_boc_sina_map(
54
55
 
55
56
 
56
57
  def currency_boc_sina(
57
- symbol: str = "美元", start_date: str = "20230304", end_date: str = "20231110"
58
+ symbol: str = "美元", start_date: str = "20230304", end_date: str = "20231110"
58
59
  ) -> pd.DataFrame:
59
60
  """
60
61
  新浪财经-中行人民币牌价历史数据查询
@@ -79,7 +80,7 @@ def currency_boc_sina(
79
80
  "call_type": "ajax",
80
81
  }
81
82
  r = requests.get(url, params=params)
82
- soup = BeautifulSoup(r.text, "lxml")
83
+ soup = BeautifulSoup(r.text, features="lxml")
83
84
  soup.find(attrs={"id": "money_code"})
84
85
  page_element_list = soup.find_all("a", attrs={"class": "page"})
85
86
  page_num = int(page_element_list[-2].text) if len(page_element_list) != 0 else 1
@@ -88,19 +89,23 @@ def currency_boc_sina(
88
89
  params.update({"page": page})
89
90
  r = requests.get(url, params=params)
90
91
  temp_df = pd.read_html(StringIO(r.text), header=0)[0]
91
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
92
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
92
93
  big_df.columns = [
93
94
  "日期",
94
95
  "中行汇买价",
95
96
  "中行钞买价",
96
97
  "中行钞卖价/汇卖价",
97
98
  "央行中间价",
99
+ "中行折算价",
98
100
  ]
99
101
  big_df["日期"] = pd.to_datetime(big_df["日期"], errors="coerce").dt.date
100
102
  big_df["中行汇买价"] = pd.to_numeric(big_df["中行汇买价"], errors="coerce")
101
103
  big_df["中行钞买价"] = pd.to_numeric(big_df["中行钞买价"], errors="coerce")
102
- big_df["中行钞卖价/汇卖价"] = pd.to_numeric(big_df["中行钞卖价/汇卖价"], errors="coerce")
104
+ big_df["中行钞卖价/汇卖价"] = pd.to_numeric(
105
+ big_df["中行钞卖价/汇卖价"], errors="coerce"
106
+ )
103
107
  big_df["央行中间价"] = pd.to_numeric(big_df["央行中间价"], errors="coerce")
108
+ big_df["中行折算价"] = pd.to_numeric(big_df["中行折算价"], errors="coerce")
104
109
  big_df.sort_values(by=["日期"], inplace=True, ignore_index=True)
105
110
  return big_df
106
111
 
akshare/data/__init__.py CHANGED
@@ -2,5 +2,5 @@
2
2
  # !/usr/bin/env python
3
3
  """
4
4
  Date: 2022/5/9 18:08
5
- Desc:
5
+ Desc:
6
6
  """
akshare/data/cninfo.js CHANGED
@@ -6013,4 +6013,4 @@ function new_my_decode(data) {
6013
6013
  }
6014
6014
  );
6015
6015
  return decrypted.toString(CryptoJS.enc.Utf8);
6016
- }
6016
+ }
akshare/datasets.py CHANGED
@@ -1,24 +1,19 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2023/9/24 16:08
4
+ Date: 2024/12/30 15:30
5
5
  Desc: 导入文件工具,可以正确处理路径问题
6
6
  """
7
+
7
8
  import pathlib
8
9
  from importlib import resources
9
10
 
10
11
 
11
12
  def get_ths_js(file: str = "ths.js") -> pathlib.Path:
12
- """Get path to data "ths.js" text file.
13
-
14
- Returns
15
- -------
16
- pathlib.PosixPath
17
- Path to file.
18
-
19
- References
20
- ----------
21
- .. [1] E.A.Abbott, ”Flatland”, Seeley & Co., 1884.
13
+ """
14
+ get path to data "ths.js" text file.
15
+ :return: 文件路径
16
+ :rtype: pathlib.Path
22
17
  """
23
18
  with resources.path("akshare.data", file) as f:
24
19
  data_file_path = f
@@ -26,16 +21,10 @@ def get_ths_js(file: str = "ths.js") -> pathlib.Path:
26
21
 
27
22
 
28
23
  def get_crypto_info_csv(file: str = "crypto_info.zip") -> pathlib.Path:
29
- """Get path to data "ths.js" text file.
30
-
31
- Returns
32
- -------
33
- pathlib.PosixPath
34
- Path to file.
35
-
36
- References
37
- ----------
38
- .. [1] E.A.Abbott, ”Flatland”, Seeley & Co., 1884.
24
+ """
25
+ get path to data "ths.js" text file.
26
+ :return: 文件路径
27
+ :rtype: pathlib.Path
39
28
  """
40
29
  with resources.path("akshare.data", file) as f:
41
30
  data_file_path = f
akshare/economic/cons.py CHANGED
@@ -4,6 +4,7 @@
4
4
  Date: 2019/10/21 21:11
5
5
  Desc: 宏观经济配置文件
6
6
  """
7
+
7
8
  # urls-china
8
9
  JS_CHINA_CPI_YEARLY_URL = (
9
10
  "https://cdn.jin10.com/dc/reports/dc_chinese_cpi_yoy_all.js?v={}&_={}"
@@ -24,7 +25,9 @@ JS_CHINA_GDP_YEARLY_URL = (
24
25
  "https://cdn.jin10.com/dc/reports/dc_chinese_gdp_yoy_all.js?v={}&_={}"
25
26
  )
26
27
  JS_CHINA_CX_PMI_YEARLY_URL = "https://cdn.jin10.com/dc/reports/dc_chinese_caixin_manufacturing_pmi_all.js?v={}&_={}"
27
- JS_CHINA_CX_SERVICE_PMI_YEARLY_URL = "https://cdn.jin10.com/dc/reports/dc_chinese_caixin_services_pmi_all.js?v={}&_={}"
28
+ JS_CHINA_CX_SERVICE_PMI_YEARLY_URL = (
29
+ "https://cdn.jin10.com/dc/reports/dc_chinese_caixin_services_pmi_all.js?v={}&_={}"
30
+ )
28
31
  JS_CHINA_FX_RESERVES_YEARLY_URL = (
29
32
  "https://cdn.jin10.com/dc/reports/dc_chinese_fx_reserves_all.js?v={}&_={}"
30
33
  )
@@ -35,8 +38,12 @@ JS_CHINA_NON_MAN_PMI_MONTHLY_URL = (
35
38
  "https://cdn.jin10.com/dc/reports/dc_chinese_non_manufacturing_pmi_all.js?v={}&_={}"
36
39
  )
37
40
  JS_CHINA_RMB_DAILY_URL = "https://cdn.jin10.com/dc/reports/dc_rmb_data_all.js?v={}&_={}"
38
- JS_CHINA_MARKET_MARGIN_SZ_URL = "https://cdn.jin10.com/dc/reports/dc_market_margin_sz_all.js?v={}&_={}"
39
- JS_CHINA_MARKET_MARGIN_SH_URL = "https://cdn.jin10.com/dc/reports/dc_market_margin_sse_all.js?v={}&_={}"
41
+ JS_CHINA_MARKET_MARGIN_SZ_URL = (
42
+ "https://cdn.jin10.com/dc/reports/dc_market_margin_sz_all.js?v={}&_={}"
43
+ )
44
+ JS_CHINA_MARKET_MARGIN_SH_URL = (
45
+ "https://cdn.jin10.com/dc/reports/dc_market_margin_sse_all.js?v={}&_={}"
46
+ )
40
47
  JS_CHINA_REPORT_URL = "https://cdn.jin10.com/dc/reports/dc_sge_report_all.js?v={}&_={}"
41
48
 
42
49
  # urls-usa