mns-scheduler 1.0.4.9__py3-none-any.whl → 1.0.5.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-scheduler might be problematic. Click here for more details.

@@ -11,108 +11,6 @@ import mns_common.utils.data_frame_util as data_frame_util
11
11
 
12
12
  mongodb_util = MongodbUtil('27017')
13
13
 
14
- # 退市股票
15
- de_listed_stock_list = [
16
- "002018",
17
- "600240",
18
- "000033",
19
- "000405",
20
- "000406",
21
- "000418",
22
- "000508",
23
- "000535",
24
- "000542",
25
- "000549",
26
- "000569",
27
- "000583",
28
- "000594",
29
- "000618",
30
- "000621",
31
- "000660",
32
- "000675",
33
- "000689",
34
- "000699",
35
- "000730",
36
- "000748",
37
- "000763",
38
- "000765",
39
- "000769",
40
- "000787",
41
- "000805",
42
- "000817",
43
- "000827",
44
- "000866",
45
- "000916",
46
- "000939",
47
- "000956",
48
- "002477",
49
- "300028",
50
- "300090",
51
- "300104",
52
- "300156",
53
- "300431",
54
- "600001",
55
- "600002",
56
- "600003",
57
- "600005",
58
- "600065",
59
- "600069",
60
- "600087",
61
- "600092",
62
- "600102",
63
- "600181",
64
- "600205",
65
- "600263",
66
- "600270",
67
- "600286",
68
- "600296",
69
- "600317",
70
- "600357",
71
- "600401",
72
- "600472",
73
- "600553",
74
- "600591",
75
- "600625",
76
- "600627",
77
- "600631",
78
- "600632",
79
- "600646",
80
- "600670",
81
- "600672",
82
- "600680",
83
- "600752",
84
- "600772",
85
- "600786",
86
- "600788",
87
- "600799",
88
- "600813",
89
- "600832",
90
- "600849",
91
- "600852",
92
- "600899",
93
- "600991",
94
- "601558"
95
- ]
96
-
97
- # 需要修改行业的股票
98
- fix_symbol_list = [
99
- '688507',
100
- '301387',
101
- '688480',
102
- '301112',
103
- '603260',
104
- '300559',
105
- '300836',
106
- '300293',
107
- '688630',
108
- '001309',
109
- '600338',
110
- '000032',
111
- '300042',
112
- '300295',
113
- '300483'
114
- ]
115
-
116
14
 
117
15
  def get_fix_symbol_industry():
118
16
  return pd.DataFrame([['688480', '赛恩斯', '760103', '环境治理'],
@@ -131,6 +29,7 @@ def get_fix_symbol_industry():
131
29
  ['300295', '三六五网', '430300', '物业管理'],
132
30
  ['300947', '德必集团', '430300', '物业管理'],
133
31
  ['300483', '首华燃气', '410301', '燃气Ⅲ'],
32
+ ['300215', '电科院', '410110', '电能综合服务'],
134
33
  ],
135
34
  columns=['symbol', 'name', 'new_industry_code', 'new_industry'])
136
35
 
@@ -186,6 +186,7 @@ def fix_company_industry(symbol):
186
186
  sub_stock = ths_stock_api.ths_stock_concept('885598')
187
187
  sub_stock_symbol_list = list(sub_stock['symbol'])
188
188
  except BaseException as e:
189
+ logger.error("出现异常:{},{}", symbol, e)
189
190
  query = {'concept_code': 885598}
190
191
  ths_stock_concept_detail = mongodb_util.find_query_data('ths_stock_concept_detail', query)
191
192
  sub_stock_symbol_list = list(ths_stock_concept_detail['symbol'])
@@ -197,7 +198,7 @@ def fix_company_industry(symbol):
197
198
  company_info.dropna(subset=['_id'], axis=0, inplace=True)
198
199
  mongodb_util.save_mongo(company_info, 'company_info')
199
200
  except BaseException as e:
200
- logger.error("出现异常:{}", symbol)
201
+ logger.error("出现异常:{},{}", symbol, e)
201
202
 
202
203
  return company_info
203
204
 
@@ -207,8 +208,9 @@ def sync_company_base_info(symbol_list):
207
208
  result = []
208
209
  create_index()
209
210
  east_money_stock_info = get_east_money_stock_info()
211
+ de_listed_stock_list = company_common_service_api.get_de_list_company()
210
212
  east_money_stock_info = east_money_stock_info.loc[~(
211
- east_money_stock_info['symbol'].isin(company_constant_data_api.de_listed_stock_list))]
213
+ east_money_stock_info['symbol'].isin(de_listed_stock_list))]
212
214
  east_money_stock_info = common_service_fun_api.exclude_ts_symbol(east_money_stock_info)
213
215
  east_money_stock_info = east_money_stock_info.loc[~((east_money_stock_info['industry'] == '-')
214
216
  & (east_money_stock_info['now_price'] == 0))]
