akshare 1.12.99__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 (236) hide show
  1. akshare/__init__.py +441 -138
  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_info_cm.py +28 -8
  10. akshare/bond/bond_issue_cninfo.py +73 -30
  11. akshare/bond/bond_zh_cov.py +1 -1
  12. akshare/bond/bond_zh_sina.py +57 -51
  13. akshare/cal/__init__.py +0 -0
  14. akshare/cal/rv.py +170 -0
  15. akshare/cost/cost_living.py +7 -5
  16. akshare/currency/currency_safe.py +7 -6
  17. akshare/data/cninfo.js +15 -0
  18. akshare/datasets.py +10 -21
  19. akshare/economic/macro_bank.py +95 -653
  20. akshare/economic/macro_china.py +772 -1024
  21. akshare/economic/macro_china_hk.py +65 -243
  22. akshare/economic/macro_china_nbs.py +24 -7
  23. akshare/economic/macro_constitute.py +17 -12
  24. akshare/economic/macro_euro.py +13 -6
  25. akshare/economic/macro_finance_ths.py +133 -0
  26. akshare/economic/macro_info_ws.py +100 -0
  27. akshare/economic/macro_japan.py +5 -4
  28. akshare/economic/macro_other.py +12 -9
  29. akshare/economic/macro_usa.py +376 -1940
  30. akshare/economic/marco_cnbs.py +11 -6
  31. akshare/energy/energy_carbon.py +94 -125
  32. akshare/event/migration.py +3 -2
  33. akshare/exceptions.py +43 -0
  34. akshare/file_fold/calendar.json +245 -2
  35. akshare/fortune/fortune_500.py +15 -48
  36. akshare/fund/fund_amac.py +157 -75
  37. akshare/fund/fund_em.py +191 -184
  38. akshare/fund/fund_etf_em.py +16 -15
  39. akshare/fund/fund_etf_sina.py +71 -23
  40. akshare/fund/fund_etf_ths.py +93 -0
  41. akshare/fund/fund_fee_em.py +98 -0
  42. akshare/fund/fund_portfolio_em.py +60 -50
  43. akshare/fund/fund_rank_em.py +91 -82
  44. akshare/fund/fund_report_cninfo.py +63 -48
  45. akshare/fund/fund_scale_sina.py +20 -10
  46. akshare/fund/fund_xq.py +139 -109
  47. akshare/futures/cons.py +8 -31
  48. akshare/futures/cot.py +185 -137
  49. akshare/futures/futures_basis.py +97 -32
  50. akshare/futures/futures_comm_ctp.py +37 -0
  51. akshare/futures/futures_comm_qihuo.py +74 -45
  52. akshare/futures/futures_daily_bar.py +121 -184
  53. akshare/futures/futures_hf_em.py +66 -61
  54. akshare/futures/futures_hq_sina.py +79 -61
  55. akshare/futures/futures_index_ccidx.py +6 -3
  56. akshare/futures/futures_inventory_99.py +61 -272
  57. akshare/futures/futures_news_shmet.py +4 -2
  58. akshare/futures/futures_roll_yield.py +12 -25
  59. akshare/futures/futures_spot_stock_em.py +19 -13
  60. akshare/futures/futures_stock_js.py +14 -12
  61. akshare/futures/futures_to_spot.py +38 -33
  62. akshare/futures/futures_warehouse_receipt.py +75 -71
  63. akshare/futures/futures_zh_sina.py +5 -5
  64. akshare/futures/symbol_var.py +18 -13
  65. akshare/futures_derivative/futures_contract_info_czce.py +60 -52
  66. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  67. akshare/futures_derivative/futures_contract_info_shfe.py +46 -35
  68. akshare/futures_derivative/futures_cot_sina.py +26 -19
  69. akshare/futures_derivative/futures_spot_sys.py +21 -8
  70. akshare/fx/currency_investing.py +19 -285
  71. akshare/index/index_cflp.py +29 -26
  72. akshare/index/index_cni.py +86 -88
  73. akshare/index/index_cons.py +26 -10
  74. akshare/index/index_cx.py +248 -47
  75. akshare/index/index_drewry.py +17 -16
  76. akshare/index/index_option_qvix.py +329 -0
  77. akshare/index/index_research_fund_sw.py +134 -0
  78. akshare/index/{index_sw_research.py → index_research_sw.py} +122 -58
  79. akshare/index/index_spot.py +9 -5
  80. akshare/index/index_stock_hk.py +35 -16
  81. akshare/index/index_stock_us_sina.py +1 -1
  82. akshare/index/index_stock_zh.py +180 -89
  83. akshare/index/index_stock_zh_csindex.py +15 -369
  84. akshare/index/index_sw.py +62 -34
  85. akshare/index/index_yw.py +46 -23
  86. akshare/index/index_zh_a_scope.py +48 -0
  87. akshare/index/index_zh_em.py +6 -4
  88. akshare/interest_rate/interbank_rate_em.py +14 -9
  89. akshare/movie/artist_yien.py +32 -5
  90. akshare/movie/movie_yien.py +92 -18
  91. akshare/movie/video_yien.py +28 -5
  92. akshare/news/news_baidu.py +78 -44
  93. akshare/news/news_cctv.py +38 -38
  94. akshare/news/news_stock.py +6 -3
  95. akshare/nlp/nlp_interface.py +7 -8
  96. akshare/option/cons.py +11 -11
  97. akshare/option/option_comm_qihuo.py +86 -0
  98. akshare/option/option_commodity.py +178 -51
  99. akshare/option/option_daily_stats_sse_szse.py +146 -0
  100. akshare/option/option_em.py +147 -138
  101. akshare/option/option_finance_sina.py +160 -137
  102. akshare/option/option_lhb_em.py +62 -56
  103. akshare/option/option_risk_indicator_sse.py +17 -14
  104. akshare/other/other_car_cpca.py +934 -0
  105. akshare/other/{other_car.py → other_car_gasgoo.py} +15 -54
  106. akshare/qdii/__init__.py +0 -0
  107. akshare/qdii/qdii_jsl.py +233 -0
  108. akshare/request.py +117 -0
  109. akshare/spot/spot_hog_soozhu.py +232 -0
  110. akshare/spot/spot_price_qh.py +121 -0
  111. akshare/spot/spot_sge.py +63 -10
  112. akshare/stock/stock_allotment_cninfo.py +10 -9
  113. akshare/stock/stock_board_concept_em.py +23 -14
  114. akshare/stock/stock_board_industry_em.py +40 -34
  115. akshare/stock/stock_cg_equity_mortgage.py +15 -11
  116. akshare/stock/stock_cg_guarantee.py +41 -51
  117. akshare/stock/stock_cg_lawsuit.py +36 -35
  118. akshare/stock/stock_dividend_cninfo.py +12 -6
  119. akshare/stock/stock_dzjy_em.py +347 -260
  120. akshare/stock/stock_fund_em.py +332 -84
  121. akshare/stock/stock_hk_famous.py +108 -0
  122. akshare/stock/stock_hk_sina.py +8 -7
  123. akshare/stock/stock_hold_control_cninfo.py +100 -15
  124. akshare/stock/stock_hold_control_em.py +4 -3
  125. akshare/stock/stock_hold_num_cninfo.py +18 -12
  126. akshare/stock/stock_hot_rank_em.py +2 -1
  127. akshare/stock/stock_hot_search_baidu.py +5 -2
  128. akshare/stock/stock_industry_cninfo.py +24 -18
  129. akshare/stock/stock_industry_pe_cninfo.py +45 -31
  130. akshare/stock/stock_industry_sw.py +9 -10
  131. akshare/stock/stock_info.py +25 -15
  132. akshare/stock/stock_info_em.py +5 -2
  133. akshare/stock/stock_intraday_em.py +5 -2
  134. akshare/stock/stock_intraday_sina.py +22 -18
  135. akshare/stock/stock_ipo_summary_cninfo.py +25 -10
  136. akshare/stock/stock_new_cninfo.py +32 -19
  137. akshare/stock/stock_news_cx.py +39 -0
  138. akshare/stock/stock_profile_cninfo.py +9 -8
  139. akshare/stock/stock_rank_forecast.py +8 -6
  140. akshare/stock/stock_share_changes_cninfo.py +18 -14
  141. akshare/stock/stock_share_hold.py +24 -19
  142. akshare/stock/stock_summary.py +54 -26
  143. akshare/stock/stock_us_famous.py +15 -6
  144. akshare/stock/stock_us_pink.py +7 -5
  145. akshare/stock/stock_us_sina.py +15 -12
  146. akshare/stock/stock_xq.py +38 -12
  147. akshare/stock/stock_zh_a_sina.py +53 -78
  148. akshare/stock/stock_zh_b_sina.py +32 -55
  149. akshare/stock/stock_zh_kcb_report.py +11 -9
  150. akshare/stock/stock_zh_kcb_sina.py +67 -64
  151. akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
  152. akshare/stock_feature/stock_a_high_low.py +5 -2
  153. akshare/stock_feature/stock_a_indicator.py +12 -9
  154. akshare/stock_feature/stock_a_pe_and_pb.py +27 -6
  155. akshare/stock_feature/stock_account_em.py +58 -40
  156. akshare/stock_feature/stock_analyst_em.py +36 -27
  157. akshare/stock_feature/stock_board_industry_ths.py +136 -400
  158. akshare/stock_feature/stock_comment_em.py +118 -85
  159. akshare/stock_feature/stock_concept_futu.py +183 -0
  160. akshare/stock_feature/stock_cyq_em.py +58 -54
  161. akshare/stock_feature/stock_disclosure_cninfo.py +147 -102
  162. akshare/stock_feature/stock_esg_sina.py +216 -11
  163. akshare/stock_feature/stock_fhps_em.py +60 -25
  164. akshare/stock_feature/stock_fhps_ths.py +25 -6
  165. akshare/stock_feature/stock_fund_flow.py +38 -25
  166. akshare/stock_feature/stock_gdfx_em.py +180 -95
  167. akshare/stock_feature/stock_gdhs.py +73 -49
  168. akshare/stock_feature/stock_gpzy_em.py +78 -46
  169. akshare/stock_feature/stock_hist_em.py +55 -23
  170. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  171. akshare/stock_feature/stock_hsgt_em.py +184 -452
  172. akshare/stock_feature/stock_info.py +52 -29
  173. akshare/stock_feature/stock_inner_trade_xq.py +39 -31
  174. akshare/stock_feature/stock_irm_cninfo.py +32 -9
  175. akshare/stock_feature/stock_jgdy_em.py +41 -38
  176. akshare/stock_feature/stock_lh_yybpm.py +36 -37
  177. akshare/stock_feature/stock_lhb_em.py +135 -71
  178. akshare/stock_feature/stock_lhb_sina.py +93 -46
  179. akshare/stock_feature/stock_margin_em.py +102 -0
  180. akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -15
  181. akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +23 -19
  182. akshare/stock_feature/stock_market_legu.py +13 -8
  183. akshare/stock_feature/stock_pankou_em.py +72 -34
  184. akshare/stock_feature/stock_report_em.py +244 -54
  185. akshare/stock_feature/stock_research_report_em.py +48 -19
  186. akshare/stock_feature/stock_sns_sseinfo.py +15 -12
  187. akshare/stock_feature/stock_sy_em.py +86 -33
  188. akshare/stock_feature/stock_technology_ths.py +152 -120
  189. akshare/stock_feature/stock_tfp_em.py +35 -13
  190. akshare/stock_feature/stock_three_report_em.py +119 -77
  191. akshare/stock_feature/stock_ttm_lyr.py +4 -7
  192. akshare/stock_feature/stock_value_em.py +83 -0
  193. akshare/stock_feature/stock_wencai.py +21 -9
  194. akshare/stock_feature/stock_yjyg_em.py +63 -28
  195. akshare/stock_feature/stock_zf_pg.py +61 -38
  196. akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
  197. akshare/stock_feature/stock_ztb_em.py +62 -40
  198. akshare/stock_fundamental/stock_finance.py +150 -58
  199. akshare/stock_fundamental/stock_finance_ths.py +116 -31
  200. akshare/stock_fundamental/stock_mda_ym.py +5 -3
  201. akshare/stock_fundamental/stock_notice.py +29 -15
  202. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  203. akshare/stock_fundamental/stock_profit_forecast_ths.py +19 -10
  204. akshare/stock_fundamental/stock_register_em.py +448 -0
  205. akshare/stock_fundamental/stock_restricted_em.py +79 -32
  206. akshare/stock_fundamental/stock_zygc.py +10 -8
  207. akshare/stock_fundamental/stock_zyjs_ths.py +5 -3
  208. akshare/tool/trade_date_hist.py +4 -3
  209. akshare/utils/cons.py +10 -0
  210. akshare/utils/context.py +43 -0
  211. akshare/utils/demjson.py +2 -2
  212. akshare/utils/func.py +26 -0
  213. akshare/utils/tqdm.py +13 -3
  214. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/METADATA +52 -69
  215. akshare-1.15.72.dist-info/RECORD +385 -0
  216. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/WHEEL +1 -1
  217. tests/test_func.py +3 -5
  218. akshare/bond/bond_futures.py +0 -50
  219. akshare/bond/bond_investing.py +0 -139
  220. akshare/crypto/crypto_hist_investing.py +0 -249
  221. akshare/fortune/fortune_it_juzi.py +0 -123
  222. akshare/futures/futures_international.py +0 -170
  223. akshare/futures/futures_news_baidu.py +0 -54
  224. akshare/futures/inventory_data.py +0 -100
  225. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  226. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  227. akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
  228. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  229. akshare/index/index_fear_greed_funddb.py +0 -71
  230. akshare/index/index_investing.py +0 -232
  231. akshare/sport/sport_olympic_winter.py +0 -39
  232. akshare/stock_feature/stock_board_concept_ths.py +0 -422
  233. akshare/stock_fundamental/stock_register.py +0 -292
  234. akshare-1.12.99.dist-info/RECORD +0 -374
  235. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/LICENSE +0 -0
  236. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/top_level.txt +0 -0
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/2/28 16:00
4
+ Date: 2024/4/11 16:30
5
5
  Desc: 郑州商品交易所-交易数据-参考数据
