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

@@ -34,67 +34,6 @@ result_lock = threading.Lock()
34
34
  result = []
35
35
 
36
36
 
37
- # 计算实际流通比例
38
- def calculate_circulation_ratio(symbol):
39
- query = {"symbol": symbol}
40
- stock_gdfx_free_top_10 = mongodb_util.descend_query(query, 'stock_gdfx_free_top_10', "period", 10)
41
- if stock_gdfx_free_top_10.shape[0] == 0:
42
- mv_circulation_ratio = 1
43
- else:
44
- # 排除香港结算公司 大于5%减持不用发公告 香港中央结算 HKSCC
45
- stock_gdfx_free_top_10['is_hk'] = stock_gdfx_free_top_10['shareholder_name'].apply(
46
- lambda shareholder_name: "HK" if shareholder_name.startswith('香港中央结算') or shareholder_name.startswith(
47
- 'HKSCC') else "A")
48
-
49
- # 持股大于5% # 排除香港结算公司 大于5%减持不用发公告 香港中央结算 HKSCC
50
- stock_gdfx_free_top_10 = stock_gdfx_free_top_10.loc[
51
- (stock_gdfx_free_top_10['circulation_ratio'] >= 5) & (stock_gdfx_free_top_10['is_hk'] == 'A')]
52
-
53
- circulation_ratio = sum(stock_gdfx_free_top_10['circulation_ratio'])
54
- mv_circulation_ratio = round((100 - circulation_ratio) / 100, 2)
55
- # 防止错误数据
56
- if mv_circulation_ratio < 0:
57
- mv_circulation_ratio = 1
58
- return mv_circulation_ratio
59
-
60
-
61
- def get_east_money_stock_info():
62
- all_real_time_quotes = em_stock_info_api.get_a_stock_info()
63
- all_real_time_quotes = all_real_time_quotes[['symbol',
64
- 'name',
65
- "now_price",
66
- 'total_mv',
67
- 'flow_mv',
68
- 'pe_ttm',
69
- 'sz_sh',
70
- 'area',
71
- 'pb',
72
- 'list_date',
73
- 'ROE',
74
- 'total_share',
75
- 'flow_share',
76
- 'industry',
77
- 'amount',
78
- "hk_stock_code",
79
- "hk_stock_name",
80
- 'concept']]
81
-
82
- return all_real_time_quotes
83
-
84
-
85
- def create_index():
86
- mongodb_util.create_index('company_info',
87
- [("classification", 1)])
88
- mongodb_util.create_index('company_info',
89
- [("industry", 1)])
90
- mongodb_util.create_index('company_info',
91
- [("flow_mv", 1)])
92
- mongodb_util.create_index('company_info',
93
- [("list_date", 1)])
94
- mongodb_util.create_index('company_info',
95
- [("symbol", 1)])
96
-
97
-
98
37
  # 同步公司基本信息
99
38
 
100
39
  def sync_company_base_info(symbol_list):
@@ -102,6 +41,8 @@ def sync_company_base_info(symbol_list):
102
41
  result = []
103
42
  create_index()
104
43
  east_money_stock_info = get_east_money_stock_info()
44
+ east_money_stock_info = east_money_stock_info.sort_values(by=['list_date'], ascending=False)
45
+
105
46
  de_listed_stock_list = company_common_service_api.get_de_list_company()
106
47
  east_money_stock_info = east_money_stock_info.loc[~(
107
48
  east_money_stock_info['symbol'].isin(de_listed_stock_list))]
@@ -145,6 +86,30 @@ def sync_company_base_info(symbol_list):
145
86
  single_thread_sync_company_info(fail_df, kpl_real_time_quotes, exist_company_df)
146
87
 
147
88
 
89
+ def get_east_money_stock_info():
90
+ all_real_time_quotes = em_stock_info_api.get_a_stock_info()
91
+ all_real_time_quotes = all_real_time_quotes[['symbol',
92
+ 'name',
93
+ "now_price",
94
+ 'total_mv',
95
+ 'flow_mv',
96
+ 'pe_ttm',
97
+ 'sz_sh',
98
+ 'area',
99
+ 'pb',
100
+ 'list_date',
101
+ 'ROE',
102
+ 'total_share',
103
+ 'flow_share',
104
+ 'industry',
105
+ 'amount',
106
+ "hk_stock_code",
107
+ "hk_stock_name",
108
+ 'concept']]
109
+
110
+ return all_real_time_quotes
111
+
112
+
148
113
  def single_thread_sync_company_info(east_money_stock_info,
149
114
  kpl_real_time_quotes, exist_company_df):
150
115
  global result