@@ -296,8 +298,8 @@ def single_thread_sync_company_info(east_money_stock_info,
296
298
  now_date = datetime.now()
297
299
  str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
298
300
  company_info_type['sync_date'] = str_now_date
299
-
300
- if company_one.symbol in company_constant_data_api.fix_symbol_list:
301
+ fix_symbol_industry_df = company_constant_data_api.get_fix_symbol_industry()
302
+ if company_one.symbol in list(fix_symbol_industry_df['symbol']):
301
303
  # fix sw_industry
302
304
  company_info_type = company_constant_data_api.fix_symbol_industry(company_info_type, company_one.symbol)
303
305
 
@@ -33,6 +33,14 @@ def sync_de_list_stock():
33
33
  all_de_list_df['list_date'] = all_de_list_df['list_date'].astype(str)
34
34
  all_de_list_df['de_list_date'] = all_de_list_df['de_list_date'].astype(str)
35
35
  mongodb_util.save_mongo(all_de_list_df, db_name_constant.DE_LIST_STOCK)
36
+ remove_black_list(all_de_list_df)
37
+
38
+
39
+ # 移除黑名单
40
+ def remove_black_list(all_de_list_df):
41
+ symbol_list = list(all_de_list_df['symbol'])
42
+ remove_query = {'symbol': {"$in": symbol_list}}
43
+ mongodb_util.remove_data(remove_query, db_name_constant.SELF_BLACK_STOCK)
36
44
 
37
45
 
38
46
  if __name__ == '__main__':
@@ -9,6 +9,7 @@ import akshare as ak
9
9
  from mns_common.db.MongodbUtil import MongodbUtil
10
10
  import mns_scheduler.finance.finance_common_api as finance_common_api
11
11
  import mns_common.constant.db_name_constant as db_name_constant
12
+
12
13
  mongodb_util = MongodbUtil('27017')
13
14
  from loguru import logger
14
15
  import mns_common.utils.data_frame_util as data_frame_util
@@ -345,10 +346,11 @@ def get_em_asset_liability_api(symbol):
345
346
  try:
346
347
  stock_balance_sheet_by_report_em_df = ak.stock_balance_sheet_by_report_em(sec_code)
347
348
  except Exception as e:
348
- logger.error("同步利润表异常:{},{}", symbol, e)
349
+ logger.error("同步资产表异常:{},{}", symbol, e)
349
350
  return None
350
351
  if data_frame_util.is_empty(stock_balance_sheet_by_report_em_df):
351
352
  return None
353
+ stock_balance_sheet_by_report_em_df = check_columns(stock_balance_sheet_by_report_em_df)
352
354
  stock_balance_sheet_by_report_em_df = stock_balance_sheet_by_report_em_df[[
353
355
  'SECUCODE',
354
356
  'SECURITY_CODE',
@@ -426,7 +428,60 @@ def get_em_asset_liability_api(symbol):
426
428
  if data_frame_util.is_empty(new_asset_df):
427
429
  return None
428
430
  new_asset_df.fillna(0, inplace=True)
429
- mongodb_util.insert_mongo(new_asset_df, db_name_constant.EM_STOCK_ASSET_LIABILITY)
431
+ return new_asset_df
432
+
433
+
434
+ def check_columns(new_asset_df):
435
+ if 'CONTRACT_LIAB' not in new_asset_df.columns:
436
+ new_asset_df['CONTRACT_LIAB'] = 0
437
+
438
+ if 'DEVELOP_EXPENSE' not in new_asset_df.columns:
439
+ new_asset_df['DEVELOP_EXPENSE'] = 0
440
+
441
+ if 'INVENTORY' not in new_asset_df.columns:
442
+ new_asset_df['INVENTORY'] = 0
443
+
444
+ if 'NONCURRENT_LIAB_1YEAR' not in new_asset_df.columns:
445
+ new_asset_df['NONCURRENT_LIAB_1YEAR'] = 0
446
+
447
+ if 'NOTE_ACCOUNTS_PAYABLE' not in new_asset_df.columns:
448
+ new_asset_df['NOTE_ACCOUNTS_PAYABLE'] = 0
449
+
450
+ if 'NOTE_ACCOUNTS_RECE' not in new_asset_df.columns:
451
+ new_asset_df['NOTE_ACCOUNTS_RECE'] = 0
452
+
453
+ if 'OTHER_CURRENT_ASSET' not in new_asset_df.columns:
454
+ new_asset_df['OTHER_CURRENT_ASSET'] = 0
455
+
456
+ if 'OTHER_CURRENT_LIAB' not in new_asset_df.columns:
457
+ new_asset_df['OTHER_CURRENT_LIAB'] = 0
458
+
459
+ if 'OTHER_NONCURRENT_ASSET' not in new_asset_df.columns:
460
+ new_asset_df['OTHER_NONCURRENT_ASSET'] = 0
461
+ if 'OTHER_NONCURRENT_FINASSET' not in new_asset_df.columns:
462
+ new_asset_df['OTHER_NONCURRENT_FINASSET'] = 0
463
+ if 'PREPAYMENT' not in new_asset_df.columns:
464
+ new_asset_df['PREPAYMENT'] = 0
465
+ if 'TOTAL_CURRENT_ASSETS' not in new_asset_df.columns:
466
+ new_asset_df['TOTAL_CURRENT_ASSETS'] = 0
467
+ if 'TOTAL_CURRENT_LIAB' not in new_asset_df.columns:
468
+ new_asset_df['TOTAL_CURRENT_LIAB'] = 0
469
+ if 'TOTAL_NONCURRENT_ASSETS' not in new_asset_df.columns:
470
+ new_asset_df['TOTAL_NONCURRENT_ASSETS'] = 0
471
+ if 'TOTAL_NONCURRENT_LIAB' not in new_asset_df.columns:
472
+ new_asset_df['TOTAL_NONCURRENT_LIAB'] = 0
473
+ if 'TOTAL_OTHER_PAYABLE' not in new_asset_df.columns:
474
+ new_asset_df['TOTAL_OTHER_PAYABLE'] = 0
475
+ if 'TOTAL_OTHER_RECE' not in new_asset_df.columns:
476
+ new_asset_df['TOTAL_OTHER_RECE'] = 0
477
+ if 'ACCOUNTS_RECE' not in new_asset_df.columns:
478
+ new_asset_df['ACCOUNTS_RECE'] = 0
479
+
480
+ if 'LOAN_ADVANCE' not in new_asset_df.columns:
481
+ new_asset_df['LOAN_ADVANCE'] = 0
482
+ if 'MONETARYFUNDS' not in new_asset_df.columns:
483
+ new_asset_df['MONETARYFUNDS'] = 0
484
+ return new_asset_df
430
485
 
431
486
 
432
487
  if __name__ == '__main__':
@@ -326,8 +326,13 @@ def check_columns(profit_df):
326
326
  profit_df['FE_INTEREST_INCOME'] = 0
327
327
  if 'CREDIT_IMPAIRMENT_INCOME' not in profit_df.columns:
328
328
  profit_df['CREDIT_IMPAIRMENT_INCOME'] = 0
329
- if 'FAIRVALUE_CHANGE_INCOME' not in profit_df.columns:
330
- profit_df['FAIRVALUE_CHANGE_INCOME'] = 0
329
+ if 'ACCOUNTS_RECE' not in profit_df.columns:
330
+ profit_df['ACCOUNTS_RECE'] = 0
331
+
332
+ if 'LOAN_ADVANCE' not in profit_df.columns:
333
+ profit_df['LOAN_ADVANCE'] = 0
334
+ if 'MONETARYFUNDS' not in profit_df.columns:
335
+ profit_df['MONETARYFUNDS'] = 0
331
336
  return profit_df
332
337
 
333
338
 
@@ -9,7 +9,8 @@ sys.path.append(project_path)
9
9
  import mns_common.component.common_service_fun_api as common_service_fun_api
10
10
  from mns_common.db.MongodbUtil import MongodbUtil
11
11
  import mns_common.constant.db_name_constant as db_name_constant
12
-
12
+ import mns_common.api.em.east_money_stock_api as east_money_stock_api
13
+ import mns_common.utils.data_frame_util as data_frame_util
13
14
  mongodb_util = MongodbUtil('27017')
14
15
 
15
16
 
@@ -33,3 +34,27 @@ def find_profit_report(period_time):
33
34
  def find_asset_liability_report(period_time):
34
35
  query = {"REPORT_DATE": period_time}
35
36
  return mongodb_util.find_query_data(db_name_constant.EM_STOCK_ASSET_LIABILITY, query)
37
+
38
+
39
+
40
+ # 查出未报告的股票
41
+ def find_un_report_symbol(period_time, report_name):
42
+ real_time_quotes_df = east_money_stock_api.get_real_time_quotes_all_stocks()
43
+ real_time_quotes_df = real_time_quotes_df.loc[~(real_time_quotes_df['name'].str.contains('退'))]
44
+ real_time_quotes_df.dropna(subset=['list_date'], axis=0, inplace=True)
45
+
46
+ de_list_stock_df = mongodb_util.find_all_data(db_name_constant.DE_LIST_STOCK)
47
+ real_time_quotes_df = real_time_quotes_df.loc[
48
+ ~(real_time_quotes_df['symbol'].isin(list(de_list_stock_df['symbol'])))]
49
+
50
+ if report_name == db_name_constant.EM_STOCK_ASSET_LIABILITY:
51
+ had_asset_df = find_asset_liability_report(period_time)
52
+ if data_frame_util.is_not_empty(had_asset_df):
53
+ real_time_quotes_df = real_time_quotes_df.loc[
54
+ ~(real_time_quotes_df['symbol'].isin(list(had_asset_df['SECURITY_CODE'])))]
55
+ if report_name == db_name_constant.EM_STOCK_PROFIT:
56
+ had_profit_df = find_profit_report(period_time)
57
+ if data_frame_util.is_not_empty(had_profit_df):
58
+ real_time_quotes_df = real_time_quotes_df.loc[
59
+ ~(real_time_quotes_df['symbol'].isin(list(had_profit_df['SECURITY_CODE'])))]
60
+ return real_time_quotes_df
@@ -14,6 +14,7 @@ from mns_common.db.MongodbUtil import MongodbUtil
14
14
  import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
15
15
  import mns_common.component.common_service_fun_api as common_service_fun_api
16
16
  import pandas as pd
17
+
17
18
  # 1.无保留意见/标准报告:报告没问题。(没有发现造假,但也不能保证为真)
18
19
  #
19
20
  # 2.带强调事项段的无保留意见:报告没问题,但是有亏损获对其可持续经营有重大疑虑(可能造假,至少是在粉饰报表)
@@ -35,6 +36,11 @@ MIN_INCOME_MAIN = 320000000
35
36
  MIN_INCOME_SUB = 120000000
36
37
  # 最大负债比
37
38
  MAX_LIABILITY_RATIO = 90
39
+ # 负载超过90%时候最小净资产
40
+ MIN_NET_ASSET = 1000000000
41
+ # 排除校验负债比的行业
42
+ EXCLUDE_INDUSTRY = ['保险', '银行', '证券']
43
+
38
44
  # 最迟出报告的天数
39
45
  LATE_REPORT_DAYS = 3
40
46
 
@@ -64,18 +70,19 @@ def year_report_exception_check(new_report_df, period_time, report_type):
64
70
  now_date = datetime.now()
65
71
  str_day = now_date.strftime('%Y-%m-%d')
66
72
  str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
67
- id_key = symbol + "_" + period_time
73
+
68
74
  # 年报有问题
69
75
  if opinion_type != OPINION_TYPE:
76
+ id_key = symbol + "_" + period_time + "_" + black_list_service_api.FINANCIAL_PROBLEM_ANNUAL_REPORT
70
77
  black_list_service_api.save_black_stock(id_key,
71
78
  symbol,
72
79
  name,
73
80
  str_day,
74
81
  str_now_date,
75
- '年报审计有问题:'+"["+opinion_type+"]",
82
+ '年报审计有问题:' + "[" + str(opinion_type) + "]",
76
83
  '年报审计有问题',
77
84
  '',
78
- black_list_service_api.FINANCIAL_PROBLEM)
85
+ black_list_service_api.FINANCIAL_PROBLEM_ANNUAL_REPORT)
79
86
 
80
87
  if report_type == db_name_constant.EM_STOCK_PROFIT:
81
88
  # 利润总额 净利润 扣除非经常性损益后的净利润 三者最小为负
@@ -93,8 +100,11 @@ def year_report_exception_check(new_report_df, period_time, report_type):
93
100
  deduct_parent_profit = list(new_report_one_df['DEDUCT_PARENT_NETPROFIT'])[0]
94
101
  # 营业总收入
95
102
  total_operate_income = list(new_report_one_df['TOTAL_OPERATE_INCOME'])[0]
103
+ if total_operate_income == 0:
104
+ # 营业收入
105
+ total_operate_income = list(new_report_one_df['OPERATE_INCOME'])[0]
96
106
 
97
- # 最小利润收入
107
+ # 最小利润收入
98
108
  min_profit = min(total_profit, net_profit, operate_profit,
99
109
  continued_profit, parent_profit, deduct_parent_profit)
100
110
  if min_profit < 0:
@@ -102,16 +112,21 @@ def year_report_exception_check(new_report_df, period_time, report_type):
102
112
  classification = common_service_fun_api.classify_symbol_one(symbol)
103
113
  if ((classification in ['S', 'H'] and total_operate_income < MIN_INCOME_MAIN)
104
114
  | (classification in ['K', 'C'] and total_operate_income < MIN_INCOME_SUB)):
105
- id_key = symbol + "_" + period_time
115
+ id_key = symbol + "_" + period_time + "_" + black_list_service_api.FINANCIAL_PROBLEM_PROFIT
116
+ min_profit = round(min_profit / common_service_fun_api.TEN_THOUSAND, 1)
117
+ total_operate_income = round(total_operate_income / common_service_fun_api.HUNDRED_MILLION, 1)
118
+
106
119
  black_list_service_api.save_black_stock(id_key,
107
120
  symbol,
108
121
  name,
109
122
  str_day,
110
123
  str_now_date,
111
- '年报&利润收入触发退市',
112
- '年报&利润收入触发退市',
124
+ '年报:利润:' + '[' + str(min_profit) + '万]' + '收入:' + str(
125
+ total_operate_income) + '[' + '亿元]--' + '触发退市风险',
126
+ '年报:利润:' + '[' + str(min_profit) + '万]' + '收入:' + str(
127
+ total_operate_income) + '[' + '亿元]--' + '触发退市风险',
113
128
  '',
114
- black_list_service_api.FINANCIAL_PROBLEM)
129
+ black_list_service_api.FINANCIAL_PROBLEM_PROFIT)
115
130
 
116
131
 
117
132
  # 负债比校验
@@ -121,13 +136,20 @@ def liability_ratio_check(report_type, new_report_df, period_time):
121
136
  new_report_one_df = new_report_df.iloc[0:1]
122
137
  # 负债比
123
138
  liability_ratio = list(new_report_one_df['liability_ratio'])[0]
139
+ # 净资产
140
+ net_asset = round(list(new_report_one_df['TOTAL_ASSETS'])[0] - list(new_report_one_df['TOTAL_LIABILITIES'])[0],
141
+ 2)
124
142
 
125
143
  symbol = list(new_report_one_df['SECURITY_CODE'])[0]
126
144
  name = list(new_report_one_df['SECURITY_NAME_ABBR'])[0]
127
145
  now_date = datetime.now()
128
146
  str_day = now_date.strftime('%Y-%m-%d')
129
147
  str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
130
- id_key = symbol + "_" + period_time
148
+ id_key = symbol + "_" + period_time + "_" + black_list_service_api.FINANCIAL_PROBLEM_DEBT
149
+
150
+ query_company = {'_id': symbol, 'industry': {'$in': EXCLUDE_INDUSTRY}}
151
+ if mongodb_util.exist_data_query(db_name_constant.COMPANY_INFO, query_company):
152
+ return None
131
153
 
132
154
  if liability_ratio >= MAX_LIABILITY_RATIO:
133
155
  black_list_service_api.save_black_stock(id_key,
@@ -135,10 +157,12 @@ def liability_ratio_check(report_type, new_report_df, period_time):
135
157
  name,
136
158
  str_day,
137
159
  str_now_date,
138
- '负债过高',
139
- '负债过高',
160
+ '负债过高:' + "[" + str(
161
+ liability_ratio) + "]" + "," + "净资产:" + str(round(
162
+ net_asset / common_service_fun_api.HUNDRED_MILLION, 0)) + "亿",
163
+ '负债过高:' + "[" + str(liability_ratio) + "]",
140
164
  '',
141
- black_list_service_api.FINANCIAL_PROBLEM)
165
+ black_list_service_api.FINANCIAL_PROBLEM_DEBT)
142
166
 