6
6
  http://www.czce.com.cn/cn/jysj/cksj/H770322index_1.htm
7
7
  """
8
+
8
9
  import xml.etree.ElementTree as ET
9
10
 
10
11
  import pandas as pd
@@ -19,8 +20,10 @@ def futures_contract_info_czce(date: str = "20240228") -> pd.DataFrame:
19
20
  :rtype: pandas.DataFrame
20
21
  """
21
22
  headers = {
22
- "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
23
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36",
23
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,"
24
+ "image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
25
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
26
+ "Chrome/84.0.4147.89 Safari/537.36",
24
27
  "Host": "www.czce.com.cn",
25
28
  }
26
29
  url = f"http://www.czce.com.cn/cn/DFSStaticFiles/Future/{date[:4]}/{date}/FutureDataReferenceData.xml"
@@ -30,7 +33,7 @@ def futures_contract_info_czce(date: str = "20240228") -> pd.DataFrame:
30
33
  tree = ET.ElementTree(ET.fromstring(xml_data))
31
34
  root = tree.getroot()
32
35
  # 获取所有的记录
33
- records = root.findall('.//Contract')
36
+ records = root.findall(".//Contract")
34
37
  # 解析数据并填充到列表中
35
38
  data = []
36
39
  for record in records:
@@ -42,57 +45,62 @@ def futures_contract_info_czce(date: str = "20240228") -> pd.DataFrame:
42
45
  data.append(row_data)
