akshare 1.12.95__py3-none-any.whl → 1.15.72__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.

Potentially problematic release.


This version of akshare might be problematic. Click here for more details.

Files changed (240) hide show
  1. akshare/__init__.py +446 -139
  2. akshare/air/air_hebei.py +79 -53
  3. akshare/air/air_zhenqi.py +29 -43
  4. akshare/air/sunrise_tad.py +32 -17
  5. akshare/bank/bank_cbirc_2020.py +12 -9
  6. akshare/bond/bond_cb_ths.py +17 -9
  7. akshare/bond/bond_china.py +38 -39
  8. akshare/bond/bond_china_money.py +75 -48
  9. akshare/bond/bond_convert.py +40 -16
  10. akshare/bond/bond_info_cm.py +28 -8
  11. akshare/bond/bond_issue_cninfo.py +73 -30
  12. akshare/bond/{bond_zh_cov_sina.py → bond_zh_cov.py} +41 -17
  13. akshare/bond/bond_zh_sina.py +57 -51
  14. akshare/cal/__init__.py +0 -0
  15. akshare/cal/rv.py +170 -0
  16. akshare/cost/cost_living.py +7 -5
  17. akshare/currency/currency_safe.py +7 -6
  18. akshare/data/cninfo.js +15 -0
  19. akshare/datasets.py +10 -21
  20. akshare/economic/macro_bank.py +95 -653
  21. akshare/economic/macro_china.py +772 -1024
  22. akshare/economic/macro_china_hk.py +65 -243
  23. akshare/economic/macro_china_nbs.py +24 -7
  24. akshare/economic/macro_constitute.py +17 -12
  25. akshare/economic/macro_euro.py +13 -6
  26. akshare/economic/macro_finance_ths.py +133 -0
  27. akshare/economic/macro_info_ws.py +100 -0
  28. akshare/economic/macro_japan.py +5 -4
  29. akshare/economic/macro_other.py +12 -9
  30. akshare/economic/macro_usa.py +376 -1940
  31. akshare/economic/marco_cnbs.py +11 -6
  32. akshare/energy/energy_carbon.py +94 -125
  33. akshare/event/migration.py +3 -2
  34. akshare/exceptions.py +43 -0
  35. akshare/file_fold/calendar.json +245 -2
  36. akshare/fortune/fortune_500.py +15 -48
  37. akshare/fund/fund_amac.py +157 -75
  38. akshare/fund/fund_em.py +191 -184
  39. akshare/fund/fund_etf_em.py +20 -19
  40. akshare/fund/fund_etf_sina.py +71 -23
  41. akshare/fund/fund_etf_ths.py +93 -0
  42. akshare/fund/fund_fee_em.py +98 -0
  43. akshare/fund/fund_lof_em.py +10 -8
  44. akshare/fund/fund_portfolio_em.py +60 -50
  45. akshare/fund/fund_rank_em.py +91 -82
  46. akshare/fund/fund_report_cninfo.py +63 -48
  47. akshare/fund/fund_scale_sina.py +20 -10
  48. akshare/fund/fund_xq.py +139 -109
  49. akshare/futures/cons.py +8 -31
  50. akshare/futures/cot.py +185 -137
  51. akshare/futures/futures_basis.py +97 -32
  52. akshare/futures/futures_comm_ctp.py +37 -0
  53. akshare/futures/futures_comm_qihuo.py +74 -45
  54. akshare/futures/futures_daily_bar.py +121 -184
  55. akshare/futures/futures_hf_em.py +66 -61
  56. akshare/futures/futures_hq_sina.py +79 -61
  57. akshare/futures/futures_index_ccidx.py +6 -3
  58. akshare/futures/futures_inventory_99.py +61 -272
  59. akshare/futures/futures_news_shmet.py +4 -2
  60. akshare/futures/futures_roll_yield.py +12 -25
  61. akshare/futures/futures_spot_stock_em.py +19 -13
  62. akshare/futures/futures_stock_js.py +14 -12
  63. akshare/futures/futures_to_spot.py +38 -33
  64. akshare/futures/futures_warehouse_receipt.py +75 -71
  65. akshare/futures/futures_zh_sina.py +73 -50
  66. akshare/futures/symbol_var.py +18 -13
  67. akshare/futures_derivative/futures_contract_info_czce.py +60 -52
  68. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  69. akshare/futures_derivative/futures_contract_info_shfe.py +46 -35
  70. akshare/futures_derivative/futures_cot_sina.py +26 -19
  71. akshare/futures_derivative/futures_spot_sys.py +21 -8
  72. akshare/fx/currency_investing.py +19 -285
  73. akshare/index/index_cflp.py +29 -26
  74. akshare/index/index_cni.py +86 -88
  75. akshare/index/index_cons.py +26 -10
  76. akshare/index/index_cx.py +248 -47
  77. akshare/index/index_drewry.py +17 -16
  78. akshare/index/index_hog.py +27 -26
  79. akshare/index/index_option_qvix.py +329 -0
  80. akshare/index/index_research_fund_sw.py +134 -0
  81. akshare/index/{index_sw_research.py → index_research_sw.py} +122 -58
  82. akshare/index/index_spot.py +9 -5
  83. akshare/index/index_stock_hk.py +35 -16
  84. akshare/index/index_stock_us_sina.py +1 -1
  85. akshare/index/index_stock_zh.py +180 -89
  86. akshare/index/index_stock_zh_csindex.py +15 -369
  87. akshare/index/index_sw.py +62 -34
  88. akshare/index/index_yw.py +46 -23
  89. akshare/index/index_zh_a_scope.py +48 -0
  90. akshare/index/index_zh_em.py +17 -14
  91. akshare/interest_rate/interbank_rate_em.py +14 -9
  92. akshare/movie/artist_yien.py +32 -5
  93. akshare/movie/movie_yien.py +92 -18
  94. akshare/movie/video_yien.py +28 -5
  95. akshare/news/news_baidu.py +78 -44
  96. akshare/news/news_cctv.py +38 -38
  97. akshare/news/news_stock.py +6 -3
  98. akshare/nlp/nlp_interface.py +7 -8
  99. akshare/option/cons.py +11 -11
  100. akshare/option/option_comm_qihuo.py +86 -0
  101. akshare/option/option_commodity.py +178 -51
  102. akshare/option/option_daily_stats_sse_szse.py +146 -0
  103. akshare/option/option_em.py +147 -138
  104. akshare/option/option_finance_sina.py +160 -137
  105. akshare/option/option_lhb_em.py +62 -56
  106. akshare/option/option_risk_indicator_sse.py +17 -14
  107. akshare/other/other_car_cpca.py +934 -0
  108. akshare/other/{other_car.py → other_car_gasgoo.py} +15 -54
  109. akshare/qdii/__init__.py +0 -0
  110. akshare/qdii/qdii_jsl.py +233 -0
  111. akshare/request.py +117 -0
  112. akshare/spot/spot_hog_soozhu.py +232 -0
  113. akshare/spot/spot_price_qh.py +121 -0
  114. akshare/spot/spot_sge.py +63 -10
  115. akshare/stock/stock_allotment_cninfo.py +10 -9
  116. akshare/stock/stock_ask_bid_em.py +27 -3
  117. akshare/stock/stock_board_concept_em.py +23 -14
  118. akshare/stock/stock_board_industry_em.py +40 -34
  119. akshare/stock/stock_cg_equity_mortgage.py +15 -11
  120. akshare/stock/stock_cg_guarantee.py +41 -51
  121. akshare/stock/stock_cg_lawsuit.py +36 -35
  122. akshare/stock/stock_dividend_cninfo.py +12 -6
  123. akshare/stock/stock_dzjy_em.py +347 -260
  124. akshare/stock/stock_fund_em.py +332 -84
  125. akshare/stock/stock_hk_famous.py +108 -0
  126. akshare/stock/stock_hk_sina.py +8 -7
  127. akshare/stock/stock_hold_control_cninfo.py +100 -15
  128. akshare/stock/stock_hold_control_em.py +4 -3
  129. akshare/stock/stock_hold_num_cninfo.py +18 -12
  130. akshare/stock/stock_hot_rank_em.py +2 -1
  131. akshare/stock/stock_hot_search_baidu.py +5 -2
  132. akshare/stock/stock_industry_cninfo.py +24 -18
  133. akshare/stock/stock_industry_pe_cninfo.py +45 -31
  134. akshare/stock/stock_industry_sw.py +9 -10
  135. akshare/stock/stock_info.py +25 -15
  136. akshare/stock/stock_info_em.py +5 -2
  137. akshare/stock/stock_intraday_em.py +5 -2
  138. akshare/stock/stock_intraday_sina.py +22 -18
  139. akshare/stock/stock_ipo_summary_cninfo.py +25 -10
  140. akshare/stock/stock_new_cninfo.py +32 -19
  141. akshare/stock/stock_news_cx.py +39 -0
  142. akshare/stock/stock_profile_cninfo.py +9 -8
  143. akshare/stock/stock_rank_forecast.py +8 -6
  144. akshare/stock/stock_share_changes_cninfo.py +18 -14
  145. akshare/stock/stock_share_hold.py +24 -19
  146. akshare/stock/stock_summary.py +54 -26
  147. akshare/stock/stock_us_famous.py +15 -6
  148. akshare/stock/stock_us_pink.py +7 -5
  149. akshare/stock/stock_us_sina.py +15 -12
  150. akshare/stock/stock_xq.py +38 -12
  151. akshare/stock/stock_zh_a_sina.py +53 -78
  152. akshare/stock/stock_zh_b_sina.py +32 -55
  153. akshare/stock/stock_zh_kcb_report.py +11 -9
  154. akshare/stock/stock_zh_kcb_sina.py +67 -64
  155. akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
  156. akshare/stock_feature/stock_a_high_low.py +5 -2
  157. akshare/stock_feature/stock_a_indicator.py +12 -9
  158. akshare/stock_feature/stock_a_pe_and_pb.py +27 -6
  159. akshare/stock_feature/stock_account_em.py +58 -40
  160. akshare/stock_feature/stock_analyst_em.py +36 -27
  161. akshare/stock_feature/stock_board_industry_ths.py +136 -400
  162. akshare/stock_feature/stock_comment_em.py +118 -85
  163. akshare/stock_feature/stock_concept_futu.py +183 -0
  164. akshare/stock_feature/stock_cyq_em.py +58 -54
  165. akshare/stock_feature/stock_disclosure_cninfo.py +147 -102
  166. akshare/stock_feature/stock_esg_sina.py +216 -11
  167. akshare/stock_feature/stock_fhps_em.py +60 -25
  168. akshare/stock_feature/stock_fhps_ths.py +25 -6
  169. akshare/stock_feature/stock_fund_flow.py +38 -25
  170. akshare/stock_feature/stock_gdfx_em.py +180 -95
  171. akshare/stock_feature/stock_gdhs.py +73 -49
  172. akshare/stock_feature/stock_gpzy_em.py +78 -46
  173. akshare/stock_feature/stock_hist_em.py +164 -111
  174. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  175. akshare/stock_feature/stock_hsgt_em.py +184 -452
  176. akshare/stock_feature/stock_info.py +52 -29
  177. akshare/stock_feature/stock_inner_trade_xq.py +39 -31
  178. akshare/stock_feature/stock_irm_cninfo.py +32 -9
  179. akshare/stock_feature/stock_jgdy_em.py +41 -38
  180. akshare/stock_feature/stock_lh_yybpm.py +36 -37
  181. akshare/stock_feature/stock_lhb_em.py +135 -71
  182. akshare/stock_feature/stock_lhb_sina.py +93 -46
  183. akshare/stock_feature/stock_margin_em.py +102 -0
  184. akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -15
  185. akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +23 -19
  186. akshare/stock_feature/stock_market_legu.py +13 -8
  187. akshare/stock_feature/stock_pankou_em.py +72 -34
  188. akshare/stock_feature/stock_report_em.py +244 -54
  189. akshare/stock_feature/stock_research_report_em.py +48 -19
  190. akshare/stock_feature/stock_sns_sseinfo.py +15 -12
  191. akshare/stock_feature/stock_sy_em.py +86 -33
  192. akshare/stock_feature/stock_technology_ths.py +152 -120
  193. akshare/stock_feature/stock_tfp_em.py +35 -13
  194. akshare/stock_feature/stock_three_report_em.py +119 -77
  195. akshare/stock_feature/stock_ttm_lyr.py +4 -7
  196. akshare/stock_feature/stock_value_em.py +83 -0
  197. akshare/stock_feature/stock_wencai.py +21 -9
  198. akshare/stock_feature/stock_yjyg_em.py +63 -28
  199. akshare/stock_feature/stock_zf_pg.py +61 -38
  200. akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
  201. akshare/stock_feature/stock_ztb_em.py +62 -40
  202. akshare/stock_fundamental/stock_finance.py +150 -58
  203. akshare/stock_fundamental/stock_finance_ths.py +116 -31
  204. akshare/stock_fundamental/stock_mda_ym.py +5 -3
  205. akshare/stock_fundamental/stock_notice.py +29 -15
  206. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  207. akshare/stock_fundamental/stock_profit_forecast_ths.py +19 -10
  208. akshare/stock_fundamental/stock_register_em.py +448 -0
  209. akshare/stock_fundamental/stock_restricted_em.py +79 -32
  210. akshare/stock_fundamental/stock_zygc.py +10 -8
  211. akshare/stock_fundamental/stock_zyjs_ths.py +5 -3
  212. akshare/tool/trade_date_hist.py +4 -3
  213. akshare/utils/cons.py +10 -0
  214. akshare/utils/context.py +43 -0
  215. akshare/utils/demjson.py +2 -2
  216. akshare/utils/func.py +26 -0
  217. akshare/utils/tqdm.py +13 -3
  218. {akshare-1.12.95.dist-info → akshare-1.15.72.dist-info}/METADATA +52 -69
  219. akshare-1.15.72.dist-info/RECORD +385 -0
  220. {akshare-1.12.95.dist-info → akshare-1.15.72.dist-info}/WHEEL +1 -1
  221. tests/test_func.py +3 -5
  222. akshare/bond/bond_futures.py +0 -50
  223. akshare/bond/bond_investing.py +0 -139
  224. akshare/crypto/crypto_hist_investing.py +0 -249
  225. akshare/fortune/fortune_it_juzi.py +0 -123
  226. akshare/futures/futures_international.py +0 -170
  227. akshare/futures/futures_news_baidu.py +0 -54
  228. akshare/futures/inventory_data.py +0 -100
  229. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  230. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  231. akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
  232. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  233. akshare/index/index_fear_greed_funddb.py +0 -71
  234. akshare/index/index_investing.py +0 -232
  235. akshare/sport/sport_olympic_winter.py +0 -39
  236. akshare/stock_feature/stock_board_concept_ths.py +0 -422
  237. akshare/stock_fundamental/stock_register.py +0 -292
  238. akshare-1.12.95.dist-info/RECORD +0 -374
  239. {akshare-1.12.95.dist-info → akshare-1.15.72.dist-info}/LICENSE +0 -0
  240. {akshare-1.12.95.dist-info → akshare-1.15.72.dist-info}/top_level.txt +0 -0