143
167
 
144
168
  # 未出财报
@@ -155,11 +179,11 @@ def un_report_check(sync_time, now_year, period, period_time):
155
179
  elif period == 3:
156
180
  last_report_day = str(now_year) + "-10-01"
157
181
  max_report_day = trade_date_common_service_api.get_before_trade_date(last_report_day, LATE_REPORT_DAYS)
158
- if max_report_day > sync_time:
182
+ if max_report_day >= sync_time:
159
183
 
160
184
  for un_asset_one in un_report_df.itertuples():
161
185
  symbol = un_asset_one.symbol
162
- id_key = symbol + "_" + period_time
186
+ id_key = symbol + "_" + period_time + "_" + black_list_service_api.FINANCIAL_PROBLEM_NOT_REPORT
163
187
  name = un_asset_one.name
164
188
  now_date = datetime.now()
165
189
  str_day = now_date.strftime('%Y-%m-%d')
@@ -173,6 +197,6 @@ def un_report_check(sync_time, now_year, period, period_time):
173
197
  '未出财报',
174
198
  '未出财报',
175
199
  '',
176
- black_list_service_api.FINANCIAL_PROBLEM)
200
+ black_list_service_api.FINANCIAL_PROBLEM_NOT_REPORT)
177
201
  except Exception as e:
178
- logger.error("同步利润表异常:{},{},{}", symbol, period_time, e)
202
+ logger.error("更新未出报告异常:{},{},{}", symbol, period_time, e)
@@ -6,8 +6,7 @@ end = file_path.index('mns') + 16
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
8
  from datetime import datetime
9
- import mns_common.api.em.east_money_stock_api as east_money_stock_api
10
- import mns_scheduler.finance.finance_common_api as finance_common_api
9
+
11
10
  import mns_common.constant.db_name_constant as db_name_constant
12
11
  import mns_scheduler.finance.em_financial_profit_sync_service_api as em_financial_profit_sync_service_api
13
12
  from mns_common.db.MongodbUtil import MongodbUtil
@@ -16,6 +15,7 @@ import \
16
15
  mns_scheduler.finance.em_financial_asset_liability_sync_service_api as em_financial_asset_liability_sync_service_api
17
16
  import mns_scheduler.finance.financial_high_risk_stock_clean_service_api as financial_high_risk_stock_clean_service_api
18
17
  import mns_common.utils.data_frame_util as data_frame_util
18
+ import mns_scheduler.finance.finance_common_api as finance_common_api
19
19
 
20
20
  mongodb_util = MongodbUtil('27017')
21
21
 
@@ -36,35 +36,36 @@ def sync_financial_report():
36
36
  if 1 <= now_month <= 5:
37
37
  period = 4
38
38
  period_time = str(now_year - 1) + "-12-31 00:00:00"
39
- sync_profit_report(period_time, sync_time, period, now_year)
40
- sync_asset_liability_report(period_time, sync_time, period, now_year)
39
+ sync_profit_report(period_time, sync_time, period)
40
+ sync_asset_liability_report(period_time, sync_time, period)
41
41
 
42
42
  # 一季报
43
43
  elif now_month == 5:
44
44
  period = 1
45
45
  period_time = str(now_year) + "-03-31 00:00:00"