43
46
 
44
47
  temp_df = pd.DataFrame(data)
45
- temp_df.rename(columns={
46
- 'Name': "产品名称",
47
- 'CtrCd': "合约代码",
48
- 'PrdCd': "产品代码",
49
- 'PrdTp': "产品类型",
50
- 'ExchCd': "交易所MIC编码",
51
- 'SegTp': "交易场所",
52
- 'TrdHrs': "交易时间节假日除外",
53
- 'TrdCtyCd': "交易国家ISO编码",
54
- 'TrdCcyCd': "交易币种ISO编码",
55
- 'ClrngCcyCd': "结算币种ISO编码",
56
- 'ExpiryTime': "到期时间待国家公布2025年节假日安排后进行调整",
57
- 'SettleTp': "结算方式",
58
- 'Duration': "挂牌频率",
59
- 'TckSz': "最小变动价位",
60
- 'TckVal': "最小变动价值",
61
- 'CtrSz': "交易单位",
62
- 'MsrmntUnt': "计量单位",
63
- 'MaxOrdSz': "最大下单量",
64
- 'MnthPosLmt': "日持仓限额期货公司会员不限仓",
65
- 'MinBlckTrdSz': "大宗交易最小规模",
66
- 'CesrEaaFl': "是否受CESR监管",
67
- 'FlexElgblFl': "是否为灵活合约",
68
- 'ListCy': "上市周期该产品的所有合约月份",
69
- 'DlvryNtcDt': "交割通知日",
70
- 'FrstTrdDt': "第一交易日",
71
- 'LstTrdDt': "最后交易日待国家公布2025年节假日安排后进行调整",
72
- 'DlvrySettleDt': "交割结算日",
73
- 'MnthCd': "月份代码",
74
- 'YrCd': "年份代码",
75
- 'LstDlvryDt': "最后交割日",
76
- 'LstDlvryDtBoard': "车(船)板最后交割日",
77
- 'DlvryMnth': "合约交割月份本合约交割月份",
78
- 'Margin': "交易保证金率",
79
- 'PxLim': "涨跌停板",
80
- 'FeeCcy': "费用币种ISO编码",
81
- 'TrdFee': "交易手续费",
82
- 'FeeCollectionType': "手续费收取方式",
83
- 'DlvryFee': "交割手续费",
84
- 'IntraDayTrdFee': "平今仓手续费",
85
- 'TradingLimit': "交易限额"
86
- }, inplace=True)
48
+ temp_df.rename(
49
+ columns={
50
+ "Name": "产品名称",
51
+ "CtrCd": "合约代码",
52
+ "PrdCd": "产品代码",
53
+ "PrdTp": "产品类型",
54
+ "ExchCd": "交易所MIC编码",
55
+ "SegTp": "交易场所",
56
+ "TrdHrs": "交易时间节假日除外",
57
+ "TrdCtyCd": "交易国家ISO编码",
58
+ "TrdCcyCd": "交易币种ISO编码",
59
+ "ClrngCcyCd": "结算币种ISO编码",
60
+ "ExpiryTime": "到期时间待国家公布2025年节假日安排后进行调整",
61
+ "SettleTp": "结算方式",
62
+ "Duration": "挂牌频率",
63
+ "TckSz": "最小变动价位",
64
+ "TckVal": "最小变动价值",
65
+ "CtrSz": "交易单位",
66
+ "MsrmntUnt": "计量单位",
67
+ "MaxOrdSz": "最大下单量",
68
+ "MnthPosLmt": "日持仓限额期货公司会员不限仓",
69
+ "MinBlckTrdSz": "大宗交易最小规模",
70
+ "CesrEaaFl": "是否受CESR监管",
71
+ "FlexElgblFl": "是否为灵活合约",
72
+ "ListCy": "上市周期该产品的所有合约月份",
73
+ "DlvryNtcDt": "交割通知日",
74
+ "FrstTrdDt": "第一交易日",
75
+ "LstTrdDt": "最后交易日待国家公布2025年节假日安排后进行调整",
76
+ "DlvrySettleDt": "交割结算日",
77
+ "MnthCd": "月份代码",
78
+ "YrCd": "年份代码",
79
+ "LstDlvryDt": "最后交割日",
80
+ "LstDlvryDtBoard": "车(船)板最后交割日",
81
+ "DlvryMnth": "合约交割月份本合约交割月份",
82
+ "Margin": "交易保证金率",
83
+ "PxLim": "涨跌停板",
84
+ "FeeCcy": "费用币种ISO编码",
85
+ "TrdFee": "交易手续费",
86
+ "FeeCollectionType": "手续费收取方式",
87
+ "DlvryFee": "交割手续费",
88
+ "IntraDayTrdFee": "平今仓手续费",
89
+ "TradingLimit": "交易限额",
90
+ },
91
+ inplace=True,
92
+ )
87
93
 
