mns-common 1.5.0.9__py3-none-any.whl → 1.5.1.1__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 mns-common might be problematic. Click here for more details.

@@ -43,5 +43,5 @@ def stock_em_zt_pool_df(date):
43
43
 
44
44
 
45
45
  if __name__ == '__main__':
46
- df = stock_em_zt_pool_df('2024-09-04')
46
+ df = stock_em_zt_pool_df('2025-10-24')
47
47
  print(df)
@@ -244,8 +244,6 @@ def sync_stock_gdfx_free_top_10_one_day(str_day):
244
244
  logger.info('同步所有股票股东列表完成:{}', str_day)
245
245
 
246
246
 
247
- from datetime import datetime
248
-
249
247
  if __name__ == '__main__':
250
248
  get_stock_gdfx_free_top_10_em('20250930', '300697')
251
249
  now_date_test = datetime.now()
@@ -140,7 +140,8 @@ def convert_statistics(stat):
140
140
  # 获取实时行情涨停列表
141
141
  def get_real_time_zt_info():
142
142
  real_time_df = em_real_time_quotes_api.get_real_time_quotes_now(None, None)
143
- real_time_df_zt = real_time_df.loc[real_time_df['chg'] > common_service_fun_api.ZT_CHG]
143
+ real_time_df_zt = real_time_df.loc[
144
+ (real_time_df['chg'] > common_service_fun_api.ZT_CHG) & (real_time_df['wei_bi'] == 100)]
144
145
  if data_frame_util.is_empty(real_time_df_zt):
145
146
  return pd.DataFrame()
