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,18 +1,19 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/1/23 16:00
4
+ Date: 2024/3/20 16:00
5
5
  Desc: 新浪财经-国内期货-实时数据获取
6
- http://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_3
6
+ https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_3
7
7
  P.S. 注意采集速度, 容易封禁 IP, 如果不能访问请稍后再试
8
8
  """
9
+
9
10
  import json
10
11
  import time
11
12
  from functools import lru_cache
12
13
 
13
14
  import pandas as pd
14
15
  import requests
15
- from py_mini_racer import py_mini_racer
16
+ import py_mini_racer
16
17
 
17
18
  from akshare.futures.cons import (
18
19
  zh_subscribe_exchange_symbol_url,
@@ -27,15 +28,17 @@ from akshare.utils import demjson
27
28
  def futures_symbol_mark() -> pd.DataFrame:
28
29
  """
29
30
  期货的品种和代码映射
30
- http://vip.stock.finance.sina.com.cn/quotes_service/view/js/qihuohangqing.js
31
+ https://vip.stock.finance.sina.com.cn/quotes_service/view/js/qihuohangqing.js
31
32
  :return: 期货的品种和代码映射
32
33
  :rtype: pandas.DataFrame
33
34
  """
34
- url = "http://vip.stock.finance.sina.com.cn/quotes_service/view/js/qihuohangqing.js"
35
+ url = (
36
+ "https://vip.stock.finance.sina.com.cn/quotes_service/view/js/qihuohangqing.js"
37
+ )
35
38
  r = requests.get(url)
36
39
  r.encoding = "gb2312"
37
40
  data_text = r.text
38
- raw_json = data_text[data_text.find("{"): data_text.find("}") + 1]
41
+ raw_json = data_text[data_text.find("{") : data_text.find("}") + 1]
39
42
  data_json = demjson.decode(raw_json)
40
43
  czce_mark_list = [item[1] for item in data_json["czce"][1:]]
41
44
  dce_mark_list = [item[1] for item in data_json["dce"][1:]]
@@ -43,11 +46,11 @@ def futures_symbol_mark() -> pd.DataFrame:
43
46
  cffex_mark_list = [item[1] for item in data_json["cffex"][1:]]
44
47
  gfex_mark_list = [item[1] for item in data_json["gfex"][1:]]
45
48
  all_mark_list = (
46
- czce_mark_list
47
- + dce_mark_list
48
- + shfe_mark_list
49
- + cffex_mark_list
50
- + gfex_mark_list
49
+ czce_mark_list
50
+ + dce_mark_list
51
+ + shfe_mark_list
52
+ + cffex_mark_list
53
+ + gfex_mark_list
51
54
  )
52
55
 
53
56
  czce_market_name_list = [data_json["czce"][0]] * len(czce_mark_list)
@@ -56,11 +59,11 @@ def futures_symbol_mark() -> pd.DataFrame:
56
59
  cffex_market_name_list = [data_json["cffex"][0]] * len(cffex_mark_list)
57
60
  gfex_market_name_list = [data_json["gfex"][0]] * len(gfex_mark_list)
58
61
  all_market_name_list = (
59
- czce_market_name_list
60
- + dce_market_name_list
61
- + shfe_market_name_list
62
- + cffex_market_name_list
63
- + gfex_market_name_list
62
+ czce_market_name_list
63
+ + dce_market_name_list
64
+ + shfe_market_name_list
65
+ + cffex_market_name_list
66
+ + gfex_market_name_list
64
67
  )
65
68
 
66
69
  czce_symbol_list = [item[0] for item in data_json["czce"][1:]]
@@ -69,11 +72,11 @@ def futures_symbol_mark() -> pd.DataFrame:
69
72
  cffex_symbol_list = [item[0] for item in data_json["cffex"][1:]]
70
73
  gfex_symbol_list = [item[0] for item in data_json["gfex"][1:]]
71
74
  all_symbol_list = (
72
- czce_symbol_list
73
- + dce_symbol_list
74
- + shfe_symbol_list
75
- + cffex_symbol_list
76
- + gfex_symbol_list
75
+ czce_symbol_list
76
+ + dce_symbol_list
77
+ + shfe_symbol_list
78
+ + cffex_symbol_list
79
+ + gfex_symbol_list
77
80
  )
78
81
 
79
82
  temp_df = pd.DataFrame([all_market_name_list, all_symbol_list, all_mark_list]).T
@@ -88,7 +91,7 @@ def futures_symbol_mark() -> pd.DataFrame:
88
91
  def futures_zh_realtime(symbol: str = "白糖") -> pd.DataFrame:
89
92
  """
