akshare 1.16.64__py3-none-any.whl → 1.16.65__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. akshare/__init__.py +2 -1
  2. akshare/air/cons.py +1 -0
  3. akshare/air/crypto.js +1 -1
  4. akshare/air/outcrypto.js +1 -1
  5. akshare/article/cons.py +1 -0
  6. akshare/article/epu_index.py +4 -3
  7. akshare/article/ff_factor.py +19 -8
  8. akshare/article/fred_md.py +4 -1
  9. akshare/article/risk_rv.py +3 -8
  10. akshare/bond/bond_cb_sina.py +1 -0
  11. akshare/bond/bond_cbond.py +19 -14
  12. akshare/bond/bond_em.py +34 -15
  13. akshare/bond/bond_summary.py +38 -37
  14. akshare/bond/bond_zh_cov.py +0 -6
  15. akshare/bond/cons.py +14 -11
  16. akshare/crypto/__init__.py +1 -1
  17. akshare/crypto/crypto_bitcoin_cme.py +7 -7
  18. akshare/crypto/crypto_hold.py +4 -1
  19. akshare/currency/currency.py +1 -0
  20. akshare/currency/currency_china_bank_sina.py +6 -3
  21. akshare/data/__init__.py +1 -1
  22. akshare/data/cninfo.js +1 -1
  23. akshare/economic/cons.py +10 -3
  24. akshare/economic/macro_australia.py +0 -7
  25. akshare/economic/macro_canada.py +92 -81
  26. akshare/economic/macro_china.py +0 -34
  27. akshare/economic/macro_china_hk.py +0 -1
  28. akshare/economic/macro_euro.py +103 -56
  29. akshare/economic/macro_germany.py +1 -1
  30. akshare/economic/macro_japan.py +0 -1
  31. akshare/economic/macro_other.py +1 -6
  32. akshare/economic/macro_swiss.py +2 -3
  33. akshare/economic/macro_uk.py +1 -1
  34. akshare/economic/macro_usa.py +0 -2
  35. akshare/energy/energy_carbon.py +0 -1
  36. akshare/energy/energy_oil_em.py +1 -2
  37. akshare/event/cons.py +1 -0
  38. akshare/forex/forex_em.py +0 -1
  39. akshare/fortune/fortune_bloomberg.py +6 -3
  40. akshare/fortune/fortune_forbes_500.py +3 -6
  41. akshare/fortune/fortune_hurun.py +2 -1
  42. akshare/fortune/fortune_xincaifu_500.py +17 -14
  43. akshare/fund/fund_announcement.py +1 -0
  44. akshare/fund/fund_aum_em.py +47 -35
  45. akshare/fund/fund_em.py +0 -7
  46. akshare/fund/fund_etf_em.py +0 -5
  47. akshare/fund/fund_fhsp_em.py +27 -20
  48. akshare/fund/fund_init_em.py +8 -5
  49. akshare/fund/fund_lof_em.py +0 -5
  50. akshare/fund/fund_manager.py +18 -7
  51. akshare/fund/fund_portfolio_em.py +0 -1
  52. akshare/fund/fund_position_lg.py +19 -8
  53. akshare/fund/fund_rank_em.py +0 -3
  54. akshare/fund/fund_rating.py +28 -9
  55. akshare/fund/fund_scale_em.py +24 -13
  56. akshare/futures/futures_comex_em.py +1 -0
  57. akshare/futures/futures_contract_detail.py +11 -8
  58. akshare/futures/futures_inventory_em.py +0 -2
  59. akshare/futures/futures_rule.py +5 -1
  60. akshare/futures/futures_settlement_price_sgx.py +21 -6
  61. akshare/futures/futures_stock_js.py +0 -1
  62. akshare/futures/receipt.py +279 -153
  63. akshare/futures/requests_fun.py +16 -3
  64. akshare/futures_derivative/cons.py +100 -103
  65. akshare/futures_derivative/futures_contract_info_cffex.py +53 -39
  66. akshare/futures_derivative/futures_contract_info_dce.py +16 -9
  67. akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
  68. akshare/futures_derivative/futures_index_sina.py +25 -13
  69. akshare/fx/cons.py +12 -7
  70. akshare/fx/fx_quote.py +1 -0
  71. akshare/fx/fx_quote_baidu.py +2 -1
  72. akshare/hf/__init__.py +1 -1
  73. akshare/hf/hf_sp500.py +8 -7
  74. akshare/index/index_eri.py +1 -0
  75. akshare/index/index_global_em.py +0 -1
  76. akshare/index/index_kq_fz.py +17 -14
  77. akshare/index/index_kq_ss.py +1 -0
  78. akshare/index/index_stock_hk.py +0 -1
  79. akshare/index/index_stock_zh.py +0 -3
  80. akshare/index/index_sugar.py +18 -4
  81. akshare/index/index_zh_em.py +0 -15
  82. akshare/interest_rate/interbank_rate_em.py +0 -1
  83. akshare/movie/jm.js +0 -1
  84. akshare/news/__init__.py +1 -1
  85. akshare/news/news_stock.py +0 -1
  86. akshare/option/option_commodity_sina.py +22 -26
  87. akshare/option/option_daily_stats_sse_szse.py +0 -1
  88. akshare/option/option_em.py +0 -1
  89. akshare/option/option_lhb_em.py +0 -1
  90. akshare/option/option_risk_indicator_sse.py +0 -1
  91. akshare/other/__init__.py +1 -1
  92. akshare/pro/__init__.py +0 -1
  93. akshare/pro/client.py +6 -4
  94. akshare/pro/cons.py +3 -2
  95. akshare/pro/data_pro.py +6 -5
  96. akshare/qhkc/qhkc_api.py +63 -21
  97. akshare/qhkc_web/qhkc_fund.py +1 -0
  98. akshare/qhkc_web/qhkc_index.py +1 -0
  99. akshare/qhkc_web/qhkc_tool.py +55 -54
  100. akshare/rate/__init__.py +1 -1
  101. akshare/rate/repo_rate.py +36 -32
  102. akshare/reits/__init__.py +1 -1
  103. akshare/reits/reits_basic.py +44 -2
  104. akshare/sport/__init__.py +1 -1
  105. akshare/sport/sport_olympic.py +1 -0
  106. akshare/spot/__init__.py +1 -1
  107. akshare/stock/cons.py +19 -12
  108. akshare/stock/stock_board_concept_em.py +0 -6
  109. akshare/stock/stock_board_industry_em.py +0 -6
  110. akshare/stock/stock_dzjy_em.py +1 -1
  111. akshare/stock/stock_fund_em.py +0 -2
  112. akshare/stock/stock_fund_hold.py +1 -2
  113. akshare/stock/stock_gsrl_em.py +1 -0
  114. akshare/stock/stock_hk_famous.py +0 -1
  115. akshare/stock/stock_hk_fhpx_ths.py +2 -1
  116. akshare/stock/stock_hk_hot_rank_em.py +1 -0
  117. akshare/stock/stock_hold_control_em.py +0 -2
  118. akshare/stock/stock_hot_up_em.py +4 -1
  119. akshare/stock/stock_hsgt_em.py +0 -2
  120. akshare/stock/stock_industry.py +1 -0
  121. akshare/stock/stock_info.py +0 -2
  122. akshare/stock/stock_info_em.py +0 -1
  123. akshare/stock/stock_repurchase_em.py +7 -2
  124. akshare/stock/stock_share_hold.py +0 -1
  125. akshare/stock/stock_stop.py +0 -1
  126. akshare/stock/stock_summary.py +0 -2
  127. akshare/stock/stock_us_famous.py +0 -1
  128. akshare/stock/stock_us_js.py +3 -2
  129. akshare/stock/stock_us_pink.py +0 -1
  130. akshare/stock/stock_weibo_nlp.py +18 -20
  131. akshare/stock/stock_zh_a_special.py +0 -3
  132. akshare/stock/stock_zh_a_tick_tx.py +11 -3
  133. akshare/stock_a/stock_board_concept_name_em.py +0 -1
  134. akshare/stock_a/stock_zh_a_spot.py +0 -1
  135. akshare/stock_feature/cons.py +1 -0
  136. akshare/stock_feature/stock_account_em.py +0 -1
  137. akshare/stock_feature/stock_all_pb.py +2 -1
  138. akshare/stock_feature/stock_analyst_em.py +0 -3
  139. akshare/stock_feature/stock_buffett_index_lg.py +7 -6
  140. akshare/stock_feature/stock_classify_sina.py +3 -6
  141. akshare/stock_feature/stock_comment_em.py +0 -2
  142. akshare/stock_feature/stock_congestion_lg.py +2 -1
  143. akshare/stock_feature/stock_dxsyl_em.py +116 -71
  144. akshare/stock_feature/stock_gdzjc_em.py +16 -5
  145. akshare/stock_feature/stock_gxl_lg.py +3 -2
  146. akshare/stock_feature/stock_hist_em.py +0 -20
  147. akshare/stock_feature/stock_hist_tx.py +10 -8
  148. akshare/stock_feature/stock_hot_xq.py +4 -6
  149. akshare/stock_feature/stock_hsgt_em.py +0 -2
  150. akshare/stock_feature/stock_hsgt_exchange_rate.py +0 -2
  151. akshare/stock_feature/stock_hsgt_min_em.py +13 -16
  152. akshare/stock_feature/stock_inner_trade_xq.py +0 -1
  153. akshare/stock_feature/stock_lhb_em.py +0 -1
  154. akshare/stock_feature/stock_margin_em.py +0 -1
  155. akshare/stock_feature/stock_margin_sse.py +0 -2
  156. akshare/stock_feature/stock_pankou_em.py +0 -2
  157. akshare/stock_feature/stock_qsjy_em.py +13 -4
  158. akshare/stock_feature/stock_research_report_em.py +0 -1
  159. akshare/stock_feature/stock_yjyg_cninfo.py +4 -1
  160. akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
  161. akshare/stock_feature/stock_ztb_em.py +0 -6
  162. akshare/stock_fundamental/__init__.py +1 -1
  163. akshare/stock_fundamental/stock_hold.py +26 -17
  164. akshare/stock_fundamental/stock_ipo_declare.py +1 -0
  165. akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
  166. akshare/stock_fundamental/stock_kcb_sse.py +26 -25
  167. akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
  168. akshare/stock_fundamental/stock_recommend.py +20 -4
  169. akshare/utils/demjson.py +2005 -1334
  170. akshare/utils/token_process.py +6 -5
  171. {akshare-1.16.64.dist-info → akshare-1.16.65.dist-info}/METADATA +3 -8
  172. {akshare-1.16.64.dist-info → akshare-1.16.65.dist-info}/RECORD +175 -175
  173. {akshare-1.16.64.dist-info → akshare-1.16.65.dist-info}/WHEEL +0 -0
  174. {akshare-1.16.64.dist-info → akshare-1.16.65.dist-info}/licenses/LICENSE +0 -0
  175. {akshare-1.16.64.dist-info → akshare-1.16.65.dist-info}/top_level.txt +0 -0