@@ -201,12 +166,23 @@ def single_thread_sync_company_info(east_money_stock_info,
201
166
  company_info_type['total_mv_sp'] = company_one.total_mv_sp
202
167
  company_info_type['flow_mv_level'] = company_one.flow_mv_level
203
168
  company_info_type['classification'] = company_one.classification
204
- company_info_type['mv_circulation_ratio'] = calculate_circulation_ratio(company_one.symbol)
205
- # 获取同花顺最新概念
206
- company_info_type = ths_concept_common_service_api.set_ths_concept(company_one.symbol, company_info_type)
169
+
207
170
  now_date = datetime.now()
208
171
  str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
172
+
173
+ now_str_day = now_date.strftime('%Y-%m-%d')
209
174
  company_info_type['sync_date'] = str_now_date
175
+
176
+ result_dict = calculate_circulation_ratio(company_one.symbol, now_str_day)
177
+
178
+ company_info_type['mv_circulation_ratio'] = result_dict['mv_circulation_ratio']
179
+ company_info_type['qfii_type'] = result_dict['qfii_type']
180
+ company_info_type['qfii_number'] = result_dict['qfii_number']
181
+ company_info_type['share_holder_sync_day'] = result_dict['share_holder_sync_day']
182
+
183
+ # 获取同花顺最新概念
184
+ company_info_type = ths_concept_common_service_api.set_ths_concept(company_one.symbol, company_info_type)
185
+
210
186
  fix_symbol_industry_df = company_constant_data.get_fix_symbol_industry()
211
187
  if company_one.symbol in list(fix_symbol_industry_df['symbol']):
212
188
  # fix sw_industry
@@ -257,6 +233,113 @@ def single_thread_sync_company_info(east_money_stock_info,
257
233
  result = fail_list
258
234
 
259
235
 
236
+ # 计算实际流通比例
237
+ def calculate_circulation_ratio(symbol, now_str_day):
238
+ query = {"symbol": symbol}
239
+ stock_gdfx_free_top_1 = mongodb_util.descend_query(query, 'stock_gdfx_free_top_10', "period", 1)
240
+ if stock_gdfx_free_top_1.shape[0] == 0:
241
+ mv_circulation_ratio = 1
242
+ qfii_number = 0
243
+ qfii_type = 'A股'
244
+ share_holder_sync_day = now_str_day
245
+ else:
246
+ period_time = list(stock_gdfx_free_top_1['period'])[0]
247
+
248
+ query_free = {'symbol': symbol, 'period': period_time}
249
+ stock_gdfx_free_top_10 = mongodb_util.find_query_data('stock_gdfx_free_top_10', query_free)
250
+
251
+ stock_gdfx_free_top_10['shares_number_str'] = stock_gdfx_free_top_10['shares_number'].astype(str)
252
+
253
+ stock_gdfx_free_top_10['id_key'] = stock_gdfx_free_top_10['symbol'] + '_' + stock_gdfx_free_top_10[
254
+ 'period'] + '_' + stock_gdfx_free_top_10.shares_number_str
255
+
256
+ stock_gdfx_free_top_10.drop_duplicates('id_key', keep='last', inplace=True)
257
+
258
+ # 排除香港结算公司 大于5%减持不用发公告 香港中央结算 HKSCC
259
+ stock_gdfx_free_top_10['is_hk'] = stock_gdfx_free_top_10['shareholder_name'].apply(
260
+ lambda shareholder_name: "HK" if shareholder_name.startswith('香港中央结算') or shareholder_name.startswith(
261
+ 'HKSCC') else "A")
262
+
263
+ # 持股大于5% 减持需要发公告
264
+ # 排除香港结算公司不发公共 小于5%减持不用发公告
265
+ # 香港中央结算 HKSCC
266
+ stock_free_top_greater_than_5 = stock_gdfx_free_top_10.loc[
267
+ (stock_gdfx_free_top_10['circulation_ratio'] >= 5) & (stock_gdfx_free_top_10['is_hk'] == 'A')]
268
+
269
+ stock_free_qfii = stock_gdfx_free_top_10.loc[stock_gdfx_free_top_10['shareholder_nature'] == 'QFII']
270
+
271
+ share_holder_sync_day = list(stock_gdfx_free_top_10['create_day'])[0]
272
+
273
+ # qfii 数量
274
+ qfii_number = stock_free_qfii.shape[0]
275
+ # qfii 类型
276
+ qfii_type = set_qfii_type(qfii_number, stock_free_qfii.copy())
277
+
278
+ circulation_ratio = sum(stock_free_top_greater_than_5['circulation_ratio'])
279
+ mv_circulation_ratio = round((100 - circulation_ratio) / 100, 2)
280
+ # 防止错误数据
281
+ if mv_circulation_ratio < 0:
282
+ mv_circulation_ratio = 1
283
+
284
+ result_dict = {
285
+ 'mv_circulation_ratio': mv_circulation_ratio,
286
+ 'qfii_type': qfii_type,
287
+ 'qfii_number': qfii_number,
288
+ 'share_holder_sync_day': share_holder_sync_day
289
+
290
+ }
291
+ return result_dict
292
+
293
+
294
+ def set_qfii_type(qfii_number, stock_free_qfii):
295
+ if qfii_number > 0:
296
+ stock_free_qfii['new_change'] = stock_free_qfii['change']
297
+ stock_free_qfii.loc[stock_free_qfii['change_ratio'] == 0, 'new_change'] = 0
298
+ stock_free_qfii.loc[stock_free_qfii['change'] == '新进', 'new_change'] = \
299
+ stock_free_qfii['shares_number']
300
+ stock_free_qfii['new_change'] = stock_free_qfii['new_change'].astype(float)
301
+
302
+ stock_free_qfii_new_in = stock_free_qfii.loc[stock_free_qfii['change'] == '新进']
303
+ if data_frame_util.is_not_empty(stock_free_qfii_new_in):
304
+ qfii_type = 1
305
+ return qfii_type
306
+
307
+ stock_free_qfii_add = stock_free_qfii.loc[
308
+ (~stock_free_qfii['change'].isin(['不变', '新进'])) & (stock_free_qfii['new_change'] > 0)]
309
+
310
+ if data_frame_util.is_not_empty(stock_free_qfii_add):
311
+ qfii_type = 2
312
+ return qfii_type
313
+
314
+ stock_free_qfii_not_change = stock_free_qfii.loc[stock_free_qfii['change'] == '不变']
315
+
316
+ if data_frame_util.is_not_empty(stock_free_qfii_not_change):
317
+ qfii_type = 3
318
+ return qfii_type
319
+
320
+ stock_free_qfii_reduce = stock_free_qfii.loc[
321
+ (~stock_free_qfii['change'].isin(['不变', '新进'])) & (stock_free_qfii['new_change'] < 0)]
322
+
323
+ if data_frame_util.is_not_empty(stock_free_qfii_reduce):
324
+ qfii_type = 4
325
+ return qfii_type
326
+ else:
327
+ return 0
328
+
329
+
330
+ def create_index():
331
+ mongodb_util.create_index('company_info',
332
+ [("classification", 1)])
333
+ mongodb_util.create_index('company_info',
334
+ [("industry", 1)])
335
+ mongodb_util.create_index('company_info',
336
+ [("flow_mv", 1)])
337
+ mongodb_util.create_index('company_info',
338
+ [("list_date", 1)])
339
+ mongodb_util.create_index('company_info',
340
+ [("symbol", 1)])
341
+
342
+
260
343
  def set_kpl_data(kpl_real_time_quotes_one, company_info_type, company_one):
261
344
  if data_frame_util.is_not_empty(kpl_real_time_quotes_one):
262
345
  company_info_type['kpl_plate_name'] = list(kpl_real_time_quotes_one['plate_name_list'])[0]
@@ -444,5 +527,5 @@ if __name__ == '__main__':
444
527
  # query = {"total_operate_income": 0}
445
528
  # un_report_company_info = mongodb_util.find_query_data(db_name_constant.COMPANY_INFO, query)
446
529
  # symbol_list = list(un_report_company_info['symbol'])
530
+ sync_company_base_info(['920009'])
447
531
  sync_company_base_info(None)
448
- # group_by_industry()
@@ -27,11 +27,8 @@ def sync_company_hold_info(symbol):
27
27
  now_date = datetime.now()
28
28
  sync_str_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
29
29
  if data_frame_util.is_not_empty(company_hold_info_df):
30
- query = {'symbol': symbol}
31
- result = mongodb_util.remove_data(query, db_name_constant.COMPANY_HOLDING_INFO)
32
- if result.acknowledged:
33
- company_hold_info_df['sync_str_date'] = sync_str_date
34
- mongodb_util.insert_mongo(company_hold_info_df, db_name_constant.COMPANY_HOLDING_INFO)
30
+ company_hold_info_df['sync_str_date'] = sync_str_date
31
+ mongodb_util.insert_mongo(company_hold_info_df, db_name_constant.COMPANY_HOLDING_INFO)
35
32
  except BaseException as e:
36
33
  logger.error("同步公司控股子公司信息:{},{}", symbol, e)
37
34
 
@@ -49,11 +49,6 @@ def sync_company_product_area_industry(symbol, date):
49
49
  try:
50
50
  symbol = stock_one.symbol
51
51
 
52
- if date is not None:
53
- query_exist = {"symbol": symbol, "time": date}
54
- if mongodb_util.exist_data_query(db_name_constant.COMPANY_BUSINESS_INFO, query_exist):
55
- continue
56
-
57
52
  classification = stock_one.classification
58
53
  if classification in ['H', 'K']:
59
54
  market = '17'
@@ -47,7 +47,7 @@ def clean_company_info(symbol):
47
47
  company_info['company_type'] = company_info['business_nature']
48
48
 
49
49
  # 将list_date列中的所有NaN值设置为99990909
50
- company_info.fillna({'list_date': 20990909.0}, inplace=True)
50
+ company_info.fillna({'list_date': 19890604}, inplace=True)
51
51
 
52
52
  # 将日期数值转换为日期时间格式
53
53
  company_info['list_date_01'] = pd.to_datetime(company_info['list_date'], format='%Y%m%d')
@@ -443,6 +443,9 @@ def filed_sort(company_info):
443
443
  "final_controller_name",
444
444
  "final_controller_rate",
445
445
  "mv_circulation_ratio",
446
+ 'qfii_type',
447
+ 'qfii_number',
448
+ 'share_holder_sync_day',
446
449
  "flow_mv_sp",
447
450
  "total_mv_sp",
448
451
  "now_price",
@@ -6,66 +6,69 @@ end = file_path.index('mns') + 17
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
8
 
9
- import mns_common.component.proxies.proxy_common_api as proxy_common_api
10
9
  from mns_common.db.MongodbUtil import MongodbUtil
11
10
  from loguru import logger
12
- import mns_common.api.em.real_time.east_money_stock_a_v2_api as east_money_stock_a_v2_api
13
11
  import mns_common.api.em.real_time.east_money_debt_api as east_money_debt_api
14
12
  import mns_common.api.em.real_time.east_money_etf_api as east_money_etf_api
15
- import mns_common.api.em.real_time.east_money_stock_hk_api as east_money_stock_hk_api
13
+ import mns_common.api.em.real_time.east_money_stock_a_v2_api as east_money_stock_a_v2_api
14
+ from datetime import datetime
16
15
  import mns_common.constant.extra_income_db_name as extra_income_db_name
16
+ import mns_common.api.em.real_time.east_money_stock_hk_api as east_money_stock_hk_api
17
17
  import mns_common.component.cookie.cookie_info_service as cookie_info_service
18
-
19
18
  import mns_common.api.em.real_time.east_money_stock_us_api as east_money_stock_us_api
20
19
 
21
20
  mongodb_util = MongodbUtil('27017')
22
21
 
23
22
 
24
23
  def sync_all_em_stock_info():
24
+ now_date = datetime.now()
25
+ str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
26
+
25
27
  logger.info("同步东方财富a,etf,kzz,us,hk,信息开始")
26
- proxy_ip = proxy_common_api.generate_proxy_ip_api(5)
27
- proxies = {"https": proxy_ip}
28
+
28
29
  try:
29
30
  # 这里需要使用详情接口 获取全量数据
30
- em_a_stock_info_df = east_money_stock_a_v2_api.get_all_real_time_quotes(proxies)
31
+ em_a_stock_info_df = east_money_stock_a_v2_api.get_stock_real_time_quotes(60)
32
+ em_a_stock_info_df['list_date'] = em_a_stock_info_df['list_date'].fillna(19890604)
31
33
  em_a_stock_info_df['_id'] = em_a_stock_info_df['symbol']
34
+ em_a_stock_info_df['sync_time'] = str_now_date
32
35
  mongodb_util.save_mongo(em_a_stock_info_df, extra_income_db_name.EM_A_STOCK_INFO)
33
36
  except BaseException as e:
34
37
  logger.error("同步东方财富A股信息异常:{}", e)
35
38
  try:
36
- em_etf_info = east_money_etf_api.get_etf_real_time_quotes(proxies)
37
- em_etf_info['_id'] = em_etf_info['symbol']
39
+ em_etf_info = east_money_etf_api.get_etf_real_time_quotes(30, 6)
40
+ em_etf_info['sync_time'] = str_now_date
38
41
  mongodb_util.save_mongo(em_etf_info, extra_income_db_name.EM_ETF_INFO)
39
42
  except BaseException as e:
40
43
  logger.error("同步东方财富ETF信息异常:{}", e)
41
44
 
42
45
  try:
43
- em_kzz_info = east_money_debt_api.get_debt_real_time_quotes(proxies)
44
-
46
+ em_kzz_info = east_money_debt_api.get_kzz_real_time_quotes(30, 6)
45
47
  em_kzz_info['_id'] = em_kzz_info['symbol']
48
+ em_kzz_info['sync_time'] = str_now_date
46
49
  mongodb_util.save_mongo(em_kzz_info, extra_income_db_name.EM_KZZ_INFO)
47
50
  except BaseException as e:
48
51
  logger.error("同步东方财富可转债信息异常:{}", e)
49
52
 
50
- em_cookie = cookie_info_service.get_em_cookie()
51
- try:
52
- em_hk_stock_info = east_money_stock_hk_api.get_hk_real_time_quotes(em_cookie, proxies)
53
- em_hk_stock_info['_id'] = em_hk_stock_info['symbol']
54
- mongodb_util.save_mongo(em_hk_stock_info, extra_income_db_name.EM_HK_STOCK_INFO)
55
- except BaseException as e:
56
- logger.error("同步东方财富港股信息异常:{}", e)
57
-
58
- try:
59
- em_cookie = cookie_info_service.get_em_cookie()
60
- em_us_stock_info = east_money_stock_us_api.get_us_stock_real_time_quotes(em_cookie, proxies)
61
- em_us_stock_info['_id'] = em_us_stock_info['symbol']
62
- mongodb_util.save_mongo(em_us_stock_info, extra_income_db_name.EM_US_STOCK_INFO)
63
- em_us_etf_info = em_us_stock_info.loc[(em_us_stock_info['amount'] != 0) & (em_us_stock_info['total_mv'] == 0)]
64
- em_us_etf_info = em_us_etf_info.sort_values(by=['amount'], ascending=False)
65
- mongodb_util.save_mongo(em_us_etf_info, extra_income_db_name.EM_US_ETF_INFO)
66
-
67
- except BaseException as e:
68
- logger.error("同步东方财富美股信息异常:{}", e)
53
+ # em_cookie = cookie_info_service.get_em_cookie()
54
+ # try:
55
+ # em_hk_stock_info = east_money_stock_hk_api.get_hk_real_time_quotes(em_cookie, proxies)
56
+ # em_hk_stock_info['_id'] = em_hk_stock_info['symbol']
57
+ # mongodb_util.save_mongo(em_hk_stock_info, extra_income_db_name.EM_HK_STOCK_INFO)
58
+ # except BaseException as e:
59
+ # logger.error("同步东方财富港股信息异常:{}", e)
60
+ #
61
+ # try:
62
+ # em_cookie = cookie_info_service.get_em_cookie()
63
+ # em_us_stock_info = east_money_stock_us_api.get_us_stock_real_time_quotes(em_cookie, proxies)
64
+ # em_us_stock_info['_id'] = em_us_stock_info['symbol']
65
+ # mongodb_util.save_mongo(em_us_stock_info, extra_income_db_name.EM_US_STOCK_INFO)
66
+ # em_us_etf_info = em_us_stock_info.loc[(em_us_stock_info['amount'] != 0) & (em_us_stock_info['total_mv'] == 0)]
67
+ # em_us_etf_info = em_us_etf_info.sort_values(by=['amount'], ascending=False)
68
+ # mongodb_util.save_mongo(em_us_etf_info, extra_income_db_name.EM_US_ETF_INFO)
69
+ #
70
+ # except BaseException as e:
71
+ # logger.error("同步东方财富美股信息异常:{}", e)
69
72
  logger.info("同步东方财富a,etf,kzz,us,hk,信息完成")
70
73
 
71
74
 
@@ -16,6 +16,7 @@ import time
16
16
  import mns_common.utils.data_frame_util as data_frame_util
17
17
  import mns_common.component.cookie.cookie_info_service as cookie_info_service
18
18
  from datetime import datetime
19
+ import mns_common.component.em.em_stock_info_api as em_stock_info_api
19
20
 
20
21
  mongodb_util_27017 = MongodbUtil('27017')
21
22
 
@@ -25,9 +26,7 @@ mongodb_util_27017 = MongodbUtil('27017')
25
26
  # balance 资产负债
26
27
  # 同步所有股票 报表
27
28
  def sync_all_stocks_report():
28
- em_a_stock_info_df = mongodb_util_27017.find_all_data('em_a_stock_info')
29
- em_a_stock_info_df = em_a_stock_info_df[~em_a_stock_info_df['symbol'].astype(str).str.startswith(('8', '4'))]
30
-
29
+ em_a_stock_info_df = em_stock_info_api.get_a_stock_info()
31
30
  em_a_stock_info_df = common_service_fun_api.add_pre_prefix(em_a_stock_info_df)
32
31
  # 或等效写法 df['A'].str[0:6]
33
32
 
@@ -124,7 +123,7 @@ def save_one_symbol_data(stock_one, report_type_list, xue_qiu_cookie, save_tag,
124
123
 
125
124
  if symbol in fail_list:
126
125
  fail_list.remove(symbol)
127
- logger.info("同步完成数据:{}:{}", symbol, name)
126
+ logger.info("同步财务数据完成:{}:{}", symbol, name, report_name)
128
127
  except BaseException as e:
129
128
  logger.error("同步错误:{},异常信息:{}", symbol, e)
130
129
  fail_list.append(symbol)
@@ -132,7 +131,7 @@ def save_one_symbol_data(stock_one, report_type_list, xue_qiu_cookie, save_tag,
132
131
 
133
132
 
134
133
  def sync_xue_qiu_very_period_report(report_name, symbol):
135
- em_a_stock_info_df = mongodb_util_27017.find_all_data('em_a_stock_info')
134
+ em_a_stock_info_df = em_stock_info_api.get_a_stock_info()
136
135
  if symbol is not None:
137
136
  em_a_stock_info_df = em_a_stock_info_df.loc[em_a_stock_info_df['symbol'] == symbol]
138
137
  em_a_stock_info_df = common_service_fun_api.add_pre_prefix(em_a_stock_info_df)
@@ -130,7 +130,7 @@ def sync_symbols_interactive_questions(symbol_list):
130
130
  real_time_quotes_all_stocks = common_service_fun_api.classify_symbol(real_time_quotes_all_stocks)
131
131
  real_time_quotes_all_stocks = real_time_quotes_all_stocks.sort_values(by=['chg'], ascending=False)
132
132
  fail_symbol_list = []
133
- if symbol_list is not None:
133
+ if len(symbol_list) != 0:
134
134
  real_time_quotes_all_stocks = real_time_quotes_all_stocks.loc[
135
135
  real_time_quotes_all_stocks['symbol'].isin(symbol_list)]
136
136
  for stock_one in real_time_quotes_all_stocks.itertuples():
@@ -193,7 +193,8 @@ def save_new_data(stock_irm_cninfo_df):
193
193
 
194
194
 
195
195
  if __name__ == '__main__':
196
+ sync_symbols_interactive_questions([])
196
197
  get_stock_irm_cninfo_sh_api('688778')
197
198
  fail_symbol_list_01 = ['000638', '002886', '688778', '688766', '688733', '688778', '688793', '688787']
198
199
  # get_stock_irm_cninfo_sh_api('603633')
199
- sync_symbols_interactive_questions(fail_symbol_list_01)
200
+ # sync_symbols_interactive_questions(None)
@@ -113,8 +113,9 @@ def multi_threaded_k_line_sync(str_day):
113
113
  real_time_quotes_now = real_time_quotes_now.loc[
114
114
  ~(real_time_quotes_now['symbol'].isin(de_list_company_df['symbol']))]
115
115
 
116
- # 将list_date列中的所有NaN值设置为99990909
117
- real_time_quotes_now['list_date'].fillna(20990909.0, inplace=True)
116
+ # 将list_date列中的所有NaN值设置为19890604
117
+ real_time_quotes_now['list_date'].fillna(19890604, inplace=True)
118
+ real_time_quotes_now['list_date'] = real_time_quotes_now['list_date'].replace(99990909, 19890604)
118
119
 
119
120
  # 将日期数值转换为日期时间格式
120
121
  real_time_quotes_now['list_date_01'] = pd.to_datetime(real_time_quotes_now['list_date'], format='%Y%m%d')
@@ -198,3 +199,7 @@ def create_k_line_index():
198
199
  mongodb_util.create_index('k_line_info', [("symbol", 1)])
199
200
  mongodb_util.create_index('k_line_info', [("str_day", 1)])
200
201
  mongodb_util.create_index('k_line_info', [("str_day", 1), ("symbol", 1)])
202
+
203
+
204
+ if __name__ == '__main__':
205
+ sync_k_line_info_task('2025-11-13')
@@ -49,7 +49,7 @@ def transactions_check_task():
49
49
  now_day_number = float(now_day_str)
50
50
 
51
51
  real_time_quotes_now = em_stock_info_api.get_a_stock_info()
52
- real_time_quotes_now['list_date'] = real_time_quotes_now['list_date'].fillna(99999999)
52
+ real_time_quotes_now['list_date'] = real_time_quotes_now['list_date'].fillna(19890604)
53
53
  real_time_quotes_now = real_time_quotes_now.loc[real_time_quotes_now['list_date'] <= now_day_number]
54
54
  real_time_quotes_now = common_service_fun_api.classify_symbol(real_time_quotes_now)
55
55
  real_time_quotes_now = common_service_fun_api.exclude_ts_symbol(real_time_quotes_now)
@@ -40,9 +40,6 @@ mongodb_util = MongodbUtil('27017')
40
40
  fixed_optional_list = ['899050', '881157']
41
41
 
42
42
 
43
-
44
-
45
-
46
43
  def add_fixed_optional():
47
44
  ths_cookie = cookie_info_service.get_ths_cookie()
48
45
  for symbol in fixed_optional_list:
@@ -50,15 +47,16 @@ def add_fixed_optional():
50
47
 
51
48
 
52
49
  def delete_all_self_choose_stocks():
53
- ths_cookie = cookie_info_service.get_ths_cookie()
50
+ ths_cookie = cookie_info_service.get_ths_cookie()
54
51
  all_self_choose_stock_list = ths_self_choose_api.get_all_self_choose_stock_list(ths_cookie)
55
52
  for stock_one in all_self_choose_stock_list.itertuples():
56
53
  symbol = stock_one.code
57
54
  ths_self_choose_api.del_stock_from_account(symbol, ths_cookie)
58
55
 
59
56
 
60
- def add_self_choose_local():
61
- ths_cookie = cookie_info_service.get_ths_cookie()
57
+ # 添加固定自选股票
58
+ def add_self_choose_symbol():
59
+ ths_cookie = cookie_info_service.get_ths_cookie()
62
60
  # 固定自选
63
61
  self_choose_symbol_df = mongodb_util.find_all_data(db_name_constant.SELF_CHOOSE_STOCK)
64
62
  if data_frame_util.is_not_empty(self_choose_symbol_df):
@@ -66,6 +64,10 @@ def add_self_choose_local():
66
64
  for stock_one in self_choose_symbol_df.itertuples():
67
65
  ths_self_choose_api.add_stock_to_account(stock_one.symbol, ths_cookie)
68
66
 
67
+
68
+ # 添加今日选择股票
69
+ def add_today_choose_symbol():
70
+ ths_cookie = cookie_info_service.get_ths_cookie()
69
71
  now_date = datetime.now()
70
72
  str_day = now_date.strftime('%Y-%m-%d')
71
73
  last_trade_day = trade_date_common_service_api.get_last_trade_day(str_day)
@@ -77,6 +79,10 @@ def add_self_choose_local():
77
79
  for stock_one in self_choose_symbol_today_df.itertuples():
78
80
  ths_self_choose_api.add_stock_to_account(stock_one.symbol, ths_cookie)
79
81
 
82
+
83
+ # 添加同花顺概念
84
+ def add_self_choose_concept():
85
+ ths_cookie = cookie_info_service.get_ths_cookie()
80
86
  query_plate = {'self_type': {
81
87
  "$in": [self_choose_constant.SELF_CHOOSE_THS_CONCEPT,
82
88
  self_choose_constant.SELF_CHOOSE_THS_INDUSTRY]}}
@@ -103,7 +109,7 @@ def add_trade_stocks():
103
109
  trade_stocks_df = mongodb_util.find_query_data(db_name_constant.BUY_STOCK_NAME, query)
104
110
  if data_frame_util.is_not_empty(trade_stocks_df):
105
111
  stock_list = stock_list.union(set(trade_stocks_df['symbol']))
106
- ths_cookie = cookie_info_service.get_ths_cookie()
112
+ ths_cookie = cookie_info_service.get_ths_cookie()
107
113
  if len(stock_list) > 0:
108
114
  for symbol in stock_list:
109
115
  ths_self_choose_api.add_stock_to_account(symbol, ths_cookie)
@@ -111,7 +117,7 @@ def add_trade_stocks():
111
117
 
112
118
  # 添加连板到自选
113
119
  def add_continue_boards_zt_stocks():
114
- ths_cookie = cookie_info_service.get_ths_cookie()
120
+ ths_cookie = cookie_info_service.get_ths_cookie()
115
121
  now_date = datetime.now()
116
122
  str_day = now_date.strftime('%Y-%m-%d')
117
123
  if trade_date_common_service_api.is_trade_day(str_day):
@@ -135,14 +141,16 @@ def add_continue_boards_zt_stocks():
135
141
  # 自选股操作 删除当天自选股 增加新的连板股票 添加固定选择自选
136
142
  def self_choose_stock_handle():
137
143
  delete_all_self_choose_stocks()
138
- # 固定自选
144
+ # 固定自选板块
139
145
  add_fixed_optional()
140
- # 自己买入的股票
141
- add_trade_stocks()
142
- # 本地自选
143
- add_self_choose_local()
146
+ # 添加同花顺概念
147
+ add_self_choose_concept()
144
148
  # 连板股票
145
149
  add_continue_boards_zt_stocks()
150
+ # 自己买入的股票
151
+ add_trade_stocks()
152
+ # 添加自选股票
153
+ add_self_choose_symbol()
146
154
 
147
155
 
148
156
  if __name__ == '__main__':
@@ -9,16 +9,16 @@ import mns_common.component.deal.deal_service_api as deal_service_api
9
9
  import pandas as pd
10
10
  import mns_common.utils.data_frame_util as data_frame_util
11
11
  import mns_common.constant.db_name_constant as db_name_constant
12
- import datetime
13
-
12
+ from datetime import datetime
13
+ from mns_common.component.deal.terminal_enum import TerminalEnum
14
14
  from mns_common.db.MongodbUtil import MongodbUtil
15
15
 
16
16
  mongodb_util = MongodbUtil('27017')
17
17
 
18
18
 
19
19
  # 同步持仓
20
- def sync_position():
21
- now_date = datetime.datetime.now()
20
+ def sync_position_ths():
21
+ now_date = datetime.now()
22
22
  str_day = now_date.strftime('%Y-%m-%d')
23
23
  query_exist = {'str_day': str_day}
24
24
  if mongodb_util.exist_data_query(db_name_constant.POSITION_STOCK, query_exist):
@@ -52,5 +52,38 @@ def sync_position():
52
52
  mongodb_util.save_mongo(position_df, db_name_constant.POSITION_STOCK)
53
53
 
54
54
 
55
+ def sync_position_qmt():
56
+ now_date = datetime.now()
57
+ str_day = now_date.strftime('%Y-%m-%d')
58
+ query_exist = {'str_day': str_day}
59
+ # if mongodb_util.exist_data_query(db_name_constant.POSITION_STOCK, query_exist):
60
+ # return None
61
+ position_list = deal_service_api.get_position(TerminalEnum.QMT.terminal_code)
62
+ if len(position_list) == 0:
63
+ return None
64
+ position_df = pd.DataFrame(position_list)
65
+ position_df = position_df.rename(columns={
66
+ "stock_code": "symbol",
67
+ "avg_price": "cost_price",
68
+ "profit_loss": "floating_profit_loss",
69
+ "market_value": "flow_mv",
70
+ "can_use_volume": "available_position",
71
+ "frozen_volume": "frozen_position",
72
+ })
73
+
74
+ position_df['cost_price'] = round(position_df['cost_price'], 2)
75
+ position_df['open_price'] = round(position_df['open_price'], 2)
76
+
77
+ position_df['open_position'] = position_df['available_position'] + position_df['frozen_position'] + position_df[
78
+ 'on_road_volume']
79
+
80
+ position_df['symbol'] = position_df['symbol'].str.slice(0, 6)
81
+
82
+ position_df["_id"] = position_df['symbol'] + '-' + str_day
83
+ position_df["str_day"] = str_day
84
+ position_df["valid"] = True
85
+ mongodb_util.save_mongo(position_df, db_name_constant.POSITION_STOCK)
86
+
87
+
55
88
  if __name__ == '__main__':
56
- sync_position()
89
+ sync_position_qmt()
@@ -18,8 +18,8 @@ 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.company.ths_company_info_api as ths_company_info_api
22
- import mns_common.component.cookie.cookie_info_service as cookie_info_service
21
+ import mns_common.api.ths.zt.ths_stock_zt_pool_api as ths_stock_zt_pool_api
22
+ import mns_common.constant.db_name_constant as db_name_constant
23
23
 
24
24
  '''
25
25
  东方财富涨停池
@@ -44,7 +44,7 @@ ZT_FIELD = ['_id', 'symbol', 'name', 'now_price', 'chg', 'first_closure_time',
44
44
  'list_date',
45
45
  'exchange', 'flow_mv', 'total_mv',
46
46
  'classification', 'flow_mv_sp', 'total_mv_sp', 'flow_mv_level',
47
- 'amount_level', 'new_stock', 'list_date_01', 'index', 'str_day', 'main_line']
47
+ 'amount_level', 'new_stock', 'list_date_01', 'index', 'str_day', 'main_line', 'sub_main_line']
48
48
 
49
49
 
50
50
  def save_zt_info(str_day):
@@ -66,6 +66,7 @@ def save_zt_info(str_day):
66
66
  stock_em_zt_pool_df_data = company_common_service_api.amendment_industry(stock_em_zt_pool_df_data.copy())
67
67
  # 主线标记 复盘用
68
68
  stock_em_zt_pool_df_data['main_line'] = '无'
69
+ stock_em_zt_pool_df_data['sub_main_line'] = '无'
69
70
  # 上个交易交易日涨停股票
70
71
  last_trade_day_zt_df = zt_common_service_api.get_last_trade_day_zt(str_day)
71
72
 
@@ -75,12 +76,16 @@ def save_zt_info(str_day):
75
76
 
76
77
  # del stock_em_zt_pool_df_data['ths_concept_name']
77
78
  # del stock_em_zt_pool_df_data['ths_concept_code']
79
+
80
+ today_main_line_df = mongodb_util.find_query_data(db_name_constant.MAIN_LINE_DETAIL, {'str_day': str_day})
81
+
78
82
  for stock_one in stock_em_zt_pool_df_data.itertuples():
79
83
  try:
80
84
 
81
85
  # 设置连板数目
82
86
  stock_em_zt_pool_df_data = set_connected_boards_numbers(stock_em_zt_pool_df_data.copy(),
83
- stock_one.symbol, last_trade_day_zt_df.copy())
87
+ stock_one.symbol,
88
+ last_trade_day_zt_df.copy())
84
89
 
85
90
  ths_zt_pool_one_df = ths_zt_pool_df_data.loc[ths_zt_pool_df_data['symbol'] == stock_one.symbol]
86
91
  if data_frame_util.is_empty(ths_zt_pool_one_df):
@@ -95,11 +100,26 @@ def save_zt_info(str_day):
95
100
  stock_em_zt_pool_df_data.loc[
96
101
  stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'first_closure_time'] = first_closure_time
97
102
 
98
- zt_analysis = ths_company_info_api.get_company_hot_info(stock_one.symbol,
99
- cookie_info_service.get_ths_cookie())
103
+ # 涨停分析
104
+ zt_result_dict = ths_stock_zt_pool_api.zt_analyse_reason(stock_one.symbol)
105
+ zt_analysis = zt_result_dict['zt_analyse_detail']
106
+ zt_reason = zt_result_dict['zt_reason']
107
+
108
+ stock_em_zt_pool_df_data.loc[
109
+ stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'zt_reason'] = zt_reason
110
+
100
111
  stock_em_zt_pool_df_data.loc[
101
112
  stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'zt_analysis'] = zt_analysis
102
113
 
114
+ today_main_line_one_df = today_main_line_df.loc[today_main_line_df['symbol'] == stock_one.symbol]
115
+ if data_frame_util.is_not_empty(today_main_line_one_df):
116
+ stock_em_zt_pool_df_data.loc[
117
+ stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'main_line'] = \
118
+ list(today_main_line_one_df['main_line'])[0]
119
+
120
+ stock_em_zt_pool_df_data.loc[
121
+ stock_em_zt_pool_df_data['symbol'] == stock_one.symbol, 'sub_main_line'] = \
122
+ list(today_main_line_one_df['sub_main_line'])[0]
103
123
  except BaseException as e:
104
124
  stock_em_zt_pool_df_data['zt_reason'] = '0'
105
125
  logger.error("出现异常:{}", e)
@@ -138,14 +158,6 @@ def save_zt_info(str_day):
138
158
  exist_zt_pool_today = mongodb_util.find_query_data('stock_zt_pool', {'str_day': str_day})
139
159
  if data_frame_util.is_empty(exist_zt_pool_today):
140
160
  mongodb_util.save_mongo(stock_em_zt_pool_df_data, 'stock_zt_pool')
141
- else:
142
- exist_zt_pool_today_not_nan = exist_zt_pool_today.loc[exist_zt_pool_today['zt_reason'] != '0']
143
-
144
- stock_em_zt_pool_df_data = stock_em_zt_pool_df_data.loc[:, ~stock_em_zt_pool_df_data.columns.duplicated()]
145
- stock_em_zt_pool_df_data_new = stock_em_zt_pool_df_data.loc[~(
146
- stock_em_zt_pool_df_data['symbol'].isin(exist_zt_pool_today_not_nan['symbol']))]
147
- if data_frame_util.is_not_empty(stock_em_zt_pool_df_data_new):
148
- mongodb_util.save_mongo(stock_em_zt_pool_df_data_new, 'stock_zt_pool')
149
161
  return stock_em_zt_pool_df_data
150
162
 
151
163
 
@@ -161,8 +173,13 @@ def set_connected_boards_numbers(stock_em_zt_pool_df_data, symbol, last_trade_da
161
173
  stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'connected_boards_numbers'] = \
162
174
  list(connected_boards_df_one['connected_boards_numbers'])[0]
163
175
 
164
- stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'main_line'] = \
165
- list(connected_boards_df_one['main_line'])[0]
176
+ if 'main_line' in connected_boards_df_one.columns:
177
+ stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'main_line'] = \
178
+ list(connected_boards_df_one['main_line'])[0]
179
+
180
+ if 'sub_main_line' in connected_boards_df_one.columns:
181
+ stock_em_zt_pool_df_data.loc[stock_em_zt_pool_df_data['symbol'] == symbol, 'sub_main_line'] = \
182
+ list(connected_boards_df_one['sub_main_line'])[0]
166
183
 
167
184
  return stock_em_zt_pool_df_data
168
185
 
@@ -172,6 +189,8 @@ def sync_miss_zt_data(stock_em_zt_pool_df_data, str_day):
172
189
  now_day = now_date.strftime('%Y-%m-%d')
173
190
  if now_day == str_day:
174
191
  real_time_quotes_all_stocks_df = em_real_time_quotes_api.get_real_time_quotes_now(None, None)
192
+ if data_frame_util.is_empty(real_time_quotes_all_stocks_df):
193
+ return stock_em_zt_pool_df_data
175
194
  real_time_quotes_all_stocks_df = real_time_quotes_all_stocks_df.loc[
176
195
  (real_time_quotes_all_stocks_df['wei_bi'] == 100) & (real_time_quotes_all_stocks_df['chg'] >= 9)]
177
196
  miss_zt_data_df_copy = real_time_quotes_all_stocks_df.loc[~(
@@ -222,7 +241,7 @@ def sync_miss_zt_data(stock_em_zt_pool_df_data, str_day):
222
241
 
223
242
 
224
243
  if __name__ == '__main__':
225
- save_zt_info('2025-05-14')
244
+ save_zt_info('2025-11-14')
226
245
  # from datetime import datetime
227
246
  #
228
247
  # if __name__ == '__main__':
@@ -14,9 +14,15 @@ from loguru import logger
14
14
 
15
15
 
16
16
  def update_null_zt_reason(str_day):
17
- query = {"str_day": str_day, "$or": [{"zt_reason": "0", },
17
+ query = {"str_day": str_day, "$or": [{"zt_reason": "0"},
18
18
  {"zt_reason": ""},
19
- {"zt_reason": float('nan')}]}
19
+ {"zt_reason": float('nan')},
20
+
21
+ {"zt_analysis": "0"},
22
+ {"zt_analysis": ""},
23
+ {"zt_analysis": float('nan')},
24
+
25
+ ]}
20
26
  stock_zt_pool_df_null_zt_reason = mongodb_util.find_query_data('stock_zt_pool', query)
21
27
  if data_frame_util.is_empty(stock_zt_pool_df_null_zt_reason):
22
28
  return None
@@ -24,24 +30,29 @@ def update_null_zt_reason(str_day):
24
30
  repeat_number = 0
25
31
  # 循环10次
26
32
  while len(no_reason_list) > 0 and repeat_number < 10:
27
- ths_zt_pool_df_data = ths_stock_zt_pool_api.get_zt_reason(str_day)
33
+
28
34
  for stock_zt_one in stock_zt_pool_df_null_zt_reason.itertuples():
29
35
  try:
30
- ths_pool_zt_reason_one_df = ths_zt_pool_df_data.loc[
31
- ths_zt_pool_df_data['symbol'] == stock_zt_one.symbol]
32
- if data_frame_util.is_not_empty(ths_pool_zt_reason_one_df):
33
- stock_zt_pool_df_one_df = stock_zt_pool_df_null_zt_reason.loc[
34
- stock_zt_pool_df_null_zt_reason['symbol'] == stock_zt_one.symbol]
35
- stock_zt_pool_df_one_df['zt_reason'] = list(ths_pool_zt_reason_one_df['zt_reason'])[0]
36
- mongodb_util.save_mongo(stock_zt_pool_df_one_df, 'stock_zt_pool')
36
+ # 涨停原因
37
+ stock_zt_pool_df_one_df = stock_zt_pool_df_null_zt_reason.loc[
38
+ stock_zt_pool_df_null_zt_reason['symbol'] == stock_zt_one.symbol]
39
+ # 涨停分析
40
+ zt_result_dict = ths_stock_zt_pool_api.zt_analyse_reason(stock_zt_one.symbol)
41
+ zt_analysis = zt_result_dict['zt_analyse_detail']
42
+ zt_reason = zt_result_dict['zt_reason']
43
+
44
+ stock_zt_pool_df_one_df['zt_analysis'] = zt_analysis
45
+ stock_zt_pool_df_one_df['zt_reason'] = zt_reason
46
+
47
+ mongodb_util.save_mongo(stock_zt_pool_df_one_df, 'stock_zt_pool')
48
+ if stock_zt_one.symbol in no_reason_list:
37
49
  no_reason_list.remove(stock_zt_one.symbol)
38
50
  except BaseException as e:
39
51
  logger.error("出现异常:{},{}", stock_zt_one.symbol, e)
40
52
  continue
41
53
  repeat_number = repeat_number + 1
42
-
43
54
  return stock_zt_pool_df_null_zt_reason
44
55
 
45
56
 
46
57
  if __name__ == '__main__':
47
- update_null_zt_reason('2024-12-12')
58
+ update_null_zt_reason('2025-11-14')
@@ -134,8 +134,8 @@ def col_data_move():
134
134
 
135
135
  if __name__ == '__main__':
136
136
  # todo 修改日期
137
- str_day = '2025-10-16'
138
- col_data_move()
137
+ str_day = '2025-11-13'
138
+ # col_data_move()
139
139
  sync_daily_data_info()
140
140
  sync_stock_zt_pool()
141
141
  sync_stock_dt_pool()
@@ -321,7 +321,7 @@ def sync_position():
321
321
  # 同步持仓
322
322
  if trade_date_common_service_api.is_trade_day(str_day):
323
323
  logger.info('同步持仓任务完成')
324
- sync_position_api.sync_position()
324
+ sync_position_api.sync_position_qmt()
325
325
 
326
326
 
327
327
  # 同步开盘啦当日精选指数行情数据
@@ -354,7 +354,7 @@ def sync_all_interactive_questions():
354
354
  tag = bool(1 - trade_date_common_service_api.is_trade_day(str_day))
355
355
  if tag:
356
356
  logger.info('同步互动回答')
357
- stock_irm_cninfo_service.sync_all_interactive_questions(None)
357
+ stock_irm_cninfo_service.sync_symbols_interactive_questions([])
358
358
 
359
359
 
360
360
  # # 重开定时任务同步
@@ -448,7 +448,7 @@ def check_k_line_sync_count():
448
448
 
449
449
  # 同步公司产品区域信息
450
450
  def sync_company_product_area_industry():
451
- sync_company_product_area_industry_api.sync_company_product_area_industry(None)
451
+ sync_company_product_area_industry_api.sync_company_product_area_industry_task(None)
452
452
 
453
453
 
454
454
  # # 定义BlockingScheduler
@@ -474,7 +474,7 @@ blockingScheduler.add_job(sync_position, 'cron', hour='0,08,09', minute='14')
474
474
  blockingScheduler.add_job(update_company_base_info, 'cron', hour='08,18', minute='05')
475
475
 
476
476
  # 同步互动回答
477
- blockingScheduler.add_job(sync_all_interactive_questions, 'cron', hour='08,12,17', minute='06')
477
+ blockingScheduler.add_job(sync_all_interactive_questions, 'cron', hour='06,17', minute='30')
478
478
 
479
479
  # 同步十大流通股东信息
480
480
  blockingScheduler.add_job(sync_stock_gdfx_free_top_10_one_day, 'cron', hour='06,18', minute='05')
@@ -566,7 +566,7 @@ blockingScheduler.add_job(sync_all_kpl_plate_info, 'interval', minutes=5, max_in
566
566
  # blockingScheduler.add_job(sync_company_announce, 'cron', hour='07,18,23', minute='33')
567
567
 
568
568
  # check 前复权k线和下一个交易日策略k线数据同步状态
569
- blockingScheduler.add_job(check_k_line_sync_count, 'cron', hour='0,23', minute='10')
569
+ blockingScheduler.add_job(check_k_line_sync_count, 'cron', hour='6,23', minute='10')
570
570
 
571
571
  # 同步公司产品区域信息
572
572
  blockingScheduler.add_job(sync_company_product_area_industry, 'cron', day_of_week='sat,sun', hour='10,20',
@@ -576,4 +576,4 @@ print('定时任务启动成功')
576
576
  blockingScheduler.start()
577
577
  #
578
578
  # if __name__ == '__main__':
579
- # generate_new_day_k_line_info()
579
+ # sync_company_product_area_industry()
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-scheduler
3
- Version: 1.4.0.2
3
+ Version: 1.4.3.0
4
4
 
@@ -3,17 +3,17 @@ mns_scheduler/company_info/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlI
3
3
  mns_scheduler/company_info/announce/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
4
4
  mns_scheduler/company_info/announce/company_announce_sync_service.py,sha256=q8zYOZJmRin_QU2uPk52wngNdgnZooabnfrnqzqFIrM,3055
5
5
  mns_scheduler/company_info/base/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
6
- mns_scheduler/company_info/base/sync_company_base_info_api.py,sha256=SIBQqUbAZXGCfAoYq78McvIZ6vrttlCfAlqhZl23z9U,21050
7
- mns_scheduler/company_info/base/sync_company_hold_info_api.py,sha256=ep9CthkoL_NNqkZgAeAdZqaf7_LNFDCrZonUjrT7w5o,1587
8
- mns_scheduler/company_info/base/sync_company_product_area_industry.py,sha256=g1g3NvJFteKMKkovoLrfL5MZovFnj_K4uWdB9EVzviY,7529
6
+ mns_scheduler/company_info/base/sync_company_base_info_api.py,sha256=QAwzK7lex_BuDYwA02XNWiS8xCB402LEisdCnbcUzfo,24393
7
+ mns_scheduler/company_info/base/sync_company_hold_info_api.py,sha256=XEdJzDt6RQqzZOv4mEOFfeh7q7LPTTNWNwT0AR1zHJc,1409
8
+ mns_scheduler/company_info/base/sync_company_product_area_industry.py,sha256=fEWvYjknjC19yUiitfCdQeFKt77tfYQDSJv1bv1ZSXY,7295
9
9
  mns_scheduler/company_info/clean/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
10
- mns_scheduler/company_info/clean/company_info_clean_api.py,sha256=P_-Nms6S1nVyqVOFKDT-Cq1RvriZV4IMz9eZCDF5Ovk,6104
10
+ mns_scheduler/company_info/clean/company_info_clean_api.py,sha256=vm6gr2yKoMpIFRmsz_EvKfd_7ItbfInjkISHhKWHqBA,6102
11
11
  mns_scheduler/company_info/constant/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
12
- mns_scheduler/company_info/constant/company_constant_data.py,sha256=0qhRXLASsQlYnJe_vy5HCwNQZWz-hmJslbr9VuBnmGY,22486
12
+ mns_scheduler/company_info/constant/company_constant_data.py,sha256=7emiXUeAla8nfyYYauGjsMarfY3ckN4TgYlON477jQE,22566
13
13
  mns_scheduler/company_info/de_list_stock/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
14
14
  mns_scheduler/company_info/de_list_stock/de_list_stock_service.py,sha256=QNtKc1ZI6xHjupcxbOBN7fBhi6oAGtL7X1TQZVzfpnk,1993
15
15
  mns_scheduler/company_info/em_stock_info/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
16
- mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py,sha256=csPArPy7IZPcycvEB3vl1ENVsrkcv0db5dMxVXIfn0c,3738
16
+ mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py,sha256=9NIv8HRAgjGFcTnw_i9YGQzQBZc57T2hdt66ciZcMZY,3922
17
17
  mns_scheduler/company_info/remark/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
18
18
  mns_scheduler/company_info/remark/company_remark_info_sync.py,sha256=L8wC8LU7-GYZb1TyKLjODJURROOEO4izZBxnWEM7Ahc,2334
19
19
  mns_scheduler/concept/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
@@ -46,8 +46,6 @@ mns_scheduler/db/script/sync/sync_hui_ce_test_data.py,sha256=oymZRnt-cMnrrHod796
46
46
  mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py,sha256=32F7kmxgube7F-_9-QhAHdjqWAQfRZZ51p7MdKi1u6I,2172
47
47
  mns_scheduler/db/script/update/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
48
48
  mns_scheduler/db/script/update/update_col_field.py,sha256=m7RJbNLTcaeknwHR50i3aebT--Rc6udpbOqyGwt61qg,1274
49
- mns_scheduler/debt/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
50
- mns_scheduler/debt/kzz_bond_info_sync.py,sha256=FOefhRDqSN1YRqY6drCN3p6PgzVD_isWQ15l9OllCGI,1346
51
49
  mns_scheduler/dt/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
52
50
  mns_scheduler/dt/stock_dt_pool_sync.py,sha256=5ivRUOnFtOapZniwTbujf1lVq3y4btm2Cmd5R6JJAVo,3466
53
51
  mns_scheduler/finance/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
@@ -58,7 +56,7 @@ mns_scheduler/finance/em/em_financial_profit_sync_service_api.py,sha256=j5xnzcSt
58
56
  mns_scheduler/finance/em/finance_common_api.py,sha256=rqsVJZEklJjvM9ogl-9GQaWxyh1LE6IKoTkQkN5cBvE,2453
59
57
  mns_scheduler/finance/xue_qiu/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
60
58
  mns_scheduler/finance/xue_qiu/down_load_xueqiu_report_api.py,sha256=r_RtfM2SBzQcvO1MH8Dt8mOXg2tbZOLz0sNwqne9jFs,2769
61
- mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py,sha256=SqJhq57BHyz0pJbLLv1fqfmhtapxQFT_OdNNL7v4wgk,7275
59
+ mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py,sha256=aRqNPqnyCP_sKl7afdk3Xrfa9IRCbU6MDK3_AlxTDBQ,7218
62
60
  mns_scheduler/hk/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
63
61
  mns_scheduler/hk/hk_company_info_sync_service_api.py,sha256=MGIKodN9oXaY0iwtdsrg4wwHXkMglFvY8eyeTpbas6k,3724
64
62
  mns_scheduler/hk/hk_industry_info_sync_service_api.py,sha256=WdCTaBi4GDicWfmiYbI-byBCXZwknkYZHk6y2IloMys,2275
@@ -67,14 +65,14 @@ mns_scheduler/industry/ths/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlI
67
65
  mns_scheduler/industry/ths/ths_industry_index_service.py,sha256=MHvzUsDHnmdQn-mJc_D2uBKP0qvVWWagDV568xChPqg,2686
68
66
  mns_scheduler/industry/ths/ths_industry_sync_service.py,sha256=r0jLbY3JcnCGgLWYzRrXiqIbeT8PBGnG2dT_INuN824,2762
69
67
  mns_scheduler/irm/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
70
- mns_scheduler/irm/stock_irm_cninfo_service.py,sha256=CWNJ5O-Rx3X2c3YcVRJ2L6VWq77aHq7Ee3wPpUBPNSA,9730
68
+ mns_scheduler/irm/stock_irm_cninfo_service.py,sha256=ChOl_zWNSCXpj-NlveLaSsfie8hARusU4Ut1V_LAeOc,9759
71
69
  mns_scheduler/irm/api/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
72
70
  mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py,sha256=EE09q9iIPNAEzxhKCM-2tsm1FZID3-fqdfikK1VS6H8,4931
73
71
  mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py,sha256=iJ9K8FhatQpCx5PqusIH5x4MAw3F1v3fYC1Ztsp_2Zw,6199
74
72
  mns_scheduler/k_line/__init__.py,sha256=ffZXFCLFdIwOsbxnw__u1MbQYh9yz7Bs8UMP6VF0X2M,161
75
73
  mns_scheduler/k_line/clean/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
76
74
  mns_scheduler/k_line/clean/k_line_info_clean_impl.py,sha256=ZTnSpQ2zKnNPWCkHKPJkLdkxVK29szgufxNV6uvXG7s,1344
77
- mns_scheduler/k_line/clean/k_line_info_clean_task.py,sha256=htllTDOmzJLhhdpHTEgAn03iSlJT7D8GQOhhdnwDktc,8852
75
+ mns_scheduler/k_line/clean/k_line_info_clean_task.py,sha256=i-6XSHUC6NxgZubCfU8NGyA0YHHMgi1b-xxlrRhg-is,9026
78
76
  mns_scheduler/k_line/clean/daily/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
79
77
  mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py,sha256=gIoInwd1eCKCmhIOJHo8MuNEwj8ehMxYw83j52pxmxk,20447
80
78
  mns_scheduler/k_line/clean/daily/daily_k_line_service.py,sha256=1S-6sih0KptZEWYBN3jgVJHlv5y11QPONYjR-MpOQn8,6906
@@ -124,13 +122,13 @@ mns_scheduler/risk/self/wei_pan_stock_api.py,sha256=ac_hhdwoK8-uI_ag40YEj4iTOkB8
124
122
  mns_scheduler/risk/test/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
125
123
  mns_scheduler/risk/test/fix_blask_list.py,sha256=IRDedHWuTi9y8EIZSwdiRxEUZcYAY3TH15GgJRmnQEw,1245
126
124
  mns_scheduler/risk/transactions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
- mns_scheduler/risk/transactions/transactions_check_api.py,sha256=fSHa15GlmzT-fnsYBTlhigKkXHHmO4JIUjpwQ66fszE,7379
125
+ mns_scheduler/risk/transactions/transactions_check_api.py,sha256=8lXid7P8NTVW9aPKS-v6Tv0wiseCnasVQQzD9sR49XI,7379
128
126
  mns_scheduler/self_choose/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
129
- mns_scheduler/self_choose/ths_self_choose_service.py,sha256=8GYkl7GwZWypcCYttFgmwVZlQqBIloOk1g-H1-Vznw8,6832
127
+ mns_scheduler/self_choose/ths_self_choose_service.py,sha256=g3w4DBE_BGo-ey4Sj_Z5wqjUugTrMBAjEpGcoDGPyHE,7155
130
128
  mns_scheduler/trade/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
131
129
  mns_scheduler/trade/auto_ipo_buy_api.py,sha256=jVe5ZiXwzkDy_j_4X4rUamSzJpmzhV16lNKwbeWgpQw,386
132
130
  mns_scheduler/trade/auto_sell_service_api.py,sha256=A2RB3WFxVHqbNPaPvhIgO-3uaicFZVmBKUy2TsfMU90,4624
133
- mns_scheduler/trade/sync_position_api.py,sha256=eGJAL1WoP_WwDloKQqeUXZUqtQv8G6VlODe8EDhmgMY,2748
131
+ mns_scheduler/trade/sync_position_api.py,sha256=o73_qdh_2uzOed6HFzAipM5hKOLqVhThph2DcAri3Oc,4136
134
132
  mns_scheduler/trade/auto_login/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
135
133
  mns_scheduler/trade/auto_login/trader_auto_service.py,sha256=bsagj26s74Zv5OEyGahhBX_OK4Iuo5ZmuItsON9DDmY,795
136
134
  mns_scheduler/trade/balance/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
@@ -157,15 +155,15 @@ mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py,sha256=k2nrBjG41LU4
157
155
  mns_scheduler/zt/script/sync_high_chg_pool_his_data.py,sha256=WX5ZlV0x2kkXiLTep8fcs2ZkWY5BMWS8lQv8xpq4DlY,1685
158
156
  mns_scheduler/zt/script/sync_now_higt_chg_zt.py,sha256=7qUtn58ty9Vc6kY33BooCDIOojDGmSf9U5ncAtZt4cc,1853
159
157
  mns_scheduler/zt/zt_pool/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJwu55bOq0,165
160
- mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py,sha256=LOEUyTA5g7N6FWxUpHWimWTeXiiMAnUdsYqhG4HpuOY,12154
158
+ mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py,sha256=LP2g24LMDHaVolEttNhWtkKn2oSLJPrsmaJISt9CCRA,13108
161
159
  mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py,sha256=LI4o4_sovmLj1tMROPRQRCj5gaITKLGoYH-nUCuysbU,7501
162
- mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py,sha256=caW-MuF0RFLavJZafeLDYQ29-GxwGsmr5YVrN4lost8,2135
160
+ mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py,sha256=A-qohVTrnSd8Bs9gubjxScGjB7zEZOBLJuVZfuIwLeU,2445
163
161
  mns_scheduler/zz_task/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
164
- mns_scheduler/zz_task/data_sync_task.py,sha256=V17cYsn_NxmbJoPG_AFcqrps1XzQF-wMPah7oe9ZMlo,23531
162
+ mns_scheduler/zz_task/data_sync_task.py,sha256=GbOJ0DhHVxTAz9W09POLZl3AzYFlTsPP7Q1VikSfQkY,23545
165
163
  mns_scheduler/zz_task/compensation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
164
  mns_scheduler/zz_task/compensation/compensate_task.py,sha256=Dyo66NcSnXZ-Cne4_v77BBb27SemAiuGXRLnvQ26X0E,6464
167
- mns_scheduler/zz_task/compensation/compensate_task_one_day.py,sha256=ize69Ocy1k5rf8Xckk1izcEJ361HBtWH1zoJrScBS28,5751
168
- mns_scheduler-1.4.0.2.dist-info/METADATA,sha256=B8qLX6Sn2V_umRcLHuql5aZWAjHMZuvtCepnb5OzzJI,64
169
- mns_scheduler-1.4.0.2.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
170
- mns_scheduler-1.4.0.2.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
171
- mns_scheduler-1.4.0.2.dist-info/RECORD,,
165
+ mns_scheduler/zz_task/compensation/compensate_task_one_day.py,sha256=jvaYpUS8AyJHgJTNchbco6eXMSzW1o4YNHgUBqrRTDk,5753
166
+ mns_scheduler-1.4.3.0.dist-info/METADATA,sha256=MPMKv5kiMXNq_AFqGA3lCDRd1e6tf0p_WmjFgHyJrXY,64
167
+ mns_scheduler-1.4.3.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
168
+ mns_scheduler-1.4.3.0.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
169
+ mns_scheduler-1.4.3.0.dist-info/RECORD,,
@@ -1,7 +0,0 @@
1
- import sys
2
- import os
3
-
4
- file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 17
6
- project_path = file_path[0:end]
7
- sys.path.append(project_path)
@@ -1,33 +0,0 @@
1
- import sys
2
- import os
3
-
4
- file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 17
6
- project_path = file_path[0:end]
7
- sys.path.append(project_path)
8
- import mns_common.api.em.real_time.east_money_debt_api as east_money_debt_api
9
- from datetime import datetime
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
-
15
-
16
- # 同步可转债信息
17
- def sync_debt_info():
18
- now_date = datetime.now()
19
- str_now_day = now_date.strftime('%Y-%m-%d')
20
- kzz_bond_info_df = east_money_debt_api.get_kzz_bond_info()
21
- kzz_bond_info_df = kzz_bond_info_df.fillna(0)
22
- kzz_bond_info_df['apply_date'] = kzz_bond_info_df['apply_date'].astype(str)
23
- kzz_bond_info_df['winning_date'] = kzz_bond_info_df['winning_date'].astype(str)
24
- kzz_bond_info_df['list_date'] = kzz_bond_info_df['list_date'].astype(str)
25
- kzz_bond_info_df['due_date'] = kzz_bond_info_df['due_date'].astype(str)
26
- kzz_bond_info_df = kzz_bond_info_df.loc[kzz_bond_info_df['due_date'] >= str_now_day]
27
- mongodb_util.remove_all_data(db_name_constant.KZZ_DEBT_INFO)
28
- kzz_bond_info_df['_id'] = kzz_bond_info_df['symbol']
29
- mongodb_util.insert_mongo(kzz_bond_info_df, db_name_constant.KZZ_DEBT_INFO)
30
-
31
-
32
- if __name__ == '__main__':
33
- sync_debt_info()