46
- sync_profit_report(period_time, sync_time, period, now_year)
47
- sync_asset_liability_report(period_time, sync_time, period, now_year)
46
+ sync_profit_report(period_time, sync_time, period)
47
+ sync_asset_liability_report(period_time, sync_time, period)
48
48
 
49
49
  # 二季报
50
50
  elif 7 <= now_month <= 8:
51
51
  period = 2
52
52
  period_time = str(now_year) + "-06-30 00:00:00"
53
- sync_profit_report(period_time, sync_time, period, now_year)
54
- sync_asset_liability_report(period_time, sync_time, period, now_year)
53
+ sync_profit_report(period_time, sync_time, period)
54
+ sync_asset_liability_report(period_time, sync_time, period)
55
55
  # 三季报
56
56
  elif now_month == 10:
57
57
  period = 3
58
58
  period_time = str(now_year) + "-09-30 00:00:00"
59
- sync_profit_report(period_time, sync_time, period, now_year)
60
- sync_asset_liability_report(period_time, sync_time, period, now_year)
59
+ sync_profit_report(period_time, sync_time, period)
60
+ sync_asset_liability_report(period_time, sync_time, period)
61
61
  # 未出报告check
62
62
  financial_high_risk_stock_clean_service_api.un_report_check(sync_time, now_year, period, period_time)
63
63
 
64
64
 
65
65
  # 同步资产表
66
- def sync_asset_liability_report(period_time, sync_time, period, now_year):
67
- un_report_asset_df = find_un_report_symbol(period_time, db_name_constant.EM_STOCK_ASSET_LIABILITY)
66
+ def sync_asset_liability_report(period_time, sync_time, period):
67
+ un_report_asset_df = finance_common_api.find_un_report_symbol(period_time,
68
+ db_name_constant.EM_STOCK_ASSET_LIABILITY)
68
69
  for un_report_asset_one in un_report_asset_df.itertuples():
69
70
  try:
70
71
  symbol = un_report_asset_one.symbol
@@ -84,19 +85,20 @@ def sync_asset_liability_report(period_time, sync_time, period, now_year):
84
85
  db_name_constant.EM_STOCK_ASSET_LIABILITY)
85
86
 
86
87
  except Exception as e:
87
- logger.error("同步利润表异常:{},{},{}", symbol, period_time, e)
88
+ logger.error("同步资产表异常:{},{},{}", symbol, period_time, e)
88
89
 
89
90
 
90
91
  # 同步利润表
91
- def sync_profit_report(period_time, sync_time, period, now_year):
92
- un_report_profit_df = find_un_report_symbol(period_time, db_name_constant.EM_STOCK_PROFIT)
92
+ def sync_profit_report(period_time, sync_time, period):
93
+ un_report_profit_df = finance_common_api.find_un_report_symbol(period_time, db_name_constant.EM_STOCK_PROFIT)
93
94
  for un_report_profit_one in un_report_profit_df.itertuples():
94
95
  try:
95
96
  symbol = un_report_profit_one.symbol
96
97
  new_profit_df = em_financial_profit_sync_service_api.get_em_profit_api(symbol)
97
- new_profit_df['sync_time'] = sync_time
98
98
  if data_frame_util.is_empty(new_profit_df):
99
99
  continue
100
+ new_profit_df['sync_time'] = sync_time
101
+
100
102
  new_profit_df['symbol'] = symbol
101
103
  mongodb_util.insert_mongo(new_profit_df, db_name_constant.EM_STOCK_PROFIT)
102
104
 
@@ -107,27 +109,5 @@ def sync_profit_report(period_time, sync_time, period, now_year):
107
109
  logger.error("同步利润表异常:{},{},{}", symbol, period_time, e)
108
110
 
109
111
 
110
- # 查出未报告的股票
111
- def find_un_report_symbol(period_time, report_name):
112
- real_time_quotes_df = east_money_stock_api.get_real_time_quotes_all_stocks()
113
- real_time_quotes_df = real_time_quotes_df.loc[~(real_time_quotes_df['name'].str.contains('退'))]
114
-
115
- de_list_stock_df = mongodb_util.find_all_data(db_name_constant.DE_LIST_STOCK)
116
- real_time_quotes_df = real_time_quotes_df.loc[
117
- ~(real_time_quotes_df['symbol'].isin(list(de_list_stock_df['symbol'])))]
118
-
119
- if report_name == db_name_constant.EM_STOCK_ASSET_LIABILITY:
120
- had_asset_df = finance_common_api.find_asset_liability_report(period_time)
121
- if data_frame_util.is_not_empty(had_asset_df):
122
- real_time_quotes_df = real_time_quotes_df.loc[
123
- ~(real_time_quotes_df['symbol'].isin(list(had_asset_df['SECURITY_CODE'])))]
124
- if report_name == db_name_constant.EM_STOCK_PROFIT:
125
- had_profit_df = finance_common_api.find_profit_report(period_time)
126
- if data_frame_util.is_not_empty(had_profit_df):
127
- real_time_quotes_df = real_time_quotes_df.loc[
128
- ~(real_time_quotes_df['symbol'].isin(list(had_profit_df['SECURITY_CODE'])))]
129
- return real_time_quotes_df
130
-
131
-
132
112
  if __name__ == '__main__':
133
113
  sync_financial_report()