88
- temp_df['交易手续费'] = pd.to_numeric(temp_df['交易手续费'], errors="coerce")
89
- temp_df['交割手续费'] = pd.to_numeric(temp_df['交割手续费'], errors="coerce")
90
- temp_df['平今仓手续费'] = pd.to_numeric(temp_df['平今仓手续费'], errors="coerce")
91
- temp_df['交易限额'] = pd.to_numeric(temp_df['交易限额'], errors="coerce")
92
- temp_df['车(船)板最后交割日'] = pd.to_datetime(temp_df['车(船)板最后交割日'], errors="coerce").dt.date
94
+ temp_df["交易手续费"] = pd.to_numeric(temp_df["交易手续费"], errors="coerce")
95
+ temp_df["交割手续费"] = pd.to_numeric(temp_df["交割手续费"], errors="coerce")
96
+ temp_df["平今仓手续费"] = pd.to_numeric(temp_df["平今仓手续费"], errors="coerce")
97
+ temp_df["交易限额"] = pd.to_numeric(temp_df["交易限额"], errors="coerce")
98
+ temp_df["车(船)板最后交割日"] = pd.to_datetime(
99
+ temp_df["车(船)板最后交割日"], errors="coerce"
100
+ ).dt.date
93
101
  return temp_df
94
102
 