@@ -4,6 +4,7 @@
4
4
  Date: 2023/9/15 19:00
5
5
  Desc: 请求网站内容的函数: 在链接失败后可重复 20 次
6
6
  """
7
+
7
8
  from io import StringIO
8
9
  import time
9
10
  from typing import Dict
@@ -12,7 +13,13 @@ import pandas as pd
12
13
  import requests
13
14
 
14
15
 
15
- def requests_link(url: str, encoding: str = "utf-8", method: str = "get", data: Dict = None, headers: Dict = None):
16
+ def requests_link(
17
+ url: str,
18
+ encoding: str = "utf-8",
19
+ method: str = "get",
20
+ data: Dict = None,
21
+ headers: Dict = None,
22
+ ):
16
23
  """
17
24
  利用 requests 请求网站, 爬取网站内容, 如网站链接失败, 可重复爬取 20 次
18
25
  :param url: string 网站地址
@@ -35,7 +42,7 @@ def requests_link(url: str, encoding: str = "utf-8", method: str = "get", data:
35
42
  return r
36
43
  else:
37
44
  raise ValueError("请提供正确的请求方式")
38
- except:
45
+ except: # noqa: E722
39
46
  i += 1
40
47
  print(f"第{str(i)}次链接失败, 最多尝试 20 次")
41
48
  time.sleep(5)
@@ -43,7 +50,13 @@ def requests_link(url: str, encoding: str = "utf-8", method: str = "get", data:
43
50
  return None
44
51
 
45
52
 
46
- def pandas_read_html_link(url: str, encoding: str = "utf-8", method: str = "get", data: Dict = None, headers: Dict = None):
53
+ def pandas_read_html_link(
54
+ url: str,
55
+ encoding: str = "utf-8",
56
+ method: str = "get",
57
+ data: Dict = None,
58
+ headers: Dict = None,
59
+ ):
47
60
  """
48
61
  利用 pandas 提供的 read_html 函数来直接提取网页中的表格内容, 如网站链接失败, 可重复爬取 20 次
49
62
  :param url: string 网站地址
@@ -5,103 +5,105 @@ Date: 2021/8/20 16:13
5
5
  Desc: 期货衍生指标配置文件
6
6
  西本新干线-指数数据
7
7
  """
8
+
8
9
  # xgx
9
10
  symbol_dict = {
10
- '钢材指数': '65',
11
- '铁矿指数': '61',
12
- '焦炭指数': '64',
13
- '煤炭指数': '1002',
14
- '水泥指数': '1003',
15
- 'FTZ指数': '1100',
16
- '钢铁行业PMI指数': '118',
17
- '生产指数': '119',
18
- '新订单指数': '120',
19
- '新出口订单指数': '121',
20
- '产成品库存指数': '122',
21
- '原材料库存指数': '123',
22
- '沪市终端线螺每周采购量监控': '74',
23
- '沪螺纹钢社会库存': '72',
24
- '国内螺纹钢社会库存量': '67',
25
- '国内线材社会库存量': '68',
26
- '国内主要城市热轧卷板库存': '69',
27
- '国内主要城市冷轧卷板库存': '70',
28
- '国内主要城市中厚板库存': '73',
29
- '全国主要钢材品种库存总量': '117',
30
- '热轧价格走势': '108',
31
- '冷轧价格走势': '109',
32
- '中板价格走势': '110',
33
- '型材价格走势': '111',
34
- '沪二级螺纹钢价格走势': '127',
35
- '螺纹钢主力合约收盘价格': '179',
36
- '铁矿石主力合约收盘价格': '180',
37
- '热轧板卷主力合约收盘价格': '181',
38
- '焦煤主力合约收盘价格': '182',
39
- '焦炭主力合约收盘价格': '183',
40
- '存款基准利率': '52',
41
- '贷款基准利率': '53',
42
- '存款准备金率': '105',
43
- '人民币新增贷款(亿元)': '174',
44
- '广义货币供应量增速(M2,%)': '175',
45
- '狭义货币供应量增速(M1,%)': '176',
46
- '上海大额银行承兑汇票(Ⅰ)': '129',
47
- '上海大额银行承兑汇票(Ⅱ)': '130',
48
- '上海大额银行承兑汇票(Ⅲ)': '131',
49
- '上海大额商业承兑汇票(Ⅰ)': '132',
50
- '上海大额商业承兑汇票(II)': '133',
51
- '上海大额商业承兑汇票(III)': '134',
52
- '重点企业粗钢日均产量(旬报)': '99',
53
- '重点企业钢材库存量(旬报)': '124',
54
- '国内月度粗钢日均产量': '159',
55
- '国内月度粗钢产量': '35',
56
- '国内月度钢材产量': '88',
57
- '国内月度螺纹钢产量': '40',
58
- '国内月度线材产量': '41',
59
- '国内月度热轧板卷产量': '114',
60
- '国内月度冷轧板卷产量': '115',
61
- '国内月度中厚板产量': '116',
62
- '国内月度生铁产量': '177',
63
- '国内月度焦炭产量': '37',
64
- '国内月度铁矿石原矿产量': '36',
65
- '国内月度铁矿石进口量': '42',
66
- '国内月度钢材出口量': '38',
67
- '国内月度钢材进口量': '39',
68
- '国内铁矿石港口存量': '43',
69
- '唐山地区钢坯库存量': '161',
70
- '印度矿港口库存': '100',
71
- '波罗的海干散货指数(BDI)': '77',
72
- '废钢价格走势': '78',
73
- '钢坯价格走势': '79',
74
- '钢材成本指数': '178',
75
- '铁矿石进口月度均价': '93',
76
- '巴西图巴朗-北仑铁矿海运价': '94',
77
- '西澳-北仑铁矿海运价': '95',
78
- '澳大利亚粉矿价格(56.5%,日照港)': '1006',
79
- '澳大利亚粉矿价格(61.5%青岛港,元/吨)': '106',
80
- '巴西粉矿价格( 65% 日照港,元/吨)': '107',
81
- '62%铁矿石指数': '125',
82
- '63.5%印度粉矿外盘报价': '126',
83
- '国民生产总值季度增速(GDP)': '166',
84
- '居民消费物价指数(CPI)': '30',
85
- '工业生产者出厂价格指数(PPI)': '165',
86
- '制造业采购经理指数(PMI)': '104',
87
- '月度建筑安装工程投资额': '91',
88
- '月度固定资产投资额': '32',
89
- '月度房地产建设投资额': '34',
90
- '城填固定资产投资增速(累计值,%)': '171',
91
- '房地产开发投资增速(累计值,%)': '167',
92
- '土地购置面积同比增速(累计值,%)': '168',
93
- '房屋新开工面积同比增速(累计值,%)': '169',
94
- '商品房销售面积同比增速(累计值,%)': '170',
95
- '钢铁业固定资产投资增速(累计值,%)': '172',
96
- 'CRU全球': '80',
97
- 'CRU长材': '81',
98
- 'CRU扁平材': '82',
99
- 'CRU北美': '83',
100
- 'CRU欧洲': '84',
101
- 'CRU亚洲': '85',
102
- '全球粗钢月度产量(万吨)': '162',
103
- '全球粗钢日均产量(万吨)': '163',
104
- '全球粗钢产能利用率(%)': '164'}
11
+ "钢材指数": "65",
12
+ "铁矿指数": "61",
13
+ "焦炭指数": "64",
14
+ "煤炭指数": "1002",
15
+ "水泥指数": "1003",
16
+ "FTZ指数": "1100",
17
+ "钢铁行业PMI指数": "118",
18
+ "生产指数": "119",
19
+ "新订单指数": "120",
20
+ "新出口订单指数": "121",
21
+ "产成品库存指数": "122",
22
+ "原材料库存指数": "123",
23
+ "沪市终端线螺每周采购量监控": "74",
24
+ "沪螺纹钢社会库存": "72",
25
+ "国内螺纹钢社会库存量": "67",
26
+ "国内线材社会库存量": "68",
27
+ "国内主要城市热轧卷板库存": "69",
28
+ "国内主要城市冷轧卷板库存": "70",
29
+ "国内主要城市中厚板库存": "73",
30
+ "全国主要钢材品种库存总量": "117",
31
+ "热轧价格走势": "108",
32
+ "冷轧价格走势": "109",
33
+ "中板价格走势": "110",
34
+ "型材价格走势": "111",
35
+ "沪二级螺纹钢价格走势": "127",
36
+ "螺纹钢主力合约收盘价格": "179",
37
+ "铁矿石主力合约收盘价格": "180",
38
+ "热轧板卷主力合约收盘价格": "181",
39
+ "焦煤主力合约收盘价格": "182",
40
+ "焦炭主力合约收盘价格": "183",
41
+ "存款基准利率": "52",
42
+ "贷款基准利率": "53",
43
+ "存款准备金率": "105",
44
+ "人民币新增贷款(亿元)": "174",
45
+ "广义货币供应量增速(M2,%)": "175",
46
+ "狭义货币供应量增速(M1,%)": "176",
47
+ "上海大额银行承兑汇票(Ⅰ)": "129",
48
+ "上海大额银行承兑汇票(Ⅱ)": "130",
49
+ "上海大额银行承兑汇票(Ⅲ)": "131",
50
+ "上海大额商业承兑汇票(Ⅰ)": "132",
51
+ "上海大额商业承兑汇票(II)": "133",
52
+ "上海大额商业承兑汇票(III)": "134",
53
+ "重点企业粗钢日均产量(旬报)": "99",
54
+ "重点企业钢材库存量(旬报)": "124",
55
+ "国内月度粗钢日均产量": "159",
56
+ "国内月度粗钢产量": "35",
57
+ "国内月度钢材产量": "88",
58
+ "国内月度螺纹钢产量": "40",
59
+ "国内月度线材产量": "41",
60
+ "国内月度热轧板卷产量": "114",
61
+ "国内月度冷轧板卷产量": "115",
62
+ "国内月度中厚板产量": "116",
63
+ "国内月度生铁产量": "177",
64
+ "国内月度焦炭产量": "37",
65
+ "国内月度铁矿石原矿产量": "36",
66
+ "国内月度铁矿石进口量": "42",
67
+ "国内月度钢材出口量": "38",
68
+ "国内月度钢材进口量": "39",
69
+ "国内铁矿石港口存量": "43",
70
+ "唐山地区钢坯库存量": "161",
71
+ "印度矿港口库存": "100",
72
+ "波罗的海干散货指数(BDI)": "77",
73
+ "废钢价格走势": "78",
74
+ "钢坯价格走势": "79",
75
+ "钢材成本指数": "178",
76
+ "铁矿石进口月度均价": "93",
77
+ "巴西图巴朗-北仑铁矿海运价": "94",
78
+ "西澳-北仑铁矿海运价": "95",
79
+ "澳大利亚粉矿价格(56.5%,日照港)": "1006",
80
+ "澳大利亚粉矿价格(61.5%青岛港,元/吨)": "106",
81
+ "巴西粉矿价格( 65% 日照港,元/吨)": "107",
82
+ "62%铁矿石指数": "125",
83
+ "63.5%印度粉矿外盘报价": "126",
84
+ "国民生产总值季度增速(GDP)": "166",
85
+ "居民消费物价指数(CPI)": "30",
86
+ "工业生产者出厂价格指数(PPI)": "165",
87
+ "制造业采购经理指数(PMI)": "104",
88
+ "月度建筑安装工程投资额": "91",
89
+ "月度固定资产投资额": "32",
90
+ "月度房地产建设投资额": "34",
91
+ "城填固定资产投资增速(累计值,%)": "171",
92
+ "房地产开发投资增速(累计值,%)": "167",
93
+ "土地购置面积同比增速(累计值,%)": "168",
94
+ "房屋新开工面积同比增速(累计值,%)": "169",
95
+ "商品房销售面积同比增速(累计值,%)": "170",
96
+ "钢铁业固定资产投资增速(累计值,%)": "172",
97
+ "CRU全球": "80",
98
+ "CRU长材": "81",
99
+ "CRU扁平材": "82",
100
+ "CRU北美": "83",
101
+ "CRU欧洲": "84",
102
+ "CRU亚洲": "85",
103
+ "全球粗钢月度产量(万吨)": "162",
104
+ "全球粗钢日均产量(万吨)": "163",
105
+ "全球粗钢产能利用率(%)": "164",
106
+ }
105
107
 
106
108
  xgx_code_url = "http://www.96369.net/Other/ValidateCode.aspx"
107
109
  xgx_main_url = "http://www.96369.net/indices/{}"
@@ -118,7 +120,7 @@ xgx_headers = {
118
120
  "Pragma": "no-cache",
119
121
  "Referer": "http://www.96369.net/indices/67",
120
122
  "Upgrade-Insecure-Requests": "1",
121
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"
123
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36",
122
124
  }
123
125
  xgx_short_headers = {
124
126
  "Accept": "image/webp,image/apng,image/*,*/*;q=0.8",
@@ -129,7 +131,7 @@ xgx_short_headers = {
129
131
  "Host": "www.96369.net",
130
132
  "Pragma": "no-cache",
131
133
  "Referer": "http://www.96369.net/indices/67",
132
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"
134
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36",
133
135
  }
134
136
  # csa
135
137
  csa_params_url = "https://www.jiaoyifamen.com/tools/nav/spread"
@@ -137,9 +139,4 @@ csa_url_spread = "https://www.jiaoyifamen.com/tools/future/spread/free"
137
139
  csa_url_ratio = "https://www.jiaoyifamen.com/tools/future/valence/free"
138
140
  csa_url_customize = "https://www.jiaoyifamen.com/tools/future/customize"
139
141
 
140
- csa_payload = {
141
- "type1": "RB",
142
- "code1": "01",
143
- "type2": "RB",
144
- "code2": "05"
145
- }
142
+ csa_payload = {"type1": "RB", "code1": "01", "type2": "RB", "code2": "05"}
@@ -5,6 +5,7 @@ Date: 2024/2/28 17:00
5
5
  Desc: 中国金融期货交易所-数据-交易参数
6
6
  http://www.cffex.com.cn/jycs/
7
7
  """
8
+
8
9
  import xml.etree.ElementTree as ET
9
10
 
10
11
  import pandas as pd
@@ -28,7 +29,7 @@ def futures_contract_info_cffex(date: str = "20240228") -> pd.DataFrame:
28
29
  tree = ET.ElementTree(ET.fromstring(xml_data))
29
30
  root = tree.getroot()
30
31
  # 获取所有的记录
31
- records = root.findall('.//INDEX')
32
+ records = root.findall(".//INDEX")
32
33
  # 解析数据并填充到列表中
33
34
  data = []
34
35
  for record in records:
@@ -40,47 +41,60 @@ def futures_contract_info_cffex(date: str = "20240228") -> pd.DataFrame:
40
41
  data.append(row_data)
41
42
 
42
43
  temp_df = pd.DataFrame(data)
43
- temp_df.rename(columns={
44
- 'TRADING_DAY': "查询交易日",
45
- 'PRODUCT_ID': "品种",
46
- 'INSTRUMENT_ID': "合约代码",
47
- 'INSTRUMENT_MONTH': "合约月份",
48
- 'BASIS_PRICE': "挂盘基准价",
49
- 'OPEN_DATE': "上市日",
50
- 'END_TRADING_DAY': "最后交易日",
51
- 'UPPER_VALUE': "涨停板幅度",
52
- 'LOWER_VALUE': "跌停板幅度",
53
- 'UPPERLIMITPRICE': "涨停板价位",
54
- 'LOWERLIMITPRICE': "跌停板价位",
55
- 'LONG_LIMIT': "持仓限额"
56
- }, inplace=True)
57
- temp_df['挂盘基准价'] = pd.to_numeric(temp_df['挂盘基准价'], errors="coerce")
58
- temp_df['涨停板价位'] = pd.to_numeric(temp_df['涨停板价位'], errors="coerce")
59
- temp_df['跌停板价位'] = pd.to_numeric(temp_df['跌停板价位'], errors="coerce")
60
- temp_df['持仓限额'] = pd.to_numeric(temp_df['持仓限额'], errors="coerce")
44
+ temp_df.rename(
45
+ columns={
46
+ "TRADING_DAY": "查询交易日",
47
+ "PRODUCT_ID": "品种",
48
+ "INSTRUMENT_ID": "合约代码",
49
+ "INSTRUMENT_MONTH": "合约月份",
50
+ "BASIS_PRICE": "挂盘基准价",
51
+ "OPEN_DATE": "上市日",
52
+ "END_TRADING_DAY": "最后交易日",
53
+ "UPPER_VALUE": "涨停板幅度",
54
+ "LOWER_VALUE": "跌停板幅度",
55
+ "UPPERLIMITPRICE": "涨停板价位",
56
+ "LOWERLIMITPRICE": "跌停板价位",
57
+ "LONG_LIMIT": "持仓限额",
58
+ },
59
+ inplace=True,
60
+ )
61
+ temp_df["挂盘基准价"] = pd.to_numeric(temp_df["挂盘基准价"], errors="coerce")
62
+ temp_df["涨停板价位"] = pd.to_numeric(temp_df["涨停板价位"], errors="coerce")
63
+ temp_df["跌停板价位"] = pd.to_numeric(temp_df["跌停板价位"], errors="coerce")
64
+ temp_df["持仓限额"] = pd.to_numeric(temp_df["持仓限额"], errors="coerce")
61
65
 
62
- temp_df['查询交易日'] = pd.to_datetime(temp_df['查询交易日'], format="%Y%m%d", errors="coerce").dt.date
63
- temp_df['上市日'] = pd.to_datetime(temp_df['上市日'], format="%Y%m%d", errors="coerce").dt.date
64
- temp_df['最后交易日'] = pd.to_datetime(temp_df['最后交易日'], format="%Y%m%d", errors="coerce").dt.date
65
- temp_df['查询交易日'] = pd.to_datetime(temp_df['查询交易日'], format="%Y%m%d", errors="coerce").dt.date
66
- temp_df = temp_df[[
67
- "合约代码",
68
- "合约月份",
69
- "挂盘基准价",
70
- "上市日",
71
- "最后交易日",
72
- "涨停板幅度",
73
- "跌停板幅度",
74
- "涨停板价位",
75
- "跌停板价位",
76
- "持仓限额",
77
- "品种",
78
- "查询交易日",
79
- ]]
80
- temp_df.sort_values(['合约代码'], ascending=False, ignore_index=True, inplace=True)
66
+ temp_df["查询交易日"] = pd.to_datetime(
67
+ temp_df["查询交易日"], format="%Y%m%d", errors="coerce"
68
+ ).dt.date
69
+ temp_df["上市日"] = pd.to_datetime(
70
+ temp_df["上市日"], format="%Y%m%d", errors="coerce"
71
+ ).dt.date
72
+ temp_df["最后交易日"] = pd.to_datetime(
73
+ temp_df["最后交易日"], format="%Y%m%d", errors="coerce"
74
+ ).dt.date
75
+ temp_df["查询交易日"] = pd.to_datetime(
76
+ temp_df["查询交易日"], format="%Y%m%d", errors="coerce"
77
+ ).dt.date
78
+ temp_df = temp_df[
79
+ [
80
+ "合约代码",
81
+ "合约月份",
82
+ "挂盘基准价",
83
+ "上市日",
84
+ "最后交易日",
85
+ "涨停板幅度",
86
+ "跌停板幅度",
87
+ "涨停板价位",
88
+ "跌停板价位",
89
+ "持仓限额",
90
+ "品种",
91
+ "查询交易日",
92
+ ]
93
+ ]
94
+ temp_df.sort_values(["合约代码"], ascending=False, ignore_index=True, inplace=True)
81
95
  return temp_df
82
96
 
83
97
 
84
- if __name__ == '__main__':
98
+ if __name__ == "__main__":
85
99
  futures_contract_info_cffex_df = futures_contract_info_cffex(date="20240228")
86
100
  print(futures_contract_info_cffex_df)
@@ -5,6 +5,7 @@ Date: 2024/2/28 11:00
5
5
  Desc: 大连商品交易所-业务/服务-业务参数-交易参数-合约信息查询
6
6
  http://www.dce.com.cn/dalianshangpin/ywfw/ywcs/jycs/hyxxcx/index.html
7
7
  """
8
+
8
9
  from io import StringIO
9
10
 
10
11
  import pandas as pd
@@ -20,20 +21,26 @@ def futures_contract_info_dce() -> pd.DataFrame:
20
21
  """
21
22
  url = "http://www.dce.com.cn/publicweb/businessguidelines/queryContractInfo.html"
22
23
  params = {
23
- 'contractInformation.variety': 'all',
24
- 'contractInformation.trade_type': '0',
24
+ "contractInformation.variety": "all",
25
+ "contractInformation.trade_type": "0",
25
26
  }
26
27
  r = requests.post(url, params=params)
27
28
  temp_df = pd.read_html(StringIO(r.text))[0]
28
- temp_df['交易单位'] = pd.to_numeric(temp_df['交易单位'], errors="coerce")
29
- temp_df['最小变动价位'] = pd.to_numeric(temp_df['最小变动价位'], errors="coerce")
30
- temp_df['最小变动价位'] = pd.to_numeric(temp_df['最小变动价位'], errors="coerce")
31
- temp_df['开始交易日'] = pd.to_datetime(temp_df['开始交易日'], format="%Y%m%d", errors="coerce").dt.date
32
- temp_df['最后交易日'] = pd.to_datetime(temp_df['最后交易日'], format="%Y%m%d", errors="coerce").dt.date
33
- temp_df['最后交割日'] = pd.to_datetime(temp_df['最后交割日'], format="%Y%m%d", errors="coerce").dt.date
29
+ temp_df["交易单位"] = pd.to_numeric(temp_df["交易单位"], errors="coerce")
30
+ temp_df["最小变动价位"] = pd.to_numeric(temp_df["最小变动价位"], errors="coerce")
31
+ temp_df["最小变动价位"] = pd.to_numeric(temp_df["最小变动价位"], errors="coerce")
32
+ temp_df["开始交易日"] = pd.to_datetime(
33
+ temp_df["开始交易日"], format="%Y%m%d", errors="coerce"
34
+ ).dt.date
35
+ temp_df["最后交易日"] = pd.to_datetime(
36
+ temp_df["最后交易日"], format="%Y%m%d", errors="coerce"
37
+ ).dt.date
38
+ temp_df["最后交割日"] = pd.to_datetime(
39
+ temp_df["最后交割日"], format="%Y%m%d", errors="coerce"
40
+ ).dt.date
34
41
  return temp_df
35
42
 
36
43
 
37
- if __name__ == '__main__':
44
+ if __name__ == "__main__":
38
45
  futures_contract_info_dce_df = futures_contract_info_dce()
39
46
  print(futures_contract_info_dce_df)
@@ -5,6 +5,7 @@ Date: 2024/2/28 16:00
5
5
  Desc: 广州期货交易所-业务/服务-合约信息
6
6
  http://www.gfex.com.cn/gfex/hyxx/ywcs.shtml
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -16,45 +17,56 @@ def futures_contract_info_gfex() -> pd.DataFrame:
16
17
  :return: 交易参数汇总查询
17
18
  :rtype: pandas.DataFrame
18
19
  """
19
- url = f"http://www.gfex.com.cn/u/interfacesWebTtQueryContractInfo/loadList"
20
+ url = "http://www.gfex.com.cn/u/interfacesWebTtQueryContractInfo/loadList"
20
21
  params = {
21
- 'variety': '',
22
- 'trade_type': '0',
22
+ "variety": "",
23
+ "trade_type": "0",
23
24
  }
24
25
  headers = {
25
- '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'
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"
26
27
  }
27
28
  r = requests.post(url, params=params, headers=headers)
28
29
  data_json = r.json()
29
- temp_df = pd.DataFrame(data_json['data'])
30
- temp_df.rename(columns={
31
- 'tradeType': "-",
32
- 'variety': "品种",
33
- 'varietyOrder': "-",
34
- 'contractId': "合约代码",
35
- 'unit': "交易单位",
36
- 'tick': "最小变动单位",
37
- 'startTradeDate': "开始交易日",
38
- 'endTradeDate': "最后交易日",
39
- 'endDeliveryDate0': "最后交割日",
40
- }, inplace=True)
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_datetime(temp_df['开始交易日'], format="%Y%m%d", errors="coerce").dt.date
44
- temp_df['最后交易日'] = pd.to_datetime(temp_df['最后交易日'], format="%Y%m%d", errors="coerce").dt.date
45
- temp_df['最后交割日'] = pd.to_datetime(temp_df['最后交割日'], format="%Y%m%d", errors="coerce").dt.date
46
- temp_df = temp_df[[
47
- "品种",
48
- "合约代码",
49
- "交易单位",
50
- "最小变动单位",
51
- "开始交易日",
52
- "最后交易日",
53
- "最后交割日",
54
- ]]
30
+ temp_df = pd.DataFrame(data_json["data"])
31
+ temp_df.rename(
32
+ columns={
33
+ "tradeType": "-",
34
+ "variety": "品种",
35
+ "varietyOrder": "-",
36
+ "contractId": "合约代码",
37
+ "unit": "交易单位",
38
+ "tick": "最小变动单位",
39
+ "startTradeDate": "开始交易日",
40
+ "endTradeDate": "最后交易日",
41
+ "endDeliveryDate0": "最后交割日",
42
+ },
43
+ inplace=True,
44
+ )
45
+ temp_df["交易单位"] = pd.to_numeric(temp_df["交易单位"], errors="coerce")
46
+ temp_df["最小变动单位"] = pd.to_numeric(temp_df["最小变动单位"], errors="coerce")
47
+ temp_df["开始交易日"] = pd.to_datetime(
48
+ temp_df["开始交易日"], format="%Y%m%d", errors="coerce"
49
+ ).dt.date
50
+ temp_df["最后交易日"] = pd.to_datetime(
51
+ temp_df["最后交易日"], format="%Y%m%d", errors="coerce"
52
+ ).dt.date
53
+ temp_df["最后交割日"] = pd.to_datetime(
54
+ temp_df["最后交割日"], format="%Y%m%d", errors="coerce"
55
+ ).dt.date
56
+ temp_df = temp_df[
57
+ [
58
+ "品种",
59
+ "合约代码",
60
+ "交易单位",
61
+ "最小变动单位",
62
+ "开始交易日",
63
+ "最后交易日",
64
+ "最后交割日",
65
+ ]
66
+ ]
55
67
  return temp_df
56
68
 
57
69
 
58
- if __name__ == '__main__':
70
+ if __name__ == "__main__":
59
71
  futures_contract_info_gfex_df = futures_contract_info_gfex()
60
72
  print(futures_contract_info_gfex_df)
@@ -5,6 +5,7 @@ Date: 2024/3/1 23:00
5
5
  Desc: 新浪财经-期货的主力合约数据
6
6
  https://finance.sina.com.cn/futuremarket/index.shtml
7
7
  """
8
+
8
9
  from io import StringIO
9
10
 
10
11
  import pandas as pd
@@ -30,7 +31,9 @@ def zh_subscribe_exchange_symbol(symbol: str = "dce") -> pd.DataFrame:
30
31
  r = requests.get(zh_subscribe_exchange_symbol_url)
31
32
  r.encoding = "gb2312"
32
33
  data_text = r.text
33
- data_json = demjson.decode(data_text[data_text.find("{"): data_text.find("};") + 1])
34
+ data_json = demjson.decode(
35
+ data_text[data_text.find("{") : data_text.find("};") + 1]
36
+ )
34
37
  if symbol == "czce":
35
38
  data_json["czce"].remove("郑州商品交易所")
36
39
  return pd.DataFrame(data_json["czce"])
@@ -68,14 +71,14 @@ def match_main_contract(symbol: str = "shfe") -> pd.DataFrame:
68
71
  data_df = pd.DataFrame(data_json)
69
72
  try:
70
73
  main_contract = data_df[
71
- data_df["name"].str.contains("连续")
72
- & data_df["symbol"]
73
- .str.extract(r"([\w])(\d)")
74
- .iloc[:, 1]
75
- .str.contains("0")
76
- ].iloc[0, :3]
74
+ data_df["name"].str.contains("连续")
75
+ & data_df["symbol"]
76
+ .str.extract(r"([\w])(\d)")
77
+ .iloc[:, 1]
78
+ .str.contains("0")
79
+ ].iloc[0, :3]
77
80
  subscribe_list.append(main_contract)
78
- except:
81
+ except: # noqa: E722
79
82
  # print(item, "无主力连续合约")
80
83
  continue
81
84
  # print("主力连续合约获取成功")
@@ -98,9 +101,9 @@ def futures_display_main_sina() -> pd.DataFrame:
98
101
 
99
102
 
100
103
  def futures_main_sina(
101
- symbol: str = "V0",
102
- start_date: str = "19900101",
103
- end_date: str = "22220101",
104
+ symbol: str = "V0",
105
+ start_date: str = "19900101",
106
+ end_date: str = "22220101",
104
107
  ) -> pd.DataFrame:
105
108
  """
106
109
  新浪财经-期货-主力连续日数据
@@ -119,9 +122,18 @@ def futures_main_sina(
119
122
  url = f"https://stock2.finance.sina.com.cn/futures/api/jsonp.php/var%20_{symbol}{trade_date}=/InnerFuturesNewService.getDailyKLine?symbol={symbol}&_={trade_date}"
120
123
  r = requests.get(url)
121
124
  data_text = r.text
122
- data_json = data_text[data_text.find("([") + 1: data_text.rfind("])") + 1]
125
+ data_json = data_text[data_text.find("([") + 1 : data_text.rfind("])") + 1]
123
126
  temp_df = pd.read_json(StringIO(data_json))
124
- temp_df.columns = ["日期", "开盘价", "最高价", "最低价", "收盘价", "成交量", "持仓量", "动态结算价"]
127
+ temp_df.columns = [
128
+ "日期",
129
+ "开盘价",
130
+ "最高价",
131
+ "最低价",
132
+ "收盘价",
133
+ "成交量",
134
+ "持仓量",
135
+ "动态结算价",
136
+ ]
125
137
  temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
126
138
  temp_df.set_index(keys=["日期"], inplace=True)
127
139
  temp_df.index = pd.to_datetime(temp_df.index)