@@ -0,0 +1,7 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
@@ -0,0 +1,36 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+
9
+
10
+ import mns_common.constant.db_name_constant as db_name_constant
11
+
12
+ from mns_common.db.MongodbUtil import MongodbUtil
13
+
14
+ import mns_scheduler.finance.financial_high_risk_stock_clean_service_api as financial_high_risk_stock_clean_service_api
15
+
16
+
17
+ mongodb_util = MongodbUtil('27017')
18
+
19
+
20
+ def fix_profit_black_list():
21
+ period_time = "2023-12-31 00:00:00"
22
+ period = 4
23
+ report_type_list = [db_name_constant.EM_STOCK_PROFIT, db_name_constant.EM_STOCK_ASSET_LIABILITY]
24
+ for report_type in report_type_list:
25
+ query = {'REPORT_DATE': period_time}
26
+ em_stock_profit_df_list = mongodb_util.find_query_data(report_type, query)
27
+ for em_stock_one in em_stock_profit_df_list.itertuples():
28
+ em_stock_one_df = em_stock_profit_df_list.loc[
29
+ em_stock_profit_df_list['SECURITY_CODE'] == em_stock_one.SECURITY_CODE]
30
+
31
+ financial_high_risk_stock_clean_service_api.financial_report_check(em_stock_one_df, period_time, period,
32
+ report_type)
33
+
34
+
35
+ if __name__ == '__main__':
36
+ fix_profit_black_list()
@@ -0,0 +1,7 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
@@ -0,0 +1,59 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ import mns_common.api.em.east_money_stock_hk_api as east_money_stock_hk_api
9
+ import akshare as ak
10
+ import mns_common.constant.db_name_constant as db_name_constant
11
+ from mns_common.db.MongodbUtil import MongodbUtil
12
+
13
+ mongodb_util = MongodbUtil('27017')
14
+ COOKIE = 'qgqp_b_id=1e0d79428176ed54bef8434efdc0e8c3; mtp=1; ct=QVRY_s8Tiag1WfK2tSW2n03qpsX-PD8aH_rIjKVooawX8K33UVnpIofK088lD1lguWlE_OEIpQwn3PJWFPhHvSvyvYr4Zka3l4vxtZfH1Uikjtyy9z1H4Swo0rQzMKXncVzBXiOo5TjE-Dy9fcoG3ZF7UVdQ35jp_cFwzOlpK5Y; ut=FobyicMgeV51lVMr4ZJXvn-72bp0oeSOvtzifFY_U7kBFtR6og4Usd-VtBM5XBBvHq0lvd9xXkvpIqWro9EDKmv6cbKOQGyawUSMcKVP57isZCaM7lWQ6jWXajvTfvV4mIR-W_MZNK8VY0lL9W4qNMniJ6PBn_gkJsSAJCadmsyI9cxmjx--gR4m54pdF_nie_y4iWHys83cmWR2R7Bt1KKqB25OmkfCQTJJqIf7QsqangVGMUHwMC39Z9QhrfCFHKVNrlqS503O6b9GitQnXtvUdJhCmomu; pi=4253366368931142%3Bp4253366368931142%3B%E8%82%A1%E5%8F%8B9x56I87727%3BYNigLZRW%2FzMdGgVDOJbwReDWnTPHl51dB0gQLiwaCf1XY98mlJYx6eJbsoYr5Nie%2BX1L%2BzaMsec99KkX%2BT29Ds1arfST7sIBXxjUQ3dp11IPUnXy64PaBFRTHzMRWnCFJvvhc%2FAI41rXSGXolC8YMxI%2BvyPS%2BuErwgOVjC5vvsIiKeO7TLyKkhqqQJPX%2F7RWC5Sf3QLh%3Bdwjn4Xho10%2FKjqOgTWs%2FJF4%2FkdKzeuBwM8sz9aLvJovejAkCAyGMyGYA6AE67Xk2Ki7x8zdfBifF2DG%2Fvf2%2BXAYN8ZVISSEWTIXh32Z5MxEacK4JBTkqyiD93e1vFBOFQ82BqaiVmntUq0V6FrTUHGeh1gG5Sg%3D%3D; uidal=4253366368931142%e8%82%a1%e5%8f%8b9x56I87727; sid=170711377; vtpst=|; quote_lt=1; websitepoptg_api_time=1715777390466; emshistory=%5B%22%E8%BD%AC%E5%80%BA%E6%A0%87%22%2C%22%E8%BD%AC%E5%80%BA%E6%A0%87%E7%9A%84%22%5D; st_si=00364513876913; st_asi=delete; HAList=ty-116-00700-%u817E%u8BAF%u63A7%u80A1%2Cty-1-688695-%u4E2D%u521B%u80A1%u4EFD%2Cty-1-600849-%u4E0A%u836F%u8F6C%u6362%2Cty-1-603361-%u6D59%u6C5F%u56FD%u7965%2Cty-1-603555-ST%u8D35%u4EBA%2Cty-0-000627-%u5929%u8302%u96C6%u56E2%2Cty-0-002470-%u91D1%u6B63%u5927%2Cty-0-832876-%u6167%u4E3A%u667A%u80FD%2Cty-0-300059-%u4E1C%u65B9%u8D22%u5BCC%2Cty-107-CWB-%u53EF%u8F6C%u503AETF-SPDR; st_pvi=26930719093675; st_sp=2024-04-28%2017%3A27%3A05; st_inirUrl=https%3A%2F%2Fcn.bing.com%2F; st_sn=23; st_psi=20240517111108288-113200301321-2767127768'
15
+
16
+
17
+ def get_hk_ggt_component():
18
+ stock_hk_ggt_components_em_df = ak.stock_hk_ggt_components_em()
19
+ stock_hk_ggt_components_em_df = stock_hk_ggt_components_em_df.rename(columns={
20
+ "序号": "index",
21
+ "代码": "symbol",
22
+ "名称": "name"
23
+ })
24
+ return stock_hk_ggt_components_em_df
25
+
26
+
27
+ # https://quote.eastmoney.com/center/gridlist.html#hk_stocks
28
+ def sync_hk_company_info():
29
+ hk_real_time_df = east_money_stock_hk_api.hk_real_time_quotes(COOKIE)
30
+
31
+ hk_real_time_df = hk_real_time_df[[
32
+ "symbol",
33
+ "name",
34
+ "chg",
35
+ "total_mv",
36
+ "flow_mv",
37
+ "list_date",
38
+ "industry",
39
+ "amount",
40
+ "now_price"
41
+ ]]
42
+ # 排除基金
43
+ hk_real_time_df = hk_real_time_df.loc[hk_real_time_df['total_mv'] != '-']
44
+
45
+ stock_hk_ggt_components_em_df = get_hk_ggt_component()
46
+ stock_hk_ggt_components_symbol_list = list(stock_hk_ggt_components_em_df['symbol'])
47
+ hk_real_time_df['hk_ggt'] = False
48
+ hk_real_time_df.loc[hk_real_time_df['symbol'].isin(stock_hk_ggt_components_symbol_list), 'hk_ggt'] = True
49
+ hk_real_time_df.loc[hk_real_time_df['industry'] == '-', 'industry'] = '其他'
50
+
51
+ hk_real_time_df['_id'] = hk_real_time_df['symbol']
52
+
53
+ hk_real_time_df.fillna(0, inplace=True)
54
+
55
+ mongodb_util.save_mongo(hk_real_time_df, db_name_constant.COMPANY_INFO_HK)
56
+
57
+
58
+ if __name__ == '__main__':
59
+ sync_hk_company_info()
@@ -70,7 +70,10 @@ def sync_new_high_risk_stocks():
70
70
  begin_date = date_handle_util.add_date_day(date_handle_util.no_slash_date(str_day), -before_days)