95
103
 
96
- if __name__ == '__main__':
104
+ if __name__ == "__main__":
97
105
  futures_contract_info_czce_df = futures_contract_info_czce(date="20240228")
98
106
  print(futures_contract_info_czce_df)
@@ -1,15 +1,16 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/2/28 19:00
4
+ Date: 2024/11/30 19:00
5
5
  Desc: 上海国际能源交易中心-业务指南-交易参数汇总(期货)
6
6
  https://www.ine.cn/bourseService/summary/?name=currinstrumentprop
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
11
12
 
12
- def futures_contract_info_ine(date: str = "20240228") -> pd.DataFrame:
13
+ def futures_contract_info_ine(date: str = "20241129") -> pd.DataFrame:
13
14
  """
14
15
  上海国际能源交易中心-业务指南-交易参数汇总(期货)
15
16
  https://www.ine.cn/bourseService/summary/?name=currinstrumentprop
@@ -18,43 +19,51 @@ def futures_contract_info_ine(date: str = "20240228") -> pd.DataFrame:
18
19
  :return: 交易参数汇总查询
19
20
  :rtype: pandas.DataFrame
20
21
  """
21
- url = f"https://www.ine.cn/data/instrument/ContractBaseInfo{date}.dat"
22
- params = {
23
- "rnd": "0.8312696798757147"
24
- }
22
+ url = f"https://www.ine.cn/data/busiparamdata/future/ContractBaseInfo{date}.dat"
23
+ params = {"rnd": "0.8312696798757147"}
25
24
  headers = {
26
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
25
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
26
+ "Chrome/119.0.0.0 Safari/537.36"
27
27
  }
28
28
  r = requests.get(url, params=params, headers=headers)
29
29
  data_json = r.json()
30
- temp_df = pd.DataFrame(data_json['ContractBaseInfo'])
31
- temp_df.rename(columns={
32
- 'BASISPRICE': "挂牌基准价",
33
- 'ENDDELIVDATE': "最后交割日",
34
- 'EXPIREDATE': "到期日",
35
- 'INSTRUMENTID': "合约代码",
36
- 'OPENDATE': "上市日",
37
- 'STARTDELIVDATE': "开始交割日",
38
- 'TRADINGDAY': "交易日",
39
- }, inplace=True)
40
- temp_df = temp_df[[
41
- "合约代码",
42
- "上市日",
43
- "到期日",
44
- "开始交割日",
45
- "最后交割日",
46
- "挂牌基准价",
47
- "交易日",
48
- ]]
49
- temp_df['上市日'] = pd.to_datetime(temp_df['上市日'], errors="coerce").dt.date
50
- temp_df['到期日'] = pd.to_datetime(temp_df['到期日'], errors="coerce").dt.date
51
- temp_df['开始交割日'] = pd.to_datetime(temp_df['开始交割日'], errors="coerce").dt.date
52
- temp_df['最后交割日'] = pd.to_datetime(temp_df['最后交割日'], errors="coerce").dt.date
53
- temp_df['交易日'] = pd.to_datetime(temp_df['交易日'], errors="coerce").dt.date
54
- temp_df['挂牌基准价'] = pd.to_numeric(temp_df['挂牌基准价'], errors="coerce")
30
+ temp_df = pd.DataFrame(data_json["ContractBaseInfo"])
31
+ temp_df.rename(
32
+ columns={
33
+ "BASISPRICE": "挂牌基准价",
34
+ "ENDDELIVDATE": "最后交割日",
35
+ "EXPIREDATE": "到期日",
36
+ "INSTRUMENTID": "合约代码",
37
+ "OPENDATE": "上市日",
38
+ "STARTDELIVDATE": "开始交割日",
39
+ "TRADINGDAY": "交易日",
40
+ },
41
+ inplace=True,
42
+ )
43
+ temp_df = temp_df[
44
+ [
45
+ "合约代码",
46
+ "上市日",
47
+ "到期日",
48
+ "开始交割日",
49
+ "最后交割日",
50
+ "挂牌基准价",
51
+ "交易日",
52
+ ]
53
+ ]
54
+ temp_df["上市日"] = pd.to_datetime(temp_df["上市日"], errors="coerce").dt.date
55
+ temp_df["到期日"] = pd.to_datetime(temp_df["到期日"], errors="coerce").dt.date
56
+ temp_df["开始交割日"] = pd.to_datetime(
57
+ temp_df["开始交割日"], errors="coerce"
58
+ ).dt.date
59
+ temp_df["最后交割日"] = pd.to_datetime(
60
+ temp_df["最后交割日"], errors="coerce"
61
+ ).dt.date
62
+ temp_df["交易日"] = pd.to_datetime(temp_df["交易日"], errors="coerce").dt.date
63
+ temp_df["挂牌基准价"] = pd.to_numeric(temp_df["挂牌基准价"], errors="coerce")
55
64
  return temp_df
