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,16 +1,17 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/2/28 23:00
4
+ Date: 2024/6/18 18:30
5
5
  Desc: 新浪财经-债券-沪深债券-实时行情数据和历史行情数据
6
6
  https://vip.stock.finance.sina.com.cn/mkt/#hs_z
7
7
  """
8
+
8
9
  import datetime
9
10
  import re
10
11
 
11
12
  import pandas as pd
12
13
  import requests
13
- from py_mini_racer import py_mini_racer
14
+ import py_mini_racer
14
15
 
15
16
  from akshare.bond.cons import (
16
17
  zh_sina_bond_hs_count_url,
@@ -41,67 +42,76 @@ def get_zh_bond_hs_page_count() -> int:
41
42
  return int(page_count) + 1
42
43
 
43
44
 
44
- def bond_zh_hs_spot() -> pd.DataFrame:
45
+ def bond_zh_hs_spot(start_page: str = "1", end_page: str = "10") -> pd.DataFrame:
45
46
  """
46
47
  新浪财经-债券-沪深债券-实时行情数据, 大量抓取容易封IP
47
48
  https://vip.stock.finance.sina.com.cn/mkt/#hs_z
49
+ :param start_page: 分页起始页
50
+ :type start_page: str
51
+ :param end_page: 分页结束页
52
+ :type end_page: str
48
53
  :return: 所有沪深债券在当前时刻的实时行情数据
49
54
  :rtype: pandas.DataFrame