146
147
  real_time_df_zt = real_time_df_zt[[
@@ -197,24 +198,83 @@ def get_now_zt_pool_with_reason(str_day):
197
198
  real_time_zt_df = get_real_time_zt_info()
198
199
  # 昨日涨停列表
199
200
  last_trade_zt = zt_common_service_api.get_last_trade_day_zt(str_day)
200
- # 东方财富涨停列表
201
- em_now_zt_pool = stock_zt_pool_api.stock_em_zt_pool_df(date_handle_util.no_slash_date(str_day))
201
+
202
+ try:
203
+ # 东方财富涨停列表
204
+ em_now_zt_pool = stock_zt_pool_api.stock_em_zt_pool_df(date_handle_util.no_slash_date(str_day))
205
+ except BaseException as e:
206
+ em_now_zt_pool = pd.DataFrame()
207
+ logger.error("获取东方财富涨停列表异常:{}", e)
208
+
202
209
  if data_frame_util.is_not_empty(em_now_zt_pool):
203
210
  real_time_zt_df_wei_bi_100 = real_time_zt_df.loc[real_time_zt_df['symbol'].isin(em_now_zt_pool['symbol'])]
204
211
  real_time_zt_df_high_chg = real_time_zt_df.loc[~(real_time_zt_df['symbol'].isin(em_now_zt_pool['symbol']))]
212
+
213
+ em_now_zt_pool = em_now_zt_pool[['symbol',
214
+ 'connected_boards_numbers',
215
+ 'statistics',
216
+ 'closure_funds',
217
+ 'first_closure_time',
218
+ 'last_closure_time',
219
+ 'frying_plates_numbers']]
220
+
221
+ em_now_zt_pool = em_now_zt_pool.set_index(['symbol'], drop=True)
222
+ real_time_zt_df_wei_bi_100 = real_time_zt_df_wei_bi_100.set_index(['symbol'], drop=False)
223
+ real_time_zt_df_wei_bi_100 = pd.merge(real_time_zt_df_wei_bi_100, em_now_zt_pool, how='outer',
224
+ left_index=True, right_index=True)
225
+
226
+ now_continue_zt = last_trade_zt.loc[
227
+ last_trade_zt['symbol'].isin(list(real_time_zt_df_wei_bi_100['symbol']))]
228
+
205
229
  else:
206
- real_time_zt_df_high_chg = real_time_zt_df
230
+ real_time_zt_df_wei_bi_100 = real_time_zt_df.loc[real_time_zt_df['wei_bi'] == 100]
231
+
232
+ real_time_zt_df_wei_bi_100['connected_boards_numbers'] = 1
233
+ real_time_zt_df_wei_bi_100['statistics'] = '1/1'
234
+ real_time_zt_df_wei_bi_100['closure_funds'] = real_time_zt_df_wei_bi_100['now_price'] * \
235
+ real_time_zt_df_wei_bi_100['buy_1_num'] * 100
236
+ real_time_zt_df_wei_bi_100['first_closure_time'] = '153000'
237
+ real_time_zt_df_wei_bi_100['last_closure_time'] = '153000'
238
+ real_time_zt_df_wei_bi_100['frying_plates_numbers'] = 0
239
+ now_continue_zt = last_trade_zt.loc[
240
+ last_trade_zt['symbol'].isin(list(real_time_zt_df_wei_bi_100['symbol']))]
241
+
242
+ if data_frame_util.is_not_empty(now_continue_zt):
243
+ now_continue_zt = now_continue_zt[['symbol', 'connected_boards_numbers', 'statistics']]
244
+
245
+ connected_boards_map = now_continue_zt.set_index('symbol')['connected_boards_numbers'].to_dict()
246
+
247
+ # 将映射的值加到原DataFrame上
248
+ real_time_zt_df_wei_bi_100['connected_boards_numbers'] = real_time_zt_df_wei_bi_100[
249
+ 'connected_boards_numbers'] + \
250
+ real_time_zt_df_wei_bi_100['symbol'].map(
251
+ connected_boards_map).fillna(0)
207
252
 
208
- em_now_zt_pool = em_now_zt_pool[
209
- ['symbol', 'connected_boards_numbers',
210
- 'statistics', 'closure_funds', 'first_closure_time',
211
- 'last_closure_time', 'frying_plates_numbers']]
253
+ real_time_zt_df_wei_bi_100 = real_time_zt_df_wei_bi_100.sort_values(by=['connected_boards_numbers'],
254
+ ascending=False)
212
255
 
213
- em_now_zt_pool = em_now_zt_pool.set_index(['symbol'], drop=True)
214
- real_time_zt_df_wei_bi_100 = real_time_zt_df_wei_bi_100.set_index(['symbol'], drop=False)
215
- real_time_zt_df_wei_bi_100 = pd.merge(real_time_zt_df_wei_bi_100, em_now_zt_pool, how='outer',
216
- left_index=True, right_index=True)
256
+ real_time_zt_df_high_chg = real_time_zt_df.loc[real_time_zt_df['wei_bi'] != 100]
257
+
258
+ # todo
259
+ # 高涨幅处理
260
+ now_zt_pool_df = handle_high_chg(real_time_zt_df_high_chg, last_trade_zt, real_time_zt_df_wei_bi_100)
261
+
262
+ now_zt_pool_df = merge_zt_reason(now_zt_pool_df, str_day, last_trade_zt, now_continue_zt)
263
+
264
+ result_first = now_zt_pool_df.loc[now_zt_pool_df['connected_boards_numbers'] == 1]
265
+ result_connected_boards = now_zt_pool_df.loc[now_zt_pool_df['connected_boards_numbers'] > 1]
266
+ result_connected_boards = result_connected_boards.sort_values(by=['connected_boards_numbers'], ascending=False)
267
+ result_first = result_first.sort_values(by=['first_closure_time'], ascending=True)
268
+
269
+ now_zt_pool_df = pd.concat([result_connected_boards,
270
+ result_first])
271
+ now_zt_pool_df = now_zt_pool_df.fillna('未知数据')
272
+ now_zt_pool_df.drop_duplicates('symbol', keep='last', inplace=True)
217
273
 
274
+ return now_zt_pool_df
275
+
276
+
277
+ def handle_high_chg(real_time_zt_df_high_chg, last_trade_zt, real_time_zt_df_wei_bi_100):
218
278
  # 初始化数据
219
279
  real_time_zt_df_high_chg['closure_funds'] = 0
220
280
  real_time_zt_df_high_chg['first_closure_time'] = '153000'
@@ -228,6 +288,7 @@ def get_now_zt_pool_with_reason(str_day):
228
288
 
229
289
  last_trade_zt_copy_today_high_chg = last_trade_zt.loc[
230
290
  last_trade_zt['symbol'].isin(real_time_zt_df_high_chg_last_trade_zt['symbol'])]
291
+
231
292
  last_trade_zt_copy_today_high_chg = last_trade_zt_copy_today_high_chg[
232
293
  ['symbol', 'connected_boards_numbers', 'statistics']]
233
294
  last_trade_zt_copy_today_high_chg['connected_boards_numbers'] = last_trade_zt_copy_today_high_chg[
@@ -247,21 +308,10 @@ def get_now_zt_pool_with_reason(str_day):
247
308
  real_time_zt_df_high_chg_last_trade_zt,
248
309
  real_time_zt_df_high_chg_last_trade_no_zt])
249
310
 
250
- now_zt_pool_df = merge_zt_reason(now_zt_pool_df, str_day, last_trade_zt)
251
-
252
- result_first = now_zt_pool_df.loc[now_zt_pool_df['connected_boards_numbers'] == 1]
253
- result_connected_boards = now_zt_pool_df.loc[now_zt_pool_df['connected_boards_numbers'] > 1]
254
- result_connected_boards = result_connected_boards.sort_values(by=['connected_boards_numbers'], ascending=False)
255
- result_first = result_first.sort_values(by=['first_closure_time'], ascending=True)
256
-
257
- now_zt_pool_df = pd.concat([result_connected_boards,
258
- result_first])
259
- now_zt_pool_df = now_zt_pool_df.fillna('未知数据')
260
- now_zt_pool_df.drop_duplicates('symbol', keep='last', inplace=True)
261
311
  return now_zt_pool_df
262
312
 
263
313
 
264
- def merge_zt_reason(now_zt_pool_df, str_day, last_trade_zt):
314
+ def merge_zt_reason(now_zt_pool_df, str_day, last_trade_zt, now_continue_zt):
265
315
  try:
266
316
  zt_reason_df = get_ths_stock_zt_reason_with_cache(str_day)
267
317
  except BaseException as e:
@@ -269,9 +319,14 @@ def merge_zt_reason(now_zt_pool_df, str_day, last_trade_zt):
269
319
  logger.error("获取涨停原因异常:{}", e)
270
320
 
271
321
  last_trade_zt_copy = last_trade_zt.copy()
322
+
272
323
  if "zt_reason" not in last_trade_zt.columns:
273
324
  last_trade_zt_copy['zt_reason'] = '暂无'
274
- last_trade_zt_copy = last_trade_zt_copy[['symbol', 'zt_reason']]
325
+
326
+ if 'main_line' not in last_trade_zt.columns:
327
+ last_trade_zt['main_line'] = ''
328
+
329
+ last_trade_zt_copy = last_trade_zt_copy[['symbol', 'zt_reason', 'main_line']]
275
330
 
276
331
  if data_frame_util.is_empty(zt_reason_df):
277
332
  now_zt_pool_df['zt_reason'] = '暂无'
@@ -292,6 +347,16 @@ def merge_zt_reason(now_zt_pool_df, str_day, last_trade_zt):
292
347
  result_zt_df = pd.merge(now_zt_pool_df, zt_reason_df_copy, how='outer',
293
348
  left_index=True, right_index=True)
294
349
 
350
+ now_zt_pool_df['main_line'] = ''
351
+ if data_frame_util.is_not_empty(now_continue_zt):
352
+ now_continue_zt = now_continue_zt[['symbol', 'main_line']]
353
+
354
+ # 创建一个 symbol 到 main_line 的映射
355
+ main_line_mapping = now_continue_zt.set_index('symbol')['main_line'].to_dict()
356
+
357
+ # 使用 map 更新 main_line 列
358
+ now_zt_pool_df['main_line'] = now_zt_pool_df['symbol'].map(main_line_mapping).fillna("")
359
+
295
360
  # 找出 'symbol' 列中为 NaN 值的数据
296
361
  zt_reason_na = result_zt_df[result_zt_df['zt_reason'].isna()]
297
362
  zt_reason_not_na = result_zt_df[result_zt_df['zt_reason'].notna()]
@@ -363,12 +428,11 @@ def zt_reason_group(zt_pool_df):
363
428
 
364
429
 
365
430
  if __name__ == '__main__':
366
- str_day_test = '2024-10-09'
367
-
431
+ str_day_test = '2025-10-28'
432
+ # 同花顺涨停
433
+ ths_zt_pool_df = get_now_zt_pool_with_reason(str_day_test)
368
434
  # 东财涨停池
369
435
  em_now_zt_pool_test = stock_zt_pool_api.stock_em_zt_pool_df(date_handle_util.no_slash_date(str_day_test))
370
- # 同花顺涨停
371
- ths_zt_pool_df = get_zt_reason(str_day_test)
372
436
 
373
437
  miss_zt_df = em_now_zt_pool_test.loc[~(em_now_zt_pool_test['symbol'].isin(ths_zt_pool_df['symbol']))]
374
438
  pass
@@ -13,7 +13,9 @@ mongodb_util = MongodbUtil('27017')
13
13
 
14
14
  # 获取东方财富A股全部信息
15
15
  def get_a_stock_info():
16
- return mongodb_util.find_all_data(extra_income_db_name.EM_A_STOCK_INFO)
16
+ em_a_stock_info = mongodb_util.find_all_data(extra_income_db_name.EM_A_STOCK_INFO)
17
+ em_a_stock_info = em_a_stock_info[~em_a_stock_info['symbol'].str.startswith(('8', '4'))]
18
+ return em_a_stock_info
17
19
 
18
20
 
19
21
  # 获取东方财富ETF全部信息
@@ -40,3 +42,7 @@ def get_us_etf_info():
40
42
 
41
43
  def get_hk_stock_info():
42
44
  return mongodb_util.find_all_data(extra_income_db_name.EM_HK_STOCK_INFO)
45
+
46
+
47
+ if __name__ == '__main__':
48
+ get_a_stock_info()
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-common
3
- Version: 1.5.0.9
3
+ Version: 1.5.1.1
4
4
 
@@ -5,13 +5,13 @@ mns_common/api/akshare/k_line_api.py,sha256=IfqJDG2e-_Ry1f_MqjIff6jad9IIC3Tjnpma
5
5
  mns_common/api/akshare/stock_bid_ask_api.py,sha256=Af9t6Pv_-p7PJJ_7rF_JVaGBomkvePMMqALwuBh2Gfw,4139
6
6
  mns_common/api/akshare/stock_dt_pool.py,sha256=sKedOTzqsBZprJHJEr2sRYa8xbeSK7tRenqBE3wOdUc,2245
7
7
  mns_common/api/akshare/stock_zb_pool.py,sha256=ylcVgZTzsD3qz9WaItLtoqTf4t-Ex49MDtZUk0xaB5Q,2126
8
- mns_common/api/akshare/stock_zt_pool_api.py,sha256=_4PG_Wd88S4zweKNwZprwxaMMHBF4OQSB77DGW1l9UQ,1929
8
+ mns_common/api/akshare/stock_zt_pool_api.py,sha256=-j_GZI3TTPV8XWnczgGjct5XZAHZdlptBcECv7Rfyzw,1929
9
9
  mns_common/api/akshare/yjyg_sync_api.py,sha256=cvk50_XhJWUqduOiC15SYvQTCQqECt6td_L2Hvnl7Jg,4108
10
10
  mns_common/api/em/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
11
11
  mns_common/api/em/concept/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
12
12
  mns_common/api/em/concept/em_concept_index_api.py,sha256=PP87ES8a_y0o3SKLzBsPrc7DCPI3MBCD-4SmoUUirl0,8285
13
13
  mns_common/api/em/gd/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
14
- mns_common/api/em/gd/east_money_stock_gdfx_free_top_10_api.py,sha256=6NdYwVKzjXy4db3rhgHhrzR-A-AXQRoAN8SwO2QM-50,11846
14
+ mns_common/api/em/gd/east_money_stock_gdfx_free_top_10_api.py,sha256=I2-JjFjTjvOxjNAPzuJ1GK7ynvwJcZa_EbmRB2_pmm0,11813
15
15
  mns_common/api/em/real_time/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
16
16
  mns_common/api/em/real_time/east_money_debt_api.py,sha256=jMvMZtlrDfExl_4jZ1hepHX8rUoeVLoLSOIhRBjkUGk,14753
17
17
  mns_common/api/em/real_time/east_money_etf_api.py,sha256=tCyH4fNx-KfVRFuNGkgM8d_xkvR0oAfr8T3e7_XrjTM,14414
@@ -68,7 +68,7 @@ mns_common/api/ths/wen_cai/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK
68
68
  mns_common/api/ths/wen_cai/ths_wen_cai_api.py,sha256=zDwZyh60sHdJ_folWDVZmLD1mndKc40Ltc4JbL12HF4,4935
69
69
  mns_common/api/ths/zt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
70
  mns_common/api/ths/zt/ths_stock_zt_pool_api.py,sha256=NAfyOWWROVpCRlw3jcCxPLQMwR8m0jt9tfIZT7Jr1UE,10690
71
- mns_common/api/ths/zt/ths_stock_zt_pool_v2_api.py,sha256=eICTYaHJYp2ccsHkeDnkzpJGT63FzKtaICDjCWCdQOA,16282
71
+ mns_common/api/ths/zt/ths_stock_zt_pool_v2_api.py,sha256=veKMkrhXYlAQ-0wo6Ggt02zWpfvlMXANdkQKV-SLrdg,19510
72
72
  mns_common/api/us/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
73
73
  mns_common/api/us/ths_us_company_info_api.py,sha256=qQjv4F-ovQ2uuu-FlBAnxjvVA7qj9y_x5WZtUoyoEW4,241
74
74
  mns_common/api/xueqiu/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
@@ -97,7 +97,7 @@ mns_common/component/deal/deal_service_v2_api.py,sha256=QmiMQeaCGV8Izuilihp_1_h3
97
97
  mns_common/component/deal/terminal_enum.py,sha256=JUkSTXLQW1fob05PCCzIBg_VKlGmqaJEa0GOvrQH6e0,275
98
98
  mns_common/component/em/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
99
99
  mns_common/component/em/em_real_time_quotes_api.py,sha256=9VAwzj_am-Jd4zG57bhrVjXrrsytzymSu8CIs7T7Lc0,2144
100
- mns_common/component/em/em_stock_info_api.py,sha256=r2T9H4cgnZ6p-TUjjeNXsw0aQtwugJQkHeOuHgFl5VY,1192
100
+ mns_common/component/em/em_stock_info_api.py,sha256=7AXHN6TSvZX3cz1KTgB9buSmdIW1so_C8oEX7GJPiEk,1379
101
101
  mns_common/component/exception/ExceptionMonitor.py,sha256=Ma8DsXcU357ni0l_PAFhRZ-nxghiVvnUWE3vu_UeqSk,2731
102
102
  mns_common/component/exception/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
103
103
  mns_common/component/hk/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
@@ -158,7 +158,7 @@ mns_common/utils/date_handle_util.py,sha256=XS-MyA8_7k35LOCFAYOHgVcVkMft_Kc4Wa9U
158
158
  mns_common/utils/db_util.py,sha256=hSmfNAN4vEeEaUva6_cicZEhb2jSnib-Gvk2reke1vc,2590
159
159
  mns_common/utils/file_util.py,sha256=egWu6PenGPRp_ixrNTHKarT4dAnOT6FETR82EHUZJnQ,1042
160
160
  mns_common/utils/ip_util.py,sha256=UTcYfz_uytB__6nlBf7T-izuI7hi4XdB6ET0sJgEel4,969
161
- mns_common-1.5.0.9.dist-info/METADATA,sha256=elqneZY6j0x2zYcxhvxDZKkS53a7f6O-aoz6v9AoPRM,61
162
- mns_common-1.5.0.9.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
163
- mns_common-1.5.0.9.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
164
- mns_common-1.5.0.9.dist-info/RECORD,,
161
+ mns_common-1.5.1.1.dist-info/METADATA,sha256=sFmTH_Iq7jnjuyU8ekbHzgK7DQBcqC0_xGFFBYx_ZtY,61
162
+ mns_common-1.5.1.1.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
163
+ mns_common-1.5.1.1.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
164
+ mns_common-1.5.1.1.dist-info/RECORD,,