56
65
 
57
66
 
58
- if __name__ == '__main__':
59
- futures_contract_info_ine_df = futures_contract_info_ine(date="20240227")
67
+ if __name__ == "__main__":
68
+ futures_contract_info_ine_df = futures_contract_info_ine(date="20241129")
60
69
  print(futures_contract_info_ine_df)
@@ -1,59 +1,70 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/2/27 17:00
4
+ Date: 2024/5/13 17:45
5
5
  Desc: 上海期货交易所-交易所服务-业务数据-交易参数汇总查询
6
- https://www.shfe.com.cn/bourseService/businessdata/summaryinquiry/
6
+ https://tsite.shfe.com.cn/bourseService/businessdata/summaryinquiry/
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
11
12
 
12
- def futures_contract_info_shfe(date: str = "20240227") -> pd.DataFrame:
13
+ def futures_contract_info_shfe(date: str = "20240513") -> pd.DataFrame:
13
14
  """
14
15
  上海期货交易所-交易所服务-业务数据-交易参数汇总查询
15
- https://www.shfe.com.cn/bourseService/businessdata/summaryinquiry/
16
+ https://tsite.shfe.com.cn/bourseService/businessdata/summaryinquiry/
16
17
  :param date: 查询日期; 交易日
17
18
  :type date: str
18
19
  :return: 交易参数汇总查询
19
20
  :rtype: pandas.DataFrame
20
21
  """
21
- url = f"https://www.shfe.com.cn/data/instrument/ContractBaseInfo{date}.dat"
22
+ url = f"https://tsite.shfe.com.cn/data/instrument/ContractBaseInfo{date}.dat"
22
23
  headers = {
23
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
24
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
25
+ "Chrome/119.0.0.0 Safari/537.36"
24
26
  }
25
27
  r = requests.get(url, headers=headers)
26
28
  data_json = r.json()
27
- temp_df = pd.DataFrame(data_json['ContractBaseInfo'])
28
- temp_df.rename(columns={
29
- 'BASISPRICE': "挂牌基准价",
30
- 'ENDDELIVDATE': "最后交割日",
31
- 'EXPIREDATE': "到期日",
32
- 'INSTRUMENTID': "合约代码",
33
- 'OPENDATE': "上市日",
34
- 'STARTDELIVDATE': "开始交割日",
35
- 'TRADINGDAY': "交易日",
36
- 'UPDATE_DATE': "更新时间",
37
- }, inplace=True)
38
- temp_df = temp_df[[
39
- "合约代码",
40
- "上市日",
41
- "到期日",
42
- "开始交割日",
43
- "最后交割日",
44
- "挂牌基准价",
45
- "交易日",
46
- "更新时间",
47
- ]]
48
- temp_df['上市日'] = pd.to_datetime(temp_df['上市日'], errors="coerce").dt.date
49
- temp_df['到期日'] = pd.to_datetime(temp_df['到期日'], errors="coerce").dt.date
50
- temp_df['开始交割日'] = pd.to_datetime(temp_df['开始交割日'], errors="coerce").dt.date
51
- temp_df['最后交割日'] = pd.to_datetime(temp_df['最后交割日'], errors="coerce").dt.date
52
- temp_df['交易日'] = pd.to_datetime(temp_df['交易日'], errors="coerce").dt.date
53
- temp_df['挂牌基准价'] = pd.to_numeric(temp_df['挂牌基准价'], errors="coerce")
29
+ temp_df = pd.DataFrame(data_json["ContractBaseInfo"])
30
+ temp_df.rename(
31
+ columns={
32
+ "BASISPRICE": "挂牌基准价",
33
+ "ENDDELIVDATE": "最后交割日",
34
+ "EXPIREDATE": "到期日",
35
+ "INSTRUMENTID": "合约代码",
36
+ "OPENDATE": "上市日",
37
+ "STARTDELIVDATE": "开始交割日",
38
+ "TRADINGDAY": "交易日",
39
+ "UPDATE_DATE": "更新时间",
40
+ },
41
+ inplace=True,
42
+ )
43
+ temp_df = temp_df[
44
+ [
45
+ "合约代码",
46
+ "上市日",
47
+ "到期日",
48
+ "开始交割日",
49
+ "最后交割日",
50
+ "挂牌基准价",
51
+ "交易日",
52
+ "更新时间",
53
+ ]
54
+ ]
55
+ temp_df["上市日"] = pd.to_datetime(temp_df["上市日"], errors="coerce").dt.date
56
+ temp_df["到期日"] = pd.to_datetime(temp_df["到期日"], errors="coerce").dt.date
57
+ temp_df["开始交割日"] = pd.to_datetime(
58
+ temp_df["开始交割日"], errors="coerce"
59
+ ).dt.date
60
+ temp_df["最后交割日"] = pd.to_datetime(
61
+ temp_df["最后交割日"], errors="coerce"
62
+ ).dt.date
63
+ temp_df["交易日"] = pd.to_datetime(temp_df["交易日"], errors="coerce").dt.date
64
+ temp_df["挂牌基准价"] = pd.to_numeric(temp_df["挂牌基准价"], errors="coerce")
54
65
  return temp_df