50
55
  """
51
56
  page_count = get_zh_bond_hs_page_count()
57
+ page_count = int(page_count)
52
58
  zh_sina_bond_hs_payload_copy = zh_sina_bond_hs_payload.copy()
53
59
  tqdm = get_tqdm()
54
60
  big_df = pd.DataFrame()
55
- for page in tqdm(range(1, page_count + 1), leave=False):
61
+ start_page = int(start_page)
62
+ end_page = int(end_page) + 1 if int(end_page) + 1 <= page_count else page_count
63
+ for page in tqdm(range(start_page, end_page), leave=False):
56
64
  zh_sina_bond_hs_payload_copy.update({"page": page})
57
65
  r = requests.get(zh_sina_bond_hs_url, params=zh_sina_bond_hs_payload_copy)
58
66
  data_json = demjson.decode(r.text)
59
67
  temp_df = pd.DataFrame(data_json)
60
68
  big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
61
69
  big_df.columns = [
62
- '代码',
63
- '-',
64
- '名称',
65
- '最新价',
66
- '涨跌额',
67
- '涨跌幅',
68
- '买入',
69
- '卖出',
70
- '昨收',
71
- '今开',
72
- '最高',
73
- '最低',
74
- '成交量',
75
- '成交额',
76
- '-',
77
- '-',
78
- '-',
79
- '-',
80
- '-',
81
- '-',
70
+ "代码",
71
+ "-",
72
+ "名称",
73
+ "最新价",
74
+ "涨跌额",
75
+ "涨跌幅",
76
+ "买入",
77
+ "卖出",
78
+ "昨收",
79
+ "今开",
80
+ "最高",
81
+ "最低",
82
+ "成交量",
83
+ "成交额",
84
+ "-",
85
+ "-",
86
+ "-",
87
+ "-",
88
+ "-",
89
+ "-",
90
+ ]
91
+ big_df = big_df[
92
+ [
93
+ "代码",
94
+ "名称",
95
+ "最新价",
96
+ "涨跌额",
97
+ "涨跌幅",
98
+ "买入",
99
+ "卖出",
100
+ "昨收",
101
+ "今开",
102
+ "最高",
103
+ "最低",
104
+ "成交量",
105
+ "成交额",
106
+ ]
82
107
  ]
83
- big_df = big_df[[
84
- '代码',
85
- '名称',
86
- '最新价',
87
- '涨跌额',
88
- '涨跌幅',
89
- '买入',
90
- '卖出',
91
- '昨收',
92
- '今开',
93
- '最高',
94
- '最低',
95
- '成交量',
96
- '成交额',
97
- ]]
98
- big_df['买入'] = pd.to_numeric(big_df['买入'], errors="coerce")
99
- big_df['卖出'] = pd.to_numeric(big_df['卖出'], errors="coerce")
100
- big_df['昨收'] = pd.to_numeric(big_df['昨收'], errors="coerce")
101
- big_df['今开'] = pd.to_numeric(big_df['今开'], errors="coerce")
102
- big_df['最高'] = pd.to_numeric(big_df['最高'], errors="coerce")
103
- big_df['最低'] = pd.to_numeric(big_df['最低'], errors="coerce")
104
- big_df['最新价'] = pd.to_numeric(big_df['最新价'], errors="coerce")
108
+ big_df["买入"] = pd.to_numeric(big_df["买入"], errors="coerce")
109
+ big_df["卖出"] = pd.to_numeric(big_df["卖出"], errors="coerce")
110
+ big_df["昨收"] = pd.to_numeric(big_df["昨收"], errors="coerce")
111
+ big_df["今开"] = pd.to_numeric(big_df["今开"], errors="coerce")
112
+ big_df["最高"] = pd.to_numeric(big_df["最高"], errors="coerce")
113
+ big_df["最低"] = pd.to_numeric(big_df["最低"], errors="coerce")
114
+ big_df["最新价"] = pd.to_numeric(big_df["最新价"], errors="coerce")
105
115
  return big_df
106
116
 
107
117
 
@@ -126,15 +136,15 @@ def bond_zh_hs_daily(symbol: str = "sh010107") -> pd.DataFrame:
126
136
  ) # 执行 js 解密代码
127
137
  data_df = pd.DataFrame(dict_list)
128
138
  data_df["date"] = pd.to_datetime(data_df["date"], errors="coerce").dt.date
129
- data_df['open'] = pd.to_numeric(data_df['open'], errors="coerce")
130
- data_df['high'] = pd.to_numeric(data_df['high'], errors="coerce")
131
- data_df['low'] = pd.to_numeric(data_df['low'], errors="coerce")
132
- data_df['close'] = pd.to_numeric(data_df['close'], errors="coerce")
139
+ data_df["open"] = pd.to_numeric(data_df["open"], errors="coerce")
140
+ data_df["high"] = pd.to_numeric(data_df["high"], errors="coerce")
141
+ data_df["low"] = pd.to_numeric(data_df["low"], errors="coerce")
142
+ data_df["close"] = pd.to_numeric(data_df["close"], errors="coerce")
133
143
  return data_df
134
144
 
135
145
 
136
146
  if __name__ == "__main__":
137
- bond_zh_hs_spot_df = bond_zh_hs_spot()
147
+ bond_zh_hs_spot_df = bond_zh_hs_spot(start_page="1", end_page="5")
138
148
  print(bond_zh_hs_spot_df)
139
149
 
140
150
  bond_zh_hs_daily_df = bond_zh_hs_daily(symbol="sh010107")
akshare/bond/cons.py CHANGED
@@ -4,35 +4,40 @@
4
4
  Date: 2019/10/20 10:21
5
5
  Desc: 债券配置文件
6
6
  """
7
+
7
8
  # bond-cov-sina
8
9
  zh_sina_bond_hs_cov_url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeDataSimple"
9
10
  zh_sina_bond_hs_cov_count_url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCountSimple"
10
- zh_sina_bond_hs_cov_hist_url = "https://finance.sina.com.cn/realstock/company/{}/hisdata/klc_kl.js?d={}"
11
+ zh_sina_bond_hs_cov_hist_url = (
12
+ "https://finance.sina.com.cn/realstock/company/{}/hisdata/klc_kl.js?d={}"
13
+ )
11
14
  zh_sina_bond_hs_cov_payload = {
12
15
  "page": "1",
13
16
  "num": "80",
14
17
  "sort": "symbol",
15
18
  "asc": "1",
16
19
  "node": "hskzz_z",
17
- "_s_r_a": "page"
20
+ "_s_r_a": "page",
18
21
  }
19
22
 
20
23
  # bond-sina
21
24
  zh_sina_bond_hs_url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData"
