mns-scheduler 1.4.3.5__py3-none-any.whl → 1.4.6.4__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.

Files changed (46) hide show
  1. mns_scheduler/{company_info/announce → auto_da_ban}/__init__.py +1 -1
  2. mns_scheduler/auto_da_ban/auto_da_ban_service.py +89 -0
  3. mns_scheduler/company_info/clean/company_info_clean_api.py +37 -16
  4. mns_scheduler/company_info/{base → common}/__init__.py +1 -1
  5. mns_scheduler/company_info/common/company_common_query_service.py +45 -0
  6. mns_scheduler/company_info/constant/company_constant_data.py +59 -49
  7. mns_scheduler/company_info/em_stock_info/clean_em_us_hk_stock_info.py +30 -0
  8. mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +100 -39
  9. mns_scheduler/company_info/{remark → sync}/__init__.py +1 -1
  10. mns_scheduler/company_info/sync/company_info_set_service.py +208 -0
  11. mns_scheduler/company_info/sync/sync_company_info_task.py +203 -0
  12. mns_scheduler/company_info/task/__init__.py +7 -0
  13. mns_scheduler/company_info/{announce/company_announce_sync_service.py → task/company_announce_info_task.py} +25 -13
  14. mns_scheduler/company_info/task/company_base_info_task.py +64 -0
  15. mns_scheduler/company_info/{base/sync_company_product_area_industry.py → task/company_business_info_task.py} +33 -17
  16. mns_scheduler/company_info/task/company_hold_info_task.py +66 -0
  17. mns_scheduler/company_info/task/company_industry_info_task.py +167 -0
  18. mns_scheduler/company_info/task/company_total_task.py +69 -0
  19. mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +3 -3
  20. mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py +1 -1
  21. mns_scheduler/db/script/sync/remote_data_sync_to_local.py +11 -3
  22. mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +7 -57
  23. mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +14 -25
  24. mns_scheduler/irm/stock_irm_cninfo_service.py +34 -26
  25. mns_scheduler/irm/stock_question_id_service.py +169 -0
  26. mns_scheduler/k_line/clean/k_line_info_clean_task.py +1 -0
  27. mns_scheduler/kpl/theme/__init__.py +7 -0
  28. mns_scheduler/kpl/theme/kpl_theme_sync_service.py +231 -0
  29. mns_scheduler/self_choose/ths_self_choose_service.py +53 -25
  30. mns_scheduler/trade/auto_login/trader_auto_service.py +2 -1
  31. mns_scheduler/trade/task/trader_task_service.py +13 -2
  32. mns_scheduler/trade/tfp/stock_tfp_info_sync.py +1 -1
  33. mns_scheduler/zb/stock_zb_pool_sync.py +1 -1
  34. mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +45 -130
  35. mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +1 -1
  36. mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +49 -31
  37. mns_scheduler/zz_task/compensation/compensate_task.py +1 -1
  38. mns_scheduler/zz_task/compensation/compensate_task_one_day.py +6 -6
  39. mns_scheduler/zz_task/data_sync_task.py +58 -37
  40. {mns_scheduler-1.4.3.5.dist-info → mns_scheduler-1.4.6.4.dist-info}/METADATA +1 -1
  41. {mns_scheduler-1.4.3.5.dist-info → mns_scheduler-1.4.6.4.dist-info}/RECORD +43 -33
  42. mns_scheduler/company_info/base/sync_company_base_info_api.py +0 -531
  43. mns_scheduler/company_info/base/sync_company_hold_info_api.py +0 -37
  44. mns_scheduler/company_info/remark/company_remark_info_sync.py +0 -46
  45. {mns_scheduler-1.4.3.5.dist-info → mns_scheduler-1.4.6.4.dist-info}/WHEEL +0 -0
  46. {mns_scheduler-1.4.3.5.dist-info → mns_scheduler-1.4.6.4.dist-info}/top_level.txt +0 -0
@@ -18,13 +18,11 @@ import mns_common.api.ths.zt.ths_stock_zt_pool_v2_api as ths_stock_zt_pool_v2_ap
18
18
  import mns_common.component.zt.zt_common_service_api as zt_common_service_api
19
19
  import mns_common.component.em.em_real_time_quotes_api as em_real_time_quotes_api
20
20
  from datetime import datetime
21
- import mns_common.api.ths.zt.ths_stock_zt_pool_api as ths_stock_zt_pool_api
22
21
  import mns_common.constant.db_name_constant as db_name_constant
23
22
  import mns_common.component.deal.deal_service_api as deal_service_api
24
23
  import mns_common.component.company.company_common_service_new_api as company_common_service_new_api