55
66
 
56
67
 
57
- if __name__ == '__main__':
58
- futures_contract_info_shfe_df = futures_contract_info_shfe(date="20240227")
68
+ if __name__ == "__main__":
69
+ futures_contract_info_shfe_df = futures_contract_info_shfe(date="20240513")
59
70
  print(futures_contract_info_shfe_df)
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/2/25 15:30
5
- Desc: 新浪财经-商品期货-成交持仓
4
+ Date: 2024/12/27 21:00
5
+ Desc: 新浪财经-期货-成交持仓
6
6
  https://vip.stock.finance.sina.com.cn/q/view/vFutures_Positions_cjcc.php
7
7
  """
8
+
8
9
  from io import StringIO
9
10
 
10
11
  import pandas as pd
@@ -12,10 +13,10 @@ import requests
12
13
 
13
14
 
14
15
  def futures_hold_pos_sina(
15
- symbol: str = "成交量", contract: str = "IC2403", date: str = "20240223"
16
+ symbol: str = "成交量", contract: str = "OI2501", date: str = "20240223"
16
17
  ) -> pd.DataFrame:
17
18
  """
18
- 新浪财经-商品期货-成交持仓
19
+ 新浪财经-期货-成交持仓
19
20
  https://vip.stock.finance.sina.com.cn/q/view/vFutures_Positions_cjcc.php
20
21
  :param symbol: choice of {"成交量", "多单持仓", "空单持仓"}
21
22
  :type symbol: str