90
93
  期货品种当前时刻所有可交易的合约实时数据
91
- http://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_1
94
+ https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_1
92
95
  :param symbol: 品种名称;可以通过 ak.futures_symbol_mark() 获取所有品种命名表
93
96
  :type symbol: str
94
97
  :return: 期货品种当前时刻所有可交易的合约实时数据
@@ -98,7 +101,7 @@ def futures_zh_realtime(symbol: str = "白糖") -> pd.DataFrame:
98
101
  symbol_mark_map = dict(
99
102
  zip(_futures_symbol_mark_df["symbol"], _futures_symbol_mark_df["mark"])
100
103
  )
101
- url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQFuturesData"
104
+ url = "https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQFuturesData"
102
105
  params = {
103
106
  "page": "1",
104
107
  "sort": "position",
@@ -127,14 +130,16 @@ def futures_zh_realtime(symbol: str = "白糖") -> pd.DataFrame:
127
130
  temp_df["changepercent"] = pd.to_numeric(temp_df["changepercent"], errors="coerce")
128
131
  temp_df["bid"] = pd.to_numeric(temp_df["bid"], errors="coerce")
129
132
  temp_df["ask"] = pd.to_numeric(temp_df["ask"], errors="coerce")
130
- temp_df["prevsettlement"] = pd.to_numeric(temp_df["prevsettlement"], errors="coerce")
133
+ temp_df["prevsettlement"] = pd.to_numeric(
134
+ temp_df["prevsettlement"], errors="coerce"
135
+ )
131
136
  return temp_df
132
137
 
133
138
 
134
139
  def zh_subscribe_exchange_symbol(symbol: str = "cffex") -> pd.DataFrame:
135
140
  """
136
141
  交易所具体的可交易品种
137
- http://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_1
142
+ https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_1
138
143
  :param symbol: choice of {'czce', 'dce', 'shfe', 'cffex', 'gfex'}
139
144
  :type symbol: str
140
145
  :return: 交易所具体的可交易品种
@@ -144,7 +149,7 @@ def zh_subscribe_exchange_symbol(symbol: str = "cffex") -> pd.DataFrame:
144
149
  r.encoding = "gbk"
145
150
  data_text = r.text
146
151
  data_json = demjson.decode(
147
- data_text[data_text.find("{"): data_text.find("};") + 1]
152
+ data_text[data_text.find("{") : data_text.find("};") + 1]
148
153
  )
149
154
  if symbol == "czce":
150
155
  data_json["czce"].remove("郑州商品交易所")
@@ -166,7 +171,7 @@ def zh_subscribe_exchange_symbol(symbol: str = "cffex") -> pd.DataFrame:
166
171
  def match_main_contract(symbol: str = "cffex") -> str:
167
172
  """
168
173
  新浪财经-期货-主力合约
169
- http://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_1
174
+ https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_1
170
175
  :param symbol: choice of {'czce', 'dce', 'shfe', 'cffex', 'gfex'}
171
176
  :type symbol: str
172
177
  :return: 主力合约的字符串
@@ -186,7 +191,7 @@ def match_main_contract(symbol: str = "cffex") -> str:
186
191
  main_contract = data_df[data_df.iloc[:, 3:].duplicated()]
187
192
  print(main_contract["symbol"].values[0])
188
193
  subscribe_exchange_list.append(main_contract["symbol"].values[0])
189
- except:
194
+ except: # noqa: E722
190
195
  if len(data_df) == 1:
191
196
  subscribe_exchange_list.append(data_df["symbol"].values[0])
192
197
  print(data_df["symbol"].values[0])
@@ -198,9 +203,9 @@ def match_main_contract(symbol: str = "cffex") -> str:
198
203
 
199
204
 
200
205
  def futures_zh_spot(
201
- symbol: str = "V2309",
202
- market: str = "CF",
203
- adjust: str = "0",
206
+ symbol: str = "V2309",
207
+ market: str = "CF",
208
+ adjust: str = "0",
204
209
  ) -> pd.DataFrame:
205
210
  """
206
211
  期货的实时行情数据
@@ -227,8 +232,9 @@ def futures_zh_spot(
227
232
  "Host": "hq.sinajs.cn",
228
233
  "Pragma": "no-cache",
229
234
  "Proxy-Connection": "keep-alive",
230
- "Referer": "http://vip.stock.finance.sina.com.cn/",
231
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36",
235
+ "Referer": "https://vip.stock.finance.sina.com.cn/",
236
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
237
+ "Chrome/97.0.4692.71 Safari/537.36",
232
238
  }
233
239
  r = requests.get(url, headers=headers)
234
240
  data_df = pd.DataFrame(
@@ -307,7 +313,9 @@ def futures_zh_spot(
307
313
  data_df["open"] = pd.to_numeric(data_df["open"], errors="coerce")
308
314
  data_df["high"] = pd.to_numeric(data_df["high"], errors="coerce")
309
315
  data_df["low"] = pd.to_numeric(data_df["low"], errors="coerce")
310
- data_df["current_price"] = pd.to_numeric(data_df["current_price"], errors="coerce")
316
+ data_df["current_price"] = pd.to_numeric(
317
+ data_df["current_price"], errors="coerce"
318
+ )
311
319
  data_df["bid_price"] = pd.to_numeric(data_df["bid_price"], errors="coerce")
312
320
  data_df["ask_price"] = pd.to_numeric(data_df["ask_price"], errors="coerce")
313
321
  data_df["buy_vol"] = pd.to_numeric(data_df["buy_vol"], errors="coerce")
@@ -315,8 +323,12 @@ def futures_zh_spot(
315
323
  data_df["hold"] = pd.to_numeric(data_df["hold"], errors="coerce")
316
324
  data_df["volume"] = pd.to_numeric(data_df["volume"], errors="coerce")
317
325
  data_df["avg_price"] = pd.to_numeric(data_df["avg_price"], errors="coerce")
318
- data_df["last_close"] = pd.to_numeric(data_df["last_close"], errors="coerce")
319
- data_df["last_settle_price"] = pd.to_numeric(data_df["last_settle_price"], errors="coerce")
326
+ data_df["last_close"] = pd.to_numeric(
327
+ data_df["last_close"], errors="coerce"
328
+ )
329
+ data_df["last_settle_price"] = pd.to_numeric(
330
+ data_df["last_settle_price"], errors="coerce"
331
+ )
320
332
  data_df.dropna(subset=["current_price"], ignore_index=True, inplace=True)
321
333
  return data_df
322
334
  else:
@@ -391,7 +403,9 @@ def futures_zh_spot(
391
403
  data_df["open"] = pd.to_numeric(data_df["open"], errors="coerce")
392
404
  data_df["high"] = pd.to_numeric(data_df["high"], errors="coerce")
393
405
  data_df["low"] = pd.to_numeric(data_df["low"], errors="coerce")
394
- data_df["current_price"] = pd.to_numeric(data_df["current_price"], errors="coerce")
406
+ data_df["current_price"] = pd.to_numeric(
407
+ data_df["current_price"], errors="coerce"
408
+ )
395
409
  data_df["hold"] = pd.to_numeric(data_df["hold"], errors="coerce")
396
410
  data_df["volume"] = pd.to_numeric(data_df["volume"], errors="coerce")
397
411
  data_df["amount"] = pd.to_numeric(data_df["amount"], errors="coerce")
@@ -431,7 +445,7 @@ def futures_zh_spot(
431
445
  "_",
432
446
  "_",
433
447
  ]
434
- except:
448
+ except: # noqa: E722
435
449
  data_df.columns = [
436
450
  "symbol",
437
451
  "time",
@@ -501,7 +515,9 @@ def futures_zh_spot(
501
515
  data_df["open"] = pd.to_numeric(data_df["open"], errors="coerce")
502
516
  data_df["high"] = pd.to_numeric(data_df["high"], errors="coerce")
503
517
  data_df["low"] = pd.to_numeric(data_df["low"], errors="coerce")
504
- data_df["current_price"] = pd.to_numeric(data_df["current_price"], errors="coerce")
518
+ data_df["current_price"] = pd.to_numeric(
519
+ data_df["current_price"], errors="coerce"
520
+ )
505
521
  data_df["bid_price"] = pd.to_numeric(data_df["bid_price"], errors="coerce")
506
522
  data_df["ask_price"] = pd.to_numeric(data_df["ask_price"], errors="coerce")
507
523
  data_df["buy_vol"] = pd.to_numeric(data_df["buy_vol"], errors="coerce")
@@ -509,8 +525,12 @@ def futures_zh_spot(
509
525
  data_df["hold"] = pd.to_numeric(data_df["hold"], errors="coerce")
510
526
  data_df["volume"] = pd.to_numeric(data_df["volume"], errors="coerce")
511
527
  data_df["avg_price"] = pd.to_numeric(data_df["avg_price"], errors="coerce")
512
- data_df["last_close"] = pd.to_numeric(data_df["last_close"], errors="coerce")
513
- data_df["last_settle_price"] = pd.to_numeric(data_df["last_settle_price"], errors="coerce")
528
+ data_df["last_close"] = pd.to_numeric(
529
+ data_df["last_close"], errors="coerce"
530
+ )
531
+ data_df["last_settle_price"] = pd.to_numeric(
532
+ data_df["last_settle_price"], errors="coerce"
533
+ )
514
534
  data_df.dropna(subset=["current_price"], ignore_index=True, inplace=True)
515
535
  return data_df
516
536
  else:
@@ -582,7 +602,9 @@ def futures_zh_spot(
582
602
  data_df["open"] = pd.to_numeric(data_df["open"], errors="coerce")
583
603
  data_df["high"] = pd.to_numeric(data_df["high"], errors="coerce")
584
604
  data_df["low"] = pd.to_numeric(data_df["low"], errors="coerce")
585
- data_df["current_price"] = pd.to_numeric(data_df["current_price"], errors="coerce")
605
+ data_df["current_price"] = pd.to_numeric(
606
+ data_df["current_price"], errors="coerce"
607
+ )
586
608
  data_df["hold"] = pd.to_numeric(data_df["hold"], errors="coerce")
587
609
  data_df["volume"] = pd.to_numeric(data_df["volume"], errors="coerce")
588
610
  data_df["amount"] = pd.to_numeric(data_df["amount"], errors="coerce")
@@ -626,17 +648,20 @@ def futures_zh_minute_sina(symbol: str = "IF2008", period: str = "5") -> pd.Data
626
648
  return temp_df
627
649
 
628
650
 
629
- def futures_zh_daily_sina(symbol: str = "V2306") -> pd.DataFrame:
651
+ def futures_zh_daily_sina(symbol: str = "RB0") -> pd.DataFrame:
630
652
  """
631
653
  中国各品种期货日频率数据
632
654
  https://finance.sina.com.cn/futures/quotes/V2105.shtml
633
655
  :param symbol: 可以通过 match_main_contract(symbol="cffex") 获取, 或者访问网页获取
634
656
  :type symbol: str
635
- :return: 指定 symbol 和 period 的数据
657
+ :return: 指定 symbol 的数据
636
658
  :rtype: pandas.DataFrame
637
659
  """
638
660
  date = "20210412"
639
- url = "https://stock2.finance.sina.com.cn/futures/api/jsonp.php/var%20_V21052021_4_12=/InnerFuturesNewService.getDailyKLine"
661
+ url = (
662
+ "https://stock2.finance.sina.com.cn/futures/api/jsonp.php/var%20_V21052021_4_12="
663
+ "/InnerFuturesNewService.getDailyKLine"
664
+ )
640
665
  params = {
641
666
  "symbol": symbol,
642
667
  "type": "_".join([date[:4], date[4:6], date[6:]]),
@@ -667,9 +692,7 @@ if __name__ == "__main__":
667
692
  match_main_contract_df = match_main_contract(symbol="gfex")
668
693
  print(match_main_contract_df)
669
694
 
670
- futures_zh_spot_df = futures_zh_spot(
671
- symbol="V2405,V2409", market="CF", adjust="0"
672
- )
695
+ futures_zh_spot_df = futures_zh_spot(symbol="V2405,V2409", market="CF", adjust="0")
673
696
  print(futures_zh_spot_df)
674
697
 
675
698
  futures_zh_spot_df = futures_zh_spot(symbol="V2405", market="CF", adjust="0")
@@ -684,10 +707,10 @@ if __name__ == "__main__":
684
707
  futures_zh_minute_sina_df = futures_zh_minute_sina(symbol="SI2406", period="1")
685
708
  print(futures_zh_minute_sina_df)
686
709
 
687
- futures_zh_daily_sina_df = futures_zh_daily_sina(symbol="SI2406")
710
+ futures_zh_daily_sina_df = futures_zh_daily_sina(symbol="RB0")
688
711
  print(futures_zh_daily_sina_df)
689
712
 
690
- futures_zh_daily_sina_df = futures_zh_daily_sina(symbol="SI2406")
713
+ futures_zh_daily_sina_df = futures_zh_daily_sina(symbol="RB2410")
691
714
  print(futures_zh_daily_sina_df)
692
715
 
693
716
  dce_text = match_main_contract(symbol="dce")
@@ -1,9 +1,10 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/8/8 20:58
4
+ Date: 2024/11/28 22:00
5
5
  Desc: 期货品种映射表
6
6
  """
7
+
7
8
  import re
8
9
 
9
10
  from akshare.futures import cons
@@ -151,18 +152,20 @@ def chinese_to_english(chinese_var: str):
151
152
  "低硫燃料油仓库",
152
153
  "低硫燃料油厂库",
153
154
  "短纤",
154
- '涤纶短纤',
155
- '生猪',
156
- '花生',
157
- '工业硅',
158
- '氧化铝',
159
- '丁二烯橡胶',
160
- '碳酸锂',
161
- '氧化铝仓库',
162
- '氧化铝厂库',
163
- '烧碱',
164
- '丁二烯橡胶仓库',
165
- '丁二烯橡胶厂库',
155
+ "涤纶短纤",
156
+ "生猪",
157
+ "花生",
158
+ "工业硅",
159
+ "氧化铝",
160
+ "丁二烯橡胶",
161
+ "碳酸锂",
162
+ "氧化铝仓库",
163
+ "氧化铝厂库",
164
+ "烧碱",
165
+ "丁二烯橡胶仓库",
166
+ "丁二烯橡胶厂库",
167
+ "PX",
168
+ "原木",
166
169
  ]
167
170
  english_list = [
168
171
  "RU",
@@ -277,6 +280,8 @@ def chinese_to_english(chinese_var: str):
277
280
  "SH",
278
281
  "BR",
279
282
  "BR",
283
+ "PX",
284
+ "LG",
280
285
  ]
281
286
  pos = chinese_list.index(chinese_var)
282
287
  return english_list[pos]
@@ -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)