25
- import mns_common.api.ths.company.ths_company_info_api as ths_company_info_api
26
- import mns_common.component.cookie.cookie_info_service as cookie_info_service
27
- import time
24
+ import mns_common.component.main_line.main_line_zt_reason_service as main_line_zt_reason_service
25
+ from mns_common.utils.async_fun import async_fun
28
26
 
29
27
  '''
30
28
  东方财富涨停池
@@ -66,10 +64,12 @@ def save_zt_info(str_day):
66
64
  # 同花顺问财涨停池
67
65
  ths_zt_pool_df_data = ths_stock_zt_pool_v2_api.get_ths_stock_zt_reason_with_cache(str_day)
68
66
  except BaseException as e:
69
- logger.error("使用问财同步ths涨停数据异常")
67
+ logger.error("使用问财同步ths涨停数据异常:{}", e)
70
68
  ths_zt_pool_df_data = pd.DataFrame()
71
69
 
72
70
  stock_em_zt_pool_df_data = handle_ths_em_diff_data(ths_zt_pool_df_data, stock_em_zt_pool_df_data)
71
+ # 更新涨停分析和原因数据
72
+ update_zt_reason_analysis(stock_em_zt_pool_df_data, str_day)
73
73
 
74
74
  stock_em_zt_pool_df_data = common_service_fun_api.total_mv_classification(stock_em_zt_pool_df_data.copy())
75
75
 
@@ -79,14 +79,18 @@ def save_zt_info(str_day):
79
79
 
80
80
  stock_em_zt_pool_df_data = company_common_service_api.amendment_industry(stock_em_zt_pool_df_data.copy())
81
81
 
82
- # 主线标记 复盘用
83
- stock_em_zt_pool_df_data['main_line'] = '无'
84
- stock_em_zt_pool_df_data['sub_main_line'] = '无'
85
- stock_em_zt_pool_df_data['zt_reason'] = ''
86
- stock_em_zt_pool_df_data['zt_analysis'] = ''
87
-
88
82
  # 上个交易交易日涨停股票
89
83
  last_trade_day_zt_df = zt_common_service_api.get_last_trade_day_zt(str_day)
84
+ # 设置连板
85
+ stock_em_zt_pool_df_data = set_connected_boards_numbers(stock_em_zt_pool_df_data.copy(),
86
+ last_trade_day_zt_df.copy())
87
+
88
+ # 添加主线信息
89
+ stock_em_zt_pool_df_data = main_line_zt_reason_service.merge_main_line_info(str_day,
90
+ stock_em_zt_pool_df_data.copy())
91
+ # 添加涨停原因和分析信息
92
+ stock_em_zt_pool_df_data = main_line_zt_reason_service.merge_zt_reason_info(str_day,
93
+ stock_em_zt_pool_df_data.copy())
90
94
 
91
95
  stock_em_zt_pool_df_data['first_closure_time'] = stock_em_zt_pool_df_data['first_closure_time'].str.strip()
92
96
  stock_em_zt_pool_df_data['list_date'] = stock_em_zt_pool_df_data['list_date'].apply(
@@ -109,130 +113,47 @@ def save_zt_info(str_day):
109
113
  stock_em_zt_pool_df_data = stock_em_zt_pool_df_data.sort_values(by=['first_closure_time'])
110
114
 
111
115
  # 重置索引,并将排序结果保存到新的"index"列中
112
-
113
116
  stock_em_zt_pool_df_data['str_day'] = str_day
114
117
  stock_em_zt_pool_df_data['_id'] = stock_em_zt_pool_df_data['symbol'] + "_" + str_day
115
118
  stock_em_zt_pool_df_data.drop_duplicates('symbol', keep='last', inplace=True)
116
119
 
117
120
  query_today_zt = {'str_day': str_day}
118
-
119
121
  stock_exist_zt_pool_df = mongodb_util.find_query_data(db_name_constant.STOCK_ZT_POOL, query_today_zt)
120
-
121
122
  if data_frame_util.is_empty(stock_exist_zt_pool_df):
122
-
123
123
  today_new_zt_pool_df = stock_em_zt_pool_df_data.copy()
124
124
  else:
125
125
  today_new_zt_pool_df = stock_em_zt_pool_df_data.loc[
126
126
  ~stock_em_zt_pool_df_data['symbol'].isin(stock_exist_zt_pool_df['symbol'])]
127
127
 
128
- try:
129
-
130
- today_main_line_df = mongodb_util.find_query_data(db_name_constant.MAIN_LINE_DETAIL, {'str_day': str_day})
131
-
132
- for stock_one in today_new_zt_pool_df.itertuples():
133
- try:
134
- zt_reason = ''
135
- zt_analyse_detail = ''
136
-
137
- # 设置连板数目
138
- stock_em_zt_pool_df_data = set_connected_boards_numbers(stock_em_zt_pool_df_data.copy(),
139
- stock_one.symbol,
140
- last_trade_day_zt_df.copy())
141
-
142
- reason_tag = False
143
- # 网页获取
144
- try:
145
- ths_cookie = cookie_info_service.get_ths_cookie()
146
- # 问财获取涨停分析
147
- zt_analyse_detail = ths_company_info_api.get_company_hot_info(stock_one.symbol, ths_cookie)
148
-
149
- zt_reason = zt_analyse_detail.split("\n")[0]
150
- reason_tag = True
151
- time.sleep(2)
152
- except BaseException as e:
153
- time.sleep(2)
154
- logger.error("网页获取涨停详情异常:{},{}", stock_one.symbol, e)
155
-
156
- # 问财获取
157
- if bool(1 - reason_tag):
158
- try:
159
- # 问财获取涨停分析
160
- zt_result_dict = ths_stock_zt_pool_api.zt_analyse_reason(stock_one.symbol)
161
- zt_analyse_detail = zt_result_dict['zt_analyse_detail']
162
- zt_reason = zt_result_dict['zt_reason']
163
- time.sleep(2)
164
- except BaseException as e:
165
- time.sleep(2)
166
- logger.error("问财获取涨停详情异常:{},{}", stock_one.symbol, e)
167
-
168
- stock_em_zt_pool_df_data.loc[
169
- stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'zt_reason'] = zt_reason
170
-
171
- stock_em_zt_pool_df_data.loc[
172
- stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'zt_analysis'] = zt_analyse_detail
173
-
174
- if data_frame_util.is_not_empty(today_main_line_df):
175
- today_main_line_one_df = today_main_line_df.loc[today_main_line_df['symbol'] == stock_one.symbol]
176
- if data_frame_util.is_not_empty(today_main_line_one_df):
177
- stock_em_zt_pool_df_data.loc[
178
- stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'main_line'] = \
179
- list(today_main_line_one_df['main_line'])[0]
180
-
181
- stock_em_zt_pool_df_data.loc[
182
- stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'sub_main_line'] = \
183
- list(today_main_line_one_df['sub_main_line'])[0]
184
-
185
- query_exist = {'symbol': stock_one.symbol, 'str_day': str_day}
186
- if mongodb_util.exist_data_query(db_name_constant.STOCK_ZT_POOL, query_exist):
187
- continue
188
- else:
189
-
190
- stock_em_zt_pool_df_data_one = stock_em_zt_pool_df_data.loc[
191
- stock_em_zt_pool_df_data['symbol'] == stock_one.symbol]
192
- stock_em_zt_pool_df_data_one = stock_em_zt_pool_df_data_one[ZT_FIELD]
193
-
194
- chg = round(float(list(stock_em_zt_pool_df_data_one['chg'])[0]), 2)
195
- stock_em_zt_pool_df_data_one['chg'] = chg
196
-
197
- mongodb_util.save_mongo(stock_em_zt_pool_df_data_one, db_name_constant.STOCK_ZT_POOL)
198
-
199
- except BaseException as e:
200
-
201
- logger.error("同步涨停信息出现异常:{},{}", stock_one.symbol, e)
202
- except BaseException as e:
203
- stock_em_zt_pool_df_data['zt_reason'] = '0'
204
- logger.error("出现异常:{}", e)
205
-
128
+ mongodb_util.save_mongo(today_new_zt_pool_df, db_name_constant.STOCK_ZT_POOL)
206
129
  stock_em_zt_pool_df_data = pd.concat([stock_exist_zt_pool_df, today_new_zt_pool_df])
130
+ # 保存连板股票主线
131
+ main_line_zt_reason_service.save_last_trade_day_main_line(str_day, stock_em_zt_pool_df_data)
132
+
207
133
  stock_em_zt_pool_df_data.fillna('', inplace=True)
208
134
  stock_em_zt_pool_df_data = stock_em_zt_pool_df_data[ZT_FIELD]
209
135
  return stock_em_zt_pool_df_data
210
136
 
211
137
 
212
138
  # 设置连板数目
213
- def set_connected_boards_numbers(stock_em_zt_pool_df_data, symbol, last_trade_day_zt_df):
139
+ def set_connected_boards_numbers(stock_em_zt_pool_df_data, last_trade_day_zt_df):
140
+ if data_frame_util.is_empty(stock_em_zt_pool_df_data):
141
+ return stock_em_zt_pool_df_data
142
+ if data_frame_util.is_empty(last_trade_day_zt_df):
143
+ return stock_em_zt_pool_df_data
214
144
  # 连板股票
215
145
  connected_boards_df_copy = last_trade_day_zt_df.loc[
216
146
  last_trade_day_zt_df['symbol'].isin(stock_em_zt_pool_df_data['symbol'])]
217
147
 
218
148
  connected_boards_df = connected_boards_df_copy.copy()
149
+ #
219
150
  connected_boards_df['connected_boards_numbers'] = connected_boards_df['connected_boards_numbers'] + 1
220
151
 
221
- # 连板股票
222
- connected_boards_df_one = connected_boards_df.loc[connected_boards_df['symbol'] == symbol]
223
-
224
- if data_frame_util.is_not_empty(connected_boards_df_one):
225
- stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'connected_boards_numbers'] = \
226
- list(connected_boards_df_one['connected_boards_numbers'])[0]
227
-
228
- if 'main_line' in connected_boards_df_one.columns:
229
- stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'main_line'] = \
230
- list(connected_boards_df_one['main_line'])[0]
231
-
232
- if 'sub_main_line' in connected_boards_df_one.columns:
233
- stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'sub_main_line'] = \
234
- list(connected_boards_df_one['sub_main_line'])[0]
235
-
152
+ symbol_mapping_connected_boards_numbers = dict(
153
+ zip(connected_boards_df['symbol'], connected_boards_df['connected_boards_numbers']))
154
+ # 使用map进行替换,不匹配的保持原值
155
+ stock_em_zt_pool_df_data['connected_boards_numbers'] = stock_em_zt_pool_df_data['symbol'].map(
156
+ symbol_mapping_connected_boards_numbers).fillna(1)
236
157
  return stock_em_zt_pool_df_data
237
158
 
238
159
 
@@ -419,25 +340,19 @@ def query_company_info_with_share():
419
340
  return company_info_df
420
341
 
421
342
 
343
+ # 异步更新涨停分析和数据
344
+ @async_fun
345
+ def update_zt_reason_analysis(stock_em_zt_pool_df_data, str_day):
346
+ if data_frame_util.is_empty(stock_em_zt_pool_df_data):
347
+ return
348
+ now_date = datetime.now()
349
+ now_str_day = now_date.strftime('%Y-%m-%d')
350
+ if now_str_day != str_day:
351
+ return
352
+
353
+ stock_em_zt_pool_df_data['str_day'] = str_day
354
+ main_line_zt_reason_service.update_symbol_list_zt_reason_analysis(stock_em_zt_pool_df_data, True)
355
+
356
+
422
357
  if __name__ == '__main__':
423
- save_zt_info('2025-11-18')
424
- # from datetime import datetime
425
- #
426
- # if __name__ == '__main__':
427
- #
428
- # sync_date = date_handle_util.add_date_day('20240110', 0)
429
- #
430
- # now_date = datetime.now()
431
- #
432
- # str_now_day = sync_date.strftime('%Y-%m-%d')
433
- #
434
- # while now_date > sync_date:
435
- # try:
436
- # save_zt_info(str_now_day)
437
- # sync_date = date_handle_util.add_date_day(date_handle_util.no_slash_date(str_now_day), 1)
438
- # print(str_now_day)
439
- # str_now_day = sync_date.strftime('%Y-%m-%d')
440
- #
441
- # except BaseException as e:
442
- # sync_date = date_handle_util.add_date_day(date_handle_util.no_slash_date(str_now_day), 1)
443
- # str_now_day = sync_date.strftime('%Y-%m-%d')
358
+ save_zt_info('2025-12-29')
@@ -188,6 +188,6 @@ if __name__ == '__main__':
188
188
  # trade_date = '2024-08-01'
189
189
  # zt_df = ths_zt_pool(trade_date, None)
190
190
  # save_ths_zt_pool(zt_df, trade_date)
191
- trade_date = '2025-09-05'
191
+ trade_date = '2025-11-04'
192
192
  ths_zt_pool_df_test = ths_zt_pool(trade_date, None)
193
193
  save_ths_zt_pool(ths_zt_pool_df_test, trade_date)
@@ -8,10 +8,10 @@ sys.path.append(project_path)
8
8
  from mns_common.db.MongodbUtil import MongodbUtil
9
9
 
10
10
  mongodb_util = MongodbUtil('27017')
11
- import mns_common.api.ths.zt.ths_stock_zt_pool_api as ths_stock_zt_pool_api
12
11
  import mns_common.utils.data_frame_util as data_frame_util
13
12
  from loguru import logger
14
13
  import time
14
+ import mns_common.component.main_line.main_line_zt_reason_service as main_line_zt_reason_service
15
15
 
16
16
 
17
17
  def update_null_zt_reason(str_day):
@@ -25,37 +25,55 @@ def update_null_zt_reason(str_day):
25
25
 
26
26
  ]}
27
27
  stock_zt_pool_df_null_zt_reason = mongodb_util.find_query_data('stock_zt_pool', query)
28
- if data_frame_util.is_empty(stock_zt_pool_df_null_zt_reason):
29
- return None
30
- no_reason_list = list(stock_zt_pool_df_null_zt_reason['symbol'])
31
- repeat_number = 0
32
- # 循环10次
33
- while len(no_reason_list) > 0 and repeat_number < 10:
34
-
35
- for stock_zt_one in stock_zt_pool_df_null_zt_reason.itertuples():
36
- try:
37
- # 涨停原因
38
- stock_zt_pool_df_one_df = stock_zt_pool_df_null_zt_reason.loc[
39
- stock_zt_pool_df_null_zt_reason['symbol'] == stock_zt_one.symbol]
40
- # 涨停分析
41
- zt_result_dict = ths_stock_zt_pool_api.zt_analyse_reason(stock_zt_one.symbol)
42
- time.sleep(5)
43
-
44
- zt_analysis = zt_result_dict['zt_analyse_detail']
45
- zt_reason = zt_result_dict['zt_reason']
46
-
47
- stock_zt_pool_df_one_df['zt_analysis'] = zt_analysis
48
- stock_zt_pool_df_one_df['zt_reason'] = zt_reason
49
-
50
- mongodb_util.save_mongo(stock_zt_pool_df_one_df, 'stock_zt_pool')
51
- if stock_zt_one.symbol in no_reason_list:
52
- no_reason_list.remove(stock_zt_one.symbol)
53
- except BaseException as e:
54
- logger.error("出现异常:{},{}", stock_zt_one.symbol, e)
28
+ no_reason_list = []
29
+ if data_frame_util.is_not_empty(stock_zt_pool_df_null_zt_reason):
30
+ no_reason_list = list(stock_zt_pool_df_null_zt_reason['symbol'])
31
+
32
+ # 比较两个表
33
+ query_zt_reason_analysis = {"str_day": str_day}
34
+ stock_zt_pool_df_exist = mongodb_util.find_query_data('stock_zt_pool', query_zt_reason_analysis)
35
+ stock_zt_reason_df = mongodb_util.find_query_data('zt_reason_analysis', query_zt_reason_analysis)
36
+ if data_frame_util.is_not_empty(stock_zt_pool_df_exist):
37
+ if data_frame_util.is_empty(stock_zt_reason_df):
38
+ no_reason_list.extend(list(stock_zt_pool_df_exist['symbol']))
39
+ else:
40
+ not_in_zt_reason_zf = stock_zt_pool_df_exist.loc[~stock_zt_pool_df_exist['symbol']
41
+ .isin(stock_zt_reason_df['symbol'])]
42
+ if data_frame_util.is_not_empty(not_in_zt_reason_zf):
43
+ no_reason_list.extend(list(not_in_zt_reason_zf['symbol']))
44
+
45
+ null_zt_reason_df = stock_zt_reason_df.loc[(stock_zt_reason_df['zt_reason'] == '')
46
+ | (stock_zt_reason_df['zt_analysis'] == '')]
47
+ if data_frame_util.is_empty(null_zt_reason_df):
48
+ no_reason_list.extend(list(null_zt_reason_df['symbol']))
49
+
50
+ for symbol in no_reason_list:
51
+ try:
52
+
53
+ need_update_zt_pool_df = stock_zt_pool_df_exist.loc[
54
+ stock_zt_pool_df_exist['symbol'].isin([symbol])]
55
+ main_line_zt_reason_service.update_symbol_list_zt_reason_analysis(need_update_zt_pool_df, True)
56
+ time.sleep(2)
57
+
58
+ query_zt = {'symbol': symbol, 'str_day': str_day}
59
+ zt_reason_analysis_one_df = mongodb_util.find_query_data('zt_reason_analysis', query_zt)
60
+ if data_frame_util.is_empty(zt_reason_analysis_one_df):
55
61
  continue
56
- repeat_number = repeat_number + 1
57
- return stock_zt_pool_df_null_zt_reason
62
+ zt_analysis = list(zt_reason_analysis_one_df['zt_analysis'])[0]
63
+ zt_reason = list(zt_reason_analysis_one_df['zt_reason'])[0]
64
+ new_values = {'$set': {
65
+ 'zt_analysis': zt_analysis,
66
+ 'zt_reason': zt_reason
67
+ }}
68
+ mongodb_util.update_many(query_zt, new_values, 'stock_zt_pool')
69
+ mongodb_util.update_many(query_zt, new_values, 'main_line_detail')
70
+
71
+ if symbol in no_reason_list:
72
+ no_reason_list.remove(symbol)
73
+ except BaseException as e:
74
+ logger.error("出现异常:{},{}", symbol, e)
75
+ continue
58
76
 
59
77
 
60
78
  if __name__ == '__main__':
61
- update_null_zt_reason('2025-11-18')
79
+ update_null_zt_reason('2026-01-07')
@@ -20,7 +20,7 @@ import mns_scheduler.zt.high_chg.sync_high_chg_pool_service as sync_high_chg_poo
20
20
  import mns_scheduler.zt.high_chg.sync_high_chg_real_time_quotes_service as sync_high_chg_real_time_quotes_service
21
21
  import mns_scheduler.zt.zt_pool.ths_zt_pool_sync_api as ths_zt_pool_sync_api
22
22
  import mns_scheduler.trade.tfp.stock_tfp_info_sync as stock_tfp_info_sync
23
-
23
+ from datetime import datetime
24
24
 
25
25
  # 定时同步每日交易行情数据(前复权)
26
26
  def stock_daily_sync_qfq():
@@ -18,7 +18,7 @@ import mns_scheduler.zt.high_chg.sync_high_chg_pool_service as sync_high_chg_poo
18
18
  import mns_scheduler.zt.high_chg.sync_high_chg_real_time_quotes_service as sync_high_chg_real_time_quotes_service
19
19
  import mns_scheduler.zt.zt_pool.ths_zt_pool_sync_api as ths_zt_pool_sync_api
20
20
  import mns_scheduler.trade.tfp.stock_tfp_info_sync as stock_tfp_info_sync
21
-
21
+ from datetime import datetime
22
22
 
23
23
  # 定时同步每日交易行情数据(前复权)
24
24
  def stock_daily_sync_qfq():
@@ -134,9 +134,9 @@ def col_data_move():
134
134
 
135
135
  if __name__ == '__main__':
136
136
  # todo 修改日期
137
- str_day = '2025-11-13'
137
+ str_day = '2026-01-05'
138
138
  # col_data_move()
139
- sync_daily_data_info()
140
- sync_stock_zt_pool()
141
- sync_stock_dt_pool()
142
- sync_stock_zb_pool()
139
+ generate_new_day_k_line_info()
140
+ # sync_stock_zt_pool()
141
+ # sync_stock_dt_pool()
142
+ # sync_stock_zb_pool()
@@ -21,7 +21,6 @@ import mns_scheduler.zb.stock_zb_pool_sync as stock_zb_pool_sync_api
21
21
  import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
22
22
  import mns_common.utils.date_handle_util as date_handle_util
23
23
  import mns_scheduler.k_line.month_week_daily.daily_week_month_line_sync as daily_week_month_line_sync_api
24
- import mns_scheduler.company_info.announce.company_announce_sync_service as company_announce_sync_service
25
24
  import mns_scheduler.db.col_move_service as col_move_service
26
25
  import mns_scheduler.db.db_status as db_status_api
27
26
  import mns_scheduler.zt.open_data.kcx_high_chg_open_data_sync as kcx_high_chg_open_data_sync
@@ -36,7 +35,7 @@ import \
36
35
  import \
37
36
  mns_scheduler.concept.ths.update_concept_info.sync_one_symbol_all_concepts_api as sync_one_symbol_all_concepts_api
38
37
  import mns_scheduler.kpl.selection.total.sync_kpl_best_total_sync_api as sync_kpl_best_total_sync_api
39
- import mns_scheduler.company_info.base.sync_company_base_info_api as company_info_sync_api
38
+ import mns_scheduler.company_info.sync.sync_company_info_task as sync_company_info_task
40
39
  import mns_scheduler.trade.auto_ipo_buy_api as auto_ipo_buy_api
41
40
  import mns_scheduler.kpl.selection.index.sync_best_choose_his_index as sync_best_choose_his_index
42
41
  import mns_scheduler.concept.ths.common.ths_concept_update_common_api as ths_concept_update_common_api
@@ -52,7 +51,6 @@ import mns_scheduler.concept.ths.sync_new_index.sync_ths_concept_new_index_api a
52
51
  import mns_scheduler.company_info.clean.company_info_clean_api as company_info_clean_api
53
52
  import mns_scheduler.zt.zt_pool.ths_zt_pool_sync_api as ths_zt_pool_sync_api
54
53
  import mns_scheduler.trade.task.trader_task_service as trader_task_service
55
- import mns_scheduler.company_info.remark.company_remark_info_sync as company_remark_info_sync
56
54
  import mns_scheduler.finance.sync_financial_report_service_task as sync_financial_report_service_task
57
55
  import mns_scheduler.hk.hk_industry_info_sync_service_api as hk_industry_info_sync_service_api
58
56
  import mns_scheduler.hk.hk_company_info_sync_service_api as hk_company_info_sync_service_api
@@ -61,7 +59,10 @@ import mns_scheduler.trade.tfp.stock_tfp_info_sync as stock_tfp_info_sync
61
59
  import mns_scheduler.industry.ths.ths_industry_sync_service as ths_industry_sync_service
62
60
  import mns_scheduler.k_line.year_quarter.year_quarter_line_sync as year_quarter_line_sync
63
61
  import mns_scheduler.k_line.sync_status.k_line_sync_status_check as k_line_sync_status_check
64
- import mns_scheduler.company_info.base.sync_company_product_area_industry as sync_company_product_area_industry_api
62
+ import mns_scheduler.company_info.task.company_total_task as company_total_task
63
+ import mns_scheduler.irm.stock_question_id_service as stock_question_id_service
64
+ import mns_scheduler.auto_da_ban.auto_da_ban_service as auto_da_ban_service
65
+ import mns_scheduler.kpl.theme.kpl_theme_sync_service as kpl_theme_sync_service
65
66
 
66
67
 
67
68
  # 同步交易日期任务完成
@@ -298,9 +299,13 @@ def sync_new_concept_index_task():
298
299
 
299
300
 
300
301
  # 清洗公司基本信息
301
- def update_company_base_info():
302
- company_info_sync_api.sync_company_base_info(None)
303
- company_info_clean_api.clean_company_info(None)
302
+ def clean_company_base_info():
303
+ # 同步新股信息
304
+ company_total_task.sync_new_stock_company_task()
305
+ # 放到临时表
306
+ sync_company_info_task.sync_company_base_info([])
307
+ # 放到正式表
308
+ company_info_clean_api.clean_company_info([])
304
309
  # 退市股票同步
305
310
  de_list_stock_service.sync_de_list_stock()
306
311
  logger.info('同步公司基本信息任务完成')
@@ -348,13 +353,17 @@ def sync_high_risk_stocks():
348
353
 
349
354
  # 同步互动回答
350
355
  def sync_all_interactive_questions():
351
- now_date = datetime.now()
352
- str_day = now_date.strftime('%Y-%m-%d')
356
+ # now_date = datetime.now()
357
+ # str_day = now_date.strftime('%Y-%m-%d')
353
358
  # 非交易日同步
354
- tag = bool(1 - trade_date_common_service_api.is_trade_day(str_day))
355
- if tag:
356
- logger.info('同步互动回答')
357
- stock_irm_cninfo_service.sync_symbols_interactive_questions([])
359
+ # tag = bool(1 - trade_date_common_service_api.is_trade_day(str_day))
360
+ # if tag:
361
+
362
+ logger.info('同步互动回答')
363
+ stock_question_id_service.sync_sz_stock_uid([])
364
+ stock_question_id_service.sync_sh_stock_uid()
365
+
366
+ stock_irm_cninfo_service.sync_symbols_interactive_questions([])
358
367
 
359
368
 
360
369
  # # 重开定时任务同步
@@ -375,10 +384,10 @@ def trader_client_auto_login():
375
384
  trader_task_service.open_trader_terminal()
376
385
 
377
386
 
378
- # 同步公司备注信息
379
- def sync_company_remark_info():
380
- logger.info('同步公司备注信息')
381
- company_remark_info_sync.sync_company_remark_info()
387
+ # 打开qmt交易端
388
+ def open_qmt_terminal():
389
+ logger.info('打开qmt交易客户端')
390
+ trader_task_service.open_qmt_terminal()
382
391
 
383
392
 
384
393
  # 自选股操作任务
@@ -409,11 +418,6 @@ def update_null_zt_reason():
409
418
  logger.info("更新空涨停原因信息:{}", str_now_day)
410
419
 
411
420
 
412
- # 同步公告信息
413
- def sync_company_announce():
414
- company_announce_sync_service.sync_company_announce(None)
415
-
416
-
417
421
  # 同步停复牌信息
418
422
  def sync_stock_tfp():
419
423
  now_date = datetime.now()
@@ -446,9 +450,24 @@ def check_k_line_sync_count():
446
450
  k_line_sync_status_check.check_k_line_sync_count()
447
451
 
448
452
 
449
- # 同步公司产品区域信息
450
- def sync_company_product_area_industry():
451
- sync_company_product_area_industry_api.sync_company_product_area_industry_task(None)
453
+ # 全量同步公司信息
454
+ def sync_all_company_info_task():
455
+ logger.info("全量同步公司信息")
456
+ company_total_task.sync_all_company_task()
457
+
458
+
459
+ # 自动打板
460
+ def auto_da_ban_task():
461
+ auto_da_ban_service.auto_da_ban_task()
462
+
463
+
464
+ # 同步开盘啦题材
465
+ def sync_kpl_theme():
466
+ logger.info("同步开盘啦题材")
467
+ # 同步新的开盘啦题材
468
+ kpl_theme_sync_service.sync_new_kpl_theme_info()
469
+ # 更新所有开盘啦题材
470
+ kpl_theme_sync_service.update_all_kpl_theme_info()
452
471
 
453
472
 
454
473
  # # 定义BlockingScheduler
@@ -456,22 +475,25 @@ blockingScheduler = BlockingScheduler()
456
475
 
457
476
  # 同步东方财富a,etf,kzz,us,hk信息
458
477
  blockingScheduler.add_job(sync_all_em_stock_info, 'cron', hour='07', minute='31')
459
- blockingScheduler.add_job(sync_all_em_stock_info, 'cron', hour='15', minute='20')
478
+ blockingScheduler.add_job(sync_all_em_stock_info, 'cron', hour='16', minute='20')
460
479
 
461
480
  # 开盘前同步当天交易需要的k线数据
462
481
  blockingScheduler.add_job(sync_today_trade_k_line_info, 'cron', hour='07', minute='50')
463
482
 
464
483
  # 同步单只股票下所有概念 by 股票代码
465
- blockingScheduler.add_job(update_one_symbol_all_concepts, 'cron', hour='07,08,18', minute='45')
484
+ blockingScheduler.add_job(update_one_symbol_all_concepts, 'cron', hour='06,08,18', minute='45')
485
+
486
+ # 同步单只股票下所有概念 by 股票代码 中午任务执行
487
+ blockingScheduler.add_job(update_one_symbol_all_concepts, 'cron', hour='12', minute='15,40')
466
488
 
467
489
  # 打开交易客户端
468
- blockingScheduler.add_job(trader_client_auto_login, 'cron', hour='08,09', minute='04')
490
+ blockingScheduler.add_job(open_qmt_terminal, 'cron', hour='07,08,09', minute='04')
469
491
 
470
492
  # 获取当前持仓
471
- blockingScheduler.add_job(sync_position, 'cron', hour='0,08,09', minute='14')
493
+ blockingScheduler.add_job(sync_position, 'cron', hour='0,08,16', minute='14')
472
494
 
473
495
  # 同步公司基本信息
474
- blockingScheduler.add_job(update_company_base_info, 'cron', hour='08,18', minute='05')
496
+ blockingScheduler.add_job(clean_company_base_info, 'cron', hour='07,18', minute='05')
475
497
 
476
498
  # 同步互动回答
477
499
  blockingScheduler.add_job(sync_all_interactive_questions, 'cron', hour='06,17', minute='30')
@@ -500,9 +522,6 @@ blockingScheduler.add_job(update_best_choose_plate_relation, 'cron', hour='09,18
500
522
  # 自动打新 打新中签高时间段 10:30-11:30
501
523
  blockingScheduler.add_job(auto_ipo_buy, 'cron', hour='09', minute='40,50')
502
524
 
503
- # 同步单只股票下所有概念 by 股票代码 中午任务执行
504
- blockingScheduler.add_job(update_one_symbol_all_concepts, 'cron', hour='12', minute='15,40')
505
-
506
525
  # 数据备份
507
526
  blockingScheduler.add_job(col_data_move, 'cron', hour='15', minute='06')
508
527
 
@@ -544,9 +563,6 @@ blockingScheduler.add_job(sync_year_k_line, 'cron', hour='18,23', minute='55')
544
563
  # 同步交易日期
545
564
  blockingScheduler.add_job(sync_trade_date, 'cron', hour='20', minute='43')
546
565
 
547
- # 同步公司备注信息
548
- blockingScheduler.add_job(sync_company_remark_info, 'cron', hour='22', minute='30')
549
-
550
566
  # 同步高风险股票
551
567
  blockingScheduler.add_job(sync_high_risk_stocks, 'cron', hour='0,12,16', minute='20')
552
568
 
@@ -569,8 +585,13 @@ blockingScheduler.add_job(sync_all_kpl_plate_info, 'interval', minutes=5, max_in
569
585
  blockingScheduler.add_job(check_k_line_sync_count, 'cron', hour='6,23', minute='10')
570
586
 
571
587
  # 同步公司产品区域信息
572
- blockingScheduler.add_job(sync_company_product_area_industry, 'cron', day_of_week='sat,sun', hour='10,20',
588
+ blockingScheduler.add_job(sync_all_company_info_task, 'cron', day_of_week='sat,sun', hour='09',
573
589
  minute='10')
590
+ # 自动打板任务
591
+ blockingScheduler.add_job(auto_da_ban_task, 'cron', hour='19', minute='29')
592
+
593
+ # # 同步开盘啦题材
594
+ blockingScheduler.add_job(sync_kpl_theme, 'cron', hour='08,09,12,16', minute='20')
574
595
 
575
596
  print('定时任务启动成功')
576
597
  blockingScheduler.start()
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-scheduler
3
- Version: 1.4.3.5
3
+ Version: 1.4.6.4
4
4