71
71
  begin_day = begin_date.strftime('%Y-%m-%d')
72
72
  search_key = '立案'
73
- new_high_risk_stocks_df = sync_all_investigate_stocks(const_num, search_key, begin_day, str_day)
73
+
74
+ end_date = date_handle_util.add_date_day(date_handle_util.no_slash_date(str_day), 1)
75
+ end_day = end_date.strftime('%Y-%m-%d')
76
+ new_high_risk_stocks_df = sync_all_investigate_stocks(const_num, search_key, begin_day, end_day)
74
77
  if data_frame_util.is_empty(new_high_risk_stocks_df):
75
78
  return None
76
79
  new_high_risk_stocks_df = new_high_risk_stocks_df.sort_values(by=['announcementTime'], ascending=False)
@@ -337,7 +337,7 @@ def fix_miss_data(str_end):
337
337
 
338
338
 
339
339
  if __name__ == '__main__':
340
- sync_all_kc_zt_data('2024-05-10', None)
340
+ sync_all_kc_zt_data('2024-05-17', None)
341
341
  # sync_all_kc_zt_data('2023-08-16')
342
342
  # sync_all_kc_zt_data('2023-07-07')
343
343
  # realtime_quotes_now_zt_new_kc_open_sync()
@@ -466,7 +466,7 @@ def stock_qfq_daily_high_chg_pool(str_day):
466
466
 
467
467
 
468
468
  if __name__ == '__main__':
469
- sync_one_day_zt_info('2022-06-28')
469
+ sync_one_day_zt_info('2024-05-17')
470
470
 
471
471
  # sync_date = date_handle_util.add_date_day('20221022', 0)
472
472
  # now_date = datetime.now()