@@ -1,100 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding:utf-8 -*-
3
- """
4
- Date: 2021/1/10 13:58
5
- Desc: 得到 99 期货网的原始数据
6
- """
7
- import requests
8
- import pickle
9
- from bs4 import BeautifulSoup
10
- import time
11
-
12
-
13
- url = "http://service.99qh.com/Storage/Storage.aspx?page=99qh"
14
-
15
- sample_headers = {
16
- "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
17
- "Host": "service.99qh.com",
18
- "Origin": "http://service.99qh.com",
19
- "Referer": "http://www.99qh.com/d/store.aspx",
20
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
21
- }
22
-
23
- res = requests.get(url, headers=sample_headers)
24
-
25
- soup = BeautifulSoup(res.text, "lxml")
26
- view_state = soup.find_all(attrs={"id": "__VIEWSTATE"})[0]["value"]
27
- even_validation = soup.find_all(attrs={"id": "__EVENTVALIDATION"})[0]["value"]
28
-
29
- qh_headers = {
30
- "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
31
- "Accept-Encoding": "gzip, deflate",
32
- "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
33
- "Cache-Control": "max-age=0",
34
- "Connection": "keep-alive",
35
- "Content-Length": "4458",
36
- "Content-Type": "application/x-www-form-urlencoded",
37
- "Host": "service.99qh.com",
38
- "Origin": "http://service.99qh.com",
39
- "Referer": "http://service.99qh.com/Storage/Storage.aspx?page=99qh",
40
- "Upgrade-Insecure-Requests": "1",
41
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
42
- }
43
-
44
- code_temp_list = [item["value"] for item in soup.find_all("select")[0].find_all("option")]
45
- name_temp_list = [item.get_text() for item in soup.find_all("select")[0].find_all("option")]
46
- code_exchange_name_dict = dict(zip(code_temp_list, name_temp_list))
47
- exchange_value = soup.find_all("select")[0].find_all(attrs={"selected": "selected"})[0]["value"]
48
- symbol_list = soup.find_all("select")[1].get_text().split("\n")[1:-1]
49
- symbol_value_list = [item["value"] for item in soup.find_all("select")[1].find_all("option")]
50
- code_symbol_code_dict = dict()
51
- code_symbol_code_dict[exchange_value] = symbol_value_list
52
-
53
- exchange_symbol_list = {}
54
- exchange_symbol_value_list = {}
55
- for i in code_temp_list:
56
- # i = 14
57
- print(i)
58
- j = 0
59
- while j < 5:
60
- try:
61
- payload = {
62
- "__EVENTTARGET": "ddlExchName",
63
- "__EVENTARGUMENT": "",
64
- "__LASTFOCUS": "",
65
- "__VIEWSTATE": view_state,
66
- "__VIEWSTATEGENERATOR": "6EAC22FA",
67
- "__EVENTVALIDATION": even_validation,
68
- "ddlExchName": i,
69
- # "ddlGoodsName": 6
70
- }
71
-
72
- res = requests.post(url, data=payload, headers=qh_headers)
73
- soup = BeautifulSoup(res.text, "lxml")
74
- exchange = soup.find_all("select")[0].find_all(attrs={"selected": "selected"})[0].get_text()
75
- print(exchange)
76
- exchange_value = soup.find_all("select")[0].find_all(attrs={"selected": "selected"})[0]["value"]
77
- print(exchange_value)
78
- symbol_list = soup.find_all("select")[1].get_text().split("\n")[1:-1]
79
- exchange_symbol_list.update({exchange_value: symbol_list})
80
- symbol_value_list = [item["value"] for item in soup.find_all("select")[1].find_all("option")]
81
- exchange_symbol_value_list.update({exchange_value: symbol_value_list})
82
- view_state = soup.find_all(attrs={"id": "__VIEWSTATE"})[0]["value"]
83
- even_validation = soup.find_all(attrs={"id": "__EVENTVALIDATION"})[0]["value"]
84
- time.sleep(5)
85
- except:
86
- j += 1
87
- continue
88
-
89
-
90
- with open('./akshare/futures/exchange_symbol_list.pk', 'wb') as f:
91
- pickle.dump(exchange_symbol_list, f)
92
-
93
- with open('./akshare/futures/exchange_symbol_value_list.pk', 'wb') as f:
94
- pickle.dump(exchange_symbol_value_list, f)
95
-
96
- with open('./akshare/futures/code_exchange_name_dict.pk', 'wb') as f:
97
- pickle.dump(code_exchange_name_dict, f)
98
-
99
-
100
-
@@ -1,61 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding:utf-8 -*-
3
- """
4
- Date: 2023/11/17 18:20
5
- Desc: 南华期货-商品指数历史走势-价格指数-数值
6
- https://www.nanhua.net/nhzc/varietytrend.html
7
- 1000 点开始, 用收益率累计
8
- https://www.nanhua.net/ianalysis/varietyindex/price/A.json?t=1574932974280
9
- """
10
- import time
11
-
12
- import pandas as pd
13
- import requests
14
-
15
-
16
- def futures_index_symbol_table_nh() -> pd.DataFrame:
17
- """
18
- 南华期货-南华指数所有品种一览表
19
- https://www.nanhua.net/ianalysis/varietyindex/price/A.json?t=1574932974280
20
- :return: 南华指数所有品种一览表
21
- :rtype: pandas.DataFrame
22
- """
23
- url = "https://www.nanhua.net/ianalysis/plate-variety.json"
24
- r = requests.get(url)
25
- data_json = r.json()
26
- temp_df = pd.DataFrame(data_json)
27
- temp_df["firstday"] = pd.to_datetime(temp_df["firstday"], errors="coerce").dt.date
28
- return temp_df
29
-
30
-
31
- def futures_price_index_nh(symbol: str = "A") -> pd.DataFrame:
32
- """
33
- 南华期货-南华指数单品种-价格-所有历史数据
34
- https://www.nanhua.net/ianalysis/varietyindex/price/A.json?t=1574932974280
35
- :param symbol: 通过 ak.futures_index_symbol_table_nh() 获取
36
- :type symbol: str
37
- :return: 南华期货-南华指数单品种-价格-所有历史数据
38
- :rtype: pandas.Series
39
- """
40
- symbol_df = futures_index_symbol_table_nh()
41
- symbol_list = symbol_df["code"].tolist()
42
- if symbol in symbol_list:
43
- t = time.time()
44
- url = f"https://www.nanhua.net/ianalysis/varietyindex/price/{symbol}.json?t={int(round(t * 1000))}"
45
- r = requests.get(url)
46
- data_json = r.json()
47
- temp_df = pd.DataFrame(data_json)
48
- temp_df.columns = ["date", "value"]
49
- temp_df["date"] = pd.to_datetime(temp_df["date"], unit="ms", errors="coerce")
50
- temp_df["date"] = temp_df["date"].dt.tz_localize("UTC")
51
- temp_df["date"] = temp_df["date"].dt.tz_convert("Asia/Shanghai").dt.date
52
- temp_df["value"] = pd.to_numeric(temp_df["value"], errors="coerce")
53
- return temp_df
54
-
55
-
56
- if __name__ == "__main__":
57
- futures_index_symbol_table_nh_df = futures_index_symbol_table_nh()
58
- print(futures_index_symbol_table_nh_df)
59
-
60
- futures_price_index_nh_df = futures_price_index_nh(symbol="A")
61
- print(futures_price_index_nh_df)
@@ -1,47 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding:utf-8 -*-
3
- """
4
- Date: 2023/11/17 18:20
5
- Desc: 南华期货-商品指数历史走势-收益率指数-数值
6
- https://www.nanhua.net/nhzc/varietytrend.html
7
- 1000 点开始, 用收益率累计
8
- https://www.nanhua.net/ianalysis/varietyindex/index/NHCI.json?t=1574932290494
9
- """
10
- import time
11
-
12
- import pandas as pd
13
- import requests
14
-
15
- from akshare.futures_derivative.futures_index_price_nh import (
16
- futures_index_symbol_table_nh,
17
- )
18
-
19
-
20
- def futures_return_index_nh(symbol: str = "Y") -> pd.DataFrame:
21
- """
22
- 南华期货-南华指数单品种-收益率-所有历史数据
23
- https://www.nanhua.net/ianalysis/varietyindex/index/NHCI.json?t=1574932290494
24
- :param symbol: 通过 ak.futures_index_symbol_table_nh() 获取
25
- :type symbol: str
26
- :return: 南华指数单品种-收益率-所有历史数据
27
- :rtype: pandas.Series
28
- """
29
- symbol_df = futures_index_symbol_table_nh()
30
- symbol_list = symbol_df["code"].tolist()
31
- if symbol in symbol_list:
32
- t = time.time()
33
- url = f"https://www.nanhua.net/ianalysis/varietyindex/index/{symbol}.json?t={int(round(t * 1000))}"
34
- r = requests.get(url)
35
- data_json = r.json()
36
- temp_df = pd.DataFrame(data_json)
37
- temp_df.columns = ["date", "value"]
38
- temp_df["date"] = pd.to_datetime(temp_df["date"], unit="ms", errors="coerce")
39
- temp_df["date"] = temp_df["date"].dt.tz_localize("UTC")
40
- temp_df["date"] = temp_df["date"].dt.tz_convert("Asia/Shanghai").dt.date
41
- temp_df["value"] = pd.to_numeric(temp_df["value"], errors="coerce")
42
- return temp_df
43
-
44
-
45
- if __name__ == "__main__":
46
- futures_return_index_nh_df = futures_return_index_nh(symbol="NHCI")
47
- print(futures_return_index_nh_df)
@@ -1,51 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding:utf-8 -*-
3
- """
4
- Date: 2023/6/4 15:19
5
- Desc: 南华期货-商品指数历史走势-收益率指数-波动率
6
- https://www.nanhua.net/nhzc/varietytrend.html
7
- 1000 点开始, 用收益率累计
8
- 目标地址: https://www.nanhua.net/ianalysis/volatility/20/NHCI.json?t=1574932291399
9
- """
10
- import time
11
-
12
- import pandas as pd
13
- import requests
14
-
15
- from akshare.futures_derivative.futures_index_price_nh import (
16
- futures_index_symbol_table_nh,
17
- )
18
-
19
-
20
- def futures_volatility_index_nh(
21
- symbol: str = "NHCI", period: str = "20"
22
- ) -> pd.DataFrame:
23
- """
24
- 南华期货-南华指数单品种-波动率-所有历史数据
25
- https://www.nanhua.net/nhzc/varietytrend.html
26
- :param symbol: 通过 ak.futures_index_symbol_table_nh() 获取
27
- :type symbol: str
28
- :param period: 波动周期 choice of {'5', '20', '60', '120'}
29
- :type period: str
30
- :return: 波动率-所有历史数据
31
- :rtype: pandas.DataFrame
32
- """
33
- symbol_df = futures_index_symbol_table_nh()
34
- if symbol in symbol_df["code"].tolist():
35
- t = time.time()
36
- url = f"https://www.nanhua.net/ianalysis/volatility/{period}/{symbol}.json?t={int(round(t * 1000))}"
37
- r = requests.get(url)
38
- data_json = r.json()
39
- temp_df = pd.DataFrame(data_json)
40
- temp_df.columns = ["date", "value"]
41
- temp_df["date"] = pd.to_datetime(temp_df["date"], unit="ms")
42
- temp_df["date"] = temp_df["date"].dt.tz_localize("UTC")
43
- temp_df["date"] = temp_df["date"].dt.tz_convert("Asia/Shanghai").dt.date
44
- return temp_df
45
-
46
-
47
- if __name__ == "__main__":
48
- futures_volatility_index_nh_df = futures_volatility_index_nh(
49
- symbol="SA", period="5"
50
- )
51
- print(futures_volatility_index_nh_df)
@@ -1,145 +0,0 @@
1
- # -*- coding:utf-8 -*-
2
- # !/usr/bin/env python
3
- """
4
- Date: 2023/12/2 19:00
5
- Desc: 板块指数、品种指数和相关系数矩阵
6
- 南华期货-板块指数涨跌
7
- https://www.nanhua.net/nhzc/platechange.html
8
- 南华期货-品种指数涨跌
9
- https://www.nanhua.net/nhzc/varietychange.html
10
- 南华期货-相关系数矩阵
11
- https://www.nanhua.net/nhzc/correltable.html
12
- """
13
- import pandas as pd
14
- import requests
15
-
16
-
17
- def futures_board_index_nh(start_date: str = "20231110", end_date: str = "20231116") -> pd.DataFrame:
18
- """
19
- 南华期货-市场涨跌-板块指数涨跌
20
- https://www.nanhua.net/nhzc/platechange.html
21
- :param start_date: 开始时间
22
- :type start_date: str
23
- :param end_date: 结束时间
24
- :type end_date: str
25
- :return: 板块指数涨跌
26
- :rtype: pandas.DataFrame
27
- """
28
- # 获取 start_date 的数据
29
- url = f"https://www.nanhua.net/ianalysis/plate/{start_date[:4]}/{start_date[4:6]}/{start_date}.json"
30
- params = {
31
- 't': '1649920913503'
32
- }
33
- r = requests.get(url, params=params)
34
- start_df = pd.DataFrame(r.json())
35
- start_df.columns = [
36
- 'name',
37
- 'code',
38
- start_date,
39
- ]
40
-
41
- # 获取 end_date 的数据
42
- url = f"https://www.nanhua.net/ianalysis/plate/{end_date[:4]}/{end_date[4:6]}/{end_date}.json"
43
- params = {
44
- 't': '1649920913503'
45
- }
46
- r = requests.get(url, params=params)
47
- end_df = pd.DataFrame(r.json())
48
- end_df.columns = [
49
- 'name',
50
- 'code',
51
- end_date,
52
- ]
53
- end_df.reset_index(inplace=True, drop=True)
54
-
55
- # 计算数据
56
- start_df = start_df.merge(end_df, on=['name', 'code'], how='inner')
57
- # 去除异常数据 IF
58
- start_df = start_df[start_df['code'] != 'IF']
59
- start_df['return'] = start_df[end_date] / start_df[start_date] - 1
60
- temp_df = start_df[['name', 'return']]
61
-
62
- return temp_df
63
-
64
-
65
- def futures_variety_index_nh(start_date: str = "20231110", end_date: str = "20231116") -> pd.DataFrame:
66
- """
67
- 南华期货-市场涨跌-品种指数涨跌
68
- https://www.nanhua.net/nhzc/varietychange.html
69
- :param start_date: 开始时间
70
- :type start_date: str
71
- :param end_date: 结束时间
72
- :type end_date: str
73
- :return: 品种指数涨跌
74
- :rtype: pandas.DataFrame
75
- """
76
- url = f"https://www.nanhua.net/ianalysis/variety/{start_date[:4]}/{start_date[4:6]}/{start_date}.json"
77
- params = {
78
- 't': '1649920913503'
79
- }
80
- r = requests.get(url, params=params)
81
- start_df = pd.DataFrame(r.json())
82
- start_df.columns = [
83
- 'name',
84
- 'code',
85
- start_date,
86
- ]
87
-
88
- url = f"http://www.nanhua.net/ianalysis/variety/{end_date[:4]}/{end_date[4:6]}/{end_date}.json"
89
- params = {
90
- 't': '1649920913503'
91
- }
92
- r = requests.get(url, params=params)
93
- end_df = pd.DataFrame(r.json())
94
- end_df.columns = [
95
- 'name',
96
- 'code',
97
- 'end_date',
98
- ]
99
- start_df[end_date] = end_df['end_date']
100
-
101
- start_df['gap'] = start_df[end_date] - start_df[start_date]
102
- start_df['return'] = start_df['gap'] / start_df[start_date]
103
-
104
- temp_df = start_df
105
- temp_df = temp_df[['name', 'return']]
106
- return temp_df
107
-
108
-
109
- def futures_correlation_nh(date: str = "20231110", period: str = "20") -> pd.DataFrame:
110
- """
111
- 南华期货-统计监控-相关系数矩阵
112
- https://www.nanhua.net/nhzc/correltable.html
113
- :param date: 开始时间
114
- :type date: str
115
- :param period: 周期; choice of {"5", "20", "60", "120"}
116
- :type period: str
117
- :return: 相关系数矩阵
118
- :rtype: pandas.DataFrame
119
- """
120
- url = f"https://www.nanhua.net/ianalysis/correl/{period}/{date[:4]}/{date[4:6]}/{date}.json"
121
- params = {
122
- 't': '1649920913503'
123
- }
124
- r = requests.get(url, params=params)
125
- temp_df = pd.DataFrame(r.json())
126
- temp_df.columns = [
127
- '品种代码1',
128
- '品种名称1',
129
- '品种代码2',
130
- '品种名称2',
131
- '相关系数',
132
- ]
133
- temp_df['相关系数'] = pd.to_numeric(temp_df['相关系数'], errors="coerce")
134
- return temp_df
135
-
136
-
137
- if __name__ == '__main__':
138
- futures_board_index_nh_df = futures_board_index_nh(start_date="20230103", end_date="20231201")
139
- print(futures_board_index_nh_df)
140
-
141
- futures_variety_index_nh_df = futures_variety_index_nh(start_date="20231110", end_date="20231116")
142
- print(futures_variety_index_nh_df)
143
-
144
- futures_correlation_nh_df = futures_correlation_nh(date="20231110", period="20")
145
- print(futures_correlation_nh_df)
@@ -1,71 +0,0 @@
1
- # -*- coding:utf-8 -*-
2
- # !/usr/bin/env python
3
- """
4
- Date: 2023/10/18 20:00
5
- Desc: funddb-工具-估值情绪-恐惧贪婪指数
6
- https://funddb.cn/tool/fear
7
- """
8
- import json
9
-
10
- import pandas as pd
11
- import requests
12
- from py_mini_racer import py_mini_racer
13
-
14
- from akshare.datasets import get_ths_js
15
-
16
-
17
- def _get_file_content_ths(file: str = "cninfo.js") -> str:
18
- """
19
- 获取 JS 文件的内容
20
- :param file: JS 文件名
21
- :type file: str
22
- :return: 文件内容
23
- :rtype: str
24
- """
25
- setting_file_path = get_ths_js(file)
26
- with open(setting_file_path) as f:
27
- file_data = f.read()
28
- return file_data
29
-
30
-
31
- def index_fear_greed_funddb(symbol: str = "上证指数") -> pd.DataFrame:
32
- """
33
- funddb-工具-估值情绪-恐惧贪婪指数
34
- https://funddb.cn/tool/fear
35
- :param symbol: choice of {"上证指数", "沪深300"}
36
- :type symbol: str
37
- :return: 股权质押
38
- :rtype: pandas.DataFrame
39
- """
40
- symbol_map = {
41
- "上证指数": "000001.SH",
42
- "沪深300": "000300.SH",
43
- }
44
- url = "https://api.jiucaishuo.com/v2/kjtl/kjtlconnect"
45
- payload = {
46
- "gu_code": symbol_map[symbol],
47
- "type": "h5",
48
- "version": "2.4.5",
49
- "act_time": 1697623588394,
50
- }
51
- r = requests.post(url, json=payload)
52
- data_json = r.json()
53
- js_code = py_mini_racer.MiniRacer()
54
- js_content = _get_file_content_ths("cninfo.js")
55
- js_code.eval(js_content)
56
- mcode = js_code.call("my_decode", data_json)
57
- data_json = json.loads(mcode)
58
- date_list = data_json["data"]["xAxis"]["categories"]
59
- tl_list = data_json["data"]["series"][0]["data"]
60
- sz_list = data_json["data"]["series"][1]["data"]
61
- temp_df = pd.DataFrame([date_list, tl_list, sz_list]).T
62
- temp_df.columns = ["date", "fear", "index"]
63
- temp_df["date"] = pd.to_datetime(temp_df["date"], errors="coerce").dt.date
64
- temp_df["fear"] = pd.to_numeric(temp_df["fear"], errors="coerce")
65
- temp_df["index"] = pd.to_numeric(temp_df["index"], errors="coerce")
66
- return temp_df
67
-
68
-
69
- if __name__ == "__main__":
70
- index_fear_greed_funddb_df = index_fear_greed_funddb(symbol="上证指数")
71
- print(index_fear_greed_funddb_df)