akshare 1.16.29__py3-none-any.whl → 1.16.30__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.
akshare/__init__.py CHANGED
@@ -3038,9 +3038,10 @@ amac_manager_cancelled_info # 中国证券投资基金业协会-信息公示-诚
3038
3038
  1.16.27 fix: fix futures_global_em interface
3039
3039
  1.16.28 fix: fix futures_global_hist_em interface
3040
3040
  1.16.29 fix: fix futures_global_hist_em interface
3041
+ 1.16.30 add: add forex_hist_em interface
3041
3042
  """
3042
3043
 
3043
- __version__ = "1.16.29"
3044
+ __version__ = "1.16.30"
3044
3045
  __author__ = "AKFamily"
3045
3046
 
3046
3047
  import sys
@@ -3062,6 +3063,11 @@ if sys.version_info < (3, 9):
3062
3063
 
3063
3064
  del sys
3064
3065
 
3066
+ """
3067
+ 东方财富网-行情中心-外汇市场-所有汇率
3068
+ """
3069
+ from akshare.forex.forex_em import forex_hist_em, forex_spot_em
3070
+
3065
3071
  """
3066
3072
  东方财富网-行情中心-沪深港通
3067
3073
  """
File without changes
akshare/forex/cons.py ADDED
@@ -0,0 +1,192 @@
1
+ symbol_market_map = {
2
+ "EURCNYC": 120,
3
+ "JPYZAR": 119,
4
+ "NZDCNYC": 120,
5
+ "CNYRUBC": 120,
6
+ "AUDCNYC": 120,
7
+ "JPYGBP": 119,
8
+ "JPYSGD": 119,
9
+ "JPYCNH": 133,
10
+ "JPYAUD": 119,
11
+ "USDBRL": 119,
12
+ "JPYEUR": 119,
13
+ "JPYTRY": 119,
14
+ "JPYCAD": 119,
15
+ "CHFZAR": 119,
16
+ "JPYHKD": 119,
17
+ "SEKEUR": 119,
18
+ "JPYUSD": 119,
19
+ "GBPCNYC": 120,
20
+ "JPYNZD": 119,
21
+ "CHFGBP": 119,
22
+ "USDIDR": 119,
23
+ "CHFSGD": 119,
24
+ "USDPLN": 119,
25
+ "CHFCNH": 133,
26
+ "SEKUSD": 119,
27
+ "CHFAUD": 119,
28
+ "USDKRW": 119,
29
+ "EURPLN": 119,
30
+ "USDHUF": 119,
31
+ "CHFCAD": 119,
32
+ "USDTHB": 119,
33
+ "CHFEUR": 119,
34
+ "JPYCNYC": 120,
35
+ "EURHUF": 119,
36
+ "CHFHKD": 119,
37
+ "SGDCNYC": 120,
38
+ "CHFUSD": 119,
39
+ "USDINR": 119,
40
+ "USDCZK": 119,
41
+ "CHFNZD": 119,
42
+ "USDMXN": 119,
43
+ "GBPPLN": 119,
44
+ "USDZAR": 119,
45
+ "JPYCHF": 119,
46
+ "EURCZK": 119,
47
+ "EURZAR": 119,
48
+ "CADCNYC": 120,
49
+ "NOKEUR": 119,
50
+ "NZDGBP": 119,
51
+ "NOKUSD": 119,
52
+ "NZDSGD": 119,
53
+ "USDGBP": 119,
54
+ "HKDGBP": 119,
55
+ "NZDCNH": 133,
56
+ "NZDAUD": 119,
57
+ "HKDSGD": 119,
58
+ "CNYSARC": 120,
59
+ "USDSGD": 119,
60
+ "CNYAEDC": 120,
61
+ "EURGBP": 119,
62
+ "CADGBP": 119,
63
+ "USDCNH": 133,
64
+ "CNYTRYC": 120,
65
+ "CADSGD": 119,
66
+ "USDAUD": 119,
67
+ "GBPZAR": 119,
68
+ "EURSGD": 119,
69
+ "HKDCNH": 133,
70
+ "NZDCAD": 119,
71
+ "CADCNH": 133,
72
+ "HKDAUD": 119,
73
+ "NZDEUR": 119,
74
+ "EURCNH": 133,
75
+ "EURAUD": 119,
76
+ "NZDHKD": 119,
77
+ "CADAUD": 119,
78
+ "AUDGBP": 119,
79
+ "USDDKK": 119,
80
+ "HKDCAD": 119,
81
+ "USDCAD": 119,
82
+ "AUDSGD": 119,
83
+ "USDTRY": 119,
84
+ "EURTRY": 119,
85
+ "USDEUR": 119,
86
+ "NZDUSD": 119,
87
+ "SGDGBP": 119,
88
+ "USDHKD": 119,
89
+ "AUDCNH": 133,
90
+ "EURDKK": 119,
91
+ "USDARS": 119,
92
+ "USDSAR": 119,
93
+ "TRYUSD": 119,
94
+ "TRYEUR": 119,
95
+ "SARUSD": 119,
96
+ "INRUSD": 119,
97
+ "HUFUSD": 119,
98
+ "HUFEUR": 119,
99
+ "HKDUSD": 119,
100
+ "HKDEUR": 119,
101
+ "HKDCNYC": 120,
102
+ "EURCAD": 119,
103
+ "DKKUSD": 119,
104
+ "DKKEUR": 119,
105
+ "CNYMOPC": 120,
106
+ "CNHSGD": 133,
107
+ "CNHGBP": 133,
108
+ "CNHAUD": 133,
109
+ "CADEUR": 119,
110
+ "SGDCNH": 133,
111
+ "EURHKD": 119,
112
+ "CADHKD": 119,
113
+ "USDCNYC": 120,
114
+ "GBPSGD": 119,
115
+ "EURUSD": 119,
116
+ "SGDAUD": 119,
117
+ "HKDNZD": 119,
118
+ "USDNZD": 119,
119
+ "GBPCNH": 133,
120
+ "CADUSD": 119,
121
+ "AUDCAD": 119,
122
+ "CNYTHBC": 120,
123
+ "CNHEUR": 133,
124
+ "GBPAUD": 119,
125
+ "AUDEUR": 119,
126
+ "CADNZD": 119,
127
+ "EURNZD": 119,
128
+ "CNHCAD": 133,
129
+ "AUDHKD": 119,
130
+ "SGDCAD": 119,
131
+ "AUDUSD": 119,
132
+ "SGDEUR": 119,
133
+ "CNHHKD": 133,
134
+ "GBPCAD": 119,
135
+ "CNHUSD": 133,
136
+ "SGDHKD": 119,
137
+ "GBPEUR": 119,
138
+ "SGDUSD": 119,
139
+ "AUDNZD": 119,
140
+ "GBPHKD": 119,
141
+ "GBPUSD": 119,
142
+ "CNHNZD": 133,
143
+ "CHFCNYC": 120,
144
+ "SGDNZD": 119,
145
+ "ZARGBP": 119,
146
+ "USDNOK": 119,
147
+ "GBPNZD": 119,
148
+ "CZKEUR": 119,
149
+ "EURNOK": 119,
150
+ "CHFJPY": 119,
151
+ "NZDCHF": 119,
152
+ "PLNGBP": 119,
153
+ "HKDCHF": 119,
154
+ "ZARUSD": 119,
155
+ "USDCHF": 119,
156
+ "ZAREUR": 119,
157
+ "MXNUSD": 119,
158
+ "EURCHF": 119,
159
+ "CADCHF": 119,
160
+ "CZKUSD": 119,
161
+ "CNYKRWC": 120,
162
+ "CNHCHF": 133,
163
+ "AUDCHF": 119,
164
+ "PLNEUR": 119,
165
+ "CNYMXNC": 120,
166
+ "SGDCHF": 119,
167
+ "PLNUSD": 119,
168
+ "USDSEK": 119,
169
+ "GBPCHF": 119,
170
+ "EURSEK": 119,
171
+ "CNYMYRC": 120,
172
+ "NZDJPY": 119,
173
+ "ZARCHF": 119,
174
+ "USDJPY": 119,
175
+ "THBUSD": 119,
176
+ "HKDJPY": 119,
177
+ "EURJPY": 119,
178
+ "CADJPY": 119,
179
+ "AUDJPY": 119,
180
+ "TRYJPY": 119,
181
+ "CNHJPY": 133,
182
+ "SGDJPY": 119,
183
+ "GBPJPY": 119,
184
+ "CNYZARC": 120,
185
+ "ZARJPY": 119,
186
+ "USDRUB": 119,
187
+ "CNYDKKC": 120,
188
+ "CNYNOKC": 120,
189
+ "CNYHUFC": 120,
190
+ "CNYPLNC": 120,
191
+ "CNYSEKC": 120,
192
+ }
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2025/3/6 17:00
5
+ Desc: 东方财富网-行情中心-外汇市场-所有汇率
6
+ https://quote.eastmoney.com/center/gridlist.html#forex_all
7
+ """
8
+
9
+ import pandas as pd
10
+ import requests
11
+
12
+ from akshare.forex.cons import symbol_market_map
13
+
14
+
15
+ def forex_spot_em() -> pd.DataFrame:
16
+ """
17
+ 东方财富网-行情中心-外汇市场-所有汇率-实时行情数据
18
+ https://quote.eastmoney.com/center/gridlist.html#forex_all
19
+ :return: 实时行情数据
20
+ :rtype: pandas.DataFrame
21
+ """
22
+ url = "https://push2.eastmoney.com/api/qt/clist/get"
23
+ params = {
24
+ "np": "2",
25
+ "fltt": "1",
26
+ "invt": "2",
27
+ "fs": "m:119,m:120,m:133",
28
+ "fields": "f12,f13,f14,f1,f2,f4,f3,f152,f17,f18,f15,f16",
29
+ "fid": "f3",
30
+ "pn": "1",
31
+ "pz": "20000",
32
+ "po": "1",
33
+ "dect": "1",
34
+ "ut": "fa5fd1943c7b386f172d6893dbfba10b",
35
+ "wbp2u": "|0|0|0|web",
36
+ "_": "1741252811876",
37
+ }
38
+ r = requests.get(url, params=params)
39
+ data_json = r.json()
40
+ temp_df = pd.DataFrame(data_json["data"]["diff"]).T
41
+ temp_df.reset_index(inplace=True)
42
+ temp_df["index"] = temp_df["index"].astype(int) + 1
43
+ temp_df.rename(
44
+ columns={
45
+ "index": "序号",
46
+ "f12": "代码",
47
+ "f14": "名称",
48
+ "f17": "最新价",
49
+ "f4": "涨跌额",
50
+ "f3": "涨跌幅",
51
+ "f2": "今开",
52
+ "f15": "最高",
53
+ "f16": "最低",
54
+ "f18": "昨收",
55
+ },
56
+ inplace=True,
57
+ )
58
+ temp_df = temp_df[
59
+ [
60
+ "序号",
61
+ "代码",
62
+ "名称",
63
+ "最新价",
64
+ "涨跌额",
65
+ "涨跌幅",
66
+ "今开",
67
+ "最高",
68
+ "最低",
69
+ "昨收",
70
+ ]
71
+ ]
72
+ temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce") / 10000
73
+ temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce") / 10000
74
+ temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce") / 100
75
+ temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce") / 10000
76
+ temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce") / 10000
77
+ temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce") / 10000
78
+ temp_df["昨收"] = pd.to_numeric(temp_df["昨收"], errors="coerce") / 10000
79
+ return temp_df
80
+
81
+
82
+ def forex_hist_em(symbol: str = "USDCNH") -> pd.DataFrame:
83
+ """
84
+ 东方财富网-行情中心-外汇市场-所有汇率-历史行情数据
85
+ https://quote.eastmoney.com/cnyrate/EURCNYC.html
86
+ :param symbol: 品种代码;可以通过 ak.forex_spot_em() 来获取所有可获取历史行情数据的品种代码
87
+ :type symbol: str
88
+ :return: 历史行情数据
89
+ :rtype: pandas.DataFrame
90
+ """
91
+ url = "https://push2his.eastmoney.com/api/qt/stock/kline/get"
92
+ market_code = symbol_market_map[symbol]
93
+ params = {
94
+ "secid": f"{market_code}.{symbol}",
95
+ "klt": "101",
96
+ "fqt": "1",
97
+ "lmt": "50000",
98
+ "end": "20500000",
99
+ "iscca": "1",
100
+ "fields1": "f1,f2,f3,f4,f5,f6,f7,f8",
101
+ "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64",
102
+ "ut": "f057cbcbce2a86e2866ab8877db1d059",
103
+ "forcect": 1,
104
+ }
105
+ r = requests.get(url, params=params)
106
+ data_json = r.json()
107
+ temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["klines"]])
108
+ temp_df["code"] = data_json["data"]["code"]
109
+ temp_df["name"] = data_json["data"]["name"]
110
+ temp_df.columns = [
111
+ "日期",
112
+ "今开",
113
+ "最新价",
114
+ "最高",
115
+ "最低",
116
+ "-",
117
+ "-",
118
+ "振幅",
119
+ "-",
120
+ "-",
121
+ "-",
122
+ "-",
123
+ "-",
124
+ "-",
125
+ "代码",
126
+ "名称",
127
+ ]
128
+ temp_df = temp_df[
129
+ [
130
+ "日期",
131
+ "代码",
132
+ "名称",
133
+ "今开",
134
+ "最新价",
135
+ "最高",
136
+ "最低",
137
+ "振幅",
138
+ ]
139
+ ]
140
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
141
+ temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce")
142
+ temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
143
+ temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
144
+ temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
145
+ temp_df["振幅"] = pd.to_numeric(temp_df["振幅"], errors="coerce")
146
+ return temp_df
147
+
148
+
149
+ if __name__ == "__main__":
150
+ forex_spot_em_df = forex_spot_em()
151
+ print(forex_spot_em_df)
152
+
153
+ forex_hist_em_df = forex_hist_em(symbol="USDCNH")
154
+ print(forex_hist_em_df)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: akshare
3
- Version: 1.16.29
3
+ Version: 1.16.30
4
4
  Summary: AKShare is an elegant and simple financial data interface library for Python, built for human beings!