@@ -395,7 +395,7 @@ blockingScheduler.add_job(sync_kpl_best_his_quotes, 'cron', hour='18,22', minute
395
395
  blockingScheduler.add_job(sync_position, 'cron', hour='0,08', minute='10')
396
396
 
397
397
  # 同步被立案调查的股票
398
- blockingScheduler.add_job(sync_new_high_risk_stocks, 'cron', hour='0,09', minute='20')
398
+ blockingScheduler.add_job(sync_new_high_risk_stocks, 'cron', hour='0,09,12,16', minute='20')
399
399
 
400
400
  print('定时任务启动成功')
401
401
  blockingScheduler.start()
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-scheduler
3
- Version: 1.0.4.9
3
+ Version: 1.0.5.1
4
4
 
@@ -11,9 +11,9 @@ mns_scheduler/backup/wen_cai/wen_cai_concept_sync.py,sha256=boKtgOIXIsRny5n1keZm
11
11
  mns_scheduler/big_deal/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
12
12
  mns_scheduler/big_deal/ths_big_deal_sync.py,sha256=wezGJWFRnKYBaPP9PVXLqMbHENOXgvJtw3HSGCSlX5c,4555
13
13
  mns_scheduler/company_info/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
14
- mns_scheduler/company_info/company_constant_data.py,sha256=PkV8i2Wx18lSuAj_UuUw_QzhYrRhTE4x3Cft7-P-Ghs,15735
15
- mns_scheduler/company_info/company_info_sync_api.py,sha256=kL0QETih5lfczZ2WB9Iopmy4RjpvWY5NKPNVUZ5dq-s,20342
16
- mns_scheduler/company_info/de_list_stock_service.py,sha256=3yI54c9BVISR8yXaMAzk3nWxuj0a74b0M-tYbPqd34c,1709
14
+ mns_scheduler/company_info/company_constant_data.py,sha256=g1SSGgNT5QsS-zUNW_zrXD3pZXgSkyjsFLZgWeh7daU,14306
15
+ mns_scheduler/company_info/company_info_sync_api.py,sha256=-98TaiwfaeWromVQtJKlaDSA4bM5I5jdOKt9hLfNFEw,20539
16
+ mns_scheduler/company_info/de_list_stock_service.py,sha256=GCp6hlvO-SuH1oIpEsYZwEnGUOa6fXb2D7CqAUYXKQA,1993
17
17
  mns_scheduler/concept/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
18
18
  mns_scheduler/concept/clean/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
19
19
  mns_scheduler/concept/clean/kpl_concept_clean_api.py,sha256=xxIIgrXLI6xLf10t4unJa7aMB_QeKeki1HJVeXsntkY,4512
@@ -34,11 +34,15 @@ mns_scheduler/db/db_status.py,sha256=K1jtYIGZzDV6knpoJLLnXEhN3tyziJp_zY2gSfguHCA
34
34
  mns_scheduler/dt/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
35
35
  mns_scheduler/dt/stock_dt_pool_sync.py,sha256=5ivRUOnFtOapZniwTbujf1lVq3y4btm2Cmd5R6JJAVo,3466
36
36
  mns_scheduler/finance/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
37
- mns_scheduler/finance/em_financial_asset_liability_sync_service_api.py,sha256=7Y5Nc2yzF19LD0j0pqSUtWdeOA08QFgjTfFtfQnF0vA,17231
38
- mns_scheduler/finance/em_financial_profit_sync_service_api.py,sha256=gc84F8lkHwot0QGfxO3QsZgUc4xJQDZI0rGX7sFmDyo,13989
39
- mns_scheduler/finance/finance_common_api.py,sha256=yPE0at1WFDyYZ3IAjkgCj6xMH7gPp8sAkJsYj5jhmLk,1075
40
- mns_scheduler/finance/financial_high_risk_stock_clean_service_api.py,sha256=L4rVsFPbIWvXisMHrVWGb9WuhwYQjyWbDFs5nacN-5Q,8782
41
- mns_scheduler/finance/sync_financial_report_service_api.py,sha256=bP5e_0ndsAucTUobMtwL4bX1w_APnW_hntfn1_PkJnM,6331
37
+ mns_scheduler/finance/em_financial_asset_liability_sync_service_api.py,sha256=yr257AZ6PU4BoXzgVw8seGjmfEJd5bniaXO6FOONr1k,19437
38
+ mns_scheduler/finance/em_financial_profit_sync_service_api.py,sha256=7gnrn6OyMU4sxrvXXgzrj-EP914KwRpJW76XgKuWO0Q,14145
39
+ mns_scheduler/finance/finance_common_api.py,sha256=e72-c6xcFaS4Z9wq9Yx2_HZ7PdStMeP6s4O61yeTKmc,2471
40
+ mns_scheduler/finance/financial_high_risk_stock_clean_service_api.py,sha256=sPc_APiq--67wBnpLI-6Kgm0Z1j463196oxBn9AFRbE,10561
41
+ mns_scheduler/finance/sync_financial_report_service_api.py,sha256=5e8VdvT52YpJTBlk-H-EDboc5hacmF9osvfkumgZElI,5042
42
+ mns_scheduler/finance/test/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
43
+ mns_scheduler/finance/test/fix_blask_list.py,sha256=sXmNcnfnjKHBylc27ysCCb9G4HYlFDAxOY4eHDnkIGE,1304
44
+ mns_scheduler/hk/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
45
+ mns_scheduler/hk/hk_company_info_sync_service_api.py,sha256=JEfIl_up36b1UpDxfPhosP6_i2Lo17Ma_GHLytoMjWI,3661
42
46
  mns_scheduler/k_line/__init__.py,sha256=ffZXFCLFdIwOsbxnw__u1MbQYh9yz7Bs8UMP6VF0X2M,161
43
47
  mns_scheduler/k_line/clean/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
44
48
  mns_scheduler/k_line/clean/k_line_info_clean_impl.py,sha256=3NPu-bkBw5ARW2yoMAmf_-au6vxQdSjzGlT-l4dqV4w,21833
@@ -58,7 +62,7 @@ mns_scheduler/real_time/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy
58
62
  mns_scheduler/real_time/realtime_quotes_now_create_db_index.py,sha256=qQCjcsG3WYgn3zemS45Ms0AHtbkCwlSVPPCntxVvK8Q,1066
59
63
  mns_scheduler/real_time/realtime_quotes_now_sync.py,sha256=XIz454cysRO-xfdgsEw3glR0LgTxFdZoCNONd4O7EgM,9165
60
64
  mns_scheduler/risk/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
61
- mns_scheduler/risk/register_and_investigate_stock_sync_api.py,sha256=_6Eh5nPQu5KJ0lherAmB8e-pnk8UHsX3WGZ-Xfqk7Fc,4949
65
+ mns_scheduler/risk/register_and_investigate_stock_sync_api.py,sha256=pjVGZbSWQn6obobaJxsXQK7jeRrNQJ6kcwStQEj9R18,5086
62
66
  mns_scheduler/trade/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
63
67
  mns_scheduler/trade/auto_ipo_buy_api.py,sha256=QXNzFJGNGveVUcXBh0RRJb_HV7abbLYXRljezPJf9ZM,377
64
68
  mns_scheduler/trade/auto_sell_service_api.py,sha256=HaauZeOsuLNBrowXT8IKaSgWLR2Huott6mg_AoLhpUY,4423
@@ -67,14 +71,14 @@ mns_scheduler/zb/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJwu55bOq0,
67
71
  mns_scheduler/zb/stock_zb_pool_sync.py,sha256=ky3CNDzpjB6C_frCf4YGNXdidnUo-uUUKsJpY62P4Bk,1936
68
72
  mns_scheduler/zt/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
69
73
  mns_scheduler/zt/export_open_data_to_excel.py,sha256=haOSmh-aXnScp58u0mLE_QvcWIIuRfwxgmyF-XQMk_U,4015
70
- mns_scheduler/zt/realtime_quotes_now_zt_kc_sync.py,sha256=KlrCDx6zTzMNRPzI9-EHTbFFLbe690JOiJK_dFQrlVQ,17272
71
- mns_scheduler/zt/today_high_chg_pool_sync_api.py,sha256=G6FXMH7HnvhyMFoE-RszggkByEp4bThyebt_9KiSX7c,21283
74
+ mns_scheduler/zt/realtime_quotes_now_zt_kc_sync.py,sha256=yh_Ik-l2q11Ji4OU_24_invNDmd-JuqqbTvZqx4N8K4,17272
75
+ mns_scheduler/zt/today_high_chg_pool_sync_api.py,sha256=KfEp2Mu8dZKB8DBai4m0UpZwgkiYpKfg_pdmWSECZwo,21283
72
76
  mns_scheduler/zt/zt_five_boards_sync_api.py,sha256=HfjPHKD99fU9c37kSenEX2_qNvFAjQGgy8ERuacSxwk,10916
73
77
  mns_scheduler/zt/zt_pool_sync_api.py,sha256=RrVAbU1u-HTqXF9BSwNlzIxMHrUgjNaLpDKFgXC1XuY,7604
74
78
  mns_scheduler/zz_task/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
75
- mns_scheduler/zz_task/data_sync_task.py,sha256=8vUFAlNgZplQ6v1ConEfY2UZIoei4nUnogXGfF8R1Ck,16256
79
+ mns_scheduler/zz_task/data_sync_task.py,sha256=ftMN3POBxSRz9qPh4BjLJB-3VU3yVlZxZxOLD-l2lIU,16262
76
80
  mns_scheduler/zz_task/sync_realtime_quotes_task.py,sha256=DN3bq2XCDZC-PHlbD2NTog48bR44EruIEc2QVGKg7Tk,932
77
- mns_scheduler-1.0.4.9.dist-info/METADATA,sha256=l-mybQSBRFgd_xsL9wbrUVXrMtRkVHMVnlstBZ9fm78,64
78
- mns_scheduler-1.0.4.9.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
79
- mns_scheduler-1.0.4.9.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
80
- mns_scheduler-1.0.4.9.dist-info/RECORD,,
81
+ mns_scheduler-1.0.5.1.dist-info/METADATA,sha256=zP_ZAZ1QotD3_f8XV5ki2-NtQjiAW7HTox9i6JXSLPs,64
82
+ mns_scheduler-1.0.5.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
83
+ mns_scheduler-1.0.5.1.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
84
+ mns_scheduler-1.0.5.1.dist-info/RECORD,,