cmesdata 1.2.2__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.
cmesdata/__init__.py ADDED
@@ -0,0 +1 @@
1
+ from cmesdata.stock import *
cmesdata/stock.py ADDED
@@ -0,0 +1,266 @@
1
+
2
+ import os
3
+ from datetime import datetime, timedelta
4
+ import pandas as pd
5
+ import traceback
6
+ debug = 0
7
+ if debug == 1:
8
+ from third.maths import Jsp_API
9
+ else:
10
+ from cmesdata.third.maths import Jsp_API
11
+ print("国内外历史高频股票期货等数据下载前往“cmes-data.com”网站获取")
12
+ print("--------------------")
13
+
14
+ import requests
15
+
16
+ bTest = 0
17
+
18
+ dat = pd.DataFrame()
19
+ time_close1 = datetime.strptime("11:33:00", '%H:%M:%S')
20
+ time_open1 = datetime.strptime("9:30:00", '%H:%M:%S')
21
+ time_close2 = datetime.strptime("15:03:00", '%H:%M:%S')
22
+ time_open2 = datetime.strptime("13:00:00", '%H:%M:%S')
23
+
24
+ bLogin = False
25
+ api = Jsp_API()
26
+ str_bg = "cmes-data.com"
27
+ token = ""
28
+
29
+ def print_info():
30
+ if debug == 1:
31
+ traceback.print_exc()
32
+ print("入参格式错误,或时间超限,请检查!")
33
+
34
+
35
+ def get_time():
36
+ global bLogin
37
+ strt = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
38
+ if strt > str_bg:
39
+ bLogin = False
40
+ return strt
41
+
42
+ def login(token_str):
43
+ global token, str_bg, bLogin
44
+ token = token_str
45
+ # 将内容转换为字符串列表
46
+ if debug == 1:
47
+ url = f"http://127.0.0.1:5000/api/interface/auth"
48
+ else:
49
+ url = f"https://cmes-data.com:8080/api/api/interface/auth"
50
+ payload = {
51
+ "token": token ,
52
+ "type": "a_gu"
53
+ }
54
+
55
+ bLogin = False
56
+ str_token, str_tokens, str_bg = "", "", ""
57
+ response = requests.post(url, json=payload)
58
+ data = response.json()
59
+ if response.status_code == 200:
60
+ if data.get('success') == True and 'data' in data:
61
+ autu_token = data['data'].get('autu_token')
62
+ str_token = autu_token.split(':')[0]
63
+ str_tokens = autu_token.split(':')[1]
64
+ str_bg = data['data'].get('autu_url')
65
+ api.connect(str_token, int(str_tokens))
66
+ bLogin = True
67
+ return 1
68
+ else:
69
+ if data.get('error') == None:
70
+ print("连接失败,请稍后重试")
71
+ else:
72
+ print(data.get('error'))
73
+ return 0
74
+ else:
75
+ if data.get('error') == None:
76
+ print("连接失败,请稍后重试")
77
+ else:
78
+ print(data.get('error'))
79
+ return 0
80
+
81
+ def Init():
82
+ if bLogin == False:
83
+ print("请先使用token登录")
84
+ return False
85
+ return bLogin
86
+
87
+ def __select_market_code(code):
88
+ code = str(code)
89
+ if '.' in code:
90
+ if code.split('.')[0] == 'SZ':
91
+ return 0
92
+ elif code.split('.')[0] == 'SH':
93
+ return 1
94
+ else:
95
+ return 2
96
+ else:
97
+ if code[0] in ['5', '6', '9'] or code[:3] in ["009", "126", "110", "201", "202", "203", "204"]:
98
+ return 1
99
+ if code[0] in ['8']:
100
+ return 2
101
+ return 0
102
+
103
+ def __select_code(code):
104
+ code = str(code)
105
+ if '.' in code:
106
+ return code.split('.')[1]
107
+ else:
108
+ return code
109
+
110
+ def get_code(market):
111
+ list_df = []
112
+ i = 0
113
+ if market == 1:
114
+ i = 1000
115
+ while 1:
116
+ df = api.to_df(api.get_security_list(market, i))
117
+ if len(df) <= 1 :
118
+ break
119
+
120
+ if len(df) > 0:
121
+ df00 = df[df['code'].str[:2] == '00']
122
+ df30 = df[df['code'].str[:2] == '30'] #300开头获取不到
123
+ df60 = df[df['code'].str[:2] == '60']
124
+ df68 = df[df['code'].str[:2] == '68']
125
+
126
+ list_df.append(df00)
127
+ list_df.append(df30)
128
+ list_df.append(df60)
129
+ list_df.append(df68)
130
+
131
+ i = i + 1000
132
+ df = ''
133
+ if len(list_df) > 0:
134
+ df = pd.concat(list_df)
135
+ df = df.drop(['volunit', 'decimal_point'], axis=1)
136
+ df = df.reset_index(drop=True)
137
+ return df
138
+
139
+ def get_history_data(code, start_date, end_date, period, index=False):
140
+ try:
141
+ if (not Init()):
142
+ return pd.DataFrame()
143
+ periodDic = {'1min' : 8, '5min': 0, '15min': 1, '30min': 2, '60min': 3, 'D': 4, 'W': 5, 'M': 6}
144
+
145
+ date1 = datetime.strptime(start_date, "%Y-%m-%d")
146
+ date2 = datetime.now()
147
+ # 计算日期差异
148
+ n = (date2 - date1).days + 1
149
+
150
+ date_list = []
151
+ for i in range(n):
152
+ if index == False:
153
+ df_tem = api.to_df(api.get_security_bars(periodDic[period], __select_market_code(code), __select_code(code), i * 800, 800))
154
+ else:
155
+ df_tem = api.to_df(api.get_index_bars(periodDic[period], __select_market_code(code), __select_code(code), i * 800, 800))
156
+ if df_tem.empty:
157
+ break
158
+ time_tem = df_tem.iloc[0].loc['datetime']
159
+ time2 = datetime.strptime(time_tem, "%Y-%m-%d %H:%M")
160
+
161
+ date_list.insert(0, df_tem)
162
+
163
+ if time2 < date1:
164
+ break
165
+
166
+ data = pd.concat(date_list)
167
+
168
+ if data.empty:
169
+ return data
170
+
171
+ end_date = datetime.strptime(end_date, '%Y-%m-%d')
172
+ new_time = end_date + timedelta(days=1)
173
+ end_date = new_time.strftime('%Y-%m-%d')
174
+
175
+ data = data[(data['datetime'] >= start_date) & (data['datetime'] <= end_date)]
176
+ data = data[['datetime', 'open', 'high', 'low', 'close', 'vol', 'amount']]
177
+ data['datetime'] = data['datetime'] + ':00'
178
+ data = data.reset_index(drop=True)
179
+ data.loc[data['vol'] < 0.1, 'vol'] = 0
180
+ data.loc[data['amount'] < 0.1, 'amount'] = 0
181
+ data.columns = ['时间', '开盘价', '最高价', '最低价', '收盘价', '成交量', '成交额']
182
+ return data
183
+ except:
184
+ print_info()
185
+ return pd.DataFrame()
186
+
187
+ def get_index_data(code, start_date, end_date, period):
188
+ return get_history_data(code, start_date, end_date, period, index=True)
189
+
190
+ def get_real_hq(all_stock):
191
+ if len(all_stock) > 80 or not Init():
192
+ return pd.DataFrame()
193
+
194
+ list_all = []
195
+ for c in all_stock:
196
+ list_all.append((__select_market_code(c), __select_code(c)))
197
+ stocks = api.get_security_quotes(list_all)
198
+ if stocks == None:
199
+ print("传入参数中有代码错误或停盘的股票,请剔除")
200
+ return pd.DataFrame()
201
+ combined_df = pd.DataFrame(stocks)
202
+ combined_df = combined_df.drop(
203
+ ['market', 'active1', 'reversed_bytes0', 'reversed_bytes1',
204
+ 'cur_vol', 'reversed_bytes2', 'reversed_bytes3', 'reversed_bytes4', 'reversed_bytes5',
205
+ 'reversed_bytes6', 'reversed_bytes7', 'reversed_bytes8', 'reversed_bytes9',
206
+ 'active2'], axis=1)
207
+
208
+ time_str = get_time()
209
+ combined_df['servertime'] = time_str
210
+
211
+ if time_str < time_open1 or time_str > time_close2 or (time_str > time_close1 and time_str < time_open2):
212
+ return pd.DataFrame()
213
+ combined_df.columns = ['代码', '价格','昨收价','开盘价','最高价','最低价', '时间', '成交量', '成交额', '总卖', '总买', '买一价', '卖一价', '买一量',
214
+ '卖一量',
215
+ '买二价', '卖二价', '买二量', '卖二量', '买三价', '卖三价', '买三量', '卖三量', '买四价',
216
+ '卖四价', '买四量', '卖四量', '买五价', '卖五价', '买五量', '卖五量', ]
217
+ return combined_df
218
+
219
+ def get_real_kzz(all_stock):
220
+ df = get_real_hq(all_stock)
221
+ if df.empty:
222
+ return df
223
+
224
+ df['价格'] = df['价格'] * 0.01
225
+ df['昨收价'] = df['昨收价'] * 0.01
226
+ df['开盘价'] = df['开盘价'] * 0.01
227
+ df['最高价'] = df['最高价'] * 0.01
228
+ df['最低价'] = df['最低价'] * 0.01
229
+ df['买一价'] = df['买一价'] * 0.01
230
+ df['买二价'] = df['买二价'] * 0.01
231
+ df['买三价'] = df['买三价'] * 0.01
232
+ df['买四价'] = df['买四价'] * 0.01
233
+ df['买五价'] = df['买五价'] * 0.01
234
+ df['卖一价'] = df['卖一价'] * 0.01
235
+ df['卖二价'] = df['卖二价'] * 0.01
236
+ df['卖三价'] = df['卖三价'] * 0.01
237
+ df['卖四价'] = df['卖四价'] * 0.01
238
+ df['卖五价'] = df['卖五价'] * 0.01
239
+ return df
240
+
241
+ def get_tick(code, date):
242
+ if not Init():
243
+ return pd.DataFrame()
244
+ date = datetime.strptime(date, '%Y-%m-%d')
245
+ date = int(date.strftime("%Y%m%d"))
246
+ df1 = api.to_df(api.get_history_transaction_data(__select_market_code(code), __select_code(code), 0, 5000, date))
247
+ df2 = api.to_df(api.get_history_transaction_data(__select_market_code(code), __select_code(code), 2000, 5000, date))
248
+ df3 = api.to_df(api.get_history_transaction_data(__select_market_code(code), __select_code(code), 4000, 5000, date))
249
+ df = pd.concat([df3, df2, df1], ignore_index=True)
250
+ df.columns = ['时间', '价格', '成交量', '买卖方向']
251
+
252
+ return df
253
+
254
+
255
+ #--------------------------
256
+
257
+
258
+
259
+ ###########
260
+
261
+
262
+
263
+
264
+
265
+
266
+
@@ -0,0 +1,3 @@
1
+ #更多国内外历史行情数据访问网址:cmes-data.com
2
+
3
+