22
25
  zh_sina_bond_hs_count_url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCountSimple"
23
- zh_sina_bond_hs_hist_url = "https://finance.sina.com.cn/realstock/company/{}/hisdata/klc_kl.js?d={}"
26
+ zh_sina_bond_hs_hist_url = (
27
+ "https://finance.sina.com.cn/realstock/company/{}/hisdata/klc_kl.js?d={}"
28
+ )
24
29
  zh_sina_bond_hs_payload = {
25
30
  "page": "1",
26
31
  "num": "80",
27
32
  "sort": "symbol",
28
33
  "asc": "1",
29
34
  "node": "hs_z",
30
- "_s_r_a": "page"
35
+ "_s_r_a": "page",
31
36
  }
32
37
 
33
38
  # headers
34
39
  SHORT_HEADERS = {
35
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36'
40
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36"
36
41
  }
37
42
 
38
43
  # quote
@@ -45,9 +50,7 @@ MARKET_QUOTE_PAYLOAD = {
45
50
  }
46
51
 
47
52
  # trade
48
- MARKET_TRADE_URL = "http://www.chinamoney.com.cn/ags/ms/cm-u-md-bond/CbtPri?lang=cn&flag=1&bondName="
49
- MARKET_TRADE_PAYLOAD = {
50
- "lang": "cn",
51
- "flag": "1",
52
- "bondName": ""
53
- }
53
+ MARKET_TRADE_URL = (
54
+ "http://www.chinamoney.com.cn/ags/ms/cm-u-md-bond/CbtPri?lang=cn&flag=1&bondName="
55
+ )
56
+ MARKET_TRADE_PAYLOAD = {"lang": "cn", "flag": "1", "bondName": ""}
File without changes
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
 
@@ -1,10 +1,11 @@
1
1
  # -*- coding:utf-8 -*-
2
2
  # !/usr/bin/env python
3
3
  """
4
- Date: 2023/9/17 17:08
4
+ Date: 2024/4/29 17:00
5
5
  Desc: 人民币汇率中间价
6
6
  https://www.safe.gov.cn/safe/rmbhlzjj/index.html
7
7
  """
8
+
8
9
  import re
9
10
  from datetime import datetime
10
11
  from io import StringIO
@@ -24,11 +25,11 @@ def currency_boc_safe() -> pd.DataFrame:
24
25
  url = "https://www.safe.gov.cn/safe/2020/1218/17833.html"
25
26
  r = requests.get(url)
26
27
  r.encoding = "utf8"
27
- soup = BeautifulSoup(r.text, "lxml")
28
- content = soup.find("a", string=re.compile("人民币汇率"))["href"]
28
+ soup = BeautifulSoup(r.text, features="lxml")
29
+ content = soup.find(name="a", string=re.compile("人民币汇率"))["href"]
29
30
  url = f"https://www.safe.gov.cn{content}"
30
31
  temp_df = pd.read_excel(url)
31
- temp_df.sort_values(["日期"], inplace=True)
32
+ temp_df.sort_values(by=["日期"], inplace=True)
32
33
  temp_df.reset_index(inplace=True, drop=True)
33
34
  start_date = (
34
35
  (pd.Timestamp(temp_df["日期"].tolist()[-1]) + pd.Timedelta(days=1))
@@ -44,9 +45,9 @@ def currency_boc_safe() -> pd.DataFrame:
44
45
  }
45
46
  r = requests.post(url, data=payload)
46
47
  current_temp_df = pd.read_html(StringIO(r.text))[-1]
47
- current_temp_df.sort_values(["日期"], inplace=True)
48
+ current_temp_df.sort_values(by=["日期"], inplace=True)
48
49
  current_temp_df.reset_index(inplace=True, drop=True)
49
- big_df = pd.concat([temp_df, current_temp_df], ignore_index=True)
50
+ big_df = pd.concat(objs=[temp_df, current_temp_df], ignore_index=True)
50
51
  column_name_list = big_df.columns[1:]
51
52
  for item in column_name_list:
52
53
  big_df[item] = pd.to_numeric(big_df[item], errors="coerce")
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
+ }