@@ -26,42 +27,48 @@ def futures_hold_pos_sina(
26
27
  :return: 成交持仓
27
28
  :rtype: pandas.DataFrame
28
29
  """
29
- date = '-'.join([date[:4], date[4:6], date[6:]])
30
- url = "https://vip.stock.finance.sina.com.cn/q/view/vCffex_Positions_cjcc.php"
31
- params = {"symbol": contract, "date": date}
30
+ date = "-".join([date[:4], date[4:6], date[6:]])
31
+ url = "https://vip.stock.finance.sina.com.cn/q/view/vFutures_Positions_cjcc.php"
32
+ params = {"t_breed": contract, "t_date": date}
32
33
  r = requests.get(url, params=params)
33
34
  if symbol == "成交量":
34
35
  temp_df = pd.read_html(StringIO(r.text))[2].iloc[:-1, :]
35
- temp_df['名次'] = pd.to_numeric(temp_df['名次'], errors="coerce")
36
- temp_df['成交量'] = pd.to_numeric(temp_df['成交量'], errors="coerce")
37
- temp_df['比上交易增减'] = pd.to_numeric(temp_df['比上交易增减'], errors="coerce")
36
+ temp_df["名次"] = pd.to_numeric(temp_df["名次"], errors="coerce")
37
+ temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
38
+ temp_df["比上交易增减"] = pd.to_numeric(
39
+ temp_df["比上交易增减"], errors="coerce"
40
+ )
38
41
  return temp_df
39
42
  elif symbol == "多单持仓":
40
43
  temp_df = pd.read_html(StringIO(r.text))[3].iloc[:-1, :]
41
- temp_df['名次'] = pd.to_numeric(temp_df['名次'], errors="coerce")
42
- temp_df['多单持仓'] = pd.to_numeric(temp_df['多单持仓'], errors="coerce")
43
- temp_df['比上交易增减'] = pd.to_numeric(temp_df['比上交易增减'], errors="coerce")
44
+ temp_df["名次"] = pd.to_numeric(temp_df["名次"], errors="coerce")
45
+ temp_df["多单持仓"] = pd.to_numeric(temp_df["多单持仓"], errors="coerce")
46
+ temp_df["比上交易增减"] = pd.to_numeric(
47
+ temp_df["比上交易增减"], errors="coerce"
48
+ )
44
49
  return temp_df
45
50
  elif symbol == "空单持仓":
46
51
  temp_df = pd.read_html(StringIO(r.text))[4].iloc[:-1, :]
47
- temp_df['名次'] = pd.to_numeric(temp_df['名次'], errors="coerce")
48
- temp_df['空单持仓'] = pd.to_numeric(temp_df['空单持仓'], errors="coerce")
49
- 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(
55
+ temp_df["比上交易增减"], errors="coerce"
56
+ )
50
57
  return temp_df
51
58
 
52
59
 
53
60
  if __name__ == "__main__":
54
61
  futures_hold_pos_sina_df = futures_hold_pos_sina(
55
- symbol="成交量", contract="IC2403", date="20240223"
62
+ symbol="成交量", contract="IC2403", date="20240203"
56
63
  )
57
64
  print(futures_hold_pos_sina_df)
58
65
 
59
66
  futures_hold_pos_sina_df = futures_hold_pos_sina(
60
- symbol="多单持仓", contract="IC2403", date="20240223"
67
+ symbol="多单持仓", contract="OI2501", date="20241016"
61
68
  )
62
69
  print(futures_hold_pos_sina_df)
63
70
 
64
71
  futures_hold_pos_sina_df = futures_hold_pos_sina(
65
- symbol="空单持仓", contract="IC2403", date="20240223"
72
+ symbol="空单持仓", contract="OI2501", date="20241016"
66
73
  )
67
74
  print(futures_hold_pos_sina_df)
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/2/24 16:20
4
+ Date: 2024/4/5 20:20
5
5
  Desc: 生意社-商品与期货-现期图
6
6
  https://www.100ppi.com/sf/792.html
7
7
  """
8
+
8
9
  from io import StringIO
9
10
 
10
11
  import pandas as pd
@@ -24,7 +25,11 @@ def __get_sys_spot_futures_dict() -> dict:
24
25
  soup = BeautifulSoup(res.text, features="lxml")
25
26
  temp_item = soup.find(name="div", attrs={"class": "q8"}).find_all("li")
26
27
  name_url_dict = dict(
27
- zip([item.find("a").get_text().strip() for item in temp_item], [item.find("a")["href"] for item in temp_item]))
28
+ zip(
29
+ [item.find("a").get_text().strip() for item in temp_item],
30
+ [item.find("a")["href"] for item in temp_item],
31
+ )
32
+ )
28
33
  return name_url_dict
29
34
 
30
35
 
@@ -44,24 +49,32 @@ def futures_spot_sys(symbol: str = "铜", indicator: str = "市场价格") -> pd
44
49
  r = requests.get("https://www.100ppi.com" + url)
45
50
  if indicator == "市场价格":
46
51
  table_df_one = pd.read_html(StringIO(r.text), header=0, index_col=0)[1].T
47
- table_df_one['现货价格'] = pd.to_numeric(table_df_one['现货价格'], errors="coerce")
48
- table_df_one['主力合约'] = pd.to_numeric(table_df_one['主力合约'], errors="coerce")
49
- table_df_one['最近合约'] = pd.to_numeric(table_df_one['最近合约'], errors="coerce")
52
+ table_df_one["现货价格"] = pd.to_numeric(
53
+ table_df_one["现货价格"], errors="coerce"
54
+ )
55
+ table_df_one["主力合约"] = pd.to_numeric(
56
+ table_df_one["主力合约"], errors="coerce"
57
+ )
58
+ table_df_one["最近合约"] = pd.to_numeric(
59
+ table_df_one["最近合约"], errors="coerce"
60
+ )
50
61
  table_df_one.reset_index(inplace=True)
51
62
  table_df_one.columns.name = None
52
63
  table_df_one.rename(columns={"index": "日期"}, inplace=True)
53
64
  return table_df_one
54
65
  elif indicator == "基差率":
55
66
  table_df_two = pd.read_html(StringIO(r.text), header=0, index_col=0)[2].T
56
- table_df_two['基差率'] = table_df_two['基差率'].str.replace("%", "")
57
- table_df_two['基差率'] = pd.to_numeric(table_df_two['基差率'], errors="coerce")
67
+ table_df_two["基差率"] = table_df_two["基差率"].str.replace("%", "")
68
+ table_df_two["基差率"] = pd.to_numeric(table_df_two["基差率"], errors="coerce")
58
69
  table_df_two.reset_index(inplace=True)
59
70
  table_df_two.columns.name = None
60
71
  table_df_two.rename(columns={"index": "日期"}, inplace=True)
61
72
  return table_df_two
62
73
  else:
63
74
  table_df_three = pd.read_html(StringIO(r.text), header=0, index_col=0)[3].T
64
- table_df_three['主力基差'] = pd.to_numeric(table_df_three['主力基差'], errors="coerce")
75
+ table_df_three["主力基差"] = pd.to_numeric(
76
+ table_df_three["主力基差"], errors="coerce"
77
+ )
65
78
  table_df_three.reset_index(inplace=True)
66
79
  table_df_three.columns.name = None
67
80
  table_df_three.rename(columns={"index": "日期"}, inplace=True)