5
5
  Home-page: https://github.com/akfamily/akshare
6
6
  Author: AKFamily
@@ -51,18 +51,15 @@ Dynamic: requires-python
51
51
  Dynamic: summary
52
52
 
53
53
  **欢迎加入专注于财经数据和量化投资的知识社区,获取《AKShare-财经数据宝典》,其汇集了财经数据的使用经验和指南,还独家分享了
54
- 众多国内外财经数据源的使用和注意事项,请点击[了解更多](https://akshare.akfamily.xyz/learn.html)**
54
+ 众多国内外财经数据源的使用和注意事项,请点击[了解更多](https://akshare.akfamily.xyz/learn.html)**。
55
55
 
56
56
  **量化投研视频课程:《PyBroker-入门及实战》已经上架!《PyBroker-进阶及实战》正在更新!**
57
57
 
58
58
  **更多视频教程已经发布:《AKShare-初阶-使用教学》、《AKShare-初阶-实战应用》、《AKShare-源码解析》、《开源项目巡礼》**,
59
59
  详情请关注【数据科学实战】公众号,查看更多课程信息!
60
60
 
61
- **AKQuant 量化教程请访问:[利用 PyBroker 进行量化投资](https://akquant.akfamily.xyz/)**
62
-
63
- **本次发布 [AKTools](https://github.com/akfamily/aktools) 作为 AKShare 的 HTTP API 版本,
64
- 突破 Python 语言的限制,欢迎各位小伙伴试用并提出更好的意见或建议!
65
- 点击 [AKTools](https://github.com/akfamily/aktools) 查看使用指南。另外提供 [awesome-data](https://github.com/akfamily/awesome-data) 方便各位小伙伴查询各种数据源。**
61
+ **广告推广**:期魔方是一款非常专业本地化期货量化终端,无需部署或搭建环境,可直接调用及时和历史数据做回测实盘,
62
+ 支持开箱即用的机器学习训练,策略投研、回测均免费,详情请[访问期魔方官网](https://qmfquant.com)
66
63
 
67
64
  ![AKShare Logo](https://github.com/akfamily/akshare/blob/main/assets/images/akshare_logo.jpg)
68
65
 
@@ -1,4 +1,4 @@
1
- akshare/__init__.py,sha256=0nKkoBzlF340MgMYFgSBYV8fmLvgWMDXYhA6G_cKozY,189642
1
+ akshare/__init__.py,sha256=yyFyybj9VQj7GkQeYNwV8viJh4-w6cNxTuICIwFoJAc,189811
2
2
  akshare/datasets.py,sha256=rKuRNZrqi6IMsZ9nyvO3Rx02js0tH3zMLjz8HQNAoPQ,963
3
3
  akshare/exceptions.py,sha256=WEJjIhSmJ_xXNW6grwV4nufE_cfmmyuhmueVGiN1VAg,878
4
4
  akshare/request.py,sha256=HtFFf9MhfEibR-ETWe-1Tts6ELU4VKSqA-ghaXjegQM,4252
@@ -75,6 +75,9 @@ akshare/event/cons.py,sha256=y9Go4OC7H-M4R03uEWcV_llvA91_4r-avtzWyphuSks,12390
75
75
  akshare/event/migration.py,sha256=2lR3D_XHRlOKiarBSbjQVEIm3Spj5hbZIwDOvcyKsEU,3760
76
76
  akshare/file_fold/__init__.py,sha256=RMTf1bT5EOE3ttWpn3hGu1LtUmsVxDoa0W7W0gXHOy8,81
77
77
  akshare/file_fold/calendar.json,sha256=t25_O-jatjQOzR6KmSQdPhZMY85yV_hr9_wq26u7jWo,119773
78
+ akshare/forex/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
+ akshare/forex/cons.py,sha256=62e0ogTbuanOtrw79swGCuygsabJsUqvWdsEwQFJMJA,3659
80
+ akshare/forex/forex_em.py,sha256=XBOg6DTpMMl-0IVqWjJa-hUG3Jz6ZeDEbUjd5SbS1vY,4785
78
81
  akshare/fortune/__init__.py,sha256=4OCuVKMykUB3Ubm8WogA814U5EGLdrexmfTAOcBnYM4,82
79
82
  akshare/fortune/fortune_500.py,sha256=QqF3dLdDiCcSoDxsyEgJf8CHu72Ppsu7u0EajbXr6mg,3197
80
83
  akshare/fortune/fortune_bloomberg.py,sha256=i5HqnICYXKmwy3rOvMLDzJPDJA_am8imKsXzNlLLU6g,3673
@@ -383,8 +386,8 @@ akshare/utils/token_process.py,sha256=K4rGXjh_tgugbRcyOK2h2x0jP3PT65IIK7nxhUKhOe
383
386
  akshare/utils/tqdm.py,sha256=MuPNwcswkOGjwWQOMWXi9ZvQ_RmW4obCWRj2i7HM7FE,847
384
387
  tests/__init__.py,sha256=gNzhlO0UPjFq6Ieb38kaVIODXv4cTDByrdohAZnDYt4,82
385
388
  tests/test_func.py,sha256=j1MGYbZI2if2j_LY1S4FLsf4qfq4NwVqD5wmRlv5Log,832
386
- akshare-1.16.29.dist-info/LICENSE,sha256=mmSZCPgfHiVw34LXuFArd-SUgQtBJ_QsIlh-kWlDHfs,1073
387
- akshare-1.16.29.dist-info/METADATA,sha256=RWyZ6eGQqJw6yAxLc7GyPWNLJYW6pjHFfbwRxsfjupE,13847
388
- akshare-1.16.29.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
389
- akshare-1.16.29.dist-info/top_level.txt,sha256=jsf9ZzZPmHaISTVumQPsAw7vv7Yv-PdEVW70SMEelQQ,14
390
- akshare-1.16.29.dist-info/RECORD,,
389
+ akshare-1.16.30.dist-info/LICENSE,sha256=mmSZCPgfHiVw34LXuFArd-SUgQtBJ_QsIlh-kWlDHfs,1073
390
+ akshare-1.16.30.dist-info/METADATA,sha256=wNQp0vLs1f4cQ6hoS45VC7KdNDiyzqqz0sB7ISBcmyE,13650
391
+ akshare-1.16.30.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
392
+ akshare-1.16.30.dist-info/top_level.txt,sha256=jsf9ZzZPmHaISTVumQPsAw7vv7Yv-PdEVW70SMEelQQ,14
393
+ akshare-1.16.30.dist-info/RECORD,,